


  <!doctype html>
<!--
Generated by Apache Maven Doxia 2023-12-18
, Rendered using Reflow Maven Skin 2.3.4 (http://devacfr.github.io/reflow-maven-skin)
-->
<html  xml:lang="" lang="">
        <head>
    <meta charset="UTF-8" />
    <title>Apache OpenMeetings Project – Project Licenses</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="description" content="" />
      <meta http-equiv="content-language" content="" />
                                                    <link href="../css/themes/cerulean/bootstrap.min.css" rel="stylesheet" />
        <link href="../css/fontawesome/all.min.css" rel="stylesheet" />
    <link href="../css/reflow-skin.css" rel="stylesheet" />
    
    <link rel="stylesheet" href="../js/styles/github.min.css" />

    <link href="../css/lightbox.css" rel="stylesheet" />
    <link href="../css/site.css" rel="stylesheet" />
    <link href="../css/print.css" rel="stylesheet" media="print" />
<link rel="stylesheet" href="../css/site.css"/>  </head> <!-- end : head -->
<body class="page-licenses project-openmeetings-screenshare anchorjs-enabled scrolltop-smooth-enabled m-toc-sidebar-enabled m-toc-sidebar-expanded m-toc-sidebar-autoexpandable toc-sidebar-fixed">
    <nav id="m-top-navbar" class="navbar navbar-expand-lg fixed-top navbar-dark bg-primary">
<div class="container">            <a class="navbar-brand mb-0 h1" href="../index.html">
            <span class="color-highlight">Apache</span> OpenMeetings
            </a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#top-navbar-collapse-1" aria-controls="top-navbar-collapse-1" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="top-navbar-collapse-1">
                <ul class="nav navbar-nav ml-auto">
                    <li class="nav-item " ><a  href="../demo.html"  title="Demo"  class="nav-link" >Demo</a></li>
                    <li class="nav-item " ><a  href="../downloads.html"  title="Download"  class="nav-link" >Download</a></li>
                    <li class="nav-item " ><a  href="https://cwiki.apache.org/confluence/display/OPENMEETINGS"  title="Wiki"   class="externalLink nav-link" >Wiki</a></li>
                    <li class="nav-item dropdown">
                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Parent Project <b class="caret"></b></a>
                        <div class="dropdown-menu">
                            <a href="../index.html" title="Openmeetings"  class="dropdown-item ">Openmeetings</a>
                        </div>
                    </li>
                    <li class="nav-item dropdown">
                <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Project <b class="caret"></b></a>
                        <div class="dropdown-menu">
                            <a href="index.html" title="About"  class="dropdown-item ">About</a>
                            <a href="project-info.html" title="Info"  class="dropdown-item ">Info</a>
                            <a href="summary.html" title="Summary"  class="dropdown-item ">Summary</a>
                            <a href="https://www.apache.org/licenses/" title="License"  class="dropdown-item ">License</a>
                            <a href="dependencies.html" title="Dependencies"  class="dropdown-item ">Dependencies</a>
                            <a href="dependency-convergence.html" title="Dependency Convergence"  class="dropdown-item ">Dependency Convergence</a>
                            <a href="rat-report.html" title="RAT Report"  class="dropdown-item ">RAT Report</a>
                        </div>
                    </li>
                </ul><!--/ul.navbar-nav -->
            </div><!--/.nav-collapse -->
</div> <!--/.container -->    </nav> <!--/.navbar -->
    <div class="main-body">
    <div class="header text-light bg-secondary" role="main">
        <div class="container container-fluid">
    <div id="banner" class="header--banner">
        <div class="row m-1">
          <div class="col-md-12">
            <div class="float-left header--banner--left bannerLeft">
                    <a href="../index.html">
            <img class="float-left m-2 img-fluid" src="../images/logo.png" alt="Apache OpenMeetings" />
            </a>
            </div>
            <div class="float-right header--banner--right bannerRight">
                    <a href="https://apache.org">
            <img class="float-left m-2 img-fluid" src="https://apache.org/img/asf_logo.png" alt="Apache" />
            </a>
            </div>
          </div>
        </div>
    </div>
        </div>
    </div> <!-- end : header -->
    <div class="row mt-5">
        <div class="d-xs-none d-sm-none d-md-none d-lg-block col-lg-2">
        </div>
        <main class="col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-8" role="main">
    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            <li class="publishDate version-date">Last Published: 2023-12-18
</li>
        </ol>
    </nav>
        <section>
 <div class="page-header">
  <h1 id="overview1">Overview</h1>
 </div><a id="overview"></a>
 <p>Typically the licenses listed for the project are that of the project itself, and not of dependencies.</p>
</section>
<section>
 <h1 id="project-licenses">Project Licenses</h1><a id="project_licenses"></a>
 <section>
  <h2 id="the-apache-software-license-version-20">The Apache Software License, Version 2.0</h2><a id="the_apache_software_license2c_version_20"></a><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0">[Original text]</a>
  <p>Copy of the license follows:</p> <!-- Navigation -->
  <header>
   <div id="skiptocontent">
    <a href="https://www.apache.org/licenses/#maincontent">Skip to Main Content</a>
   </div>
   <nav class="navbar navbar-inverse navbar-fixed-top mainmenu">
    <div class="container">
     <div class="navbar-header">
      <button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#mainnav-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
     </div>
     <div class="collapse navbar-collapse" id="mainnav-collapse">
      <div class="upper-nav">
       <div class="header-social-icons">
        <a target="_blank" href="https://infra.apache.org/slack.html"><img src="https://www.apache.org/images/slack-icon.svg" alt="slack icon" class="img-fluid"></a> <a target="_blank" href="https://github.com/apache"><img src="https://www.apache.org/images/github-mark-white.svg" alt="github icon" class="img-fluid"></a> <a target="_blank" href="https://www.linkedin.com/company/the-apache-software-foundation/"><img src="https://www.apache.org/images/linkedin-icon.png" alt="linkedIn icon" class="img-fluid"></a> <a target="_blank" href="https://www.youtube.com/c/TheApacheFoundation"><img src="https://www.apache.org/images/youtube-icon.svg" alt="youtube icon" class="img-fluid"></a> <a target="_blank" href="https://twitter.com/TheASF"><img src="https://www.apache.org/images/x-icon.svg" alt="X icon" class="img-fluid"></a>
       </div> <a href="https://donate.apache.org/48ff" target="_blank" class="btn btn-default" onclick="_paq.push(['trackEvent', 'click', 'Make a Donation Button']);">Make a Donation</a>
      </div>
      <ul class="nav navbar-nav navbar-justified">
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">Community&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://community.apache.org/" target="_blank">Contributor Getting Started</a></li>
         <li><a href="https://community.apache.org/contributors/" target="_blank">Becoming a Committer</a></li>
         <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
         <li><a href="https://www.apache.org/community-resources/">Community Resources</a></li>
         <li><a href="https://communityovercode.org/" target="_blank">Community Over Code</a></li>
         <li><a href="https://events.apache.org/" target="_blank">Events</a></li>
         <li><a href="https://www.redbubble.com/people/comdev/shop" target="_blank">Store</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">Projects&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://www.apache.org/projects">Projects</a></li>
         <li><a href="https://incubator.apache.org/" target="_blank">Incubator Projects</a></li>
         <li><a href="https://projects.apache.org/" target="_blank">Projects Directory </a></li>
         <li><a href="https://www.apache.org/foundation/mailinglists">Mailing Lists </a></li>
         <li><a href="https://www.apache.org/security">Report a Vulnerability</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">Downloads&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://downloads.apache.org/" target="_blank">Distributions</a></li>
         <li><a href="https://projects.apache.org/releases.html" target="_blank">Releases</a></li>
         <li><a href="https://status.apache.org/" target="_blank">Infrastructure Status</a></li>
         <li><a href="https://infra-reports.apache.org/#uptime" target="_blank">Infrastructure Statistics</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">Learn&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://news.apache.org/" target="_blank">Blog</a></li>
         <li><a href="https://www.apache.org/foundation/how-it-works">How the ASF Works</a></li>
         <li><a href="https://www.apache.org/theapacheway/">The Apache Way</a></li>
         <li><a href="https://www.apache.org/legal/">Legal &amp; Trademark</a></li>
         <li><a href="https://www.apache.org/licenses">Licenses</a></li>
         <li><a href="https://www.apache.org/foundation/glossary">Glossary</a></li>
         <li><a href="https://www.apache.org/foundation/faq">FAQ</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">Resources &amp; Tools&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://www.apache.org/dev/">Developer Information</a></li>
         <li><a href="https://cwiki.apache.org/" target="_blank">Wiki</a></li>
         <li><a href="https://issues.apache.org/" target="_blank">Issues</a></li>
         <li><a href="https://infra.apache.org/slack.html" target="_blank">Slack</a></li>
         <li><a href="https://selfserve.apache.org/" target="_blank">Self Serve Portal</a></li>
         <li><a href="https://infra.apache.org/" target="_blank">Infrastructure</a></li>
         <li><a href="https://whimsy.apache.org/" target="_blank">Whimsy</a></li>
         <li><a href="https://www.apache.org/foundation/press/kit/">Brand Guidelines</a></li>
         <li><a href="https://www.apache.org/logos/">Project Logos</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle" data-toggle="dropdown" role="button">About&nbsp;<span class="caret"></span></a>
        <ul class="dropdown-menu" role="menu">
         <li><a href="https://www.apache.org/foundation/">About</a></li>
         <li><a href="https://www.apache.org/foundation/sponsors">Our Sponsors</a></li>
         <li><a href="https://www.apache.org/foundation/sponsorship">Corporate Sponsorship</a></li>
         <li><a href="https://www.apache.org/foundation/individual-supporters">Individual Supporters</a></li>
         <li><a href="https://www.apache.org/foundation/leadership">Leadership</a></li>
         <li><a href="https://www.apache.org/foundation/members">Members</a></li>
         <li><a href="https://diversity.apache.org/" target="_blank">Diversity &amp; Inclusion</a></li>
         <li><a href="https://www.apache.org/press/">Newsroom</a></li>
         <li><a href="https://www.apache.org/foundation/contact">Contact</a></li>
        </ul></li>
       <li class="dropdown"><a href="https://www.apache.org/licenses/#" class="dropdown-toggle hidden-xs" data-toggle="dropdown" role="button"><span class="glyphicon glyphicon-search" aria-hidden="true"></span><span class="sr-only">Search</span></a>
        <ul class="dropdown-menu search-form" role="search">
         <li>
          <div id="pagefind-search" class="input-group" style="width: 100%; padding: 0 5px;"></div></li>
        </ul></li>
      </ul>
     </div>
    </div>
   </nav>
  </header> <!-- / Navigation -->
  <header id="main-header" class="container">
   <div class="sideImg">
    <a class="visible-home" href="https://events.apache.org/x/current-event.html"> <img class="img-responsive img-fluid" style="width: 125px;" src="https://www.apache.org/events/current-event-125x125.png" alt="Apache Events"> <!-- STALE: <img class="img-responsive" style="width: 125px;" src="https://www.apachecon.com/event-images/default-square-light.png" alt="ApacheCon 2021 Coming Soon!" /> --> </a> <a class="hidden-home" href="https://www.apache.org/"><img class="img-responsive img-fluid" src="https://www.apache.org/img/asf-estd-1999-logo.jpg" alt="The Apache Software Foundation"></a>
   </div>
   <div class="main">
    <img class="img-responsive center-block visible-home img-fluid" src="https://www.apache.org/img/asf-estd-1999-logo.jpg" alt="Apache 20th Anniversary Logo">
   </div>
  </header>
  <main id="maincontent">
   <div class="container">
    <h1 id="apache-license-version-201">Apache License, Version 2.0<a class="headerlink" href="https://www.apache.org/licenses/#apache-license-version-20" title="Permalink">¶</a></h1>
    <ul>
     <li>Text version: <a href="https://www.apache.org/licenses/LICENSE-2.0.txt">https://www.apache.org/licenses/LICENSE-2.0.txt</a></li>
     <li>SPDX short identifier: <a href="https://spdx.org/licenses/Apache-2.0.html">Apache-2.0</a></li>
     <li>OSI Approved License: <a href="https://opensource.org/licenses/Apache-2.0">https://opensource.org/licenses/Apache-2.0</a></li>
    </ul>
    <p>The 2.0 version of the Apache License, approved by the ASF in 2004, helps us achieve our goal of providing reliable and long-lived software products through collaborative, open-source software development.</p>
    <p>All packages produced by the ASF are implicitly licensed under the Apache License, Version 2.0, unless otherwise explicitly stated.</p>
    <div style="margin: 3em 10%; font-family:serif;text-align:justify; border: 1px solid black; padding: 2em;   box-shadow: 4px 8px #888888;">
     <p style="text-align:center"><strong>Apache License<br>Version 2.0, January 2004<br></strong> <strong><a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a></strong></p>
     <p>TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p>
     <p><strong><a name="definitions">1. Definitions</a></strong>.</p>
     <div style="margin-left: 1em;">
      <p>"<strong>License</strong>" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.</p>
      <p>"<strong>Licensor</strong>" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.</p>
      <p>"<strong>Legal Entity</strong>" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "<strong>control</strong>" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.</p>
      <p>"<strong>You</strong>" (or "<strong>Your</strong>") shall mean an individual or Legal Entity exercising permissions granted by this License.</p>
      <p>"<strong>Source</strong>" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.</p>
      <p>"<strong>Object</strong>" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.</p>
      <p>"<strong>Work</strong>" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).</p>
      <p>"<strong>Derivative Works</strong>" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.</p>
      <p>"<strong>Contribution</strong>" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "<strong>submitted</strong>" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "<strong>Not a Contribution.</strong>"</p>
      <p>"<strong>Contributor</strong>" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.</p>
     </div>
     <p><strong><a name="copyright">2. Grant of Copyright License</a></strong>. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.</p>
     <p><strong><a name="patent">3. Grant of Patent License</a></strong>. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.</p>
     <p><strong><a name="redistribution">4. Redistribution</a></strong>. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:</p>
     <ol style="list-style: lower-latin;">
      <li>You must give any other recipients of the Work or Derivative Works a copy of this License; and</li>
      <li>You must cause any modified files to carry prominent notices stating that You changed the files; and</li>
      <li>You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and</li>
      <li>If the Work includes a "<strong>NOTICE</strong>" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.</li>
     </ol>
     <p>You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.</p>
     <p><strong><a name="contributions">5. Submission of Contributions</a></strong>. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.</p>
     <p><strong><a name="trademarks">6. Trademarks</a></strong>. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.</p>
     <p><strong><a name="no-warranty">7. Disclaimer of Warranty</a></strong>. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.</p>
     <p><strong><a name="no-liability">8. Limitation of Liability</a></strong>. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.</p>
     <p><strong><a name="additional">9. Accepting Warranty or Additional Liability</a></strong>. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.</p>
     <p>END OF TERMS AND CONDITIONS</p>
    </div>
    <h2 id="how-to-apply-the-apache-license-to-your-work">How to apply the Apache License to your work<a class="headerlink" href="https://www.apache.org/licenses/#apply" title="Permalink">¶</a></h2>
    <p>Include a copy of the Apache License, typically in a file called LICENSE, in your work, and consider also including a NOTICE file that references the License.</p>
    <p>To apply the Apache License to specific files in your work, attach the following boilerplate declaration, replacing the fields enclosed by brackets "[]" with your own identifying information. (Don't include the brackets!) Enclose the text in the appropriate comment syntax for the file format. We also recommend that you include a file or class name and description of purpose on the same "printed page" as the copyright notice for easier identification within third-party archives.</p>
    <pre><code>Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
</code></pre>
   </div>
  </main> <!-- Footer -->
  <footer class="bg-primary">
   <div class="container">
    <div class="row">
     <br>
     <div class="col-sm-2">
      <h5 class="white" id="community">Community</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://community.apache.org/" target="_blank">Contributor Getting Started</a></li>
       <li><a href="https://community.apache.org/contributors/" target="_blank">Becoming a Committer</a></li>
       <li><a href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a></li>
       <li><a href="https://www.apache.org/community-resources/">Community Resources</a></li>
       <li><a href="https://communityovercode.org/" target="_blank">Community Over Code</a></li>
       <li><a href="https://events.apache.org/" target="_blank">Events</a></li>
       <li><a href="https://www.redbubble.com/people/comdev/shop" target="_blank">Store</a></li>
      </ul>
     </div>
     <div class="col-sm-2">
      <h5 class="white" id="projects">Projects</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://www.apache.org/projects">Projects</a></li>
       <li><a href="https://incubator.apache.org/" target="_blank">Incubator Projects</a></li>
       <li><a href="https://projects.apache.org/" target="_blank">Projects Directory </a></li>
       <li><a href="https://www.apache.org/foundation/mailinglists">Mailing Lists </a></li>
       <li><a href="https://www.apache.org/security">Report a Vulnerability</a></li>
      </ul>
     </div>
     <div class="col-sm-2">
      <h5 class="white" id="downloads">Downloads</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://downloads.apache.org/" target="_blank">Distributions</a></li>
       <li><a href="https://projects.apache.org/releases.html" target="_blank">Releases</a></li>
       <li><a href="https://status.apache.org/" target="_blank">Infrastructure Status</a></li>
       <li><a href="https://infra-reports.apache.org/#uptime" target="_blank">Infrastructure Statistics</a></li>
      </ul>
     </div>
     <div class="col-sm-2">
      <h5 class="white" id="learn">Learn</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://news.apache.org/" target="_blank">Blog</a></li>
       <li><a href="https://www.apache.org/foundation/how-it-works">How the ASF Works</a></li>
       <li><a href="https://www.apache.org/theapacheway/">The Apache Way</a></li>
       <li><a href="https://www.apache.org/legal/">Legal &amp; Trademark</a></li>
       <li><a href="https://www.apache.org/licenses">Licenses</a></li>
       <li><a href="https://www.apache.org/foundation/glossary">Glossary</a></li>
       <li><a href="https://www.apache.org/foundation/faq">FAQ</a></li>
      </ul>
     </div>
     <div class="col-sm-2">
      <h5 class="white" id="resources--tools">Resources &amp; Tools</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://www.apache.org/dev/">Developer Information</a></li>
       <li><a href="https://cwiki.apache.org/" target="_blank">Wiki</a></li>
       <li><a href="https://issues.apache.org/" target="_blank">Issues</a></li>
       <li><a href="https://infra.apache.org/slack.html" target="_blank">Slack</a></li>
       <li><a href="https://selfserve.apache.org/" target="_blank">Self Serve Portal</a></li>
       <li><a href="https://infra.apache.org/" target="_blank">Infrastructure</a></li>
       <li><a href="https://whimsy.apache.org/" target="_blank">Whimsy</a></li>
       <li><a href="https://www.apache.org/foundation/press/kit/">Brand Guidelines</a></li>
       <li><a href="https://www.apache.org/logos/">Project Logos</a></li>
      </ul>
     </div>
     <div class="col-sm-2">
      <h5 class="white" id="about">About</h5>
      <ul class="list-unstyled white" role="menu">
       <li><a href="https://www.apache.org/foundation/">About</a></li>
       <li><a href="https://www.apache.org/foundation/sponsors">Our Sponsors</a></li>
       <li><a href="https://www.apache.org/foundation/sponsorship">Corporate Sponsorship</a></li>
       <li><a href="https://www.apache.org/foundation/individual-supporters">Individual Supporters</a></li>
       <li><a href="https://www.apache.org/foundation/leadership">Leadership</a></li>
       <li><a href="https://www.apache.org/foundation/members">Members</a></li>
       <li><a href="https://diversity.apache.org/" target="_blank">Diversity &amp; Inclusion</a></li>
       <li><a href="https://www.apache.org/press/">Newsroom</a></li>
       <li><a href="https://www.apache.org/foundation/contact">Contact</a></li>
       <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy Policy</a></li>
      </ul>
     </div>
    </div>
    <hr class="col-lg-12 hr-white">
    <div class="row">
     <div class="col-lg-12">
      <p class="text-center">Copyright © 2023 The Apache Software Foundation, Licensed under the <a class="white" href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
      <p class="text-center">Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
     </div>
    </div>
   </div>
  </footer> <!-- / Footer -->
  <script src="/js/jquery.min.js"></script>
  <script src="/js/bootstrap.js"></script>
  <script src="/js/slideshow.js"></script>
  <script>
    (function($){
      $(document).ready(function(){
        $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
          event.preventDefault();
          event.stopPropagation();
          $(this).parent().siblings().removeClass('open');
          $(this).parent().toggleClass('open');
          console.log('WOrked');
        });
      });
    })(jQuery);
  </script>
 </section>
