Apache Tez
Copyright (c) 2016 The Apache Software Foundation

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

This tez-ui bundle includes fonts protected under the Open Font License.
These fonts can only be distributed as part of a piece of software, but
not individually. See the license for details.  http://scripts.sil.org/OFL.
More information on included fonts can be found in the LICENSE file.
