# Notices for Eclipse MDM|BL

This content is produced and maintained by the Eclipse MDM|BL project,
it is a project of the openMDM(R) Eclipse Working Group.

* Project home: https://projects.eclipse.org/projects/technology.mdmbl

## Trademarks

Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
of the Eclipse Foundation.

## Copyright

All content is the property of the following respective authors or their employers.
For more information regarding authorship of content, please consult the listed
source code repository logs.

Copyright (c) 2016-2018 Gigatronik Ingolstadt GmbH
Copyright (c) 2016-2019 Peak Solution GmbH
Copyright (c) 2017-2018 science + computing AG Tuebingen (ATOS SE)
Copyright (c) 2017-2018 Canoo Engineering AG
Copyright (c) 2017 Florian Schmitt
Copyright (c) 2017-2019 Angelika Wittek
Copyright (c) 2018 Elektronische Fahrwerksysteme GMBH
Copyright (c) 2018-2019 Karakun AG

## Declared Project Licenses

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.

SPDX-License-Identifier: EPL-2.0

## Source Code

The project maintains the following source code repositories:

org.eclipse.mdm.api.base.git	      - The openMDM(R) API.
org.eclipse.mdm.api.default.git	    - Extension of the openMDM(R) API containing default elements.
org.eclipse.mdm.api.odsadapter.git	- ODS implementation of persistence adapter.
org.eclipse.mdm.nucleus.git	        - Core building blocks for the openMDM Business Logic and Web Frontend.

## Third-party Content

The Content includes items that have been sourced from third parties as set out below.
If you did not receive this Content directly from the Eclipse Foundation, the following
is provided for informational purposes only, and you should look to
the Redistributor's license for terms and conditions of use.

antlr4-4.5.3.jar(2.5.3)
    * License: New BSD license

aopalliance-repackaged-2.5.0-b05.jar (2.5.0-b05)
    * License: CDDL

commons-codec-1.2.jar (1.2)
    * License: Apache License, 2.0

commons-httpclient-3.1.jar  (3.1)
    * License: Apache License, 2.0

commons-lang3-3.8.1.jar (3.8.1)
    * License: Apache License, 2.0

commons-text-1.6.jar (1.6)
    * License: Apache License, 2.0

commons-math-2.2.jar (2.2)
    * License: Apache License, 2.0

gson-2.7.jar (2.7)
    * License: Apache License, 2.0

Google Guava Version: 25.0-jre  (25.0)
    * License: Apache License, 2.0

Gradle Wrapper (4.10.2)
    * License: Apache License, 2.0

hk2-api-2.5.0-b05.jar (2.5.0-b05)
    * License: CDDL-1.1

hk2-locator-2.5.0-b05.jar(2.5.0-b05)
    * License: CDDL

hk2-utils-2.5.0-b05.jar  (2.5.0-b05)
    * License: CDDL

jackson-annotations-2.9.0.jar  (2.9.0)
    * License: Apache License, 2.0

jackson-core-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-databind-2.9.2.jar  (2.9.2)
    * License: Apache License, 2.0

jackson-jaxrs-base-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-jaxrs-json-provider-2.9.2.jar(2.9.2)
    * License: Apache License, 2.0

jackson-module-jaxb-annotations-2.9.2.jar  (2.9.2)
    * License: Apache License, 2.0

javassist-3.20.0-GA.jar  (2.20.0-GA)
    * License: Apache 2.0

jcl-over-slf4j-1.7.25.jar(1.7.25)
    * License: MIT License
    * Licence Path: https://www.slf4j.org/license.html
    * Project URL:  https://www.slf4j.org
    * Source URL:   https://github.com/qos-ch/slf4j

jersey-client-2.23.2.jar (2.23.2)
     * License: CDDL

jersey-common-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-container-servlet-2.23.2.jar  (2.23.2)
    * License: CDDL

jersey-container-servlet-core-2.23.3.jar(2.23.2)
    * License: CDDL

jersey-guava-2.23.2.jar  (2.23.2)
    * License: Apache License, 2.0

jersey-media-jaxb-2.23.2.jar(2.23.2)
    * License: CDDL

jersey-media-sse-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-media-multipart-2.23.2.jar (2.23.2)
    * License: CDDL

jersey-server-2.23.2.jar (2.23.2)
    * License: Apache-2.0

log4j-over-slf4j-1.7.25.jar (1.7.25)
    * License: Apache-2.0

logback-classic-1.2.3.jar(1.2.3)
    * License: Eclipse Public License 1.0

logback-core-1.2.3.jar(1.2.3)
    * License: Eclipse Public License 1.0

openatfx-0.7.4.jar (0.7.4)
    * License: Apache-2.0

osgi-resource-locator-1.0.1.jar(1.0.1)
    * License: CDDL

protobuf-java-3.2.0.jar (3.2.0)
    * License: New BSD license