</section>        </main>
        <div class="d-none d-sm-none d-md-none d-lg-none d-xl-block col-xl-2">
            <div id="m-toc-sidebar" class="d-print-none m-toc-sidebar-enabled m-toc-sidebar-expanded m-toc-sidebar-autoexpandable toc-sidebar-fixed">
                <nav id="m-toc-sidebar-nav flex-column">
                <ul class="m-nav--sidebar nav flex-column flex-nowrap">
    <li class="h1">
        <a class="nav-link" href="#overview1" title="Overview">Overview</a>
    </li>
        <li class="h1">
        <a class="nav-link" href="#project-licenses" title="Project Licenses">Project Licenses</a>
    </li>
    <li class="h2">
        <a class="nav-link" href="#the-apache-software-license-version-20" title="The Apache Software License, Version 2.0">The Apache Software License, Version 2.0</a>
    </li>
        <li class="h1">
        <a class="nav-link" href="#apache-license-version-201" title="Apache License, Version 2.0¶">Apache License, Version 2.0¶</a>
    </li>
    <li class="h2">
        <a class="nav-link" href="#how-to-apply-the-apache-license-to-your-work" title="How to apply the Apache License to your work¶">How to apply the Apache License to your work¶</a>
    </li>
    <ul class="nav flex-column flex-nowrap nav-collapsible">
            <li class="h5">
        <a class="nav-link" href="#community" title="Community">Community</a>
    </li>
    <li class="h5">
        <a class="nav-link" href="#projects" title="Projects">Projects</a>
    </li>
    <li class="h5">
        <a class="nav-link" href="#downloads" title="Downloads">Downloads</a>
    </li>
    <li class="h5">
        <a class="nav-link" href="#learn" title="Learn">Learn</a>
    </li>
    <li class="h5">
        <a class="nav-link" href="#resources--tools" title="Resources & Tools">Resources & Tools</a>
    </li>
    <li class="h5">
        <a class="nav-link" href="#about" title="About">About</a>
    </li>
    </ul>
                    </ul>
                </nav>
           </div>
        </div>
    </div> <!-- row: end -->
