Apache NetBeans HTML/Java API
Copyright 2017-2021 The Apache Software Foundation

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

The initial code is based on NetBeans HTML/Java API modules kindly
donated by Oracle Corp to the Apache Software Foundation.