protobuf-java-util-3.2.0.jar  (3.2.0)
    * License: New BSD license

slf4j-api-1.7.25.jar  (1.7.25)
    * License: MIT license
    * Licence Path: https://www.slf4j.org/license.html
    * Project URL: https://github.com/qos-ch/slf4j
    * Source URL:  https://github.com/qos-ch/slf4j/releases/tag/v_1.7.25

validation-api-1.1.0.Final.jar (1.1.0.Final)
  * License: Apache License, 2.0

vavr-0.9.1-sources.jar (0.9.1)
  * License: Apache License, 2.0

woodstox-core-asl-4.4.1.jar (4.4.1)
  * License: Apache License, 2.0


FFAMFAMFAM Silk Icon, Version 1.3
    * License: Creative Commons Attribution 3.0 License
    * Licence Path: https://creativecommons.org/licenses/by/3.0/
    * Project: http://www.famfamfam.com/lab/icons/silk/
    * Source:  http://www.famfamfam.com/lab/icons/silk/

@angular/animations:7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api/animations
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/cdk:7.1.1
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api
    * Source:  https://github.com/angular/angular/releases/tag/7.1.1


@angular/common@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io/api/common
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r

@angular/compiler@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/core@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/forms@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/http@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/platform-browser-dynamic@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/platform-browser@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

@angular/router@7.2.4
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://angular.io
    * Source:  https://github.com/angular/angular/releases/tag/7.2.4

bootstrap@4.1.3
    * License: MIT
    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
    * Project: https://getbootstrap.com/
    * Source:  https://github.com/twbs/bootstrap

class-transformer@0.1.6
    * License: MIT
    * Licence Path: https://github.com/typestack/class-transformer/blob/master/LICENSE
    * Project: https://github.com/pleerock/class-transformer
    * Source:  https://github.com/pleerock/class-transformer

core-js@2.6.0
    * License: MIT
    * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
    * Project: https://github.com/zloirock/core-js
    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0

file-saver@1.3.3
    * License: MIT
    * Licence Path: https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md
    * Project: https://github.com/eligrey/FileSaver.js
    * Source:  https://github.com/eligrey/FileSaver.js

font-awesome@4.7.0
    * License: MIT
    * Licence Path: https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt
    * Project: https://fontawesome.com/
    * Source:  https://github.com/FortAwesome/Font-Awesome

ng2-split-pane@1.3.1
    * License: MIT
    * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
    * Project: https://github.com/wannabegeek/ng2-split-pane
    * Source:  https://github.com/wannabegeek/ng2-split-pane

ngx-bootstrap@3.1.2
    * License: MIT
    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
    * Project: https://valor-software.com/ngx-bootstrap
    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2

primeicons:1.0.0
    * License: MIT
    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
    * Project: https://www.primefaces.org/primeng
    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0

primeng@7.0.1
    * License: MIT
    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
    * Project: https://www.primefaces.org/primeng
    * Source:  https://github.com/primefaces/primeng/tree/7.0.1

rxjs@5.1.0
    * License: Apache-2.0
    * Project: https://rxjs-dev.firebaseapp.com/
    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3

rxjs-compat:6.3.3
    * License: Apache-2.0
    * Project: https://rxjs-dev.firebaseapp.com/
    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat


zone.js@0.8.26
    * License: MIT
    * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
    * Project: https://github.com/angular
    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26

OMG Event Service Specification (1.2)

* License: LicenseRef - Object-Management-Group-License
* Project: https://www.omg.org/spec/EVNT/1.2/
* Source: https://www.omg.org/spec/EVNT/1.2/pdf

OMG Notification Service Specification (1.1)

* License: LicenseRef - Object-Management-Group-License
* Project: https://www.omg.org/spec/NOT/
* Source: https://www.omg.org/spec/NOT/1.1/PDF

ods530.idl
Permission of use:
From Hans-Georg Swolana, Chairman of the Board ASAM e.V.,
 Prof. Dr. Marcus Rieker, Member of the Board ASAM e.V.
Date: Hoehenkirchen, 06/01/2016
"The ASAM Board of Directors releases the IDL files for use under the EPL to the Eclipse IWG openMDM.
This is valid for all versions of ASAM ODS 5.3.x.
This permission is valid under the conditions of Eclipse will not modify the file."

AvalonEvent.idl, CorbaFileServer.idl
Permission of use:
From Dr. Ralph Noerenberg
Date: 08/15/2016
"Herewith, we release the generated Client-Source-Code generated from our CORBA IDLs, namely
* CORBANotification Service (generated from „AvalonEvent.idl”)
* CORBAFileServer (generated from „CorbaFileServer.idl“),
Under the Eclipse Public License (EPL). This agreement does not include the „AvalonEvent.idl“ and
„CorbaFileServer.idl“ itself, which remain protected property of HighQSoft. "

## Cryptography

Content may contain encryption software. The country in which you are currently
may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software,
please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is
permitted.
