# Notices for Apogy

This content is produced and maintained by the Eclipse Apogy project.

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

## Trademarks

Eclipse Apogy are trademarks of the Eclipse Foundation. Eclipse, and the 
Eclipse Logo are registered trademarks of the Eclipse Foundation.

## Declared Project Licenses

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

SPDX-License-Identifier: EPL-1.0

## Source Code

The project maintains the following source code repositories:

 * http://git.eclipse.org/apogy/apogy.git


## Third-party Content

To be Defined

