Apache Sling RepoInit Webconsole
Copyright 2021 The Apache Software Foundation

This product bundles Textarea with Line Numbers (TLN), which is available under a "Apache 2.0" license. More information available at https://github.com/MatheusAvellar/textarea-line-numbers