Apache OpenWhisk Runtime Swift
Copyright 2016-2018 The Apache Software Foundation

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

========================================================================
MIT License
========================================================================

The following components are provided under the MIT License. See project link for details.

     (MIT License) gradle-scalafmt (cz.alenkacz:gradle-scalafmt:1.6.0 - https://github.com/alenkacz/gradle-scalafmt)
     (MIT License) SwiftyJSON (IBM-Swift/SwiftyJSON:15.0.1 - https://github.com/IBM-Swift/SwiftyJSON.git)

========================================================================
BSD 3-Clause "New" or "Revised" License
========================================================================

The following components are provided under the BSD 3-Clause "New" or "Revised" License. See project link for details.

     (BSD 3-Clause "New" or "Revised" License) Scala Library (org.scala-lang:scala-library - https://mvnrepository.com/artifact/org.scala-lang/scala-library)