<!--
   ====================================================================
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you 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.
   ====================================================================

   This software consists of voluntary contributions made by many
   individuals on behalf of the Apache Software Foundation.  For more
   information on the Apache Software Foundation, please see
   <http://www.apache.org/>.
 -->
<assembly>
    <id>bin</id>
    <formats>
        <format>tar.gz</format>
        <format>zip</format>
    </formats>
    <moduleSets>
      <moduleSet>
        <excludes>
          <exclude>org.apache.httpcomponents:httpasyncclient-osgi</exclude>
        </excludes>
        <binaries>
          <outputDirectory>lib</outputDirectory>
          <unpack>false</unpack>
          <dependencySets>
            <dependencySet>
            </dependencySet>
          </dependencySets>
        </binaries>
      </moduleSet>
    </moduleSets>
    <fileSets>
        <fileSet>
          <directory></directory>
          <outputDirectory></outputDirectory>
          <includes>
            <include>README.txt</include>
            <include>LICENSE.txt</include>
            <include>NOTICE.txt</include>
            <include>RELEASE_NOTES.txt</include>
          </includes>
        </fileSet>
        <!-- Javadocs -->
        <fileSet>
          <directory>target/site/apidocs</directory>
          <outputDirectory>javadoc</outputDirectory>
        </fileSet>
        <!-- Examples -->
        <fileSet>
          <directory>httpasyncclient/src/examples/</directory>
          <outputDirectory>examples</outputDirectory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
    </fileSets>
</assembly>
