diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df79c60c3..010747336 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,14 +6,15 @@ on: release_force: # see https://python-semantic-release.readthedocs.io/en/latest/github-action.html#command-line-options description: | - Force release be one of: [major | minor | patch] + Force release be one of: [major | minor | patch | prerelease] Leave empty for auto-detect based on commit messages. type: choice options: - - "" # auto - no force - - major # force major - - minor # force minor - - patch # force patch + - "" # auto - no force + - major # force major + - minor # force minor + - patch # force patch + - prerelease # force prerelease default: "" required: false prerelease_token: diff --git a/cyclonedx_py/__init__.py b/cyclonedx_py/__init__.py index 56a0b055f..b2441170a 100644 --- a/cyclonedx_py/__init__.py +++ b/cyclonedx_py/__init__.py @@ -17,7 +17,7 @@ # !! version is managed by `semantic_release` # do not use typing here, or else `semantic_release` might have issues finding the variable -__version__ = "6.1.3" # noqa:Q000 +__version__ = "7.0.1-alpha.2" # noqa:Q000 # There is no stable/public API. # However, you might call the stable CLI instead, like so: diff --git a/cyclonedx_py/_internal/cli_common.py b/cyclonedx_py/_internal/cli_common.py index 5daef3084..cd6b943f8 100644 --- a/cyclonedx_py/_internal/cli_common.py +++ b/cyclonedx_py/_internal/cli_common.py @@ -29,9 +29,10 @@ def add_argument_pyproject(p: 'ArgumentParser') -> 'Action': return p.add_argument('--pyproject', metavar='', - help="Path to the root component's `pyproject.toml` file. " + help="Path to the root component's `pyproject.toml` file.\n" 'This should point to a file compliant with PEP 621 ' - '(storing project metadata).', + '(Storing project metadata in pyproject.toml). ' + 'Supports PEP 639 (Improving License Clarity with Better Package Metadata). ', dest='pyproject_file', default=None) diff --git a/cyclonedx_py/_internal/environment.py b/cyclonedx_py/_internal/environment.py index 81a5e64d2..c6dd5f9a3 100644 --- a/cyclonedx_py/_internal/environment.py +++ b/cyclonedx_py/_internal/environment.py @@ -27,21 +27,18 @@ from textwrap import dedent from typing import TYPE_CHECKING, Any, Optional +from cyclonedx.factory.license import LicenseFactory from cyclonedx.model import Property -from cyclonedx.model.component import ( # type:ignore[attr-defined] # ComponentEvidence was moved, but is still importable - ignore/wont-fix for backwards compatibility # noqa:E501 - Component, - ComponentEvidence, - ComponentType, -) +from cyclonedx.model.component import Component, ComponentType from packageurl import PackageURL from packaging.requirements import Requirement from . import BomBuilder, PropertyName, PurlTypePypi from .cli_common import add_argument_mc_type, add_argument_pyproject -from .utils.cdx import find_LicenseExpression, licenses_fixup, make_bom +from .utils.cdx import licenses_fixup, make_bom from .utils.packaging import metadata2extrefs, metadata2licenses, normalize_packagename from .utils.pep610 import PackageSourceArchive, PackageSourceVcs, packagesource2extref, packagesource4dist -from .utils.pep639 import dist2licenses as dist2licenses_pep639 +from .utils.pep639 import dist2licenses_from_files as pep639_dist2licenses_from_files from .utils.pyproject import pyproject2component, pyproject2dependencies, pyproject_load if TYPE_CHECKING: # pragma: no cover @@ -114,12 +111,6 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': • Build an SBOM from uv environment: $ %(prog)s "$(uv python find)" """) - p.add_argument('--PEP-639', - action='store_true', - dest='pep639', - help='Enable license gathering according to PEP 639 ' - '(improving license clarity with better package metadata).\n' - 'The behavior may change during the draft development of the PEP.') p.add_argument('--gather-license-texts', action='store_true', dest='gather_license_texts', @@ -140,11 +131,9 @@ def make_argument_parser(**kwargs: Any) -> 'ArgumentParser': def __init__(self, *, logger: 'Logger', - pep639: bool, gather_license_texts: bool, **__: Any) -> None: self._logger = logger - self._pep639 = pep639 self._gather_license_texts = gather_license_texts def __call__(self, *, # type:ignore[override] @@ -156,7 +145,10 @@ def __call__(self, *, # type:ignore[override] rc = None else: pyproject = pyproject_load(pyproject_file) - root_c = pyproject2component(pyproject, ctype=mc_type, fpath=pyproject_file) + root_c = pyproject2component(pyproject, ctype=mc_type, + fpath=pyproject_file, + gather_license_texts=self._gather_license_texts, + logger=self._logger) root_c.bom_ref.value = 'root-component' root_d = tuple(pyproject2dependencies(pyproject)) rc = (root_c, root_d) @@ -189,25 +181,17 @@ def __add_components(self, bom: 'Bom', name=dist_name, version=dist_version, description=dist_meta['Summary'] if 'Summary' in dist_meta else None, - licenses=licenses_fixup(metadata2licenses(dist_meta)), external_references=metadata2extrefs(dist_meta), # path of dist-package on disc? naaa... a package may have multiple files/folders on disc ) - if self._pep639: - pep639_licenses = list(dist2licenses_pep639(dist, self._gather_license_texts, self._logger)) - pep639_lexp = find_LicenseExpression(pep639_licenses) - if pep639_lexp is not None: - component.licenses = (pep639_lexp,) - pep639_licenses.remove(pep639_lexp) - if len(pep639_licenses) > 0: - if find_LicenseExpression(component.licenses) is None: - component.licenses.update(pep639_licenses) - else: - # hack for preventing expressions AND named licenses. - # see https://github.com/CycloneDX/cyclonedx-python/issues/826 - # see https://github.com/CycloneDX/specification/issues/454 - component.evidence = ComponentEvidence(licenses=pep639_licenses) - del pep639_lexp, pep639_licenses + + # region licenses + component.licenses.update(metadata2licenses(dist_meta, LicenseFactory(), + gather_texts=self._gather_license_texts)) + if self._gather_license_texts: + component.licenses.update(pep639_dist2licenses_from_files(dist, logger=self._logger)) + licenses_fixup(component) + # endregion licenses del dist_meta, dist_name, dist_version self.__component_add_extref_and_purl(component, packagesource4dist(dist)) diff --git a/cyclonedx_py/_internal/pipenv.py b/cyclonedx_py/_internal/pipenv.py index 6cbf1c564..0c1d5997d 100644 --- a/cyclonedx_py/_internal/pipenv.py +++ b/cyclonedx_py/_internal/pipenv.py @@ -132,7 +132,8 @@ def __call__(self, *, # type:ignore[override] if pyproject_file is None: rc = None else: - rc = pyproject_file2component(pyproject_file, ctype=mc_type) + rc = pyproject_file2component(pyproject_file, ctype=mc_type, + gather_license_texts=False, logger=self._logger) rc.bom_ref.value = 'root-component' return self._make_bom(rc, diff --git a/cyclonedx_py/_internal/py_interop/__init__.py b/cyclonedx_py/_internal/py_interop/__init__.py new file mode 100644 index 000000000..afde1c15d --- /dev/null +++ b/cyclonedx_py/_internal/py_interop/__init__.py @@ -0,0 +1,18 @@ +# This file is part of CycloneDX Python +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +"""this package contains polyfills and alike, so that all pyhton-versions support the same feature set.""" diff --git a/cyclonedx_py/_internal/py_interop/glob.py b/cyclonedx_py/_internal/py_interop/glob.py new file mode 100644 index 000000000..3ced6ddac --- /dev/null +++ b/cyclonedx_py/_internal/py_interop/glob.py @@ -0,0 +1,37 @@ +# This file is part of CycloneDX Python +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +__all__ = ['glob'] + +import sys +from glob import glob as _glob + +if sys.version_info >= (3, 10): + glob = _glob +else: + from os.path import join, sep + from typing import Optional + + def glob(pathname: str, *, root_dir: Optional[str] = None, recursive: bool = False) -> list[str]: + if root_dir is not None: + pathname = join(root_dir, pathname) + files = _glob(pathname, recursive=recursive) + if root_dir is not None: + if not root_dir.endswith(sep): + root_dir += sep + files = [f.removeprefix(root_dir) for f in files] + return files diff --git a/cyclonedx_py/_internal/py_interop/packagemetadata.py b/cyclonedx_py/_internal/py_interop/packagemetadata.py new file mode 100644 index 000000000..25b07c0fa --- /dev/null +++ b/cyclonedx_py/_internal/py_interop/packagemetadata.py @@ -0,0 +1,28 @@ +# This file is part of CycloneDX Python +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# Copyright (c) OWASP Foundation. All Rights Reserved. + +__all__ = ['PackageMetadata'] + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: # pragma: nocover + import sys + + if sys.version_info >= (3, 10): + from importlib.metadata import PackageMetadata + else: + from email.message import Message as PackageMetadata diff --git a/cyclonedx_py/_internal/requirements.py b/cyclonedx_py/_internal/requirements.py index 0e770c9bd..43b243bec 100644 --- a/cyclonedx_py/_internal/requirements.py +++ b/cyclonedx_py/_internal/requirements.py @@ -116,7 +116,8 @@ def __call__(self, *, # type:ignore[override] if pyproject_file is None: rc = None else: - rc = pyproject_file2component(pyproject_file, ctype=mc_type) + rc = pyproject_file2component(pyproject_file, ctype=mc_type, + gather_license_texts=False, logger=self._logger) rc.bom_ref.value = 'root-component' if requirements_file == '-': diff --git a/cyclonedx_py/_internal/utils/cdx.py b/cyclonedx_py/_internal/utils/cdx.py index b5100c6c8..3e331015c 100644 --- a/cyclonedx_py/_internal/utils/cdx.py +++ b/cyclonedx_py/_internal/utils/cdx.py @@ -27,7 +27,11 @@ from cyclonedx.builder.this import this_component as lib_component from cyclonedx.model import ExternalReference, ExternalReferenceType, XsUri from cyclonedx.model.bom import Bom -from cyclonedx.model.component import Component, ComponentType +from cyclonedx.model.component import ( # type:ignore[attr-defined] # ComponentEvidence was moved, but is still importable - ignore/wont-fix for backwards compatibility # noqa:E501 + Component, + ComponentEvidence, + ComponentType, +) from cyclonedx.model.license import DisjunctiveLicense, License, LicenseAcknowledgement, LicenseExpression from ... import __version__ as _THIS_VERSION # noqa:N812 @@ -95,11 +99,24 @@ def find_LicenseExpression(licenses: Iterable['License']) -> Optional[LicenseExp return None -def licenses_fixup(licenses: Iterable['License']) -> Iterable['License']: - licenses = set(licenses) - if (lexp := find_LicenseExpression(licenses)) is not None: - return (lexp,) - return licenses +def licenses_fixup(component: 'Component') -> None: + """ + Per CycloneDX spec, there must be EITHER one license expression OR multiple license id/name. + If there is an expression, it is used and everything else is moved to evidences, so it is not lost. + """ + # hack for preventing expressions AND named licenses. + # see https://github.com/CycloneDX/cyclonedx-python/issues/826 + # see https://github.com/CycloneDX/specification/issues/454 + licenses = list(component.licenses) + lexp = find_LicenseExpression(licenses) + if lexp is None: + return + component.licenses = (lexp,) + licenses.remove(lexp) + if len(licenses) > 0: + if component.evidence is None: + component.evidence = ComponentEvidence() + component.evidence.licenses.update(licenses) _MAP_KNOWN_URL_LABELS: dict[str, ExternalReferenceType] = { diff --git a/cyclonedx_py/_internal/utils/packaging.py b/cyclonedx_py/_internal/utils/packaging.py index 5b664bb3e..0b51003ef 100644 --- a/cyclonedx_py/_internal/utils/packaging.py +++ b/cyclonedx_py/_internal/utils/packaging.py @@ -20,44 +20,50 @@ from typing import TYPE_CHECKING from cyclonedx.exception.model import InvalidUriException -from cyclonedx.factory.license import LicenseFactory from cyclonedx.model import AttachedText, ExternalReference, ExternalReferenceType, XsUri from cyclonedx.model.license import DisjunctiveLicense, LicenseAcknowledgement from .cdx import url_label_to_ert -from .pep621 import classifiers2licenses +from .pep621 import classifiers2licenses as pep621_classifiers2licenses if TYPE_CHECKING: # pragma: no cover - import sys - + from cyclonedx.factory.license import LicenseFactory from cyclonedx.model.license import License - if sys.version_info >= (3, 10): - from importlib.metadata import PackageMetadata - else: - from email.message import Message as PackageMetadata + from ..py_interop.packagemetadata import PackageMetadata -def metadata2licenses(metadata: 'PackageMetadata') -> Generator['License', None, None]: - lfac = LicenseFactory() +def metadata2licenses(metadata: 'PackageMetadata', lfac: 'LicenseFactory', + gather_texts: bool + ) -> Generator['License', None, None]: lack = LicenseAcknowledgement.DECLARED - if 'Classifier' in metadata: - # see spec: https://packaging.python.org/en/latest/specifications/core-metadata/#classifier-multiple-use - classifiers: list[str] = metadata.get_all('Classifier') # type:ignore[assignment] - yield from classifiers2licenses(classifiers, lfac, lack) - for mlicense in set(metadata.get_all('License', ())): - # see spec: https://packaging.python.org/en/latest/specifications/core-metadata/#license - if len(mlicense) <= 0: - continue - license = lfac.make_from_string(mlicense, - license_acknowledgement=lack) - if isinstance(license, DisjunctiveLicense) and license.id is None: - # per spec, `License` is either a SPDX ID/Expression, or a license text(not name!) - yield DisjunctiveLicense(name=f"declared license of '{metadata['Name']}'", - acknowledgement=lack, - text=AttachedText(content=mlicense)) - else: - yield license + if (lexp := metadata.get('License-Expression')) is not None: + # see https://packaging.python.org/en/latest/specifications/license-expression/ + # see spec: https://peps.python.org/pep-0639/#add-license-expression-field + # Use `make_from_string` to have simple SPDX expressions that are just one disjunctive license + # to be simplified to a CycloneDX license ID. And we get error resilence for free, as invalid + # expressions are converted to CycloneDX named licenses. + yield lfac.make_from_string(lexp, + license_acknowledgement=lack) + # Per PEP 639: if License-Expression exists, the deprecated declarations MUST be ignored + else: + if 'Classifier' in metadata: + # see spec: https://packaging.python.org/en/latest/specifications/core-metadata/#classifier-multiple-use + classifiers: list[str] = metadata.get_all('Classifier') # type:ignore[assignment] + yield from pep621_classifiers2licenses(classifiers, lfac, lack) + for mlicense in set(metadata.get_all('License', ())): + # see spec: https://packaging.python.org/en/latest/specifications/core-metadata/#license + if len(mlicense) <= 0: + continue + license = lfac.make_from_string(mlicense, license_acknowledgement=lack) + if isinstance(license, DisjunctiveLicense) and license.id is None: + if gather_texts: + # per spec, `License` is either a SPDX ID/Expression, or a license text(not name!) + yield DisjunctiveLicense(name=f"declared license of '{metadata['Name']}'", + acknowledgement=lack, + text=AttachedText(content=mlicense)) + else: + yield license def metadata2extrefs(metadata: 'PackageMetadata') -> Generator['ExternalReference', None, None]: diff --git a/cyclonedx_py/_internal/utils/pep621.py b/cyclonedx_py/_internal/utils/pep621.py index 16138e6aa..add8ab8c8 100644 --- a/cyclonedx_py/_internal/utils/pep621.py +++ b/cyclonedx_py/_internal/utils/pep621.py @@ -30,16 +30,17 @@ from typing import TYPE_CHECKING, Any from cyclonedx.exception.model import InvalidUriException -from cyclonedx.factory.license import LicenseFactory from cyclonedx.model import AttachedText, Encoding, ExternalReference, XsUri from cyclonedx.model.component import Component from cyclonedx.model.license import DisjunctiveLicense, LicenseAcknowledgement from packaging.requirements import Requirement -from .cdx import licenses_fixup, url_label_to_ert +from .cdx import url_label_to_ert from .license_trove_classifier import is_license_trove, license_trove2spdx +from .mimetypes import guess_type -if TYPE_CHECKING: +if TYPE_CHECKING: # pragma: nocover + from cyclonedx.factory.license import LicenseFactory from cyclonedx.model.component import ComponentType from cyclonedx.model.license import License @@ -53,7 +54,8 @@ def classifiers2licenses(classifiers: Iterable[str], lfac: 'LicenseFactory', license_acknowledgement=lack) -def project2licenses(project: dict[str, Any], lfac: 'LicenseFactory', *, +def project2licenses(project: dict[str, Any], lfac: 'LicenseFactory', + gather_text: bool, *, fpath: str) -> Generator['License', None, None]: lack = LicenseAcknowledgement.DECLARED if classifiers := project.get('classifiers'): @@ -69,23 +71,32 @@ def project2licenses(project: dict[str, Any], lfac: 'LicenseFactory', *, # per spec: # > These keys are mutually exclusive, so a tool MUST raise an error if the metadata specifies both keys. raise ValueError('`license.file` and `license.text` are mutually exclusive,') - if 'file' in plicense: - # per spec: - # > [...] a string value that is a relative file path [...]. - # > Tools MUST assume the file’s encoding is UTF-8. - with open(join(dirname(fpath), *PurePosixPath(plicense['file']).parts), 'rb') as plicense_fileh: - yield DisjunctiveLicense(name=f"declared license of '{project['name']}'", - acknowledgement=lack, - text=AttachedText(encoding=Encoding.BASE_64, - content=b64encode(plicense_fileh.read()).decode())) + if len(plicense_file := plicense.get('file', '')) > 0: + if gather_text: + # Per PEP 621 spec: + # > [...] a string value that is a relative file path [...]. + # > Tools MUST assume the file’s encoding is UTF-8. + # But in reality, we found non-printable bytes in some files! + with open(join(dirname(fpath), *PurePosixPath(plicense_file).parts), 'rb') as plicense_fileh: + content_type = guess_type(plicense_file) or AttachedText.DEFAULT_CONTENT_TYPE + yield DisjunctiveLicense( + name=f"declared license of '{project['name']}'", + acknowledgement=lack, + text=AttachedText( + content_type=content_type, + encoding=Encoding.BASE_64, + content=b64encode( + plicense_fileh.read() + ).decode('ascii'))) elif len(plicense_text := plicense.get('text', '')) > 0: - license = lfac.make_from_string(plicense_text, - license_acknowledgement=lack) + license = lfac.make_from_string(plicense_text, license_acknowledgement=lack) if isinstance(license, DisjunctiveLicense) and license.id is None: - # per spec, `License` is either a SPDX ID/Expression, or a license text(not name!) - yield DisjunctiveLicense(name=f"declared license of '{project['name']}'", - acknowledgement=lack, - text=AttachedText(content=plicense_text)) + if gather_text: + # per spec, `License` is either a SPDX ID/Expression, or a license text(not name!) + yield DisjunctiveLicense( + name=f"declared license of '{project['name']}'", + acknowledgement=lack, + text=AttachedText(content=plicense_text)) else: yield license # Silently skip any other types (including string/PEP 639) @@ -104,15 +115,15 @@ def project2extrefs(project: dict[str, Any]) -> Generator['ExternalReference', N def project2component(project: dict[str, Any], *, - ctype: 'ComponentType', fpath: str) -> 'Component': + ctype: 'ComponentType') -> 'Component': dynamic = project.get('dynamic', ()) return Component( type=ctype, name=project['name'], version=project.get('version', None) if 'version' not in dynamic else None, description=project.get('description', None) if 'description' not in dynamic else None, - licenses=licenses_fixup(project2licenses(project, LicenseFactory(), fpath=fpath)), external_references=project2extrefs(project), + # licenses are not gathered here per default, they may be sourced otherwise # TODO add more properties according to spec ) diff --git a/cyclonedx_py/_internal/utils/pep639.py b/cyclonedx_py/_internal/utils/pep639.py index 03f93bcff..9569241eb 100644 --- a/cyclonedx_py/_internal/utils/pep639.py +++ b/cyclonedx_py/_internal/utils/pep639.py @@ -23,72 +23,104 @@ from base64 import b64encode from collections.abc import Generator -from os.path import join -from typing import TYPE_CHECKING +from os.path import dirname, join +from pathlib import Path, PurePosixPath +from typing import TYPE_CHECKING, Any, Union -from cyclonedx.factory.license import LicenseFactory from cyclonedx.model import AttachedText, Encoding from cyclonedx.model.license import DisjunctiveLicense, LicenseAcknowledgement -from .bytes import bytes2str +from ..py_interop.glob import glob from .mimetypes import guess_type if TYPE_CHECKING: # pragma: no cover from importlib.metadata import Distribution from logging import Logger + from cyclonedx.factory.license import LicenseFactory from cyclonedx.model.license import License -# per spec > license files are stored in the `.dist-info/licenses/` subdirectory of the produced wheel. -# but in practice, other locations are used, too. -_LICENSE_LOCATIONS = ('licenses', 'license_files', '') +def project2licenses(project: dict[str, Any], lfac: 'LicenseFactory', + gather_texts: bool, *, + fpath: str, + logger: 'Logger') -> Generator['License', None, None]: + lack = LicenseAcknowledgement.DECLARED + if isinstance(plicense := project.get('license'), str) \ + and len(plicense) > 0: + # https://peps.python.org/pep-0639/#add-string-value-to-license-key + yield lfac.make_from_string(plicense, + license_acknowledgement=lack) + if gather_texts and isinstance(plfiles := project.get('license-files'), list): + # https://peps.python.org/pep-0639/#add-license-files-key + plfiles_root = dirname(fpath) + for plfile_glob in plfiles: + for plfile in glob(join(*PurePosixPath(plfile_glob).parts), root_dir=plfiles_root, recursive=True): + # per spec: + # > Tools MUST assume that license file content is valid UTF-8 encoded text + # anyway, we don't trust this and assume binary + try: + plicense_fileh = open(join(plfiles_root, plfile), 'rb') + except Exception as err: # pragma: nocover + logger.debug('Error: failed to read license file %r for project %r: %r', + plfile, project.get('name', ''), err) + del err + continue + with plicense_fileh: + content = plicense_fileh.read() + yield _make_license_from_content(plfile, content, lack) + # Silently skip any other types (including string/PEP 621) + return None + + +# Per PEP 639 spec, license files are stored in the `.dist-info/` directory of the produced wheel. +# see https://peps.python.org/pep-0639/#add-license-file-field +# Put in reality, other locations are used, too... +_LICENSE_LOCATIONS = ('', 'licenses', 'license_files') -def dist2licenses( + +def dist2licenses_from_files( dist: 'Distribution', - gather_text: bool, logger: 'Logger' ) -> Generator['License', None, None]: - lfac = LicenseFactory() lack = LicenseAcknowledgement.DECLARED metadata = dist.metadata # see https://packaging.python.org/en/latest/specifications/core-metadata/ - if (lexp := metadata['License-Expression']) is not None: - # see spec: https://peps.python.org/pep-0639/#add-license-expression-field - yield lfac.make_from_string(lexp, - license_acknowledgement=lack) - if gather_text: - for mlfile in set(metadata.get_all('License-File', ())): - # see spec: https://peps.python.org/pep-0639/#add-license-file-field - # latest spec rev: https://discuss.python.org/t/pep-639-round-3-improving-license-clarity-with-better-package-metadata/53020 # noqa: E501 - content = None - for mlpath in _LICENSE_LOCATIONS: - try: - content = dist.read_text(join(mlpath, mlfile)) - except UnicodeDecodeError as err: - try: - content = bytes2str(err.object) - except UnicodeDecodeError: - pass - else: - break # for-loop - else: - if content is not None: - break # for-loop - if content is None: # pragma: no cover - logger.debug('Error: failed to read license file %r for dist %r', - mlfile, metadata['Name']) - continue - encoding = None - content_type = guess_type(mlfile) or AttachedText.DEFAULT_CONTENT_TYPE - # per default, license files are human-readable texts. - if not content_type.startswith('text/'): - encoding = Encoding.BASE_64 - content = b64encode(content.encode('utf-8')).decode('ascii') - yield DisjunctiveLicense( - name=f'declared license file: {mlfile}', - acknowledgement=lack, - text=AttachedText( - content=content, - encoding=encoding, - content_type=content_type - )) + for mlfile in set(metadata.get_all('License-File', ())): + # see spec: https://peps.python.org/pep-0639/#add-license-file-field + # latest spec rev: https://discuss.python.org/t/pep-639-round-3-improving-license-clarity-with-better-package-metadata/53020 # noqa: E501 + content: Union[None, str, bytes] = None + for mlpath in _LICENSE_LOCATIONS: + try: + content = dist.read_text(join(mlpath, mlfile)) + break # for-loop + except UnicodeDecodeError as err: + content = err.object + break # for-loop + except Exception: # pragma: nocover + pass # nosec B110 + if content is None: # pragma: no cover + logger.debug('Error: failed to read license file %r for dist %r', + mlfile, metadata['Name']) + continue # for-loop + yield _make_license_from_content(mlfile, content, lack) + + +def _make_license_from_content(file_name: str, content: Union[str, bytes], + lack: 'LicenseAcknowledgement') -> DisjunctiveLicense: + # Per PEP 639 spec, license files are human-readable texts. + # But in reality, we found non-printable bytes in some files! + # In the past, we did best-effort decoding to string, + # see https://github.com/CycloneDX/cyclonedx-python/blob/b7a8f64ae212c5a5fd6b7cf8c83851ba692df256/cyclonedx_py/_internal/utils/pep639.py#L67-L71 # noqa:E501 + # But this was dropped, in favour of base64 encoding; CycloneDX is for machines, not humans! + content_type = guess_type(file_name) or AttachedText.DEFAULT_CONTENT_TYPE + return DisjunctiveLicense( + name=f'{lack.value} license file: {"/".join(Path(file_name).parts)}', + acknowledgement=lack, + text=AttachedText( + content_type=content_type, + encoding=Encoding.BASE_64, + content=b64encode( + content + if isinstance(content, bytes) + else content.encode('utf-8') + ).decode('ascii'))) diff --git a/cyclonedx_py/_internal/utils/poetry.py b/cyclonedx_py/_internal/utils/poetry.py index 19cb88262..78adbb905 100644 --- a/cyclonedx_py/_internal/utils/poetry.py +++ b/cyclonedx_py/_internal/utils/poetry.py @@ -37,7 +37,6 @@ if TYPE_CHECKING: from cyclonedx.model.component import ComponentType - from cyclonedx.model.license import License def poetry2extrefs(poetry: dict[str, Any]) -> Generator['ExternalReference', None, None]: @@ -64,26 +63,27 @@ def poetry2extrefs(poetry: dict[str, Any]) -> Generator['ExternalReference', Non def poetry2component(poetry: dict[str, Any], *, ctype: 'ComponentType') -> 'Component': - licenses: list['License'] = [] - lfac = LicenseFactory() - lack = LicenseAcknowledgement.DECLARED - if 'classifiers' in poetry: - licenses.extend(classifiers2licenses(poetry['classifiers'], lfac, lack)) - if 'license' in poetry: - # per spec(https://python-poetry.org/docs/pyproject#license): - # the `license` is intended to be the name of a license, not the license text itself. - licenses.append(lfac.make_from_string(poetry['license'], - license_acknowledgement=lack)) - - return Component( + component = Component( type=ctype, name=poetry['name'], version=poetry.get('version'), description=poetry.get('description'), - licenses=licenses_fixup(licenses), external_references=poetry2extrefs(poetry), # TODO add more properties according to spec ) + # region licenses + lfac = LicenseFactory() + lack = LicenseAcknowledgement.DECLARED + if 'classifiers' in poetry: + component.licenses.update(classifiers2licenses(poetry['classifiers'], lfac, lack)) + if 'license' in poetry: + # per spec(https://python-poetry.org/docs/pyproject#license): + # the `license` is intended to be the name of a license, not the license text itself. + component.licenses.add(lfac.make_from_string(poetry['license'], + license_acknowledgement=lack)) + licenses_fixup(component) + # endregion licenses + return component def poetry2dependencies(poetry: dict[str, Any]) -> Generator['Requirement', None, None]: diff --git a/cyclonedx_py/_internal/utils/pyproject.py b/cyclonedx_py/_internal/utils/pyproject.py index a45efce02..1f98ab7fb 100644 --- a/cyclonedx_py/_internal/utils/pyproject.py +++ b/cyclonedx_py/_internal/utils/pyproject.py @@ -22,22 +22,48 @@ from collections.abc import Iterator from typing import TYPE_CHECKING, Any -from .pep621 import project2component, project2dependencies +from cyclonedx.factory.license import LicenseFactory + +from .cdx import licenses_fixup +from .pep621 import ( + project2component as pep621_project2component, + project2dependencies as pep621_project2dependencies, + project2licenses as pep621_project2licenses, +) +from .pep639 import project2licenses as pep639_project2licenses from .poetry import poetry2component, poetry2dependencies from .toml import toml_loads if TYPE_CHECKING: # pragma: no cover + from logging import Logger + from cyclonedx.model.component import Component, ComponentType from packaging.requirements import Requirement def pyproject2component(data: dict[str, Any], *, - ctype: 'ComponentType', fpath: str) -> 'Component': + ctype: 'ComponentType', + fpath: str, + gather_license_texts: bool, + logger: 'Logger' + ) -> 'Component': tool = data.get('tool', {}) if poetry := tool.get('poetry'): return poetry2component(poetry, ctype=ctype) if project := data.get('project'): - return project2component(project, ctype=ctype, fpath=fpath) + component = pep621_project2component(project, ctype=ctype) + # region licenses + lfac = LicenseFactory() + component.licenses.update(pep639_project2licenses(project, lfac, gather_license_texts, + fpath=fpath, logger=logger)) + if len(component.licenses) == 0: + # According to PEP 639 spec, if licenses are declared in the "new" style, + # all other license declarations MUST be ignored. + # https://peps.python.org/pep-0639/#converting-legacy-metadata + component.licenses.update(pep621_project2licenses(project, lfac, gather_license_texts, fpath=fpath)) + licenses_fixup(component) + # endregion licenses + return component raise ValueError('Unable to build component from pyproject') @@ -51,10 +77,15 @@ def pyproject_load(pyproject_file: str) -> dict[str, Any]: def pyproject_file2component(pyproject_file: str, *, - ctype: 'ComponentType') -> 'Component': + ctype: 'ComponentType', + gather_license_texts: bool, + logger: 'Logger' + ) -> 'Component': return pyproject2component( pyproject_load(pyproject_file), - ctype=ctype, fpath=pyproject_file + ctype=ctype, fpath=pyproject_file, + gather_license_texts=gather_license_texts, + logger=logger ) @@ -63,5 +94,5 @@ def pyproject2dependencies(data: dict[str, Any]) -> Iterator['Requirement']: if 'poetry' in tool: return poetry2dependencies(tool['poetry']) if 'project' in data: - return project2dependencies(data['project']) + return pep621_project2dependencies(data['project']) return iter(()) diff --git a/docs/conf.py b/docs/conf.py index ea39e4b83..b56c90020 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,7 +24,7 @@ # The full version, including alpha/beta/rc tags # !! version is managed by semantic_release -release = "6.1.3" +release = "7.0.1-alpha.2" # -- General configuration --------------------------------------------------- diff --git a/docs/usage.rst b/docs/usage.rst index 0c7e5c002..5cb7063fb 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -56,7 +56,7 @@ The full documentation can be issued by running with ``environment --help``: $ cyclonedx-py environment --help usage: cyclonedx-py environment [-h] [-v] - [--PEP-639] [--gather-license-texts] + [--gather-license-texts] [--short-PURLs] [--output-reproducible] [--validate | --no-validate] [-o ] [--sv ] [--of ] @@ -70,12 +70,10 @@ The full documentation can be issued by running with ``environment --help``: options: -h, --help show this help message and exit - --PEP-639 Enable license gathering according to PEP 639 (improving license clarity with better package metadata). - The behavior may change during the draft development of the PEP. --gather-license-texts Enable license text gathering. --pyproject Path to the root component's `pyproject.toml` file. - This should point to a file compliant with PEP 621 (storing project metadata). + This should point to a file compliant with PEP 621 (Storing project metadata in pyproject.toml). Supports PEP 639 (Improving License Clarity with Better Package Metadata). --mc-type Type of the main component. {choices: application, firmware, library} (default: application) diff --git a/pyproject.toml b/pyproject.toml index cbfe00854..259bf6d3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "cyclonedx-bom" -version = "6.1.3" +version = "7.0.1-alpha.2" description = "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments" authors = [ "Jan Kowalleck ", diff --git a/tests/_data/infiles/environment/normalize-packagename/pinning.txt b/tests/_data/infiles/environment/normalize-packagename/pinning.txt index e0e1add4f..4b8e9058b 100644 --- a/tests/_data/infiles/environment/normalize-packagename/pinning.txt +++ b/tests/_data/infiles/environment/normalize-packagename/pinning.txt @@ -1,3 +1,2 @@ ruamel.yaml==0.18.5 -ruamel.yaml.clib==0.2.8 ruamel.yaml.jinja2==0.2.7 diff --git a/tests/_data/infiles/environment/with-license-pep639/AUTHORS.example.bin b/tests/_data/infiles/environment/with-license-pep639/AUTHORS.example.bin new file mode 100644 index 000000000..110fe0e83 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/AUTHORS.example.bin @@ -0,0 +1 @@ +this is AUTHORS.example.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/LICENCE.dummy.bin b/tests/_data/infiles/environment/with-license-pep639/LICENCE.dummy.bin new file mode 100644 index 000000000..341151e50 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/LICENCE.dummy.bin @@ -0,0 +1 @@ +this is LICENCE.dummy.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/LICENSE.txt.bin b/tests/_data/infiles/environment/with-license-pep639/LICENSE.txt.bin new file mode 100644 index 000000000..a97c9eb9b --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/LICENSE.txt.bin @@ -0,0 +1 @@ +this is LICENSE.txt.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/LICENSES/readme.md b/tests/_data/infiles/environment/with-license-pep639/LICENSES/readme.md new file mode 100644 index 000000000..0e77dd904 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/LICENSES/readme.md @@ -0,0 +1,2 @@ +the content in this dir is to be ignored. +yet, the glob pattern `LICEN[CS]E*` matches it, but this is a a dir, not a file ... diff --git a/tests/_data/infiles/environment/with-license-pep639/NOTICE.bin b/tests/_data/infiles/environment/with-license-pep639/NOTICE.bin new file mode 100644 index 000000000..971f366ae --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/NOTICE.bin @@ -0,0 +1 @@ +thisis the content of the NOTICE.bin file. diff --git a/tests/_data/infiles/environment/with-license-pep639/init.py b/tests/_data/infiles/environment/with-license-pep639/init.py index 80afe967e..21d9bb7c5 100644 --- a/tests/_data/infiles/environment/with-license-pep639/init.py +++ b/tests/_data/infiles/environment/with-license-pep639/init.py @@ -71,6 +71,7 @@ def main() -> None: 'jsonpointer', 'license_expression', 'lxml', + 'chardet==5.2.0', # https://github.com/CycloneDX/cyclonedx-python/issues/931 # with expression-like License AND License-File 'cryptography==43.0.1', # https://github.com/CycloneDX/cyclonedx-python/issues/826 # with possibly unexpected license files diff --git a/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.CC0.bin b/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.CC0.bin new file mode 100644 index 000000000..87eb5f315 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.CC0.bin @@ -0,0 +1 @@ +this is licenses_a/LICENSE.CC0.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.MIT.bin b/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.MIT.bin new file mode 100644 index 000000000..9dd58a9cf --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/licenses_a/LICENSE.MIT.bin @@ -0,0 +1 @@ +this is licenses_a/LICENSE.MIT.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/licenses_b/LICENSE.md.bin b/tests/_data/infiles/environment/with-license-pep639/licenses_b/LICENSE.md.bin new file mode 100644 index 000000000..8b55efc82 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/licenses_b/LICENSE.md.bin @@ -0,0 +1 @@ +this is licenses_b/LICENSE.md.bin content diff --git a/tests/_data/infiles/environment/with-license-pep639/licenses_b/legal/NOTICE.txt.bin b/tests/_data/infiles/environment/with-license-pep639/licenses_b/legal/NOTICE.txt.bin new file mode 100644 index 000000000..8e5a00828 --- /dev/null +++ b/tests/_data/infiles/environment/with-license-pep639/licenses_b/legal/NOTICE.txt.bin @@ -0,0 +1 @@ +this is the content of licenses_b/legal/NOTICE.txt.bin file. it is expected to be detected. diff --git a/tests/_data/infiles/environment/with-license-pep639/pinning.txt b/tests/_data/infiles/environment/with-license-pep639/pinning.txt index 6fe4e7476..3f1bc7c74 100644 --- a/tests/_data/infiles/environment/with-license-pep639/pinning.txt +++ b/tests/_data/infiles/environment/with-license-pep639/pinning.txt @@ -1,5 +1,6 @@ attrs==23.2.0 boolean.py==4.0 +chardet==5.2.0 cryptography==43.0.1 jsonpointer==2.4 license-expression==30.3.0 diff --git a/tests/_data/infiles/environment/with-license-pep639/pyproject.toml b/tests/_data/infiles/environment/with-license-pep639/pyproject.toml index 170836905..45ac64c0f 100644 --- a/tests/_data/infiles/environment/with-license-pep639/pyproject.toml +++ b/tests/_data/infiles/environment/with-license-pep639/pyproject.toml @@ -2,7 +2,25 @@ # https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata name = "with-extras" version = "0.1.0" -description = "depenndencies with license declaration accoring to PEP 639" +description = "dependencies with license declaration according to PEP 639" + +# https://peps.python.org/pep-0639/#add-string-value-to-license-key +license = "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" +# https://peps.python.org/pep-0639/#add-license-files-key +license-files = [ + "LICEN[CS]E*", "AUTHORS*", "NOTICE.bin", + "licenses_a/LICENSE.MIT.bin", "licenses_a/*.CC0.bin", + "licenses_b/**", + "nonexisting_file", "nonexisting_dir/foo", +] + +classifiers = [ + "Classifier: Development Status :: 4 - Beta", + "Intended Audience :: Developers", + # Per PEP 639, license classifiers MUST be ignored. + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: MIT License" +] [project.dependencies] # with License-Expression diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.0.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.0.xml.bin deleted file mode 100644 index 0fd15f6d0..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.0.xml.bin +++ /dev/null @@ -1,52 +0,0 @@ - - - - - attrs - 23.2.0 - Classes Without Boilerplate - pkg:pypi/attrs@23.2.0 - false - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - pkg:pypi/boolean.py@4.0 - false - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - pkg:pypi/cryptography@43.0.1 - false - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - pkg:pypi/jsonpointer@2.4 - false - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - pkg:pypi/license-expression@30.3.0 - false - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - pkg:pypi/lxml@5.3.0 - false - - - regression-issue868 - 0.1 - false - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.1.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.1.xml.bin deleted file mode 100644 index afe85637c..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.1.xml.bin +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.json.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.json.bin deleted file mode 100644 index b50bf7d0b..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.json.bin +++ /dev/null @@ -1,434 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "other", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - }, - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack and the attrs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "\nChangelog\n=========\n\n\nnext\n----\n\n\n4.0 (2022-05-05)\n----------------\n\n* API changes\n\n * Drop support for Python 2.\n * Test on Python 3.10\n * Make Expression.sort_order an instance attributes and not a class attribute\n\n* Misc.\n\n * Correct licensing documentation\n * Improve docstringf and apply minor refactorings\n * Adopt black code style and isort for imports\n * Drop Travis and use GitHub actions for CI\n\n\n3.8 (2020-06-10)\n----------------\n\n* API changes\n\n * Add support for evaluation of boolean expression.\n Thank you to Lars van Gemerden @gemerden\n\n* Bug fixes\n\n * Fix parsing of tokens that have a number as the first character. \n Thank you to Jeff Cohen @ jcohen28\n * Restore proper Python 2 compatibility. \n Thank you to Benjy Weinberger @benjyw\n\n* Improve documentation\n\n * Add pointers to Linux distro packages.\n Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca\n * Fix typo.\n Thank you to Gabriel Niebler @der-gabe\n\n\n3.7 (2019-10-04)\n----------------\n\n* API changes\n\n * Add new sort argument to simplify() to optionally not sort when simplifying\n expressions (e.g. not applying \"commutativity\"). Thank you to Steven Esser\n @majurg for this\n * Add new argument to tokenizer to optionally accept extra characters in symbol\n tokens. Thank you to @carpie for this\n\n\n3.6 (2018-08-06)\n----------------\n\n* No API changes\n\n* Bug fixes\n\n * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this\n * Improve error checking when parsing\n\n\n3.5 (Nov 1, 2017)\n-----------------\n\n* No API changes\n\n* Bug fixes\n\n * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi\n * Improve testng and expression equivalence checks\n * Improve subs() method to an expression \n\n \n\n3.4 (May 12, 2017)\n------------------\n\n* No API changes\n\n* Bug fixes and improvements\n\n * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi\n * Fix handling for literals vs. symbols in negations Thank you to @YaronK\n\n\n3.3 (2017-02-09)\n----------------\n\n* API changes\n\n * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz\n * #45 simplify=False is now the default for parse and related functions or methods.\n * #40 Use \"&\" and \"|\" as default operators\n\n* Bug fixes\n\n * #60 Fix bug for \"a or b c\" which is not a valid expression\n * #58 Fix math formula display in docs\n * Improve handling of parse errors\n\n\n2.0.0 (2016-05-11)\n------------------\n\n* API changes\n\n * New algebra definition. Refactored class hierarchy. Improved parsing.\n\n* New features\n\n * possibility to subclass algebra definition\n * new normal forms shortcuts for DNF and CNF.\n\n\n1.1 (2016-04-06)\n------------------\n\n* Initial release on Pypi.\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation and/or\nother materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: README.rst", - "text": { - "content": "boolean.py\n==========\n\n\"boolean.py\" is a small library implementing a boolean algebra. It\ndefines two base elements, TRUE and FALSE, and a Symbol class that can\ntake on one of these two values. Calculations are done in terms of AND,\nOR and NOT - other compositions like XOR and NAND are not implemented\nbut can be emulated with AND or and NOT. Expressions are constructed\nfrom parsed strings or in Python.\n\nIt runs on Python 3.6+\nYou can use older version 3.x for Python 2.7+ support.\n\nhttps://github.com/bastikr/boolean.py\n\nBuild status: |Build Status|\n\n\nExample\n-------\n\n::\n\n >>> import boolean\n >>> algebra = boolean.BooleanAlgebra()\n >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False)\n >>> expression1\n AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana')))\n\n >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True)\n >>> expression2\n AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges'))\n\n >>> expression1 == expression2\n False\n >>> expression1.simplify() == expression2\n True\n\n\nDocumentation\n-------------\n\nhttp://readthedocs.org/docs/booleanpy/en/latest/\n\n\nInstallation\n------------\n\nInstallation via pip\n~~~~~~~~~~~~~~~~~~~~\n\nTo install boolean.py, you need to have the following pieces of software\non your computer:\n\n- Python 3.6+\n- pip\n\nYou then only need to run the following command:\n\n``pip install boolean.py``\n\n\nInstallation via package managers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere are packages available for easy install on some operating systems.\nYou are welcome to help us package this tool for more distributions!\n\n- boolean.py has been packaged as Arch Linux, Fedora, openSus,\n nixpkgs, Guix, DragonFly and FreeBSD \n `packages `__ .\n\nIn particular:\n\n- Arch Linux (AUR):\n `python-boolean.py `__\n- Fedora:\n `python-boolean.py `__\n- openSUSE:\n `python-boolean.py `__\n\n\nTesting\n-------\n\nTest ``boolean.py`` with your current Python environment:\n\n``python setup.py test``\n\nTest with all of the supported Python environments using ``tox``:\n\n::\n\n pip install -r requirements-dev.txt\n tox\n\nIf ``tox`` throws ``InterpreterNotFound``, limit it to python\ninterpreters that are actually installed on your machine:\n\n::\n\n tox -e py36\n\nAlternatively use pytest.\n\n\nLicense\n-------\n\nCopyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nSPDX-License-Identifier: BSD-2-Clause\n\n.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master\n :target: https://travis-ci.org/bastikr/boolean.py\n", - "contentType": "text/prs.fallenstein.rst" - } - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "other", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: AUTHORS", - "text": { - "content": "Stefan K\u00f6gl \nAlexander Shorin \nChristopher J. White \n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2011 Stefan K\u00f6gl \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - }, - { - "license": { - "name": "declared license file: AUTHORS.rst", - "text": { - "content": "The following organizations or individuals have contributed to this code:\n\n- Ayan Sinha Mahapatra @AyanSinhaMahapatra\n- Carmen Bianca Bakker @carmenbianca\n- Chin-Yeung Li @chinyeungli\n- Dennis Clark @DennisClark\n- John Horan @johnmhoran\n- Jono Yang @JonoYang\n- Max Mehl @mxmehl\n- nexB Inc. @nexB\n- Peter Kolbus @pkolbus\n- Philippe Ombredanne @pombredanne\n- Sebastian Schuberth @sschuberth\n- Steven Esser @majurg\n- Thomas Druez @tdruez\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "Changelog\n=========\n\nv30.3.0 - 2024-03-18\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.23\n- Drop support for Python 3.7\n\nv30.2.0 - 2023-11-29\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.22\n- Add Python 3.12 support in CI\n\n\nv30.1.1 - 2023-01-16\n----------------------\n\nThis is a minor dot release without API changes\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.20\n\n\nv30.1.0 - 2023-01-16\n----------------------\n\nThis is a minor release without API changes\n\n- Use latest skeleton (and updated configure script)\n- Update license list to latest ScanCode and SPDX 3.19\n- Use correct syntax for python_require\n- Drop using Travis and Appveyor\n- Drop support for Python 3.7 and add Python 3.11 in CI\n\n\nv30.0.0 - 2022-05-10\n----------------------\n\nThis is a minor release with API changes\n\n- Use latest skeleton (and updated configure script)\n- Drop using calver\n- Improve error checking when combining licenses\n\n\n\nv21.6.14 - 2021-06-14\n----------------------\n\nAdded\n~~~~~\n\n- Switch to calver for package versioning to better convey the currency of the\n bundled data.\n\n- Include https://scancode-licensedb.aboutcode.org/ licenses list with\n ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to\n create Licensing using these licenses as LicenseSymbol.\n\n- Add new License.dedup() method to deduplicate and simplify license expressions\n without over simplifying.\n\n- Add new License.validate() method to return a new ExpressionInfo object with\n details on a license expression validation.\n\n\nChanged\n~~~~~~~\n- Drop support for Python 2.\n- Adopt the project skeleton from https://github.com/nexB/skeleton\n and its new configure script\n\n\nv1.2 - 2019-11-14\n------------------\nAdded\n~~~~~\n- Add ability to render WITH expression wrapped in parenthesis\n\nFixes\n~~~~~\n- Fix anomalous backslashes in strings\n\nChanged\n~~~~~~~\n- Update the thirdparty directory structure.\n\n\nv1.0 - 2019-10-16\n------------------\nAdded\n~~~~~\n- New version of boolean.py library\n- Add ability to leave license expressions unsorted when simplifying\n\nChanged\n~~~~~~~\n- updated travis CI settings\n\n\nv0.999 - 2019-04-29\n--------------------\n- Initial release\n- license-expression is small utility library to parse, compare and\n simplify and normalize license expressions.\n\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CODE_OF_CONDUCT.rst", - "text": { - "content": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our\nproject and our community a harassment-free experience for everyone,\nregardless of age, body size, disability, ethnicity, gender identity and\nexpression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\nOur Standards\n-------------\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual\n attention or advances\n- Trolling, insulting/derogatory comments, and personal or political\n attacks\n- Public or private harassment\n- Publishing others\u2019 private information, such as a physical or\n electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\nOur Responsibilities\n--------------------\n\nProject maintainers are responsible for clarifying the standards of\nacceptable behavior and are expected to take appropriate and fair\ncorrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit,\nor reject comments, commits, code, wiki edits, issues, and other\ncontributions that are not aligned to this Code of Conduct, or to ban\ntemporarily or permanently any contributor for other behaviors that they\ndeem inappropriate, threatening, offensive, or harmful.\n\nScope\n-----\n\nThis Code of Conduct applies both within project spaces and in public\nspaces when an individual is representing the project or its community.\nExamples of representing a project or community include using an\nofficial project e-mail address, posting via an official social media\naccount, or acting as an appointed representative at an online or\noffline event. Representation of a project may be further defined and\nclarified by project maintainers.\n\nEnforcement\n-----------\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may\nbe reported by contacting the project team at pombredanne@gmail.com\nor on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss .\nAll complaints will be reviewed and investigated and will result in a\nresponse that is deemed necessary and appropriate to the circumstances.\nThe project team is obligated to maintain confidentiality with regard to\nthe reporter of an incident. Further details of specific enforcement\npolicies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in\ngood faith may face temporary or permanent repercussions as determined\nby other members of the project\u2019s leadership.\n\nAttribution\n-----------\n\nThis Code of Conduct is adapted from the `Contributor Covenant`_ ,\nversion 1.4, available at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n.. _Contributor Covenant: https://www.contributor-covenant.org\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: NOTICE", - "text": { - "content": "#\n# Copyright (c) nexB Inc. and others.\n# SPDX-License-Identifier: Apache-2.0\n#\n# Visit https://aboutcode.org and https://github.com/nexB/license-expression\n# for support and download.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: apache-2.0.LICENSE", - "text": { - "content": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2004 Infrae. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the\n distribution.\n\n 3. Neither the name of Infrae nor the names of its contributors may\n be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSES.txt", - "text": { - "content": "lxml is copyright Infrae and distributed under the BSD license (see\ndoc/licenses/BSD.txt), with the following exceptions:\n\nSome code, such a selftest.py, selftest2.py and\nsrc/lxml/_elementpath.py are derived from ElementTree and\ncElementTree. See doc/licenses/elementtree.txt for the license text.\n\nlxml.cssselect and lxml.html are copyright Ian Bicking and distributed\nunder the BSD license (see doc/licenses/BSD.txt).\n\ntest.py, the test-runner script, is GPL and copyright Shuttleworth\nFoundation. See doc/licenses/GPL.txt. It is believed the unchanged\ninclusion of test.py to run the unit test suite falls under the\n\"aggregation\" clause of the GPL and thus does not affect the license\nof the rest of the package.\n\nThe isoschematron implementation uses several XSL and RelaxNG resources:\n * The (XML syntax) RelaxNG schema for schematron, copyright International\n Organization for Standardization (see \n src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license\n text)\n * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation\n xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing\n Center, Taiwan (see the xsl files here for the license text: \n src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/)\n * The xsd/rng schema schematron extraction xsl transformations are unlicensed\n and copyright the respective authors as noted (see \n src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and\n src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl)\n", - "contentType": "text/plain" - } - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "licenses": [ - { - "license": { - "name": "declared license file: my_licenses/richtext.rtf", - "text": { - "content": "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA=", - "contentType": "application/rtf", - "encoding": "base64" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16be_withBOM.txt", - "text": { - "content": "this file is\r\nutf-16be encoded\r\nwith BOM\r\n\ud83d\ude03\r\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16le_withBOM.txt", - "text": { - "content": "this file is\nutf-16le encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_noBOM.txt", - "text": { - "content": "this file is\nutf-8 encoded\nwithout BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_withBOM.txt", - "text": { - "content": "\ufeffthis file is\nutf-8 encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "tools": [ - { - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.2" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.xml.bin deleted file mode 100644 index b04e1589d..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.2.xml.bin +++ /dev/null @@ -1,1096 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.json.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.json.bin deleted file mode 100644 index 2ed3df253..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.json.bin +++ /dev/null @@ -1,471 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "other", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - }, - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack and the attrs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "\nChangelog\n=========\n\n\nnext\n----\n\n\n4.0 (2022-05-05)\n----------------\n\n* API changes\n\n * Drop support for Python 2.\n * Test on Python 3.10\n * Make Expression.sort_order an instance attributes and not a class attribute\n\n* Misc.\n\n * Correct licensing documentation\n * Improve docstringf and apply minor refactorings\n * Adopt black code style and isort for imports\n * Drop Travis and use GitHub actions for CI\n\n\n3.8 (2020-06-10)\n----------------\n\n* API changes\n\n * Add support for evaluation of boolean expression.\n Thank you to Lars van Gemerden @gemerden\n\n* Bug fixes\n\n * Fix parsing of tokens that have a number as the first character. \n Thank you to Jeff Cohen @ jcohen28\n * Restore proper Python 2 compatibility. \n Thank you to Benjy Weinberger @benjyw\n\n* Improve documentation\n\n * Add pointers to Linux distro packages.\n Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca\n * Fix typo.\n Thank you to Gabriel Niebler @der-gabe\n\n\n3.7 (2019-10-04)\n----------------\n\n* API changes\n\n * Add new sort argument to simplify() to optionally not sort when simplifying\n expressions (e.g. not applying \"commutativity\"). Thank you to Steven Esser\n @majurg for this\n * Add new argument to tokenizer to optionally accept extra characters in symbol\n tokens. Thank you to @carpie for this\n\n\n3.6 (2018-08-06)\n----------------\n\n* No API changes\n\n* Bug fixes\n\n * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this\n * Improve error checking when parsing\n\n\n3.5 (Nov 1, 2017)\n-----------------\n\n* No API changes\n\n* Bug fixes\n\n * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi\n * Improve testng and expression equivalence checks\n * Improve subs() method to an expression \n\n \n\n3.4 (May 12, 2017)\n------------------\n\n* No API changes\n\n* Bug fixes and improvements\n\n * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi\n * Fix handling for literals vs. symbols in negations Thank you to @YaronK\n\n\n3.3 (2017-02-09)\n----------------\n\n* API changes\n\n * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz\n * #45 simplify=False is now the default for parse and related functions or methods.\n * #40 Use \"&\" and \"|\" as default operators\n\n* Bug fixes\n\n * #60 Fix bug for \"a or b c\" which is not a valid expression\n * #58 Fix math formula display in docs\n * Improve handling of parse errors\n\n\n2.0.0 (2016-05-11)\n------------------\n\n* API changes\n\n * New algebra definition. Refactored class hierarchy. Improved parsing.\n\n* New features\n\n * possibility to subclass algebra definition\n * new normal forms shortcuts for DNF and CNF.\n\n\n1.1 (2016-04-06)\n------------------\n\n* Initial release on Pypi.\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation and/or\nother materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: README.rst", - "text": { - "content": "boolean.py\n==========\n\n\"boolean.py\" is a small library implementing a boolean algebra. It\ndefines two base elements, TRUE and FALSE, and a Symbol class that can\ntake on one of these two values. Calculations are done in terms of AND,\nOR and NOT - other compositions like XOR and NAND are not implemented\nbut can be emulated with AND or and NOT. Expressions are constructed\nfrom parsed strings or in Python.\n\nIt runs on Python 3.6+\nYou can use older version 3.x for Python 2.7+ support.\n\nhttps://github.com/bastikr/boolean.py\n\nBuild status: |Build Status|\n\n\nExample\n-------\n\n::\n\n >>> import boolean\n >>> algebra = boolean.BooleanAlgebra()\n >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False)\n >>> expression1\n AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana')))\n\n >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True)\n >>> expression2\n AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges'))\n\n >>> expression1 == expression2\n False\n >>> expression1.simplify() == expression2\n True\n\n\nDocumentation\n-------------\n\nhttp://readthedocs.org/docs/booleanpy/en/latest/\n\n\nInstallation\n------------\n\nInstallation via pip\n~~~~~~~~~~~~~~~~~~~~\n\nTo install boolean.py, you need to have the following pieces of software\non your computer:\n\n- Python 3.6+\n- pip\n\nYou then only need to run the following command:\n\n``pip install boolean.py``\n\n\nInstallation via package managers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere are packages available for easy install on some operating systems.\nYou are welcome to help us package this tool for more distributions!\n\n- boolean.py has been packaged as Arch Linux, Fedora, openSus,\n nixpkgs, Guix, DragonFly and FreeBSD \n `packages `__ .\n\nIn particular:\n\n- Arch Linux (AUR):\n `python-boolean.py `__\n- Fedora:\n `python-boolean.py `__\n- openSUSE:\n `python-boolean.py `__\n\n\nTesting\n-------\n\nTest ``boolean.py`` with your current Python environment:\n\n``python setup.py test``\n\nTest with all of the supported Python environments using ``tox``:\n\n::\n\n pip install -r requirements-dev.txt\n tox\n\nIf ``tox`` throws ``InterpreterNotFound``, limit it to python\ninterpreters that are actually installed on your machine:\n\n::\n\n tox -e py36\n\nAlternatively use pytest.\n\n\nLicense\n-------\n\nCopyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nSPDX-License-Identifier: BSD-2-Clause\n\n.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master\n :target: https://travis-ci.org/bastikr/boolean.py\n", - "contentType": "text/prs.fallenstein.rst" - } - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "evidence": { - "licenses": [ - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "This software is made available under the terms of *either* of the licenses\nfound in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made\nunder the terms of *both* these licenses.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.APACHE", - "text": { - "content": "\n Apache License\n Version 2.0, January 2004\n https://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.BSD", - "text": { - "content": "Copyright (c) Individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of PyCA Cryptography nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - } - ] - }, - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "other", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: AUTHORS", - "text": { - "content": "Stefan K\u00f6gl \nAlexander Shorin \nChristopher J. White \n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2011 Stefan K\u00f6gl \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - }, - { - "license": { - "name": "declared license file: AUTHORS.rst", - "text": { - "content": "The following organizations or individuals have contributed to this code:\n\n- Ayan Sinha Mahapatra @AyanSinhaMahapatra\n- Carmen Bianca Bakker @carmenbianca\n- Chin-Yeung Li @chinyeungli\n- Dennis Clark @DennisClark\n- John Horan @johnmhoran\n- Jono Yang @JonoYang\n- Max Mehl @mxmehl\n- nexB Inc. @nexB\n- Peter Kolbus @pkolbus\n- Philippe Ombredanne @pombredanne\n- Sebastian Schuberth @sschuberth\n- Steven Esser @majurg\n- Thomas Druez @tdruez\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "Changelog\n=========\n\nv30.3.0 - 2024-03-18\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.23\n- Drop support for Python 3.7\n\nv30.2.0 - 2023-11-29\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.22\n- Add Python 3.12 support in CI\n\n\nv30.1.1 - 2023-01-16\n----------------------\n\nThis is a minor dot release without API changes\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.20\n\n\nv30.1.0 - 2023-01-16\n----------------------\n\nThis is a minor release without API changes\n\n- Use latest skeleton (and updated configure script)\n- Update license list to latest ScanCode and SPDX 3.19\n- Use correct syntax for python_require\n- Drop using Travis and Appveyor\n- Drop support for Python 3.7 and add Python 3.11 in CI\n\n\nv30.0.0 - 2022-05-10\n----------------------\n\nThis is a minor release with API changes\n\n- Use latest skeleton (and updated configure script)\n- Drop using calver\n- Improve error checking when combining licenses\n\n\n\nv21.6.14 - 2021-06-14\n----------------------\n\nAdded\n~~~~~\n\n- Switch to calver for package versioning to better convey the currency of the\n bundled data.\n\n- Include https://scancode-licensedb.aboutcode.org/ licenses list with\n ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to\n create Licensing using these licenses as LicenseSymbol.\n\n- Add new License.dedup() method to deduplicate and simplify license expressions\n without over simplifying.\n\n- Add new License.validate() method to return a new ExpressionInfo object with\n details on a license expression validation.\n\n\nChanged\n~~~~~~~\n- Drop support for Python 2.\n- Adopt the project skeleton from https://github.com/nexB/skeleton\n and its new configure script\n\n\nv1.2 - 2019-11-14\n------------------\nAdded\n~~~~~\n- Add ability to render WITH expression wrapped in parenthesis\n\nFixes\n~~~~~\n- Fix anomalous backslashes in strings\n\nChanged\n~~~~~~~\n- Update the thirdparty directory structure.\n\n\nv1.0 - 2019-10-16\n------------------\nAdded\n~~~~~\n- New version of boolean.py library\n- Add ability to leave license expressions unsorted when simplifying\n\nChanged\n~~~~~~~\n- updated travis CI settings\n\n\nv0.999 - 2019-04-29\n--------------------\n- Initial release\n- license-expression is small utility library to parse, compare and\n simplify and normalize license expressions.\n\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CODE_OF_CONDUCT.rst", - "text": { - "content": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our\nproject and our community a harassment-free experience for everyone,\nregardless of age, body size, disability, ethnicity, gender identity and\nexpression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\nOur Standards\n-------------\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual\n attention or advances\n- Trolling, insulting/derogatory comments, and personal or political\n attacks\n- Public or private harassment\n- Publishing others\u2019 private information, such as a physical or\n electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\nOur Responsibilities\n--------------------\n\nProject maintainers are responsible for clarifying the standards of\nacceptable behavior and are expected to take appropriate and fair\ncorrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit,\nor reject comments, commits, code, wiki edits, issues, and other\ncontributions that are not aligned to this Code of Conduct, or to ban\ntemporarily or permanently any contributor for other behaviors that they\ndeem inappropriate, threatening, offensive, or harmful.\n\nScope\n-----\n\nThis Code of Conduct applies both within project spaces and in public\nspaces when an individual is representing the project or its community.\nExamples of representing a project or community include using an\nofficial project e-mail address, posting via an official social media\naccount, or acting as an appointed representative at an online or\noffline event. Representation of a project may be further defined and\nclarified by project maintainers.\n\nEnforcement\n-----------\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may\nbe reported by contacting the project team at pombredanne@gmail.com\nor on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss .\nAll complaints will be reviewed and investigated and will result in a\nresponse that is deemed necessary and appropriate to the circumstances.\nThe project team is obligated to maintain confidentiality with regard to\nthe reporter of an incident. Further details of specific enforcement\npolicies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in\ngood faith may face temporary or permanent repercussions as determined\nby other members of the project\u2019s leadership.\n\nAttribution\n-----------\n\nThis Code of Conduct is adapted from the `Contributor Covenant`_ ,\nversion 1.4, available at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n.. _Contributor Covenant: https://www.contributor-covenant.org\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: NOTICE", - "text": { - "content": "#\n# Copyright (c) nexB Inc. and others.\n# SPDX-License-Identifier: Apache-2.0\n#\n# Visit https://aboutcode.org and https://github.com/nexB/license-expression\n# for support and download.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: apache-2.0.LICENSE", - "text": { - "content": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2004 Infrae. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the\n distribution.\n\n 3. Neither the name of Infrae nor the names of its contributors may\n be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSES.txt", - "text": { - "content": "lxml is copyright Infrae and distributed under the BSD license (see\ndoc/licenses/BSD.txt), with the following exceptions:\n\nSome code, such a selftest.py, selftest2.py and\nsrc/lxml/_elementpath.py are derived from ElementTree and\ncElementTree. See doc/licenses/elementtree.txt for the license text.\n\nlxml.cssselect and lxml.html are copyright Ian Bicking and distributed\nunder the BSD license (see doc/licenses/BSD.txt).\n\ntest.py, the test-runner script, is GPL and copyright Shuttleworth\nFoundation. See doc/licenses/GPL.txt. It is believed the unchanged\ninclusion of test.py to run the unit test suite falls under the\n\"aggregation\" clause of the GPL and thus does not affect the license\nof the rest of the package.\n\nThe isoschematron implementation uses several XSL and RelaxNG resources:\n * The (XML syntax) RelaxNG schema for schematron, copyright International\n Organization for Standardization (see \n src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license\n text)\n * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation\n xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing\n Center, Taiwan (see the xsl files here for the license text: \n src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/)\n * The xsd/rng schema schematron extraction xsl transformations are unlicensed\n and copyright the respective authors as noted (see \n src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and\n src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl)\n", - "contentType": "text/plain" - } - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "licenses": [ - { - "license": { - "name": "declared license file: my_licenses/richtext.rtf", - "text": { - "content": "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA=", - "contentType": "application/rtf", - "encoding": "base64" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16be_withBOM.txt", - "text": { - "content": "this file is\r\nutf-16be encoded\r\nwith BOM\r\n\ud83d\ude03\r\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16le_withBOM.txt", - "text": { - "content": "this file is\nutf-16le encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_noBOM.txt", - "text": { - "content": "this file is\nutf-8 encoded\nwithout BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_withBOM.txt", - "text": { - "content": "\ufeffthis file is\nutf-8 encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": [ - { - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.3" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.xml.bin deleted file mode 100644 index f08f41b68..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.3.xml.bin +++ /dev/null @@ -1,1347 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - - declared license file: LICENSE - This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made -under the terms of *both* these licenses. - - - - declared license file: LICENSE.APACHE - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - declared license file: LICENSE.BSD - Copyright (c) Individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of PyCA Cryptography nor the names of its 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. - - - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.json.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.json.bin deleted file mode 100644 index 246ae8d22..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.json.bin +++ /dev/null @@ -1,506 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - }, - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack and the attrs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "\nChangelog\n=========\n\n\nnext\n----\n\n\n4.0 (2022-05-05)\n----------------\n\n* API changes\n\n * Drop support for Python 2.\n * Test on Python 3.10\n * Make Expression.sort_order an instance attributes and not a class attribute\n\n* Misc.\n\n * Correct licensing documentation\n * Improve docstringf and apply minor refactorings\n * Adopt black code style and isort for imports\n * Drop Travis and use GitHub actions for CI\n\n\n3.8 (2020-06-10)\n----------------\n\n* API changes\n\n * Add support for evaluation of boolean expression.\n Thank you to Lars van Gemerden @gemerden\n\n* Bug fixes\n\n * Fix parsing of tokens that have a number as the first character. \n Thank you to Jeff Cohen @ jcohen28\n * Restore proper Python 2 compatibility. \n Thank you to Benjy Weinberger @benjyw\n\n* Improve documentation\n\n * Add pointers to Linux distro packages.\n Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca\n * Fix typo.\n Thank you to Gabriel Niebler @der-gabe\n\n\n3.7 (2019-10-04)\n----------------\n\n* API changes\n\n * Add new sort argument to simplify() to optionally not sort when simplifying\n expressions (e.g. not applying \"commutativity\"). Thank you to Steven Esser\n @majurg for this\n * Add new argument to tokenizer to optionally accept extra characters in symbol\n tokens. Thank you to @carpie for this\n\n\n3.6 (2018-08-06)\n----------------\n\n* No API changes\n\n* Bug fixes\n\n * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this\n * Improve error checking when parsing\n\n\n3.5 (Nov 1, 2017)\n-----------------\n\n* No API changes\n\n* Bug fixes\n\n * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi\n * Improve testng and expression equivalence checks\n * Improve subs() method to an expression \n\n \n\n3.4 (May 12, 2017)\n------------------\n\n* No API changes\n\n* Bug fixes and improvements\n\n * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi\n * Fix handling for literals vs. symbols in negations Thank you to @YaronK\n\n\n3.3 (2017-02-09)\n----------------\n\n* API changes\n\n * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz\n * #45 simplify=False is now the default for parse and related functions or methods.\n * #40 Use \"&\" and \"|\" as default operators\n\n* Bug fixes\n\n * #60 Fix bug for \"a or b c\" which is not a valid expression\n * #58 Fix math formula display in docs\n * Improve handling of parse errors\n\n\n2.0.0 (2016-05-11)\n------------------\n\n* API changes\n\n * New algebra definition. Refactored class hierarchy. Improved parsing.\n\n* New features\n\n * possibility to subclass algebra definition\n * new normal forms shortcuts for DNF and CNF.\n\n\n1.1 (2016-04-06)\n------------------\n\n* Initial release on Pypi.\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation and/or\nother materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: README.rst", - "text": { - "content": "boolean.py\n==========\n\n\"boolean.py\" is a small library implementing a boolean algebra. It\ndefines two base elements, TRUE and FALSE, and a Symbol class that can\ntake on one of these two values. Calculations are done in terms of AND,\nOR and NOT - other compositions like XOR and NAND are not implemented\nbut can be emulated with AND or and NOT. Expressions are constructed\nfrom parsed strings or in Python.\n\nIt runs on Python 3.6+\nYou can use older version 3.x for Python 2.7+ support.\n\nhttps://github.com/bastikr/boolean.py\n\nBuild status: |Build Status|\n\n\nExample\n-------\n\n::\n\n >>> import boolean\n >>> algebra = boolean.BooleanAlgebra()\n >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False)\n >>> expression1\n AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana')))\n\n >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True)\n >>> expression2\n AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges'))\n\n >>> expression1 == expression2\n False\n >>> expression1.simplify() == expression2\n True\n\n\nDocumentation\n-------------\n\nhttp://readthedocs.org/docs/booleanpy/en/latest/\n\n\nInstallation\n------------\n\nInstallation via pip\n~~~~~~~~~~~~~~~~~~~~\n\nTo install boolean.py, you need to have the following pieces of software\non your computer:\n\n- Python 3.6+\n- pip\n\nYou then only need to run the following command:\n\n``pip install boolean.py``\n\n\nInstallation via package managers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere are packages available for easy install on some operating systems.\nYou are welcome to help us package this tool for more distributions!\n\n- boolean.py has been packaged as Arch Linux, Fedora, openSus,\n nixpkgs, Guix, DragonFly and FreeBSD \n `packages `__ .\n\nIn particular:\n\n- Arch Linux (AUR):\n `python-boolean.py `__\n- Fedora:\n `python-boolean.py `__\n- openSUSE:\n `python-boolean.py `__\n\n\nTesting\n-------\n\nTest ``boolean.py`` with your current Python environment:\n\n``python setup.py test``\n\nTest with all of the supported Python environments using ``tox``:\n\n::\n\n pip install -r requirements-dev.txt\n tox\n\nIf ``tox`` throws ``InterpreterNotFound``, limit it to python\ninterpreters that are actually installed on your machine:\n\n::\n\n tox -e py36\n\nAlternatively use pytest.\n\n\nLicense\n-------\n\nCopyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nSPDX-License-Identifier: BSD-2-Clause\n\n.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master\n :target: https://travis-ci.org/bastikr/boolean.py\n", - "contentType": "text/prs.fallenstein.rst" - } - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "evidence": { - "licenses": [ - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "This software is made available under the terms of *either* of the licenses\nfound in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made\nunder the terms of *both* these licenses.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.APACHE", - "text": { - "content": "\n Apache License\n Version 2.0, January 2004\n https://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.BSD", - "text": { - "content": "Copyright (c) Individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of PyCA Cryptography nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - } - ] - }, - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: AUTHORS", - "text": { - "content": "Stefan K\u00f6gl \nAlexander Shorin \nChristopher J. White \n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2011 Stefan K\u00f6gl \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - }, - { - "license": { - "name": "declared license file: AUTHORS.rst", - "text": { - "content": "The following organizations or individuals have contributed to this code:\n\n- Ayan Sinha Mahapatra @AyanSinhaMahapatra\n- Carmen Bianca Bakker @carmenbianca\n- Chin-Yeung Li @chinyeungli\n- Dennis Clark @DennisClark\n- John Horan @johnmhoran\n- Jono Yang @JonoYang\n- Max Mehl @mxmehl\n- nexB Inc. @nexB\n- Peter Kolbus @pkolbus\n- Philippe Ombredanne @pombredanne\n- Sebastian Schuberth @sschuberth\n- Steven Esser @majurg\n- Thomas Druez @tdruez\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "Changelog\n=========\n\nv30.3.0 - 2024-03-18\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.23\n- Drop support for Python 3.7\n\nv30.2.0 - 2023-11-29\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.22\n- Add Python 3.12 support in CI\n\n\nv30.1.1 - 2023-01-16\n----------------------\n\nThis is a minor dot release without API changes\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.20\n\n\nv30.1.0 - 2023-01-16\n----------------------\n\nThis is a minor release without API changes\n\n- Use latest skeleton (and updated configure script)\n- Update license list to latest ScanCode and SPDX 3.19\n- Use correct syntax for python_require\n- Drop using Travis and Appveyor\n- Drop support for Python 3.7 and add Python 3.11 in CI\n\n\nv30.0.0 - 2022-05-10\n----------------------\n\nThis is a minor release with API changes\n\n- Use latest skeleton (and updated configure script)\n- Drop using calver\n- Improve error checking when combining licenses\n\n\n\nv21.6.14 - 2021-06-14\n----------------------\n\nAdded\n~~~~~\n\n- Switch to calver for package versioning to better convey the currency of the\n bundled data.\n\n- Include https://scancode-licensedb.aboutcode.org/ licenses list with\n ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to\n create Licensing using these licenses as LicenseSymbol.\n\n- Add new License.dedup() method to deduplicate and simplify license expressions\n without over simplifying.\n\n- Add new License.validate() method to return a new ExpressionInfo object with\n details on a license expression validation.\n\n\nChanged\n~~~~~~~\n- Drop support for Python 2.\n- Adopt the project skeleton from https://github.com/nexB/skeleton\n and its new configure script\n\n\nv1.2 - 2019-11-14\n------------------\nAdded\n~~~~~\n- Add ability to render WITH expression wrapped in parenthesis\n\nFixes\n~~~~~\n- Fix anomalous backslashes in strings\n\nChanged\n~~~~~~~\n- Update the thirdparty directory structure.\n\n\nv1.0 - 2019-10-16\n------------------\nAdded\n~~~~~\n- New version of boolean.py library\n- Add ability to leave license expressions unsorted when simplifying\n\nChanged\n~~~~~~~\n- updated travis CI settings\n\n\nv0.999 - 2019-04-29\n--------------------\n- Initial release\n- license-expression is small utility library to parse, compare and\n simplify and normalize license expressions.\n\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CODE_OF_CONDUCT.rst", - "text": { - "content": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our\nproject and our community a harassment-free experience for everyone,\nregardless of age, body size, disability, ethnicity, gender identity and\nexpression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\nOur Standards\n-------------\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual\n attention or advances\n- Trolling, insulting/derogatory comments, and personal or political\n attacks\n- Public or private harassment\n- Publishing others\u2019 private information, such as a physical or\n electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\nOur Responsibilities\n--------------------\n\nProject maintainers are responsible for clarifying the standards of\nacceptable behavior and are expected to take appropriate and fair\ncorrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit,\nor reject comments, commits, code, wiki edits, issues, and other\ncontributions that are not aligned to this Code of Conduct, or to ban\ntemporarily or permanently any contributor for other behaviors that they\ndeem inappropriate, threatening, offensive, or harmful.\n\nScope\n-----\n\nThis Code of Conduct applies both within project spaces and in public\nspaces when an individual is representing the project or its community.\nExamples of representing a project or community include using an\nofficial project e-mail address, posting via an official social media\naccount, or acting as an appointed representative at an online or\noffline event. Representation of a project may be further defined and\nclarified by project maintainers.\n\nEnforcement\n-----------\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may\nbe reported by contacting the project team at pombredanne@gmail.com\nor on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss .\nAll complaints will be reviewed and investigated and will result in a\nresponse that is deemed necessary and appropriate to the circumstances.\nThe project team is obligated to maintain confidentiality with regard to\nthe reporter of an incident. Further details of specific enforcement\npolicies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in\ngood faith may face temporary or permanent repercussions as determined\nby other members of the project\u2019s leadership.\n\nAttribution\n-----------\n\nThis Code of Conduct is adapted from the `Contributor Covenant`_ ,\nversion 1.4, available at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n.. _Contributor Covenant: https://www.contributor-covenant.org\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: NOTICE", - "text": { - "content": "#\n# Copyright (c) nexB Inc. and others.\n# SPDX-License-Identifier: Apache-2.0\n#\n# Visit https://aboutcode.org and https://github.com/nexB/license-expression\n# for support and download.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: apache-2.0.LICENSE", - "text": { - "content": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2004 Infrae. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the\n distribution.\n\n 3. Neither the name of Infrae nor the names of its contributors may\n be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSES.txt", - "text": { - "content": "lxml is copyright Infrae and distributed under the BSD license (see\ndoc/licenses/BSD.txt), with the following exceptions:\n\nSome code, such a selftest.py, selftest2.py and\nsrc/lxml/_elementpath.py are derived from ElementTree and\ncElementTree. See doc/licenses/elementtree.txt for the license text.\n\nlxml.cssselect and lxml.html are copyright Ian Bicking and distributed\nunder the BSD license (see doc/licenses/BSD.txt).\n\ntest.py, the test-runner script, is GPL and copyright Shuttleworth\nFoundation. See doc/licenses/GPL.txt. It is believed the unchanged\ninclusion of test.py to run the unit test suite falls under the\n\"aggregation\" clause of the GPL and thus does not affect the license\nof the rest of the package.\n\nThe isoschematron implementation uses several XSL and RelaxNG resources:\n * The (XML syntax) RelaxNG schema for schematron, copyright International\n Organization for Standardization (see \n src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license\n text)\n * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation\n xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing\n Center, Taiwan (see the xsl files here for the license text: \n src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/)\n * The xsd/rng schema schematron extraction xsl transformations are unlicensed\n and copyright the respective authors as noted (see \n src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and\n src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl)\n", - "contentType": "text/plain" - } - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "licenses": [ - { - "license": { - "name": "declared license file: my_licenses/richtext.rtf", - "text": { - "content": "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA=", - "contentType": "application/rtf", - "encoding": "base64" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16be_withBOM.txt", - "text": { - "content": "this file is\r\nutf-16be encoded\r\nwith BOM\r\n\ud83d\ude03\r\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16le_withBOM.txt", - "text": { - "content": "this file is\nutf-16le encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_noBOM.txt", - "text": { - "content": "this file is\nutf-8 encoded\nwithout BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_withBOM.txt", - "text": { - "content": "\ufeffthis file is\nutf-8 encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": [ - { - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "externalReferences": [ ], - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.4" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.xml.bin deleted file mode 100644 index 72074d836..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.4.xml.bin +++ /dev/null @@ -1,1374 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - - declared license file: LICENSE - This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made -under the terms of *both* these licenses. - - - - declared license file: LICENSE.APACHE - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - declared license file: LICENSE.BSD - Copyright (c) Individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of PyCA Cryptography nor the names of its 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. - - - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.json.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.json.bin deleted file mode 100644 index 094a59f87..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.json.bin +++ /dev/null @@ -1,520 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - }, - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack and the attrs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "\nChangelog\n=========\n\n\nnext\n----\n\n\n4.0 (2022-05-05)\n----------------\n\n* API changes\n\n * Drop support for Python 2.\n * Test on Python 3.10\n * Make Expression.sort_order an instance attributes and not a class attribute\n\n* Misc.\n\n * Correct licensing documentation\n * Improve docstringf and apply minor refactorings\n * Adopt black code style and isort for imports\n * Drop Travis and use GitHub actions for CI\n\n\n3.8 (2020-06-10)\n----------------\n\n* API changes\n\n * Add support for evaluation of boolean expression.\n Thank you to Lars van Gemerden @gemerden\n\n* Bug fixes\n\n * Fix parsing of tokens that have a number as the first character. \n Thank you to Jeff Cohen @ jcohen28\n * Restore proper Python 2 compatibility. \n Thank you to Benjy Weinberger @benjyw\n\n* Improve documentation\n\n * Add pointers to Linux distro packages.\n Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca\n * Fix typo.\n Thank you to Gabriel Niebler @der-gabe\n\n\n3.7 (2019-10-04)\n----------------\n\n* API changes\n\n * Add new sort argument to simplify() to optionally not sort when simplifying\n expressions (e.g. not applying \"commutativity\"). Thank you to Steven Esser\n @majurg for this\n * Add new argument to tokenizer to optionally accept extra characters in symbol\n tokens. Thank you to @carpie for this\n\n\n3.6 (2018-08-06)\n----------------\n\n* No API changes\n\n* Bug fixes\n\n * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this\n * Improve error checking when parsing\n\n\n3.5 (Nov 1, 2017)\n-----------------\n\n* No API changes\n\n* Bug fixes\n\n * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi\n * Improve testng and expression equivalence checks\n * Improve subs() method to an expression \n\n \n\n3.4 (May 12, 2017)\n------------------\n\n* No API changes\n\n* Bug fixes and improvements\n\n * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi\n * Fix handling for literals vs. symbols in negations Thank you to @YaronK\n\n\n3.3 (2017-02-09)\n----------------\n\n* API changes\n\n * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz\n * #45 simplify=False is now the default for parse and related functions or methods.\n * #40 Use \"&\" and \"|\" as default operators\n\n* Bug fixes\n\n * #60 Fix bug for \"a or b c\" which is not a valid expression\n * #58 Fix math formula display in docs\n * Improve handling of parse errors\n\n\n2.0.0 (2016-05-11)\n------------------\n\n* API changes\n\n * New algebra definition. Refactored class hierarchy. Improved parsing.\n\n* New features\n\n * possibility to subclass algebra definition\n * new normal forms shortcuts for DNF and CNF.\n\n\n1.1 (2016-04-06)\n------------------\n\n* Initial release on Pypi.\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation and/or\nother materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: README.rst", - "text": { - "content": "boolean.py\n==========\n\n\"boolean.py\" is a small library implementing a boolean algebra. It\ndefines two base elements, TRUE and FALSE, and a Symbol class that can\ntake on one of these two values. Calculations are done in terms of AND,\nOR and NOT - other compositions like XOR and NAND are not implemented\nbut can be emulated with AND or and NOT. Expressions are constructed\nfrom parsed strings or in Python.\n\nIt runs on Python 3.6+\nYou can use older version 3.x for Python 2.7+ support.\n\nhttps://github.com/bastikr/boolean.py\n\nBuild status: |Build Status|\n\n\nExample\n-------\n\n::\n\n >>> import boolean\n >>> algebra = boolean.BooleanAlgebra()\n >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False)\n >>> expression1\n AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana')))\n\n >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True)\n >>> expression2\n AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges'))\n\n >>> expression1 == expression2\n False\n >>> expression1.simplify() == expression2\n True\n\n\nDocumentation\n-------------\n\nhttp://readthedocs.org/docs/booleanpy/en/latest/\n\n\nInstallation\n------------\n\nInstallation via pip\n~~~~~~~~~~~~~~~~~~~~\n\nTo install boolean.py, you need to have the following pieces of software\non your computer:\n\n- Python 3.6+\n- pip\n\nYou then only need to run the following command:\n\n``pip install boolean.py``\n\n\nInstallation via package managers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere are packages available for easy install on some operating systems.\nYou are welcome to help us package this tool for more distributions!\n\n- boolean.py has been packaged as Arch Linux, Fedora, openSus,\n nixpkgs, Guix, DragonFly and FreeBSD \n `packages `__ .\n\nIn particular:\n\n- Arch Linux (AUR):\n `python-boolean.py `__\n- Fedora:\n `python-boolean.py `__\n- openSUSE:\n `python-boolean.py `__\n\n\nTesting\n-------\n\nTest ``boolean.py`` with your current Python environment:\n\n``python setup.py test``\n\nTest with all of the supported Python environments using ``tox``:\n\n::\n\n pip install -r requirements-dev.txt\n tox\n\nIf ``tox`` throws ``InterpreterNotFound``, limit it to python\ninterpreters that are actually installed on your machine:\n\n::\n\n tox -e py36\n\nAlternatively use pytest.\n\n\nLicense\n-------\n\nCopyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nSPDX-License-Identifier: BSD-2-Clause\n\n.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master\n :target: https://travis-ci.org/bastikr/boolean.py\n", - "contentType": "text/prs.fallenstein.rst" - } - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "evidence": { - "licenses": [ - { - "license": { - "name": "declared license file: LICENSE", - "text": { - "content": "This software is made available under the terms of *either* of the licenses\nfound in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made\nunder the terms of *both* these licenses.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.APACHE", - "text": { - "content": "\n Apache License\n Version 2.0, January 2004\n https://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.BSD", - "text": { - "content": "Copyright (c) Individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of PyCA Cryptography nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - } - ] - }, - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: AUTHORS", - "text": { - "content": "Stefan K\u00f6gl \nAlexander Shorin \nChristopher J. White \n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2011 Stefan K\u00f6gl \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - }, - { - "license": { - "name": "declared license file: AUTHORS.rst", - "text": { - "content": "The following organizations or individuals have contributed to this code:\n\n- Ayan Sinha Mahapatra @AyanSinhaMahapatra\n- Carmen Bianca Bakker @carmenbianca\n- Chin-Yeung Li @chinyeungli\n- Dennis Clark @DennisClark\n- John Horan @johnmhoran\n- Jono Yang @JonoYang\n- Max Mehl @mxmehl\n- nexB Inc. @nexB\n- Peter Kolbus @pkolbus\n- Philippe Ombredanne @pombredanne\n- Sebastian Schuberth @sschuberth\n- Steven Esser @majurg\n- Thomas Druez @tdruez\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "Changelog\n=========\n\nv30.3.0 - 2024-03-18\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.23\n- Drop support for Python 3.7\n\nv30.2.0 - 2023-11-29\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.22\n- Add Python 3.12 support in CI\n\n\nv30.1.1 - 2023-01-16\n----------------------\n\nThis is a minor dot release without API changes\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.20\n\n\nv30.1.0 - 2023-01-16\n----------------------\n\nThis is a minor release without API changes\n\n- Use latest skeleton (and updated configure script)\n- Update license list to latest ScanCode and SPDX 3.19\n- Use correct syntax for python_require\n- Drop using Travis and Appveyor\n- Drop support for Python 3.7 and add Python 3.11 in CI\n\n\nv30.0.0 - 2022-05-10\n----------------------\n\nThis is a minor release with API changes\n\n- Use latest skeleton (and updated configure script)\n- Drop using calver\n- Improve error checking when combining licenses\n\n\n\nv21.6.14 - 2021-06-14\n----------------------\n\nAdded\n~~~~~\n\n- Switch to calver for package versioning to better convey the currency of the\n bundled data.\n\n- Include https://scancode-licensedb.aboutcode.org/ licenses list with\n ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to\n create Licensing using these licenses as LicenseSymbol.\n\n- Add new License.dedup() method to deduplicate and simplify license expressions\n without over simplifying.\n\n- Add new License.validate() method to return a new ExpressionInfo object with\n details on a license expression validation.\n\n\nChanged\n~~~~~~~\n- Drop support for Python 2.\n- Adopt the project skeleton from https://github.com/nexB/skeleton\n and its new configure script\n\n\nv1.2 - 2019-11-14\n------------------\nAdded\n~~~~~\n- Add ability to render WITH expression wrapped in parenthesis\n\nFixes\n~~~~~\n- Fix anomalous backslashes in strings\n\nChanged\n~~~~~~~\n- Update the thirdparty directory structure.\n\n\nv1.0 - 2019-10-16\n------------------\nAdded\n~~~~~\n- New version of boolean.py library\n- Add ability to leave license expressions unsorted when simplifying\n\nChanged\n~~~~~~~\n- updated travis CI settings\n\n\nv0.999 - 2019-04-29\n--------------------\n- Initial release\n- license-expression is small utility library to parse, compare and\n simplify and normalize license expressions.\n\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: CODE_OF_CONDUCT.rst", - "text": { - "content": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our\nproject and our community a harassment-free experience for everyone,\nregardless of age, body size, disability, ethnicity, gender identity and\nexpression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\nOur Standards\n-------------\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual\n attention or advances\n- Trolling, insulting/derogatory comments, and personal or political\n attacks\n- Public or private harassment\n- Publishing others\u2019 private information, such as a physical or\n electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\nOur Responsibilities\n--------------------\n\nProject maintainers are responsible for clarifying the standards of\nacceptable behavior and are expected to take appropriate and fair\ncorrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit,\nor reject comments, commits, code, wiki edits, issues, and other\ncontributions that are not aligned to this Code of Conduct, or to ban\ntemporarily or permanently any contributor for other behaviors that they\ndeem inappropriate, threatening, offensive, or harmful.\n\nScope\n-----\n\nThis Code of Conduct applies both within project spaces and in public\nspaces when an individual is representing the project or its community.\nExamples of representing a project or community include using an\nofficial project e-mail address, posting via an official social media\naccount, or acting as an appointed representative at an online or\noffline event. Representation of a project may be further defined and\nclarified by project maintainers.\n\nEnforcement\n-----------\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may\nbe reported by contacting the project team at pombredanne@gmail.com\nor on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss .\nAll complaints will be reviewed and investigated and will result in a\nresponse that is deemed necessary and appropriate to the circumstances.\nThe project team is obligated to maintain confidentiality with regard to\nthe reporter of an incident. Further details of specific enforcement\npolicies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in\ngood faith may face temporary or permanent repercussions as determined\nby other members of the project\u2019s leadership.\n\nAttribution\n-----------\n\nThis Code of Conduct is adapted from the `Contributor Covenant`_ ,\nversion 1.4, available at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n.. _Contributor Covenant: https://www.contributor-covenant.org\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "name": "declared license file: NOTICE", - "text": { - "content": "#\n# Copyright (c) nexB Inc. and others.\n# SPDX-License-Identifier: Apache-2.0\n#\n# Visit https://aboutcode.org and https://github.com/nexB/license-expression\n# for support and download.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: apache-2.0.LICENSE", - "text": { - "content": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2004 Infrae. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the\n distribution.\n\n 3. Neither the name of Infrae nor the names of its contributors may\n be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: LICENSES.txt", - "text": { - "content": "lxml is copyright Infrae and distributed under the BSD license (see\ndoc/licenses/BSD.txt), with the following exceptions:\n\nSome code, such a selftest.py, selftest2.py and\nsrc/lxml/_elementpath.py are derived from ElementTree and\ncElementTree. See doc/licenses/elementtree.txt for the license text.\n\nlxml.cssselect and lxml.html are copyright Ian Bicking and distributed\nunder the BSD license (see doc/licenses/BSD.txt).\n\ntest.py, the test-runner script, is GPL and copyright Shuttleworth\nFoundation. See doc/licenses/GPL.txt. It is believed the unchanged\ninclusion of test.py to run the unit test suite falls under the\n\"aggregation\" clause of the GPL and thus does not affect the license\nof the rest of the package.\n\nThe isoschematron implementation uses several XSL and RelaxNG resources:\n * The (XML syntax) RelaxNG schema for schematron, copyright International\n Organization for Standardization (see \n src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license\n text)\n * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation\n xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing\n Center, Taiwan (see the xsl files here for the license text: \n src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/)\n * The xsd/rng schema schematron extraction xsl transformations are unlicensed\n and copyright the respective authors as noted (see \n src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and\n src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl)\n", - "contentType": "text/plain" - } - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "licenses": [ - { - "license": { - "name": "declared license file: my_licenses/richtext.rtf", - "text": { - "content": "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA=", - "contentType": "application/rtf", - "encoding": "base64" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16be_withBOM.txt", - "text": { - "content": "this file is\r\nutf-16be encoded\r\nwith BOM\r\n\ud83d\ude03\r\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-16le_withBOM.txt", - "text": { - "content": "this file is\nutf-16le encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_noBOM.txt", - "text": { - "content": "this file is\nutf-8 encoded\nwithout BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "name": "declared license file: my_licenses/utf-8_withBOM.txt", - "text": { - "content": "\ufeffthis file is\nutf-8 encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": { - "components": [ - { - "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "group": "CycloneDX", - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "cyclonedx-py", - "type": "application", - "version": "thisVersion-testing" - }, - { - "description": "stripped", - "externalReferences": [ ], - "group": "CycloneDX", - "licenses": [ ], - "name": "cyclonedx-python-lib", - "type": "library", - "version": "libVersion-testing" - } - ] - } - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.5" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.xml.bin deleted file mode 100644 index 7916b625d..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.5.xml.bin +++ /dev/null @@ -1,1384 +0,0 @@ - - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments - - - Apache-2.0 - - - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - - declared license file: LICENSE - This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made -under the terms of *both* these licenses. - - - - declared license file: LICENSE.APACHE - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - declared license file: LICENSE.BSD - Copyright (c) Individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of PyCA Cryptography nor the names of its 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. - - - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.json.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.json.bin deleted file mode 100644 index d380fdb32..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.json.bin +++ /dev/null @@ -1,550 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "MIT" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE", - "text": { - "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack and the attrs contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "BSD-2-Clause" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "\nChangelog\n=========\n\n\nnext\n----\n\n\n4.0 (2022-05-05)\n----------------\n\n* API changes\n\n * Drop support for Python 2.\n * Test on Python 3.10\n * Make Expression.sort_order an instance attributes and not a class attribute\n\n* Misc.\n\n * Correct licensing documentation\n * Improve docstringf and apply minor refactorings\n * Adopt black code style and isort for imports\n * Drop Travis and use GitHub actions for CI\n\n\n3.8 (2020-06-10)\n----------------\n\n* API changes\n\n * Add support for evaluation of boolean expression.\n Thank you to Lars van Gemerden @gemerden\n\n* Bug fixes\n\n * Fix parsing of tokens that have a number as the first character. \n Thank you to Jeff Cohen @ jcohen28\n * Restore proper Python 2 compatibility. \n Thank you to Benjy Weinberger @benjyw\n\n* Improve documentation\n\n * Add pointers to Linux distro packages.\n Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca\n * Fix typo.\n Thank you to Gabriel Niebler @der-gabe\n\n\n3.7 (2019-10-04)\n----------------\n\n* API changes\n\n * Add new sort argument to simplify() to optionally not sort when simplifying\n expressions (e.g. not applying \"commutativity\"). Thank you to Steven Esser\n @majurg for this\n * Add new argument to tokenizer to optionally accept extra characters in symbol\n tokens. Thank you to @carpie for this\n\n\n3.6 (2018-08-06)\n----------------\n\n* No API changes\n\n* Bug fixes\n\n * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this\n * Improve error checking when parsing\n\n\n3.5 (Nov 1, 2017)\n-----------------\n\n* No API changes\n\n* Bug fixes\n\n * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi\n * Improve testng and expression equivalence checks\n * Improve subs() method to an expression \n\n \n\n3.4 (May 12, 2017)\n------------------\n\n* No API changes\n\n* Bug fixes and improvements\n\n * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi\n * Fix handling for literals vs. symbols in negations Thank you to @YaronK\n\n\n3.3 (2017-02-09)\n----------------\n\n* API changes\n\n * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz\n * #45 simplify=False is now the default for parse and related functions or methods.\n * #40 Use \"&\" and \"|\" as default operators\n\n* Bug fixes\n\n * #60 Fix bug for \"a or b c\" which is not a valid expression\n * #58 Fix math formula display in docs\n * Improve handling of parse errors\n\n\n2.0.0 (2016-05-11)\n------------------\n\n* API changes\n\n * New algebra definition. Refactored class hierarchy. Improved parsing.\n\n* New features\n\n * possibility to subclass algebra definition\n * new normal forms shortcuts for DNF and CNF.\n\n\n1.1 (2016-04-06)\n------------------\n\n* Initial release on Pypi.\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation and/or\nother materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: README.rst", - "text": { - "content": "boolean.py\n==========\n\n\"boolean.py\" is a small library implementing a boolean algebra. It\ndefines two base elements, TRUE and FALSE, and a Symbol class that can\ntake on one of these two values. Calculations are done in terms of AND,\nOR and NOT - other compositions like XOR and NAND are not implemented\nbut can be emulated with AND or and NOT. Expressions are constructed\nfrom parsed strings or in Python.\n\nIt runs on Python 3.6+\nYou can use older version 3.x for Python 2.7+ support.\n\nhttps://github.com/bastikr/boolean.py\n\nBuild status: |Build Status|\n\n\nExample\n-------\n\n::\n\n >>> import boolean\n >>> algebra = boolean.BooleanAlgebra()\n >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False)\n >>> expression1\n AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana')))\n\n >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True)\n >>> expression2\n AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges'))\n\n >>> expression1 == expression2\n False\n >>> expression1.simplify() == expression2\n True\n\n\nDocumentation\n-------------\n\nhttp://readthedocs.org/docs/booleanpy/en/latest/\n\n\nInstallation\n------------\n\nInstallation via pip\n~~~~~~~~~~~~~~~~~~~~\n\nTo install boolean.py, you need to have the following pieces of software\non your computer:\n\n- Python 3.6+\n- pip\n\nYou then only need to run the following command:\n\n``pip install boolean.py``\n\n\nInstallation via package managers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThere are packages available for easy install on some operating systems.\nYou are welcome to help us package this tool for more distributions!\n\n- boolean.py has been packaged as Arch Linux, Fedora, openSus,\n nixpkgs, Guix, DragonFly and FreeBSD \n `packages `__ .\n\nIn particular:\n\n- Arch Linux (AUR):\n `python-boolean.py `__\n- Fedora:\n `python-boolean.py `__\n- openSUSE:\n `python-boolean.py `__\n\n\nTesting\n-------\n\nTest ``boolean.py`` with your current Python environment:\n\n``python setup.py test``\n\nTest with all of the supported Python environments using ``tox``:\n\n::\n\n pip install -r requirements-dev.txt\n tox\n\nIf ``tox`` throws ``InterpreterNotFound``, limit it to python\ninterpreters that are actually installed on your machine:\n\n::\n\n tox -e py36\n\nAlternatively use pytest.\n\n\nLicense\n-------\n\nCopyright (c) Sebastian Kraemer, basti.kr@gmail.com and others\nSPDX-License-Identifier: BSD-2-Clause\n\n.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master\n :target: https://travis-ci.org/bastikr/boolean.py\n", - "contentType": "text/prs.fallenstein.rst" - } - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "evidence": { - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE", - "text": { - "content": "This software is made available under the terms of *either* of the licenses\nfound in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made\nunder the terms of *both* these licenses.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE.APACHE", - "text": { - "content": "\n Apache License\n Version 2.0, January 2004\n https://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n https://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE.BSD", - "text": { - "content": "Copyright (c) Individual contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of PyCA Cryptography nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - } - ] - }, - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "acknowledgement": "declared", - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: AUTHORS", - "text": { - "content": "Stefan K\u00f6gl \nAlexander Shorin \nChristopher J. White \n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2011 Stefan K\u00f6gl \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\nTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "Apache-2.0" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: AUTHORS.rst", - "text": { - "content": "The following organizations or individuals have contributed to this code:\n\n- Ayan Sinha Mahapatra @AyanSinhaMahapatra\n- Carmen Bianca Bakker @carmenbianca\n- Chin-Yeung Li @chinyeungli\n- Dennis Clark @DennisClark\n- John Horan @johnmhoran\n- Jono Yang @JonoYang\n- Max Mehl @mxmehl\n- nexB Inc. @nexB\n- Peter Kolbus @pkolbus\n- Philippe Ombredanne @pombredanne\n- Sebastian Schuberth @sschuberth\n- Steven Esser @majurg\n- Thomas Druez @tdruez\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: CHANGELOG.rst", - "text": { - "content": "Changelog\n=========\n\nv30.3.0 - 2024-03-18\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.23\n- Drop support for Python 3.7\n\nv30.2.0 - 2023-11-29\n--------------------\n\nThis is a minor release without API changes:\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.22\n- Add Python 3.12 support in CI\n\n\nv30.1.1 - 2023-01-16\n----------------------\n\nThis is a minor dot release without API changes\n\n- Use latest skeleton\n- Update license list to latest ScanCode and SPDX 3.20\n\n\nv30.1.0 - 2023-01-16\n----------------------\n\nThis is a minor release without API changes\n\n- Use latest skeleton (and updated configure script)\n- Update license list to latest ScanCode and SPDX 3.19\n- Use correct syntax for python_require\n- Drop using Travis and Appveyor\n- Drop support for Python 3.7 and add Python 3.11 in CI\n\n\nv30.0.0 - 2022-05-10\n----------------------\n\nThis is a minor release with API changes\n\n- Use latest skeleton (and updated configure script)\n- Drop using calver\n- Improve error checking when combining licenses\n\n\n\nv21.6.14 - 2021-06-14\n----------------------\n\nAdded\n~~~~~\n\n- Switch to calver for package versioning to better convey the currency of the\n bundled data.\n\n- Include https://scancode-licensedb.aboutcode.org/ licenses list with\n ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to\n create Licensing using these licenses as LicenseSymbol.\n\n- Add new License.dedup() method to deduplicate and simplify license expressions\n without over simplifying.\n\n- Add new License.validate() method to return a new ExpressionInfo object with\n details on a license expression validation.\n\n\nChanged\n~~~~~~~\n- Drop support for Python 2.\n- Adopt the project skeleton from https://github.com/nexB/skeleton\n and its new configure script\n\n\nv1.2 - 2019-11-14\n------------------\nAdded\n~~~~~\n- Add ability to render WITH expression wrapped in parenthesis\n\nFixes\n~~~~~\n- Fix anomalous backslashes in strings\n\nChanged\n~~~~~~~\n- Update the thirdparty directory structure.\n\n\nv1.0 - 2019-10-16\n------------------\nAdded\n~~~~~\n- New version of boolean.py library\n- Add ability to leave license expressions unsorted when simplifying\n\nChanged\n~~~~~~~\n- updated travis CI settings\n\n\nv0.999 - 2019-04-29\n--------------------\n- Initial release\n- license-expression is small utility library to parse, compare and\n simplify and normalize license expressions.\n\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: CODE_OF_CONDUCT.rst", - "text": { - "content": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our\nproject and our community a harassment-free experience for everyone,\nregardless of age, body size, disability, ethnicity, gender identity and\nexpression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity and\norientation.\n\nOur Standards\n-------------\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual\n attention or advances\n- Trolling, insulting/derogatory comments, and personal or political\n attacks\n- Public or private harassment\n- Publishing others\u2019 private information, such as a physical or\n electronic address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\nOur Responsibilities\n--------------------\n\nProject maintainers are responsible for clarifying the standards of\nacceptable behavior and are expected to take appropriate and fair\ncorrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit,\nor reject comments, commits, code, wiki edits, issues, and other\ncontributions that are not aligned to this Code of Conduct, or to ban\ntemporarily or permanently any contributor for other behaviors that they\ndeem inappropriate, threatening, offensive, or harmful.\n\nScope\n-----\n\nThis Code of Conduct applies both within project spaces and in public\nspaces when an individual is representing the project or its community.\nExamples of representing a project or community include using an\nofficial project e-mail address, posting via an official social media\naccount, or acting as an appointed representative at an online or\noffline event. Representation of a project may be further defined and\nclarified by project maintainers.\n\nEnforcement\n-----------\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may\nbe reported by contacting the project team at pombredanne@gmail.com\nor on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss .\nAll complaints will be reviewed and investigated and will result in a\nresponse that is deemed necessary and appropriate to the circumstances.\nThe project team is obligated to maintain confidentiality with regard to\nthe reporter of an incident. Further details of specific enforcement\npolicies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in\ngood faith may face temporary or permanent repercussions as determined\nby other members of the project\u2019s leadership.\n\nAttribution\n-----------\n\nThis Code of Conduct is adapted from the `Contributor Covenant`_ ,\nversion 1.4, available at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n.. _Contributor Covenant: https://www.contributor-covenant.org\n", - "contentType": "text/prs.fallenstein.rst" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: NOTICE", - "text": { - "content": "#\n# Copyright (c) nexB Inc. and others.\n# SPDX-License-Identifier: Apache-2.0\n#\n# Visit https://aboutcode.org and https://github.com/nexB/license-expression\n# for support and download.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: apache-2.0.LICENSE", - "text": { - "content": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", - "contentType": "text/plain" - } - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "BSD-3-Clause" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSE.txt", - "text": { - "content": "Copyright (c) 2004 Infrae. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n \n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the\n distribution.\n\n 3. Neither the name of Infrae nor the names of its contributors may\n be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INFRAE OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: LICENSES.txt", - "text": { - "content": "lxml is copyright Infrae and distributed under the BSD license (see\ndoc/licenses/BSD.txt), with the following exceptions:\n\nSome code, such a selftest.py, selftest2.py and\nsrc/lxml/_elementpath.py are derived from ElementTree and\ncElementTree. See doc/licenses/elementtree.txt for the license text.\n\nlxml.cssselect and lxml.html are copyright Ian Bicking and distributed\nunder the BSD license (see doc/licenses/BSD.txt).\n\ntest.py, the test-runner script, is GPL and copyright Shuttleworth\nFoundation. See doc/licenses/GPL.txt. It is believed the unchanged\ninclusion of test.py to run the unit test suite falls under the\n\"aggregation\" clause of the GPL and thus does not affect the license\nof the rest of the package.\n\nThe isoschematron implementation uses several XSL and RelaxNG resources:\n * The (XML syntax) RelaxNG schema for schematron, copyright International\n Organization for Standardization (see \n src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license\n text)\n * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation\n xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing\n Center, Taiwan (see the xsl files here for the license text: \n src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/)\n * The xsd/rng schema schematron extraction xsl transformations are unlicensed\n and copyright the respective authors as noted (see \n src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and\n src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl)\n", - "contentType": "text/plain" - } - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: my_licenses/richtext.rtf", - "text": { - "content": "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA=", - "contentType": "application/rtf", - "encoding": "base64" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: my_licenses/utf-16be_withBOM.txt", - "text": { - "content": "this file is\r\nutf-16be encoded\r\nwith BOM\r\n\ud83d\ude03\r\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: my_licenses/utf-16le_withBOM.txt", - "text": { - "content": "this file is\nutf-16le encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: my_licenses/utf-8_noBOM.txt", - "text": { - "content": "this file is\nutf-8 encoded\nwithout BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license file: my_licenses/utf-8_withBOM.txt", - "text": { - "content": "\ufeffthis file is\nutf-8 encoded\nwith BOM\n\ud83d\ude03\n", - "contentType": "text/plain" - } - } - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": { - "components": [ - { - "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "group": "CycloneDX", - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "Apache-2.0" - } - } - ], - "name": "cyclonedx-py", - "type": "application", - "version": "thisVersion-testing" - }, - { - "description": "stripped", - "externalReferences": [ ], - "group": "CycloneDX", - "licenses": [ ], - "name": "cyclonedx-python-lib", - "type": "library", - "version": "libVersion-testing" - } - ] - } - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.6" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.xml.bin b/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.xml.bin deleted file mode 100644 index 28cea0907..000000000 --- a/tests/_data/snapshots/environment/pep639-texts_with-license-pep639_1.6.xml.bin +++ /dev/null @@ -1,1384 +0,0 @@ - - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments - - - Apache-2.0 - - - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - declared license file: LICENSE - The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack and the attrs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - declared license file: CHANGELOG.rst - -Changelog -========= - - -next ----- - - -4.0 (2022-05-05) ----------------- - -* API changes - - * Drop support for Python 2. - * Test on Python 3.10 - * Make Expression.sort_order an instance attributes and not a class attribute - -* Misc. - - * Correct licensing documentation - * Improve docstringf and apply minor refactorings - * Adopt black code style and isort for imports - * Drop Travis and use GitHub actions for CI - - -3.8 (2020-06-10) ----------------- - -* API changes - - * Add support for evaluation of boolean expression. - Thank you to Lars van Gemerden @gemerden - -* Bug fixes - - * Fix parsing of tokens that have a number as the first character. - Thank you to Jeff Cohen @ jcohen28 - * Restore proper Python 2 compatibility. - Thank you to Benjy Weinberger @benjyw - -* Improve documentation - - * Add pointers to Linux distro packages. - Thank you to Max Mehl @mxmehl and Carmen Bianca Bakker @carmenbianca - * Fix typo. - Thank you to Gabriel Niebler @der-gabe - - -3.7 (2019-10-04) ----------------- - -* API changes - - * Add new sort argument to simplify() to optionally not sort when simplifying - expressions (e.g. not applying "commutativity"). Thank you to Steven Esser - @majurg for this - * Add new argument to tokenizer to optionally accept extra characters in symbol - tokens. Thank you to @carpie for this - - -3.6 (2018-08-06) ----------------- - -* No API changes - -* Bug fixes - - * Fix De Morgan's laws effect on double negation propositions. Thank you to Douglas Cardoso for this - * Improve error checking when parsing - - -3.5 (Nov 1, 2017) ------------------ - -* No API changes - -* Bug fixes - - * Documentation updates and add testing for Python 3.6. Thank you to Alexander Lisianoi @alisianoi - * Improve testng and expression equivalence checks - * Improve subs() method to an expression - - - -3.4 (May 12, 2017) ------------------- - -* No API changes - -* Bug fixes and improvements - - * Fix various documentation typos and improve tests . Thank you to Alexander Lisianoi @alisianoi - * Fix handling for literals vs. symbols in negations Thank you to @YaronK - - -3.3 (2017-02-09) ----------------- - -* API changes - - * #40 and #50 Expression.subs() now takes 'default' thanks to @kronuz - * #45 simplify=False is now the default for parse and related functions or methods. - * #40 Use "&" and "|" as default operators - -* Bug fixes - - * #60 Fix bug for "a or b c" which is not a valid expression - * #58 Fix math formula display in docs - * Improve handling of parse errors - - -2.0.0 (2016-05-11) ------------------- - -* API changes - - * New algebra definition. Refactored class hierarchy. Improved parsing. - -* New features - - * possibility to subclass algebra definition - * new normal forms shortcuts for DNF and CNF. - - -1.1 (2016-04-06) ------------------- - -* Initial release on Pypi. - - - - declared license file: LICENSE.txt - Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -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 HOLDER 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. - - - - declared license file: README.rst - boolean.py -========== - -"boolean.py" is a small library implementing a boolean algebra. It -defines two base elements, TRUE and FALSE, and a Symbol class that can -take on one of these two values. Calculations are done in terms of AND, -OR and NOT - other compositions like XOR and NAND are not implemented -but can be emulated with AND or and NOT. Expressions are constructed -from parsed strings or in Python. - -It runs on Python 3.6+ -You can use older version 3.x for Python 2.7+ support. - -https://github.com/bastikr/boolean.py - -Build status: |Build Status| - - -Example -------- - -:: - - >>> import boolean - >>> algebra = boolean.BooleanAlgebra() - >>> expression1 = algebra.parse(u'apple and (oranges or banana) and not banana', simplify=False) - >>> expression1 - AND(Symbol('apple'), OR(Symbol('oranges'), Symbol('banana')), NOT(Symbol('banana'))) - - >>> expression2 = algebra.parse('(oranges | banana) and not banana & apple', simplify=True) - >>> expression2 - AND(Symbol('apple'), NOT(Symbol('banana')), Symbol('oranges')) - - >>> expression1 == expression2 - False - >>> expression1.simplify() == expression2 - True - - -Documentation -------------- - -http://readthedocs.org/docs/booleanpy/en/latest/ - - -Installation ------------- - -Installation via pip -~~~~~~~~~~~~~~~~~~~~ - -To install boolean.py, you need to have the following pieces of software -on your computer: - -- Python 3.6+ -- pip - -You then only need to run the following command: - -``pip install boolean.py`` - - -Installation via package managers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are packages available for easy install on some operating systems. -You are welcome to help us package this tool for more distributions! - -- boolean.py has been packaged as Arch Linux, Fedora, openSus, - nixpkgs, Guix, DragonFly and FreeBSD - `packages <https://repology.org/project/python:boolean.py/versions>`__ . - -In particular: - -- Arch Linux (AUR): - `python-boolean.py <https://aur.archlinux.org/packages/python-boolean.py/>`__ -- Fedora: - `python-boolean.py <https://apps.fedoraproject.org/packages/python-boolean.py>`__ -- openSUSE: - `python-boolean.py <https://software.opensuse.org/package/python-boolean.py>`__ - - -Testing -------- - -Test ``boolean.py`` with your current Python environment: - -``python setup.py test`` - -Test with all of the supported Python environments using ``tox``: - -:: - - pip install -r requirements-dev.txt - tox - -If ``tox`` throws ``InterpreterNotFound``, limit it to python -interpreters that are actually installed on your machine: - -:: - - tox -e py36 - -Alternatively use pytest. - - -License -------- - -Copyright (c) Sebastian Kraemer, basti.kr@gmail.com and others -SPDX-License-Identifier: BSD-2-Clause - -.. |Build Status| image:: https://travis-ci.org/bastikr/boolean.py.svg?branch=master - :target: https://travis-ci.org/bastikr/boolean.py - - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - - declared license file: LICENSE - This software is made available under the terms of *either* of the licenses -found in LICENSE.APACHE or LICENSE.BSD. Contributions to cryptography are made -under the terms of *both* these licenses. - - - - declared license file: LICENSE.APACHE - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - declared license file: LICENSE.BSD - Copyright (c) Individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of PyCA Cryptography nor the names of its 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. - - - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license file: AUTHORS - Stefan Kögl <stefan@skoegl.net> -Alexander Shorin <kxepal@gmail.com> -Christopher J. White <chris@grierwhite.com> - - - - declared license file: LICENSE.txt - Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net> -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - - - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - declared license file: AUTHORS.rst - The following organizations or individuals have contributed to this code: - -- Ayan Sinha Mahapatra @AyanSinhaMahapatra -- Carmen Bianca Bakker @carmenbianca -- Chin-Yeung Li @chinyeungli -- Dennis Clark @DennisClark -- John Horan @johnmhoran -- Jono Yang @JonoYang -- Max Mehl @mxmehl -- nexB Inc. @nexB -- Peter Kolbus @pkolbus -- Philippe Ombredanne @pombredanne -- Sebastian Schuberth @sschuberth -- Steven Esser @majurg -- Thomas Druez @tdruez - - - - declared license file: CHANGELOG.rst - Changelog -========= - -v30.3.0 - 2024-03-18 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.23 -- Drop support for Python 3.7 - -v30.2.0 - 2023-11-29 --------------------- - -This is a minor release without API changes: - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.22 -- Add Python 3.12 support in CI - - -v30.1.1 - 2023-01-16 ----------------------- - -This is a minor dot release without API changes - -- Use latest skeleton -- Update license list to latest ScanCode and SPDX 3.20 - - -v30.1.0 - 2023-01-16 ----------------------- - -This is a minor release without API changes - -- Use latest skeleton (and updated configure script) -- Update license list to latest ScanCode and SPDX 3.19 -- Use correct syntax for python_require -- Drop using Travis and Appveyor -- Drop support for Python 3.7 and add Python 3.11 in CI - - -v30.0.0 - 2022-05-10 ----------------------- - -This is a minor release with API changes - -- Use latest skeleton (and updated configure script) -- Drop using calver -- Improve error checking when combining licenses - - - -v21.6.14 - 2021-06-14 ----------------------- - -Added -~~~~~ - -- Switch to calver for package versioning to better convey the currency of the - bundled data. - -- Include https://scancode-licensedb.aboutcode.org/ licenses list with - ScanCode (v21.6.7) and SPDX licenses (v3.13) keys. Add new functions to - create Licensing using these licenses as LicenseSymbol. - -- Add new License.dedup() method to deduplicate and simplify license expressions - without over simplifying. - -- Add new License.validate() method to return a new ExpressionInfo object with - details on a license expression validation. - - -Changed -~~~~~~~ -- Drop support for Python 2. -- Adopt the project skeleton from https://github.com/nexB/skeleton - and its new configure script - - -v1.2 - 2019-11-14 ------------------- -Added -~~~~~ -- Add ability to render WITH expression wrapped in parenthesis - -Fixes -~~~~~ -- Fix anomalous backslashes in strings - -Changed -~~~~~~~ -- Update the thirdparty directory structure. - - -v1.0 - 2019-10-16 ------------------- -Added -~~~~~ -- New version of boolean.py library -- Add ability to leave license expressions unsorted when simplifying - -Changed -~~~~~~~ -- updated travis CI settings - - -v0.999 - 2019-04-29 --------------------- -- Initial release -- license-expression is small utility library to parse, compare and - simplify and normalize license expressions. - - - - - declared license file: CODE_OF_CONDUCT.rst - Contributor Covenant Code of Conduct -==================================== - -Our Pledge ----------- - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our -project and our community a harassment-free experience for everyone, -regardless of age, body size, disability, ethnicity, gender identity and -expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -Our Standards -------------- - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual - attention or advances -- Trolling, insulting/derogatory comments, and personal or political - attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or - electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -Our Responsibilities --------------------- - -Project maintainers are responsible for clarifying the standards of -acceptable behavior and are expected to take appropriate and fair -corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct, or to ban -temporarily or permanently any contributor for other behaviors that they -deem inappropriate, threatening, offensive, or harmful. - -Scope ------ - -This Code of Conduct applies both within project spaces and in public -spaces when an individual is representing the project or its community. -Examples of representing a project or community include using an -official project e-mail address, posting via an official social media -account, or acting as an appointed representative at an online or -offline event. Representation of a project may be further defined and -clarified by project maintainers. - -Enforcement ------------ - -Instances of abusive, harassing, or otherwise unacceptable behavior may -be reported by contacting the project team at pombredanne@gmail.com -or on the Gitter chat channel at https://gitter.im/aboutcode-org/discuss . -All complaints will be reviewed and investigated and will result in a -response that is deemed necessary and appropriate to the circumstances. -The project team is obligated to maintain confidentiality with regard to -the reporter of an incident. Further details of specific enforcement -policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in -good faith may face temporary or permanent repercussions as determined -by other members of the project’s leadership. - -Attribution ------------ - -This Code of Conduct is adapted from the `Contributor Covenant`_ , -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -.. _Contributor Covenant: https://www.contributor-covenant.org - - - - declared license file: NOTICE - # -# Copyright (c) nexB Inc. and others. -# SPDX-License-Identifier: Apache-2.0 -# -# Visit https://aboutcode.org and https://github.com/nexB/license-expression -# for support and download. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - - - declared license file: apache-2.0.LICENSE - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - declared license file: LICENSE.txt - Copyright (c) 2004 Infrae. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of Infrae nor the names of its 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 INFRAE 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. - - - - declared license file: LICENSES.txt - lxml is copyright Infrae and distributed under the BSD license (see -doc/licenses/BSD.txt), with the following exceptions: - -Some code, such a selftest.py, selftest2.py and -src/lxml/_elementpath.py are derived from ElementTree and -cElementTree. See doc/licenses/elementtree.txt for the license text. - -lxml.cssselect and lxml.html are copyright Ian Bicking and distributed -under the BSD license (see doc/licenses/BSD.txt). - -test.py, the test-runner script, is GPL and copyright Shuttleworth -Foundation. See doc/licenses/GPL.txt. It is believed the unchanged -inclusion of test.py to run the unit test suite falls under the -"aggregation" clause of the GPL and thus does not affect the license -of the rest of the package. - -The isoschematron implementation uses several XSL and RelaxNG resources: - * The (XML syntax) RelaxNG schema for schematron, copyright International - Organization for Standardization (see - src/lxml/isoschematron/resources/rng/iso-schematron.rng for the license - text) - * The skeleton iso-schematron-xlt1 pure-xslt schematron implementation - xsl stylesheets, copyright Rick Jelliffe and Academia Sinica Computing - Center, Taiwan (see the xsl files here for the license text: - src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/) - * The xsd/rng schema schematron extraction xsl transformations are unlicensed - and copyright the respective authors as noted (see - src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl and - src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl) - - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - declared license file: my_licenses/richtext.rtf - e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcbm91aWNvbXBhdFxkZWZsYW5nMTAzMXtcZm9udHRibHtcZjBcZm5pbFxmY2hhcnNldDAgQ2FsaWJyaTt9fQp7XCpcZ2VuZXJhdG9yIFJpY2hlZDIwIDEwLjAuMTkwNDF9XHZpZXdraW5kNFx1YzEgClxwYXJkXHNhMjAwXHNsMjc2XHNsbXVsdDFcZjBcZnMyMlxsYW5nNyBSVEYgTGljZW5zZSBGaWxlXHBhcgp9CgA= - - - declared license file: my_licenses/utf-16be_withBOM.txt - this file is -utf-16be encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-16le_withBOM.txt - this file is -utf-16le encoded -with BOM -😃 - - - - declared license file: my_licenses/utf-8_noBOM.txt - this file is -utf-8 encoded -without BOM -😃 - - - - declared license file: my_licenses/utf-8_withBOM.txt - this file is -utf-8 encoded -with BOM -😃 - - - - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.0.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.0.xml.bin deleted file mode 100644 index 0fd15f6d0..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.0.xml.bin +++ /dev/null @@ -1,52 +0,0 @@ - - - - - attrs - 23.2.0 - Classes Without Boilerplate - pkg:pypi/attrs@23.2.0 - false - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - pkg:pypi/boolean.py@4.0 - false - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - pkg:pypi/cryptography@43.0.1 - false - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - pkg:pypi/jsonpointer@2.4 - false - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - pkg:pypi/license-expression@30.3.0 - false - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - pkg:pypi/lxml@5.3.0 - false - - - regression-issue868 - 0.1 - false - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.1.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.1.xml.bin deleted file mode 100644 index 4e48511fa..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.1.xml.bin +++ /dev/null @@ -1,158 +0,0 @@ - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.json.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.json.bin deleted file mode 100644 index 60dbfb7c1..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.json.bin +++ /dev/null @@ -1,269 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "other", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "other", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "tools": [ - { - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.2" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.xml.bin deleted file mode 100644 index 7f84c211c..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.2.xml.bin +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.json.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.json.bin deleted file mode 100644 index 149dde3a2..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.json.bin +++ /dev/null @@ -1,275 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "other", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "other", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": [ - { - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.3" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.xml.bin deleted file mode 100644 index 24d43c9a4..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.3.xml.bin +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.json.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.json.bin deleted file mode 100644 index e8cfac9cb..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.json.bin +++ /dev/null @@ -1,310 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": [ - { - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "name": "cyclonedx-py", - "vendor": "CycloneDX", - "version": "thisVersion-testing" - }, - { - "externalReferences": [ ], - "name": "cyclonedx-python-lib", - "vendor": "CycloneDX", - "version": "libVersion-testing" - } - ] - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.4" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.xml.bin deleted file mode 100644 index d279b4edf..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.4.xml.bin +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.json.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.json.bin deleted file mode 100644 index 80f7c603b..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.json.bin +++ /dev/null @@ -1,324 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "id": "MIT" - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-2-Clause" - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "id": "BSD-3-Clause" - } - }, - { - "license": { - "name": "License :: OSI Approved :: BSD License" - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": { - "components": [ - { - "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "group": "CycloneDX", - "licenses": [ - { - "license": { - "id": "Apache-2.0" - } - } - ], - "name": "cyclonedx-py", - "type": "application", - "version": "thisVersion-testing" - }, - { - "description": "stripped", - "externalReferences": [ ], - "group": "CycloneDX", - "licenses": [ ], - "name": "cyclonedx-python-lib", - "type": "library", - "version": "libVersion-testing" - } - ] - } - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.5" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.xml.bin deleted file mode 100644 index cf0b89298..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.5.xml.bin +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments - - - Apache-2.0 - - - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.json.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.json.bin deleted file mode 100644 index ef04c1266..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.json.bin +++ /dev/null @@ -1,333 +0,0 @@ -{ - "components": [ - { - "bom-ref": "attrs==23.2.0", - "description": "Classes Without Boilerplate", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Documentation", - "type": "documentation", - "url": "https://www.attrs.org/" - }, - { - "comment": "from packaging metadata Project-URL: Funding", - "type": "other", - "url": "https://github.com/sponsors/hynek" - }, - { - "comment": "from packaging metadata Project-URL: Tidelift", - "type": "other", - "url": "https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi" - }, - { - "comment": "from packaging metadata Project-URL: Changelog", - "type": "release-notes", - "url": "https://www.attrs.org/en/stable/changelog.html" - }, - { - "comment": "from packaging metadata Project-URL: GitHub", - "type": "vcs", - "url": "https://github.com/python-attrs/attrs" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "MIT" - } - } - ], - "name": "attrs", - "purl": "pkg:pypi/attrs@23.2.0", - "type": "library", - "version": "23.2.0" - }, - { - "bom-ref": "boolean.py==4.0", - "description": "Define boolean algebras, create and parse boolean expressions and create custom boolean DSL.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/bastikr/boolean.py" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "BSD-2-Clause" - } - } - ], - "name": "boolean.py", - "purl": "pkg:pypi/boolean.py@4.0", - "type": "library", - "version": "4.0" - }, - { - "bom-ref": "cryptography==43.0.1", - "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: documentation", - "type": "documentation", - "url": "https://cryptography.io/" - }, - { - "comment": "from packaging metadata Project-URL: issues", - "type": "issue-tracker", - "url": "https://github.com/pyca/cryptography/issues" - }, - { - "comment": "from packaging metadata Project-URL: source", - "type": "other", - "url": "https://github.com/pyca/cryptography/" - }, - { - "comment": "from packaging metadata Project-URL: changelog", - "type": "release-notes", - "url": "https://cryptography.io/en/latest/changelog/" - }, - { - "comment": "from packaging metadata Project-URL: homepage", - "type": "website", - "url": "https://github.com/pyca/cryptography" - } - ], - "licenses": [ - { - "acknowledgement": "declared", - "expression": "Apache-2.0 OR BSD-3-Clause" - } - ], - "name": "cryptography", - "purl": "pkg:pypi/cryptography@43.0.1", - "type": "library", - "version": "43.0.1" - }, - { - "bom-ref": "jsonpointer==2.4", - "description": "Identify specific nodes in a JSON document (RFC 6901) ", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/stefankoegl/python-json-pointer" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "License :: OSI Approved :: BSD License" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } - } - ], - "name": "jsonpointer", - "purl": "pkg:pypi/jsonpointer@2.4", - "type": "library", - "version": "2.4" - }, - { - "bom-ref": "license-expression==30.3.0", - "description": "license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic.", - "externalReferences": [ - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://github.com/nexB/license-expression" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "Apache-2.0" - } - } - ], - "name": "license-expression", - "purl": "pkg:pypi/license-expression@30.3.0", - "type": "library", - "version": "30.3.0" - }, - { - "bom-ref": "lxml==5.3.0", - "description": "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.", - "externalReferences": [ - { - "comment": "from packaging metadata Project-URL: Source", - "type": "other", - "url": "https://github.com/lxml/lxml" - }, - { - "comment": "from packaging metadata: Home-page", - "type": "website", - "url": "https://lxml.de/" - } - ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "BSD-3-Clause" - } - }, - { - "license": { - "acknowledgement": "declared", - "name": "License :: OSI Approved :: BSD License" - } - } - ], - "name": "lxml", - "purl": "pkg:pypi/lxml@5.3.0", - "type": "library", - "version": "5.3.0" - }, - { - "bom-ref": "regression-issue868==0.1", - "externalReferences": [ - { - "comment": "PackageSource: Local", - "type": "distribution", - "url": "file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868" - } - ], - "name": "regression-issue868", - "type": "library", - "version": "0.1" - } - ], - "dependencies": [ - { - "ref": "attrs==23.2.0" - }, - { - "ref": "boolean.py==4.0" - }, - { - "ref": "cryptography==43.0.1" - }, - { - "ref": "jsonpointer==2.4" - }, - { - "dependsOn": [ - "boolean.py==4.0" - ], - "ref": "license-expression==30.3.0" - }, - { - "ref": "lxml==5.3.0" - }, - { - "ref": "regression-issue868==0.1" - }, - { - "dependsOn": [ - "attrs==23.2.0", - "boolean.py==4.0", - "cryptography==43.0.1", - "jsonpointer==2.4", - "license-expression==30.3.0", - "lxml==5.3.0", - "regression-issue868==0.1" - ], - "ref": "root-component" - } - ], - "metadata": { - "component": { - "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", - "name": "with-extras", - "type": "application", - "version": "0.1.0" - }, - "properties": [ - { - "name": "cdx:reproducible", - "value": "true" - } - ], - "tools": { - "components": [ - { - "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", - "externalReferences": [ - { - "type": "build-system", - "url": "https://github.com/CycloneDX/cyclonedx-python/actions" - }, - { - "type": "distribution", - "url": "https://pypi.org/project/cyclonedx-bom/" - }, - { - "type": "documentation", - "url": "https://cyclonedx-bom-tool.readthedocs.io/" - }, - { - "type": "issue-tracker", - "url": "https://github.com/CycloneDX/cyclonedx-python/issues" - }, - { - "type": "license", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" - }, - { - "type": "release-notes", - "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" - }, - { - "type": "vcs", - "url": "https://github.com/CycloneDX/cyclonedx-python/" - }, - { - "type": "website", - "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" - } - ], - "group": "CycloneDX", - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "id": "Apache-2.0" - } - } - ], - "name": "cyclonedx-py", - "type": "application", - "version": "thisVersion-testing" - }, - { - "description": "stripped", - "externalReferences": [ ], - "group": "CycloneDX", - "licenses": [ ], - "name": "cyclonedx-python-lib", - "type": "library", - "version": "libVersion-testing" - } - ] - } - }, - "version": 1, - "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.6" -} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.xml.bin b/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.xml.bin deleted file mode 100644 index ad29652f9..000000000 --- a/tests/_data/snapshots/environment/pep639_with-license-pep639_1.6.xml.bin +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - CycloneDX - cyclonedx-py - thisVersion-testing - CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments - - - Apache-2.0 - - - - - https://github.com/CycloneDX/cyclonedx-python/actions - - - https://pypi.org/project/cyclonedx-bom/ - - - https://cyclonedx-bom-tool.readthedocs.io/ - - - https://github.com/CycloneDX/cyclonedx-python/issues - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE - - - https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md - - - https://github.com/CycloneDX/cyclonedx-python/ - - - https://github.com/CycloneDX/cyclonedx-python/#readme - - - - - CycloneDX - cyclonedx-python-lib - libVersion-testing - - - - - - - - with-extras - 0.1.0 - depenndencies with license declaration accoring to PEP 639 - - - true - - - - - attrs - 23.2.0 - Classes Without Boilerplate - - - MIT - - - pkg:pypi/attrs@23.2.0 - - - https://www.attrs.org/ - from packaging metadata Project-URL: Documentation - - - https://github.com/sponsors/hynek - from packaging metadata Project-URL: Funding - - - https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi - from packaging metadata Project-URL: Tidelift - - - https://www.attrs.org/en/stable/changelog.html - from packaging metadata Project-URL: Changelog - - - https://github.com/python-attrs/attrs - from packaging metadata Project-URL: GitHub - - - - - boolean.py - 4.0 - Define boolean algebras, create and parse boolean expressions and create custom boolean DSL. - - - BSD-2-Clause - - - pkg:pypi/boolean.py@4.0 - - - https://github.com/bastikr/boolean.py - from packaging metadata: Home-page - - - - - cryptography - 43.0.1 - cryptography is a package which provides cryptographic recipes and primitives to Python developers. - - Apache-2.0 OR BSD-3-Clause - - pkg:pypi/cryptography@43.0.1 - - - https://cryptography.io/ - from packaging metadata Project-URL: documentation - - - https://github.com/pyca/cryptography/issues - from packaging metadata Project-URL: issues - - - https://github.com/pyca/cryptography/ - from packaging metadata Project-URL: source - - - https://cryptography.io/en/latest/changelog/ - from packaging metadata Project-URL: changelog - - - https://github.com/pyca/cryptography - from packaging metadata Project-URL: homepage - - - - - jsonpointer - 2.4 - Identify specific nodes in a JSON document (RFC 6901) - - - License :: OSI Approved :: BSD License - - - declared license of 'jsonpointer' - Modified BSD License - - - pkg:pypi/jsonpointer@2.4 - - - https://github.com/stefankoegl/python-json-pointer - from packaging metadata: Home-page - - - - - license-expression - 30.3.0 - license-expression is a comprehensive utility library to parse, compare, simplify and normalize license expressions (such as SPDX license expressions) using boolean logic. - - - Apache-2.0 - - - pkg:pypi/license-expression@30.3.0 - - - https://github.com/nexB/license-expression - from packaging metadata: Home-page - - - - - lxml - 5.3.0 - Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API. - - - BSD-3-Clause - - - License :: OSI Approved :: BSD License - - - pkg:pypi/lxml@5.3.0 - - - https://github.com/lxml/lxml - from packaging metadata Project-URL: Source - - - https://lxml.de/ - from packaging metadata: Home-page - - - - - regression-issue868 - 0.1 - - - file://.../tests/_data/infiles/_helpers/local_pckages/with-license-pep639_regression-issue868 - PackageSource: Local - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/_data/snapshots/environment/plain_local_1.1.xml.bin b/tests/_data/snapshots/environment/plain_local_1.1.xml.bin index d1db27470..55b0215ef 100644 --- a/tests/_data/snapshots/environment/plain_local_1.1.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.1.xml.bin @@ -5,12 +5,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl diff --git a/tests/_data/snapshots/environment/plain_local_1.2.json.bin b/tests/_data/snapshots/environment/plain_local_1.2.json.bin index 0a7dbfd06..0ef10e770 100644 --- a/tests/_data/snapshots/environment/plain_local_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_local_1.2.json.bin @@ -10,17 +10,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" diff --git a/tests/_data/snapshots/environment/plain_local_1.2.xml.bin b/tests/_data/snapshots/environment/plain_local_1.2.xml.bin index 277351d18..47171825b 100644 --- a/tests/_data/snapshots/environment/plain_local_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.2.xml.bin @@ -24,12 +24,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl diff --git a/tests/_data/snapshots/environment/plain_local_1.3.json.bin b/tests/_data/snapshots/environment/plain_local_1.3.json.bin index 52504fb4f..951a65e63 100644 --- a/tests/_data/snapshots/environment/plain_local_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_local_1.3.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Local", diff --git a/tests/_data/snapshots/environment/plain_local_1.3.xml.bin b/tests/_data/snapshots/environment/plain_local_1.3.xml.bin index 87fa1a2f3..87ae56065 100644 --- a/tests/_data/snapshots/environment/plain_local_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.3.xml.bin @@ -27,12 +27,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -78,6 +72,16 @@ PackageSource: Local + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_local_1.4.json.bin b/tests/_data/snapshots/environment/plain_local_1.4.json.bin index 9eecb3b55..e638d09d9 100644 --- a/tests/_data/snapshots/environment/plain_local_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_local_1.4.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Local", diff --git a/tests/_data/snapshots/environment/plain_local_1.4.xml.bin b/tests/_data/snapshots/environment/plain_local_1.4.xml.bin index 12cc36f1c..3f13ac541 100644 --- a/tests/_data/snapshots/environment/plain_local_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.4.xml.bin @@ -54,12 +54,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -105,6 +99,16 @@ PackageSource: Local + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_local_1.5.json.bin b/tests/_data/snapshots/environment/plain_local_1.5.json.bin index 861579e0f..3b03c8dab 100644 --- a/tests/_data/snapshots/environment/plain_local_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_local_1.5.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Local", diff --git a/tests/_data/snapshots/environment/plain_local_1.5.xml.bin b/tests/_data/snapshots/environment/plain_local_1.5.xml.bin index a800704b6..32415bae1 100644 --- a/tests/_data/snapshots/environment/plain_local_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.5.xml.bin @@ -64,12 +64,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -115,6 +109,16 @@ PackageSource: Local + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_local_1.6.json.bin b/tests/_data/snapshots/environment/plain_local_1.6.json.bin index 9cf26e796..961cc548e 100644 --- a/tests/_data/snapshots/environment/plain_local_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_local_1.6.json.bin @@ -16,18 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -69,6 +57,22 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Local", diff --git a/tests/_data/snapshots/environment/plain_local_1.6.xml.bin b/tests/_data/snapshots/environment/plain_local_1.6.xml.bin index d1e6d73e8..6cd6b336e 100644 --- a/tests/_data/snapshots/environment/plain_local_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_local_1.6.xml.bin @@ -64,12 +64,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -115,6 +109,16 @@ PackageSource: Local + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.3.json.bin b/tests/_data/snapshots/environment/plain_no-deps_1.3.json.bin index 3cfa3a05c..9254fa4cb 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.3.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.3.xml.bin b/tests/_data/snapshots/environment/plain_no-deps_1.3.xml.bin index c326a1fb8..3add75d68 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.4.json.bin b/tests/_data/snapshots/environment/plain_no-deps_1.4.json.bin index 9c91dd7a0..11b1b8e7b 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.4.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.4.xml.bin b/tests/_data/snapshots/environment/plain_no-deps_1.4.xml.bin index 374af51db..e66296747 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.5.json.bin b/tests/_data/snapshots/environment/plain_no-deps_1.5.json.bin index 5445beadf..6f36eac92 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.5.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.5.xml.bin b/tests/_data/snapshots/environment/plain_no-deps_1.5.xml.bin index c08c97e18..0a26b51c4 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.6.json.bin b/tests/_data/snapshots/environment/plain_no-deps_1.6.json.bin index 4dba1ef28..960672b5b 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.6.json.bin @@ -8,6 +8,22 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_no-deps_1.6.xml.bin b/tests/_data/snapshots/environment/plain_no-deps_1.6.xml.bin index aa980c042..805573888 100644 --- a/tests/_data/snapshots/environment/plain_no-deps_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_no-deps_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.1.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.1.xml.bin index b93650a85..913e43499 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.1.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.1.xml.bin @@ -9,10 +9,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.json.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.json.bin index d38fa0af1..a225a2802 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.json.bin @@ -30,15 +30,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'ruamel.yaml'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "ruamel.yaml", diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.xml.bin index dd132f329..a1961673d 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.2.xml.bin @@ -28,10 +28,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.json.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.json.bin index cdc37eb67..524ad20bd 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.json.bin @@ -30,15 +30,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'ruamel.yaml'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "ruamel.yaml", diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.xml.bin index 42e56d305..9a6cc0b2d 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.3.xml.bin @@ -31,10 +31,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.json.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.json.bin index 43250e66c..036cd6509 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.json.bin @@ -30,15 +30,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'ruamel.yaml'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "ruamel.yaml", diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.xml.bin index 201e0bff7..545b48684 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.4.xml.bin @@ -58,10 +58,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.json.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.json.bin index e08c89fa1..5a0fb10bd 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.json.bin @@ -30,15 +30,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'ruamel.yaml'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "ruamel.yaml", diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.xml.bin index 9820effdd..51adc4aa7 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.5.xml.bin @@ -68,10 +68,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.json.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.json.bin index 5b77848a4..2b716f80c 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.json.bin @@ -31,16 +31,6 @@ "acknowledgement": "declared", "id": "MIT" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'ruamel.yaml'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "ruamel.yaml", diff --git a/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.xml.bin b/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.xml.bin index adb0ca3e6..27360cf0b 100644 --- a/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_normalize-packagename_1.6.xml.bin @@ -68,10 +68,6 @@ MIT - - declared license of 'ruamel.yaml' - MIT license - pkg:pypi/ruamel.yaml@0.18.5 diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.3.json.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.3.json.bin index 2d8465d05..ee46f1835 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.3.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via PDM", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "licenses": [ { "expression": "Apache-2.0 OR MIT" diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.3.xml.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.3.xml.bin index 8b6cd0f1c..d790582fb 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.3.xml.bin @@ -20,6 +20,16 @@ Apache-2.0 OR MIT + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.4.json.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.4.json.bin index 7de548843..3d3359fa5 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.4.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via PDM", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "licenses": [ { "expression": "Apache-2.0 OR MIT" diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.4.xml.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.4.xml.bin index 766915a0e..c7d8692d7 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.4.xml.bin @@ -47,6 +47,16 @@ Apache-2.0 OR MIT + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.5.json.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.5.json.bin index 2128bdbac..677fd5dea 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.5.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via PDM", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "licenses": [ { "expression": "Apache-2.0 OR MIT" diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.5.xml.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.5.xml.bin index 0b2f2ca4d..caa1e581c 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.5.xml.bin @@ -57,6 +57,16 @@ Apache-2.0 OR MIT + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.6.json.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.6.json.bin index cf56a3c88..ab45221f9 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.6.json.bin @@ -39,6 +39,22 @@ "component": { "bom-ref": "root-component", "description": "environment via PDM", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "licenses": [ { "acknowledgement": "declared", diff --git a/tests/_data/snapshots/environment/plain_via-pdm_1.6.xml.bin b/tests/_data/snapshots/environment/plain_via-pdm_1.6.xml.bin index 0f8ffee96..44dd15f02 100644 --- a/tests/_data/snapshots/environment/plain_via-pdm_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pdm_1.6.xml.bin @@ -57,6 +57,16 @@ Apache-2.0 OR MIT + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.3.json.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.3.json.bin index 52fe11eef..e1e621c05 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.3.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Pipenv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.3.xml.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.3.xml.bin index b317f5d85..c42bcd765 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.4.json.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.4.json.bin index ebddcb7d3..a07e9717a 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.4.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Pipenv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.4.xml.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.4.xml.bin index e56884315..5e9b64ac4 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.5.json.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.5.json.bin index 21836742d..854fe32c2 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.5.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Pipenv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.5.xml.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.5.xml.bin index 208a2e530..8cccfdf02 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.6.json.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.6.json.bin index 0c8973f9e..2e2c59bb3 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.6.json.bin @@ -39,6 +39,22 @@ "component": { "bom-ref": "root-component", "description": "environment via Pipenv", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-pipenv_1.6.xml.bin b/tests/_data/snapshots/environment/plain_via-pipenv_1.6.xml.bin index 741acb5fe..9cfbc58aa 100644 --- a/tests/_data/snapshots/environment/plain_via-pipenv_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-pipenv_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.3.json.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.3.json.bin index 4b29daa2c..c419de978 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.3.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Poetry", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.3.xml.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.3.xml.bin index cc721dde5..3df05578e 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.3.xml.bin @@ -46,6 +46,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.4.json.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.4.json.bin index 18f33bb32..731ce7675 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.4.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Poetry", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.4.xml.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.4.xml.bin index f56a2e3d5..8c0927bd1 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.4.xml.bin @@ -73,6 +73,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.5.json.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.5.json.bin index 8d4d2fee0..999cdf0af 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.5.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via Poetry", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.5.xml.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.5.xml.bin index 56587e1c0..bee409570 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.5.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.6.json.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.6.json.bin index bd203fecf..8977068a5 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.6.json.bin @@ -39,6 +39,22 @@ "component": { "bom-ref": "root-component", "description": "environment via Poetry", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-poetry_1.6.xml.bin b/tests/_data/snapshots/environment/plain_via-poetry_1.6.xml.bin index e68e76c04..dfdcb42d4 100644 --- a/tests/_data/snapshots/environment/plain_via-poetry_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-poetry_1.6.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.3.json.bin b/tests/_data/snapshots/environment/plain_via-uv_1.3.json.bin index 69b1c7c72..de9108d0d 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.3.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via uv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.3.xml.bin b/tests/_data/snapshots/environment/plain_via-uv_1.3.xml.bin index 49e59fd6b..056f7cfc8 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.4.json.bin b/tests/_data/snapshots/environment/plain_via-uv_1.4.json.bin index 013509a07..692935df4 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.4.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via uv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.4.xml.bin b/tests/_data/snapshots/environment/plain_via-uv_1.4.xml.bin index 91bb7c4de..59f9266eb 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.5.json.bin b/tests/_data/snapshots/environment/plain_via-uv_1.5.json.bin index ff2632a5e..4216572ee 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.5.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "environment via uv", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.5.xml.bin b/tests/_data/snapshots/environment/plain_via-uv_1.5.xml.bin index 5c5a342f4..d5a017f75 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.6.json.bin b/tests/_data/snapshots/environment/plain_via-uv_1.6.json.bin index 76c94e9e2..ac5e5034e 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.6.json.bin @@ -39,6 +39,22 @@ "component": { "bom-ref": "root-component", "description": "environment via uv", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/environment/plain_via-uv_1.6.xml.bin b/tests/_data/snapshots/environment/plain_via-uv_1.6.xml.bin index f89b2f64e..8a23e33c3 100644 --- a/tests/_data/snapshots/environment/plain_via-uv_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_via-uv_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.1.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.1.xml.bin index bb4a0dd06..d8c26272c 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.1.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.1.xml.bin @@ -120,10 +120,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -145,10 +141,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -208,10 +200,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -241,10 +229,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -446,10 +430,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -516,10 +496,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -537,10 +513,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -616,10 +588,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -673,10 +641,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.2.json.bin b/tests/_data/snapshots/environment/plain_with-extras_1.2.json.bin index a579be150..dae67ce2e 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.2.json.bin @@ -163,15 +163,6 @@ "license": { "id": "Python-2.0" } - }, - { - "license": { - "name": "declared license of 'defusedxml'", - "text": { - "content": "PSFL", - "contentType": "text/plain" - } - } } ], "name": "defusedxml", @@ -194,15 +185,6 @@ "license": { "name": "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)" } - }, - { - "license": { - "name": "declared license of 'fqdn'", - "text": { - "content": "MPL 2.0", - "contentType": "text/plain" - } - } } ], "name": "fqdn", @@ -294,15 +276,6 @@ "license": { "id": "ISC" } - }, - { - "license": { - "name": "declared license of 'isoduration'", - "text": { - "content": "UNKNOWN", - "contentType": "text/plain" - } - } } ], "name": "isoduration", @@ -325,15 +298,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -605,15 +569,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'python-dateutil'", - "text": { - "content": "Dual License", - "contentType": "text/plain" - } - } } ], "name": "python-dateutil", @@ -688,15 +643,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'rfc3339-validator'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "rfc3339-validator", @@ -724,15 +670,6 @@ "license": { "id": "GPL-3.0-or-later" } - }, - { - "license": { - "name": "declared license of 'rfc3987'", - "text": { - "content": "GNU GPLv3+", - "contentType": "text/plain" - } - } } ], "name": "rfc3987", @@ -824,15 +761,6 @@ "license": { "name": "License :: OSI Approved :: Apache Software License" } - }, - { - "license": { - "name": "declared license of 'sortedcontainers'", - "text": { - "content": "Apache 2.0", - "contentType": "text/plain" - } - } } ], "name": "sortedcontainers", @@ -902,15 +830,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'uri-template'", - "text": { - "content": "MIT License", - "contentType": "text/plain" - } - } } ], "name": "uri-template", diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.2.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.2.xml.bin index 8486b18a4..848bffce3 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.2.xml.bin @@ -139,10 +139,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -164,10 +160,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -227,10 +219,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -260,10 +248,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -465,10 +449,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -535,10 +515,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -556,10 +532,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -635,10 +607,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -692,10 +660,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.3.json.bin b/tests/_data/snapshots/environment/plain_with-extras_1.3.json.bin index f66d4161e..58dd4b900 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.3.json.bin @@ -169,15 +169,6 @@ "license": { "id": "Python-2.0" } - }, - { - "license": { - "name": "declared license of 'defusedxml'", - "text": { - "content": "PSFL", - "contentType": "text/plain" - } - } } ], "name": "defusedxml", @@ -200,15 +191,6 @@ "license": { "name": "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)" } - }, - { - "license": { - "name": "declared license of 'fqdn'", - "text": { - "content": "MPL 2.0", - "contentType": "text/plain" - } - } } ], "name": "fqdn", @@ -300,15 +282,6 @@ "license": { "id": "ISC" } - }, - { - "license": { - "name": "declared license of 'isoduration'", - "text": { - "content": "UNKNOWN", - "contentType": "text/plain" - } - } } ], "name": "isoduration", @@ -331,15 +304,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -617,15 +581,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'python-dateutil'", - "text": { - "content": "Dual License", - "contentType": "text/plain" - } - } } ], "name": "python-dateutil", @@ -700,15 +655,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'rfc3339-validator'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "rfc3339-validator", @@ -736,15 +682,6 @@ "license": { "id": "GPL-3.0-or-later" } - }, - { - "license": { - "name": "declared license of 'rfc3987'", - "text": { - "content": "GNU GPLv3+", - "contentType": "text/plain" - } - } } ], "name": "rfc3987", @@ -836,15 +773,6 @@ "license": { "name": "License :: OSI Approved :: Apache Software License" } - }, - { - "license": { - "name": "declared license of 'sortedcontainers'", - "text": { - "content": "Apache 2.0", - "contentType": "text/plain" - } - } } ], "name": "sortedcontainers", @@ -914,15 +842,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'uri-template'", - "text": { - "content": "MIT License", - "contentType": "text/plain" - } - } } ], "name": "uri-template", diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.3.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.3.xml.bin index cc40e9bd9..4f7eb1af8 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.3.xml.bin @@ -145,10 +145,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -170,10 +166,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -233,10 +225,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -266,10 +254,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -474,10 +458,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -544,10 +524,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -565,10 +541,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -644,10 +616,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -701,10 +669,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.4.json.bin b/tests/_data/snapshots/environment/plain_with-extras_1.4.json.bin index f8768d791..e01cccf45 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.4.json.bin @@ -169,15 +169,6 @@ "license": { "id": "Python-2.0" } - }, - { - "license": { - "name": "declared license of 'defusedxml'", - "text": { - "content": "PSFL", - "contentType": "text/plain" - } - } } ], "name": "defusedxml", @@ -200,15 +191,6 @@ "license": { "name": "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)" } - }, - { - "license": { - "name": "declared license of 'fqdn'", - "text": { - "content": "MPL 2.0", - "contentType": "text/plain" - } - } } ], "name": "fqdn", @@ -300,15 +282,6 @@ "license": { "id": "ISC" } - }, - { - "license": { - "name": "declared license of 'isoduration'", - "text": { - "content": "UNKNOWN", - "contentType": "text/plain" - } - } } ], "name": "isoduration", @@ -331,15 +304,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -617,15 +581,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'python-dateutil'", - "text": { - "content": "Dual License", - "contentType": "text/plain" - } - } } ], "name": "python-dateutil", @@ -700,15 +655,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'rfc3339-validator'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "rfc3339-validator", @@ -736,15 +682,6 @@ "license": { "id": "GPL-3.0-or-later" } - }, - { - "license": { - "name": "declared license of 'rfc3987'", - "text": { - "content": "GNU GPLv3+", - "contentType": "text/plain" - } - } } ], "name": "rfc3987", @@ -836,15 +773,6 @@ "license": { "name": "License :: OSI Approved :: Apache Software License" } - }, - { - "license": { - "name": "declared license of 'sortedcontainers'", - "text": { - "content": "Apache 2.0", - "contentType": "text/plain" - } - } } ], "name": "sortedcontainers", @@ -914,15 +842,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'uri-template'", - "text": { - "content": "MIT License", - "contentType": "text/plain" - } - } } ], "name": "uri-template", diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.4.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.4.xml.bin index ab0774ad2..d6f2a8ec3 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.4.xml.bin @@ -172,10 +172,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -197,10 +193,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -260,10 +252,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -293,10 +281,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -501,10 +485,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -571,10 +551,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -592,10 +568,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -671,10 +643,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -728,10 +696,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.5.json.bin b/tests/_data/snapshots/environment/plain_with-extras_1.5.json.bin index bb5d5efef..333b25a36 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.5.json.bin @@ -169,15 +169,6 @@ "license": { "id": "Python-2.0" } - }, - { - "license": { - "name": "declared license of 'defusedxml'", - "text": { - "content": "PSFL", - "contentType": "text/plain" - } - } } ], "name": "defusedxml", @@ -200,15 +191,6 @@ "license": { "name": "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)" } - }, - { - "license": { - "name": "declared license of 'fqdn'", - "text": { - "content": "MPL 2.0", - "contentType": "text/plain" - } - } } ], "name": "fqdn", @@ -300,15 +282,6 @@ "license": { "id": "ISC" } - }, - { - "license": { - "name": "declared license of 'isoduration'", - "text": { - "content": "UNKNOWN", - "contentType": "text/plain" - } - } } ], "name": "isoduration", @@ -331,15 +304,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -617,15 +581,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'python-dateutil'", - "text": { - "content": "Dual License", - "contentType": "text/plain" - } - } } ], "name": "python-dateutil", @@ -700,15 +655,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'rfc3339-validator'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "rfc3339-validator", @@ -736,15 +682,6 @@ "license": { "id": "GPL-3.0-or-later" } - }, - { - "license": { - "name": "declared license of 'rfc3987'", - "text": { - "content": "GNU GPLv3+", - "contentType": "text/plain" - } - } } ], "name": "rfc3987", @@ -836,15 +773,6 @@ "license": { "name": "License :: OSI Approved :: Apache Software License" } - }, - { - "license": { - "name": "declared license of 'sortedcontainers'", - "text": { - "content": "Apache 2.0", - "contentType": "text/plain" - } - } } ], "name": "sortedcontainers", @@ -914,15 +842,6 @@ "license": { "id": "MIT" } - }, - { - "license": { - "name": "declared license of 'uri-template'", - "text": { - "content": "MIT License", - "contentType": "text/plain" - } - } } ], "name": "uri-template", diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.5.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.5.xml.bin index 3d7a37d70..fcde2541a 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.5.xml.bin @@ -182,10 +182,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -207,10 +203,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -270,10 +262,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -303,10 +291,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -511,10 +495,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -581,10 +561,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -602,10 +578,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -681,10 +653,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -738,10 +706,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.6.json.bin b/tests/_data/snapshots/environment/plain_with-extras_1.6.json.bin index 7620bcec4..e1b260f23 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.6.json.bin @@ -175,16 +175,6 @@ "acknowledgement": "declared", "id": "Python-2.0" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'defusedxml'", - "text": { - "content": "PSFL", - "contentType": "text/plain" - } - } } ], "name": "defusedxml", @@ -208,16 +198,6 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'fqdn'", - "text": { - "content": "MPL 2.0", - "contentType": "text/plain" - } - } } ], "name": "fqdn", @@ -312,16 +292,6 @@ "acknowledgement": "declared", "id": "ISC" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'isoduration'", - "text": { - "content": "UNKNOWN", - "contentType": "text/plain" - } - } } ], "name": "isoduration", @@ -345,16 +315,6 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -643,16 +603,6 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'python-dateutil'", - "text": { - "content": "Dual License", - "contentType": "text/plain" - } - } } ], "name": "python-dateutil", @@ -729,16 +679,6 @@ "acknowledgement": "declared", "id": "MIT" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'rfc3339-validator'", - "text": { - "content": "MIT license", - "contentType": "text/plain" - } - } } ], "name": "rfc3339-validator", @@ -767,16 +707,6 @@ "acknowledgement": "declared", "id": "GPL-3.0-or-later" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'rfc3987'", - "text": { - "content": "GNU GPLv3+", - "contentType": "text/plain" - } - } } ], "name": "rfc3987", @@ -871,16 +801,6 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: Apache Software License" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'sortedcontainers'", - "text": { - "content": "Apache 2.0", - "contentType": "text/plain" - } - } } ], "name": "sortedcontainers", @@ -953,16 +873,6 @@ "acknowledgement": "declared", "id": "MIT" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'uri-template'", - "text": { - "content": "MIT License", - "contentType": "text/plain" - } - } } ], "name": "uri-template", diff --git a/tests/_data/snapshots/environment/plain_with-extras_1.6.xml.bin b/tests/_data/snapshots/environment/plain_with-extras_1.6.xml.bin index a4fb2708c..6de3ed477 100644 --- a/tests/_data/snapshots/environment/plain_with-extras_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-extras_1.6.xml.bin @@ -182,10 +182,6 @@ Python-2.0 - - declared license of 'defusedxml' - PSFL - pkg:pypi/defusedxml@0.7.1 @@ -207,10 +203,6 @@ License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) - - declared license of 'fqdn' - MPL 2.0 - pkg:pypi/fqdn@1.5.1 @@ -270,10 +262,6 @@ ISC - - declared license of 'isoduration' - UNKNOWN - pkg:pypi/isoduration@20.11.0 @@ -303,10 +291,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@3.0.0 @@ -511,10 +495,6 @@ License :: OSI Approved :: BSD License - - declared license of 'python-dateutil' - Dual License - pkg:pypi/python-dateutil@2.9.0.post0 @@ -581,10 +561,6 @@ MIT - - declared license of 'rfc3339-validator' - MIT license - pkg:pypi/rfc3339-validator@0.1.4 @@ -602,10 +578,6 @@ GPL-3.0-or-later - - declared license of 'rfc3987' - GNU GPLv3+ - pkg:pypi/rfc3987@1.3.8 @@ -681,10 +653,6 @@ License :: OSI Approved :: Apache Software License - - declared license of 'sortedcontainers' - Apache 2.0 - pkg:pypi/sortedcontainers@2.4.0 @@ -738,10 +706,6 @@ MIT - - declared license of 'uri-template' - MIT License - pkg:pypi/uri-template@1.3.0 diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.2.json.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.2.json.bin index 7c99638f5..09915d4ce 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.2.json.bin @@ -8,18 +8,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses from file, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-file'", - "text": { - "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", - "contentType": "text/plain", - "encoding": "base64" - } - } - } - ], "name": "with-license-file", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.2.xml.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.2.xml.bin index 710c26d9f..5864bcc22 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.2.xml.bin @@ -17,12 +17,6 @@ with-license-file 0.1.0 with licenses from file, instead of SPDX ID/Expression - - - declared license of 'with-license-file' - VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= - - diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.3.json.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.3.json.bin index 2e92b0936..80803a69f 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.3.json.bin @@ -8,18 +8,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses from file, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-file'", - "text": { - "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", - "contentType": "text/plain", - "encoding": "base64" - } - } - } - ], "name": "with-license-file", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.3.xml.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.3.xml.bin index 29a9c22a6..4f7e90c8f 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.3.xml.bin @@ -17,12 +17,6 @@ with-license-file 0.1.0 with licenses from file, instead of SPDX ID/Expression - - - declared license of 'with-license-file' - VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= - - true diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.4.json.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.4.json.bin index 8d424333d..bcf506567 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.4.json.bin @@ -8,18 +8,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses from file, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-file'", - "text": { - "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", - "contentType": "text/plain", - "encoding": "base64" - } - } - } - ], "name": "with-license-file", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.4.xml.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.4.xml.bin index 08fd7e21f..a0b16db16 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.4.xml.bin @@ -44,12 +44,6 @@ with-license-file 0.1.0 with licenses from file, instead of SPDX ID/Expression - - - declared license of 'with-license-file' - VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= - - true diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.5.json.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.5.json.bin index ab180b3f9..baabd67c2 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.5.json.bin @@ -8,18 +8,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses from file, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-file'", - "text": { - "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", - "contentType": "text/plain", - "encoding": "base64" - } - } - } - ], "name": "with-license-file", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.5.xml.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.5.xml.bin index 5c5345a5e..395033b50 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.5.xml.bin @@ -54,12 +54,6 @@ with-license-file 0.1.0 with licenses from file, instead of SPDX ID/Expression - - - declared license of 'with-license-file' - VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= - - true diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.6.json.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.6.json.bin index 8da5bfc29..ab32c6620 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.6.json.bin @@ -8,19 +8,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses from file, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'with-license-file'", - "text": { - "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", - "contentType": "text/plain", - "encoding": "base64" - } - } - } - ], "name": "with-license-file", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-file_1.6.xml.bin b/tests/_data/snapshots/environment/plain_with-license-file_1.6.xml.bin index 0af5025b0..d7477e137 100644 --- a/tests/_data/snapshots/environment/plain_with-license-file_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-file_1.6.xml.bin @@ -54,12 +54,6 @@ with-license-file 0.1.0 with licenses from file, instead of SPDX ID/Expression - - - declared license of 'with-license-file' - VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= - - true diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.0.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.0.xml.bin index 0fd15f6d0..b48275799 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.0.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.0.xml.bin @@ -15,6 +15,13 @@ pkg:pypi/boolean.py@4.0 false + + chardet + 5.2.0 + Universal encoding detector for Python 3 + pkg:pypi/chardet@5.2.0 + false + cryptography 43.0.1 diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.1.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.1.xml.bin index 4e48511fa..4aed6cd2f 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.1.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.1.xml.bin @@ -51,6 +51,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -90,10 +119,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.json.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.json.bin index 60dbfb7c1..8016f9a15 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.json.bin @@ -64,6 +64,43 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", @@ -119,15 +156,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -210,6 +238,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +275,12 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.xml.bin index 7f84c211c..669c6b16c 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.2.xml.bin @@ -16,7 +16,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + @@ -70,6 +73,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -109,10 +141,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 @@ -177,6 +205,7 @@ + diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.json.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.json.bin index 149dde3a2..23f749f39 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.json.bin @@ -64,9 +64,60 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -119,15 +170,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -210,6 +252,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +289,12 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.xml.bin index 24d43c9a4..926df2fd2 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.3.xml.bin @@ -16,7 +16,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + true @@ -73,6 +76,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -103,6 +135,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -112,10 +154,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 @@ -180,6 +218,7 @@ + diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.json.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.json.bin index e8cfac9cb..9c8b753d7 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.json.bin @@ -64,9 +64,60 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -119,15 +170,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -210,6 +252,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +289,12 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.xml.bin index d279b4edf..827c66a37 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.4.xml.bin @@ -43,7 +43,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + true @@ -100,6 +103,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -130,6 +162,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -139,10 +181,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 @@ -207,6 +245,7 @@ + diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.json.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.json.bin index 80f7c603b..883505454 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.json.bin @@ -64,9 +64,60 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -119,15 +170,6 @@ "license": { "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -210,6 +252,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +289,12 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.xml.bin index cf0b89298..af611cc33 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.5.xml.bin @@ -53,7 +53,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + true @@ -110,6 +113,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -140,6 +172,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -149,10 +191,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 @@ -217,6 +255,7 @@ + diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.json.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.json.bin index ef04c1266..5915e5281 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.json.bin @@ -66,9 +66,63 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -123,16 +177,6 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: BSD License" } - }, - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'jsonpointer'", - "text": { - "content": "Modified BSD License", - "contentType": "text/plain" - } - } } ], "name": "jsonpointer", @@ -218,6 +262,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -252,7 +299,13 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "acknowledgement": "declared", + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.xml.bin b/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.xml.bin index ad29652f9..e226c35a9 100644 --- a/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-pep639_1.6.xml.bin @@ -53,7 +53,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + true @@ -110,6 +113,35 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -140,6 +172,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -149,10 +191,6 @@ License :: OSI Approved :: BSD License - - declared license of 'jsonpointer' - Modified BSD License - pkg:pypi/jsonpointer@2.4 @@ -217,6 +255,7 @@ + diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.1.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.1.xml.bin index 7b5ef01bb..f8b0ee087 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.1.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.1.xml.bin @@ -5,12 +5,6 @@ package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.2.json.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.2.json.bin index 14ac614bb..80b7ceade 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.2.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.2.json.bin @@ -10,17 +10,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -89,17 +78,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses as text, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-text'", - "text": { - "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", - "contentType": "text/plain" - } - } - } - ], "name": "with-license-text", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.2.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.2.xml.bin index a8cff13d5..807a41343 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.2.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.2.xml.bin @@ -17,13 +17,6 @@ with-license-text 0.1.0 with licenses as text, instead of SPDX ID/Expression - - - declared license of 'with-license-text' - This is the license text of this component. -It is expected to be available in a SBOM. - - @@ -31,12 +24,6 @@ It is expected to be available in a SBOM. package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.3.json.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.3.json.bin index ff26e8763..d18b46433 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.3.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.3.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Archive", @@ -107,17 +110,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses as text, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-text'", - "text": { - "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", - "contentType": "text/plain" - } - } - } - ], "name": "with-license-text", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.3.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.3.xml.bin index feface8ad..2c91f51cb 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.3.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.3.xml.bin @@ -17,13 +17,6 @@ with-license-text 0.1.0 with licenses as text, instead of SPDX ID/Expression - - - declared license of 'with-license-text' - This is the license text of this component. -It is expected to be available in a SBOM. - - true @@ -34,12 +27,6 @@ It is expected to be available in a SBOM. package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -88,6 +75,16 @@ It is expected to be available in a SBOM. + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.4.json.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.4.json.bin index 01f585318..6a4de2400 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.4.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.4.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Archive", @@ -107,17 +110,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses as text, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-text'", - "text": { - "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", - "contentType": "text/plain" - } - } - } - ], "name": "with-license-text", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.4.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.4.xml.bin index 96c298089..a764518e5 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.4.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.4.xml.bin @@ -44,13 +44,6 @@ with-license-text 0.1.0 with licenses as text, instead of SPDX ID/Expression - - - declared license of 'with-license-text' - This is the license text of this component. -It is expected to be available in a SBOM. - - true @@ -61,12 +54,6 @@ It is expected to be available in a SBOM. package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -115,6 +102,16 @@ It is expected to be available in a SBOM. + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.5.json.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.5.json.bin index 3ddaa8d0f..6e8ce5e30 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.5.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.5.json.bin @@ -16,17 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -66,6 +55,20 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Archive", @@ -107,17 +110,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses as text, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "name": "declared license of 'with-license-text'", - "text": { - "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", - "contentType": "text/plain" - } - } - } - ], "name": "with-license-text", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.5.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.5.xml.bin index 96f4f29fc..bc5bd8557 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.5.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.5.xml.bin @@ -54,13 +54,6 @@ with-license-text 0.1.0 with licenses as text, instead of SPDX ID/Expression - - - declared license of 'with-license-text' - This is the license text of this component. -It is expected to be available in a SBOM. - - true @@ -71,12 +64,6 @@ It is expected to be available in a SBOM. package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -125,6 +112,16 @@ It is expected to be available in a SBOM. + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.6.json.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.6.json.bin index 01f249ed9..183060eec 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.6.json.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.6.json.bin @@ -16,18 +16,6 @@ "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" } ], - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'package-a'", - "text": { - "content": "some license text", - "contentType": "text/plain" - } - } - } - ], "name": "package-a", "type": "library", "version": "23.42" @@ -69,6 +57,22 @@ { "bom-ref": "package-c==23.42", "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "PackageSource: Archive", @@ -111,18 +115,6 @@ "component": { "bom-ref": "root-component", "description": "with licenses as text, instead of SPDX ID/Expression", - "licenses": [ - { - "license": { - "acknowledgement": "declared", - "name": "declared license of 'with-license-text'", - "text": { - "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", - "contentType": "text/plain" - } - } - } - ], "name": "with-license-text", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/plain_with-license-text_1.6.xml.bin b/tests/_data/snapshots/environment/plain_with-license-text_1.6.xml.bin index a0d73953a..ae0829676 100644 --- a/tests/_data/snapshots/environment/plain_with-license-text_1.6.xml.bin +++ b/tests/_data/snapshots/environment/plain_with-license-text_1.6.xml.bin @@ -54,13 +54,6 @@ with-license-text 0.1.0 with licenses as text, instead of SPDX ID/Expression - - - declared license of 'with-license-text' - This is the license text of this component. -It is expected to be available in a SBOM. - - true @@ -71,12 +64,6 @@ It is expected to be available in a SBOM. package-a 23.42 some package A - - - declared license of 'package-a' - some license text - - file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl @@ -125,6 +112,16 @@ It is expected to be available in a SBOM. + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.0.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.0.xml.bin new file mode 100644 index 000000000..acb066124 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.0.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.1.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.1.xml.bin new file mode 100644 index 000000000..640f73ff7 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.1.xml.bin @@ -0,0 +1,4 @@ + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.2.json.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.2.json.bin new file mode 100644 index 000000000..a8818a8ce --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.2.json.bin @@ -0,0 +1,44 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses from file, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-file'", + "text": { + "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ], + "name": "with-license-file", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.2.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.2.xml.bin new file mode 100644 index 000000000..32a69a6f5 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.2.xml.bin @@ -0,0 +1,31 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-license-file + 0.1.0 + with licenses from file, instead of SPDX ID/Expression + + + declared license of 'with-license-file' + VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= + + + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.3.json.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.3.json.bin new file mode 100644 index 000000000..b7ca37245 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.3.json.bin @@ -0,0 +1,50 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses from file, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-file'", + "text": { + "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ], + "name": "with-license-file", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.3.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.3.xml.bin new file mode 100644 index 000000000..2cd65090d --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.3.xml.bin @@ -0,0 +1,34 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-license-file + 0.1.0 + with licenses from file, instead of SPDX ID/Expression + + + declared license of 'with-license-file' + VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.4.json.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.4.json.bin new file mode 100644 index 000000000..2cdc8bb05 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.4.json.bin @@ -0,0 +1,85 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses from file, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-file'", + "text": { + "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ], + "name": "with-license-file", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.4.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.4.xml.bin new file mode 100644 index 000000000..f67be62bd --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.4.xml.bin @@ -0,0 +1,61 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-license-file + 0.1.0 + with licenses from file, instead of SPDX ID/Expression + + + declared license of 'with-license-file' + VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.5.json.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.5.json.bin new file mode 100644 index 000000000..f9a86def2 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.5.json.bin @@ -0,0 +1,99 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses from file, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-file'", + "text": { + "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ], + "name": "with-license-file", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": { + "components": [ + { + "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "group": "CycloneDX", + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-py", + "type": "application", + "version": "thisVersion-testing" + }, + { + "description": "stripped", + "externalReferences": [ ], + "group": "CycloneDX", + "licenses": [ ], + "name": "cyclonedx-python-lib", + "type": "library", + "version": "libVersion-testing" + } + ] + } + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.5.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.5.xml.bin new file mode 100644 index 000000000..87ed053ae --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.5.xml.bin @@ -0,0 +1,71 @@ + + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments + + + Apache-2.0 + + + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + + + with-license-file + 0.1.0 + with licenses from file, instead of SPDX ID/Expression + + + declared license of 'with-license-file' + VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.6.json.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.6.json.bin new file mode 100644 index 000000000..213260442 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.6.json.bin @@ -0,0 +1,101 @@ +{ + "dependencies": [ + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses from file, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "declared license of 'with-license-file'", + "text": { + "content": "VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ], + "name": "with-license-file", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": { + "components": [ + { + "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "group": "CycloneDX", + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-py", + "type": "application", + "version": "thisVersion-testing" + }, + { + "description": "stripped", + "externalReferences": [ ], + "group": "CycloneDX", + "licenses": [ ], + "name": "cyclonedx-python-lib", + "type": "library", + "version": "libVersion-testing" + } + ] + } + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.6" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-file_1.6.xml.bin b/tests/_data/snapshots/environment/texts_with-license-file_1.6.xml.bin new file mode 100644 index 000000000..d189c0430 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-file_1.6.xml.bin @@ -0,0 +1,71 @@ + + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments + + + Apache-2.0 + + + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + + + with-license-file + 0.1.0 + with licenses from file, instead of SPDX ID/Expression + + + declared license of 'with-license-file' + VGhpcyBpcyB0aGUgbGljZW5zZSB0ZXh0IG9mIHRoaXMgY29tcG9uZW50LgpJdCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUgaW4gYSBTQk9NLgo= + + + + + true + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.0.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.0.xml.bin index 0fd15f6d0..b48275799 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.0.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.0.xml.bin @@ -15,6 +15,13 @@ pkg:pypi/boolean.py@4.0 false + + chardet + 5.2.0 + Universal encoding detector for Python 3 + pkg:pypi/chardet@5.2.0 + false + cryptography 43.0.1 diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.1.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.1.xml.bin index 4e48511fa..f03e0ae2d 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.1.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.1.xml.bin @@ -42,6 +42,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -51,6 +63,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -90,6 +139,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -111,6 +168,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -131,6 +208,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.json.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.json.bin index 60dbfb7c1..8d15fdfbe 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.json.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.json.bin @@ -57,6 +57,36 @@ "license": { "id": "BSD-2-Clause" } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: README.rst", + "text": { + "content": "Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg==", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } } ], "name": "boolean.py", @@ -64,6 +94,62 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + }, + { + "license": { + "name": "declared license file: LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license of 'chardet'", + "text": { + "content": "LGPL", + "contentType": "text/plain" + } + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", @@ -120,6 +206,26 @@ "name": "License :: OSI Approved :: BSD License" } }, + { + "license": { + "name": "declared license file: AUTHORS", + "text": { + "content": "U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, { "license": { "name": "declared license of 'jsonpointer'", @@ -150,6 +256,56 @@ "license": { "id": "Apache-2.0" } + }, + { + "license": { + "name": "declared license file: AUTHORS.rst", + "text": { + "content": "VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CODE_OF_CONDUCT.rst", + "text": { + "content": "Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE", + "text": { + "content": "IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: apache-2.0.LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "license-expression", @@ -182,6 +338,26 @@ "license": { "name": "License :: OSI Approved :: BSD License" } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSES.txt", + "text": { + "content": "bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "lxml", @@ -210,6 +386,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +423,12 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.xml.bin index 7f84c211c..749b02e2d 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.2.xml.bin @@ -16,7 +16,10 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + @@ -61,6 +64,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -70,6 +85,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -109,6 +161,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -130,6 +190,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -150,6 +230,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 @@ -177,6 +265,7 @@ + diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.json.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.json.bin index 149dde3a2..40d20b535 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.json.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.json.bin @@ -57,6 +57,36 @@ "license": { "id": "BSD-2-Clause" } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: README.rst", + "text": { + "content": "Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg==", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } } ], "name": "boolean.py", @@ -64,9 +94,79 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + }, + { + "license": { + "name": "declared license file: LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license of 'chardet'", + "text": { + "content": "LGPL", + "contentType": "text/plain" + } + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -120,6 +220,26 @@ "name": "License :: OSI Approved :: BSD License" } }, + { + "license": { + "name": "declared license file: AUTHORS", + "text": { + "content": "U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, { "license": { "name": "declared license of 'jsonpointer'", @@ -150,6 +270,56 @@ "license": { "id": "Apache-2.0" } + }, + { + "license": { + "name": "declared license file: AUTHORS.rst", + "text": { + "content": "VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CODE_OF_CONDUCT.rst", + "text": { + "content": "Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE", + "text": { + "content": "IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: apache-2.0.LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "license-expression", @@ -182,6 +352,26 @@ "license": { "name": "License :: OSI Approved :: BSD License" } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSES.txt", + "text": { + "content": "bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "lxml", @@ -210,6 +400,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +437,96 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "evidence": { + "licenses": [ + { + "license": { + "name": "declared license file: AUTHORS.example.bin", + "text": { + "content": "dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENCE.dummy.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE.bin", + "text": { + "content": "dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.CC0.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.MIT.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/LICENSE.md.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/legal/NOTICE.txt.bin", + "text": { + "content": "dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ] + }, + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.xml.bin index 24d43c9a4..7d7d7d450 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.3.xml.bin @@ -16,7 +16,46 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + + + + + declared license file: AUTHORS.example.bin + dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK + + + declared license file: LICENCE.dummy.bin + dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg== + + + declared license file: LICENSE.txt.bin + dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo= + + + declared license file: NOTICE.bin + dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg== + + + declared license file: licenses_a/LICENSE.CC0.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg== + + + declared license file: licenses_a/LICENSE.MIT.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg== + + + declared license file: licenses_b/LICENSE.md.bin + dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK + + + declared license file: licenses_b/legal/NOTICE.txt.bin + dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo= + + + true @@ -64,6 +103,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -73,6 +124,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -103,6 +191,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -112,6 +210,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -133,6 +239,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -153,6 +279,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 @@ -180,6 +314,7 @@ + diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.json.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.json.bin index e8cfac9cb..160d0cff9 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.json.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.json.bin @@ -57,6 +57,36 @@ "license": { "id": "BSD-2-Clause" } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: README.rst", + "text": { + "content": "Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg==", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } } ], "name": "boolean.py", @@ -64,9 +94,79 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + }, + { + "license": { + "name": "declared license file: LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license of 'chardet'", + "text": { + "content": "LGPL", + "contentType": "text/plain" + } + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -120,6 +220,26 @@ "name": "License :: OSI Approved :: BSD License" } }, + { + "license": { + "name": "declared license file: AUTHORS", + "text": { + "content": "U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, { "license": { "name": "declared license of 'jsonpointer'", @@ -150,6 +270,56 @@ "license": { "id": "Apache-2.0" } + }, + { + "license": { + "name": "declared license file: AUTHORS.rst", + "text": { + "content": "VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CODE_OF_CONDUCT.rst", + "text": { + "content": "Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE", + "text": { + "content": "IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: apache-2.0.LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "license-expression", @@ -182,6 +352,26 @@ "license": { "name": "License :: OSI Approved :: BSD License" } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSES.txt", + "text": { + "content": "bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "lxml", @@ -210,6 +400,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +437,96 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "evidence": { + "licenses": [ + { + "license": { + "name": "declared license file: AUTHORS.example.bin", + "text": { + "content": "dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENCE.dummy.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE.bin", + "text": { + "content": "dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.CC0.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.MIT.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/LICENSE.md.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/legal/NOTICE.txt.bin", + "text": { + "content": "dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ] + }, + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.xml.bin index d279b4edf..83297b43a 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.4.xml.bin @@ -43,7 +43,46 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + + + + + declared license file: AUTHORS.example.bin + dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK + + + declared license file: LICENCE.dummy.bin + dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg== + + + declared license file: LICENSE.txt.bin + dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo= + + + declared license file: NOTICE.bin + dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg== + + + declared license file: licenses_a/LICENSE.CC0.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg== + + + declared license file: licenses_a/LICENSE.MIT.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg== + + + declared license file: licenses_b/LICENSE.md.bin + dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK + + + declared license file: licenses_b/legal/NOTICE.txt.bin + dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo= + + + true @@ -91,6 +130,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -100,6 +151,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -130,6 +218,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -139,6 +237,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -160,6 +266,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -180,6 +306,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 @@ -207,6 +341,7 @@ + diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.json.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.json.bin index 80f7c603b..7d1edfbe5 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.json.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.json.bin @@ -57,6 +57,36 @@ "license": { "id": "BSD-2-Clause" } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: README.rst", + "text": { + "content": "Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg==", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } } ], "name": "boolean.py", @@ -64,9 +94,79 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + }, + { + "license": { + "name": "declared license file: LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license of 'chardet'", + "text": { + "content": "LGPL", + "contentType": "text/plain" + } + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -120,6 +220,26 @@ "name": "License :: OSI Approved :: BSD License" } }, + { + "license": { + "name": "declared license file: AUTHORS", + "text": { + "content": "U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, { "license": { "name": "declared license of 'jsonpointer'", @@ -150,6 +270,56 @@ "license": { "id": "Apache-2.0" } + }, + { + "license": { + "name": "declared license file: AUTHORS.rst", + "text": { + "content": "VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: CODE_OF_CONDUCT.rst", + "text": { + "content": "Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE", + "text": { + "content": "IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: apache-2.0.LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "license-expression", @@ -182,6 +352,26 @@ "license": { "name": "License :: OSI Approved :: BSD License" } + }, + { + "license": { + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSES.txt", + "text": { + "content": "bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "lxml", @@ -210,6 +400,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -244,7 +437,96 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "evidence": { + "licenses": [ + { + "license": { + "name": "declared license file: AUTHORS.example.bin", + "text": { + "content": "dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENCE.dummy.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: LICENSE.txt.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: NOTICE.bin", + "text": { + "content": "dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.CC0.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_a/LICENSE.MIT.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/LICENSE.md.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "name": "declared license file: licenses_b/legal/NOTICE.txt.bin", + "text": { + "content": "dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ] + }, + "licenses": [ + { + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.xml.bin index cf0b89298..ceb9e6c2c 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.5.xml.bin @@ -53,7 +53,46 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + + + + + declared license file: AUTHORS.example.bin + dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK + + + declared license file: LICENCE.dummy.bin + dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg== + + + declared license file: LICENSE.txt.bin + dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo= + + + declared license file: NOTICE.bin + dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg== + + + declared license file: licenses_a/LICENSE.CC0.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg== + + + declared license file: licenses_a/LICENSE.MIT.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg== + + + declared license file: licenses_b/LICENSE.md.bin + dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK + + + declared license file: licenses_b/legal/NOTICE.txt.bin + dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo= + + + true @@ -101,6 +140,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -110,6 +161,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -140,6 +228,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -149,6 +247,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -170,6 +276,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -190,6 +316,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 @@ -217,6 +351,7 @@ + diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.json.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.json.bin index ef04c1266..34bb4681f 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.json.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.json.bin @@ -59,6 +59,39 @@ "acknowledgement": "declared", "id": "BSD-2-Clause" } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: README.rst", + "text": { + "content": "Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg==", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } } ], "name": "boolean.py", @@ -66,9 +99,84 @@ "type": "library", "version": "4.0" }, + { + "bom-ref": "chardet==5.2.0", + "description": "Universal encoding detector for Python 3", + "externalReferences": [ + { + "comment": "from packaging metadata Project-URL: Documentation", + "type": "documentation", + "url": "https://chardet.readthedocs.io/" + }, + { + "comment": "from packaging metadata Project-URL: Issue Tracker", + "type": "issue-tracker", + "url": "https://github.com/chardet/chardet/issues" + }, + { + "comment": "from packaging metadata Project-URL: GitHub Project", + "type": "other", + "url": "https://github.com/chardet/chardet" + }, + { + "comment": "from packaging metadata: Home-page", + "type": "website", + "url": "https://github.com/chardet/chardet" + } + ], + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license of 'chardet'", + "text": { + "content": "LGPL", + "contentType": "text/plain" + } + } + } + ], + "name": "chardet", + "purl": "pkg:pypi/chardet@5.2.0", + "type": "library", + "version": "5.2.0" + }, { "bom-ref": "cryptography==43.0.1", "description": "cryptography is a package which provides cryptographic recipes and primitives to Python developers.", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: BSD License" + } + } + ] + }, "externalReferences": [ { "comment": "from packaging metadata Project-URL: documentation", @@ -124,6 +232,28 @@ "name": "License :: OSI Approved :: BSD License" } }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: AUTHORS", + "text": { + "content": "U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, { "license": { "acknowledgement": "declared", @@ -156,6 +286,61 @@ "acknowledgement": "declared", "id": "Apache-2.0" } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: AUTHORS.rst", + "text": { + "content": "VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: CHANGELOG.rst", + "text": { + "content": "Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: CODE_OF_CONDUCT.rst", + "text": { + "content": "Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo=", + "contentType": "text/prs.fallenstein.rst", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: NOTICE", + "text": { + "content": "IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg==", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: apache-2.0.LICENSE", + "text": { + "content": "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "license-expression", @@ -190,6 +375,28 @@ "acknowledgement": "declared", "name": "License :: OSI Approved :: BSD License" } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSE.txt", + "text": { + "content": "Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K", + "contentType": "text/plain", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSES.txt", + "text": { + "content": "bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo=", + "contentType": "text/plain", + "encoding": "base64" + } + } } ], "name": "lxml", @@ -218,6 +425,9 @@ { "ref": "boolean.py==4.0" }, + { + "ref": "chardet==5.2.0" + }, { "ref": "cryptography==43.0.1" }, @@ -252,7 +462,105 @@ "metadata": { "component": { "bom-ref": "root-component", - "description": "depenndencies with license declaration accoring to PEP 639", + "description": "dependencies with license declaration according to PEP 639", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: AUTHORS.example.bin", + "text": { + "content": "dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENCE.dummy.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: LICENSE.txt.bin", + "text": { + "content": "dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: NOTICE.bin", + "text": { + "content": "dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: licenses_a/LICENSE.CC0.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: licenses_a/LICENSE.MIT.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg==", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: licenses_b/LICENSE.md.bin", + "text": { + "content": "dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "declared license file: licenses_b/legal/NOTICE.txt.bin", + "text": { + "content": "dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo=", + "contentType": "application/octet-stream", + "encoding": "base64" + } + } + } + ] + }, + "licenses": [ + { + "acknowledgement": "declared", + "expression": "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" + } + ], "name": "with-extras", "type": "application", "version": "0.1.0" diff --git a/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.xml.bin b/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.xml.bin index ad29652f9..d35e70610 100644 --- a/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.xml.bin +++ b/tests/_data/snapshots/environment/texts_with-license-pep639_1.6.xml.bin @@ -53,7 +53,46 @@ with-extras 0.1.0 - depenndencies with license declaration accoring to PEP 639 + dependencies with license declaration according to PEP 639 + + MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause) + + + + + declared license file: AUTHORS.example.bin + dGhpcyBpcyBBVVRIT1JTLmV4YW1wbGUuYmluIGNvbnRlbnQK + + + declared license file: LICENCE.dummy.bin + dGhpcyBpcyBMSUNFTkNFLmR1bW15LmJpbiBjb250ZW50Cg== + + + declared license file: LICENSE.txt.bin + dGhpcyBpcyBMSUNFTlNFLnR4dC5iaW4gY29udGVudAo= + + + declared license file: NOTICE.bin + dGhpc2lzIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UuYmluIGZpbGUuCg== + + + declared license file: licenses_a/LICENSE.CC0.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuQ0MwLmJpbiBjb250ZW50Cg== + + + declared license file: licenses_a/LICENSE.MIT.bin + dGhpcyBpcyBsaWNlbnNlc19hL0xJQ0VOU0UuTUlULmJpbiBjb250ZW50Cg== + + + declared license file: licenses_b/LICENSE.md.bin + dGhpcyBpcyBsaWNlbnNlc19iL0xJQ0VOU0UubWQuYmluIGNvbnRlbnQK + + + declared license file: licenses_b/legal/NOTICE.txt.bin + dGhpcyBpcyB0aGUgY29udGVudCBvZiBsaWNlbnNlc19iL2xlZ2FsL05PVElDRS50eHQuYmluIGZpbGUuIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkLgo= + + + true @@ -101,6 +140,18 @@ BSD-2-Clause + + declared license file: CHANGELOG.rst + CkNoYW5nZWxvZwo9PT09PT09PT0KCgpuZXh0Ci0tLS0KCgo0LjAgKDIwMjItMDUtMDUpCi0tLS0tLS0tLS0tLS0tLS0KCiogQVBJIGNoYW5nZXMKCiAqIERyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuCiAqIFRlc3Qgb24gUHl0aG9uIDMuMTAKICogTWFrZSBFeHByZXNzaW9uLnNvcnRfb3JkZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlcyBhbmQgbm90IGEgY2xhc3MgYXR0cmlidXRlCgoqIE1pc2MuCgogKiBDb3JyZWN0IGxpY2Vuc2luZyBkb2N1bWVudGF0aW9uCiAqIEltcHJvdmUgZG9jc3RyaW5nZiBhbmQgYXBwbHkgbWlub3IgcmVmYWN0b3JpbmdzCiAqIEFkb3B0IGJsYWNrIGNvZGUgc3R5bGUgYW5kIGlzb3J0IGZvciBpbXBvcnRzCiAqIERyb3AgVHJhdmlzIGFuZCB1c2UgR2l0SHViIGFjdGlvbnMgZm9yIENJCgoKMy44ICgyMDIwLTA2LTEwKQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgc3VwcG9ydCBmb3IgZXZhbHVhdGlvbiBvZiBib29sZWFuIGV4cHJlc3Npb24uCiAgIFRoYW5rIHlvdSB0byBMYXJzIHZhbiBHZW1lcmRlbiBAZ2VtZXJkZW4KCiogQnVnIGZpeGVzCgogKiBGaXggcGFyc2luZyBvZiB0b2tlbnMgdGhhdCBoYXZlIGEgbnVtYmVyIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIAogICBUaGFuayB5b3UgdG8gSmVmZiBDb2hlbiBAIGpjb2hlbjI4CiAqIFJlc3RvcmUgcHJvcGVyIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuIAogICBUaGFuayB5b3UgdG8gQmVuankgV2VpbmJlcmdlciBAYmVuanl3CgoqIEltcHJvdmUgZG9jdW1lbnRhdGlvbgoKICogQWRkIHBvaW50ZXJzIHRvIExpbnV4IGRpc3RybyBwYWNrYWdlcy4KICAgVGhhbmsgeW91IHRvIE1heCBNZWhsIEBteG1laGwgYW5kIENhcm1lbiBCaWFuY2EgQmFra2VyIEBjYXJtZW5iaWFuY2EKICogRml4IHR5cG8uCiAgIFRoYW5rIHlvdSB0byBHYWJyaWVsIE5pZWJsZXIgQGRlci1nYWJlCgoKMy43ICgyMDE5LTEwLTA0KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBBZGQgbmV3IHNvcnQgYXJndW1lbnQgdG8gc2ltcGxpZnkoKSB0byBvcHRpb25hbGx5IG5vdCBzb3J0IHdoZW4gc2ltcGxpZnlpbmcKICAgZXhwcmVzc2lvbnMgKGUuZy4gbm90IGFwcGx5aW5nICJjb21tdXRhdGl2aXR5IikuIFRoYW5rIHlvdSB0byBTdGV2ZW4gRXNzZXIKICAgQG1hanVyZyBmb3IgdGhpcwogKiBBZGQgbmV3IGFyZ3VtZW50IHRvIHRva2VuaXplciB0byBvcHRpb25hbGx5IGFjY2VwdCBleHRyYSBjaGFyYWN0ZXJzIGluIHN5bWJvbAogICB0b2tlbnMuIFRoYW5rIHlvdSB0byBAY2FycGllIGZvciB0aGlzCgoKMy42ICgyMDE4LTA4LTA2KQotLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcwoKICogRml4IERlIE1vcmdhbidzIGxhd3MgZWZmZWN0IG9uIGRvdWJsZSBuZWdhdGlvbiBwcm9wb3NpdGlvbnMuIFRoYW5rIHlvdSB0byBEb3VnbGFzIENhcmRvc28gZm9yIHRoaXMKICogSW1wcm92ZSBlcnJvciBjaGVja2luZyB3aGVuIHBhcnNpbmcKCgozLjUgKE5vdiAxLCAyMDE3KQotLS0tLS0tLS0tLS0tLS0tLQoKKiBObyBBUEkgY2hhbmdlcwoKKiBCdWcgZml4ZXMKCiAqIERvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgYWRkIHRlc3RpbmcgZm9yIFB5dGhvbiAzLjYuIFRoYW5rIHlvdSB0byBBbGV4YW5kZXIgTGlzaWFub2kgQGFsaXNpYW5vaQogKiBJbXByb3ZlIHRlc3RuZyBhbmQgZXhwcmVzc2lvbiBlcXVpdmFsZW5jZSBjaGVja3MKICogSW1wcm92ZSBzdWJzKCkgbWV0aG9kIHRvIGFuIGV4cHJlc3Npb24gCgogCgozLjQgKE1heSAxMiwgMjAxNykKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIE5vIEFQSSBjaGFuZ2VzCgoqIEJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzCgogKiBGaXggdmFyaW91cyBkb2N1bWVudGF0aW9uIHR5cG9zIGFuZCBpbXByb3ZlIHRlc3RzIC4gVGhhbmsgeW91IHRvIEFsZXhhbmRlciBMaXNpYW5vaSBAYWxpc2lhbm9pCiAqIEZpeCBoYW5kbGluZyBmb3IgbGl0ZXJhbHMgdnMuIHN5bWJvbHMgaW4gbmVnYXRpb25zIFRoYW5rIHlvdSB0byBAWWFyb25LCgoKMy4zICgyMDE3LTAyLTA5KQotLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiAjNDAgYW5kICM1MCBFeHByZXNzaW9uLnN1YnMoKSBub3cgdGFrZXMgJ2RlZmF1bHQnIHRoYW5rcyB0byBAa3JvbnV6CiAqICM0NSBzaW1wbGlmeT1GYWxzZSBpcyBub3cgdGhlIGRlZmF1bHQgZm9yIHBhcnNlIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBvciBtZXRob2RzLgogKiAjNDAgVXNlICImIiBhbmQgInwiIGFzIGRlZmF1bHQgb3BlcmF0b3JzCgoqIEJ1ZyBmaXhlcwoKICogIzYwIEZpeCBidWcgZm9yICJhIG9yIGIgYyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbgogKiAjNTggRml4IG1hdGggZm9ybXVsYSBkaXNwbGF5IGluIGRvY3MKICogSW1wcm92ZSBoYW5kbGluZyBvZiBwYXJzZSBlcnJvcnMKCgoyLjAuMCAoMjAxNi0wNS0xMSkKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEFQSSBjaGFuZ2VzCgogKiBOZXcgYWxnZWJyYSBkZWZpbml0aW9uLiBSZWZhY3RvcmVkIGNsYXNzIGhpZXJhcmNoeS4gSW1wcm92ZWQgcGFyc2luZy4KCiogTmV3IGZlYXR1cmVzCgogKiBwb3NzaWJpbGl0eSB0byBzdWJjbGFzcyBhbGdlYnJhIGRlZmluaXRpb24KICogbmV3IG5vcm1hbCBmb3JtcyBzaG9ydGN1dHMgZm9yIERORiBhbmQgQ05GLgoKCjEuMSAoMjAxNi0wNC0wNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIEluaXRpYWwgcmVsZWFzZSBvbiBQeXBpLgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSBTZWJhc3RpYW4gS3JhZW1lciwgYmFzdGkua3JAZ21haWwuY29tIGFuZCBvdGhlcnMKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCjEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwpsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IKb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgpBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg== + + + declared license file: README.rst + Ym9vbGVhbi5weQo9PT09PT09PT09CgoiYm9vbGVhbi5weSIgaXMgYSBzbWFsbCBsaWJyYXJ5IGltcGxlbWVudGluZyBhIGJvb2xlYW4gYWxnZWJyYS4gSXQKZGVmaW5lcyB0d28gYmFzZSBlbGVtZW50cywgVFJVRSBhbmQgRkFMU0UsIGFuZCBhIFN5bWJvbCBjbGFzcyB0aGF0IGNhbgp0YWtlIG9uIG9uZSBvZiB0aGVzZSB0d28gdmFsdWVzLiBDYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGVybXMgb2YgQU5ELApPUiBhbmQgTk9UIC0gb3RoZXIgY29tcG9zaXRpb25zIGxpa2UgWE9SIGFuZCBOQU5EIGFyZSBub3QgaW1wbGVtZW50ZWQKYnV0IGNhbiBiZSBlbXVsYXRlZCB3aXRoIEFORCBvciBhbmQgTk9ULiBFeHByZXNzaW9ucyBhcmUgY29uc3RydWN0ZWQKZnJvbSBwYXJzZWQgc3RyaW5ncyBvciBpbiBQeXRob24uCgpJdCBydW5zIG9uIFB5dGhvbiAzLjYrCllvdSBjYW4gdXNlIG9sZGVyIHZlcnNpb24gMy54IGZvciBQeXRob24gMi43KyBzdXBwb3J0LgoKaHR0cHM6Ly9naXRodWIuY29tL2Jhc3Rpa3IvYm9vbGVhbi5weQoKQnVpbGQgc3RhdHVzOiB8QnVpbGQgU3RhdHVzfAoKCkV4YW1wbGUKLS0tLS0tLQoKOjoKCiAgICA+Pj4gaW1wb3J0IGJvb2xlYW4KICAgID4+PiBhbGdlYnJhID0gYm9vbGVhbi5Cb29sZWFuQWxnZWJyYSgpCiAgICA+Pj4gZXhwcmVzc2lvbjEgPSBhbGdlYnJhLnBhcnNlKHUnYXBwbGUgYW5kIChvcmFuZ2VzIG9yIGJhbmFuYSkgYW5kIG5vdCBiYW5hbmEnLCBzaW1wbGlmeT1GYWxzZSkKICAgID4+PiBleHByZXNzaW9uMQogICAgQU5EKFN5bWJvbCgnYXBwbGUnKSwgT1IoU3ltYm9sKCdvcmFuZ2VzJyksIFN5bWJvbCgnYmFuYW5hJykpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSkpCgogICAgPj4+IGV4cHJlc3Npb24yID0gYWxnZWJyYS5wYXJzZSgnKG9yYW5nZXMgfCBiYW5hbmEpIGFuZCBub3QgYmFuYW5hICYgYXBwbGUnLCBzaW1wbGlmeT1UcnVlKQogICAgPj4+IGV4cHJlc3Npb24yCiAgICBBTkQoU3ltYm9sKCdhcHBsZScpLCBOT1QoU3ltYm9sKCdiYW5hbmEnKSksIFN5bWJvbCgnb3JhbmdlcycpKQoKICAgID4+PiBleHByZXNzaW9uMSA9PSBleHByZXNzaW9uMgogICAgRmFsc2UKICAgID4+PiBleHByZXNzaW9uMS5zaW1wbGlmeSgpID09IGV4cHJlc3Npb24yCiAgICBUcnVlCgoKRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tCgpodHRwOi8vcmVhZHRoZWRvY3Mub3JnL2RvY3MvYm9vbGVhbnB5L2VuL2xhdGVzdC8KCgpJbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tCgpJbnN0YWxsYXRpb24gdmlhIHBpcAp+fn5+fn5+fn5+fn5+fn5+fn5+fgoKVG8gaW5zdGFsbCBib29sZWFuLnB5LCB5b3UgbmVlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgcGllY2VzIG9mIHNvZnR3YXJlCm9uIHlvdXIgY29tcHV0ZXI6CgotICBQeXRob24gMy42KwotICBwaXAKCllvdSB0aGVuIG9ubHkgbmVlZCB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBwaXAgaW5zdGFsbCBib29sZWFuLnB5YGAKCgpJbnN0YWxsYXRpb24gdmlhIHBhY2thZ2UgbWFuYWdlcnMKfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgpUaGVyZSBhcmUgcGFja2FnZXMgYXZhaWxhYmxlIGZvciBlYXN5IGluc3RhbGwgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4KWW91IGFyZSB3ZWxjb21lIHRvIGhlbHAgdXMgcGFja2FnZSB0aGlzIHRvb2wgZm9yIG1vcmUgZGlzdHJpYnV0aW9ucyEKCi0gIGJvb2xlYW4ucHkgaGFzIGJlZW4gcGFja2FnZWQgYXMgQXJjaCBMaW51eCwgRmVkb3JhLCBvcGVuU3VzLAogICBuaXhwa2dzLCBHdWl4LCBEcmFnb25GbHkgYW5kIEZyZWVCU0QgCiAgIGBwYWNrYWdlcyA8aHR0cHM6Ly9yZXBvbG9neS5vcmcvcHJvamVjdC9weXRob246Ym9vbGVhbi5weS92ZXJzaW9ucz5gX18gLgoKSW4gcGFydGljdWxhcjoKCi0gIEFyY2ggTGludXggKEFVUik6CiAgIGBweXRob24tYm9vbGVhbi5weSA8aHR0cHM6Ly9hdXIuYXJjaGxpbnV4Lm9yZy9wYWNrYWdlcy9weXRob24tYm9vbGVhbi5weS8+YF9fCi0gIEZlZG9yYToKICAgYHB5dGhvbi1ib29sZWFuLnB5IDxodHRwczovL2FwcHMuZmVkb3JhcHJvamVjdC5vcmcvcGFja2FnZXMvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCi0gIG9wZW5TVVNFOgogICBgcHl0aG9uLWJvb2xlYW4ucHkgPGh0dHBzOi8vc29mdHdhcmUub3BlbnN1c2Uub3JnL3BhY2thZ2UvcHl0aG9uLWJvb2xlYW4ucHk+YF9fCgoKVGVzdGluZwotLS0tLS0tCgpUZXN0IGBgYm9vbGVhbi5weWBgIHdpdGggeW91ciBjdXJyZW50IFB5dGhvbiBlbnZpcm9ubWVudDoKCmBgcHl0aG9uIHNldHVwLnB5IHRlc3RgYAoKVGVzdCB3aXRoIGFsbCBvZiB0aGUgc3VwcG9ydGVkIFB5dGhvbiBlbnZpcm9ubWVudHMgdXNpbmcgYGB0b3hgYDoKCjo6CgogICAgcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLWRldi50eHQKICAgIHRveAoKSWYgYGB0b3hgYCB0aHJvd3MgYGBJbnRlcnByZXRlck5vdEZvdW5kYGAsIGxpbWl0IGl0IHRvIHB5dGhvbgppbnRlcnByZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKCjo6CgogICAgdG94IC1lIHB5MzYKCkFsdGVybmF0aXZlbHkgdXNlIHB5dGVzdC4KCgpMaWNlbnNlCi0tLS0tLS0KCkNvcHlyaWdodCAoYykgU2ViYXN0aWFuIEtyYWVtZXIsIGJhc3RpLmtyQGdtYWlsLmNvbSBhbmQgb3RoZXJzClNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UKCi4uIHxCdWlsZCBTdGF0dXN8IGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2Jhc3Rpa3IvYm9vbGVhbi5weS5zdmc/YnJhbmNoPW1hc3RlcgogICA6dGFyZ2V0OiBodHRwczovL3RyYXZpcy1jaS5vcmcvYmFzdGlrci9ib29sZWFuLnB5Cg== + pkg:pypi/boolean.py@4.0 @@ -110,6 +161,43 @@ + + chardet + 5.2.0 + Universal encoding detector for Python 3 + + + License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+) + + + declared license file: LICENSE + ICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKCiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgpbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCiBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCmZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQpzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCnRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCnN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgoKICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCm5vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQpmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Cml0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCmRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQp5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCmNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCndpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCml0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCmxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgoKICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcwptb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQppbnRyb2R1Y2VkIGJ5IG90aGVycy4KDAogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCmFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CmFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCgogIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCm9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAppcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQp0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgoKICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZwphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCnRoZSBsaWJyYXJ5LgoKICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0CmRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcwpvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCmFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCnNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCmxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwpjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgpmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCm5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZwpzeXN0ZW0uCgogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCnVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCmxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdApiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KDAogICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCgogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgpwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgpvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCgogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCih3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCgogIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCndoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZApzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCmluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCgogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCmFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCgogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CmNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcwphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KCiAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCmNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0CnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCmFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CmFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55CndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCkxpYnJhcnkuCgogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCmFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKZmVlLgoMCiAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgpvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQphYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KCiAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCgogICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCiAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCiAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgogICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgoKICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCiAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQogICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQp3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwp0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCnRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5CnRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KdGhlc2Ugbm90aWNlcy4KDAogIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCnRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55Cml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCm1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KCiAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCmRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KCiAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQp3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCnRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0CmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCmxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgpTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KCiAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgpXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQpsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgoKICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdApmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCkxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCgogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CmRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgpBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgoMCiAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCgogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQpMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yawpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQpjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCmRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKb2YgdGhlc2UgdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCiAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CiAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQogICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCiAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKCiAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCiAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgogICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCiAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KCiAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAogICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCiAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCgogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQogICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgoKICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQogICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCgogIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQpMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24Kd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwp0aGUgZXhlY3V0YWJsZS4KCiAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90CnVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKZGlzdHJpYnV0ZS4KDAogIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZApsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CgogICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQogICAgU2VjdGlvbnMgYWJvdmUuCgogICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCgogIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CmF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLApvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCnRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KCiAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CnNpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQpwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cm1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAphbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCnRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CnN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCnRoaXMgTGljZW5zZS4KDAogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CnBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KCkl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQppbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgpjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCmFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLApzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCgogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwp2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuClN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZApjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KDAogIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcwpjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCklNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgpXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQpGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCkNPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICkRBTUFHRVMuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKDAogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCnJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KCiAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcwpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQpjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgpZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgpzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CgogIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KCiAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKClRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCg== + + + declared license of 'chardet' + LGPL + + + pkg:pypi/chardet@5.2.0 + + + https://chardet.readthedocs.io/ + from packaging metadata Project-URL: Documentation + + + https://github.com/chardet/chardet/issues + from packaging metadata Project-URL: Issue Tracker + + + https://github.com/chardet/chardet + from packaging metadata Project-URL: GitHub Project + + + https://github.com/chardet/chardet + from packaging metadata: Home-page + + + cryptography 43.0.1 @@ -140,6 +228,16 @@ from packaging metadata Project-URL: homepage + + + + License :: OSI Approved :: Apache Software License + + + License :: OSI Approved :: BSD License + + + jsonpointer @@ -149,6 +247,14 @@ License :: OSI Approved :: BSD License + + declared license file: AUTHORS + U3RlZmFuIEvDtmdsIDxzdGVmYW5Ac2tvZWdsLm5ldD4KQWxleGFuZGVyIFNob3JpbiA8a3hlcGFsQGdtYWlsLmNvbT4KQ2hyaXN0b3BoZXIgSi4gV2hpdGUgPGNocmlzQGdyaWVyd2hpdGUuY29tPgo= + + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDExIFN0ZWZhbiBLw7ZnbCA8c3RlZmFuQHNrb2VnbC5uZXQ+CkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCmFyZSBtZXQ6CgoxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCjIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCiAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCklOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVApOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQpUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgpUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoK + declared license of 'jsonpointer' Modified BSD License @@ -170,6 +276,26 @@ Apache-2.0 + + declared license file: AUTHORS.rst + VGhlIGZvbGxvd2luZyBvcmdhbml6YXRpb25zIG9yIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBjb2RlOgoKLSBBeWFuIFNpbmhhIE1haGFwYXRyYSBAQXlhblNpbmhhTWFoYXBhdHJhCi0gQ2FybWVuIEJpYW5jYSBCYWtrZXIgQGNhcm1lbmJpYW5jYQotIENoaW4tWWV1bmcgTGkgQGNoaW55ZXVuZ2xpCi0gRGVubmlzIENsYXJrIEBEZW5uaXNDbGFyawotIEpvaG4gSG9yYW4gQGpvaG5taG9yYW4KLSBKb25vIFlhbmcgQEpvbm9ZYW5nCi0gTWF4IE1laGwgQG14bWVobAotIG5leEIgSW5jLiBAbmV4QgotIFBldGVyIEtvbGJ1cyBAcGtvbGJ1cwotIFBoaWxpcHBlIE9tYnJlZGFubmUgQHBvbWJyZWRhbm5lCi0gU2ViYXN0aWFuIFNjaHViZXJ0aCBAc3NjaHViZXJ0aAotIFN0ZXZlbiBFc3NlciBAbWFqdXJnCi0gVGhvbWFzIERydWV6IEB0ZHJ1ZXoK + + + declared license file: CHANGELOG.rst + Q2hhbmdlbG9nCj09PT09PT09PQoKdjMwLjMuMCAtIDIwMjQtMDMtMTgKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciByZWxlYXNlIHdpdGhvdXQgQVBJIGNoYW5nZXM6CgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIzCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43Cgp2MzAuMi4wIC0gMjAyMy0xMS0yOQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlczoKCi0gVXNlIGxhdGVzdCBza2VsZXRvbgotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMjIKLSBBZGQgUHl0aG9uIDMuMTIgc3VwcG9ydCBpbiBDSQoKCnYzMC4xLjEgLSAyMDIzLTAxLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgaXMgYSBtaW5vciBkb3QgcmVsZWFzZSB3aXRob3V0IEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24KLSBVcGRhdGUgbGljZW5zZSBsaXN0IHRvIGxhdGVzdCBTY2FuQ29kZSBhbmQgU1BEWCAzLjIwCgoKdjMwLjEuMCAtIDIwMjMtMDEtMTYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBpcyBhIG1pbm9yIHJlbGVhc2Ugd2l0aG91dCBBUEkgY2hhbmdlcwoKLSBVc2UgbGF0ZXN0IHNrZWxldG9uIChhbmQgdXBkYXRlZCBjb25maWd1cmUgc2NyaXB0KQotIFVwZGF0ZSBsaWNlbnNlIGxpc3QgdG8gbGF0ZXN0IFNjYW5Db2RlIGFuZCBTUERYIDMuMTkKLSBVc2UgY29ycmVjdCBzeW50YXggZm9yIHB5dGhvbl9yZXF1aXJlCi0gRHJvcCB1c2luZyBUcmF2aXMgYW5kIEFwcHZleW9yCi0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43IGFuZCBhZGQgUHl0aG9uIDMuMTEgaW4gQ0kKCgp2MzAuMC4wIC0gMjAyMi0wNS0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIGlzIGEgbWlub3IgcmVsZWFzZSB3aXRoIEFQSSBjaGFuZ2VzCgotIFVzZSBsYXRlc3Qgc2tlbGV0b24gKGFuZCB1cGRhdGVkIGNvbmZpZ3VyZSBzY3JpcHQpCi0gRHJvcCB1c2luZyBjYWx2ZXIKLSBJbXByb3ZlIGVycm9yIGNoZWNraW5nIHdoZW4gY29tYmluaW5nIGxpY2Vuc2VzCgoKCnYyMS42LjE0IC0gMjAyMS0wNi0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpBZGRlZAp+fn5+fgoKLSBTd2l0Y2ggdG8gY2FsdmVyIGZvciBwYWNrYWdlIHZlcnNpb25pbmcgdG8gYmV0dGVyIGNvbnZleSB0aGUgY3VycmVuY3kgb2YgdGhlCiAgYnVuZGxlZCBkYXRhLgoKLSBJbmNsdWRlIGh0dHBzOi8vc2NhbmNvZGUtbGljZW5zZWRiLmFib3V0Y29kZS5vcmcvIGxpY2Vuc2VzIGxpc3Qgd2l0aAogIFNjYW5Db2RlICh2MjEuNi43KSBhbmQgU1BEWCBsaWNlbnNlcyAodjMuMTMpIGtleXMuIEFkZCBuZXcgZnVuY3Rpb25zIHRvCiAgY3JlYXRlIExpY2Vuc2luZyB1c2luZyB0aGVzZSBsaWNlbnNlcyBhcyBMaWNlbnNlU3ltYm9sLgoKLSBBZGQgbmV3IExpY2Vuc2UuZGVkdXAoKSBtZXRob2QgdG8gZGVkdXBsaWNhdGUgYW5kIHNpbXBsaWZ5IGxpY2Vuc2UgZXhwcmVzc2lvbnMKICB3aXRob3V0IG92ZXIgc2ltcGxpZnlpbmcuCgotIEFkZCBuZXcgTGljZW5zZS52YWxpZGF0ZSgpIG1ldGhvZCB0byByZXR1cm4gYSBuZXcgRXhwcmVzc2lvbkluZm8gb2JqZWN0IHdpdGgKICBkZXRhaWxzIG9uIGEgbGljZW5zZSBleHByZXNzaW9uIHZhbGlkYXRpb24uCgoKQ2hhbmdlZAp+fn5+fn5+Ci0gRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi4KLSBBZG9wdCB0aGUgcHJvamVjdCBza2VsZXRvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXhCL3NrZWxldG9uCiAgYW5kIGl0cyBuZXcgY29uZmlndXJlIHNjcmlwdAoKCnYxLjIgLSAyMDE5LTExLTE0Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIEFkZCBhYmlsaXR5IHRvIHJlbmRlciBXSVRIIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwYXJlbnRoZXNpcwoKRml4ZXMKfn5+fn4KLSBGaXggYW5vbWFsb3VzIGJhY2tzbGFzaGVzIGluIHN0cmluZ3MKCkNoYW5nZWQKfn5+fn5+fgotIFVwZGF0ZSB0aGUgdGhpcmRwYXJ0eSBkaXJlY3Rvcnkgc3RydWN0dXJlLgoKCnYxLjAgLSAyMDE5LTEwLTE2Ci0tLS0tLS0tLS0tLS0tLS0tLQpBZGRlZAp+fn5+fgotIE5ldyB2ZXJzaW9uIG9mIGJvb2xlYW4ucHkgbGlicmFyeQotIEFkZCBhYmlsaXR5IHRvIGxlYXZlIGxpY2Vuc2UgZXhwcmVzc2lvbnMgdW5zb3J0ZWQgd2hlbiBzaW1wbGlmeWluZwoKQ2hhbmdlZAp+fn5+fn5+Ci0gdXBkYXRlZCB0cmF2aXMgQ0kgc2V0dGluZ3MKCgp2MC45OTkgLSAyMDE5LTA0LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5pdGlhbCByZWxlYXNlCi0gbGljZW5zZS1leHByZXNzaW9uIGlzIHNtYWxsIHV0aWxpdHkgbGlicmFyeSB0byBwYXJzZSwgY29tcGFyZSBhbmQKICBzaW1wbGlmeSBhbmQgbm9ybWFsaXplIGxpY2Vuc2UgZXhwcmVzc2lvbnMuCgo= + + + declared license file: CODE_OF_CONDUCT.rst + Q29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKT3VyIFBsZWRnZQotLS0tLS0tLS0tCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMKY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyCnByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsCnJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZApleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBlZHVjYXRpb24sIHNvY2lvLWVjb25vbWljIHN0YXR1cywKbmF0aW9uYWxpdHksIHBlcnNvbmFsIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1YWwgaWRlbnRpdHkgYW5kCm9yaWVudGF0aW9uLgoKT3VyIFN0YW5kYXJkcwotLS0tLS0tLS0tLS0tCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKaW5jbHVkZToKCi0gIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCi0gIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2VzCi0gIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KLSAgRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5Ci0gIFNob3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCgpFeGFtcGxlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IgYnkgcGFydGljaXBhbnRzIGluY2x1ZGU6CgotICBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbAogICBhdHRlbnRpb24gb3IgYWR2YW5jZXMKLSAgVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsCiAgIGF0dGFja3MKLSAgUHVibGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAotICBQdWJsaXNoaW5nIG90aGVyc+KAmSBwcml2YXRlIGluZm9ybWF0aW9uLCBzdWNoIGFzIGEgcGh5c2ljYWwgb3IKICAgZWxlY3Ryb25pYyBhZGRyZXNzLCB3aXRob3V0IGV4cGxpY2l0IHBlcm1pc3Npb24KLSAgT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhCiAgIHByb2Zlc3Npb25hbCBzZXR0aW5nCgpPdXIgUmVzcG9uc2liaWxpdGllcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZgphY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpcgpjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwKb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlcgpjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4KdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5CmRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KClNjb3BlCi0tLS0tCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMKc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4KRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbgpvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEKYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3IKb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kCmNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKRW5mb3JjZW1lbnQKLS0tLS0tLS0tLS0KCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5CmJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBwb21icmVkYW5uZUBnbWFpbC5jb20Kb3Igb24gdGhlIEdpdHRlciBjaGF0IGNoYW5uZWwgYXQgaHR0cHM6Ly9naXR0ZXIuaW0vYWJvdXRjb2RlLW9yZy9kaXNjdXNzIC4KQWxsIGNvbXBsYWludHMgd2lsbCBiZSByZXZpZXdlZCBhbmQgaW52ZXN0aWdhdGVkIGFuZCB3aWxsIHJlc3VsdCBpbiBhCnJlc3BvbnNlIHRoYXQgaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuClRoZSBwcm9qZWN0IHRlYW0gaXMgb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0bwp0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuIEZ1cnRoZXIgZGV0YWlscyBvZiBzcGVjaWZpYyBlbmZvcmNlbWVudApwb2xpY2llcyBtYXkgYmUgcG9zdGVkIHNlcGFyYXRlbHkuCgpQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbgpnb29kIGZhaXRoIG1heSBmYWNlIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwZXJjdXNzaW9ucyBhcyBkZXRlcm1pbmVkCmJ5IG90aGVyIG1lbWJlcnMgb2YgdGhlIHByb2plY3TigJlzIGxlYWRlcnNoaXAuCgpBdHRyaWJ1dGlvbgotLS0tLS0tLS0tLQoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBgQ29udHJpYnV0b3IgQ292ZW5hbnRgXyAsCnZlcnNpb24gMS40LCBhdmFpbGFibGUgYXQKaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80L2NvZGUtb2YtY29uZHVjdC5odG1sCgouLiBfQ29udHJpYnV0b3IgQ292ZW5hbnQ6IGh0dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZwo= + + + declared license file: NOTICE + IwojIENvcHlyaWdodCAoYykgbmV4QiBJbmMuIGFuZCBvdGhlcnMuCiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKIwojIFZpc2l0IGh0dHBzOi8vYWJvdXRjb2RlLm9yZyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25leEIvbGljZW5zZS1leHByZXNzaW9uCiMgZm9yIHN1cHBvcnQgYW5kIGRvd25sb2FkLgojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCg== + + + declared license file: apache-2.0.LICENSE + ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCgogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KCiAgIDEuIERlZmluaXRpb25zLgoKICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCgogICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQogICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCgogICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCiAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCiAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQogICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQogICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgoKICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCiAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KCiAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCiAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAogICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCgogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgogICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCiAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yawogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgoKICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCiAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCiAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KCiAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCiAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CiAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgogICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CiAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCiAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCiAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQogICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAogICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KCiAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAogICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KCiAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCiAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQogICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQogICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCiAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CiAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCiAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCiAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAogICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCiAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAoKICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCgogICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCiAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCgogICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAogICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCiAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cwogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAogICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAogICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgoKICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCiAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgogICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCgogICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawogICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgogICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQogICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAogICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCgogICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCiAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCiAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgoKICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCiAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgogICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwogICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQogICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgoKICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCiAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQogICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQogICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQogICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCiAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgogICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCgogICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCiAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCiAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCiAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCiAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCgogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KCiAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCiAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCiAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KCiAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQoKICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgo= + pkg:pypi/license-expression@30.3.0 @@ -190,6 +316,14 @@ License :: OSI Approved :: BSD License + + declared license file: LICENSE.txt + Q29weXJpZ2h0IChjKSAyMDA0IEluZnJhZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAptb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCm1ldDoKCiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgIAogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgIGRpc3RyaWJ1dGlvbi4KCiAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZyYWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQogICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCkxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSU5GUkFFIE9SCkNPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLApFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCk5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwpTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K + + + declared license file: LICENSES.txt + bHhtbCBpcyBjb3B5cmlnaHQgSW5mcmFlIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgKHNlZQpkb2MvbGljZW5zZXMvQlNELnR4dCksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgoKU29tZSBjb2RlLCBzdWNoIGEgc2VsZnRlc3QucHksIHNlbGZ0ZXN0Mi5weSBhbmQKc3JjL2x4bWwvX2VsZW1lbnRwYXRoLnB5IGFyZSBkZXJpdmVkIGZyb20gRWxlbWVudFRyZWUgYW5kCmNFbGVtZW50VHJlZS4gU2VlIGRvYy9saWNlbnNlcy9lbGVtZW50dHJlZS50eHQgZm9yIHRoZSBsaWNlbnNlIHRleHQuCgpseG1sLmNzc3NlbGVjdCBhbmQgbHhtbC5odG1sIGFyZSBjb3B5cmlnaHQgSWFuIEJpY2tpbmcgYW5kIGRpc3RyaWJ1dGVkCnVuZGVyIHRoZSBCU0QgbGljZW5zZSAoc2VlIGRvYy9saWNlbnNlcy9CU0QudHh0KS4KCnRlc3QucHksIHRoZSB0ZXN0LXJ1bm5lciBzY3JpcHQsIGlzIEdQTCBhbmQgY29weXJpZ2h0IFNodXR0bGV3b3J0aApGb3VuZGF0aW9uLiBTZWUgZG9jL2xpY2Vuc2VzL0dQTC50eHQuIEl0IGlzIGJlbGlldmVkIHRoZSB1bmNoYW5nZWQKaW5jbHVzaW9uIG9mIHRlc3QucHkgdG8gcnVuIHRoZSB1bml0IHRlc3Qgc3VpdGUgZmFsbHMgdW5kZXIgdGhlCiJhZ2dyZWdhdGlvbiIgY2xhdXNlIG9mIHRoZSBHUEwgYW5kIHRodXMgZG9lcyBub3QgYWZmZWN0IHRoZSBsaWNlbnNlCm9mIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlLgoKVGhlIGlzb3NjaGVtYXRyb24gaW1wbGVtZW50YXRpb24gdXNlcyBzZXZlcmFsIFhTTCBhbmQgUmVsYXhORyByZXNvdXJjZXM6CiAqIFRoZSAoWE1MIHN5bnRheCkgUmVsYXhORyBzY2hlbWEgZm9yIHNjaGVtYXRyb24sIGNvcHlyaWdodCBJbnRlcm5hdGlvbmFsCiAgIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3JuZy9pc28tc2NoZW1hdHJvbi5ybmcgZm9yIHRoZSBsaWNlbnNlCiAgIHRleHQpCiAqIFRoZSBza2VsZXRvbiBpc28tc2NoZW1hdHJvbi14bHQxIHB1cmUteHNsdCBzY2hlbWF0cm9uIGltcGxlbWVudGF0aW9uCiAgIHhzbCBzdHlsZXNoZWV0cywgY29weXJpZ2h0IFJpY2sgSmVsbGlmZmUgYW5kIEFjYWRlbWlhIFNpbmljYSBDb21wdXRpbmcKICAgQ2VudGVyLCBUYWl3YW4gKHNlZSB0aGUgeHNsIGZpbGVzIGhlcmUgZm9yIHRoZSBsaWNlbnNlIHRleHQ6IAogICBzcmMvbHhtbC9pc29zY2hlbWF0cm9uL3Jlc291cmNlcy94c2wvaXNvLXNjaGVtYXRyb24teHNsdDEvKQogKiBUaGUgeHNkL3JuZyBzY2hlbWEgc2NoZW1hdHJvbiBleHRyYWN0aW9uIHhzbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIHVubGljZW5zZWQKICAgYW5kIGNvcHlyaWdodCB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIGFzIG5vdGVkIChzZWUgCiAgIHNyYy9seG1sL2lzb3NjaGVtYXRyb24vcmVzb3VyY2VzL3hzbC9STkcyU2NodHJuLnhzbCBhbmQKICAgc3JjL2x4bWwvaXNvc2NoZW1hdHJvbi9yZXNvdXJjZXMveHNsL1hTRDJTY2h0cm4ueHNsKQo= + pkg:pypi/lxml@5.3.0 @@ -217,6 +351,7 @@ + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.0.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.0.xml.bin new file mode 100644 index 000000000..13deb4872 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.0.xml.bin @@ -0,0 +1,23 @@ + + + + + package-a + 23.42 + some package A + false + + + package-b + 23.42 + some package B + false + + + package-c + 23.42 + some package C + false + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.1.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.1.xml.bin new file mode 100644 index 000000000..7b5ef01bb --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.1.xml.bin @@ -0,0 +1,55 @@ + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.2.json.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.2.json.bin new file mode 100644 index 000000000..14ac614bb --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.2.json.bin @@ -0,0 +1,124 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "name": "declared license of 'package-a'", + "text": { + "content": "some license text", + "contentType": "text/plain" + } + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses as text, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-text'", + "text": { + "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", + "contentType": "text/plain" + } + } + } + ], + "name": "with-license-text", + "type": "application", + "version": "0.1.0" + }, + "tools": [ + { + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.2b.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.2" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.2.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.2.xml.bin new file mode 100644 index 000000000..a8cff13d5 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.2.xml.bin @@ -0,0 +1,87 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-license-text + 0.1.0 + with licenses as text, instead of SPDX ID/Expression + + + declared license of 'with-license-text' + This is the license text of this component. +It is expected to be available in a SBOM. + + + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.3.json.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.3.json.bin new file mode 100644 index 000000000..dae631bfa --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.3.json.bin @@ -0,0 +1,162 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "name": "declared license of 'package-a'", + "text": { + "content": "some license text", + "contentType": "text/plain" + } + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses as text, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-text'", + "text": { + "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", + "contentType": "text/plain" + } + } + } + ], + "name": "with-license-text", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.3a.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.3" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.3.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.3.xml.bin new file mode 100644 index 000000000..d79d7368e --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.3.xml.bin @@ -0,0 +1,109 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + with-license-text + 0.1.0 + with licenses as text, instead of SPDX ID/Expression + + + declared license of 'with-license-text' + This is the license text of this component. +It is expected to be available in a SBOM. + + + + + true + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + 583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78 + + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641 + + + + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.4.json.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.4.json.bin new file mode 100644 index 000000000..ae8c78b44 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.4.json.bin @@ -0,0 +1,197 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "name": "declared license of 'package-a'", + "text": { + "content": "some license text", + "contentType": "text/plain" + } + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses as text, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-text'", + "text": { + "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", + "contentType": "text/plain" + } + } + } + ], + "name": "with-license-text", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": [ + { + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "name": "cyclonedx-py", + "vendor": "CycloneDX", + "version": "thisVersion-testing" + }, + { + "externalReferences": [ ], + "name": "cyclonedx-python-lib", + "vendor": "CycloneDX", + "version": "libVersion-testing" + } + ] + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.4" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.4.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.4.xml.bin new file mode 100644 index 000000000..860a113dd --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.4.xml.bin @@ -0,0 +1,136 @@ + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + with-license-text + 0.1.0 + with licenses as text, instead of SPDX ID/Expression + + + declared license of 'with-license-text' + This is the license text of this component. +It is expected to be available in a SBOM. + + + + + true + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + 583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78 + + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641 + + + + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.5.json.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.5.json.bin new file mode 100644 index 000000000..80dd73698 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.5.json.bin @@ -0,0 +1,211 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "name": "declared license of 'package-a'", + "text": { + "content": "some license text", + "contentType": "text/plain" + } + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses as text, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "name": "declared license of 'with-license-text'", + "text": { + "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", + "contentType": "text/plain" + } + } + } + ], + "name": "with-license-text", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": { + "components": [ + { + "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "group": "CycloneDX", + "licenses": [ + { + "license": { + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-py", + "type": "application", + "version": "thisVersion-testing" + }, + { + "description": "stripped", + "externalReferences": [ ], + "group": "CycloneDX", + "licenses": [ ], + "name": "cyclonedx-python-lib", + "type": "library", + "version": "libVersion-testing" + } + ] + } + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.5" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.5.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.5.xml.bin new file mode 100644 index 000000000..ad2e500fb --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.5.xml.bin @@ -0,0 +1,146 @@ + + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments + + + Apache-2.0 + + + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + + + with-license-text + 0.1.0 + with licenses as text, instead of SPDX ID/Expression + + + declared license of 'with-license-text' + This is the license text of this component. +It is expected to be available in a SBOM. + + + + + true + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + 583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78 + + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641 + + + + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + + + + + + + + + + diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.6.json.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.6.json.bin new file mode 100644 index 000000000..42ea01f80 --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.6.json.bin @@ -0,0 +1,219 @@ +{ + "components": [ + { + "bom-ref": "package-a==23.42", + "description": "some package A", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "declared license of 'package-a'", + "text": { + "content": "some license text", + "contentType": "text/plain" + } + } + } + ], + "name": "package-a", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-b==23.42", + "description": "some package B", + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "Apache-2.0" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ], + "name": "package-b", + "type": "library", + "version": "23.42" + }, + { + "bom-ref": "package-c==23.42", + "description": "some package C", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, + "externalReferences": [ + { + "comment": "PackageSource: Archive", + "hashes": [ + { + "alg": "SHA-256", + "content": "c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641" + } + ], + "type": "distribution", + "url": "file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl" + } + ], + "licenses": [ + { + "acknowledgement": "declared", + "expression": "Apache-2.0 OR MIT" + } + ], + "name": "package-c", + "type": "library", + "version": "23.42" + } + ], + "dependencies": [ + { + "ref": "package-a==23.42" + }, + { + "ref": "package-b==23.42" + }, + { + "ref": "package-c==23.42" + }, + { + "ref": "root-component" + } + ], + "metadata": { + "component": { + "bom-ref": "root-component", + "description": "with licenses as text, instead of SPDX ID/Expression", + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "name": "declared license of 'with-license-text'", + "text": { + "content": "This is the license text of this component.\nIt is expected to be available in a SBOM.", + "contentType": "text/plain" + } + } + } + ], + "name": "with-license-text", + "type": "application", + "version": "0.1.0" + }, + "properties": [ + { + "name": "cdx:reproducible", + "value": "true" + } + ], + "tools": { + "components": [ + { + "description": "CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments", + "externalReferences": [ + { + "type": "build-system", + "url": "https://github.com/CycloneDX/cyclonedx-python/actions" + }, + { + "type": "distribution", + "url": "https://pypi.org/project/cyclonedx-bom/" + }, + { + "type": "documentation", + "url": "https://cyclonedx-bom-tool.readthedocs.io/" + }, + { + "type": "issue-tracker", + "url": "https://github.com/CycloneDX/cyclonedx-python/issues" + }, + { + "type": "license", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE" + }, + { + "type": "release-notes", + "url": "https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md" + }, + { + "type": "vcs", + "url": "https://github.com/CycloneDX/cyclonedx-python/" + }, + { + "type": "website", + "url": "https://github.com/CycloneDX/cyclonedx-python/#readme" + } + ], + "group": "CycloneDX", + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "Apache-2.0" + } + } + ], + "name": "cyclonedx-py", + "type": "application", + "version": "thisVersion-testing" + }, + { + "description": "stripped", + "externalReferences": [ ], + "group": "CycloneDX", + "licenses": [ ], + "name": "cyclonedx-python-lib", + "type": "library", + "version": "libVersion-testing" + } + ] + } + }, + "version": 1, + "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", + "bomFormat": "CycloneDX", + "specVersion": "1.6" +} \ No newline at end of file diff --git a/tests/_data/snapshots/environment/texts_with-license-text_1.6.xml.bin b/tests/_data/snapshots/environment/texts_with-license-text_1.6.xml.bin new file mode 100644 index 000000000..ff570f98b --- /dev/null +++ b/tests/_data/snapshots/environment/texts_with-license-text_1.6.xml.bin @@ -0,0 +1,146 @@ + + + + + + + CycloneDX + cyclonedx-py + thisVersion-testing + CycloneDX Software Bill of Materials (SBOM) generator for Python projects and environments + + + Apache-2.0 + + + + + https://github.com/CycloneDX/cyclonedx-python/actions + + + https://pypi.org/project/cyclonedx-bom/ + + + https://cyclonedx-bom-tool.readthedocs.io/ + + + https://github.com/CycloneDX/cyclonedx-python/issues + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/LICENSE + + + https://github.com/CycloneDX/cyclonedx-python/blob/main/CHANGELOG.md + + + https://github.com/CycloneDX/cyclonedx-python/ + + + https://github.com/CycloneDX/cyclonedx-python/#readme + + + + + CycloneDX + cyclonedx-python-lib + libVersion-testing + + + + + + + + with-license-text + 0.1.0 + with licenses as text, instead of SPDX ID/Expression + + + declared license of 'with-license-text' + This is the license text of this component. +It is expected to be available in a SBOM. + + + + + true + + + + + package-a + 23.42 + some package A + + + declared license of 'package-a' + some license text + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/a/dist/package_a-23.42-py3-none-any.whl + PackageSource: Archive + + 5c8da28603857d4073c67e751ba3cd526a7ef414135faecfec164e7d01be24be + + + + + + package-b + 23.42 + some package B + + + Apache-2.0 + + + License :: OSI Approved :: Apache Software License + + + + + file://.../tests/_data/infiles/_helpers/local_pckages/b/dist/package_b-23.42-py3-none-any.whl + PackageSource: Archive + + 583f7cb9db5c26194e8004ac82a90d7b46664da8da674919d3e2189c332a1f78 + + + + + + package-c + 23.42 + some package C + + Apache-2.0 OR MIT + + + + file://.../tests/_data/infiles/_helpers/local_pckages/c/dist/package_c-23.42-py3-none-any.whl + PackageSource: Archive + + c1ac59f18ed20f2e651a37f74134ade2a396e27513ef1c73461873c49058f641 + + + + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + + + + + + + + + + diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.3.json.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.3.json.bin index 3cfa3a05c..9254fa4cb 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.3.json.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.3.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.3.xml.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.3.xml.bin index c326a1fb8..3add75d68 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.3.xml.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.4.json.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.4.json.bin index 9c91dd7a0..11b1b8e7b 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.4.json.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.4.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.4.xml.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.4.xml.bin index 374af51db..e66296747 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.4.xml.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.5.json.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.5.json.bin index 5445beadf..6f36eac92 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.5.json.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.5.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.5.xml.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.5.xml.bin index c08c97e18..0a26b51c4 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.5.xml.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.6.json.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.6.json.bin index 4dba1ef28..960672b5b 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.6.json.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.6.json.bin @@ -8,6 +8,22 @@ "component": { "bom-ref": "root-component", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/pipenv/plain_no-deps_1.6.xml.bin b/tests/_data/snapshots/pipenv/plain_no-deps_1.6.xml.bin index aa980c042..805573888 100644 --- a/tests/_data/snapshots/pipenv/plain_no-deps_1.6.xml.bin +++ b/tests/_data/snapshots/pipenv/plain_no-deps_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.json.bin index f128f6f5a..4169049bc 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.xml.bin index 131df14aa..e69e01ca1 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.3.xml.bin @@ -46,6 +46,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.json.bin index e4bd83e61..ba4c75dd7 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.xml.bin index 262918795..2874c9620 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.4.xml.bin @@ -73,6 +73,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.json.bin index dae427cc5..e35f94298 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.xml.bin index e0727ef51..7efb1f741 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.5.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.json.bin index 6e4b11b23..f1aa9c057 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.json.bin @@ -8,6 +8,22 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.xml.bin index 255c11236..73ec5ee22 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock20_1.6.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.json.bin index f128f6f5a..4169049bc 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.xml.bin index 131df14aa..e69e01ca1 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.3.xml.bin @@ -46,6 +46,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.json.bin index e4bd83e61..ba4c75dd7 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.xml.bin index 262918795..2874c9620 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.4.xml.bin @@ -73,6 +73,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.json.bin index dae427cc5..e35f94298 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.json.bin @@ -8,6 +8,20 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.xml.bin index e0727ef51..7efb1f741 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.5.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.json.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.json.bin index 6e4b11b23..f1aa9c057 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.json.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.json.bin @@ -8,6 +8,22 @@ "component": { "bom-ref": "no-deps", "description": "packages with all meta, but no deps", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from poetry: documentation", diff --git a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.xml.bin b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.xml.bin index 255c11236..73ec5ee22 100644 --- a/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.xml.bin +++ b/tests/_data/snapshots/poetry/plain_no-deps_lock21_1.6.xml.bin @@ -83,6 +83,16 @@ from poetry: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin index be5d62f3b..258fb467a 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.3.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin index ea5cee203..ebfd24686 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin index fd0e22b2f..b145694c2 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.4.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin index 1fc439909..7d9634e0d 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin index 3be98202c..71abbf2b5 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.5.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin index 0dfbe4c30..8e560c2aa 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_frozen_1.6.json.bin b/tests/_data/snapshots/requirements/file_frozen_1.6.json.bin index 2dff83fa9..20c5e7264 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.6.json.bin @@ -56,6 +56,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_frozen_1.6.xml.bin b/tests/_data/snapshots/requirements/file_frozen_1.6.xml.bin index d2c5fde0c..8d4f94378 100644 --- a/tests/_data/snapshots/requirements/file_frozen_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_frozen_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_local_1.3.json.bin b/tests/_data/snapshots/requirements/file_local_1.3.json.bin index 1e58fb3d7..d57761d2e 100644 --- a/tests/_data/snapshots/requirements/file_local_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_local_1.3.json.bin @@ -118,6 +118,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_local_1.3.xml.bin b/tests/_data/snapshots/requirements/file_local_1.3.xml.bin index 8e639806a..82dff4ea0 100644 --- a/tests/_data/snapshots/requirements/file_local_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_local_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_local_1.4.json.bin b/tests/_data/snapshots/requirements/file_local_1.4.json.bin index 3681c80fe..12d5da689 100644 --- a/tests/_data/snapshots/requirements/file_local_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_local_1.4.json.bin @@ -113,6 +113,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_local_1.4.xml.bin b/tests/_data/snapshots/requirements/file_local_1.4.xml.bin index 93554d6ec..0efea4629 100644 --- a/tests/_data/snapshots/requirements/file_local_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_local_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_local_1.5.json.bin b/tests/_data/snapshots/requirements/file_local_1.5.json.bin index 2ceac6090..cab93b1da 100644 --- a/tests/_data/snapshots/requirements/file_local_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_local_1.5.json.bin @@ -113,6 +113,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_local_1.5.xml.bin b/tests/_data/snapshots/requirements/file_local_1.5.xml.bin index c5cd20a8d..f19ecc1cf 100644 --- a/tests/_data/snapshots/requirements/file_local_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_local_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_local_1.6.json.bin b/tests/_data/snapshots/requirements/file_local_1.6.json.bin index 6d25b0e96..8a126c541 100644 --- a/tests/_data/snapshots/requirements/file_local_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_local_1.6.json.bin @@ -113,6 +113,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_local_1.6.xml.bin b/tests/_data/snapshots/requirements/file_local_1.6.xml.bin index 1249e46a6..fb4fbf822 100644 --- a/tests/_data/snapshots/requirements/file_local_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_local_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_nested_1.3.json.bin b/tests/_data/snapshots/requirements/file_nested_1.3.json.bin index be5d62f3b..258fb467a 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.3.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin index ea5cee203..ebfd24686 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_nested_1.4.json.bin b/tests/_data/snapshots/requirements/file_nested_1.4.json.bin index fd0e22b2f..b145694c2 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.4.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin index 1fc439909..7d9634e0d 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_nested_1.5.json.bin b/tests/_data/snapshots/requirements/file_nested_1.5.json.bin index 3be98202c..71abbf2b5 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.5.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin index 0dfbe4c30..8e560c2aa 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_nested_1.6.json.bin b/tests/_data/snapshots/requirements/file_nested_1.6.json.bin index 2dff83fa9..20c5e7264 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.6.json.bin @@ -56,6 +56,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_nested_1.6.xml.bin b/tests/_data/snapshots/requirements/file_nested_1.6.xml.bin index d2c5fde0c..8d4f94378 100644 --- a/tests/_data/snapshots/requirements/file_nested_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_nested_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin index be3165409..5be05aa19 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.3.json.bin @@ -56,6 +56,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin index 54b9c31b1..18f1b92ca 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin index 1910d17cc..b768c4272 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.4.json.bin @@ -55,6 +55,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin index 2b3b69ef9..6bca48004 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin index 8ac03d380..b606e05cd 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.5.json.bin @@ -55,6 +55,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin index d0f98043b..5b3a12b6d 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.6.json.bin b/tests/_data/snapshots/requirements/file_private-packages_1.6.json.bin index 7d856d559..60f5d7892 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.6.json.bin @@ -55,6 +55,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_private-packages_1.6.xml.bin b/tests/_data/snapshots/requirements/file_private-packages_1.6.xml.bin index 6705413b7..1fe4a4298 100644 --- a/tests/_data/snapshots/requirements/file_private-packages_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_private-packages_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin index da1293f6d..9c46f4e01 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.json.bin @@ -64,6 +64,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin index ec4b45e31..4d080ffe0 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin index 19952b876..d86b276a7 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.json.bin @@ -61,6 +61,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin index fa96bd5b0..4b2f63cf6 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin index a71512f82..cd8ad63cc 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.json.bin @@ -61,6 +61,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin index 2fb080c3c..797930962 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.json.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.json.bin index 2e58bbf61..e18774f75 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.json.bin @@ -61,6 +61,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.xml.bin b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.xml.bin index 859c795fb..be51ce145 100644 --- a/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_regression-issue448.cp1252.txt_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin index 8ab41aa21..24c0d1c2f 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.3.json.bin @@ -100,6 +100,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin index 40ff493b3..1dfea5535 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin index 74bddba59..2be72be41 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.4.json.bin @@ -100,6 +100,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin index 12db5cb63..46199f3eb 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin index 8f0de2cae..84b75532d 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.5.json.bin @@ -100,6 +100,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin index 2f0ddc2cf..8b4d04f22 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.6.json.bin b/tests/_data/snapshots/requirements/file_with-comments_1.6.json.bin index 46e98fa41..244683328 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.6.json.bin @@ -100,6 +100,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-comments_1.6.xml.bin b/tests/_data/snapshots/requirements/file_with-comments_1.6.xml.bin index 24254884f..e3acfeadc 100644 --- a/tests/_data/snapshots/requirements/file_with-comments_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-comments_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin index 6e3b0f185..70da24041 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin index 0089297d4..3cb37333d 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin index 0bdb288f5..0830156b8 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin index 0d3d27b82..3541cf662 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin index e72d74577..6ba1b725c 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.json.bin @@ -38,6 +38,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin index c27b9ccb8..1ca7f0031 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.6.json.bin b/tests/_data/snapshots/requirements/file_with-extras_1.6.json.bin index 7855dfe8b..0d1b6cf58 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.6.json.bin @@ -38,6 +38,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-extras_1.6.xml.bin b/tests/_data/snapshots/requirements/file_with-extras_1.6.xml.bin index 4a64e4bfe..c6e07e06e 100644 --- a/tests/_data/snapshots/requirements/file_with-extras_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-extras_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin index fea16d2af..1884d24a7 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.3.json.bin @@ -140,6 +140,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin index bb3d05755..5c49ddd42 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin index 3f9a2292b..92f736ec7 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.4.json.bin @@ -139,6 +139,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin index 1c72957e1..91651bfdf 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin index bb00c47d0..9224eeea0 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.5.json.bin @@ -139,6 +139,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin index 559cfaf9f..e5a2c1e6e 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.6.json.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.6.json.bin index e04508c78..fbc277874 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.6.json.bin @@ -139,6 +139,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-hashes_1.6.xml.bin b/tests/_data/snapshots/requirements/file_with-hashes_1.6.xml.bin index 669a50119..b05c949ff 100644 --- a/tests/_data/snapshots/requirements/file_with-hashes_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-hashes_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin index db7bb3aed..1743e3594 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.3.json.bin @@ -153,6 +153,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin index ae8eea857..1201b6507 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin index 9fecb15e4..d7f08c5c1 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.4.json.bin @@ -146,6 +146,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin index ebc409d69..a2c89f4b3 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin index 4403668b0..95a3ed0d7 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.5.json.bin @@ -146,6 +146,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin index 536337311..a20c14876 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.6.json.bin b/tests/_data/snapshots/requirements/file_with-urls_1.6.json.bin index 1751ed27e..7752aa68d 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.6.json.bin @@ -146,6 +146,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_with-urls_1.6.xml.bin b/tests/_data/snapshots/requirements/file_with-urls_1.6.xml.bin index 639e8a297..83ad54fe7 100644 --- a/tests/_data/snapshots/requirements/file_with-urls_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_with-urls_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin index 2d8883741..e7b405439 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.json.bin @@ -64,6 +64,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin index d6d312ea2..f03bc39f2 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin index 6fb5b0ac1..db3f4f288 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.json.bin @@ -61,6 +61,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin index a2cca2415..73506ab72 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin index 5669d0523..af33d0cb7 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.json.bin @@ -61,6 +61,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin index 0b62229c0..f65fc9ad9 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.json.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.json.bin index c99444a7d..ee2d7ebc5 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.json.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.json.bin @@ -61,6 +61,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.xml.bin b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.xml.bin index e603eee33..7c2e39e23 100644 --- a/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/file_without-pinned-versions_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.3.json.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.3.json.bin index ecf51b84b..01d253a80 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.3.json.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.3.json.bin @@ -96,6 +96,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.3.xml.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.3.xml.bin index d61de3bc8..3966a7178 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.3.xml.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.3.xml.bin @@ -46,6 +46,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.4.json.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.4.json.bin index 93dc4d55e..a8774b066 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.4.json.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.4.json.bin @@ -96,6 +96,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.4.xml.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.4.xml.bin index c713aad3b..279631881 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.4.xml.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.4.xml.bin @@ -73,6 +73,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.5.json.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.5.json.bin index 3ba9fe716..05da5f046 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.5.json.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.5.json.bin @@ -96,6 +96,20 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "id": "MIT" + } + }, + { + "license": { + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.5.xml.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.5.xml.bin index 6732a1d65..583d5e994 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.5.xml.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.5.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.6.json.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.6.json.bin index 98edf0f6a..042855929 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.6.json.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.6.json.bin @@ -96,6 +96,22 @@ "component": { "bom-ref": "root-component", "description": "some `reuqirements.txt` a root-component with all metadata", + "evidence": { + "licenses": [ + { + "license": { + "acknowledgement": "declared", + "id": "MIT" + } + }, + { + "license": { + "acknowledgement": "declared", + "name": "License :: OSI Approved :: Apache Software License" + } + } + ] + }, "externalReferences": [ { "comment": "from pyproject urls: documentation", diff --git a/tests/_data/snapshots/requirements/index_auth_frozen_1.6.xml.bin b/tests/_data/snapshots/requirements/index_auth_frozen_1.6.xml.bin index ef0e95847..e49a84ec7 100644 --- a/tests/_data/snapshots/requirements/index_auth_frozen_1.6.xml.bin +++ b/tests/_data/snapshots/requirements/index_auth_frozen_1.6.xml.bin @@ -83,6 +83,16 @@ from pyproject urls: homepage + + + + MIT + + + License :: OSI Approved :: Apache Software License + + + true diff --git a/tests/integration/test_cli_environment.py b/tests/integration/test_cli_environment.py index 31ddff320..1459943b4 100644 --- a/tests/integration/test_cli_environment.py +++ b/tests/integration/test_cli_environment.py @@ -158,38 +158,7 @@ def test_plain_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputF self.assertEqual(0, res, err) self.assertEqualSnapshot(out, 'plain', projectdir, sv, of) - @named_data(*test_data_file_filter('pep639')) - def test_pep639_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: - res, out, err = run_cli( - 'environment', - '-vvv', - '--sv', sv.to_version(), - '--of', of.name, - '--output-reproducible', - '-o=-', - '--pyproject', join(projectdir, 'pyproject.toml'), - '--PEP-639', - join(projectdir, '.venv')) - self.assertEqual(0, res, err) - self.assertEqualSnapshot(out, 'pep639', projectdir, sv, of) - - @named_data(*test_data_file_filter('pep639')) - def test_pep639_texts_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: - res, out, err = run_cli( - 'environment', - '-vvv', - '--sv', sv.to_version(), - '--of', of.name, - '--output-reproducible', - '-o=-', - '--pyproject', join(projectdir, 'pyproject.toml'), - '--PEP-639', - '--gather-license-texts', - join(projectdir, '.venv')) - self.assertEqual(0, res, err) - self.assertEqualSnapshot(out, 'pep639-texts', projectdir, sv, of) - - @named_data(*test_data_file_filter('pep639')) + @named_data(*test_data_file_filter('with-license-')) def test_texts_as_expected(self, projectdir: str, sv: SchemaVersion, of: OutputFormat) -> None: res, out, err = run_cli( 'environment', diff --git a/tests/integration/test_utils_pep621.py b/tests/integration/test_utils_pep621.py index b0cebba3e..604dcde3c 100644 --- a/tests/integration/test_utils_pep621.py +++ b/tests/integration/test_utils_pep621.py @@ -38,7 +38,7 @@ def test_project2licenses_license_dict_text(self) -> None: } lfac = LicenseFactory() with TemporaryDirectory() as tmpdir: - licenses = list(project2licenses(project, lfac, fpath=join(tmpdir, 'pyproject.toml'))) + licenses = list(project2licenses(project, lfac, True, fpath=join(tmpdir, 'pyproject.toml'))) self.assertEqual(len(licenses), 1) lic = licenses[0] self.assertIsInstance(lic, DisjunctiveLicense) @@ -56,7 +56,7 @@ def test_project2licenses_license_dict_file(self) -> None: with TemporaryDirectory() as tmpdir: with open(join(tmpdir, 'license.txt'), 'w') as tf: tf.write('File license text') - licenses = list(project2licenses(project, lfac, fpath=join(tmpdir, 'pyproject.toml'))) + licenses = list(project2licenses(project, lfac, True, fpath=join(tmpdir, 'pyproject.toml'))) self.assertEqual(len(licenses), 1) lic = licenses[0] self.assertIsInstance(lic, DisjunctiveLicense) @@ -74,7 +74,7 @@ def test_project2licenses_license_dict_file_in_subfolder(self) -> None: mkdir(join(tmpdir, 'foo')) with open(join(tmpdir, 'foo', 'license.txt'), 'w') as tf: tf.write('File license text') - licenses = list(project2licenses(project, lfac, fpath=join(tmpdir, 'pyproject.toml'))) + licenses = list(project2licenses(project, lfac, True, fpath=join(tmpdir, 'pyproject.toml'))) self.assertEqual(len(licenses), 1) lic = licenses[0] self.assertIsInstance(lic, DisjunctiveLicense) @@ -94,5 +94,5 @@ def test_project2licenses_license_non_dict(self, license: any) -> None: } lfac = LicenseFactory() with TemporaryDirectory() as tmpdir: - licenses = list(project2licenses(project, lfac, fpath=join(tmpdir, 'pyproject.toml'))) + licenses = list(project2licenses(project, lfac, True, fpath=join(tmpdir, 'pyproject.toml'))) self.assertEqual(len(licenses), 0)