Apache TinkerPop
Copyright 2015-2019 The Apache Software Foundation.

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

------------------------------------------------------------------------
Apache Commons Codec 1.12 (AL ASF)
------------------------------------------------------------------------
src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
contains test data from http://aspell.net/test/orig/batch0.tab.
Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)

The content of package org.apache.commons.codec.language.bm has been translated
from the original php source code available at http://stevemorse.org/phoneticinfo.htm
with permission from the original authors.
Original source copyright:
Copyright (c) 2008 Alexander Beider & Stephen P. Morse.

------------------------------------------------------------------------
Apache Groovy 2.5.7 (AL ASF)
------------------------------------------------------------------------
This product includes/uses ANTLR (http://www.antlr2.org/)
developed by Terence Parr 1989-2006

This product bundles icons from the famfamfam.com silk icons set
http://www.famfamfam.com/lab/icons/silk/
Licensed under the Creative Commons Attribution Licence v2.5
http://creativecommons.org/licenses/by/2.5/

------------------------------------------------------------------------
Apache Ivy 2.3.0 (AL ASF)
------------------------------------------------------------------------
Portions of Ivy were originally developed by
Jayasoft SARL (http://www.jayasoft.fr/)
and are licensed to the Apache Software Foundation under the
"Software Grant License Agreement"

SSH and SFTP support is provided by the JCraft JSch package,
which is open source software, available under
the terms of a BSD style license.
The original software and related information is available
at http://www.jcraft.com/jsch/.

------------------------------------------------------------------------
JavaTuples 1.2
------------------------------------------------------------------------
Copyright (c) 2010, The JAVATUPLES team (http://www.javatuples.org)

------------------------------------------------------------------------
HPPC 0.7.1
------------------------------------------------------------------------
HPPC borrowed code, ideas or both from:

 * Apache Lucene, http://lucene.apache.org/
   (Apache license)
 * Fastutil, http://fastutil.di.unimi.it/
   (Apache license)
 * Koloboke, https://github.com/OpenHFT/Koloboke
   (Apache license)

------------------------------------------------------------------------
Netty 4.1.42
------------------------------------------------------------------------
Copyright 2014 The Netty Project