</div> <!-- .main-body: end -->
    <div id="m_scrolltop" class="m-scrolltop">
		<i class="fa fa-arrow-up"></i>
    </div>
  <!-- Footer -->
<footer class="footer-light bg-light">
    <div class="container">
        <div class="row">
                        <div class="col bottom-nav">
                <ul class="nav flex-column nav-list">
                    <li class="nav-header">
Parent Project
                    </li>
                    <li class="nav-item "><a  href="../index.html"  title="Openmeetings"  class="nav-link" >Openmeetings</a></li>
                </ul>
            </div>
            <div class="col bottom-nav">
                <ul class="nav flex-column nav-list">
                    <li class="nav-header">
Project
                    </li>
                    <li class="nav-item "><a  href="index.html"  title="About"  class="nav-link" >About</a></li>
                    <li class="nav-item "><a  href="project-info.html"  title="Info"  class="nav-link" >Info</a></li>
                    <li class="nav-item "><a  href="summary.html"  title="Summary"  class="nav-link" >Summary</a></li>
                    <li class="nav-item "><a  href="https://www.apache.org/licenses/"  title="License"   class="externalLink nav-link" >License</a></li>
                    <li class="nav-item "><a  href="dependencies.html"  title="Dependencies"  class="nav-link" >Dependencies</a></li>
                    <li class="nav-item "><a  href="dependency-convergence.html"  title="Dependency Convergence"  class="nav-link" >Dependency Convergence</a></li>
                    <li class="nav-item "><a  href="rat-report.html"  title="RAT Report"  class="nav-link" >RAT Report</a></li>
                </ul>
            </div>
        </div> <!-- END: .row -->
    </div> <!-- END: .container -->
</footer>
  <div class="container subfooter text-center">
    <div class="row">
      <div class="col-md-12">
        <p class="copyright">Copyright &copy;2012-2023
                 <a href="https://apache.org">Apache Software Foundation</a>
. All Rights Reserved.</p>
      </div>
    </div>
  </div>

  <!-- Le javascript
  ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
    <script src="../js/jquery.min.js" crossorigin="anonymous"></script>
    <script src="../js/popper.min.js"></script>
    <script src="../js/bootstrap.min.js" ></script>

  <script src="../js/lightbox.min.js" crossorigin="anonymous"></script>
            	<script src="../js/highlight.min.js" crossorigin="anonymous"></script>
                    
<script src="https://www.apachecon.com/event-images/snippet.js"></script>        
<script src="../js/site.js" type="text/javascript"></script>        
<div class="text-center">Apache OpenMeetings, OpenMeetings, Apache, the Apache feather, and the Apache OpenMeetings project logo</div>        
<div class="text-center">are trademarks of the Apache Software Foundation.</div>        
<div class="text-center">
  <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a>
</div>  <script src="../js/reflow-skin.js"></script>
    <script src="../js/anchor.min.js"></script>
    </body>
</html>
