Browse Source

added compser vendors for mailgun librarie

Bachir Soussi Chiadmi 7 years ago
parent
commit
31409daed2
100 changed files with 12037 additions and 1 deletions
  1. 0 1
      sites/all/libraries/mailgun/.gitignore
  2. 7 0
      sites/all/libraries/mailgun/vendor/autoload.php
  3. 1 0
      sites/all/libraries/mailgun/vendor/bin/phpunit
  4. 413 0
      sites/all/libraries/mailgun/vendor/composer/ClassLoader.php
  5. 21 0
      sites/all/libraries/mailgun/vendor/composer/LICENSE
  6. 355 0
      sites/all/libraries/mailgun/vendor/composer/autoload_classmap.php
  7. 13 0
      sites/all/libraries/mailgun/vendor/composer/autoload_namespaces.php
  8. 11 0
      sites/all/libraries/mailgun/vendor/composer/autoload_psr4.php
  9. 56 0
      sites/all/libraries/mailgun/vendor/composer/autoload_real.php
  10. 412 0
      sites/all/libraries/mailgun/vendor/composer/autoload_static.php
  11. 14 0
      sites/all/libraries/mailgun/vendor/composer/include_paths.php
  12. 592 0
      sites/all/libraries/mailgun/vendor/composer/installed.json
  13. 27 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/.gitignore
  14. 17 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/.travis.yml
  15. 751 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/CHANGELOG.md
  16. 19 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/LICENSE
  17. 57 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/README.md
  18. 537 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/UPGRADING.md
  19. 45 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/build.xml
  20. 82 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/composer.json
  21. 153 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/Makefile
  22. 155 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_downloads/guzzle-schema-1.0.json
  23. BIN
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/guzzle-icon.png
  24. 122 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/homepage.css
  25. BIN
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/logo.png
  26. 41 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.css
  27. 1 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.js
  28. 106 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/index.html
  29. 0 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/leftbar.html
  30. 5 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/nav_links.html
  31. 183 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/batching/batching.rst
  32. 94 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/conf.py
  33. 73 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/docs.rst
  34. 29 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/faq.rst
  35. 154 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/installation.rst
  36. 85 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/overview.rst
  37. 569 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/client.rst
  38. 151 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/entity-bodies.rst
  39. 99 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/http-redirects.rst
  40. 667 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/request.rst
  41. 141 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/response.rst
  42. 52 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/uri-templates.rst
  43. 5 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/index.rst
  44. 97 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst
  45. 149 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/resource-iterators.rst
  46. 18 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/async-plugin.rst
  47. 22 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/backoff-plugin.rst
  48. 169 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cache-plugin.rst
  49. 33 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cookie-plugin.rst
  50. 93 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/creating-plugins.rst
  51. 32 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/curl-auth-plugin.rst
  52. 24 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/history-plugin.rst
  53. 69 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/log-plugin.rst
  54. 29 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst
  55. 27 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst
  56. 30 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/oauth-plugin.rst
  57. 9 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-list.rst.inc
  58. 59 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-overview.rst
  59. 2 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/requirements.txt
  60. 201 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/testing/unit-testing.rst
  61. 619 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/guzzle-service-descriptions.rst
  62. 316 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/using-the-service-builder.rst
  63. 659 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/webservice-client.rst
  64. 16 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phar-stub.php
  65. 16 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/build.properties.dist
  66. 33 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/dependencies.xml
  67. 142 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/deploy.xml
  68. 152 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/ComposerLintTask.php
  69. 338 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzlePearPharPackageTask.php
  70. 385 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzleSubSplitTask.php
  71. 48 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/phpunit.xml.dist
  72. 66 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php
  73. 92 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php
  74. 199 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php
  75. 39 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php
  76. 40 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php
  77. 75 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php
  78. 18 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php
  79. 32 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchInterface.php
  80. 65 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchRequestTransfer.php
  81. 47 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php
  82. 16 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php
  83. 90 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Exception/BatchTransferException.php
  84. 50 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php
  85. 60 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php
  86. 39 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php
  87. 38 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php
  88. 31 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json
  89. 21 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php
  90. 117 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php
  91. 55 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php
  92. 57 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/ClosureCacheAdapter.php
  93. 41 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php
  94. 31 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php
  95. 44 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php
  96. 41 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php
  97. 27 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json
  98. 49 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php
  99. 403 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php
  100. 52 0
      sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php

+ 0 - 1
sites/all/libraries/mailgun/.gitignore

@@ -1,5 +1,4 @@
 .DS_Store
-vendor
 composer.phar
 smoketest.php
 rackspace_logo.jpg

+ 7 - 0
sites/all/libraries/mailgun/vendor/autoload.php

@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5::getLoader();

+ 1 - 0
sites/all/libraries/mailgun/vendor/bin/phpunit

@@ -0,0 +1 @@
+../phpunit/phpunit/composer/bin/phpunit

+ 413 - 0
sites/all/libraries/mailgun/vendor/composer/ClassLoader.php

@@ -0,0 +1,413 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+
+    private $classMapAuthoritative = false;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+        if ('\\' == $class[0]) {
+            $class = substr($class, 1);
+        }
+
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative) {
+            return false;
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if ($file === null && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if ($file === null) {
+            // Remember that this class does not exist.
+            return $this->classMap[$class] = false;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}

+ 21 - 0
sites/all/libraries/mailgun/vendor/composer/LICENSE

@@ -0,0 +1,21 @@
+
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+

+ 355 - 0
sites/all/libraries/mailgun/vendor/composer/autoload_classmap.php

@@ -0,0 +1,355 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
+    'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
+    'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
+    'PHPUnit_Extensions_GroupTestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
+    'PHPUnit_Extensions_PhptTestCase' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
+    'PHPUnit_Extensions_PhptTestCase_Logger' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
+    'PHPUnit_Extensions_PhptTestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
+    'PHPUnit_Extensions_RepeatedTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
+    'PHPUnit_Extensions_TestDecorator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
+    'PHPUnit_Extensions_TicketListener' => $vendorDir . '/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
+    'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Assert.php',
+    'PHPUnit_Framework_AssertionFailedError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
+    'PHPUnit_Framework_Comparator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
+    'PHPUnit_Framework_ComparatorFactory' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
+    'PHPUnit_Framework_Comparator_Array' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
+    'PHPUnit_Framework_Comparator_DOMDocument' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
+    'PHPUnit_Framework_Comparator_Double' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
+    'PHPUnit_Framework_Comparator_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
+    'PHPUnit_Framework_Comparator_MockObject' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
+    'PHPUnit_Framework_Comparator_Numeric' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
+    'PHPUnit_Framework_Comparator_Object' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
+    'PHPUnit_Framework_Comparator_Resource' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
+    'PHPUnit_Framework_Comparator_Scalar' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
+    'PHPUnit_Framework_Comparator_SplObjectStorage' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
+    'PHPUnit_Framework_Comparator_Type' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
+    'PHPUnit_Framework_ComparisonFailure' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
+    'PHPUnit_Framework_Constraint' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
+    'PHPUnit_Framework_Constraint_And' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
+    'PHPUnit_Framework_Constraint_ArrayHasKey' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
+    'PHPUnit_Framework_Constraint_Attribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
+    'PHPUnit_Framework_Constraint_Callback' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
+    'PHPUnit_Framework_Constraint_ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
+    'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
+    'PHPUnit_Framework_Constraint_Composite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
+    'PHPUnit_Framework_Constraint_Count' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
+    'PHPUnit_Framework_Constraint_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
+    'PHPUnit_Framework_Constraint_ExceptionCode' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
+    'PHPUnit_Framework_Constraint_ExceptionMessage' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
+    'PHPUnit_Framework_Constraint_FileExists' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
+    'PHPUnit_Framework_Constraint_GreaterThan' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
+    'PHPUnit_Framework_Constraint_IsAnything' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
+    'PHPUnit_Framework_Constraint_IsEmpty' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
+    'PHPUnit_Framework_Constraint_IsEqual' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
+    'PHPUnit_Framework_Constraint_IsFalse' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
+    'PHPUnit_Framework_Constraint_IsIdentical' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
+    'PHPUnit_Framework_Constraint_IsInstanceOf' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
+    'PHPUnit_Framework_Constraint_IsJson' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsJson.php',
+    'PHPUnit_Framework_Constraint_IsNull' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
+    'PHPUnit_Framework_Constraint_IsTrue' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
+    'PHPUnit_Framework_Constraint_IsType' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
+    'PHPUnit_Framework_Constraint_JsonMatches' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
+    'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
+    'PHPUnit_Framework_Constraint_LessThan' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
+    'PHPUnit_Framework_Constraint_Not' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
+    'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
+    'PHPUnit_Framework_Constraint_Or' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
+    'PHPUnit_Framework_Constraint_PCREMatch' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
+    'PHPUnit_Framework_Constraint_SameSize' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
+    'PHPUnit_Framework_Constraint_StringContains' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
+    'PHPUnit_Framework_Constraint_StringEndsWith' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
+    'PHPUnit_Framework_Constraint_StringMatches' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
+    'PHPUnit_Framework_Constraint_StringStartsWith' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
+    'PHPUnit_Framework_Constraint_TraversableContains' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
+    'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
+    'PHPUnit_Framework_Constraint_Xor' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
+    'PHPUnit_Framework_Error' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error.php',
+    'PHPUnit_Framework_Error_Deprecated' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
+    'PHPUnit_Framework_Error_Notice' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
+    'PHPUnit_Framework_Error_Warning' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
+    'PHPUnit_Framework_Exception' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Exception.php',
+    'PHPUnit_Framework_ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
+    'PHPUnit_Framework_IncompleteTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
+    'PHPUnit_Framework_IncompleteTestError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
+    'PHPUnit_Framework_MockObject_Builder_Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
+    'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
+    'PHPUnit_Framework_MockObject_Builder_Match' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
+    'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
+    'PHPUnit_Framework_MockObject_Builder_Namespace' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
+    'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
+    'PHPUnit_Framework_MockObject_Builder_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
+    'PHPUnit_Framework_MockObject_Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
+    'PHPUnit_Framework_MockObject_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
+    'PHPUnit_Framework_MockObject_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
+    'PHPUnit_Framework_MockObject_Invocation_Object' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
+    'PHPUnit_Framework_MockObject_Invocation_Static' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
+    'PHPUnit_Framework_MockObject_Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
+    'PHPUnit_Framework_MockObject_Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
+    'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
+    'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
+    'PHPUnit_Framework_MockObject_Matcher_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
+    'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
+    'PHPUnit_Framework_MockObject_Matcher_MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
+    'PHPUnit_Framework_MockObject_Matcher_Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
+    'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
+    'PHPUnit_Framework_MockObject_MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
+    'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
+    'PHPUnit_Framework_MockObject_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
+    'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
+    'PHPUnit_Framework_MockObject_Stub_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
+    'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
+    'PHPUnit_Framework_MockObject_Stub_Return' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
+    'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
+    'PHPUnit_Framework_MockObject_Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
+    'PHPUnit_Framework_OutputError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
+    'PHPUnit_Framework_SelfDescribing' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
+    'PHPUnit_Framework_SkippedTest' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
+    'PHPUnit_Framework_SkippedTestError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
+    'PHPUnit_Framework_SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
+    'PHPUnit_Framework_SyntheticError' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
+    'PHPUnit_Framework_Test' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Test.php',
+    'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
+    'PHPUnit_Framework_TestFailure' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
+    'PHPUnit_Framework_TestListener' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
+    'PHPUnit_Framework_TestResult' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
+    'PHPUnit_Framework_TestSuite' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
+    'PHPUnit_Framework_TestSuite_DataProvider' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
+    'PHPUnit_Framework_Warning' => $vendorDir . '/phpunit/phpunit/PHPUnit/Framework/Warning.php',
+    'PHPUnit_Runner_BaseTestRunner' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
+    'PHPUnit_Runner_StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
+    'PHPUnit_Runner_TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
+    'PHPUnit_Runner_Version' => $vendorDir . '/phpunit/phpunit/PHPUnit/Runner/Version.php',
+    'PHPUnit_TextUI_Command' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/Command.php',
+    'PHPUnit_TextUI_ResultPrinter' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
+    'PHPUnit_TextUI_TestRunner' => $vendorDir . '/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
+    'PHPUnit_Util_Class' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Class.php',
+    'PHPUnit_Util_Configuration' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Configuration.php',
+    'PHPUnit_Util_DeprecatedFeature' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
+    'PHPUnit_Util_DeprecatedFeature_Logger' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
+    'PHPUnit_Util_Diff' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Diff.php',
+    'PHPUnit_Util_ErrorHandler' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
+    'PHPUnit_Util_Fileloader' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
+    'PHPUnit_Util_Filesystem' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
+    'PHPUnit_Util_Filter' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Filter.php',
+    'PHPUnit_Util_Getopt' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Getopt.php',
+    'PHPUnit_Util_GlobalState' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
+    'PHPUnit_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
+    'PHPUnit_Util_Log_JSON' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
+    'PHPUnit_Util_Log_JUnit' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
+    'PHPUnit_Util_Log_TAP' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
+    'PHPUnit_Util_PHP' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP.php',
+    'PHPUnit_Util_PHP_Default' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
+    'PHPUnit_Util_PHP_Windows' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
+    'PHPUnit_Util_Printer' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Printer.php',
+    'PHPUnit_Util_String' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/String.php',
+    'PHPUnit_Util_Test' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Test.php',
+    'PHPUnit_Util_TestDox_NamePrettifier' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
+    'PHPUnit_Util_TestDox_ResultPrinter' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
+    'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
+    'PHPUnit_Util_TestDox_ResultPrinter_Text' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
+    'PHPUnit_Util_TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
+    'PHPUnit_Util_Type' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/Type.php',
+    'PHPUnit_Util_XML' => $vendorDir . '/phpunit/phpunit/PHPUnit/Util/XML.php',
+    'PHP_CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage.php',
+    'PHP_CodeCoverage_Driver' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
+    'PHP_CodeCoverage_Driver_Xdebug' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
+    'PHP_CodeCoverage_Exception' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
+    'PHP_CodeCoverage_Filter' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
+    'PHP_CodeCoverage_Report_Clover' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
+    'PHP_CodeCoverage_Report_Factory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
+    'PHP_CodeCoverage_Report_HTML' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
+    'PHP_CodeCoverage_Report_HTML_Renderer_File' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
+    'PHP_CodeCoverage_Report_Node' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
+    'PHP_CodeCoverage_Report_Node_Directory' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
+    'PHP_CodeCoverage_Report_Node_File' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
+    'PHP_CodeCoverage_Report_Node_Iterator' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
+    'PHP_CodeCoverage_Report_PHP' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
+    'PHP_CodeCoverage_Report_Text' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
+    'PHP_CodeCoverage_Util' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
+    'PHP_CodeCoverage_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
+    'PHP_CodeCoverage_Version' => $vendorDir . '/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
+    'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
+    'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/PHP/Token/Stream.php',
+    'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
+    'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/PHP/Token.php',
+    'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
+);

+ 13 - 0
sites/all/libraries/mailgun/vendor/composer/autoload_namespaces.php

@@ -0,0 +1,13 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Mailgun\\Tests' => array($baseDir . '/tests'),
+    'Mailgun' => array($baseDir . '/src'),
+    'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'),
+    'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'),
+);

+ 11 - 0
sites/all/libraries/mailgun/vendor/composer/autoload_psr4.php

@@ -0,0 +1,11 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
+    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+);

+ 56 - 0
sites/all/libraries/mailgun/vendor/composer/autoload_real.php

@@ -0,0 +1,56 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5
+{
+    private static $loader;
+
+    public static function loadClassLoader($class)
+    {
+        if ('Composer\Autoload\ClassLoader' === $class) {
+            require __DIR__ . '/ClassLoader.php';
+        }
+    }
+
+    public static function getLoader()
+    {
+        if (null !== self::$loader) {
+            return self::$loader;
+        }
+
+        spl_autoload_register(array('ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5', 'loadClassLoader'), true, true);
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+        spl_autoload_unregister(array('ComposerAutoloaderInit4ddb0bfe747486746b07c9365ebf26f5', 'loadClassLoader'));
+
+        $includePaths = require __DIR__ . '/include_paths.php';
+        array_push($includePaths, get_include_path());
+        set_include_path(join(PATH_SEPARATOR, $includePaths));
+
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        return $loader;
+    }
+}

+ 412 - 0
sites/all/libraries/mailgun/vendor/composer/autoload_static.php

@@ -0,0 +1,412 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5
+{
+    public static $prefixLengthsPsr4 = array (
+        'S' => 
+        array (
+            'Symfony\\Component\\Yaml\\' => 23,
+            'Symfony\\Component\\EventDispatcher\\' => 34,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'Symfony\\Component\\Yaml\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/yaml',
+        ),
+        'Symfony\\Component\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'M' => 
+        array (
+            'Mailgun\\Tests' => 
+            array (
+                0 => __DIR__ . '/../..' . '/tests',
+            ),
+            'Mailgun' => 
+            array (
+                0 => __DIR__ . '/../..' . '/src',
+            ),
+        ),
+        'G' => 
+        array (
+            'Guzzle\\Tests' => 
+            array (
+                0 => __DIR__ . '/..' . '/guzzle/guzzle/tests',
+            ),
+            'Guzzle' => 
+            array (
+                0 => __DIR__ . '/..' . '/guzzle/guzzle/src',
+            ),
+        ),
+    );
+
+    public static $classMap = array (
+        'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
+        'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
+        'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
+        'PHPUnit_Extensions_GroupTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/GroupTestSuite.php',
+        'PHPUnit_Extensions_PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase.php',
+        'PHPUnit_Extensions_PhptTestCase_Logger' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestCase/Logger.php',
+        'PHPUnit_Extensions_PhptTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/PhptTestSuite.php',
+        'PHPUnit_Extensions_RepeatedTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/RepeatedTest.php',
+        'PHPUnit_Extensions_TestDecorator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/TestDecorator.php',
+        'PHPUnit_Extensions_TicketListener' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Extensions/TicketListener.php',
+        'PHPUnit_Framework_Assert' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Assert.php',
+        'PHPUnit_Framework_AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/AssertionFailedError.php',
+        'PHPUnit_Framework_Comparator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator.php',
+        'PHPUnit_Framework_ComparatorFactory' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ComparatorFactory.php',
+        'PHPUnit_Framework_Comparator_Array' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Array.php',
+        'PHPUnit_Framework_Comparator_DOMDocument' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php',
+        'PHPUnit_Framework_Comparator_Double' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Double.php',
+        'PHPUnit_Framework_Comparator_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Exception.php',
+        'PHPUnit_Framework_Comparator_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/MockObject.php',
+        'PHPUnit_Framework_Comparator_Numeric' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Numeric.php',
+        'PHPUnit_Framework_Comparator_Object' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php',
+        'PHPUnit_Framework_Comparator_Resource' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Resource.php',
+        'PHPUnit_Framework_Comparator_Scalar' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Scalar.php',
+        'PHPUnit_Framework_Comparator_SplObjectStorage' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/SplObjectStorage.php',
+        'PHPUnit_Framework_Comparator_Type' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Comparator/Type.php',
+        'PHPUnit_Framework_ComparisonFailure' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ComparisonFailure.php',
+        'PHPUnit_Framework_Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint.php',
+        'PHPUnit_Framework_Constraint_And' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/And.php',
+        'PHPUnit_Framework_Constraint_ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ArrayHasKey.php',
+        'PHPUnit_Framework_Constraint_Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Attribute.php',
+        'PHPUnit_Framework_Constraint_Callback' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Callback.php',
+        'PHPUnit_Framework_Constraint_ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasAttribute.php',
+        'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php',
+        'PHPUnit_Framework_Constraint_Composite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Composite.php',
+        'PHPUnit_Framework_Constraint_Count' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Count.php',
+        'PHPUnit_Framework_Constraint_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Exception.php',
+        'PHPUnit_Framework_Constraint_ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionCode.php',
+        'PHPUnit_Framework_Constraint_ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ExceptionMessage.php',
+        'PHPUnit_Framework_Constraint_FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/FileExists.php',
+        'PHPUnit_Framework_Constraint_GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/GreaterThan.php',
+        'PHPUnit_Framework_Constraint_IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsAnything.php',
+        'PHPUnit_Framework_Constraint_IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEmpty.php',
+        'PHPUnit_Framework_Constraint_IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsEqual.php',
+        'PHPUnit_Framework_Constraint_IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsFalse.php',
+        'PHPUnit_Framework_Constraint_IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsIdentical.php',
+        'PHPUnit_Framework_Constraint_IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsInstanceOf.php',
+        'PHPUnit_Framework_Constraint_IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsJson.php',
+        'PHPUnit_Framework_Constraint_IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsNull.php',
+        'PHPUnit_Framework_Constraint_IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsTrue.php',
+        'PHPUnit_Framework_Constraint_IsType' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/IsType.php',
+        'PHPUnit_Framework_Constraint_JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches.php',
+        'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php',
+        'PHPUnit_Framework_Constraint_LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/LessThan.php',
+        'PHPUnit_Framework_Constraint_Not' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Not.php',
+        'PHPUnit_Framework_Constraint_ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/ObjectHasAttribute.php',
+        'PHPUnit_Framework_Constraint_Or' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Or.php',
+        'PHPUnit_Framework_Constraint_PCREMatch' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/PCREMatch.php',
+        'PHPUnit_Framework_Constraint_SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/SameSize.php',
+        'PHPUnit_Framework_Constraint_StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringContains.php',
+        'PHPUnit_Framework_Constraint_StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringEndsWith.php',
+        'PHPUnit_Framework_Constraint_StringMatches' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringMatches.php',
+        'PHPUnit_Framework_Constraint_StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/StringStartsWith.php',
+        'PHPUnit_Framework_Constraint_TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContains.php',
+        'PHPUnit_Framework_Constraint_TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/TraversableContainsOnly.php',
+        'PHPUnit_Framework_Constraint_Xor' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Constraint/Xor.php',
+        'PHPUnit_Framework_Error' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error.php',
+        'PHPUnit_Framework_Error_Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Deprecated.php',
+        'PHPUnit_Framework_Error_Notice' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Notice.php',
+        'PHPUnit_Framework_Error_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Error/Warning.php',
+        'PHPUnit_Framework_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Exception.php',
+        'PHPUnit_Framework_ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/ExpectationFailedException.php',
+        'PHPUnit_Framework_IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTest.php',
+        'PHPUnit_Framework_IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/IncompleteTestError.php',
+        'PHPUnit_Framework_MockObject_Builder_Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Identity.php',
+        'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/InvocationMocker.php',
+        'PHPUnit_Framework_MockObject_Builder_Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Match.php',
+        'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/MethodNameMatch.php',
+        'PHPUnit_Framework_MockObject_Builder_Namespace' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Namespace.php',
+        'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/ParametersMatch.php',
+        'PHPUnit_Framework_MockObject_Builder_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Builder/Stub.php',
+        'PHPUnit_Framework_MockObject_Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Generator.php',
+        'PHPUnit_Framework_MockObject_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation.php',
+        'PHPUnit_Framework_MockObject_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/InvocationMocker.php',
+        'PHPUnit_Framework_MockObject_Invocation_Object' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Object.php',
+        'PHPUnit_Framework_MockObject_Invocation_Static' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invocation/Static.php',
+        'PHPUnit_Framework_MockObject_Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Invokable.php',
+        'PHPUnit_Framework_MockObject_Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher.php',
+        'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyInvokedCount.php',
+        'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/AnyParameters.php',
+        'PHPUnit_Framework_MockObject_Matcher_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Invocation.php',
+        'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtIndex.php',
+        'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedAtLeastOnce.php',
+        'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedCount.php',
+        'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/InvokedRecorder.php',
+        'PHPUnit_Framework_MockObject_Matcher_MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/MethodName.php',
+        'PHPUnit_Framework_MockObject_Matcher_Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/Parameters.php',
+        'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Matcher/StatelessInvocation.php',
+        'PHPUnit_Framework_MockObject_MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockBuilder.php',
+        'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/MockObject.php',
+        'PHPUnit_Framework_MockObject_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub.php',
+        'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ConsecutiveCalls.php',
+        'PHPUnit_Framework_MockObject_Stub_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Exception.php',
+        'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/MatcherCollection.php',
+        'PHPUnit_Framework_MockObject_Stub_Return' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/Return.php',
+        'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnArgument.php',
+        'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnCallback.php',
+        'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnSelf.php',
+        'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Stub/ReturnValueMap.php',
+        'PHPUnit_Framework_MockObject_Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/PHPUnit/Framework/MockObject/Verifiable.php',
+        'PHPUnit_Framework_OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/OutputError.php',
+        'PHPUnit_Framework_SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SelfDescribing.php',
+        'PHPUnit_Framework_SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTest.php',
+        'PHPUnit_Framework_SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestError.php',
+        'PHPUnit_Framework_SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SkippedTestSuiteError.php',
+        'PHPUnit_Framework_SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/SyntheticError.php',
+        'PHPUnit_Framework_Test' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Test.php',
+        'PHPUnit_Framework_TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestCase.php',
+        'PHPUnit_Framework_TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestFailure.php',
+        'PHPUnit_Framework_TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestListener.php',
+        'PHPUnit_Framework_TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestResult.php',
+        'PHPUnit_Framework_TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestSuite.php',
+        'PHPUnit_Framework_TestSuite_DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/TestSuite/DataProvider.php',
+        'PHPUnit_Framework_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Framework/Warning.php',
+        'PHPUnit_Runner_BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/BaseTestRunner.php',
+        'PHPUnit_Runner_StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/StandardTestSuiteLoader.php',
+        'PHPUnit_Runner_TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/TestSuiteLoader.php',
+        'PHPUnit_Runner_Version' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Runner/Version.php',
+        'PHPUnit_TextUI_Command' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/Command.php',
+        'PHPUnit_TextUI_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/ResultPrinter.php',
+        'PHPUnit_TextUI_TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php',
+        'PHPUnit_Util_Class' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Class.php',
+        'PHPUnit_Util_Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Configuration.php',
+        'PHPUnit_Util_DeprecatedFeature' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature.php',
+        'PHPUnit_Util_DeprecatedFeature_Logger' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/DeprecatedFeature/Logger.php',
+        'PHPUnit_Util_Diff' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Diff.php',
+        'PHPUnit_Util_ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/ErrorHandler.php',
+        'PHPUnit_Util_Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Fileloader.php',
+        'PHPUnit_Util_Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Filesystem.php',
+        'PHPUnit_Util_Filter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Filter.php',
+        'PHPUnit_Util_Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Getopt.php',
+        'PHPUnit_Util_GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/GlobalState.php',
+        'PHPUnit_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/InvalidArgumentHelper.php',
+        'PHPUnit_Util_Log_JSON' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/JSON.php',
+        'PHPUnit_Util_Log_JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/JUnit.php',
+        'PHPUnit_Util_Log_TAP' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Log/TAP.php',
+        'PHPUnit_Util_PHP' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP.php',
+        'PHPUnit_Util_PHP_Default' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP/Default.php',
+        'PHPUnit_Util_PHP_Windows' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/PHP/Windows.php',
+        'PHPUnit_Util_Printer' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Printer.php',
+        'PHPUnit_Util_String' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/String.php',
+        'PHPUnit_Util_Test' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Test.php',
+        'PHPUnit_Util_TestDox_NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/NamePrettifier.php',
+        'PHPUnit_Util_TestDox_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter.php',
+        'PHPUnit_Util_TestDox_ResultPrinter_HTML' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/HTML.php',
+        'PHPUnit_Util_TestDox_ResultPrinter_Text' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestDox/ResultPrinter/Text.php',
+        'PHPUnit_Util_TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/TestSuiteIterator.php',
+        'PHPUnit_Util_Type' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/Type.php',
+        'PHPUnit_Util_XML' => __DIR__ . '/..' . '/phpunit/phpunit/PHPUnit/Util/XML.php',
+        'PHP_CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage.php',
+        'PHP_CodeCoverage_Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver.php',
+        'PHP_CodeCoverage_Driver_Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Driver/Xdebug.php',
+        'PHP_CodeCoverage_Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Exception.php',
+        'PHP_CodeCoverage_Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Filter.php',
+        'PHP_CodeCoverage_Report_Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Clover.php',
+        'PHP_CodeCoverage_Report_Factory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Factory.php',
+        'PHP_CodeCoverage_Report_HTML' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML.php',
+        'PHP_CodeCoverage_Report_HTML_Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer.php',
+        'PHP_CodeCoverage_Report_HTML_Renderer_Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Dashboard.php',
+        'PHP_CodeCoverage_Report_HTML_Renderer_Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/Directory.php',
+        'PHP_CodeCoverage_Report_HTML_Renderer_File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/HTML/Renderer/File.php',
+        'PHP_CodeCoverage_Report_Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node.php',
+        'PHP_CodeCoverage_Report_Node_Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Directory.php',
+        'PHP_CodeCoverage_Report_Node_File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/File.php',
+        'PHP_CodeCoverage_Report_Node_Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Node/Iterator.php',
+        'PHP_CodeCoverage_Report_PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/PHP.php',
+        'PHP_CodeCoverage_Report_Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Report/Text.php',
+        'PHP_CodeCoverage_Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util.php',
+        'PHP_CodeCoverage_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Util/InvalidArgumentHelper.php',
+        'PHP_CodeCoverage_Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/PHP/CodeCoverage/Version.php',
+        'PHP_Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php',
+        'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token/Stream.php',
+        'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token/Stream/CachingFactory.php',
+        'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/PHP/Token.php',
+        'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$prefixesPsr0;
+            $loader->classMap = ComposerStaticInit4ddb0bfe747486746b07c9365ebf26f5::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}

+ 14 - 0
sites/all/libraries/mailgun/vendor/composer/include_paths.php

@@ -0,0 +1,14 @@
+<?php
+
+// include_paths.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+    $vendorDir . '/phpunit/phpunit-mock-objects',
+    $vendorDir . '/phpunit/php-token-stream',
+    $vendorDir . '/phpunit/php-code-coverage',
+    $vendorDir . '/phpunit/phpunit',
+    $vendorDir . '/symfony/yaml',
+);

+ 592 - 0
sites/all/libraries/mailgun/vendor/composer/installed.json

@@ -0,0 +1,592 @@
+[
+    {
+        "name": "symfony/event-dispatcher",
+        "version": "v2.8.8",
+        "version_normalized": "2.8.8.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/event-dispatcher.git",
+            "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b180b70439dca70049b6b9b7e21d75e6e5d7aca9",
+            "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.9"
+        },
+        "require-dev": {
+            "psr/log": "~1.0",
+            "symfony/config": "~2.0,>=2.0.5|~3.0.0",
+            "symfony/dependency-injection": "~2.6|~3.0.0",
+            "symfony/expression-language": "~2.6|~3.0.0",
+            "symfony/stopwatch": "~2.3|~3.0.0"
+        },
+        "suggest": {
+            "symfony/dependency-injection": "",
+            "symfony/http-kernel": ""
+        },
+        "time": "2016-06-29 05:29:29",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.8-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Component\\EventDispatcher\\": ""
+            },
+            "exclude-from-classmap": [
+                "/Tests/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony EventDispatcher Component",
+        "homepage": "https://symfony.com"
+    },
+    {
+        "name": "guzzle/guzzle",
+        "version": "v3.9.3",
+        "version_normalized": "3.9.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle3.git",
+            "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
+            "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
+            "shasum": ""
+        },
+        "require": {
+            "ext-curl": "*",
+            "php": ">=5.3.3",
+            "symfony/event-dispatcher": "~2.1"
+        },
+        "replace": {
+            "guzzle/batch": "self.version",
+            "guzzle/cache": "self.version",
+            "guzzle/common": "self.version",
+            "guzzle/http": "self.version",
+            "guzzle/inflection": "self.version",
+            "guzzle/iterator": "self.version",
+            "guzzle/log": "self.version",
+            "guzzle/parser": "self.version",
+            "guzzle/plugin": "self.version",
+            "guzzle/plugin-async": "self.version",
+            "guzzle/plugin-backoff": "self.version",
+            "guzzle/plugin-cache": "self.version",
+            "guzzle/plugin-cookie": "self.version",
+            "guzzle/plugin-curlauth": "self.version",
+            "guzzle/plugin-error-response": "self.version",
+            "guzzle/plugin-history": "self.version",
+            "guzzle/plugin-log": "self.version",
+            "guzzle/plugin-md5": "self.version",
+            "guzzle/plugin-mock": "self.version",
+            "guzzle/plugin-oauth": "self.version",
+            "guzzle/service": "self.version",
+            "guzzle/stream": "self.version"
+        },
+        "require-dev": {
+            "doctrine/cache": "~1.3",
+            "monolog/monolog": "~1.0",
+            "phpunit/phpunit": "3.7.*",
+            "psr/log": "~1.0",
+            "symfony/class-loader": "~2.1",
+            "zendframework/zend-cache": "2.*,<2.3",
+            "zendframework/zend-log": "2.*,<2.3"
+        },
+        "suggest": {
+            "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
+        },
+        "time": "2015-03-18 18:23:50",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.9-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Guzzle": "src/",
+                "Guzzle\\Tests": "tests/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            },
+            {
+                "name": "Guzzle Community",
+                "homepage": "https://github.com/guzzle/guzzle/contributors"
+            }
+        ],
+        "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "client",
+            "curl",
+            "framework",
+            "http",
+            "http client",
+            "rest",
+            "web service"
+        ],
+        "abandoned": "guzzlehttp/guzzle"
+    },
+    {
+        "name": "symfony/yaml",
+        "version": "v2.8.8",
+        "version_normalized": "2.8.8.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/yaml.git",
+            "reference": "dba4bb5846798cd12f32e2d8f3f35d77045773c8"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/yaml/zipball/dba4bb5846798cd12f32e2d8f3f35d77045773c8",
+            "reference": "dba4bb5846798cd12f32e2d8f3f35d77045773c8",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.9"
+        },
+        "time": "2016-06-29 05:29:29",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.8-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Component\\Yaml\\": ""
+            },
+            "exclude-from-classmap": [
+                "/Tests/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony Yaml Component",
+        "homepage": "https://symfony.com"
+    },
+    {
+        "name": "phpunit/php-text-template",
+        "version": "1.2.1",
+        "version_normalized": "1.2.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/php-text-template.git",
+            "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+            "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-06-21 13:50:34",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "src/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
+            }
+        ],
+        "description": "Simple template engine.",
+        "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+        "keywords": [
+            "template"
+        ]
+    },
+    {
+        "name": "phpunit/phpunit-mock-objects",
+        "version": "1.2.3",
+        "version_normalized": "1.2.3.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+            "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+            "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "phpunit/php-text-template": ">=1.1.1@stable"
+        },
+        "suggest": {
+            "ext-soap": "*"
+        },
+        "time": "2013-01-13 10:24:48",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "PHPUnit/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "Mock Object library for PHPUnit",
+        "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+        "keywords": [
+            "mock",
+            "xunit"
+        ]
+    },
+    {
+        "name": "phpunit/php-timer",
+        "version": "1.0.8",
+        "version_normalized": "1.0.8.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/php-timer.git",
+            "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
+            "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4|~5"
+        },
+        "time": "2016-05-12 18:03:57",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "src/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "Utility class for timing",
+        "homepage": "https://github.com/sebastianbergmann/php-timer/",
+        "keywords": [
+            "timer"
+        ]
+    },
+    {
+        "name": "phpunit/php-file-iterator",
+        "version": "1.4.1",
+        "version_normalized": "1.4.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+            "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+            "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2015-06-21 13:08:43",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.4.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "src/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+        "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+        "keywords": [
+            "filesystem",
+            "iterator"
+        ]
+    },
+    {
+        "name": "phpunit/php-token-stream",
+        "version": "1.2.2",
+        "version_normalized": "1.2.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+            "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32",
+            "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32",
+            "shasum": ""
+        },
+        "require": {
+            "ext-tokenizer": "*",
+            "php": ">=5.3.3"
+        },
+        "time": "2014-03-03 05:10:30",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "PHP/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "Wrapper around PHP's tokenizer extension.",
+        "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+        "keywords": [
+            "tokenizer"
+        ]
+    },
+    {
+        "name": "phpunit/php-code-coverage",
+        "version": "1.2.18",
+        "version_normalized": "1.2.18.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+            "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
+            "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "phpunit/php-file-iterator": ">=1.3.0@stable",
+            "phpunit/php-text-template": ">=1.2.0@stable",
+            "phpunit/php-token-stream": ">=1.1.3,<1.3.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "3.7.*@dev"
+        },
+        "suggest": {
+            "ext-dom": "*",
+            "ext-xdebug": ">=2.0.5"
+        },
+        "time": "2014-09-02 10:13:14",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "PHP/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            ""
+        ],
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sb@sebastian-bergmann.de",
+                "role": "lead"
+            }
+        ],
+        "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+        "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+        "keywords": [
+            "coverage",
+            "testing",
+            "xunit"
+        ]
+    },
+    {
+        "name": "phpunit/phpunit",
+        "version": "3.7.38",
+        "version_normalized": "3.7.38.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/sebastianbergmann/phpunit.git",
+            "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38709dc22d519a3d1be46849868aa2ddf822bcf6",
+            "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6",
+            "shasum": ""
+        },
+        "require": {
+            "ext-ctype": "*",
+            "ext-dom": "*",
+            "ext-json": "*",
+            "ext-pcre": "*",
+            "ext-reflection": "*",
+            "ext-spl": "*",
+            "php": ">=5.3.3",
+            "phpunit/php-code-coverage": "~1.2",
+            "phpunit/php-file-iterator": "~1.3",
+            "phpunit/php-text-template": "~1.1",
+            "phpunit/php-timer": "~1.0",
+            "phpunit/phpunit-mock-objects": "~1.2",
+            "symfony/yaml": "~2.0"
+        },
+        "require-dev": {
+            "pear-pear.php.net/pear": "1.9.4"
+        },
+        "suggest": {
+            "phpunit/php-invoker": "~1.1"
+        },
+        "time": "2014-10-17 09:04:17",
+        "bin": [
+            "composer/bin/phpunit"
+        ],
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "3.7.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "PHPUnit/"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "include-path": [
+            "",
+            "../../symfony/yaml/"
+        ],
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "authors": [
+            {
+                "name": "Sebastian Bergmann",
+                "email": "sebastian@phpunit.de",
+                "role": "lead"
+            }
+        ],
+        "description": "The PHP Unit Testing framework.",
+        "homepage": "http://www.phpunit.de/",
+        "keywords": [
+            "phpunit",
+            "testing",
+            "xunit"
+        ]
+    }
+]

+ 27 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/.gitignore

@@ -0,0 +1,27 @@
+# Ingore common cruft
+.DS_STORE
+coverage
+.idea
+
+# Ignore binary files
+guzzle.phar
+guzzle-min.phar
+
+# Ignore potentially sensitive phpunit file
+phpunit.xml
+
+# Ignore composer generated files
+composer.phar
+composer.lock
+composer-test.lock
+vendor/
+
+# Ignore build files
+build/
+phing/build.properties
+
+# Ignore subsplit working directory
+.subsplit
+
+docs/_build
+docs/*.pyc

+ 17 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/.travis.yml

@@ -0,0 +1,17 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+before_script:
+  - curl --version
+  - pecl install uri_template-beta || echo "pecl uri_template not available"
+  - composer self-update
+  - composer install --no-interaction --prefer-source --dev
+  - ~/.nvm/nvm.sh install v0.6.14
+
+script: composer test

+ 751 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/CHANGELOG.md

@@ -0,0 +1,751 @@
+# CHANGELOG
+
+## 3.9.3 - 2015-03-18
+
+* Ensuring Content-Length is not stripped from a request when it is `0`.
+* Added more information to stream wrapper exceptions.
+* Message parser will no longer throw warnings for malformed messages.
+* Giving a valid cache TTL when max-age is 0.
+
+## 3.9.2 - 2014-09-10
+
+* Retrying "Connection died, retrying a fresh connect" curl errors.
+* Automatically extracting the cacert from the phar in client constructor.
+* Added EntityBody support for OPTIONS requests.
+
+## 3.9.1 - 2014-05-07
+
+* Added a fix to ReadLimitEntityBody to ensure it doesn't infinitely loop.
+* Added a fix to the stream checksum function so that when the first read
+  returns a falsey value, it still continues to consume the stream until EOF.
+
+## 3.9.0 - 2014-04-23
+
+* `null`, `false`, and `"_guzzle_blank_"` all now serialize as an empty value
+  with no trailing "=". See dc1d824277.
+* No longer performing an MD5 check on the cacert each time the phar is used,
+  but rather copying the cacert to the temp directory.
+* `"0"` can now be added as a URL path
+* Deleting cookies that are set to empty
+* If-Modified-Since is no longer unnecessarily added to the CachePlugin
+* Cookie path matching now follows RFC 6265 s5.1.4
+* Updated service descriptions are now added to a service client's composite
+  factory.
+* MockPlugin now throws an exception if the queue is empty.
+* Properly parsing URLs that start with "http" but are not absolute
+* Added the ability to configure the curl_multi_select timeout setting
+* OAuth parameters are now sorted using lexicographical byte value ordering
+* Fixing invalid usage of an out of range PHP feature in the ErrorResponsePlugin
+
+## 3.8.1 -2014-01-28
+
+* Bug: Always using GET requests when redirecting from a 303 response
+* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
+  `Guzzle\Http\ClientInterface::setSslVerification()`
+* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
+* Bug: The body of a request can now be set to `"0"`
+* Sending PHP stream requests no longer forces `HTTP/1.0`
+* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
+  each sub-exception
+* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
+  clobbering everything).
+* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
+* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
+  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
+* Now properly escaping the regular expression delimiter when matching Cookie domains.
+* Network access is now disabled when loading XML documents
+
+## 3.8.0 - 2013-12-05
+
+* Added the ability to define a POST name for a file
+* JSON response parsing now properly walks additionalProperties
+* cURL error code 18 is now retried automatically in the BackoffPlugin
+* Fixed a cURL error when URLs contain fragments
+* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
+  CurlExceptions
+* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
+* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
+* Fixed a bug that was encountered when parsing empty header parameters
+* UriTemplate now has a `setRegex()` method to match the docs
+* The `debug` request parameter now checks if it is truthy rather than if it exists
+* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
+* Added the ability to combine URLs using strict RFC 3986 compliance
+* Command objects can now return the validation errors encountered by the command
+* Various fixes to cache revalidation (#437 and 29797e5)
+* Various fixes to the AsyncPlugin
+* Cleaned up build scripts
+
+## 3.7.4 - 2013-10-02
+
+* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
+* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
+  (see https://github.com/aws/aws-sdk-php/issues/147)
+* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
+* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
+* Updated the bundled cacert.pem (#419)
+* OauthPlugin now supports adding authentication to headers or query string (#425)
+
+## 3.7.3 - 2013-09-08
+
+* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
+  `CommandTransferException`.
+* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
+* Schemas are only injected into response models when explicitly configured.
+* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
+  an EntityBody.
+* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
+* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
+* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
+* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
+* Bug fix: Visiting XML attributes first before visting XML children when serializing requests
+* Bug fix: Properly parsing headers that contain commas contained in quotes
+* Bug fix: mimetype guessing based on a filename is now case-insensitive
+
+## 3.7.2 - 2013-08-02
+
+* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
+  See https://github.com/guzzle/guzzle/issues/371
+* Bug fix: Cookie domains are now matched correctly according to RFC 6265
+  See https://github.com/guzzle/guzzle/issues/377
+* Bug fix: GET parameters are now used when calculating an OAuth signature
+* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
+* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
+* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
+  See https://github.com/guzzle/guzzle/issues/379
+* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
+  https://github.com/guzzle/guzzle/pull/380
+* cURL multi cleanup and optimizations
+
+## 3.7.1 - 2013-07-05
+
+* Bug fix: Setting default options on a client now works
+* Bug fix: Setting options on HEAD requests now works. See #352
+* Bug fix: Moving stream factory before send event to before building the stream. See #353
+* Bug fix: Cookies no longer match on IP addresses per RFC 6265
+* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
+* Added `cert` and `ssl_key` as request options
+* `Host` header can now diverge from the host part of a URL if the header is set manually
+* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
+* OAuth parameters are only added via the plugin if they aren't already set
+* Exceptions are now thrown when a URL cannot be parsed
+* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
+* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
+
+## 3.7.0 - 2013-06-10
+
+* See UPGRADING.md for more information on how to upgrade.
+* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
+  request. You can pass a 'request.options' configuration setting to a client to apply default request options to
+  every request created by a client (e.g. default query string variables, headers, curl options, etc).
+* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
+  See `Guzzle\Http\StaticClient::mount`.
+* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
+      created by a command (e.g. custom headers, query string variables, timeout settings, etc).
+* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
+  headers of a response
+* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
+  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
+* ServiceBuilders now support storing and retrieving arbitrary data
+* CachePlugin can now purge all resources for a given URI
+* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
+* CachePlugin now uses the Vary header to determine if a resource is a cache hit
+* `Guzzle\Http\Message\Response` now implements `\Serializable`
+* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
+* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
+* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
+* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
+* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
+* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
+  Symfony users can still use the old version of Monolog.
+* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
+  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
+* Several performance improvements to `Guzzle\Common\Collection`
+* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
+  createRequest, head, delete, put, patch, post, options, prepareRequest
+* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
+* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
+* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
+  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
+  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
+* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
+  default `array()`
+* Added `Guzzle\Stream\StreamInterface::isRepeatable`
+* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
+  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
+  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
+* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
+* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
+* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
+* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
+* Removed `Guzzle\Http\Message\RequestInterface::canCache`
+* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
+* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
+* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
+* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
+  `Guzzle\Common\Version::$emitWarnings` to true.
+* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
+      `$request->getResponseBody()->isRepeatable()` instead.
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
+* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
+  `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
+* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
+* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
+* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
+* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
+  These will work through Guzzle 4.0
+* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
+* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
+* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
+* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
+* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
+* Marked `Guzzle\Common\Collection::inject()` as deprecated.
+* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
+* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
+  CacheStorageInterface. These two objects and interface will be removed in a future version.
+* Always setting X-cache headers on cached responses
+* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
+* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
+  $request, Response $response);`
+* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
+* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
+* Added `CacheStorageInterface::purge($url)`
+* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
+  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
+  CanCacheStrategyInterface $canCache = null)`
+* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
+
+## 3.6.0 - 2013-05-29
+
+* ServiceDescription now implements ToArrayInterface
+* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
+* Guzzle can now correctly parse incomplete URLs
+* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
+* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
+* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
+* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
+  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
+  CacheControl header implementation.
+* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
+* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
+* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
+  Guzzle\Http\Curl\RequestMediator
+* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
+* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
+* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
+* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
+* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
+* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
+* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc are managed by Guzzle
+  directly via interfaces
+* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
+  but are a no-op until removed.
+* Most classes that used to require a ``Guzzle\Service\Command\CommandInterface` typehint now request a
+  `Guzzle\Service\Command\ArrayCommandInterface`.
+* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
+  on a request while the request is still being transferred
+* The ability to case-insensitively search for header values
+* Guzzle\Http\Message\Header::hasExactHeader
+* Guzzle\Http\Message\Header::raw. Use getAll()
+* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
+  instead.
+* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
+* Added the ability to cast Model objects to a string to view debug information.
+
+## 3.5.0 - 2013-05-13
+
+* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
+* Bug: Better cleanup of one-time events accross the board (when an event is meant to fire once, it will now remove
+  itself from the EventDispatcher)
+* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
+* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
+* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
+  non-existent key
+* Bug: All __call() method arguments are now required (helps with mocking frameworks)
+* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
+  to help with refcount based garbage collection of resources created by sending a request
+* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
+* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it'sdeprecated). Use the
+  HistoryPlugin for a history.
+* Added a `responseBody` alias for the `response_body` location
+* Refactored internals to no longer rely on Response::getRequest()
+* HistoryPlugin can now be cast to a string
+* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
+  and responses that are sent over the wire
+* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
+
+## 3.4.3 - 2013-04-30
+
+* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
+* Added a check to re-extract the temp cacert bundle from the phar before sending each request
+
+## 3.4.2 - 2013-04-29
+
+* Bug fix: Stream objects now work correctly with "a" and "a+" modes
+* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
+* Bug fix: AsyncPlugin no longer forces HEAD requests
+* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
+* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
+* Setting a response on a request will write to the custom request body from the response body if one is specified
+* LogPlugin now writes to php://output when STDERR is undefined
+* Added the ability to set multiple POST files for the same key in a single call
+* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
+* Added the ability to queue CurlExceptions to the MockPlugin
+* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
+* Configuration loading now allows remote files
+
+## 3.4.1 - 2013-04-16
+
+* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
+  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
+* Exceptions are now properly grouped when sending requests in parallel
+* Redirects are now properly aggregated when a multi transaction fails
+* Redirects now set the response on the original object even in the event of a failure
+* Bug fix: Model names are now properly set even when using $refs
+* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
+* Added support for oauth_callback in OAuth signatures
+* Added support for oauth_verifier in OAuth signatures
+* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
+
+## 3.4.0 - 2013-04-11
+
+* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289
+* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
+* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
+* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
+* Bug fix: Added `number` type to service descriptions.
+* Bug fix: empty parameters are removed from an OAuth signature
+* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
+* Bug fix: Fixed "array to string" error when validating a union of types in a service description
+* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
+* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
+* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
+* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
+* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
+  the Content-Type can be determined based on the entity body or the path of the request.
+* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
+* Added support for a PSR-3 LogAdapter.
+* Added a `command.after_prepare` event
+* Added `oauth_callback` parameter to the OauthPlugin
+* Added the ability to create a custom stream class when using a stream factory
+* Added a CachingEntityBody decorator
+* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
+* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
+* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
+* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
+  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
+  POST fields or files (the latter is only used when emulating a form POST in the browser).
+* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
+
+## 3.3.1 - 2013-03-10
+
+* Added the ability to create PHP streaming responses from HTTP requests
+* Bug fix: Running any filters when parsing response headers with service descriptions
+* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
+* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
+  response location visitors.
+* Bug fix: Removed the possibility of creating configuration files with circular dependencies
+* RequestFactory::create() now uses the key of a POST file when setting the POST file name
+* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
+
+## 3.3.0 - 2013-03-03
+
+* A large number of performance optimizations have been made
+* Bug fix: Added 'wb' as a valid write mode for streams
+* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
+* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
+* BC: Removed `Guzzle\Http\Utils` class
+* BC: Setting a service description on a client will no longer modify the client's command factories.
+* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
+  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
+* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
+  lowercase
+* Operation parameter objects are now lazy loaded internally
+* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
+* Added support for instantiating responseType=class responseClass classes. Classes must implement
+  `Guzzle\Service\Command\ResponseClassInterface`
+* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
+  additional properties also support locations and can be used to parse JSON responses where the outermost part of the
+  JSON is an array
+* Added support for nested renaming of JSON models (rename sentAs to name)
+* CachePlugin
+    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
+    * Debug headers can now added to cached response in the CachePlugin
+
+## 3.2.0 - 2013-02-14
+
+* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
+* URLs with no path no longer contain a "/" by default
+* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
+* BadResponseException no longer includes the full request and response message
+* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
+* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
+* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
+* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
+* xmlEncoding can now be customized for the XML declaration of a XML service description operation
+* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
+  aggregation and no longer uses callbacks
+* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
+* Bug fix: Filters were not always invoked for array service description parameters
+* Bug fix: Redirects now use a target response body rather than a temporary response body
+* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
+* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
+
+## 3.1.2 - 2013-01-27
+
+* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
+  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
+* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
+* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
+* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
+* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
+
+## 3.1.1 - 2013-01-20
+
+* Adding wildcard support to Guzzle\Common\Collection::getPath()
+* Adding alias support to ServiceBuilder configs
+* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
+
+## 3.1.0 - 2013-01-12
+
+* BC: CurlException now extends from RequestException rather than BadResponseException
+* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
+* Added getData to ServiceDescriptionInterface
+* Added context array to RequestInterface::setState()
+* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
+* Bug: Adding required content-type when JSON request visitor adds JSON to a command
+* Bug: Fixing the serialization of a service description with custom data
+* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
+  an array of successful and failed responses
+* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
+* Added Guzzle\Http\IoEmittingEntityBody
+* Moved command filtration from validators to location visitors
+* Added `extends` attributes to service description parameters
+* Added getModels to ServiceDescriptionInterface
+
+## 3.0.7 - 2012-12-19
+
+* Fixing phar detection when forcing a cacert to system if null or true
+* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
+* Cleaning up `Guzzle\Common\Collection::inject` method
+* Adding a response_body location to service descriptions
+
+## 3.0.6 - 2012-12-09
+
+* CurlMulti performance improvements
+* Adding setErrorResponses() to Operation
+* composer.json tweaks
+
+## 3.0.5 - 2012-11-18
+
+* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
+* Bug: Response body can now be a string containing "0"
+* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
+* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
+* Added support for XML attributes in service description responses
+* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
+* Added better mimetype guessing to requests and post files
+
+## 3.0.4 - 2012-11-11
+
+* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
+* Bug: Cookies can now be added that have a name, domain, or value set to "0"
+* Bug: Using the system cacert bundle when using the Phar
+* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
+* Enhanced cookie jar de-duplication
+* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
+* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
+* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
+
+## 3.0.3 - 2012-11-04
+
+* Implementing redirects in PHP rather than cURL
+* Added PECL URI template extension and using as default parser if available
+* Bug: Fixed Content-Length parsing of Response factory
+* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
+* Adding ToArrayInterface throughout library
+* Fixing OauthPlugin to create unique nonce values per request
+
+## 3.0.2 - 2012-10-25
+
+* Magic methods are enabled by default on clients
+* Magic methods return the result of a command
+* Service clients no longer require a base_url option in the factory
+* Bug: Fixed an issue with URI templates where null template variables were being expanded
+
+## 3.0.1 - 2012-10-22
+
+* Models can now be used like regular collection objects by calling filter, map, etc
+* Models no longer require a Parameter structure or initial data in the constructor
+* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
+
+## 3.0.0 - 2012-10-15
+
+* Rewrote service description format to be based on Swagger
+    * Now based on JSON schema
+    * Added nested input structures and nested response models
+    * Support for JSON and XML input and output models
+    * Renamed `commands` to `operations`
+    * Removed dot class notation
+    * Removed custom types
+* Broke the project into smaller top-level namespaces to be more component friendly
+* Removed support for XML configs and descriptions. Use arrays or JSON files.
+* Removed the Validation component and Inspector
+* Moved all cookie code to Guzzle\Plugin\Cookie
+* Magic methods on a Guzzle\Service\Client now return the command un-executed.
+* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
+* Now shipping with cURL's CA certs and using it by default
+* Added previousResponse() method to response objects
+* No longer sending Accept and Accept-Encoding headers on every request
+* Only sending an Expect header by default when a payload is greater than 1MB
+* Added/moved client options:
+    * curl.blacklist to curl.option.blacklist
+    * Added ssl.certificate_authority
+* Added a Guzzle\Iterator component
+* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
+* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
+* Added a more robust caching plugin
+* Added setBody to response objects
+* Updating LogPlugin to use a more flexible MessageFormatter
+* Added a completely revamped build process
+* Cleaning up Collection class and removing default values from the get method
+* Fixed ZF2 cache adapters
+
+## 2.8.8 - 2012-10-15
+
+* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
+
+## 2.8.7 - 2012-09-30
+
+* Bug: Fixed config file aliases for JSON includes
+* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
+* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
+* Bug: Hardening request and response parsing to account for missing parts
+* Bug: Fixed PEAR packaging
+* Bug: Fixed Request::getInfo
+* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
+* Adding the ability for the namespace Iterator factory to look in multiple directories
+* Added more getters/setters/removers from service descriptions
+* Added the ability to remove POST fields from OAuth signatures
+* OAuth plugin now supports 2-legged OAuth
+
+## 2.8.6 - 2012-09-05
+
+* Added the ability to modify and build service descriptions
+* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
+* Added a `json` parameter location
+* Now allowing dot notation for classes in the CacheAdapterFactory
+* Using the union of two arrays rather than an array_merge when extending service builder services and service params
+* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
+  in service builder config files.
+* Services defined in two different config files that include one another will by default replace the previously
+  defined service, but you can now create services that extend themselves and merge their settings over the previous
+* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
+  '_default' with a default JSON configuration file.
+
+## 2.8.5 - 2012-08-29
+
+* Bug: Suppressed empty arrays from URI templates
+* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
+* Added support for HTTP responses that do not contain a reason phrase in the start-line
+* AbstractCommand commands are now invokable
+* Added a way to get the data used when signing an Oauth request before a request is sent
+
+## 2.8.4 - 2012-08-15
+
+* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
+* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
+* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
+* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
+* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
+* Added additional response status codes
+* Removed SSL information from the default User-Agent header
+* DELETE requests can now send an entity body
+* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
+* Added the ability of the MockPlugin to consume mocked request bodies
+* LogPlugin now exposes request and response objects in the extras array
+
+## 2.8.3 - 2012-07-30
+
+* Bug: Fixed a case where empty POST requests were sent as GET requests
+* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
+* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
+* Added multiple inheritance to service description commands
+* Added an ApiCommandInterface and added ``getParamNames()`` and ``hasParam()``
+* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
+* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
+
+## 2.8.2 - 2012-07-24
+
+* Bug: Query string values set to 0 are no longer dropped from the query string
+* Bug: A Collection object is no longer created each time a call is made to ``Guzzle\Service\Command\AbstractCommand::getRequestHeaders()``
+* Bug: ``+`` is now treated as an encoded space when parsing query strings
+* QueryString and Collection performance improvements
+* Allowing dot notation for class paths in filters attribute of a service descriptions
+
+## 2.8.1 - 2012-07-16
+
+* Loosening Event Dispatcher dependency
+* POST redirects can now be customized using CURLOPT_POSTREDIR
+
+## 2.8.0 - 2012-07-15
+
+* BC: Guzzle\Http\Query
+    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
+    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
+    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
+    * Changed the aggregation functions of QueryString to be static methods
+    * Can now use fromString() with querystrings that have a leading ?
+* cURL configuration values can be specified in service descriptions using ``curl.`` prefixed parameters
+* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
+* Cookies are no longer URL decoded by default
+* Bug: URI template variables set to null are no longer expanded
+
+## 2.7.2 - 2012-07-02
+
+* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
+* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
+* CachePlugin now allows for a custom request parameter function to check if a request can be cached
+* Bug fix: CachePlugin now only caches GET and HEAD requests by default
+* Bug fix: Using header glue when transferring headers over the wire
+* Allowing deeply nested arrays for composite variables in URI templates
+* Batch divisors can now return iterators or arrays
+
+## 2.7.1 - 2012-06-26
+
+* Minor patch to update version number in UA string
+* Updating build process
+
+## 2.7.0 - 2012-06-25
+
+* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
+* BC: Removed magic setX methods from commands
+* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
+* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
+* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
+* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
+* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
+* Added the ability to set POST fields and files in a service description
+* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
+* Adding a command.before_prepare event to clients
+* Added BatchClosureTransfer and BatchClosureDivisor
+* BatchTransferException now includes references to the batch divisor and transfer strategies
+* Fixed some tests so that they pass more reliably
+* Added Guzzle\Common\Log\ArrayLogAdapter
+
+## 2.6.6 - 2012-06-10
+
+* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
+* BC: Removing Guzzle\Service\Command\CommandSet
+* Adding generic batching system (replaces the batch queue plugin and command set)
+* Updating ZF cache and log adapters and now using ZF's composer repository
+* Bug: Setting the name of each ApiParam when creating through an ApiCommand
+* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
+* Bug: Changed the default cookie header casing back to 'Cookie'
+
+## 2.6.5 - 2012-06-03
+
+* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
+* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
+* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
+* BC: Renaming methods in the CookieJarInterface
+* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
+* Making the default glue for HTTP headers ';' instead of ','
+* Adding a removeValue to Guzzle\Http\Message\Header
+* Adding getCookies() to request interface.
+* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
+
+## 2.6.4 - 2012-05-30
+
+* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
+* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
+* Bug: Fixing magic method command calls on clients
+* Bug: Email constraint only validates strings
+* Bug: Aggregate POST fields when POST files are present in curl handle
+* Bug: Fixing default User-Agent header
+* Bug: Only appending or prepending parameters in commands if they are specified
+* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
+* Allowing the use of dot notation for class namespaces when using instance_of constraint
+* Added any_match validation constraint
+* Added an AsyncPlugin
+* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
+* Allowing the result of a command object to be changed
+* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
+
+## 2.6.3 - 2012-05-23
+
+* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
+* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
+* You can now use an array of data when creating PUT request bodies in the request factory.
+* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
+* [Http] Adding support for Content-Type in multipart POST uploads per upload
+* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
+* Adding more POST data operations for easier manipulation of POST data.
+* You can now set empty POST fields.
+* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
+* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
+* CS updates
+
+## 2.6.2 - 2012-05-19
+
+* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.
+
+## 2.6.1 - 2012-05-19
+
+* [BC] Removing 'path' support in service descriptions.  Use 'uri'.
+* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
+* [BC] Removing Guzzle\Common\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.
+* [BC] Removing Guzzle\Common\XmlElement.
+* All commands, both dynamic and concrete, have ApiCommand objects.
+* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
+* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
+* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
+
+## 2.6.0 - 2012-05-15
+
+* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
+* [BC] Executing a Command returns the result of the command rather than the command
+* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
+* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
+* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
+* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
+* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
+* [BC] Guzzle\Guzzle is now deprecated
+* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
+* Adding Guzzle\Version class to give version information about Guzzle
+* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
+* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
+* ServiceDescription and ServiceBuilder are now cacheable using similar configs
+* Changing the format of XML and JSON service builder configs.  Backwards compatible.
+* Cleaned up Cookie parsing
+* Trimming the default Guzzle User-Agent header
+* Adding a setOnComplete() method to Commands that is called when a command completes
+* Keeping track of requests that were mocked in the MockPlugin
+* Fixed a caching bug in the CacheAdapterFactory
+* Inspector objects can be injected into a Command object
+* Refactoring a lot of code and tests to be case insensitive when dealing with headers
+* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
+* Adding the ability to set global option overrides to service builder configs
+* Adding the ability to include other service builder config files from within XML and JSON files
+* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
+
+## 2.5.0 - 2012-05-08
+
+* Major performance improvements
+* [BC] Simplifying Guzzle\Common\Collection.  Please check to see if you are using features that are now deprecated.
+* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
+* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates.  Use "{}"
+* Added the ability to passed parameters to all requests created by a client
+* Added callback functionality to the ExponentialBackoffPlugin
+* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
+* Rewinding request stream bodies when retrying requests
+* Exception is thrown when JSON response body cannot be decoded
+* Added configurable magic method calls to clients and commands.  This is off by default.
+* Fixed a defect that added a hash to every parsed URL part
+* Fixed duplicate none generation for OauthPlugin.
+* Emitting an event each time a client is generated by a ServiceBuilder
+* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
+* cache.* request parameters should be renamed to params.cache.*
+* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc). See CurlHandle.
+* Added the ability to disable type validation of service descriptions
+* ServiceDescriptions and ServiceBuilders are now Serializable

+ 19 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2011 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 57 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/README.md

@@ -0,0 +1,57 @@
+Guzzle, PHP HTTP client and webservice framework
+================================================
+
+# This is an old version of Guzzle
+
+This repository is for Guzzle 3.x. Guzzle 5.x, the new version of Guzzle, has
+been released and is available at
+[https://github.com/guzzle/guzzle](https://github.com/guzzle/guzzle). The
+documentation for Guzzle version 5+ can be found at
+[http://guzzlephp.org](http://guzzlephp.org).
+
+Guzzle 3 is only maintained for bug and security fixes. Guzzle 3 will be EOL
+at some point in late 2015.
+
+### About Guzzle 3
+
+[![Composer Downloads](https://poser.pugx.org/guzzle/guzzle/d/total.png)](https://packagist.org/packages/guzzle/guzzle)
+ [![Build Status](https://secure.travis-ci.org/guzzle/guzzle3.png?branch=master)](http://travis-ci.org/guzzle/guzzle3)
+
+- Extremely powerful API provides all the power of cURL with a simple interface.
+- Truly take advantage of HTTP/1.1 with persistent connections, connection pooling, and parallel requests.
+- Service description DSL allows you build awesome web service clients faster.
+- Symfony2 event-based plugin system allows you to completely modify the behavior of a request.
+
+Get answers with: [Documentation](http://guzzle3.readthedocs.org/en/latest/), [Forums](https://groups.google.com/forum/?hl=en#!forum/guzzle), IRC ([#guzzlephp](irc://irc.freenode.net/#guzzlephp) @ irc.freenode.net)
+
+### Installing via Composer
+
+The recommended way to install Guzzle is through [Composer](http://getcomposer.org).
+
+```bash
+# Install Composer
+curl -sS https://getcomposer.org/installer | php
+
+# Add Guzzle as a dependency
+php composer.phar require guzzle/guzzle:~3.9
+```
+
+After installing, you need to require Composer's autoloader:
+
+```php
+require 'vendor/autoload.php';
+```
+## Known Issues
+
+1. Problem following a specific redirect: https://github.com/guzzle/guzzle/issues/385.
+   This has been fixed in Guzzle 4/5.
+2. Root XML attributes not serialized in a service description: https://github.com/guzzle/guzzle3/issues/5.
+   This has been fixed in Guzzle 4/5.
+3. Accept-Encoding not preserved when following redirect: https://github.com/guzzle/guzzle3/issues/9
+   Fixed in Guzzle 4/5.
+4. String "Array" Transmitted w/ PostFiles and Duplicate Aggregator: https://github.com/guzzle/guzzle3/issues/10
+   Fixed in Guzzle 4/5.
+5. Recursive model references with array items: https://github.com/guzzle/guzzle3/issues/13
+   Fixed in Guzzle 4/5
+6. String "Array" Transmitted w/ PostFiles and Duplicate Aggregator: https://github.com/guzzle/guzzle3/issues/10
+   Fixed in Guzzle 4/5.

+ 537 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/UPGRADING.md

@@ -0,0 +1,537 @@
+Guzzle Upgrade Guide
+====================
+
+3.6 to 3.7
+----------
+
+### Deprecations
+
+- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:
+
+```php
+\Guzzle\Common\Version::$emitWarnings = true;
+```
+
+The following APIs and options have been marked as deprecated:
+
+- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.
+- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
+- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
+- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
+- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
+- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
+- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
+- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
+- Marked `Guzzle\Common\Collection::inject()` as deprecated.
+- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use
+  `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or
+  `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`
+
+3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational
+request methods. When paired with a client's configuration settings, these options allow you to specify default settings
+for various aspects of a request. Because these options make other previous configuration options redundant, several
+configuration options and methods of a client and AbstractCommand have been deprecated.
+
+- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.
+- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.
+- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`
+- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0
+
+        $command = $client->getCommand('foo', array(
+            'command.headers' => array('Test' => '123'),
+            'command.response_body' => '/path/to/file'
+        ));
+
+        // Should be changed to:
+
+        $command = $client->getCommand('foo', array(
+            'command.request_options' => array(
+                'headers' => array('Test' => '123'),
+                'save_as' => '/path/to/file'
+            )
+        ));
+
+### Interface changes
+
+Additions and changes (you will need to update any implementations or subclasses you may have created):
+
+- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
+  createRequest, head, delete, put, patch, post, options, prepareRequest
+- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
+- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
+- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
+  `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
+  resource, string, or EntityBody into the $options parameter to specify the download location of the response.
+- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
+  default `array()`
+- Added `Guzzle\Stream\StreamInterface::isRepeatable`
+- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
+
+The following methods were removed from interfaces. All of these methods are still available in the concrete classes
+that implement them, but you should update your code to use alternative methods:
+
+- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
+  `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
+  `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or
+  `$client->setDefaultOption('headers/{header_name}', 'value')`. or
+  `$client->setDefaultOption('headers', array('header_name' => 'value'))`.
+- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.
+- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail.
+- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail.
+- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.
+- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin.
+- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin.
+- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin.
+
+### Cache plugin breaking changes
+
+- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
+  CacheStorageInterface. These two objects and interface will be removed in a future version.
+- Always setting X-cache headers on cached responses
+- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
+- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
+  $request, Response $response);`
+- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
+- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
+- Added `CacheStorageInterface::purge($url)`
+- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
+  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
+  CanCacheStrategyInterface $canCache = null)`
+- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
+
+3.5 to 3.6
+----------
+
+* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
+* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
+* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
+  For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().
+  Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.
+* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
+  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
+  CacheControl header implementation.
+* Moved getLinks() from Response to just be used on a Link header object.
+
+If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the
+HeaderInterface (e.g. toArray(), getAll(), etc).
+
+### Interface changes
+
+* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
+* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
+* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
+  Guzzle\Http\Curl\RequestMediator
+* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
+* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
+* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
+
+### Removed deprecated functions
+
+* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
+* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
+
+### Deprecations
+
+* The ability to case-insensitively search for header values
+* Guzzle\Http\Message\Header::hasExactHeader
+* Guzzle\Http\Message\Header::raw. Use getAll()
+* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
+  instead.
+
+### Other changes
+
+* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
+* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc are managed by Guzzle
+  directly via interfaces
+* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
+  but are a no-op until removed.
+* Most classes that used to require a ``Guzzle\Service\Command\CommandInterface` typehint now request a
+  `Guzzle\Service\Command\ArrayCommandInterface`.
+* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
+  on a request while the request is still being transferred
+* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
+
+3.3 to 3.4
+----------
+
+Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs.
+
+3.2 to 3.3
+----------
+
+### Response::getEtag() quote stripping removed
+
+`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header
+
+### Removed `Guzzle\Http\Utils`
+
+The `Guzzle\Http\Utils` class was removed. This class was only used for testing.
+
+### Stream wrapper and type
+
+`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to lowercase.
+
+### curl.emit_io became emit_io
+
+Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the
+'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
+
+3.1 to 3.2
+----------
+
+### CurlMulti is no longer reused globally
+
+Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added
+to a single client can pollute requests dispatched from other clients.
+
+If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the
+ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is
+created.
+
+```php
+$multi = new Guzzle\Http\Curl\CurlMulti();
+$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json');
+$builder->addListener('service_builder.create_client', function ($event) use ($multi) {
+    $event['client']->setCurlMulti($multi);
+}
+});
+```
+
+### No default path
+
+URLs no longer have a default path value of '/' if no path was specified.
+
+Before:
+
+```php
+$request = $client->get('http://www.foo.com');
+echo $request->getUrl();
+// >> http://www.foo.com/
+```
+
+After:
+
+```php
+$request = $client->get('http://www.foo.com');
+echo $request->getUrl();
+// >> http://www.foo.com
+```
+
+### Less verbose BadResponseException
+
+The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and
+response information. You can, however, get access to the request and response object by calling `getRequest()` or
+`getResponse()` on the exception object.
+
+### Query parameter aggregation
+
+Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a
+setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is
+responsible for handling the aggregation of multi-valued query string variables into a flattened hash.
+
+2.8 to 3.x
+----------
+
+### Guzzle\Service\Inspector
+
+Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig`
+
+**Before**
+
+```php
+use Guzzle\Service\Inspector;
+
+class YourClient extends \Guzzle\Service\Client
+{
+    public static function factory($config = array())
+    {
+        $default = array();
+        $required = array('base_url', 'username', 'api_key');
+        $config = Inspector::fromConfig($config, $default, $required);
+
+        $client = new self(
+            $config->get('base_url'),
+            $config->get('username'),
+            $config->get('api_key')
+        );
+        $client->setConfig($config);
+
+        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
+
+        return $client;
+    }
+```
+
+**After**
+
+```php
+use Guzzle\Common\Collection;
+
+class YourClient extends \Guzzle\Service\Client
+{
+    public static function factory($config = array())
+    {
+        $default = array();
+        $required = array('base_url', 'username', 'api_key');
+        $config = Collection::fromConfig($config, $default, $required);
+
+        $client = new self(
+            $config->get('base_url'),
+            $config->get('username'),
+            $config->get('api_key')
+        );
+        $client->setConfig($config);
+
+        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
+
+        return $client;
+    }
+```
+
+### Convert XML Service Descriptions to JSON
+
+**Before**
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<client>
+    <commands>
+        <!-- Groups -->
+        <command name="list_groups" method="GET" uri="groups.json">
+            <doc>Get a list of groups</doc>
+        </command>
+        <command name="search_groups" method="GET" uri='search.json?query="{{query}} type:group"'>
+            <doc>Uses a search query to get a list of groups</doc>
+            <param name="query" type="string" required="true" />
+        </command>
+        <command name="create_group" method="POST" uri="groups.json">
+            <doc>Create a group</doc>
+            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
+            <param name="Content-Type" location="header" static="application/json"/>
+        </command>
+        <command name="delete_group" method="DELETE" uri="groups/{{id}}.json">
+            <doc>Delete a group by ID</doc>
+            <param name="id" type="integer" required="true"/>
+        </command>
+        <command name="get_group" method="GET" uri="groups/{{id}}.json">
+            <param name="id" type="integer" required="true"/>
+        </command>
+        <command name="update_group" method="PUT" uri="groups/{{id}}.json">
+            <doc>Update a group</doc>
+            <param name="id" type="integer" required="true"/>
+            <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
+            <param name="Content-Type" location="header" static="application/json"/>
+        </command>
+    </commands>
+</client>
+```
+
+**After**
+
+```json
+{
+    "name":       "Zendesk REST API v2",
+    "apiVersion": "2012-12-31",
+    "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users",
+    "operations": {
+        "list_groups":  {
+            "httpMethod":"GET",
+            "uri":       "groups.json",
+            "summary":   "Get a list of groups"
+        },
+        "search_groups":{
+            "httpMethod":"GET",
+            "uri":       "search.json?query=\"{query} type:group\"",
+            "summary":   "Uses a search query to get a list of groups",
+            "parameters":{
+                "query":{
+                    "location":   "uri",
+                    "description":"Zendesk Search Query",
+                    "type":       "string",
+                    "required":   true
+                }
+            }
+        },
+        "create_group": {
+            "httpMethod":"POST",
+            "uri":       "groups.json",
+            "summary":   "Create a group",
+            "parameters":{
+                "data":        {
+                    "type":       "array",
+                    "location":   "body",
+                    "description":"Group JSON",
+                    "filters":    "json_encode",
+                    "required":   true
+                },
+                "Content-Type":{
+                    "type":    "string",
+                    "location":"header",
+                    "static":  "application/json"
+                }
+            }
+        },
+        "delete_group": {
+            "httpMethod":"DELETE",
+            "uri":       "groups/{id}.json",
+            "summary":   "Delete a group",
+            "parameters":{
+                "id":{
+                    "location":   "uri",
+                    "description":"Group to delete by ID",
+                    "type":       "integer",
+                    "required":   true
+                }
+            }
+        },
+        "get_group":    {
+            "httpMethod":"GET",
+            "uri":       "groups/{id}.json",
+            "summary":   "Get a ticket",
+            "parameters":{
+                "id":{
+                    "location":   "uri",
+                    "description":"Group to get by ID",
+                    "type":       "integer",
+                    "required":   true
+                }
+            }
+        },
+        "update_group": {
+            "httpMethod":"PUT",
+            "uri":       "groups/{id}.json",
+            "summary":   "Update a group",
+            "parameters":{
+                "id":          {
+                    "location":   "uri",
+                    "description":"Group to update by ID",
+                    "type":       "integer",
+                    "required":   true
+                },
+                "data":        {
+                    "type":       "array",
+                    "location":   "body",
+                    "description":"Group JSON",
+                    "filters":    "json_encode",
+                    "required":   true
+                },
+                "Content-Type":{
+                    "type":    "string",
+                    "location":"header",
+                    "static":  "application/json"
+                }
+            }
+        }
+}
+```
+
+### Guzzle\Service\Description\ServiceDescription
+
+Commands are now called Operations
+
+**Before**
+
+```php
+use Guzzle\Service\Description\ServiceDescription;
+
+$sd = new ServiceDescription();
+$sd->getCommands();     // @returns ApiCommandInterface[]
+$sd->hasCommand($name);
+$sd->getCommand($name); // @returns ApiCommandInterface|null
+$sd->addCommand($command); // @param ApiCommandInterface $command
+```
+
+**After**
+
+```php
+use Guzzle\Service\Description\ServiceDescription;
+
+$sd = new ServiceDescription();
+$sd->getOperations();           // @returns OperationInterface[]
+$sd->hasOperation($name);
+$sd->getOperation($name);       // @returns OperationInterface|null
+$sd->addOperation($operation);  // @param OperationInterface $operation
+```
+
+### Guzzle\Common\Inflection\Inflector
+
+Namespace is now `Guzzle\Inflection\Inflector`
+
+### Guzzle\Http\Plugin
+
+Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.
+
+### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log
+
+Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively.
+
+**Before**
+
+```php
+use Guzzle\Common\Log\ClosureLogAdapter;
+use Guzzle\Http\Plugin\LogPlugin;
+
+/** @var \Guzzle\Http\Client */
+$client;
+
+// $verbosity is an integer indicating desired message verbosity level
+$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);
+```
+
+**After**
+
+```php
+use Guzzle\Log\ClosureLogAdapter;
+use Guzzle\Log\MessageFormatter;
+use Guzzle\Plugin\Log\LogPlugin;
+
+/** @var \Guzzle\Http\Client */
+$client;
+
+// $format is a string indicating desired message format -- @see MessageFormatter
+$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);
+```
+
+### Guzzle\Http\Plugin\CurlAuthPlugin
+
+Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`.
+
+### Guzzle\Http\Plugin\ExponentialBackoffPlugin
+
+Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes.
+
+**Before**
+
+```php
+use Guzzle\Http\Plugin\ExponentialBackoffPlugin;
+
+$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(
+        ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)
+    ));
+
+$client->addSubscriber($backoffPlugin);
+```
+
+**After**
+
+```php
+use Guzzle\Plugin\Backoff\BackoffPlugin;
+use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
+
+// Use convenient factory method instead -- see implementation for ideas of what
+// you can do with chaining backoff strategies
+$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(
+        HttpBackoffStrategy::getDefaultFailureCodes(), array(429)
+    ));
+$client->addSubscriber($backoffPlugin);
+```
+
+### Known Issues
+
+#### [BUG] Accept-Encoding header behavior changed unintentionally.
+
+(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)
+
+In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to
+properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.
+See issue #217 for a workaround, or use a version containing the fix.

+ 45 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/build.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="guzzle" default="test">
+    <!-- set local values, like git location -->
+    <property file="phing/build.properties.dist" override="true" />
+    <property file="phing/build.properties" override="true" />
+
+    <property name="dir.output" value="${project.basedir}/build/artifacts" />
+    <property name="dir.imports" value="${project.basedir}/phing/imports" />
+    <property name="dir.bin" value="${project.basedir}/bin" />
+    <property name="repo.dir" value="${project.basedir}" />
+
+    <import file="${dir.imports}/dependencies.xml"/>
+    <import file="${dir.imports}/deploy.xml"/>
+
+    <target name="composer-lint" description="lint-check composer.json only">
+        <composerlint dir="${project.basedir}/src" file="{$project.basedir}/composer.json" />
+    </target>
+
+    <target name="test" description="Run unit tests">
+        <exec passthru="true" command="vendor/bin/phpunit" checkReturn="true" />
+    </target>
+
+    <target name="build-init" description="Initialize local phing properties">
+        <copy file="phing/build.properties.dist" tofile="phing/build.properties" overwrite="false" />
+    </target>
+
+    <target name="clean">
+        <delete dir="${dir.output}"/>
+        <delete dir="${project.basedir}/build/pearwork"/>
+    </target>
+
+    <target name="prepare" depends="clean,build-init">
+        <mkdir dir="${dir.output}"/>
+        <mkdir dir="${dir.output}/logs" />
+    </target>
+
+    <target name="coverage" depends="prepare">
+        <exec passthru="true" command="vendor/bin/phpunit --coverage-html=${dir.output}/coverage" />
+    </target>
+
+    <target name="view-coverage">
+        <exec passthru="true" command="open ${dir.output}/coverage/index.html" />
+    </target>
+
+</project>

+ 82 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/composer.json

@@ -0,0 +1,82 @@
+{
+    "name": "guzzle/guzzle",
+    "type": "library",
+    "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
+    "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
+    "homepage": "http://guzzlephp.org/",
+    "license": "MIT",
+
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        },
+        {
+            "name": "Guzzle Community",
+            "homepage": "https://github.com/guzzle/guzzle/contributors"
+        }
+    ],
+
+    "replace": {
+        "guzzle/batch": "self.version",
+        "guzzle/cache": "self.version",
+        "guzzle/common": "self.version",
+        "guzzle/http": "self.version",
+        "guzzle/inflection": "self.version",
+        "guzzle/iterator": "self.version",
+        "guzzle/log": "self.version",
+        "guzzle/parser": "self.version",
+        "guzzle/plugin": "self.version",
+        "guzzle/plugin-async": "self.version",
+        "guzzle/plugin-backoff": "self.version",
+        "guzzle/plugin-cache": "self.version",
+        "guzzle/plugin-cookie": "self.version",
+        "guzzle/plugin-curlauth": "self.version",
+        "guzzle/plugin-error-response": "self.version",
+        "guzzle/plugin-history": "self.version",
+        "guzzle/plugin-log": "self.version",
+        "guzzle/plugin-md5": "self.version",
+        "guzzle/plugin-mock": "self.version",
+        "guzzle/plugin-oauth": "self.version",
+        "guzzle/service": "self.version",
+        "guzzle/stream": "self.version"
+    },
+
+    "require": {
+        "php": ">=5.3.3",
+        "ext-curl": "*",
+        "symfony/event-dispatcher": "~2.1"
+    },
+
+    "autoload": {
+        "psr-0": {
+            "Guzzle": "src/",
+            "Guzzle\\Tests": "tests/"
+        }
+    },
+
+    "suggest": {
+        "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
+    },
+
+    "scripts": {
+        "test": "phpunit"
+    },
+
+    "require-dev": {
+        "doctrine/cache": "~1.3",
+        "symfony/class-loader": "~2.1",
+        "monolog/monolog": "~1.0",
+        "psr/log": "~1.0",
+        "zendframework/zend-cache": "2.*,<2.3",
+        "zendframework/zend-log": "2.*,<2.3",
+        "phpunit/phpunit": "3.7.*"
+    },
+
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.9-dev"
+        }
+    }
+}

+ 153 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/Makefile

@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Guzzle.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Guzzle.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/Guzzle"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Guzzle"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."

File diff suppressed because it is too large
+ 155 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_downloads/guzzle-schema-1.0.json


BIN
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/guzzle-icon.png


+ 122 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/homepage.css

@@ -0,0 +1,122 @@
+/* Hero unit on homepage */
+
+.hero-unit h1 {
+  font-size: 49px;
+  margin-bottom: 12px;
+}
+
+.hero-unit {
+  padding: 40px;
+}
+
+.hero-unit p {
+  font-size: 17px;
+}
+
+.masthead img {
+  float: left;
+  margin-right: 17px;
+}
+
+.hero-unit ul li {
+  margin-left: 220px;
+}
+
+.hero-unit .buttons {
+  text-align: center;
+}
+
+.jumbotron {
+  position: relative;
+  padding: 40px 0;
+  color: #fff;
+  text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075);
+  background: #00312F;
+  background: -moz-linear-gradient(45deg, #002F31 0%, #335A6D 100%);
+  background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#00312D), color-stop(100%,#33566D));
+  background: -webkit-linear-gradient(45deg, #020031 0%,#334F6D 100%);
+  background: -o-linear-gradient(45deg, #002D31 0%,#334D6D 100%);
+  background: -ms-linear-gradient(45deg, #002F31 0%,#33516D 100%);
+  background: linear-gradient(45deg, #020031 0%,#33516D 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 );
+  -webkit-box-shadow: inset 0 3px 7px rgba(0, 0, 0, .2), inset 0 -3px 7px rgba(0, 0, 0, .2);
+  -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2);
+  box-shadow: inset 0 3px 7px rgba(0, 0, 0, .2), inset 0 -3px 7px rgba(0, 0, 0, .2);
+}
+
+.jumbotron h1 {
+  font-size: 80px;
+  font-weight: bold;
+  letter-spacing: -1px;
+  line-height: 1;
+}
+
+.jumbotron p {
+  font-size: 24px;
+  font-weight: 300;
+  line-height: 1.25;
+  margin-bottom: 30px;
+}
+
+.masthead {
+  padding: 40px 0 30px;
+  margin-bottom: 0;
+  color: #fff;
+  margin-top: -19px;
+}
+
+.masthead h1 {
+  display: none;
+}
+
+.masthead p {
+  font-size: 40px;
+  font-weight: 200;
+  line-height: 1.25;
+  margin: 12px 0 0 0;
+}
+
+.masthead .btn {
+  padding: 19px 24px;
+  font-size: 24px;
+  font-weight: 200;
+  border: 0;
+}
+
+/* Social bar on homepage */
+
+.social {
+  padding: 2px 0;
+  text-align: center;
+  background-color: #f5f5f5;
+  border-top: 1px solid #fff;
+  border-bottom: 1px solid #ddd;
+  margin: 0 0 20px 0;
+}
+
+.social ul {
+  margin-top: 0;
+}
+
+.social-buttons {
+  margin-left: 0;
+  margin-bottom: 0;
+  padding-left: 0;
+  list-style: none;
+}
+
+.social-buttons li {
+  display: inline-block;
+  padding: 5px 8px;
+  line-height: 1;
+  *display: inline;
+  *zoom: 1;
+}
+
+.center-announcement {
+  padding: 10px;
+  background-color: rgb(238, 243, 255);
+  border-radius: 8px;
+  text-align: center;
+  margin: 24px 0;
+}

BIN
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/logo.png


+ 41 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.css

@@ -0,0 +1,41 @@
+.com {
+  color: #93A1A1;
+}
+.lit {
+  color: #195F91;
+}
+.pun, .opn, .clo {
+  color: #93A1A1;
+}
+.fun {
+  color: #DC322F;
+}
+.str, .atv {
+  color: #DD1144;
+}
+.kwd, .linenums .tag {
+  color: #1E347B;
+}
+.typ, .atn, .dec, .var {
+  color: teal;
+}
+.pln {
+  color: #48484C;
+}
+.prettyprint {
+  background-color: #F7F7F9;
+  border: 1px solid #E1E1E8;
+  padding: 8px;
+}
+.prettyprint.linenums {
+  box-shadow: 40px 0 0 #FBFBFC inset, 41px 0 0 #ECECF0 inset;
+}
+ol.linenums {
+  margin: 0 0 0 33px;
+}
+ol.linenums li {
+  color: #BEBEC5;
+  line-height: 18px;
+  padding-left: 12px;
+  text-shadow: 0 1px 0 #FFFFFF;
+}

File diff suppressed because it is too large
+ 1 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_static/prettify.js


+ 106 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/index.html

@@ -0,0 +1,106 @@
+<script type="text/javascript" src="{{ pathto('_static/prettify.js', 1) }}"></script>
+<link rel="stylesheet" type="text/css" href="{{ pathto('_static/prettify.css', 1) }}" />
+<link rel="stylesheet" type="text/css" href="{{ pathto('_static/homepage.css', 1) }}" />
+
+<div class="jumbotron masthead">
+  <div class="container">
+    <img src="{{ pathto('_static/logo.png', 1) }}" alt="guzzle" width="199" height="260" />
+    <h1>Guzzle</h1>
+    <p>Guzzle is a PHP HTTP client<br />&amp; framework for building RESTful web service clients.</p>
+    <p>
+      <a class="btn btn-primary btn-lg" href="https://github.com/guzzle/guzzle">View Guzzle on GitHub</a>
+      <a class="btn btn-default btn-lg" href="{{ pathto('docs') }}">Read the docs</a>
+    </p>
+    </div>
+</div>
+
+<div class="social">
+  <ul class="social-buttons">
+    <li>
+      <iframe src="http://ghbtns.com/github-btn.html?user=guzzle&repo=guzzle&type=watch&count=true"
+          allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
+    </li>
+    <li>
+      <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://guzzlephp.org" data-text="Guzzle, PHP HTTP client &amp; framework for building RESTful web service clients" data-via="mtdowling">Tweet</a>
+      <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+    </li>
+    <li>
+      <a href="https://twitter.com/mtdowling" class="twitter-follow-button" data-show-count="false">Follow @mtdowling</a>
+      <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+    </li>
+  </ul>
+</div>
+
+<div class="container">
+
+  <h1>Introducing Guzzle</h1>
+
+  <p>Guzzle takes the pain out of sending HTTP requests and the redundancy out of creating web service clients. It's
+    a framework that includes the tools needed to create a robust web service client, including:
+    Service descriptions for defining the inputs and outputs of an API, resource iterators for traversing
+    paginated resources, batching for sending a large number of requests as efficiently as possible.</p>
+
+  <ul>
+    <li>All the power of cURL with a simple interface.</li>
+    <li>Persistent connections and parallel requests.</li>
+    <li>Streams request and response bodies</li>
+    <li><a href="{{ pathto('webservice-client/guzzle-service-descriptions') }}">Service descriptions</a> for quickly building clients.</li>
+    <li>Powered by the Symfony2 EventDispatcher.</li>
+    <li>Use all of the code or only <a href="https://packagist.org/packages/guzzle/">specific components</a>.</li>
+    <li><a href="{{ pathto('plugins/plugins-overview') }}">Plugins</a> for caching, logging, OAuth, mocks, and more</li>
+    <li>Includes a custom node.js webserver to <a href="{{ pathto('testing/unit-testing') }}">test your clients</a>.</li>
+  </ul>
+
+  <div class="center-announcement">
+    Guzzle is now part of Drupal 8 core and powers the official <a href="https://github.com/aws/aws-sdk-php">AWS SDK for PHP</a>
+  </div>
+
+  <h2>GitHub Example</h2>
+
+  <pre class="prettyprint">&lt;?php
+require_once 'vendor/autoload.php';
+use Guzzle\Http\Client;
+
+// Create a client and provide a base URL
+$client = new Client('https://api.github.com');
+// Create a request with basic Auth
+$request = $client->get('/user')->setAuth('user', 'pass');
+// Send the request and get the response
+$response = $request->send();
+echo $response->getBody();
+// >>> {"type":"User", ...
+echo $response->getHeader('Content-Length');
+// >>> 792
+</pre>
+
+    <h2>Twitter Example</h2>
+    <pre class="prettyprint">&lt;?php
+// Create a client to work with the Twitter API
+$client = new Client('https://api.twitter.com/{version}', array(
+    'version' => '1.1'
+));
+
+// Sign all requests with the OauthPlugin
+$client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin(array(
+    'consumer_key'  => '***',
+    'consumer_secret' => '***',
+    'token'       => '***',
+    'token_secret'  => '***'
+)));
+
+echo $client->get('statuses/user_timeline.json')->send()->getBody();
+// >>> {"public_gists":6,"type":"User" ...
+
+// Create a tweet using POST
+$request = $client->post('statuses/update.json', null, array(
+    'status' => 'Tweeted with Guzzle, http://guzzlephp.org'
+));
+
+// Send the request and parse the JSON response into an array
+$data = $request->send()->json();
+echo $data['text'];
+// >>> Tweeted with Guzzle, http://t.co/kngJMfRk
+</pre>
+</div>
+
+<script type="text/javascript">prettyPrint();</script>

+ 0 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/leftbar.html


+ 5 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/_templates/nav_links.html

@@ -0,0 +1,5 @@
+<li><a href="{{ pathto('docs') }}">Docs</a></li>
+<li><a href="http://guzzlephp.org/api/index.html">API</a></li>
+<li><a href="https://github.com/guzzle/guzzle">GitHub</a></li>
+<li><a href="https://groups.google.com/forum/?hl=en#!forum/guzzle">Forum</a></li>
+<li><a href="irc:irc.freenode.com/#guzzlephp">IRC</a></li>

+ 183 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/batching/batching.rst

@@ -0,0 +1,183 @@
+========
+Batching
+========
+
+Guzzle provides a fairly generic and very customizable batching framework that allows developers to efficiently
+transfer requests in parallel.
+
+Sending requests and commands in parallel
+-----------------------------------------
+
+You can send HTTP requests in parallel by passing an array of ``Guzzle\Http\Message\RequestInterface`` objects to
+``Guzzle\Http\Client::send()``:
+
+.. code-block:: php
+
+    $responses = $client->send(array(
+        $client->get('http://www.example.com/foo'),
+        $client->get('http://www.example.com/baz')
+        $client->get('http://www.example.com/bar')
+    ));
+
+You can send commands in parallel by passing an array of ``Guzzle\Service\Command\CommandInterface`` objects
+``Guzzle\Service\Client::execute()``:
+
+.. code-block:: php
+
+    $commands = $client->execute(array(
+        $client->getCommand('foo'),
+        $client->getCommand('baz'),
+        $client->getCommand('bar')
+    ));
+
+These approaches work well for most use-cases.  When you need more control over the requests that are sent in
+parallel or you need to send a large number of requests, you need to use the functionality provided in the
+``Guzzle\Batch`` namespace.
+
+Batching overview
+-----------------
+
+The batch object, ``Guzzle\Batch\Batch``, is a queue.  You add requests to the queue until you are ready to transfer
+all of the requests.  In order to efficiently transfer the items in the queue, the batch object delegates the
+responsibility of dividing the queue into manageable parts to a divisor (``Guzzle\Batch\BatchDivisorInterface``).
+The batch object then iterates over each array of items created by the divisor and sends them to the batch object's
+``Guzzle\Batch\BatchTransferInterface``.
+
+.. code-block:: php
+
+    use Guzzle\Batch\Batch;
+    use Guzzle\Http\BatchRequestTransfer;
+
+    // BatchRequestTransfer acts as both the divisor and transfer strategy
+    $transferStrategy = new BatchRequestTransfer(10);
+    $divisorStrategy = $transferStrategy;
+
+    $batch = new Batch($transferStrategy, $divisorStrategy);
+
+    // Add some requests to the batch queue
+    $batch->add($request1)
+        ->add($request2)
+        ->add($request3);
+
+    // Flush the queue and retrieve the flushed items
+    $arrayOfTransferredRequests = $batch->flush();
+
+.. note::
+
+    You might find that your transfer strategy will need to act as both the divisor and transfer strategy.
+
+Using the BatchBuilder
+----------------------
+
+The ``Guzzle\Batch\BatchBuilder`` makes it easier to create batch objects.  The batch builder also provides an easier
+way to add additional behaviors to your batch object.
+
+Transferring requests
+~~~~~~~~~~~~~~~~~~~~~
+
+The ``Guzzle\Http\BatchRequestTransfer`` class efficiently transfers HTTP requests in parallel by grouping batches of
+requests by the curl_multi handle that is used to transfer the requests.
+
+.. code-block:: php
+
+    use Guzzle\Batch\BatchBuilder;
+
+    $batch = BatchBuilder::factory()
+        ->transferRequests(10)
+        ->build();
+
+Transferring commands
+~~~~~~~~~~~~~~~~~~~~~
+
+The ``Guzzle\Service\Command\BatchCommandTransfer`` class efficiently transfers service commands by grouping commands
+by the client that is used to transfer them.  You can add commands to a batch object that are transferred by different
+clients, and the batch will handle the rest.
+
+.. code-block:: php
+
+    use Guzzle\Batch\BatchBuilder;
+
+    $batch = BatchBuilder::factory()
+        ->transferCommands(10)
+        ->build();
+
+    $batch->add($client->getCommand('foo'))
+        ->add($client->getCommand('baz'))
+        ->add($client->getCommand('bar'));
+
+    $commands = $batch->flush();
+
+Batch behaviors
+---------------
+
+You can add various behaviors to your batch that allow for more customizable transfers.
+
+Automatically flushing a queue
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Use the ``Guzzle\Batch\FlushingBatch`` decorator when you want to pump a large number of items into a batch queue and
+have the queue automatically flush when the size of the queue reaches a certain threshold.
+
+.. code-block:: php
+
+    use Guzzle\Batch\BatchBuilder;
+
+    $batch = BatchBuilder::factory()
+        ->transferRequests(10)
+        ->autoFlushAt(10)
+        ->build();
+
+Batch builder method: ``autoFlushAt($threshold)``
+
+Notifying on flush
+~~~~~~~~~~~~~~~~~~
+
+Use the ``Guzzle\Batch\NotifyingBatch`` decorator if you want a function to be notified each time the batch queue is
+flushed.  This is useful when paired with the flushing batch decorator.  Pass a callable to the ``notify()`` method of
+a batch builder to use this decorator with the builder.
+
+.. code-block:: php
+
+    use Guzzle\Batch\BatchBuilder;
+
+    $batch = BatchBuilder::factory()
+        ->transferRequests(10)
+        ->autoFlushAt(10)
+        ->notify(function (array $transferredItems) {
+            echo 'Transferred ' . count($transferredItems) . "items\n";
+        })
+        ->build();
+
+Batch builder method:: ``notify(callable $callback)``
+
+Keeping a history
+~~~~~~~~~~~~~~~~~
+
+Use the ``Guzzle\Batch\HistoryBatch`` decorator if you want to maintain a history of all the items transferred with
+the batch queue.
+
+.. code-block:: php
+
+    use Guzzle\Batch\BatchBuilder;
+
+    $batch = BatchBuilder::factory()
+        ->transferRequests(10)
+        ->keepHistory()
+        ->build();
+
+After transferring items, you can use the ``getHistory()`` of a batch to retrieve an array of transferred items.  Be
+sure to periodically clear the history using ``clearHistory()``.
+
+Batch builder method: ``keepHistory()``
+
+Exception buffering
+~~~~~~~~~~~~~~~~~~~
+
+Use the ``Guzzle\Batch\ExceptionBufferingBatch`` decorator to buffer exceptions during a transfer so that you can
+transfer as many items as possible then deal with the errored batches after the transfer completes.  After transfer,
+use the ``getExceptions()`` method of a batch to retrieve an array of
+``Guzzle\Batch\Exception\BatchTransferException`` objects.  You can use these exceptions to attempt to retry the
+failed batches.  Be sure to clear the buffered exceptions when you are done with them by using the
+``clearExceptions()`` method.
+
+Batch builder method: ``bufferExceptions()``

+ 94 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/conf.py

@@ -0,0 +1,94 @@
+import sys, os
+from sphinx.highlighting import lexers
+from pygments.lexers.web import PhpLexer
+
+lexers['php'] = PhpLexer(startinline=True, linenos=1)
+lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
+primary_domain = 'php'
+
+# -- General configuration -----------------------------------------------------
+
+extensions = []
+templates_path = ['_templates']
+source_suffix = '.rst'
+master_doc = 'index'
+
+project = u'Guzzle'
+copyright = u'2012, Michael Dowling'
+version = '3.0.0'
+release = '3.0.0'
+
+exclude_patterns = ['_build']
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+html_title = "Guzzle documentation"
+html_short_title = "Guzzle"
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Custom sidebar templates, maps document names to template names.
+html_sidebars = {
+    '**':       ['localtoc.html', 'leftbar.html', 'searchbox.html']
+}
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Guzzledoc'
+
+# -- Guzzle Sphinx theme setup ------------------------------------------------
+
+sys.path.insert(0, '/Users/dowling/projects/guzzle_sphinx_theme')
+
+import guzzle_sphinx_theme
+html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
+html_theme_path = guzzle_sphinx_theme.html_theme_path()
+html_theme = 'guzzle_sphinx_theme'
+
+# Guzzle theme options (see theme.conf for more information)
+html_theme_options = {
+    "index_template": "index.html",
+    "project_nav_name": "Guzzle",
+    "github_user": "guzzle",
+    "github_repo": "guzzle",
+    "disqus_comments_shortname": "guzzle",
+    "google_analytics_account": "UA-22752917-1"
+}
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'Guzzle.tex', u'Guzzle Documentation',
+   u'Michael Dowling', 'manual'),
+]
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'guzzle', u'Guzzle Documentation',
+     [u'Michael Dowling'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'Guzzle', u'Guzzle Documentation',
+   u'Michael Dowling', 'Guzzle', 'One line description of project.',
+   'Miscellaneous'),
+]

+ 73 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/docs.rst

@@ -0,0 +1,73 @@
+.. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
+
+====================
+Guzzle Documentation
+====================
+
+Getting started
+---------------
+
+.. toctree::
+   :maxdepth: 1
+
+   getting-started/overview
+   getting-started/installation
+   getting-started/faq
+
+The HTTP client
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
+   http-client/client
+   http-client/request
+   http-client/response
+   http-client/entity-bodies
+   http-client/http-redirects
+   http-client/uri-templates
+
+Plugins
+-------
+
+.. toctree::
+   :maxdepth: 1
+
+   plugins/plugins-overview
+   plugins/creating-plugins
+   plugins/async-plugin
+   plugins/backoff-plugin
+   plugins/cache-plugin
+   plugins/cookie-plugin
+   plugins/curl-auth-plugin
+   plugins/history-plugin
+   plugins/log-plugin
+   plugins/md5-validator-plugin
+   plugins/mock-plugin
+   plugins/oauth-plugin
+
+The web service client
+----------------------
+
+.. toctree::
+   :maxdepth: 1
+
+   webservice-client/webservice-client
+   webservice-client/using-the-service-builder
+   webservice-client/guzzle-service-descriptions
+   batching/batching
+   iterators/resource-iterators
+   iterators/guzzle-iterators
+
+Testing
+-------
+
+.. toctree::
+   :maxdepth: 2
+
+   testing/unit-testing
+
+API Docs
+--------
+
+`Read the API docs <http://guzzlephp.org/api/index.html>`_

+ 29 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/faq.rst

@@ -0,0 +1,29 @@
+===
+FAQ
+===
+
+What should I do if I get this error: Fatal error: Maximum function nesting level of '100' reached, aborting!
+-------------------------------------------------------------------------------------------------------------
+
+You could run into this error if you have the XDebug extension installed and you execute a lot of requests in
+callbacks.  This error message comes specifically from the XDebug extension. PHP itself does not have a function
+nesting limit. Change this setting in your php.ini to increase the limit::
+
+    xdebug.max_nesting_level = 1000
+
+[`source <http://stackoverflow.com/a/4293870/151504>`_]
+
+How can I speed up my client?
+-----------------------------
+
+There are several things you can do to speed up your client:
+
+1. Utilize a C based HTTP message parser (e.g. ``Guzzle\Parser\Message\PeclHttpMessageParser``)
+2. Disable operation validation by setting the ``command.disable_validation`` option to true on a command
+
+Why am I getting a 417 error response?
+--------------------------------------
+
+This can occur for a number of reasons, but if you are sending PUT, POST, or PATCH requests with an
+``Expect: 100-Continue`` header, a server that does not support this header will return a 417 response. You can work
+around this by calling ``$request->removeHeader('Expect');`` after setting the entity body of a request.

+ 154 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/installation.rst

@@ -0,0 +1,154 @@
+============
+Installation
+============
+
+Requirements
+------------
+
+#. PHP 5.3.3+ compiled with the cURL extension
+#. A recent version of cURL 7.16.2+ compiled with OpenSSL and zlib
+
+Installing Guzzle
+-----------------
+
+Composer
+~~~~~~~~
+
+The recommended way to install Guzzle is with `Composer <http://getcomposer.org>`_. Composer is a dependency
+management tool for PHP that allows you to declare the dependencies your project needs and installs them into your
+project.
+
+.. code-block:: bash
+
+    # Install Composer
+    curl -sS https://getcomposer.org/installer | php
+
+    # Add Guzzle as a dependency
+    php composer.phar require guzzle/guzzle:~3.9
+
+After installing, you need to require Composer's autoloader:
+
+.. code-block:: php
+
+    require 'vendor/autoload.php';
+
+You can find out more on how to install Composer, configure autoloading, and other best-practices for defining
+dependencies at `getcomposer.org <http://getcomposer.org>`_.
+
+Using only specific parts of Guzzle
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+While you can always just rely on ``guzzle/guzzle``, Guzzle provides several smaller parts of Guzzle as individual
+packages available through Composer.
+
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| Package name                                                                                  | Description                              |
++===============================================================================================+==========================================+
+| `guzzle/common <https://packagist.org/packages/guzzle/common>`_                               | Provides ``Guzzle\Common``               |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/http <https://packagist.org/packages/guzzle/http>`_                                   | Provides ``Guzzle\Http``                 |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/parser <https://packagist.org/packages/guzzle/parser>`_                               | Provides ``Guzzle\Parser``               |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/batch <https://packagist.org/packages/guzzle/batch>`_                                 | Provides ``Guzzle\Batch``                |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/cache <https://packagist.org/packages/guzzle/cache>`_                                 | Provides ``Guzzle\Cache``                |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/inflection <https://packagist.org/packages/guzzle/inflection>`_                       | Provides ``Guzzle\Inflection``           |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/iterator <https://packagist.org/packages/guzzle/iterator>`_                           | Provides ``Guzzle\Iterator``             |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/log <https://packagist.org/packages/guzzle/log>`_                                     | Provides ``Guzzle\Log``                  |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin <https://packagist.org/packages/guzzle/plugin>`_                               | Provides ``Guzzle\Plugin`` (all plugins) |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-async <https://packagist.org/packages/guzzle/plugin-async>`_                   | Provides ``Guzzle\Plugin\Async``         |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-backoff <https://packagist.org/packages/guzzle/plugin-backoff>`_               | Provides ``Guzzle\Plugin\BackoffPlugin`` |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-cache <https://packagist.org/packages/guzzle/plugin-cache>`_                   | Provides ``Guzzle\Plugin\Cache``         |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-cookie <https://packagist.org/packages/guzzle/plugin-cookie>`_                 | Provides ``Guzzle\Plugin\Cookie``        |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-error-response <https://packagist.org/packages/guzzle/plugin-error-response>`_ | Provides ``Guzzle\Plugin\ErrorResponse`` |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-history <https://packagist.org/packages/guzzle/plugin-history>`_               | Provides ``Guzzle\Plugin\History``       |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-log <https://packagist.org/packages/guzzle/plugin-log>`_                       | Provides ``Guzzle\Plugin\Log``           |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-md5 <https://packagist.org/packages/guzzle/plugin-md5>`_                       | Provides ``Guzzle\Plugin\Md5``           |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-mock <https://packagist.org/packages/guzzle/plugin-mock>`_                     | Provides ``Guzzle\Plugin\Mock``          |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/plugin-oauth <https://packagist.org/packages/guzzle/plugin-oauth>`_                   | Provides ``Guzzle\Plugin\Oauth``         |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/service <https://packagist.org/packages/guzzle/service>`_                             | Provides ``Guzzle\Service``              |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+| `guzzle/stream <https://packagist.org/packages/guzzle/stream>`_                               | Provides ``Guzzle\Stream``               |
++-----------------------------------------------------------------------------------------------+------------------------------------------+
+
+Bleeding edge
+^^^^^^^^^^^^^
+
+During your development, you can keep up with the latest changes on the master branch by setting the version
+requirement for Guzzle to ``dev-master``.
+
+.. code-block:: js
+
+   {
+      "require": {
+         "guzzle/guzzle": "dev-master"
+      }
+   }
+
+PEAR
+~~~~
+
+Guzzle can be installed through PEAR:
+
+.. code-block:: bash
+
+    pear channel-discover guzzlephp.org/pear
+    pear install guzzle/guzzle
+
+You can install a specific version of Guzzle by providing a version number suffix:
+
+.. code-block:: bash
+
+    pear install guzzle/guzzle-3.9.0
+
+Contributing to Guzzle
+----------------------
+
+In order to contribute, you'll need to checkout the source from GitHub and install Guzzle's dependencies using
+Composer:
+
+.. code-block:: bash
+
+    git clone https://github.com/guzzle/guzzle.git
+    cd guzzle && curl -s http://getcomposer.org/installer | php && ./composer.phar install --dev
+
+Guzzle is unit tested with PHPUnit. You will need to create your own phpunit.xml file in order to run the unit tests
+(or just copy phpunit.xml.dist to phpunit.xml). Run the tests using the vendored PHPUnit binary:
+
+.. code-block:: bash
+
+    vendor/bin/phpunit
+
+You'll need to install node.js v0.5.0 or newer in order to test the cURL implementation.
+
+Framework integrations
+----------------------
+
+Using Guzzle with Symfony
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bundles are available on GitHub:
+
+- `DdeboerGuzzleBundle <https://github.com/ddeboer/GuzzleBundle>`_ for Guzzle 2
+- `MisdGuzzleBundle <https://github.com/misd-service-development/guzzle-bundle>`_ for Guzzle 3
+
+Using Guzzle with Silex
+~~~~~~~~~~~~~~~~~~~~~~~
+
+A `Guzzle Silex service provider <https://github.com/guzzle/guzzle-silex-extension>`_ is available on GitHub.

+ 85 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/getting-started/overview.rst

@@ -0,0 +1,85 @@
+=================
+Welcome to Guzzle
+=================
+
+What is Guzzle?
+~~~~~~~~~~~~~~~
+
+Guzzle is a PHP HTTP client and framework for building web service clients. Guzzle takes the pain out of sending HTTP
+requests and the redundancy out of creating web service clients.
+
+Features at a glance
+--------------------
+
+- All the power of cURL with a simple interface.
+- Persistent connections and parallel requests.
+- Streams request and response bodies
+- Service descriptions for quickly building clients.
+- Powered by the Symfony2 EventDispatcher.
+- Use all of the code or only specific components.
+- Plugins for caching, logging, OAuth, mocks, and more
+- Includes a custom node.js webserver to test your clients.
+- Service descriptions for defining the inputs and outputs of an API
+- Resource iterators for traversing paginated resources
+- Batching for sending a large number of requests as efficiently as possible
+
+.. code-block:: php
+
+    // Really simple using a static facade
+    Guzzle\Http\StaticClient::mount();
+    $response = Guzzle::get('http://guzzlephp.org');
+
+    // More control using a client class
+    $client = new \Guzzle\Http\Client('http://guzzlephp.org');
+    $request = $client->get('/');
+    $response = $request->send();
+
+License
+-------
+
+Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
+
+    Copyright (c) 2013 Michael Dowling <https://github.com/mtdowling>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+
+Contributing
+------------
+
+Guidelines
+~~~~~~~~~~
+
+This is still a work in progress, but there are only a few rules:
+
+1. Guzzle follows PSR-0, PSR-1, and PSR-2
+2. All pull requests must include unit tests to ensure the change works as expected and to prevent future regressions
+
+Reporting a security vulnerability
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+We want to ensure that Guzzle is a secure HTTP client library for everyone. If you've discovered a security
+vulnerability in Guzzle, we appreciate your help in disclosing it to us in a
+`responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
+
+Publicly disclosing a vulnerability can put the entire community at risk. If you've discovered a security concern,
+please email us at security@guzzlephp.org. We'll work with you to make sure that we understand the scope of the issue,
+and that we fully address your concern. We consider correspondence sent to security@guzzlephp.org our highest priority,
+and work to address any issues that arise as quickly as possible.
+
+After a security vulnerability has been corrected, a security hotfix release will be deployed as soon as possible.

+ 569 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/client.rst

@@ -0,0 +1,569 @@
+======================
+The Guzzle HTTP client
+======================
+
+Guzzle gives PHP developers complete control over HTTP requests while utilizing HTTP/1.1 best practices. Guzzle's HTTP
+functionality is a robust framework built on top of the `PHP libcurl bindings <http://www.php.net/curl>`_.
+
+The three main parts of the Guzzle HTTP client are:
+
++--------------+-------------------------------------------------------------------------------------------------------+
+| Clients      | ``Guzzle\Http\Client`` (creates and sends requests, associates a response with a request)             |
++--------------+-------------------------------------------------------------------------------------------------------+
+| Requests     | ``Guzzle\Http\Message\Request`` (requests with no body),                                              |
+|              | ``Guzzle\Http\Message\EntityEnclosingRequest`` (requests with a body)                                 |
++--------------+-------------------------------------------------------------------------------------------------------+
+| Responses    | ``Guzzle\Http\Message\Response``                                                                      |
++--------------+-------------------------------------------------------------------------------------------------------+
+
+Creating a Client
+-----------------
+
+Clients create requests, send requests, and set responses on a request object. When instantiating a client object,
+you can pass an optional "base URL" and optional array of configuration options. A base URL is a
+:doc:`URI template <uri-templates>` that contains the URL of a remote server. When creating requests with a relative
+URL, the base URL of a client will be merged into the request's URL.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+
+    // Create a client and provide a base URL
+    $client = new Client('https://api.github.com');
+
+    $request = $client->get('/user');
+    $request->setAuth('user', 'pass');
+    echo $request->getUrl();
+    // >>> https://api.github.com/user
+
+    // You must send a request in order for the transfer to occur
+    $response = $request->send();
+
+    echo $response->getBody();
+    // >>> {"type":"User", ...
+
+    echo $response->getHeader('Content-Length');
+    // >>> 792
+
+    $data = $response->json();
+    echo $data['type'];
+    // >>> User
+
+Base URLs
+~~~~~~~~~
+
+Notice that the URL provided to the client's ``get()`` method is relative. Relative URLs will always merge into the
+base URL of the client. There are a few rules that control how the URLs are merged.
+
+.. tip::
+
+    Guzzle follows `RFC 3986 <http://tools.ietf.org/html/rfc3986#section-5.2>`_ when merging base URLs and
+    relative URLs.
+
+In the above example, we passed ``/user`` to the ``get()`` method of the client. This is a relative URL, so it will
+merge into the base URL of the client-- resulting in the derived URL of ``https://api.github.com/users``.
+
+``/user`` is a relative URL but uses an absolute path because it contains the leading slash. Absolute paths will
+overwrite any existing path of the base URL. If an absolute path is provided (e.g. ``/path/to/something``), then the
+path specified in the base URL of the client will be replaced with the absolute path, and the query string provided
+by the relative URL will replace the query string of the base URL.
+
+Omitting the leading slash and using relative paths will add to the path of the base URL of the client. So using a
+client base URL of ``https://api.twitter.com/v1.1`` and creating a GET request with ``statuses/user_timeline.json``
+will result in a URL of ``https://api.twitter.com/v1.1/statuses/user_timeline.json``. If a relative path and a query
+string are provided, then the relative path will be appended to the base URL path, and the query string provided will
+be merged into the query string of the base URL.
+
+If an absolute URL is provided (e.g. ``http://httpbin.org/ip``), then the request will completely use the absolute URL
+as-is without merging in any of the URL parts specified in the base URL.
+
+Configuration options
+~~~~~~~~~~~~~~~~~~~~~
+
+The second argument of the client's constructor is an array of configuration data. This can include URI template data
+or special options that alter the client's behavior:
+
++-------------------------------+-------------------------------------------------------------------------------------+
+| ``request.options``           | Associative array of :ref:`Request options <request-options>` to apply to every     |
+|                               | request created by the client.                                                      |
++-------------------------------+-------------------------------------------------------------------------------------+
+| ``redirect.disable``          | Disable HTTP redirects for every request created by the client.                     |
++-------------------------------+-------------------------------------------------------------------------------------+
+| ``curl.options``              | Associative array of cURL options to apply to every request created by the client.  |
+|                               | if either the key or value of an entry in the array is a string, Guzzle will        |
+|                               | attempt to find a matching defined cURL constant automatically (e.g.                |
+|                               | "CURLOPT_PROXY" will be converted to the constant ``CURLOPT_PROXY``).               |
++-------------------------------+-------------------------------------------------------------------------------------+
+| ``ssl.certificate_authority`` | Set to true to use the Guzzle bundled SSL certificate bundle (this is used by       |
+|                               | default, 'system' to use the bundle on your system, a string pointing to a file to  |
+|                               | use a specific certificate file, a string pointing to a directory to use multiple   |
+|                               | certificates, or ``false`` to disable SSL validation (not recommended).             |
+|                               |                                                                                     |
+|                               | When using  Guzzle inside of a phar file, the bundled SSL certificate will be       |
+|                               | extracted to your system's temp folder, and each time a client is created an MD5    |
+|                               | check will be performed to ensure the integrity of the certificate.                 |
++-------------------------------+-------------------------------------------------------------------------------------+
+| ``command.params``            | When using a ``Guzzle\Service\Client`` object, this is an associative array of      |
+|                               | default options to set on each command created by the client.                       |
++-------------------------------+-------------------------------------------------------------------------------------+
+
+Here's an example showing how to set various configuration options, including default headers to send with each request,
+default query string parameters to add to each request, a default auth scheme for each request, and a proxy to use for
+each request. Values can be injected into the client's base URL using variables from the configuration array.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+
+    $client = new Client('https://api.twitter.com/{version}', array(
+        'version'        => 'v1.1',
+        'request.options' => array(
+            'headers' => array('Foo' => 'Bar'),
+            'query'   => array('testing' => '123'),
+            'auth'    => array('username', 'password', 'Basic|Digest|NTLM|Any'),
+            'proxy'   => 'tcp://localhost:80'
+        )
+    ));
+
+Setting a custom User-Agent
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The default Guzzle User-Agent header is ``Guzzle/<Guzzle_Version> curl/<curl_version> PHP/<PHP_VERSION>``. You can
+customize the User-Agent header of a client by calling the ``setUserAgent()`` method of a Client object.
+
+.. code-block:: php
+
+    // Completely override the default User-Agent
+    $client->setUserAgent('Test/123');
+
+    // Prepend a string to the default User-Agent
+    $client->setUserAgent('Test/123', true);
+
+Creating requests with a client
+-------------------------------
+
+A Client object exposes several methods used to create Request objects:
+
+* Create a custom HTTP request: ``$client->createRequest($method, $uri, array $headers, $body, $options)``
+* Create a GET request: ``$client->get($uri, array $headers, $options)``
+* Create a HEAD request: ``$client->head($uri, array $headers, $options)``
+* Create a DELETE request: ``$client->delete($uri, array $headers, $body, $options)``
+* Create a POST request: ``$client->post($uri, array $headers, $postBody, $options)``
+* Create a PUT request: ``$client->put($uri, array $headers, $body, $options)``
+* Create a PATCH request: ``$client->patch($uri, array $headers, $body, $options)``
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+
+    $client = new Client('http://baseurl.com/api/v1');
+
+    // Create a GET request using Relative to base URL
+    // URL of the request: http://baseurl.com/api/v1/path?query=123&value=abc)
+    $request = $client->get('path?query=123&value=abc');
+    $response = $request->send();
+
+    // Create HEAD request using a relative URL with an absolute path
+    // URL of the request: http://baseurl.com/path?query=123&value=abc
+    $request = $client->head('/path?query=123&value=abc');
+    $response = $request->send();
+
+    // Create a DELETE request using an absolute URL
+    $request = $client->delete('http://www.example.com/path?query=123&value=abc');
+    $response = $request->send();
+
+    // Create a PUT request using the contents of a PHP stream as the body
+    // Specify custom HTTP headers
+    $request = $client->put('http://www.example.com/upload', array(
+        'X-Header' => 'My Header'
+    ), fopen('http://www.test.com/', 'r'));
+    $response = $request->send();
+
+    // Create a POST request and add the POST files manually
+    $request = $client->post('http://localhost:8983/solr/update')
+        ->addPostFiles(array('file' => '/path/to/documents.xml'));
+    $response = $request->send();
+
+    // Check if a resource supports the DELETE method
+    $supportsDelete = $client->options('/path')->send()->isMethodAllowed('DELETE');
+    $response = $request->send();
+
+Client objects create Request objects using a request factory (``Guzzle\Http\Message\RequestFactoryInterface``).
+You can inject a custom request factory into the Client using ``$client->setRequestFactory()``, but you can typically
+rely on a Client's default request factory.
+
+Static clients
+--------------
+
+You can use Guzzle's static client facade to more easily send simple HTTP requests.
+
+.. code-block:: php
+
+    // Mount the client so that you can access it at \Guzzle
+    Guzzle\Http\StaticClient::mount();
+    $response = Guzzle::get('http://guzzlephp.org');
+
+Each request method of the static client (e.g. ``get()``, ``post()`, ``put()``, etc) accepts an associative array of request
+options to apply to the request.
+
+.. code-block:: php
+
+    $response = Guzzle::post('http://test.com', array(
+        'headers' => array('X-Foo' => 'Bar'),
+        'body'    => array('Test' => '123'),
+        'timeout' => 10
+    ));
+
+.. _request-options:
+
+Request options
+---------------
+
+Request options can be specified when creating a request or in the ``request.options`` parameter of a client. These
+options can control various aspects of a request including: headers to send, query string data, where the response
+should be downloaded, proxies, auth, etc.
+
+headers
+~~~~~~~
+
+Associative array of headers to apply to the request. When specified in the ``$options`` argument of a client creational
+method (e.g. ``get()``, ``post()``, etc), the headers in the ``$options`` array will overwrite headers specified in the
+``$headers`` array.
+
+.. code-block:: php
+
+    $request = $client->get($url, array(), array(
+        'headers' => array('X-Foo' => 'Bar')
+    ));
+
+Headers can be specified on a client to add default headers to every request sent by a client.
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client();
+
+    // Set a single header using path syntax
+    $client->setDefaultOption('headers/X-Foo', 'Bar');
+
+    // Set all headers
+    $client->setDefaultOption('headers', array('X-Foo' => 'Bar'));
+
+.. note::
+
+    In addition to setting request options when creating requests or using the ``setDefaultOption()`` method, any
+    default client request option can be set using a client's config object:
+
+    .. code-block:: php
+
+        $client->getConfig()->setPath('request.options/headers/X-Foo', 'Bar');
+
+query
+~~~~~
+
+Associative array of query string parameters to the request. When specified in the ``$options`` argument of a client
+creational method, the query string parameters in the ``$options`` array will overwrite query string parameters
+specified in the `$url`.
+
+.. code-block:: php
+
+    $request = $client->get($url, array(), array(
+        'query' => array('abc' => '123')
+    ));
+
+Query string parameters can be specified on a client to add default query string parameters to every request sent by a
+client.
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client();
+
+    // Set a single query string parameter using path syntax
+    $client->setDefaultOption('query/abc', '123');
+
+    // Set an array of default query string parameters
+    $client->setDefaultOption('query', array('abc' => '123'));
+
+body
+~~~~
+
+Sets the body of a request. The value supplied to the body option can be a ``Guzzle\Http\EntityBodyInterface``, string,
+fopen resource, or array when sending POST requests. When a ``body`` request option is supplied, the option value will
+overwrite the ``$body`` argument of a client creational method.
+
+auth
+~~~~
+
+Specifies and array of HTTP authorization parameters parameters to use with the request. The array must contain the
+username in index [0], the password in index [1], and can optionally contain the authentication type in index [2].
+The available authentication types are: "Basic" (default), "Digest", "NTLM", or "Any".
+
+.. code-block:: php
+
+    $request = $client->get($url, array(), array(
+        'auth' => array('username', 'password', 'Digest')
+    ));
+
+    // You can add auth headers to every request of a client
+    $client->setDefaultOption('auth', array('username', 'password', 'Digest'));
+
+cookies
+~~~~~~~
+
+Specifies an associative array of cookies to add to the request.
+
+allow_redirects
+~~~~~~~~~~~~~~~
+
+Specifies whether or not the request should follow redirects. Requests will follow redirects by default. Set
+``allow_redirects`` to ``false`` to disable redirects.
+
+save_to
+~~~~~~~
+
+The ``save_to`` option specifies where the body of a response is downloaded. You can pass the path to a file, an fopen
+resource, or a ``Guzzle\Http\EntityBodyInterface`` object.
+
+See :ref:`Changing where a response is downloaded <request-set-response-body>` for more information on setting the
+`save_to` option.
+
+events
+~~~~~~
+
+The `events` option makes it easy to attach listeners to the various events emitted by a request object. The `events`
+options must be an associative array mapping an event name to a Closure or array the contains a Closure and the
+priority of the event.
+
+.. code-block:: php
+
+    $request = $client->get($url, array(), array(
+        'events' => array(
+            'request.before_send' => function (\Guzzle\Common\Event $e) {
+                echo 'About to send ' . $e['request'];
+            }
+        )
+    ));
+
+    // Using the static client:
+    Guzzle::get($url, array(
+        'events' => array(
+            'request.before_send' => function (\Guzzle\Common\Event $e) {
+                echo 'About to send ' . $e['request'];
+            }
+        )
+    ));
+
+plugins
+~~~~~~~
+
+The `plugins` options makes it easy to attach an array of plugins to a request.
+
+.. code-block:: php
+
+    // Using the static client:
+    Guzzle::get($url, array(
+        'plugins' => array(
+            new Guzzle\Plugin\Cache\CachePlugin(),
+            new Guzzle\Plugin\Cookie\CookiePlugin()
+        )
+    ));
+
+exceptions
+~~~~~~~~~~
+
+The `exceptions` option can be used to disable throwing exceptions for unsuccessful HTTP response codes
+(e.g. 404, 500, etc). Set `exceptions` to false to not throw exceptions.
+
+params
+~~~~~~
+
+The `params` options can be used to specify an associative array of data parameters to add to a request.  Note that
+these are not query string parameters.
+
+timeout / connect_timeout
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can specify the maximum number of seconds to allow for an entire transfer to take place before timing out using
+the `timeout` request option. You can specify the maximum number of seconds to wait while trying to connect using the
+`connect_timeout` request option. Set either of these options to 0 to wait indefinitely.
+
+.. code-block:: php
+
+    $request = $client->get('http://www.example.com', array(), array(
+        'timeout'         => 20,
+        'connect_timeout' => 1.5
+    ));
+
+verify
+~~~~~~
+
+Set to true to enable SSL certificate validation (the default), false to disable SSL certificate validation, or supply
+the path to a CA bundle to enable verification using a custom certificate.
+
+cert
+~~~~
+
+The `cert` option lets you specify a PEM formatted SSL client certificate to use with servers that require one. If the
+certificate requires a password, provide an array with the password as the second item.
+
+This would typically be used in conjunction with the `ssl_key` option.
+
+.. code-block:: php
+
+    $request = $client->get('https://www.example.com', array(), array(
+        'cert' => '/etc/pki/client_certificate.pem'
+    )
+
+    $request = $client->get('https://www.example.com', array(), array(
+        'cert' => array('/etc/pki/client_certificate.pem', 's3cr3tp455w0rd')
+    )
+
+ssl_key
+~~~~~~~
+
+The `ssl_key` option lets you specify a file containing your PEM formatted private key, optionally protected by a password.
+Note: your password is sensitive, keep the PHP script containing it safe.
+
+This would typically be used in conjunction with the `cert` option.
+
+.. code-block:: php
+
+    $request = $client->get('https://www.example.com', array(), array(
+        'ssl_key' => '/etc/pki/private_key.pem'
+    )
+
+    $request = $client->get('https://www.example.com', array(), array(
+        'ssl_key' => array('/etc/pki/private_key.pem', 's3cr3tp455w0rd')
+    )
+
+proxy
+~~~~~
+
+The `proxy` option is used to specify an HTTP proxy (e.g. `http://username:password@192.168.16.1:10`).
+
+debug
+~~~~~
+
+The `debug` option is used to show verbose cURL output for a transfer.
+
+stream
+~~~~~~
+
+When using a static client, you can set the `stream` option to true to return a `Guzzle\Stream\Stream` object that can
+be used to pull data from a stream as needed (rather than have cURL download the entire contents of a response to a
+stream all at once).
+
+.. code-block:: php
+
+    $stream = Guzzle::get('http://guzzlephp.org', array('stream' => true));
+    while (!$stream->feof()) {
+        echo $stream->readLine();
+    }
+
+Sending requests
+----------------
+
+Requests can be sent by calling the ``send()`` method of a Request object, but you can also send requests using the
+``send()`` method of a Client.
+
+.. code-block:: php
+
+    $request = $client->get('http://www.amazon.com');
+    $response = $client->send($request);
+
+Sending requests in parallel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The Client's ``send()`` method accept a single ``Guzzle\Http\Message\RequestInterface`` object or an array of
+RequestInterface objects. When an array is specified, the requests will be sent in parallel.
+
+Sending many HTTP requests serially (one at a time) can cause an unnecessary delay in a script's execution. Each
+request must complete before a subsequent request can be sent. By sending requests in parallel, a pool of HTTP
+requests can complete at the speed of the slowest request in the pool, significantly reducing the amount of time
+needed to execute multiple HTTP requests. Guzzle provides a wrapper for the curl_multi functions in PHP.
+
+Here's an example of sending three requests in parallel using a client object:
+
+.. code-block:: php
+
+    use Guzzle\Common\Exception\MultiTransferException;
+
+    try {
+        $responses = $client->send(array(
+            $client->get('http://www.google.com/'),
+            $client->head('http://www.google.com/'),
+            $client->get('https://www.github.com/')
+        ));
+    } catch (MultiTransferException $e) {
+
+        echo "The following exceptions were encountered:\n";
+        foreach ($e as $exception) {
+            echo $exception->getMessage() . "\n";
+        }
+
+        echo "The following requests failed:\n";
+        foreach ($e->getFailedRequests() as $request) {
+            echo $request . "\n\n";
+        }
+
+        echo "The following requests succeeded:\n";
+        foreach ($e->getSuccessfulRequests() as $request) {
+            echo $request . "\n\n";
+        }
+    }
+
+If the requests succeed, an array of ``Guzzle\Http\Message\Response`` objects are returned. A single request failure
+will not cause the entire pool of requests to fail. Any exceptions thrown while transferring a pool of requests will
+be aggregated into a ``Guzzle\Common\Exception\MultiTransferException`` exception.
+
+Plugins and events
+------------------
+
+Guzzle provides easy to use request plugins that add behavior to requests based on signal slot event notifications
+powered by the
+`Symfony2 Event Dispatcher component <http://symfony.com/doc/2.0/components/event_dispatcher/introduction.html>`_. Any
+event listener or subscriber attached to a Client object will automatically be attached to each request created by the
+client.
+
+Using the same cookie session for each request
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Attach a ``Guzzle\Plugin\Cookie\CookiePlugin`` to a client which will in turn add support for cookies to every request
+created by a client, and each request will use the same cookie session:
+
+.. code-block:: php
+
+    use Guzzle\Plugin\Cookie\CookiePlugin;
+    use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
+
+    // Create a new cookie plugin
+    $cookiePlugin = new CookiePlugin(new ArrayCookieJar());
+
+    // Add the cookie plugin to the client
+    $client->addSubscriber($cookiePlugin);
+
+.. _client-events:
+
+Events emitted from a client
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A ``Guzzle\Http\Client`` object emits the following events:
+
++------------------------------+--------------------------------------------+------------------------------------------+
+| Event name                   | Description                                | Event data                               |
++==============================+============================================+==========================================+
+| client.create_request        | Called when a client creates a request     | * client: The client                     |
+|                              |                                            | * request: The created request           |
++------------------------------+--------------------------------------------+------------------------------------------+
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+    use Guzzle\Http\Client;
+
+    $client = new Client();
+
+    // Add a listener that will echo out requests as they are created
+    $client->getEventDispatcher()->addListener('client.create_request', function (Event $e) {
+        echo 'Client object: ' . spl_object_hash($e['client']) . "\n";
+        echo "Request object: {$e['request']}\n";
+    });

+ 151 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/entity-bodies.rst

@@ -0,0 +1,151 @@
+===========================
+Request and response bodies
+===========================
+
+`Entity body <http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html>`_ is the term used for the body of an HTTP
+message. The entity body of requests and responses is inherently a
+`PHP stream <http://php.net/manual/en/book.stream.php>`_ in Guzzle. The body of the request can be either a string or
+a PHP stream which are converted into a ``Guzzle\Http\EntityBody`` object using its factory method. When using a
+string, the entity body is stored in a `temp PHP stream <http://www.php.net/manual/en/wrappers.php.php>`_. The use of
+temp PHP streams helps to protect your application from running out of memory when sending or receiving large entity
+bodies in your messages. When more than 2MB of data is stored in a temp stream, it automatically stores the data on
+disk rather than in memory.
+
+EntityBody objects provide a great deal of functionality: compression, decompression, calculate the Content-MD5,
+calculate the Content-Length (when the resource is repeatable), guessing the Content-Type, and more. Guzzle doesn't
+need to load an entire entity body into a string when sending or retrieving data; entity bodies are streamed when
+being uploaded and downloaded.
+
+Here's an example of gzip compressing a text file then sending the file to a URL:
+
+.. code-block:: php
+
+    use Guzzle\Http\EntityBody;
+
+    $body = EntityBody::factory(fopen('/path/to/file.txt', 'r+'));
+    echo $body->read(1024);
+    $body->seek(0, SEEK_END);
+    $body->write('foo');
+    echo $body->ftell();
+    $body->rewind();
+
+    // Send a request using the body
+    $response = $client->put('http://localhost:8080/uploads', null, $body)->send();
+
+The body of the request can be specified in the ``Client::put()`` or ``Client::post()``  method, or, you can specify
+the body of the request by calling the ``setBody()`` method of any
+``Guzzle\Http\Message\EntityEnclosingRequestInterface`` object.
+
+Compression
+-----------
+
+You can compress the contents of an EntityBody object using the ``compress()`` method. The compress method accepts a
+filter that must match to one of the supported
+`PHP stream filters <http://www.php.net/manual/en/filters.compression.php>`_ on your system (e.g. `zlib.deflate`,
+``bzip2.compress``, etc). Compressing an entity body will stream the entire entity body through a stream compression
+filter into a temporary PHP stream. You can uncompress an entity body using the ``uncompress()`` method and passing
+the PHP stream filter to use when decompressing the stream (e.g. ``zlib.inflate``).
+
+.. code-block:: php
+
+    use Guzzle\Http\EntityBody;
+
+    $body = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
+    echo $body->getSize();
+    // >>> 1048576
+
+    // Compress using the default zlib.deflate filter
+    $body->compress();
+    echo $body->getSize();
+    // >>> 314572
+
+    // Decompress the stream
+    $body->uncompress();
+    echo $body->getSize();
+    // >>> 1048576
+
+Decorators
+----------
+
+Guzzle provides several EntityBody decorators that can be used to add functionality to an EntityBody at runtime.
+
+IoEmittingEntityBody
+~~~~~~~~~~~~~~~~~~~~
+
+This decorator will emit events when data is read from a stream or written to a stream. Add an event subscriber to the
+entity body's ``body.read`` or ``body.write`` methods to receive notifications when data data is transferred.
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+    use Guzzle\Http\EntityBody;
+    use Guzzle\Http\IoEmittingEntityBody;
+
+    $original = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
+    $body = new IoEmittingEntityBody($original);
+
+    // Listen for read events
+    $body->getEventDispatcher()->addListener('body.read', function (Event $e) {
+        // Grab data from the event
+        $entityBody = $e['body'];
+        // Amount of data retrieved from the body
+        $lengthOfData = $e['length'];
+        // The actual data that was read
+        $data = $e['read'];
+    });
+
+    // Listen for write events
+    $body->getEventDispatcher()->addListener('body.write', function (Event $e) {
+        // Grab data from the event
+        $entityBody = $e['body'];
+        // The data that was written
+        $data = $e['write'];
+        // The actual amount of data that was written
+        $data = $e['read'];
+    });
+
+ReadLimitEntityBody
+~~~~~~~~~~~~~~~~~~~
+
+The ReadLimitEntityBody decorator can be used to transfer a subset or slice of an existing EntityBody object. This can
+be useful for breaking a large file into smaller pieces to be sent in chunks (e.g. Amazon S3's multipart upload API).
+
+.. code-block:: php
+
+    use Guzzle\Http\EntityBody;
+    use Guzzle\Http\ReadLimitEntityBody;
+
+    $original = EntityBody::factory(fopen('/tmp/test.txt', 'r+'));
+    echo $original->getSize();
+    // >>> 1048576
+
+    // Limit the size of the body to 1024 bytes and start reading from byte 2048
+    $body = new ReadLimitEntityBody($original, 1024, 2048);
+    echo $body->getSize();
+    // >>> 1024
+    echo $body->ftell();
+    // >>> 0
+
+CachingEntityBody
+~~~~~~~~~~~~~~~~~
+
+The CachingEntityBody decorator is used to allow seeking over previously read bytes on non-seekable read streams. This
+can be useful when transferring a non-seekable entity body fails due to needing to rewind the stream (for example,
+resulting from a redirect). Data that is read from the remote stream will be buffered in a PHP temp stream so that
+previously read bytes are cached first in memory, then on disk.
+
+.. code-block:: php
+
+    use Guzzle\Http\EntityBody;
+    use Guzzle\Http\CachingEntityBody;
+
+    $original = EntityBody::factory(fopen('http://www.google.com', 'r'));
+    $body = new CachingEntityBody($original);
+
+    $body->read(1024);
+    echo $body->ftell();
+    // >>> 1024
+
+    $body->seek(0);
+    echo $body->ftell();
+    // >>> 0

+ 99 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/http-redirects.rst

@@ -0,0 +1,99 @@
+==============
+HTTP redirects
+==============
+
+By default, Guzzle will automatically follow redirects using the non-RFC compliant implementation used by most web
+browsers. This means that redirects for POST requests are followed by a GET request. You can force RFC compliance by
+enabling the strict mode on a request's parameter object:
+
+.. code-block:: php
+
+    // Set per request
+    $request = $client->post();
+    $request->getParams()->set('redirect.strict', true);
+
+    // You can set globally on a client so all requests use strict redirects
+    $client->getConfig()->set('request.params', array(
+        'redirect.strict' => true
+    ));
+
+By default, Guzzle will redirect up to 5 times before throwing a ``Guzzle\Http\Exception\TooManyRedirectsException``.
+You can raise or lower this value using the ``redirect.max`` parameter of a request object:
+
+.. code-block:: php
+
+    $request->getParams()->set('redirect.max', 2);
+
+Redirect history
+----------------
+
+You can get the number of redirects of a request using the resulting response object's ``getRedirectCount()`` method.
+Similar to cURL's ``effective_url`` property, Guzzle provides the effective URL, or the last redirect URL that returned
+the request, in a response's ``getEffectiveUrl()`` method.
+
+When testing or debugging, it is often useful to see a history of redirects for a particular request. This can be
+achieved using the HistoryPlugin.
+
+.. code-block:: php
+
+    $request = $client->get('/');
+    $history = new Guzzle\Plugin\History\HistoryPlugin();
+    $request->addSubscriber($history);
+    $response = $request->send();
+
+    // Get the last redirect URL or the URL of the request that received
+    // this response
+    echo $response->getEffectiveUrl();
+
+    // Get the number of redirects
+    echo $response->getRedirectCount();
+
+    // Iterate over each sent request and response
+    foreach ($history->getAll() as $transaction) {
+        // Request object
+        echo $transaction['request']->getUrl() . "\n";
+        // Response object
+        echo $transaction['response']->getEffectiveUrl() . "\n";
+    }
+
+    // Or, simply cast the HistoryPlugin to a string to view each request and response
+    echo $history;
+
+Disabling redirects
+-------------------
+
+You can disable redirects on a client by passing a configuration option in the client's constructor:
+
+.. code-block:: php
+
+    $client = new Client(null, array('redirect.disable' => true));
+
+You can also disable redirects per request:
+
+.. code-block:: php
+
+    $request = $client->get($url, array(), array('allow_redirects' => false));
+
+Redirects and non-repeatable streams
+------------------------------------
+
+If you are redirected when sending data from a non-repeatable stream and some of the data has been read off of the
+stream, then you will get a ``Guzzle\Http\Exception\CouldNotRewindStreamException``. You can get around this error by
+adding a custom rewind method to the entity body object being sent in the request.
+
+.. code-block:: php
+
+    $request = $client->post(
+        'http://httpbin.com/redirect/2',
+        null,
+        fopen('http://httpbin.com/get', 'r')
+    );
+
+    // Add a custom function that can be used to rewind the stream
+    // (reopen in this example)
+    $request->getBody()->setRewindFunction(function ($body) {
+        $body->setStream(fopen('http://httpbin.com/get', 'r'));
+        return true;
+    );
+
+    $response = $client->send();

+ 667 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/request.rst

@@ -0,0 +1,667 @@
+=====================
+Using Request objects
+=====================
+
+HTTP request messages
+---------------------
+
+Request objects are all about building an HTTP message. Each part of an HTTP request message can be set individually
+using methods on the request object or set in bulk using the ``setUrl()`` method. Here's the format of an HTTP request
+with each part of the request referencing the method used to change it::
+
+    PUT(a) /path(b)?query=123(c) HTTP/1.1(d)
+    X-Header(e): header
+    Content-Length(e): 4
+
+    data(f)
+
++-------------------------+---------------------------------------------------------------------------------+
+| a. **Method**           | The request method can only be set when instantiating a request                 |
++-------------------------+---------------------------------------------------------------------------------+
+| b. **Path**             | ``$request->setPath('/path');``                                                 |
++-------------------------+---------------------------------------------------------------------------------+
+| c. **Query**            | ``$request->getQuery()->set('query', '123');``                                  |
++-------------------------+---------------------------------------------------------------------------------+
+| d. **Protocol version** | ``$request->setProtocolVersion('1.1');``                                        |
++-------------------------+---------------------------------------------------------------------------------+
+| e. **Header**           | ``$request->setHeader('X-Header', 'header');``                                  |
++-------------------------+---------------------------------------------------------------------------------+
+| f. **Entity Body**      |  ``$request->setBody('data'); // Only available with PUT, POST, PATCH, DELETE`` |
++-------------------------+---------------------------------------------------------------------------------+
+
+Creating requests with a client
+-------------------------------
+
+Client objects are responsible for creating HTTP request objects.
+
+GET requests
+~~~~~~~~~~~~
+
+`GET requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3>`_ are the most common form of HTTP
+requests. When you visit a website in your browser, the HTML of the website is downloaded using a GET request. GET
+requests are idempotent requests that are typically used to download content (an entity) identified by a request URL.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+
+    $client = new Client();
+
+    // Create a request that has a query string and an X-Foo header
+    $request = $client->get('http://www.amazon.com?a=1', array('X-Foo' => 'Bar'));
+
+    // Send the request and get the response
+    $response = $request->send();
+
+You can change where the body of a response is downloaded on any request using the
+``$request->setResponseBody(string|EntityBodyInterface|resource)`` method of a request. You can also set the ``save_to``
+option of a request:
+
+.. code-block:: php
+
+    // Send the response body to a file
+    $request = $client->get('http://test.com', array(), array('save_to' => '/path/to/file'));
+
+    // Send the response body to an fopen resource
+    $request = $client->get('http://test.com', array(), array('save_to' => fopen('/path/to/file', 'w')));
+
+HEAD requests
+~~~~~~~~~~~~~
+
+`HEAD requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4>`_ work exactly like GET requests except
+that they do not actually download the response body (entity) of the response message. HEAD requests are useful for
+retrieving meta information about an entity identified by a Request-URI.
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client();
+    $request = $client->head('http://www.amazon.com');
+    $response = $request->send();
+    echo $response->getContentLength();
+    // >>> Will output the Content-Length header value
+
+DELETE requests
+~~~~~~~~~~~~~~~
+
+A `DELETE method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7>`_ requests that the origin server
+delete the resource identified by the Request-URI.
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client();
+    $request = $client->delete('http://example.com');
+    $response = $request->send();
+
+POST requests
+~~~~~~~~~~~~~
+
+While `POST requests <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5>`_ can be used for a number of
+reasons, POST requests are often used when submitting HTML form data to a website. POST requests can include an entity
+body in the HTTP request.
+
+POST requests in Guzzle are sent with an ``application/x-www-form-urlencoded`` Content-Type header if POST fields are
+present but no files are being sent in the POST. If files are specified in the POST request, then the Content-Type
+header will become ``multipart/form-data``.
+
+The ``post()`` method of a client object accepts four arguments: the URL, optional headers, post fields, and an array of
+request options. To send files in the POST request, prepend the ``@`` symbol to the array value (just like you would if
+you were using the PHP ``curl_setopt`` function).
+
+Here's how to create a multipart/form-data POST request containing files and fields:
+
+.. code-block:: php
+
+    $request = $client->post('http://httpbin.org/post', array(), array(
+        'custom_field' => 'my custom value',
+        'file_field'   => '@/path/to/file.xml'
+    ));
+
+    $response = $request->send();
+
+.. note::
+
+    Remember to **always** sanitize user input when sending POST requests:
+
+    .. code-block:: php
+
+        // Prevent users from accessing sensitive files by sanitizing input
+        $_POST = array('firstname' => '@/etc/passwd');
+        $request = $client->post('http://www.example.com', array(), array (
+            'firstname' => str_replace('@', '', $_POST['firstname'])
+        ));
+
+You can alternatively build up the contents of a POST request.
+
+.. code-block:: php
+
+    $request = $client->post('http://httpbin.org/post')
+        ->setPostField('custom_field', 'my custom value')
+        ->addPostFile('file', '/path/to/file.xml');
+
+    $response = $request->send();
+
+Raw POST data
+^^^^^^^^^^^^^
+
+POST requests can also contain raw POST data that is not related to HTML forms.
+
+.. code-block:: php
+
+    $request = $client->post('http://httpbin.org/post', array(), 'this is the body');
+    $response = $request->send();
+
+You can set the body of POST request using the ``setBody()`` method of the
+``Guzzle\Http\Message\EntityEnclosingRequest`` object. This method accepts a string, a resource returned from
+``fopen``, or a ``Guzzle\Http\EntityBodyInterface`` object.
+
+.. code-block:: php
+
+    $request = $client->post('http://httpbin.org/post');
+    // Set the body of the POST to stream the contents of /path/to/large_body.txt
+    $request->setBody(fopen('/path/to/large_body.txt', 'r'));
+    $response = $request->send();
+
+PUT requests
+~~~~~~~~~~~~
+
+The `PUT method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6>`_ requests that the enclosed entity be
+stored under the supplied Request-URI. PUT requests are similar to POST requests in that they both can send an entity
+body in the request message.
+
+The body of a PUT request (any any ``Guzzle\Http\Message\EntityEnclosingRequestInterface`` object) is always stored as
+a ``Guzzle\Http\Message\EntityBodyInterface`` object. This allows a great deal of flexibility when sending data to a
+remote server. For example, you can stream the contents of a stream returned by fopen, stream the contents of a
+callback function, or simply send a string of data.
+
+.. code-block:: php
+
+    $request = $client->put('http://httpbin.org/put', array(), 'this is the body');
+    $response = $request->send();
+
+Just like with POST, PATH, and DELETE requests, you can set the body of a PUT request using the ``setBody()`` method.
+
+.. code-block:: php
+
+    $request = $client->put('http://httpbin.org/put');
+    $request->setBody(fopen('/path/to/large_body.txt', 'r'));
+    $response = $request->send();
+
+PATCH requests
+~~~~~~~~~~~~~~
+
+`PATCH requests <http://tools.ietf.org/html/rfc5789>`_ are used to modify a resource.
+
+.. code-block:: php
+
+    $request = $client->patch('http://httpbin.org', array(), 'this is the body');
+    $response = $request->send();
+
+OPTIONS requests
+~~~~~~~~~~~~~~~~
+
+The `OPTIONS method <http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2>`_ represents a request for
+information about the communication options available on the request/response chain identified by the Request-URI.
+
+.. code-block:: php
+
+    $request = $client->options('http://httpbin.org');
+    $response = $request->send();
+
+    // Check if the PUT method is supported by this resource
+    var_export($response->isMethodAllows('PUT'));
+
+Custom requests
+~~~~~~~~~~~~~~~
+
+You can create custom HTTP requests that use non-standard HTTP methods using the ``createRequest()`` method of a
+client object.
+
+.. code-block:: php
+
+    $request = $client->createRequest('COPY', 'http://example.com/foo', array(
+        'Destination' => 'http://example.com/bar',
+        'Overwrite'   => 'T'
+    ));
+    $response = $request->send();
+
+Query string parameters
+-----------------------
+
+Query string parameters of a request are owned by a request's ``Guzzle\Http\Query`` object that is accessible by
+calling ``$request->getQuery()``. The Query class extends from ``Guzzle\Common\Collection`` and allows you to set one
+or more query string parameters as key value pairs. You can set a parameter on a Query object using the
+``set($key, $value)`` method or access the query string object like an associative array. Any previously specified
+value for a key will be overwritten when using ``set()``. Use ``add($key, $value)`` to add a value to query string
+object, and in the event of a collision with an existing value at a specific key, the value will be converted to an
+array that contains all of the previously set values.
+
+.. code-block:: php
+
+    $request = new Guzzle\Http\Message\Request('GET', 'http://www.example.com?foo=bar&abc=123');
+
+    $query = $request->getQuery();
+    echo "{$query}\n";
+    // >>> foo=bar&abc=123
+
+    $query->remove('abc');
+    echo "{$query}\n";
+    // >>> foo=bar
+
+    $query->set('foo', 'baz');
+    echo "{$query}\n";
+    // >>> foo=baz
+
+    $query->add('foo', 'bar');
+    echo "{$query}\n";
+    // >>> foo%5B0%5D=baz&foo%5B1%5D=bar
+
+Whoah! What happened there? When ``foo=bar`` was added to the existing ``foo=baz`` query string parameter, the
+aggregator associated with the Query object was used to help convert multi-value query string parameters into a string.
+Let's disable URL-encoding to better see what's happening.
+
+.. code-block:: php
+
+    $query->useUrlEncoding(false);
+    echo "{$query}\n";
+    // >>> foo[0]=baz&foo[1]=bar
+
+.. note::
+
+    URL encoding can be disabled by passing false, enabled by passing true, set to use RFC 1738 by passing
+    ``Query::FORM_URLENCODED`` (internally uses PHP's ``urlencode`` function), or set to RFC 3986 by passing
+    ``Query::RFC_3986`` (this is the default and internally uses PHP's ``rawurlencode`` function).
+
+As you can see, the multiple values were converted into query string parameters following the default PHP convention of
+adding numerically indexed square bracket suffixes to each key (``foo[0]=baz&foo[1]=bar``). The strategy used to convert
+multi-value parameters into a string can be customized using the ``setAggregator()`` method of the Query class. Guzzle
+ships with the following query string aggregators by default:
+
+1. ``Guzzle\Http\QueryAggregator\PhpAggregator``: Aggregates using PHP style brackets (e.g. ``foo[0]=baz&foo[1]=bar``)
+2. ``Guzzle\Http\QueryAggregator\DuplicateAggregator``: Performs no aggregation and allows for key value pairs to be
+   repeated in a URL (e.g. ``foo=baz&foo=bar``)
+3. ``Guzzle\Http\QueryAggregator\CommaAggregator``: Aggregates using commas (e.g. ``foo=baz,bar``)
+
+.. _http-message-headers:
+
+HTTP Message Headers
+--------------------
+
+HTTP message headers are case insensitive, multiple occurrences of any header can be present in an HTTP message
+(whether it's valid or not), and some servers require specific casing of particular headers. Because of this, request
+and response headers are stored in ``Guzzle\Http\Message\Header`` objects. The Header object can be cast as a string,
+counted, or iterated to retrieve each value from the header. Casting a Header object to a string will return all of
+the header values concatenated together using a glue string (typically ", ").
+
+A request (and response) object have several methods that allow you to retrieve and modify headers.
+
+* ``getHeaders()``: Get all of the headers of a message as a ``Guzzle\Http\Message\Header\HeaderCollection`` object.
+* ``getHeader($header)``: Get a specific header from a message. If the header exists, you'll get a
+  ``Guzzle\Http\Message\Header`` object. If the header does not exist, this methods returns ``null``.
+* ``hasHeader($header)``: Returns true or false based on if the message has a particular header.
+* ``setHeader($header, $value)``: Set a header value and overwrite any previously set value for this header.
+* ``addHeader($header, $value)``: Add a header with a particular name. If a previous value was already set by the same,
+  then the header will contain multiple values.
+* ``removeHeader($header)``: Remove a header by name from the message.
+
+.. code-block:: php
+
+    $request = new Request('GET', 'http://httpbin.com/cookies');
+    // addHeader will set and append to any existing header values
+    $request->addHeader('Foo', 'bar');
+    $request->addHeader('foo', 'baz');
+    // setHeader overwrites any existing values
+    $request->setHeader('Test', '123');
+
+    // Request headers can be cast as a string
+    echo $request->getHeader('Foo');
+    // >>> bar, baz
+    echo $request->getHeader('Test');
+    // >>> 123
+
+    // You can count the number of headers of a particular case insensitive name
+    echo count($request->getHeader('foO'));
+    // >>> 2
+
+    // You can iterate over Header objects
+    foreach ($request->getHeader('foo') as $header) {
+        echo $header . "\n";
+    }
+
+    // You can get all of the request headers as a Guzzle\Http\Message\Header\HeaderCollection object
+    $headers = $request->getHeaders();
+
+    // Missing headers return NULL
+    var_export($request->getHeader('Missing'));
+    // >>> null
+
+    // You can see all of the different variations of a header by calling raw() on the Header
+    var_export($request->getHeader('foo')->raw());
+
+Setting the body of a request
+-----------------------------
+
+Requests that can send a body (e.g. PUT, POST, DELETE, PATCH) are instances of
+``Guzzle\Http\Message\EntityEnclosingRequestInterface``. Entity enclosing requests contain several methods that allow
+you to specify the body to send with a request.
+
+Use the ``setBody()`` method of a request to set the body that will be sent with a request. This method accepts a
+string, a resource returned by ``fopen()``, an array, or an instance of ``Guzzle\Http\EntityBodyInterface``. The body
+will then be streamed from the underlying ``EntityBodyInterface`` object owned by the request. When setting the body
+of the request, you can optionally specify a Content-Type header and whether or not to force the request to use
+chunked Transfer-Encoding.
+
+.. code-block:: php
+
+    $request = $client->put('/user.json');
+    $request->setBody('{"foo":"baz"}', 'application/json');
+
+Content-Type header
+~~~~~~~~~~~~~~~~~~~
+
+Guzzle will automatically add a Content-Type header to a request if the Content-Type can be guessed based on the file
+extension of the payload being sent or the file extension present in the path of a request.
+
+.. code-block:: php
+
+    $request = $client->put('/user.json', array(), '{"foo":"bar"}');
+    // The Content-Type was guessed based on the path of the request
+    echo $request->getHeader('Content-Type');
+    // >>> application/json
+
+    $request = $client->put('/user.json');
+    $request->setBody(fopen('/tmp/user_data.json', 'r'));
+    // The Content-Type was guessed based on the path of the entity body
+    echo $request->getHeader('Content-Type');
+    // >>> application/json
+
+Transfer-Encoding: chunked header
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When sending HTTP requests that contain a payload, you must let the remote server know how to determine when the entire
+message has been sent. This usually is done by supplying a ``Content-Length`` header that tells the origin server the
+size of the body that is to be sent. In some cases, the size of the payload being sent in a request cannot be known
+before initiating the transfer. In these cases (when using HTTP/1.1), you can use the ``Transfer-Encoding: chunked``
+header.
+
+If the Content-Length cannot be determined (i.e. using a PHP ``http://`` stream), then Guzzle will automatically add
+the ``Transfer-Encoding: chunked`` header to the request.
+
+.. code-block:: php
+
+    $request = $client->put('/user.json');
+    $request->setBody(fopen('http://httpbin.org/get', 'r'));
+
+    // The Content-Length could not be determined
+    echo $request->getHeader('Transfer-Encoding');
+    // >>> chunked
+
+See :doc:`/http-client/entity-bodies` for more information on entity bodies.
+
+Expect: 100-Continue header
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``Expect: 100-Continue`` header is used to help a client prevent sending a large payload to a server that will
+reject the request. This allows clients to fail fast rather than waste bandwidth sending an erroneous payload. Guzzle
+will automatically add the ``Expect: 100-Continue`` header to a request when the size of the payload exceeds 1MB or if
+the body of the request is not seekable (this helps to prevent errors when a non-seekable body request is redirected).
+
+.. note::
+
+    If you find that your larger requests are taking too long to complete, you should first check if the
+    ``Expect: 100-Continue`` header is being sent with the request. Some servers do not respond well to this header,
+    which causes cURL to sleep for `1 second <http://curl.haxx.se/mail/lib-2010-01/0182.html>`_.
+
+POST fields and files
+~~~~~~~~~~~~~~~~~~~~~
+
+Any entity enclosing request can send POST style fields and files. This includes POST, PUT, PATCH, and DELETE requests.
+Any request that has set POST fields or files will use cURL's POST message functionality.
+
+.. code-block:: php
+
+    $request = $client->post('/post');
+    // Set an overwrite any previously specified value
+    $request->setPostField('foo', 'bar');
+    // Append a value to any existing values
+    $request->getPostFields()->add('foo', 'baz');
+    // Remove a POST field by name
+    $request->removePostField('fizz');
+
+    // Add a file to upload (forces multipart/form-data)
+    $request->addPostFile('my_file', '/path/to/file', 'plain/text');
+    // Remove a POST file by POST key name
+    $request->removePostFile('my_other_file');
+
+.. tip::
+
+    Adding a large number of POST fields to a POST request is faster if you use the ``addPostFields()`` method so that
+    you can add and process multiple fields with a single call. Adding multiple POST files is also faster using
+    ``addPostFiles()``.
+
+Working with cookies
+--------------------
+
+Cookies can be modified and retrieved from a request using the following methods:
+
+.. code-block:: php
+
+    $request->addCookie($name, $value);
+    $request->removeCookie($name);
+    $value = $request->getCookie($name);
+    $valueArray = $request->getCookies();
+
+Use the :doc:`cookie plugin </plugins/cookie-plugin>` if you need to reuse cookies between requests.
+
+.. _request-set-response-body:
+
+Changing where a response is downloaded
+----------------------------------------
+
+When a request is sent, the body of the response will be stored in a PHP temp stream by default. You can change the
+location in which the response will be downloaded using ``$request->setResponseBody($body)`` or the ``save_to`` request
+option. This can be useful for downloading the contents of a URL to a specific file.
+
+Here's an example of using request options:
+
+.. code-block:: php
+
+    $request = $this->client->get('http://example.com/large.mov', array(), array(
+        'save_to' => '/tmp/large_file.mov'
+    ));
+    $request->send();
+    var_export(file_exists('/tmp/large_file.mov'));
+    // >>> true
+
+Here's an example of using ``setResponseBody()``:
+
+.. code-block:: php
+
+    $body = fopen('/tmp/large_file.mov', 'w');
+    $request = $this->client->get('http://example.com/large.mov');
+    $request->setResponseBody($body);
+
+    // You can more easily specify the name of a file to save the contents
+    // of the response to by passing a string to ``setResponseBody()``.
+
+    $request = $this->client->get('http://example.com/large.mov');
+    $request->setResponseBody('/tmp/large_file.mov');
+
+Custom cURL options
+-------------------
+
+Most of the functionality implemented in the libcurl bindings has been simplified and abstracted by Guzzle. Developers
+who need access to `cURL specific functionality <http://www.php.net/curl_setopt>`_ can still add cURL handle
+specific behavior to Guzzle HTTP requests by modifying the cURL options collection of a request:
+
+.. code-block:: php
+
+    $request->getCurlOptions()->set(CURLOPT_LOW_SPEED_LIMIT, 200);
+
+Other special options that can be set in the ``curl.options`` array include:
+
++-------------------------+---------------------------------------------------------------------------------+
+| debug                   | Adds verbose cURL output to a temp stream owned by the cURL handle object       |
++-------------------------+---------------------------------------------------------------------------------+
+| progress                | Instructs cURL to emit events when IO events occur. This allows you to be       |
+|                         | notified when bytes are transferred over the wire by subscribing to a request's |
+|                         | ``curl.callback.read``, ``curl.callback.write``, and ``curl.callback.progress`` |
+|                         | events.                                                                         |
++-------------------------+---------------------------------------------------------------------------------+
+
+Request options
+---------------
+
+Requests options can be specified when creating a request or in the ``request.options`` parameter of a client. These
+options can control various aspects of a request including: headers to send, query string data, where the response
+should be downloaded, proxies, auth, etc.
+
+.. code-block:: php
+
+    $request = $client->get($url, $headers, array('proxy' => 'http://proxy.com'));
+
+See :ref:`Request options <request-options>` for more information.
+
+Working with errors
+-------------------
+
+HTTP errors
+~~~~~~~~~~~
+
+Requests that receive a 4xx or 5xx response will throw a ``Guzzle\Http\Exception\BadResponseException``. More
+specifically, 4xx errors throw a ``Guzzle\Http\Exception\ClientErrorResponseException``, and 5xx errors throw a
+``Guzzle\Http\Exception\ServerErrorResponseException``. You can catch the specific exceptions or just catch the
+BadResponseException to deal with either type of error. Here's an example of catching a generic BadResponseException:
+
+.. code-block:: php
+
+    try {
+        $response = $client->get('/not_found.xml')->send();
+    } catch (Guzzle\Http\Exception\BadResponseException $e) {
+        echo 'Uh oh! ' . $e->getMessage();
+        echo 'HTTP request URL: ' . $e->getRequest()->getUrl() . "\n";
+        echo 'HTTP request: ' . $e->getRequest() . "\n";
+        echo 'HTTP response status: ' . $e->getResponse()->getStatusCode() . "\n";
+        echo 'HTTP response: ' . $e->getResponse() . "\n";
+    }
+
+Throwing an exception when a 4xx or 5xx response is encountered is the default behavior of Guzzle requests. This
+behavior can be overridden by adding an event listener with a higher priority than -255 that stops event propagation.
+You can subscribe to ``request.error`` to receive notifications any time an unsuccessful response is received.
+
+You can change the response that will be associated with the request by calling ``setResponse()`` on the
+``$event['request']`` object passed into your listener, or by changing the ``$event['response']`` value of the
+``Guzzle\Common\Event`` object that is passed to your listener. Transparently changing the response associated with a
+request by modifying the event allows you to retry failed requests without complicating the code that uses the client.
+This might be useful for sending requests to a web service that has expiring auth tokens. When a response shows that
+your token has expired, you can get a new token, retry the request with the new token, and return the successful
+response to the user.
+
+Here's an example of retrying a request using updated authorization credentials when a 401 response is received,
+overriding the response of the original request with the new response, and still allowing the default exception
+behavior to be called when other non-200 response status codes are encountered:
+
+.. code-block:: php
+
+    // Add custom error handling to any request created by this client
+    $client->getEventDispatcher()->addListener('request.error', function(Event $event) {
+
+        if ($event['response']->getStatusCode() == 401) {
+
+            $newRequest = $event['request']->clone();
+            $newRequest->setHeader('X-Auth-Header', MyApplication::getNewAuthToken());
+            $newResponse = $newRequest->send();
+
+            // Set the response object of the request without firing more events
+            $event['response'] = $newResponse;
+
+            // You can also change the response and fire the normal chain of
+            // events by calling $event['request']->setResponse($newResponse);
+
+            // Stop other events from firing when you override 401 responses
+            $event->stopPropagation();
+        }
+
+    });
+
+cURL errors
+~~~~~~~~~~~
+
+Connection problems and cURL specific errors can also occur when transferring requests using Guzzle. When Guzzle
+encounters cURL specific errors while transferring a single request, a ``Guzzle\Http\Exception\CurlException`` is
+thrown with an informative error message and access to the cURL error message.
+
+A ``Guzzle\Http\Exception\MultiTransferException`` exception is thrown when a cURL specific error occurs while
+transferring multiple requests in parallel. You can then iterate over all of the exceptions encountered during the
+transfer.
+
+Plugins and events
+------------------
+
+Guzzle request objects expose various events that allow you to hook in custom logic. A request object owns a
+``Symfony\Component\EventDispatcher\EventDispatcher`` object that can be accessed by calling
+``$request->getEventDispatcher()``. You can use the event dispatcher to add listeners (a simple callback function) or
+event subscribers (classes that listen to specific events of a dispatcher). You can add event subscribers to a request
+directly by just calling ``$request->addSubscriber($mySubscriber);``.
+
+.. _request-events:
+
+Events emitted from a request
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A ``Guzzle\Http\Message\Request`` and ``Guzzle\Http\Message\EntityEnclosingRequest`` object emit the following events:
+
++------------------------------+--------------------------------------------+------------------------------------------+
+| Event name                   | Description                                | Event data                               |
++==============================+============================================+==========================================+
+| request.before_send          | About to send request                      | * request: Request to be sent            |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.sent                 | Sent the request                           | * request: Request that was sent         |
+|                              |                                            | * response: Received response            |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.complete             | Completed a full HTTP transaction          | * request: Request that was sent         |
+|                              |                                            | * response: Received response            |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.success              | Completed a successful request             | * request: Request that was sent         |
+|                              |                                            | * response: Received response            |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.error                | Completed an unsuccessful request          | * request: Request that was sent         |
+|                              |                                            | * response: Received response            |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.exception            | An unsuccessful response was               | * request: Request                       |
+|                              | received.                                  | * response: Received response            |
+|                              |                                            | * exception: BadResponseException        |
++------------------------------+--------------------------------------------+------------------------------------------+
+| request.receive.status_line  | Received the start of a response           | * line: Full response start line         |
+|                              |                                            | * status_code: Status code               |
+|                              |                                            | * reason_phrase: Reason phrase           |
+|                              |                                            | * previous_response: (e.g. redirect)     |
++------------------------------+--------------------------------------------+------------------------------------------+
+| curl.callback.progress       | cURL progress event (only dispatched when  | * handle: CurlHandle                     |
+|                              | ``emit_io`` is set on a request's curl     | * download_size: Total download size     |
+|                              | options)                                   | * downloaded: Bytes downloaded           |
+|                              |                                            | * upload_size: Total upload bytes        |
+|                              |                                            | * uploaded: Bytes uploaded               |
++------------------------------+--------------------------------------------+------------------------------------------+
+| curl.callback.write          | cURL event called when data is written to  | * request: Request                       |
+|                              | an outgoing stream                         | * write: Data being written              |
++------------------------------+--------------------------------------------+------------------------------------------+
+| curl.callback.read           | cURL event called when data is written to  | * request: Request                       |
+|                              | an incoming stream                         | * read: Data being read                  |
++------------------------------+--------------------------------------------+------------------------------------------+
+
+Creating a request event listener
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Here's an example that listens to the ``request.complete`` event of a request and prints the request and response.
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+
+    $request = $client->get('http://www.google.com');
+
+    // Echo out the response that was received
+    $request->getEventDispatcher()->addListener('request.complete', function (Event $e) {
+        echo $e['request'] . "\n\n";
+        echo $e['response'];
+    });

+ 141 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/response.rst

@@ -0,0 +1,141 @@
+======================
+Using Response objects
+======================
+
+Sending a request will return a ``Guzzle\Http\Message\Response`` object. You can view the raw  HTTP response message by
+casting the Response object to a string. Casting the response to a string will return the entity body of the response
+as a string too, so this might be an expensive operation if the entity body is stored in a file or network stream. If
+you only want to see the response headers, you can call ``getRawHeaders()``.
+
+Response status line
+--------------------
+
+The different parts of a response's `status line <http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1>`_
+(the first line of the response HTTP message) are easily retrievable.
+
+.. code-block:: php
+
+    $response = $client->get('http://www.amazon.com')->send();
+
+    echo $response->getStatusCode();      // >>> 200
+    echo $response->getReasonPhrase();    // >>> OK
+    echo $response->getProtocol();        // >>> HTTP
+    echo $response->getProtocolVersion(); // >>> 1.1
+
+You can determine the type of the response using several helper methods:
+
+.. code-block:: php
+
+    $response->isSuccessful(); // true
+    $response->isInformational();
+    $response->isRedirect();
+    $response->isClientError();
+    $response->isServerError();
+
+Response headers
+----------------
+
+The Response object contains helper methods for retrieving common response headers. These helper methods normalize the
+variations of HTTP response headers.
+
+.. code-block:: php
+
+    $response->getCacheControl();
+    $response->getContentType();
+    $response->getContentLength();
+    $response->getContentEncoding();
+    $response->getContentMd5();
+    $response->getEtag();
+    // etc... There are methods for every known response header
+
+You can interact with the Response headers using the same exact methods used to interact with Request headers. See
+:ref:`http-message-headers` for more information.
+
+.. code-block:: php
+
+    echo $response->getHeader('Content-Type');
+    echo $response->getHeader('Content-Length');
+    echo $response->getHeaders()['Content-Type']; // PHP 5.4
+
+Response body
+-------------
+
+The entity body object of a response can be retrieved by calling ``$response->getBody()``. The response EntityBody can
+be cast to a string, or you can pass ``true`` to this method to retrieve the body as a string.
+
+.. code-block:: php
+
+    $request = $client->get('http://www.amazon.com');
+    $response = $request->send();
+    echo $response->getBody();
+
+See :doc:`/http-client/entity-bodies` for more information on entity bodies.
+
+JSON Responses
+~~~~~~~~~~~~~~
+
+You can easily parse and use a JSON response as an array using the ``json()`` method of a response. This method will
+always return an array if the response is valid JSON or if the response body is empty. You will get an exception if you
+call this method and the response is not valid JSON.
+
+.. code-block:: php
+
+    $data = $response->json();
+    echo gettype($data);
+    // >>> array
+
+XML Responses
+~~~~~~~~~~~~~
+
+You can easily parse and use a XML response as SimpleXMLElement object using the ``xml()`` method of a response. This
+method will always return a SimpleXMLElement object if the response is valid XML or if the response body is empty. You
+will get an exception if you call this method and the response is not valid XML.
+
+.. code-block:: php
+
+    $xml = $response->xml();
+    echo $xml->foo;
+    // >>> Bar!
+
+Streaming responses
+-------------------
+
+Some web services provide streaming APIs that allow a client to keep a HTTP request open for an extended period of
+time while polling and reading. Guzzle provides a simple way to convert HTTP request messages into
+``Guzzle\Stream\Stream`` objects so that you can send the initial headers of a request, read the response headers, and
+pull in the response body manually as needed.
+
+Here's an example using the Twitter Streaming API to track the keyword "bieber":
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Stream\PhpStreamRequestFactory;
+
+    $client = new Client('https://stream.twitter.com/1');
+
+    $request = $client->post('statuses/filter.json', null, array(
+        'track' => 'bieber'
+    ));
+
+    $request->setAuth('myusername', 'mypassword');
+
+    $factory = new PhpStreamRequestFactory();
+    $stream = $factory->fromRequest($request);
+
+    // Read until the stream is closed
+    while (!$stream->feof()) {
+        // Read a line from the stream
+        $line = $stream->readLine();
+        // JSON decode the line of data
+        $data = json_decode($line, true);
+    }
+
+You can use the ``stream`` request option when using a static client to more easily create a streaming response.
+
+.. code-block:: php
+
+    $stream = Guzzle::get('http://guzzlephp.org', array('stream' => true));
+    while (!$stream->feof()) {
+        echo $stream->readLine();
+    }

+ 52 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/http-client/uri-templates.rst

@@ -0,0 +1,52 @@
+=============
+URI templates
+=============
+
+The ``$uri`` passed to one of the client's request creational methods or the base URL of a client can utilize URI
+templates. Guzzle supports the entire `URI templates RFC <http://tools.ietf.org/html/rfc6570>`_. URI templates add a
+special syntax to URIs that replace template place holders with user defined variables.
+
+Every request created by a Guzzle HTTP client passes through a URI template so that URI template expressions are
+automatically expanded:
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client('https://example.com/', array('a' => 'hi'));
+    $request = $client->get('/{a}');
+
+Because of URI template expansion, the URL of the above request will become ``https://example.com/hi``. Notice that
+the template was expanded using configuration variables of the client. You can pass in custom URI template variables
+by passing the URI of your request as an array where the first index of the array is the URI template and the second
+index of the array are template variables that are merged into the client's configuration variables.
+
+.. code-block:: php
+
+    $request = $client->get(array('/test{?a,b}', array('b' => 'there')));
+
+The URL for this request will become ``https://test.com?a=hi&b=there``. URI templates aren't limited to just simple
+variable replacements;  URI templates can provide an enormous amount of flexibility when creating request URIs.
+
+.. code-block:: php
+
+    $request = $client->get(array('http://example.com{+path}{/segments*}{?query,data*}', array(
+        'path'     => '/foo/bar',
+        'segments' => array('one', 'two'),
+        'query'    => 'test',
+        'data'     => array(
+            'more' => 'value'
+        )
+    )));
+
+The resulting URL would become ``http://example.com/foo/bar/one/two?query=test&more=value``.
+
+By default, URI template expressions are enclosed in an opening and closing brace (e.g. ``{var}``). If you are working
+with a web service that actually uses braces (e.g. Solr), then you can specify a custom regular expression to use to
+match URI template expressions.
+
+.. code-block:: php
+
+    $client->getUriTemplate()->setRegex('/\<\$(.+)\>/');
+    $client->get('/<$a>');
+
+You can learn about all of the different features of URI templates by reading the
+`URI templates RFC <http://tools.ietf.org/html/rfc6570>`_.

+ 5 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/index.rst

@@ -0,0 +1,5 @@
+.. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
+.. toctree::
+    :hidden:
+
+    docs.rst

+ 97 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/guzzle-iterators.rst

@@ -0,0 +1,97 @@
+================
+Guzzle iterators
+================
+
+Guzzle provides several SPL iterators that can be used with other SPL iterators, including Guzzle resource iterators.
+Guzzle's ``guzzle/iterator`` component can also be used independently of the rest of Guzzle through Packagist and
+Composer: https://packagist.org/packages/guzzle/iterator
+
+ChunkedIterator
+---------------
+
+Pulls out multiple values from an inner iterator and yields and array of values for each outer iteration -- essentially
+pulling out chunks of values from the inner iterator.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\ChunkedIterator;
+
+    $inner = new ArrayIterator(range(0, 8));
+    $chunkedIterator = new ChunkedIterator($inner, 2);
+
+    foreach ($chunkedIterator as $chunk) {
+        echo implode(', ', $chunk) . "\n";
+    }
+
+    // >>> 0, 1
+    // >>> 2, 3
+    // >>> 4, 5
+    // >>> 6, 7
+    // >>> 8
+
+FilterIterator
+--------------
+
+This iterator is used to filter values out of the inner iterator. This iterator can be used when PHP 5.4's
+CallbackFilterIterator is not available.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\FilterIterator;
+
+    $inner = new ArrayIterator(range(1, 10));
+    $filterIterator = new FilterIterator($inner, function ($value) {
+        return $value % 2;
+    });
+
+    foreach ($filterIterator as $value) {
+        echo $value . "\n";
+    }
+
+    // >>> 2
+    // >>> 4
+    // >>> 6
+    // >>> 8
+    // >>> 10
+
+MapIterator
+-----------
+
+This iterator modifies the values of the inner iterator before yielding.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\MapIterator;
+
+    $inner = new ArrayIterator(range(0, 3));
+
+    $mapIterator = new MapIterator($inner, function ($value) {
+        return $value * 10;
+    });
+
+    foreach ($mapIterator as $value) {
+        echo $value . "\n";
+    }
+
+    // >>> 0
+    // >>> 10
+    // >>> 20
+    // >>> 30
+
+MethodProxyIterator
+-------------------
+
+This decorator is useful when you need to expose a specific method from an inner iterator that might be wrapper
+by one or more iterator decorators. This decorator proxies missing method calls to each inner iterator until one
+of the inner iterators can fulfill the call.
+
+.. code-block:: php
+
+    use Guzzle\Iterator\MethodProxyIterator;
+
+    $inner = new \ArrayIterator();
+    $proxy = new MethodProxyIterator($inner);
+
+    // Proxy method calls to the ArrayIterator
+    $proxy->append('a');
+    $proxy->append('b');

+ 149 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/iterators/resource-iterators.rst

@@ -0,0 +1,149 @@
+==================
+Resource iterators
+==================
+
+Web services often implement pagination in their responses which requires the end-user to issue a series of consecutive
+requests in order to fetch all of the data they asked for. Users of your web service client should not be responsible
+for implementing the logic involved in iterating through pages of results. Guzzle provides a simple resource iterator
+foundation to make it easier on web service client developers to offer a useful abstraction layer.
+
+Getting an iterator from a client
+---------------------------------
+
+    ResourceIteratorInterface Guzzle\Service\Client::getIterator($command [, array $commandOptions, array $iteratorOptions ])
+
+The ``getIterator`` method of a ``Guzzle\Service\ClientInterface`` object provides a convenient interface for
+instantiating a resource iterator for a specific command. This method implicitly uses a
+``Guzzle\Service\Resource\ResourceIteratorFactoryInterface`` object to create resource iterators. Pass an
+instantiated command object or the name of a command in the first argument. When passing the name of a command, the
+command factory of the client will create the command by name using the ``$commandOptions`` array. The third argument
+may be used to pass an array of options to the constructor of the instantiated ``ResourceIteratorInterface`` object.
+
+.. code-block:: php
+
+    $iterator = $client->getIterator('get_users');
+
+    foreach ($iterator as $user) {
+        echo $user['name'] . ' age ' . $user['age'] . PHP_EOL;
+    }
+
+The above code sample might execute a single request or a thousand requests. As a consumer of a web service, I don't
+care. I just want to iterate over all of the users.
+
+Iterator options
+~~~~~~~~~~~~~~~~
+
+The two universal options that iterators should support are ``limit`` and ``page_size``. Using the ``limit`` option
+tells the resource iterator to attempt to limit the total number of iterated resources to a specific amount. Keep in
+mind that this is not always possible due to limitations that may be inherent to a web service. The ``page_size``
+option is used to tell a resource iterator how many resources to request per page of results. Much like the ``limit``
+option, you can not rely on getting back exactly the number of resources your specify in the ``page_size`` option.
+
+.. note::
+
+    The ``limit`` and ``page_size`` options can also be specified on an iterator using the ``setLimit($limit)`` and
+    ``setPageSize($pageSize)`` methods.
+
+Resolving iterator class names
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The default resource iterator factory of a client object expects that your iterators are stored under the ``Model``
+folder of your client and that an iterator is names after the CamelCase name of a command followed by the word
+"Iterator". For example, if you wanted to create an iterator for the ``get_users`` command, then your iterator class
+would be ``Model\GetUsersIterator`` and would be stored in ``Model/GetUsersIterator.php``.
+
+Creating an iterator
+--------------------
+
+While not required, resource iterators in Guzzle typically iterate using a ``Guzzle\Service\Command\CommandInterface``
+object. ``Guzzle\Service\Resource\ResourceIterator``, the default iterator implementation that you should extend,
+accepts a command object and array of iterator options in its constructor. The command object passed to the resource
+iterator is expected to be ready to execute and not previously executed. The resource iterator keeps a reference of
+this command and clones the original command each time a subsequent request needs to be made to fetch more data.
+
+Implement the sendRequest method
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The most important thing (and usually the only thing) you need to do when creating a resource iterator is to implement
+the ``sendRequest()`` method of the resource iterator. The ``sendRequest()`` method is called when you begin
+iterating or if there are no resources left to iterate and it you expect to retrieve more resources by making a
+subsequent request. The ``$this->command`` property of the resource iterator is updated with a cloned copy of the
+original command object passed into the constructor of the iterator. Use this command object to issue your subsequent
+requests.
+
+The ``sendRequest()`` method must return an array of the resources you retrieved from making the subsequent call.
+Returning an empty array will stop the iteration. If you suspect that your web service client will occasionally return
+an empty result set but still requires further iteration, then you must implement a sort of loop in your
+``sendRequest()`` method that will continue to issue subsequent requests until your reach the end of the paginated
+result set or until additional resources are retrieved from the web service.
+
+Update the nextToken property
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Beyond fetching more results, the ``sendRequest()`` method is responsible for updating the ``$this->nextToken``
+property of the iterator. Setting this property to anything other than null tells the iterator that issuing a
+subsequent request using the nextToken value will probably return more results. You must continually update this
+value in your ``sendRequest()`` method as each response is received from the web service.
+
+Example iterator
+----------------
+
+Let's say you want to implement a resource iterator for the ``get_users`` command of your web service. The
+``get_users`` command receives a response that contains a list of users, and if there are more pages of results to
+retrieve, returns a value called ``next_user``. This return value is known as the **next token** and should be used to
+issue subsequent requests.
+
+Assume the response to a ``get_users`` command returns JSON data that looks like this:
+
+.. code-block:: javascript
+
+    {
+        "users": [
+            { "name": "Craig Johnson", "age": 10 },
+            { "name": "Tom Barker", "age": 20 },
+            { "name": "Bob Mitchell", "age": 74 }
+        ],
+        "next_user": "Michael Dowling"
+    }
+
+Assume that because there is a ``next_user`` value, there will be more users if a subsequent request is issued. If the
+``next_user`` value is missing or null, then we know there are no more results to fetch. Let's implement a resource
+iterator for this command.
+
+.. code-block:: php
+
+    namespace MyService\Model;
+
+    use Guzzle\Service\Resource\ResourceIterator;
+
+    /**
+     * Iterate over a get_users command
+     */
+    class GetUsersIterator extends ResourceIterator
+    {
+        protected function sendRequest()
+        {
+            // If a next token is set, then add it to the command
+            if ($this->nextToken) {
+                $this->command->set('next_user', $this->nextToken);
+            }
+
+            // Execute the command and parse the result
+            $result = $this->command->execute();
+
+            // Parse the next token
+            $this->nextToken = isset($result['next_user']) ? $result['next_user'] : false;
+
+            return $result['users'];
+        }
+    }
+
+As you can see, it's pretty simple to implement an iterator. There are a few things that you should notice from this
+example:
+
+1. You do not need to create a new command in the ``sendRequest()`` method. A new command object is cloned from the
+   original command passed into the constructor of the iterator before the ``sendRequest()`` method is called.
+   Remember that the resource iterator expects a command that has not been executed.
+2. When the ``sendRequest()`` method is first called, you will not have a ``$this->nextToken`` value, so always check
+   before setting it on a command. Notice that the next token is being updated each time a request is sent.
+3. After fetching more resources from the service, always return an array of resources.

+ 18 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/async-plugin.rst

@@ -0,0 +1,18 @@
+============
+Async plugin
+============
+
+The AsyncPlugin allows you to send requests that do not wait on a response. This is handled through cURL by utilizing
+the progress event. When a request has sent all of its data to the remote server, Guzzle adds a 1ms timeout on the
+request and instructs cURL to not download the body of the response. The async plugin then catches the exception and
+adds a mock response to the request, along with an X-Guzzle-Async header to let you know that the response was not
+fully downloaded.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Async\AsyncPlugin;
+
+    $client = new Client('http://www.example.com');
+    $client->addSubscriber(new AsyncPlugin());
+    $response = $client->get()->send();

+ 22 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/backoff-plugin.rst

@@ -0,0 +1,22 @@
+====================
+Backoff retry plugin
+====================
+
+The ``Guzzle\Plugin\Backoff\BackoffPlugin`` automatically retries failed HTTP requests using custom backoff strategies:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Backoff\BackoffPlugin;
+
+    $client = new Client('http://www.test.com/');
+    // Use a static factory method to get a backoff plugin using the exponential backoff strategy
+    $backoffPlugin = BackoffPlugin::getExponentialBackoff();
+
+    // Add the backoff plugin to the client object
+    $client->addSubscriber($backoffPlugin);
+
+The BackoffPlugin's constructor accepts a ``Guzzle\Plugin\Backoff\BackoffStrategyInterface`` object that is used to
+determine when a retry should be issued and how long to delay between retries. The above code example shows how to
+attach a BackoffPlugin to a client that is pre-configured to retry failed 500 and 503 responses using truncated
+exponential backoff (emulating the behavior of Guzzle 2's ExponentialBackoffPlugin).

+ 169 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cache-plugin.rst

@@ -0,0 +1,169 @@
+=================
+HTTP Cache plugin
+=================
+
+Guzzle can leverage HTTP's caching specifications using the ``Guzzle\Plugin\Cache\CachePlugin``. The CachePlugin
+provides a private transparent proxy cache that caches HTTP responses. The caching logic, based on
+`RFC 2616 <http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html>`_, uses HTTP headers to control caching behavior,
+cache lifetime, and supports Vary, ETag, and Last-Modified based revalidation:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Doctrine\Common\Cache\FilesystemCache;
+    use Guzzle\Cache\DoctrineCacheAdapter;
+    use Guzzle\Plugin\Cache\CachePlugin;
+    use Guzzle\Plugin\Cache\DefaultCacheStorage;
+
+    $client = new Client('http://www.test.com/');
+
+    $cachePlugin = new CachePlugin(array(
+        'storage' => new DefaultCacheStorage(
+            new DoctrineCacheAdapter(
+                new FilesystemCache('/path/to/cache/files')
+            )
+        )
+    ));
+
+    // Add the cache plugin to the client object
+    $client->addSubscriber($cachePlugin);
+    $client->get('http://www.wikipedia.org/')->send();
+
+    // The next request will revalidate against the origin server to see if it
+    // has been modified. If a 304 response is received the response will be
+    // served from cache
+    $client->get('http://www.wikipedia.org/')->send();
+
+The cache plugin intercepts GET and HEAD requests before they are actually transferred to the origin server. The cache
+plugin then generates a hash key based on the request method and URL, and checks to see if a response exists in the cache. If
+a response exists in the cache, the cache adapter then checks to make sure that the caching rules associated with the response
+satisfy the request, and ensures that response still fresh. If the response is acceptable for the request any required
+revalidation, then the cached response is served instead of contacting the origin server.
+
+Vary
+----
+
+Cache keys are derived from a request method and a request URL. Multiple responses can map to the same cache key and
+stored in Guzzle's underlying cache storage object. You should use the ``Vary`` HTTP header to tell the cache storage
+object that the cache response must have been cached for a request that matches the headers specified in the Vary header
+of the request. This allows you to have specific cache entries for the same request URL but variations in a request's
+headers determine which cache entry is served. Please see the http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
+for more information.
+
+Cache options
+-------------
+
+There are several options you can add to requests or clients to modify the behavior of the cache plugin.
+
+Override cache TTL
+~~~~~~~~~~~~~~~~~~
+
+You can override the number of seconds a cacheable response is stored in the cache by setting the
+``cache.override_ttl`` parameter on the params object of a request:
+
+.. code-block:: php
+
+    // If the response to the request is cacheable, then the response will be cached for 100 seconds
+    $request->getParams()->set('cache.override_ttl', 100);
+
+If a response doesn't specify any freshness policy, it will be kept in cache for 3600 seconds by default.
+
+Custom caching decision
+~~~~~~~~~~~~~~~~~~~~~~~
+
+If the service you are interacting with does not return caching headers or returns responses that are normally
+something that would not be cached, you can set a custom ``can_cache`` object on the constructor of the CachePlugin
+and provide a ``Guzzle\Plugin\Cache\CanCacheInterface`` object. You can use the
+``Guzzle\Plugin\Cache\CallbackCanCacheStrategy`` to easily make a caching decision based on an HTTP request and
+response.
+
+Revalidation options
+~~~~~~~~~~~~~~~~~~~~
+
+You can change the revalidation behavior of a request using the ``cache.revalidate`` parameter. Setting this
+parameter to ``never`` will ensure that a revalidation request is never sent, and the response is always served from
+the origin server. Setting this parameter to ``skip`` will never revalidate and uses the response stored in the cache.
+
+Normalizing requests for caching
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Use the ``cache.key_filter`` parameter if you wish to strip certain query string parameters from your
+request before creating a unique hash for the request. This parameter can be useful if your requests have query
+string values that cause each request URL to be unique (thus preventing a cache hit). The ``cache.key_filter``
+format is simply a comma separated list of query string values to remove from the URL when creating a cache key.
+For example, here we are saying that the ``a`` and ``q`` query string variables should be ignored when generating a
+cache key for the request:
+
+.. code-block:: php
+
+    $request->getParams()->set('cache.key_filter', 'a, q');
+
+Other options
+~~~~~~~~~~~~~
+
+There are many other options available to the CachePlugin that can meet almost any caching requirement, including
+custom revalidation implementations, custom cache key generators, custom caching decision strategies, and custom
+cache storage objects. Take a look the constructor of ``Guzzle\Plugin\Cache\CachePlugin`` for more information.
+
+Setting Client-wide cache settings
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can specify cache settings for every request created by a client by adding cache settings to the configuration
+options of a client.
+
+.. code-block:: php
+
+    $client = new Guzzle\Http\Client('http://www.test.com', array(
+        'request.params' => array(
+            'cache.override_ttl' => 3600,
+            'params.cache.revalidate' => 'never'
+        )
+    ));
+
+    echo $client->get('/')->getParams()->get('cache.override_ttl');
+    // >>> 3600
+
+    echo $client->get('/')->getParams()->get('cache.revalidate');
+    // >>> never
+
+Cache revalidation
+------------------
+
+If the cache plugin determines that a response to a GET request needs revalidation, a conditional GET is transferred
+to the origin server. If the origin server returns a 304 response, then a response containing the merged headers of
+the cached response with the new response and the entity body of the cached response is returned. Custom revalidation
+strategies can be injected into a CachePlugin if needed.
+
+Cache adapters
+--------------
+
+Guzzle doesn't try to reinvent the wheel when it comes to caching or logging. Plenty of other frameworks have
+excellent solutions in place that you are probably already using in your applications. Guzzle uses adapters for
+caching and logging. The cache plugin requires a cache adapter so that is can store responses in a cache. Guzzle
+currently supports cache adapters for `Doctrine 2.0 <http://www.doctrine-project.org/>`_ and the
+`Zend Framework <http://framework.zend.com>`_.
+
+Doctrine cache adapter
+~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: php
+
+    use Doctrine\Common\Cache\ArrayCache;
+    use Guzzle\Cache\DoctrineCacheAdapter;
+    use Guzzle\Plugin\Cache\CachePlugin;
+
+    $backend = new ArrayCache();
+    $adapter = new DoctrineCacheAdapter($backend);
+    $cache = new CachePlugin($adapter);
+
+Zend Framework cache adapter
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: php
+
+    use Guzzle\Cache\ZendCacheAdapter;
+    use Zend\Cache\Backend\TestBackend;
+
+    $backend = new TestBackend();
+    $adapter = new ZendCacheAdapter($backend);
+    $cache = new CachePlugin($adapter);

+ 33 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/cookie-plugin.rst

@@ -0,0 +1,33 @@
+=============
+Cookie plugin
+=============
+
+Some web services require a Cookie in order to maintain a session. The ``Guzzle\Plugin\Cookie\CookiePlugin`` will add
+cookies to requests and parse cookies from responses using a CookieJar object:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Cookie\CookiePlugin;
+    use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;
+
+    $cookiePlugin = new CookiePlugin(new ArrayCookieJar());
+
+    // Add the cookie plugin to a client
+    $client = new Client('http://www.test.com/');
+    $client->addSubscriber($cookiePlugin);
+
+    // Send the request with no cookies and parse the returned cookies
+    $client->get('http://www.yahoo.com/')->send();
+
+    // Send the request again, noticing that cookies are being sent
+    $request = $client->get('http://www.yahoo.com/');
+    $request->send();
+
+    echo $request;
+
+You can disable cookies per-request by setting the ``cookies.disable`` value to true on a request's params object.
+
+.. code-block:: php
+
+    $request->getParams()->set('cookies.disable', true);

+ 93 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/creating-plugins.rst

@@ -0,0 +1,93 @@
+================
+Creating plugins
+================
+
+.. highlight:: php
+
+Guzzle is extremely extensible because of the behavioral modifications that can be added to requests, clients, and
+commands using an event system. Before and after the majority of actions are taken in the library, an event is emitted
+with the name of the event and context surrounding the event. Observers can subscribe to a subject and modify the
+subject based on the events received. Guzzle's event system utilizes the Symfony2 EventDispatcher and is the backbone
+of its plugin architecture.
+
+Overview
+--------
+
+Plugins must implement the ``Symfony\Component\EventDispatcher\EventSubscriberInterface`` interface. The
+``EventSubscriberInterface`` requires that your class implements a static method, ``getSubscribedEvents()``, that
+returns an associative array mapping events to methods on the object. See the
+`Symfony2 documentation <http://symfony.com/doc/2.0/book/internals.html#the-event-dispatcher>`_ for more information.
+
+Plugins can be attached to any subject, or object in Guzzle that implements that
+``Guzzle\Common\HasDispatcherInterface``.
+
+Subscribing to a subject
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can subscribe an instantiated observer to an event by calling ``addSubscriber`` on a subject.
+
+.. code-block:: php
+
+    $testPlugin = new TestPlugin();
+    $client->addSubscriber($testPlugin);
+
+You can also subscribe to only specific events using a closure::
+
+    $client->getEventDispatcher()->addListener('request.create', function(Event $event) {
+        echo $event->getName();
+        echo $event['request'];
+    });
+
+``Guzzle\Common\Event`` objects are passed to notified functions. The Event object has a ``getName()`` method which
+return the name of the emitted event and may contain contextual information that can be accessed like an array.
+
+Knowing what events to listen to
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Any class that implements the ``Guzzle\Common\HasDispatcherInterface`` must implement a static method,
+``getAllEvents()``, that returns an array of the events that are emitted from the object.  You can browse the source
+to see each event, or you can call the static method directly in your code to get a list of available events.
+
+Event hooks
+-----------
+
+* :ref:`client-events`
+* :ref:`service-client-events`
+* :ref:`request-events`
+* ``Guzzle\Http\Curl\CurlMulti``:
+* :ref:`service-builder-events`
+
+Examples of the event system
+----------------------------
+
+Simple Echo plugin
+~~~~~~~~~~~~~~~~~~
+
+This simple plugin prints a string containing the request that is about to be sent by listening to the
+``request.before_send`` event::
+
+    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+    class EchoPlugin implements EventSubscriberInterface
+    {
+        public static function getSubscribedEvents()
+        {
+            return array('request.before_send' => 'onBeforeSend');
+        }
+
+        public function onBeforeSend(Guzzle\Common\Event $event)
+        {
+            echo 'About to send a request: ' . $event['request'] . "\n";
+        }
+    }
+
+    $client = new Guzzle\Service\Client('http://www.test.com/');
+
+    // Create the plugin and add it as an event subscriber
+    $plugin = new EchoPlugin();
+    $client->addSubscriber($plugin);
+
+    // Send a request and notice that the request is printed to the screen
+    $client->get('/')->send();
+
+Running the above code will print a string containing the HTTP request that is about to be sent.

+ 32 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/curl-auth-plugin.rst

@@ -0,0 +1,32 @@
+==========================
+cURL authentication plugin
+==========================
+
+.. warning::
+
+    The CurlAuthPlugin is deprecated. You should use the `auth` parameter of a client to add authorization headers to
+    every request created by a client.
+
+    .. code-block:: php
+
+        $client->setDefaultOption('auth', array('username', 'password', 'Basic|Digest|NTLM|Any'));
+
+If your web service client requires basic authorization, then you can use the CurlAuthPlugin to easily add an
+Authorization header to each request sent by the client.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\CurlAuth\CurlAuthPlugin;
+
+    $client = new Client('http://www.test.com/');
+
+    // Add the auth plugin to the client object
+    $authPlugin = new CurlAuthPlugin('username', 'password');
+    $client->addSubscriber($authPlugin);
+
+    $response = $client->get('projects/1/people')->send();
+    $xml = new SimpleXMLElement($response->getBody(true));
+    foreach ($xml->person as $person) {
+        echo $person->email . "\n";
+    }

+ 24 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/history-plugin.rst

@@ -0,0 +1,24 @@
+==============
+History plugin
+==============
+
+The history plugin tracks all of the requests and responses sent through a request or client. This plugin can be
+useful for crawling or unit testing. By default, the history plugin stores up to 10 requests and responses.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\History\HistoryPlugin;
+
+    $client = new Client('http://www.test.com/');
+
+    // Add the history plugin to the client object
+    $history = new HistoryPlugin();
+    $history->setLimit(5);
+    $client->addSubscriber($history);
+
+    $client->get('http://www.yahoo.com/')->send();
+
+    echo $history->getLastRequest();
+    echo $history->getLastResponse();
+    echo count($history);

+ 69 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/log-plugin.rst

@@ -0,0 +1,69 @@
+==========
+Log plugin
+==========
+
+Use the ``Guzzle\Plugin\Log\LogPlugin`` to view all data sent over the wire, including entity bodies and redirects.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Log\Zf1LogAdapter;
+    use Guzzle\Plugin\Log\LogPlugin;
+    use Guzzle\Log\MessageFormatter;
+
+    $client = new Client('http://www.test.com/');
+
+    $adapter = new Zf1LogAdapter(
+        new \Zend_Log(new \Zend_Log_Writer_Stream('php://output'))
+    );
+    $logPlugin = new LogPlugin($adapter, MessageFormatter::DEBUG_FORMAT);
+
+    // Attach the plugin to the client, which will in turn be attached to all
+    // requests generated by the client
+    $client->addSubscriber($logPlugin);
+
+    $response = $client->get('http://google.com')->send();
+
+The code sample above wraps a ``Zend_Log`` object using a ``Guzzle\Log\Zf1LogAdapter``. After attaching the plugin to
+the client, all data sent over the wire will be logged to stdout.
+
+The first argument of the LogPlugin's constructor accepts a ``Guzzle\Log\LogAdapterInterface`` object. This object is
+an adapter that allows you to use the logging capabilities of your favorite log implementation. The second argument of
+the constructor accepts a ``Guzzle\Log\MessageFormatter`` or a log messaged format string. The format string uses
+variable substitution and allows you to define the log data that is important to your application. The different
+variables that can be injected are as follows:
+
+================== ====================================================================================
+Variable           Substitution
+================== ====================================================================================
+{request}          Full HTTP request message
+{response}         Full HTTP response message
+{ts}               Timestamp
+{host}             Host of the request
+{method}           Method of the request
+{url}              URL of the request
+{host}             Host of the request
+{protocol}         Request protocol
+{version}          Protocol version
+{resource}         Resource of the request (path + query + fragment)
+{port}             Port of the request
+{hostname}         Hostname of the machine that sent the request
+{code}             Status code of the response (if available)
+{phrase}           Reason phrase of the response  (if available)
+{curl_error}       Curl error message (if available)
+{curl_code}        Curl error code (if available)
+{curl_stderr}      Curl standard error (if available)
+{connect_time}     Time in seconds it took to establish the connection (if available)
+{total_time}       Total transaction time in seconds for last transfer (if available)
+{req_header_*}     Replace `*` with the lowercased name of a request header to add to the message
+{res_header_*}     Replace `*` with the lowercased name of a response header to add to the message
+{req_body}         Request body
+{res_body}         Response body
+================== ====================================================================================
+
+The LogPlugin has a helper method that can be used when debugging that will output the full HTTP request and
+response of a transaction:
+
+.. code-block:: php
+
+    $client->addSubscriber(LogPlugin::getDebugPlugin());

+ 29 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/md5-validator-plugin.rst

@@ -0,0 +1,29 @@
+====================
+MD5 validator plugin
+====================
+
+Entity bodies can sometimes be modified over the wire due to a faulty TCP transport or misbehaving proxy. If an HTTP
+response contains a Content-MD5 header, then a MD5 hash of the entity body of a response can be compared against the
+Content-MD5 header of the response to determine if the response was delivered intact. The
+``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` will throw an ``UnexpectedValueException`` if the calculated MD5 hash does
+not match the Content-MD5 header value:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Md5\Md5ValidatorPlugin;
+
+    $client = new Client('http://www.test.com/');
+
+    $md5Plugin = new Md5ValidatorPlugin();
+
+    // Add the md5 plugin to the client object
+    $client->addSubscriber($md5Plugin);
+
+    $request = $client->get('http://www.yahoo.com/');
+    $request->send();
+
+Calculating the MD5 hash of a large entity body or an entity body that was transferred using a Content-Encoding is an
+expensive operation. When working in high performance applications, you might consider skipping the MD5 hash
+validation for entity bodies bigger than a certain size or Content-Encoded entity bodies
+(see ``Guzzle\Plugin\Md5\Md5ValidatorPlugin`` for more information).

+ 27 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/mock-plugin.rst

@@ -0,0 +1,27 @@
+===========
+Mock plugin
+===========
+
+The mock plugin is useful for testing Guzzle clients. The mock plugin allows you to queue an array of responses that
+will satisfy requests sent from a client by consuming the request queue in FIFO order.
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Mock\MockPlugin;
+    use Guzzle\Http\Message\Response;
+
+    $client = new Client('http://www.test.com/');
+
+    $mock = new MockPlugin();
+    $mock->addResponse(new Response(200))
+         ->addResponse(new Response(404));
+
+    // Add the mock plugin to the client object
+    $client->addSubscriber($mock);
+
+    // The following request will receive a 200 response from the plugin
+    $client->get('http://www.example.com/')->send();
+
+    // The following request will receive a 404 response from the plugin
+    $client->get('http://www.test.com/')->send();

+ 30 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/oauth-plugin.rst

@@ -0,0 +1,30 @@
+============
+OAuth plugin
+============
+
+Guzzle ships with an OAuth 1.0 plugin that can sign requests using a consumer key, consumer secret, OAuth token,
+and OAuth secret. Here's an example showing how to send an authenticated request to the Twitter REST API:
+
+.. code-block:: php
+
+    use Guzzle\Http\Client;
+    use Guzzle\Plugin\Oauth\OauthPlugin;
+
+    $client = new Client('http://api.twitter.com/1');
+    $oauth = new OauthPlugin(array(
+        'consumer_key'    => 'my_key',
+        'consumer_secret' => 'my_secret',
+        'token'           => 'my_token',
+        'token_secret'    => 'my_token_secret'
+    ));
+    $client->addSubscriber($oauth);
+
+    $response = $client->get('statuses/public_timeline.json')->send();
+
+If you need to use a custom signing method, you can pass a ``signature_method`` configuration option in the
+constructor of the OAuth plugin. The ``signature_method`` option must be a callable variable that accepts a string to
+sign and signing key and returns a signed string.
+
+.. note::
+
+    You can omit the ``token`` and ``token_secret`` options to use two-legged OAuth.

+ 9 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-list.rst.inc

@@ -0,0 +1,9 @@
+* :doc:`/plugins/async-plugin`
+* :doc:`/plugins/backoff-plugin`
+* :doc:`/plugins/cache-plugin`
+* :doc:`/plugins/cookie-plugin`
+* :doc:`/plugins/history-plugin`
+* :doc:`/plugins/log-plugin`
+* :doc:`/plugins/md5-validator-plugin`
+* :doc:`/plugins/mock-plugin`
+* :doc:`/plugins/oauth-plugin`

+ 59 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/plugins/plugins-overview.rst

@@ -0,0 +1,59 @@
+======================
+Plugin system overview
+======================
+
+The workflow of sending a request and parsing a response is driven by Guzzle's event system, which is powered by the
+`Symfony2 Event Dispatcher component <http://symfony.com/doc/current/components/event_dispatcher/introduction.html>`_.
+
+Any object in Guzzle that emits events will implement the ``Guzzle\Common\HasEventDispatcher`` interface. You can add
+event subscribers directly to these objects using the ``addSubscriber()`` method, or you can grab the
+``Symfony\Component\EventDispatcher\EventDispatcher`` object owned by the object using ``getEventDispatcher()`` and
+add a listener or event subscriber.
+
+Adding event subscribers to clients
+-----------------------------------
+
+Any event subscriber or event listener attached to the EventDispatcher of a ``Guzzle\Http\Client`` or
+``Guzzle\Service\Client`` object will automatically be attached to all request objects created by the client. This
+allows you to attach, for example, a HistoryPlugin to a client object, and from that point on, every request sent
+through that client will utilize the HistoryPlugin.
+
+.. code-block:: php
+
+    use Guzzle\Plugin\History\HistoryPlugin;
+    use Guzzle\Service\Client;
+
+    $client = new Client();
+
+    // Create a history plugin and attach it to the client
+    $history = new HistoryPlugin();
+    $client->addSubscriber($history);
+
+    // Create and send a request. This request will also utilize the HistoryPlugin
+    $client->get('http://httpbin.org')->send();
+
+    // Echo out the last sent request by the client
+    echo $history->getLastRequest();
+
+.. tip::
+
+    :doc:`Create event subscribers <creating-plugins>`, or *plugins*, to implement reusable logic that can be
+    shared across clients. Event subscribers are also easier to test than anonymous functions.
+
+Pre-Built plugins
+-----------------
+
+Guzzle provides easy to use request plugins that add behavior to requests based on signal slot event notifications
+powered by the Symfony2 Event Dispatcher component.
+
+* :doc:`async-plugin`
+* :doc:`backoff-plugin`
+* :doc:`cache-plugin`
+* :doc:`cookie-plugin`
+* :doc:`curl-auth-plugin`
+* :doc:`history-plugin`
+* :doc:`log-plugin`
+* :doc:`md5-validator-plugin`
+* :doc:`mock-plugin`
+* :doc:`oauth-plugin`
+

+ 2 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/requirements.txt

@@ -0,0 +1,2 @@
+Sphinx>=1.2b1
+guzzle_sphinx_theme>=0.5.0

+ 201 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/testing/unit-testing.rst

@@ -0,0 +1,201 @@
+===========================
+Unit Testing Guzzle clients
+===========================
+
+Guzzle provides several tools that will enable you to easily unit test your web service clients.
+
+* PHPUnit integration
+* Mock responses
+* node.js web server for integration testing
+
+PHPUnit integration
+-------------------
+
+Guzzle is unit tested using `PHPUnit <http://www.phpunit.de/>`_.  Your web service client's unit tests should extend
+``Guzzle\Tests\GuzzleTestCase`` so that you can take advantage of some of the built in helpers.
+
+In order to unit test your client, a developer would need to copy phpunit.xml.dist to phpunit.xml and make any needed
+modifications.  As a best practice and security measure for you and your contributors, it is recommended to add an
+ignore statement to your SCM so that phpunit.xml is ignored.
+
+Bootstrapping
+~~~~~~~~~~~~~
+
+Your web service client should have a tests/ folder that contains a bootstrap.php file. The bootstrap.php file
+responsible for autoloading and configuring a ``Guzzle\Service\Builder\ServiceBuilder`` that is used throughout your
+unit tests for loading a configured client. You can add custom parameters to your phpunit.xml file that expects users
+to provide the path to their configuration data.
+
+.. code-block:: php
+
+    Guzzle\Tests\GuzzleTestCase::setServiceBuilder(Aws\Common\Aws::factory($_SERVER['CONFIG']));
+
+    Guzzle\Tests\GuzzleTestCase::setServiceBuilder(Guzzle\Service\Builder\ServiceBuilder::factory(array(
+        'test.unfuddle' => array(
+            'class' => 'Guzzle.Unfuddle.UnfuddleClient',
+            'params' => array(
+                'username' => 'test_user',
+                'password' => '****',
+                'subdomain' => 'test'
+            )
+        )
+    )));
+
+The above code registers a service builder that can be used throughout your unit tests.  You would then be able to
+retrieve an instantiated and configured Unfuddle client by calling ``$this->getServiceBuilder()->get('test.unfuddle)``.
+The above code assumes that ``$_SERVER['CONFIG']`` contains the path to a file that stores service description
+configuration.
+
+Unit testing remote APIs
+------------------------
+
+Mock responses
+~~~~~~~~~~~~~~
+
+One of the benefits of unit testing is the ability to quickly determine if there are errors in your code.  If your
+unit tests run slowly, then they become tedious and will likely be run less frequently.  Guzzle's philosophy on unit
+testing web service clients is that no network access should be required to run the unit tests.  This means that
+responses are served from mock responses or local servers.  By adhering to this principle, tests will run much faster
+and will not require an external resource to be available.  The problem with this approach is that your mock responses
+must first be gathered and then subsequently updated each time the remote API changes.
+
+Integration testing over the internet
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can perform integration testing with a web service over the internet by making calls directly to the service. If
+the web service you are requesting uses a complex signing algorithm or some other specific implementation, then you
+may want to include at least one actual network test that can be run specifically through the command line using
+`PHPUnit group annotations <http://www.phpunit.de/manual/current/en/appendixes.annotations.html#appendixes.annotations.group>`_.
+
+@group internet annotation
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When creating tests that require an internet connection, it is recommended that you add ``@group internet`` annotations
+to your unit tests to specify which tests require network connectivity.
+
+You can then `run PHPUnit tests <http://www.phpunit.de/manual/current/en/textui.html>`_ that exclude the @internet
+group by running ``phpunit --exclude-group internet``.
+
+API credentials
+^^^^^^^^^^^^^^^
+
+If API  credentials are required to run your integration tests, you must add ``<php>`` parameters to your
+phpunit.xml.dist file and extract these parameters in your bootstrap.php file.
+
+.. code-block:: xml
+
+    <?xml version="1.0" encoding="UTF-8"?>
+    <phpunit bootstrap="./tests/bootstrap.php" colors="true">
+        <php>
+            <!-- Specify the path to a service configuration file -->
+            <server name="CONFIG" value="test_services.json" />
+            <!-- Or, specify each require parameter individually -->
+            <server name="API_USER" value="change_me" />
+            <server name="API_PASSWORD" value="****" />
+        </php>
+        <testsuites>
+            <testsuite name="guzzle-service">
+                <directory suffix="Test.php">./Tests</directory>
+            </testsuite>
+        </testsuites>
+    </phpunit>
+
+You can then extract the ``server`` variables in your bootstrap.php file by grabbing them from the ``$_SERVER``
+superglobal: ``$apiUser = $_SERVER['API_USER'];``
+
+Further reading
+^^^^^^^^^^^^^^^
+
+A good discussion on the topic of testing remote APIs can be found in Sebastian Bergmann's
+`Real-World Solutions for Developing High-Quality PHP Frameworks and Applications <http://www.amazon.com/dp/0470872497>`_.
+
+Queueing Mock responses
+-----------------------
+
+Mock responses can be used to test if requests are being generated correctly and responses and handled correctly by
+your client.  Mock responses can be queued up for a client using the ``$this->setMockResponse($client, $path)`` method
+of your test class.  Pass the client you are adding mock responses to and a single path or array of paths to mock
+response files relative to the ``/tests/mock/ folder``.  This will queue one or more mock responses for your client by
+creating a simple observer on the client.  Mock response files must contain a full HTTP response message:
+
+.. code-block:: none
+
+    HTTP/1.1 200 OK
+    Date: Wed, 25 Nov 2009 12:00:00 GMT
+    Connection: close
+    Server: AmazonS3
+    Content-Type: application/xml
+
+    <?xml version="1.0" encoding="UTF-8"?>
+    <LocationConstraint xmlns="http://s3.amazonaws.com/doc/2006-03-01/">EU</LocationConstraint>
+
+After queuing mock responses for a client, you can get an array of the requests that were sent by the client that
+were issued a mock response by calling ``$this->getMockedRequests()``.
+
+You can also use the ``Guzzle\Plugin\Mock\MockPlugin`` object directly with your clients.
+
+.. code-block:: php
+
+    $plugin = new Guzzle\Plugin\Mock\MockPlugin();
+    $plugin->addResponse(new Guzzle\Http\Message\Response(200));
+    $client = new Guzzle\Http\Client();
+    $client->addSubscriber($plugin);
+
+    // The following request will get the mock response from the plugin in FIFO order
+    $request = $client->get('http://www.test.com/');
+    $request->send();
+
+    // The MockPlugin maintains a list of requests that were mocked
+    $this->assertContainsOnly($request, $plugin->getReceivedRequests());
+
+node.js web server for integration testing
+------------------------------------------
+
+Using mock responses is usually enough when testing a web service client.  If your client needs to add custom cURL
+options to requests, then you should use the node.js test web server to ensure that your HTTP request message is
+being created correctly.
+
+Guzzle is based around PHP's libcurl bindings.  cURL sometimes modifies an HTTP request message based on
+``CURLOPT_*`` options.  Headers that are added to your request by cURL will not be accounted for if you inject mock
+responses into your tests.  Additionally, some request entity bodies cannot be loaded by the client before transmitting
+it to the sever (for example, when using a client as a sort of proxy and streaming content from a remote server). You
+might also need to inspect the entity body of a ``multipart/form-data`` POST request.
+
+.. note::
+
+    You can skip all of the tests that require the node.js test web server by excluding the ``server`` group:
+    ``phpunit --exclude-group server``
+
+Using the test server
+~~~~~~~~~~~~~~~~~~~~~
+
+The node.js test server receives requests and returns queued responses.  The test server exposes a simple API that is
+used to enqueue responses and inspect the requests that it has received.
+
+Retrieve the server object by calling ``$this->getServer()``.  If the node.js server is not running, it will be
+started as a forked process and an object that interfaces with the server will be returned.  (note: stopping the
+server is handled internally by Guzzle.)
+
+You can queue an HTTP response or an array of responses by calling ``$this->getServer()->enqueue()``:
+
+.. code-block:: php
+
+    $this->getServer()->enqueue("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
+
+The above code queues a single 200 response with an empty body.  Responses are queued using a FIFO order; this
+response will be returned by the server when it receives the first request and then removed from the queue. If a
+request is received by a server with no queued responses, an exception will be thrown in your unit test.
+
+You can inspect the requests that the server has retrieved by calling ``$this->getServer()->getReceivedRequests()``.
+This method accepts an optional ``$hydrate`` parameter that specifies if you are retrieving an array of string HTTP
+requests or an array of ``Guzzle\Http\RequestInterface`` subclassed objects.  "Hydrating" the requests will allow
+greater flexibility in your unit tests so that you can  easily assert the state of the various parts of a request.
+
+You will need to modify the base_url of your web service client in order to use it against the test server.
+
+.. code-block:: php
+
+    $client = $this->getServiceBuilder()->get('my_client');
+    $client->setBaseUrl($this->getServer()->getUrl());
+
+After running the above code, all calls made from the ``$client`` object will be sent to the test web server.

+ 619 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/guzzle-service-descriptions.rst

@@ -0,0 +1,619 @@
+===========================
+Guzzle service descriptions
+===========================
+
+Guzzle allows you to serialize HTTP requests and parse HTTP responses using a DSL called a service descriptions.
+Service descriptions define web service APIs by documenting each operation, the operation's parameters, validation
+options for each parameter, an operation's response, how the response is parsed, and any errors that can be raised for
+an operation. Writing a service description for a web service allows you to more quickly consume a web service than
+writing concrete commands for each web service operation.
+
+Guzzle service descriptions can be representing using a PHP array or JSON document. Guzzle's service descriptions are
+heavily inspired by `Swagger <http://swagger.wordnik.com/>`_.
+
+Service description schema
+==========================
+
+A Guzzle Service description must match the following JSON schema document. This document can also serve as a guide when
+implementing a Guzzle service description.
+
+Download the schema here: :download:`Guzzle JSON schema document </_downloads/guzzle-schema-1.0.json>`
+
+.. class:: overflow-height-500px
+
+    .. literalinclude:: ../_downloads/guzzle-schema-1.0.json
+        :language: json
+
+Top-level attributes
+--------------------
+
+Service descriptions are comprised of the following top-level attributes:
+
+.. code-block:: json
+
+    {
+        "name": "string",
+        "apiVersion": "string|number",
+        "baseUrl": "string",
+        "description": "string",
+        "operations": {},
+        "models": {},
+        "includes": ["string.php", "string.json"]
+    }
+
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| Property Name                           | Value                   | Description                                                                                                           |
++=========================================+=========================+=======================================================================================================================+
+| name                                    | string                  | Name of the web service                                                                                               |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| apiVersion                              | string|number           | Version identifier that the service description is compatible with                                                    |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| baseUrl or basePath                     | string                  | Base URL of the web service. Any relative URI specified in an operation will be merged with the baseUrl using the     |
+|                                         |                         | process defined in RFC 2396. Some clients require custom logic to determine the baseUrl. In those cases, it is best   |
+|                                         |                         | to not include a baseUrl in the service description, but rather allow the factory method of the client to configure   |
+|                                         |                         | the client’s baseUrl.                                                                                                 |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| description                             | string                  | Short summary of the web service                                                                                      |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| operations                              | object containing       | Operations of the service. The key is the name of the operation and value is the attributes of the operation.         |
+|                                         | :ref:`operation-schema` |                                                                                                                       |
+|                                         |                         |                                                                                                                       |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| models                                  | object containing       | Schema models that can be referenced throughout the service description. Models can be used to define how an HTTP     |
+|                                         | :ref:`model-schema`     | response is parsed into a ``Guzzle\Service\Resource\Model`` object when an operation uses a ``model`` ``responseType``|
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| includes                                | array of .js,           | Service description files to include and extend from (can be a .json, .js, or .php file)                              |
+|                                         | .json, or .php          |                                                                                                                       |
+|                                         | files.                  |                                                                                                                       |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+| (any additional properties)             | mixed                   | Any additional properties specified as top-level attributes are allowed and will be treated as arbitrary data         |
++-----------------------------------------+-------------------------+-----------------------------------------------------------------------------------------------------------------------+
+
+.. _operation-schema:
+
+Operations
+----------
+
+Operations are the actions that can be taken on a service. Each operation is given a unique name and has a distinct
+endpoint and HTTP method. If an API has a ``DELETE /users/:id`` operation, a satisfactory operation name might be
+``DeleteUser`` with a parameter of ``id`` that is inserted into the URI.
+
+.. class:: overflow-height-250px
+
+    .. code-block:: json
+
+        {
+            "operations": {
+                "operationName": {
+                    "extends": "string",
+                    "httpMethod": "GET|POST|PUT|DELETE|PATCH|string",
+                    "uri": "string",
+                    "summary": "string",
+                    "class": "string",
+                    "responseClass": "string",
+                    "responseNotes": "string",
+                    "type": "string",
+                    "description": "string",
+                    "responseType": "primitive|class|(model by name)|documentation|(string)",
+                    "deprecated": false,
+                    "errorResponses": [
+                        {
+                            "code": 500,
+                            "reason": "Unexpected Error",
+                            "class": "string"
+                        }
+                    ],
+                    "data": {
+                        "foo": "bar",
+                        "baz": "bam"
+                    },
+                    "parameters": {}
+                }
+            }
+        }
+
+.. csv-table::
+   :header: "Property Name", "Value", "Description"
+   :widths: 20, 15, 65
+
+    "extends", "string", "Extend from another operation by name. The parent operation must be defined before the child."
+    "httpMethod", "string", "HTTP method used with the operation (e.g. GET, POST, PUT, DELETE, PATCH, etc)"
+    "uri", "string", "URI of the operation. The uri attribute can contain URI templates. The variables of the URI template are parameters of the operation with a location value of uri"
+    "summary", "string", "Short summary of what the operation does"
+    "class", "string", "Custom class to instantiate instead of the default Guzzle\\Service\\Command\\OperationCommand. Using this attribute allows you to define an operation using a service description, but allows more customized logic to be implemented in user-land code."
+    "responseClass", "string", "Defined what is returned from the method. Can be a primitive, class name, or model name. You can specify the name of a class to return a more customized result from the operation (for example, a domain model object). When using the name of a PHP class, the class must implement ``Guzzle\Service\Command\ResponseClassInterface``."
+    "responseNotes", "string", "A description of the response returned by the operation"
+    "responseType", "string", "The type of response that the operation creates: one of primitive, class, model, or documentation. If not specified, this value will be automatically inferred based on whether or not there is a model matching the name, if a matching class name is found, or set to 'primitive' by default."
+    "deprecated", "boolean", "Whether or not the operation is deprecated"
+    "errorResponses", "array", "Errors that could occur while executing the operation. Each item of the array is an object that can contain a 'code' (HTTP response status code of the error), 'reason' (reason phrase or description of the error), and 'class' (an exception class that will be raised when this error is encountered)"
+    "data", "object", "Any arbitrary data to associate with the operation"
+    "parameters", "object containing :ref:`parameter-schema` objects", "Parameters of the operation. Parameters are used to define how input data is serialized into a HTTP request."
+    "additionalParameters", "A single :ref:`parameter-schema` object", "Validation and serialization rules for any parameter supplied to the operation that was not explicitly defined."
+
+additionalParameters
+~~~~~~~~~~~~~~~~~~~~
+
+When a webservice offers a large number of parameters that all are set in the same location (for example the query
+string or a JSON document), defining each parameter individually can require a lot of time and repetition. Furthermore,
+some web services allow for completely arbitrary parameters to be supplied for an operation. The
+``additionalParameters`` attribute can be used to solve both of these issues.
+
+As an example, we can define a Twitter API operation quite easily using ``additionalParameters``. The
+GetMentions operation accepts a large number of query string parameters. Defining each of these parameters
+is ideal because it provide much more introspection for the client and opens the possibility to use the description with
+other tools (e.g. a documentation generator). However, you can very quickly provide a "catch-all" serialization rule
+that will place any custom parameters supplied to an operation the generated request's query string parameters.
+
+.. class:: overflow-height-250px
+
+    .. code-block:: json
+
+        {
+            "name": "Twitter",
+            "apiVersion": "1.1",
+            "baseUrl": "https://api.twitter.com/1.1",
+            "operations": {
+                "GetMentions": {
+                    "httpMethod": "GET",
+                    "uri": "statuses/mentions_timeline.json",
+                    "responseClass": "GetMentionsOutput",
+                    "additionalParameters": {
+                        "location": "query"
+                    }
+                }
+            },
+            "models": {
+                "GetMentionsOutput": {
+                    "type": "object",
+                    "additionalProperties": {
+                        "location": "json"
+                    }
+                }
+            }
+        }
+
+responseClass
+~~~~~~~~~~~~~
+
+The ``responseClass`` attribute is used to define the return value of an operation (what is returned by calling the
+``getResult()`` method of a command object). The value set in the responseClass attribute can be one of "primitive"
+(meaning the result with be primitive type like a string), a class name meaning the result will be an instance of a
+specific user-land class, or a model name meaning the result will be a ``Guzzle\Service\Resource\Model`` object that
+uses a :ref:`model schema <model-schema>` to define how the HTTP response is parsed.
+
+.. note::
+
+    Using a class name with a ``responseClass`` will only work if it is supported by the ``class`` that is instantiated
+    for the operation. Keep this in mind when specifying a custom ``class`` attribute that points to a custom
+    ``Guzzle\Service\Command\CommandInterface`` class. The default ``class``,
+    ``Guzzle\Service\Command\OperationCommand``, does support setting custom ``class`` attributes.
+
+You can specify the name of a class to return a more customized result from the operation (for example, a domain model
+object). When using the name of a PHP class, the class must implement ``Guzzle\Service\Command\ResponseClassInterface``.
+Here's a very simple example of implementing a custom responseClass object.
+
+.. code-block:: json
+
+    {
+        "operations": {
+            "test": {
+                "responseClass": "MyApplication\\User"
+            }
+        }
+    }
+
+.. code-block:: php
+
+    namespace MyApplication;
+
+    use Guzzle\Service\Command\ResponseClassInterface;
+    use Guzzle\Service\Command\OperationCommand;
+
+    class User implements ResponseClassInterface
+    {
+        protected $name;
+
+        public static function fromCommand(OperationCommand $command)
+        {
+            $response = $command->getResponse();
+            $xml = $response->xml();
+
+            return new self((string) $xml->name);
+        }
+
+        public function __construct($name)
+        {
+            $this->name = $name;
+        }
+    }
+
+errorResponses
+~~~~~~~~~~~~~~
+
+``errorResponses`` is an array containing objects that define the errors that could occur while executing the
+operation. Each item of the array is an object that can contain a 'code' (HTTP response status code of the error),
+'reason' (reason phrase or description of the error), and 'class' (an exception class that will be raised when this
+error is encountered).
+
+ErrorResponsePlugin
+^^^^^^^^^^^^^^^^^^^
+
+Error responses are by default only used for documentation. If you don't need very complex exception logic for your web
+service errors, then you can use the ``Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin`` to automatically throw defined
+exceptions when one of the ``errorResponse`` rules are matched. The error response plugin will listen for the
+``request.complete`` event of a request created by a command object. Every response (including a successful response) is
+checked against the list of error responses for an exact match using the following order of checks:
+
+1. Does the errorResponse have a defined ``class``?
+2. Is the errorResponse ``code`` equal to the status code of the response?
+3. Is the errorResponse ``reason`` equal to the reason phrase of the response?
+4. Throw the exception stored in the ``class`` attribute of the errorResponse.
+
+The ``class`` attribute must point to a class that implements
+``Guzzle\Plugin\ErrorResponse\ErrorResponseExceptionInterface``. This interface requires that an error response class
+implements ``public static function fromCommand(CommandInterface $command, Response $response)``. This method must
+return an object that extends from ``\Exception``. After an exception is returned, it is thrown by the plugin.
+
+.. _parameter-schema:
+
+Parameter schema
+----------------
+
+Parameters in both operations and models are represented using the
+`JSON schema <http://tools.ietf.org/id/draft-zyp-json-schema-04.html>`_ syntax.
+
+.. csv-table::
+   :header: "Property Name", "Value", "Description"
+   :widths: 20, 15, 65
+
+    "name", "string", "Unique name of the parameter"
+    "type", "string|array", "Type of variable (string, number, integer, boolean, object, array, numeric, null, any). Types are using for validation and determining the structure of a parameter. You can use a union type by providing an array of simple types. If one of the union types matches the provided value, then the value is valid."
+    "instanceOf", "string", "When the type is an object, you can specify the class that the object must implement"
+    "required", "boolean", "Whether or not the parameter is required"
+    "default", "mixed", "Default value to use if no value is supplied"
+    "static", "boolean", "Set to true to specify that the parameter value cannot be changed from the default setting"
+    "description", "string", "Documentation of the parameter"
+    "location", "string", "The location of a request used to apply a parameter. Custom locations can be registered with a command, but the defaults are uri, query, statusCode, reasonPhrase, header, body, json, xml, postField, postFile, responseBody"
+    "sentAs", "string", "Specifies how the data being modeled is sent over the wire. For example, you may wish to include certain headers in a response model that have a normalized casing of FooBar, but the actual header is x-foo-bar. In this case, sentAs would be set to x-foo-bar."
+    "filters", "array", "Array of functions to to run a parameter value through."
+
+filters
+~~~~~~~
+
+Each value in the array must be a string containing the full class path to a static method or an array of complex
+filter information. You can specify static methods of classes using the full namespace class name followed by
+"::" (e.g. ``FooBar::baz()``). Some filters require arguments in order to properly filter a value. For complex filters,
+use an object containing a ``method`` attribute pointing to a function, and an ``args`` attribute containing an
+array of positional arguments to pass to the function. Arguments can contain keywords that are replaced when filtering
+a value: ``@value`` is replaced with the value being filtered, and ``@api`` is replaced with the actual Parameter
+object.
+
+.. code-block:: json
+
+    {
+        "filters": [
+            "strtolower",
+            {
+                "method": "MyClass::convertString",
+                "args": [ "test", "@value", "@api" ]
+            }
+        ]
+    }
+
+The above example will filter a parameter using ``strtolower``. It will then call the ``convertString`` static method
+of ``MyClass``, passing in "test", the actual value of the parameter, and a ``Guzzle\Service\Description\Parameter``
+object.
+
+Operation parameter location attributes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The location field of top-level parameters control how a parameter is serialized when generating a request.
+
+uri location
+^^^^^^^^^^^^
+
+Parameters are injected into the ``uri`` attribute of the operation using
+`URI-template expansion <http://tools.ietf.org/html/rfc6570>`_.
+
+.. code-block:: json
+
+    {
+        "operations": {
+            "uriTest": {
+                "uri": "/test/{testValue}",
+                "parameters": {
+                    "testValue": {
+                        "location": "uri"
+                    }
+                }
+            }
+        }
+    }
+
+query location
+^^^^^^^^^^^^^^
+
+Parameters are injected into the query string of a request. Query values can be nested, which would result in a PHP
+style nested query string. The name of a parameter is the default name of the query string parameter added to the
+request. You can override this behavior by specifying the ``sentAs`` attribute on the parameter.
+
+.. code-block:: json
+
+    {
+        "operations": {
+            "queryTest": {
+                "parameters": {
+                    "testValue": {
+                        "location": "query",
+                        "sentAs": "test_value"
+                    }
+                }
+            }
+        }
+    }
+
+header location
+^^^^^^^^^^^^^^^
+
+Parameters are injected as headers on an HTTP request. The name of the parameter is used as the name of the header by
+default. You can change the name of the header created by the parameter using the ``sentAs`` attribute.
+
+Headers that are of type ``object`` will be added as multiple headers to a request using the key of the input array as
+the header key. Setting a ``sentAs`` attribute along with a type ``object`` will use the value of ``sentAs`` as a
+prefix for each header key.
+
+body location
+^^^^^^^^^^^^^
+
+Parameters are injected as the body of a request. The input of these parameters may be anything that can be cast to a
+string or a ``Guzzle\Http\EntityBodyInterface`` object.
+
+postField location
+^^^^^^^^^^^^^^^^^^
+
+Parameters are inserted as POST fields in a request. Nested values may be supplied and will be represented using
+PHP style nested query strings. The POST field name is the same as the parameter name by default. You can use the
+``sentAs`` parameter to override the POST field name.
+
+postFile location
+^^^^^^^^^^^^^^^^^
+
+Parameters are added as POST files. A postFile value may be a string pointing to a local filename or a
+``Guzzle\Http\Message\PostFileInterface`` object. The name of the POST file will be the name of the parameter by
+default. You can use a custom POST file name by using the ``sentAs`` attribute.
+
+Supports "string" and "array" types.
+
+json location
+^^^^^^^^^^^^^
+
+Parameters are added to the body of a request as top level keys of a JSON document. Nested values may be specified,
+with any number of nested ``Guzzle\Common\ToArrayInterface`` objects. When JSON parameters are specified, the
+``Content-Type`` of the request will change to ``application/json`` if a ``Content-Type`` has not already been specified
+on the request.
+
+xml location
+^^^^^^^^^^^^
+
+Parameters are added to the body of a request as top level nodes of an XML document. Nested values may be specified,
+with any number of nested ``Guzzle\Common\ToArrayInterface`` objects. When XML parameters are specified, the
+``Content-Type`` of the request will change to ``application/xml`` if a ``Content-Type`` has not already been specified
+on the request.
+
+responseBody location
+^^^^^^^^^^^^^^^^^^^^^
+
+Specifies the EntityBody of a response. This can be used to download the response body to a file or a custom Guzzle
+EntityBody object.
+
+No location
+^^^^^^^^^^^
+
+If a parameter has no location attribute, then the parameter is simply used as a data value.
+
+Other locations
+^^^^^^^^^^^^^^^
+
+Custom locations can be registered as new locations or override default locations if needed.
+
+.. _model-schema:
+
+Model Schema
+------------
+
+Models are used in service descriptions to provide generic JSON schema definitions that can be extended from or used in
+``$ref`` attributes. Models can also be referenced in a ``responseClass`` attribute to provide valuable output to an
+operation. Models are JSON schema documents and use the exact syntax and attributes used in parameters.
+
+Response Models
+~~~~~~~~~~~~~~~
+
+Response models describe how a response is parsed into a ``Guzzle\Service\Resource\Model`` object. Response models are
+always modeled as JSON schema objects. When an HTTP response is parsed using a response model, the rules specified on
+each property of a response model will translate 1:1 as keys in a PHP associative array. When a ``sentAs`` attribute is
+found in response model parameters, the value retrieved from the HTTP response is retrieved using the ``sentAs``
+parameter but stored in the response model using the name of the parameter.
+
+The location field of top-level parameters in a response model tell response parsers how data is retrieved from a
+response.
+
+statusCode location
+^^^^^^^^^^^^^^^^^^^
+
+Retrieves the status code of the response.
+
+reasonPhrase location
+^^^^^^^^^^^^^^^^^^^^^
+
+Retrieves the reason phrase of the response.
+
+header location
+^^^^^^^^^^^^^^^
+
+Retrieves a header from the HTTP response.
+
+body location
+^^^^^^^^^^^^^
+
+Retrieves the body of an HTTP response.
+
+json location
+^^^^^^^^^^^^^
+
+Retrieves a top-level parameter from a JSON document contained in an HTTP response.
+
+You can use ``additionalProperties`` if the JSON document is wrapped in an outer array. This allows you to parse the
+contents of each item in the array using the parsing rules defined in the ``additionalProperties`` schema.
+
+xml location
+^^^^^^^^^^^^
+
+Retrieves a top-level node value from an XML document contained in an HTTP response.
+
+Other locations
+^^^^^^^^^^^^^^^
+
+Custom locations can be registered as new locations or override default locations if needed.
+
+Example service description
+---------------------------
+
+Let's say you're interacting with a web service called 'Foo' that allows for the following routes and methods::
+
+    GET/POST   /users
+    GET/DELETE /users/:id
+
+The following JSON service description implements this simple web service:
+
+.. class:: overflow-height-500px
+
+    .. code-block:: json
+
+        {
+            "name": "Foo",
+            "apiVersion": "2012-10-14",
+            "baseUrl": "http://api.foo.com",
+            "description": "Foo is an API that allows you to Baz Bar",
+            "operations": {
+                "GetUsers": {
+                    "httpMethod": "GET",
+                    "uri": "/users",
+                    "summary": "Gets a list of users",
+                    "responseClass": "GetUsersOutput"
+                },
+                "CreateUser": {
+                    "httpMethod": "POST",
+                    "uri": "/users",
+                    "summary": "Creates a new user",
+                    "responseClass": "CreateUserOutput",
+                    "parameters": {
+                        "name": {
+                            "location": "json",
+                            "type": "string"
+                        },
+                        "age": {
+                            "location": "json",
+                            "type": "integer"
+                        }
+                    }
+                },
+                "GetUser": {
+                    "httpMethod": "GET",
+                    "uri": "/users/{id}",
+                    "summary": "Retrieves a single user",
+                    "responseClass": "GetUserOutput",
+                    "parameters": {
+                        "id": {
+                            "location": "uri",
+                            "description": "User to retrieve by ID",
+                            "required": true
+                        }
+                    }
+                },
+                "DeleteUser": {
+                    "httpMethod": "DELETE",
+                    "uri": "/users/{id}",
+                    "summary": "Deletes a user",
+                    "responseClass": "DeleteUserOutput",
+                    "parameters": {
+                        "id": {
+                            "location": "uri",
+                            "description": "User to delete by ID",
+                            "required": true
+                        }
+                    }
+                }
+            },
+            "models": {
+                "GetUsersOutput": {
+                    "type": "array",
+                    "items": {
+                        "type": "object",
+                        "properties": {
+                            "name": {
+                                "location": "json",
+                                "type": "string"
+                            },
+                            "age": {
+                                "location": "json",
+                                "type": "integer"
+                            }
+                        }
+                    }
+                },
+                "CreateUserOutput": {
+                    "type": "object",
+                    "properties": {
+                        "id": {
+                            "location": "json",
+                            "type": "string"
+                        },
+                        "location": {
+                            "location": "header",
+                            "sentAs": "Location",
+                            "type": "string"
+                        }
+                    }
+                },
+                "GetUserOutput": {
+                    "type": "object",
+                    "properties": {
+                        "name": {
+                            "location": "json",
+                            "type": "string"
+                        },
+                        "age": {
+                            "location": "json",
+                            "type": "integer"
+                        }
+                    }
+                },
+                "DeleteUserOutput": {
+                    "type": "object",
+                    "properties": {
+                        "status": {
+                            "location": "statusCode",
+                            "type": "integer"
+                        }
+                    }
+                }
+            }
+        }
+
+If you attach this service description to a client, you would completely configure the client to interact with the
+Foo web service and provide valuable response models for each operation.
+
+.. code-block:: php
+
+    use Guzzle\Service\Description\ServiceDescription;
+
+    $description = ServiceDescription::factory('/path/to/client.json');
+    $client->setDescription($description);
+
+    $command = $client->getCommand('DeleteUser', array('id' => 123));
+    $responseModel = $client->execute($command);
+    echo $responseModel['status'];
+
+.. note::
+
+    You can add the service description to your client's factory method or constructor.

+ 316 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/using-the-service-builder.rst

@@ -0,0 +1,316 @@
+=======================
+Using a service builder
+=======================
+
+The best way to instantiate Guzzle web service clients is to let Guzzle handle building the clients for you using a
+ServiceBuilder. A ServiceBuilder is responsible for creating concrete client objects based on configuration settings
+and helps to manage credentials for different environments.
+
+You don't have to use a service builder, but they help to decouple your application from concrete classes and help to
+share configuration data across multiple clients. Consider the following example. Here we are creating two clients that
+require the same API public key and secret key. The clients are created using their ``factory()`` methods.
+
+.. code-block:: php
+
+    use MyService\FooClient;
+    use MyService\BarClient;
+
+    $foo = FooClient::factory(array(
+        'key'    => 'abc',
+        'secret' => '123',
+        'custom' => 'and above all'
+    ));
+
+    $bar = BarClient::factory(array(
+        'key'    => 'abc',
+        'secret' => '123',
+        'custom' => 'listen to me'
+    ));
+
+The redundant specification of the API keys can be removed using a service builder.
+
+.. code-block:: php
+
+    use Guzzle\Service\Builder\ServiceBuilder;
+
+    $builder = ServiceBuilder::factory(array(
+        'services' => array(
+            'abstract_client' => array(
+                'params' => array(
+                    'key'    => 'abc',
+                    'secret' => '123'
+                )
+            ),
+            'foo' => array(
+                'extends' => 'abstract_client',
+                'class'   => 'MyService\FooClient',
+                'params'  => array(
+                    'custom' => 'and above all'
+                )
+            ),
+            'bar' => array(
+                'extends' => 'abstract_client',
+                'class'   => 'MyService\FooClient',
+                'params'  => array(
+                    'custom' => 'listen to me'
+                )
+            )
+        )
+    ));
+
+    $foo = $builder->get('foo');
+    $bar = $builder->get('bar');
+
+You can make managing your API keys even easier by saving the service builder configuration in a JSON format in a
+.json file.
+
+Creating a service builder
+--------------------------
+
+A ServiceBuilder can source information from an array, an PHP include file that returns an array, or a JSON file.
+
+.. code-block:: php
+
+    use Guzzle\Service\Builder\ServiceBuilder;
+
+    // Source service definitions from a JSON file
+    $builder = ServiceBuilder::factory('services.json');
+
+Sourcing data from an array
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Data can be source from a PHP array. The array must contain an associative ``services`` array that maps the name of a
+client to the configuration information used by the service builder to create the client. Clients are given names
+which are used to identify how a client is retrieved from a service builder. This can be useful for using multiple
+accounts for the same service or creating development clients vs. production clients.
+
+.. code-block:: php
+
+    $services = array(
+        'includes' => array(
+            '/path/to/other/services.json',
+            '/path/to/other/php_services.php'
+        ),
+        'services' => array(
+            'abstract.foo' => array(
+                'params' => array(
+                    'username' => 'foo',
+                    'password' => 'bar'
+                )
+            ),
+            'bar' => array(
+                'extends' => 'abstract.foo',
+                'class'   => 'MyClientClass',
+                'params'  => array(
+                    'other' => 'abc'
+                )
+            )
+        )
+    );
+
+A service builder configuration array contains two top-level array keys:
+
++------------+---------------------------------------------------------------------------------------------------------+
+| Key        | Description                                                                                             |
++============+=========================================================================================================+
+| includes   | Array of paths to JSON or PHP include files to include in the configuration.                            |
++------------+---------------------------------------------------------------------------------------------------------+
+| services   | Associative array of defined services that can be created by the service builder. Each service can      |
+|            | contain the following keys:                                                                             |
+|            |                                                                                                         |
+|            | +------------+----------------------------------------------------------------------------------------+ |
+|            | | Key        | Description                                                                            | |
+|            | +============+========================================================================================+ |
+|            | | class      | The concrete class to instantiate that implements the                                  | |
+|            | |            | ``Guzzle\Common\FromConfigInterface``.                                                 | |
+|            | +------------+----------------------------------------------------------------------------------------+ |
+|            | | extends    | The name of a previously defined service to extend from                                | |
+|            | +------------+----------------------------------------------------------------------------------------+ |
+|            | | params     | Associative array of parameters to pass to the factory method of the service it is     | |
+|            | |            | instantiated                                                                           | |
+|            | +------------+----------------------------------------------------------------------------------------+ |
+|            | | alias      | An alias that can be used in addition to the array key for retrieving a client from    | |
+|            | |            | the service builder.                                                                   | |
+|            | +------------+----------------------------------------------------------------------------------------+ |
++------------+---------------------------------------------------------------------------------------------------------+
+
+The first client defined, ``abstract.foo``, is used as a placeholder of shared configuration values. Any service
+extending abstract.foo will inherit its params. As an example, this can be useful when clients share the same username
+and password.
+
+The next client, ``bar``, extends from ``abstract.foo`` using the ``extends`` attribute referencing the client from
+which to extend. Additional parameters can be merged into the original service definition when extending a parent
+service.
+
+.. important::
+
+    Each client that you intend to instantiate must specify a ``class`` attribute that references the full class name
+    of the client being created. The class referenced in the ``class`` parameter must implement a static ``factory()``
+    method that accepts an array or ``Guzzle\Common\Collection`` object and returns an instantiated object.
+
+Sourcing from a PHP include
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can create service builder configurations using a PHP include file. This can be useful if you wish to take
+advantage of an opcode cache like APC to speed up the process of loading and processing the configuration. The PHP
+include file is the same format as an array, but you simply create a PHP script that returns an array and save the
+file with the .php file extension.
+
+.. code-block:: php
+
+    <?php return array('services' => '...');
+    // Saved as config.php
+
+This configuration file can then be used with a service builder.
+
+.. code-block:: php
+
+    $builder = ServiceBuilder::factory('/path/to/config.php');
+
+Sourcing from a JSON document
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can use JSON documents to serialize your service descriptions. The JSON format uses the exact same structure as
+the PHP array syntax, but it's just serialized using JSON.
+
+.. code-block:: javascript
+
+    {
+        "includes": ["/path/to/other/services.json", "/path/to/other/php_services.php"],
+        "services": {
+            "abstract.foo": {
+                "params": {
+                    "username": "foo",
+                    "password": "bar"
+                }
+            },
+            "bar": {
+                "extends": "abstract.foo",
+                "class": "MyClientClass",
+                "params": {
+                    "other": "abc"
+                }
+            }
+        }
+    }
+
+Referencing other clients in parameters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If one of your clients depends on another client as one of its parameters, you can reference that client by name by
+enclosing the client's reference key in ``{}``.
+
+.. code-block:: javascript
+
+    {
+        "services": {
+            "token": {
+                "class": "My\Token\TokenFactory",
+                "params": {
+                    "access_key": "xyz"
+                }
+            },
+            "client": {
+                "class": "My\Client",
+                "params": {
+                    "token_client": "{token}",
+                    "version": "1.0"
+                }
+            }
+        }
+    }
+
+When ``client`` is constructed by the service builder, the service builder will first create the ``token`` service
+and then inject the token service into ``client``'s factory method in the ``token_client`` parameter.
+
+Retrieving clients from a service builder
+-----------------------------------------
+
+Clients are referenced using a customizable name you provide in your service definition. The ServiceBuilder is a sort
+of multiton object-- it will only instantiate a client once and return that client for subsequent retrievals. Clients
+are retrieved by name (the array key used in the configuration) or by the ``alias`` setting of a service.
+
+Here's an example of retrieving a client from your ServiceBuilder:
+
+.. code-block:: php
+
+    $client = $builder->get('foo');
+
+    // You can also use the ServiceBuilder object as an array
+    $client = $builder['foo'];
+
+Creating throwaway clients
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can get a "throwaway" client (a client that is not persisted by the ServiceBuilder) by passing ``true`` in the
+second argument of ``ServiceBuilder::get()``. This allows you to create a client that will not be returned by other
+parts of your code that use the service builder. Instead of passing ``true``, you can pass an array of configuration
+settings that will override the configuration settings specified in the service builder.
+
+.. code-block:: php
+
+    // Get a throwaway client and overwrite the "custom" setting of the client
+    $foo = $builder->get('foo', array(
+        'custom' => 'in this world there are rules'
+    ));
+
+Getting raw configuration settings
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can get the raw configuration settings provided to the service builder for a specific service using the
+``getData($name)`` method of a service builder. This method will null if the service was not found in the service
+builder or an array of configuration settings if the service was found.
+
+.. code-block:: php
+
+    $data = $builder->getData('foo');
+    echo $data['key'] . "\n";
+    echo $data['secret'] . "\n";
+    echo $data['custom'] . "\n";
+
+Adding a plugin to all clients
+------------------------------
+
+You can add a plugin to all clients created by a service builder using the ``addGlobalPlugin($plugin)`` method of a
+service builder and passing a ``Symfony\Component\EventDispatcher\EventSubscriberInterface`` object. The service builder
+will then attach each global plugin to every client as it is created. This allows you to, for example, add a LogPlugin
+to every request created by a service builder for easy debugging.
+
+.. code-block:: php
+
+    use Guzzle\Plugin\Log\LogPlugin;
+
+    // Add a debug log plugin to every client as it is created
+    $builder->addGlobalPlugin(LogPlugin::getDebugPlugin());
+
+    $foo = $builder->get('foo');
+    $foo->get('/')->send();
+    // Should output all of the data sent over the wire
+
+.. _service-builder-events:
+
+Events emitted from a service builder
+-------------------------------------
+
+A ``Guzzle\Service\Builder\ServiceBuilder`` object emits the following events:
+
++-------------------------------+--------------------------------------------+-----------------------------------------+
+| Event name                    | Description                                | Event data                              |
++===============================+============================================+=========================================+
+| service_builder.create_client | Called when a client is created            | * client: The created client object     |
++-------------------------------+--------------------------------------------+-----------------------------------------+
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+    use Guzzle\Service\Builder\ServiceBuilder;
+
+    $builder = ServiceBuilder::factory('/path/to/config.json');
+
+    // Add an event listener to print out each client client as it is created
+    $builder->getEventDispatcher()->addListener('service_builder.create_client', function (Event $e) {
+        echo 'Client created: ' . get_class($e['client']) . "\n";
+    });
+
+    $foo = $builder->get('foo');
+    // Should output the class used for the "foo" client

+ 659 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/docs/webservice-client/webservice-client.rst

@@ -0,0 +1,659 @@
+======================
+The web service client
+======================
+
+The ``Guzzle\Service`` namespace contains various abstractions that help to make it easier to interact with a web
+service API, including commands, service descriptions, and resource iterators.
+
+In this chapter, we'll build a simple `Twitter API client <https://dev.twitter.com/docs/api/1.1>`_.
+
+Creating a client
+=================
+
+A class that extends from ``Guzzle\Service\Client`` or implements ``Guzzle\Service\ClientInterface`` must implement a
+``factory()`` method in order to be used with a :doc:`service builder <using-the-service-builder>`.
+
+Factory method
+--------------
+
+You can use the ``factory()`` method of a client directly if you do not need a service builder.
+
+.. code-block:: php
+
+    use mtdowling\TwitterClient;
+
+    // Create a client and pass an array of configuration data
+    $twitter = TwitterClient::factory(array(
+        'consumer_key'    => '****',
+        'consumer_secret' => '****',
+        'token'           => '****',
+        'token_secret'    => '****'
+    ));
+
+.. note::
+
+    If you'd like to follow along, here's how to get your Twitter API credentials:
+
+    1. Visit https://dev.twitter.com/apps
+    2. Click on an application that you've created
+    3. Click on the "OAuth tool" tab
+    4. Copy all of the settings under "OAuth Settings"
+
+Implementing a factory method
+-----------------------------
+
+Creating a client and its factory method is pretty simple. You just need to implement ``Guzzle\Service\ClientInterface``
+or extend from ``Guzzle\Service\Client``.
+
+.. code-block:: php
+
+    namespace mtdowling;
+
+    use Guzzle\Common\Collection;
+    use Guzzle\Plugin\Oauth\OauthPlugin;
+    use Guzzle\Service\Client;
+    use Guzzle\Service\Description\ServiceDescription;
+
+    /**
+     * A simple Twitter API client
+     */
+    class TwitterClient extends Client
+    {
+        public static function factory($config = array())
+        {
+            // Provide a hash of default client configuration options
+            $default = array('base_url' => 'https://api.twitter.com/1.1');
+
+            // The following values are required when creating the client
+            $required = array(
+                'base_url',
+                'consumer_key',
+                'consumer_secret',
+                'token',
+                'token_secret'
+            );
+
+            // Merge in default settings and validate the config
+            $config = Collection::fromConfig($config, $default, $required);
+
+            // Create a new Twitter client
+            $client = new self($config->get('base_url'), $config);
+
+            // Ensure that the OauthPlugin is attached to the client
+            $client->addSubscriber(new OauthPlugin($config->toArray()));
+
+            return $client;
+        }
+    }
+
+Service Builder
+---------------
+
+A service builder is used to easily create web service clients, provides a simple configuration driven approach to
+creating clients, and allows you to share configuration settings across multiple clients. You can find out more about
+Guzzle's service builder in :doc:`using-the-service-builder`.
+
+.. code-block:: php
+
+    use Guzzle\Service\Builder\ServiceBuilder;
+
+    // Create a service builder and provide client configuration data
+    $builder = ServiceBuilder::factory('/path/to/client_config.json');
+
+    // Get the client from the service builder by name
+    $twitter = $builder->get('twitter');
+
+The above example assumes you have JSON data similar to the following stored in "/path/to/client_config.json":
+
+.. code-block:: json
+
+    {
+        "services": {
+            "twitter": {
+                "class": "mtdowling\\TwitterClient",
+                "params": {
+                    "consumer_key": "****",
+                    "consumer_secret": "****",
+                    "token": "****",
+                    "token_secret": "****"
+                }
+            }
+        }
+    }
+
+.. note::
+
+    A service builder becomes much more valuable when using multiple web service clients in a single application or
+    if you need to utilize the same client with varying configuration settings (e.g. multiple accounts).
+
+Commands
+========
+
+Commands are a concept in Guzzle that helps to hide the underlying implementation of an API by providing an easy to use
+parameter driven object for each action of an API. A command is responsible for accepting an array of configuration
+parameters, serializing an HTTP request, and parsing an HTTP response. Following the
+`command pattern <http://en.wikipedia.org/wiki/Command_pattern>`_, commands in Guzzle offer a greater level of
+flexibility when implementing and utilizing a web service client.
+
+Executing commands
+------------------
+
+You must explicitly execute a command after creating a command using the ``getCommand()`` method. A command has an
+``execute()`` method that may be called, or you can use the ``execute()`` method of a client object and pass in the
+command object. Calling either of these execute methods will return the result value of the command. The result value is
+the result of parsing the HTTP response with the ``process()`` method.
+
+.. code-block:: php
+
+    // Get a command from the client and pass an array of parameters
+    $command = $twitter->getCommand('getMentions', array(
+        'count' => 5
+    ));
+
+    // Other parameters can be set on the command after it is created
+    $command['trim_user'] = false;
+
+    // Execute the command using the command object.
+    // The result value contains an array of JSON data from the response
+    $result = $command->execute();
+
+    // You can retrieve the result of the command later too
+    $result = $command->getResult().
+
+Command object also contains methods that allow you to inspect the HTTP request and response that was utilized with
+the command.
+
+.. code-block:: php
+
+    $request = $command->getRequest();
+    $response = $command->getResponse();
+
+.. note::
+
+    The format and notation used to retrieve commands from a client can be customized by injecting a custom command
+    factory, ``Guzzle\Service\Command\Factory\FactoryInterface``, on the client using ``$client->setCommandFactory()``.
+
+Executing with magic methods
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When using method missing magic methods with a command, the command will be executed right away and the result of the
+command is returned.
+
+.. code-block:: php
+
+    $jsonData = $twitter->getMentions(array(
+        'count'     => 5,
+        'trim_user' => true
+    ));
+
+Creating commands
+-----------------
+
+Commands are created using either the ``getCommand()`` method of a client or a magic missing method of a client. Using
+the ``getCommand()`` method allows you to create a command without executing it, allowing for customization of the
+command or the request serialized by the command.
+
+When a client attempts to create a command, it uses the client's ``Guzzle\Service\Command\Factory\FactoryInterface``.
+By default, Guzzle will utilize a command factory that first looks for a concrete class for a particular command
+(concrete commands) followed by a command defined by a service description (operation commands). We'll learn more about
+concrete commands and operation commands later in this chapter.
+
+.. code-block:: php
+
+    // Get a command from the twitter client.
+    $command = $twitter->getCommand('getMentions');
+    $result = $command->execute();
+
+Unless you've skipped ahead, running the above code will throw an exception.
+
+    PHP Fatal error:  Uncaught exception 'Guzzle\Common\Exception\InvalidArgumentException' with message
+    'Command was not found matching getMentions'
+
+This exception was thrown because the "getMentions" command has not yet been implemented. Let's implement one now.
+
+Concrete commands
+~~~~~~~~~~~~~~~~~
+
+Commands can be created in one of two ways: create a concrete command class that extends
+``Guzzle\Service\Command\AbstractCommand`` or
+:doc:`create an OperationCommand based on a service description <guzzle-service-descriptions>`. The recommended
+approach is to use a service description to define your web service, but you can use concrete commands when custom
+logic must be implemented for marshaling or unmarshaling a HTTP message.
+
+Commands are the method in which you abstract away the underlying format of the requests that need to be sent to take
+action on a web service. Commands in Guzzle are meant to be built by executing a series of setter methods on a command
+object. Commands are only validated right before they are executed. A ``Guzzle\Service\Client`` object is responsible
+for executing commands. Commands created for your web service must implement
+``Guzzle\Service\Command\CommandInterface``, but it's easier to extend the ``Guzzle\Service\Command\AbstractCommand``
+class, implement the ``build()`` method, and optionally implement the ``process()`` method.
+
+Serializing requests
+^^^^^^^^^^^^^^^^^^^^
+
+The ``build()`` method of a command is responsible for using the arguments of the command to build and serialize a
+HTTP request and set the request on the ``$request`` property of the command object. This step is usually taken care of
+for you when using a service description driven command that uses the default
+``Guzzle\Service\Command\OperationCommand``. You may wish to implement the process method yourself when you aren't
+using a service description or need to implement more complex request serialization.
+
+.. important::::
+
+    When implementing a custom ``build()`` method, be sure to set the class property of ``$this->request`` to an
+    instantiated and ready to send request.
+
+The following example shows how to implement the ``getMentions``
+`Twitter API <https://dev.twitter.com/docs/api/1.1/get/statuses/mentions_timeline>`_ method using a concrete command.
+
+.. code-block:: php
+
+    namespace mtdowling\Twitter\Command;
+
+    use Guzzle\Service\Command\AbstractCommand;
+
+    class GetMentions extends AbstractCommand
+    {
+        protected function build()
+        {
+            // Create the request property of the command
+            $this->request = $this->client->get('statuses/mentions_timeline.json');
+
+            // Grab the query object of the request because we will use it for
+            // serializing command parameters on the request
+            $query = $this->request->getQuery();
+
+            if ($this['count']) {
+                $query->set('count', $this['count']);
+            }
+
+            if ($this['since_id']) {
+                $query->set('since_id', $this['since_id']);
+            }
+
+            if ($this['max_id']) {
+                $query->set('max_id', $this['max_id']);
+            }
+
+            if ($this['trim_user'] !== null) {
+                $query->set('trim_user', $this['trim_user'] ? 'true' : 'false');
+            }
+
+            if ($this['contributor_details'] !== null) {
+                $query->set('contributor_details', $this['contributor_details'] ? 'true' : 'false');
+            }
+
+            if ($this['include_entities'] !== null) {
+                $query->set('include_entities', $this['include_entities'] ? 'true' : 'false');
+            }
+        }
+    }
+
+By default, a client will attempt to find concrete command classes under the ``Command`` namespace of a client. First
+the client will attempt to find an exact match for the name of the command to the name of the command class. If an
+exact match is not found, the client will calculate a class name using inflection. This is calculated based on the
+folder hierarchy of a command and converting the CamelCased named commands into snake_case. Here are some examples on
+how the command names are calculated:
+
+#. ``Foo\Command\JarJar`` **->** jar_jar
+#. ``Foo\Command\Test`` **->** test
+#. ``Foo\Command\People\GetCurrentPerson`` **->** people.get_current_person
+
+Notice how any sub-namespace beneath ``Command`` is converted from ``\`` to ``.`` (a period). CamelCasing is converted
+to lowercased snake_casing (e.g. JarJar == jar_jar).
+
+Parsing responses
+^^^^^^^^^^^^^^^^^
+
+The ``process()`` method of a command is responsible for converting an HTTP response into something more useful. For
+example, a service description operation that has specified a model object in the ``responseClass`` attribute of the
+operation will set a ``Guzzle\Service\Resource\Model`` object as the result of the command. This behavior can be
+completely modified as needed-- even if you are using operations and responseClass models. Simply implement a custom
+``process()`` method that sets the ``$this->result`` class property to whatever you choose. You can reuse parts of the
+default Guzzle response parsing functionality or get inspiration from existing code by using
+``Guzzle\Service\Command\OperationResponseParser`` and ``Guzzle\Service\Command\DefaultResponseParser`` classes.
+
+If you do not implement a custom ``process()`` method and are not using a service description, then Guzzle will attempt
+to guess how a response should be processed based on the Content-Type header of the response. Because the Twitter API
+sets a ``Content-Type: application/json`` header on this response, we do not need to implement any custom response
+parsing.
+
+Operation commands
+~~~~~~~~~~~~~~~~~~
+
+Operation commands are commands in which the serialization of an HTTP request and the parsing of an HTTP response are
+driven by a Guzzle service description. Because request serialization, validation, and response parsing are
+described using a DSL, creating operation commands is a much faster process than writing concrete commands.
+
+Creating operation commands for our Twitter client can remove a great deal of redundancy from the previous concrete
+command, and allows for a deeper runtime introspection of the API. Here's an example service description we can use to
+create the Twitter API client:
+
+.. code-block:: json
+
+    {
+        "name": "Twitter",
+        "apiVersion": "1.1",
+        "baseUrl": "https://api.twitter.com/1.1",
+        "description": "Twitter REST API client",
+        "operations": {
+            "GetMentions": {
+                "httpMethod": "GET",
+                "uri": "statuses/mentions_timeline.json",
+                "summary": "Returns the 20 most recent mentions for the authenticating user.",
+                "responseClass": "GetMentionsOutput",
+                "parameters": {
+                    "count": {
+                        "description": "Specifies the number of tweets to try and retrieve",
+                        "type": "integer",
+                        "location": "query"
+                    },
+                    "since_id": {
+                        "description": "Returns results with an ID greater than the specified ID",
+                        "type": "integer",
+                        "location": "query"
+                    },
+                    "max_id": {
+                        "description": "Returns results with an ID less than or equal to the specified ID.",
+                        "type": "integer",
+                        "location": "query"
+                    },
+                    "trim_user": {
+                        "description": "Limits the amount of data returned for each user",
+                        "type": "boolean",
+                        "location": "query"
+                    },
+                    "contributor_details": {
+                        "description": "Adds more data to contributor elements",
+                        "type": "boolean",
+                        "location": "query"
+                    },
+                    "include_entities": {
+                        "description": "The entities node will be disincluded when set to false.",
+                        "type": "boolean",
+                        "location": "query"
+                    }
+                }
+            }
+        },
+        "models": {
+            "GetMentionsOutput": {
+                "type": "object",
+                "additionalProperties": {
+                    "location": "json"
+                }
+            }
+        }
+    }
+
+If you're lazy, you can define the API in a less descriptive manner using ``additionalParameters``.
+``additionalParameters`` define the serialization and validation rules of parameters that are not explicitly defined
+in a service description.
+
+.. code-block:: json
+
+    {
+        "name": "Twitter",
+        "apiVersion": "1.1",
+        "baseUrl": "https://api.twitter.com/1.1",
+        "description": "Twitter REST API client",
+        "operations": {
+            "GetMentions": {
+                "httpMethod": "GET",
+                "uri": "statuses/mentions_timeline.json",
+                "summary": "Returns the 20 most recent mentions for the authenticating user.",
+                "responseClass": "GetMentionsOutput",
+                "additionalParameters": {
+                    "location": "query"
+                }
+            }
+        },
+        "models": {
+            "GetMentionsOutput": {
+                "type": "object",
+                "additionalProperties": {
+                    "location": "json"
+                }
+            }
+        }
+    }
+
+You should attach the service description to the client at the end of the client's factory method:
+
+.. code-block:: php
+
+    // ...
+    class TwitterClient extends Client
+    {
+        public static function factory($config = array())
+        {
+            // ... same code as before ...
+
+            // Set the service description
+            $client->setDescription(ServiceDescription::factory('path/to/twitter.json'));
+
+            return $client;
+        }
+    }
+
+The client can now use operations defined in the service description instead of requiring you to create concrete
+command classes. Feel free to delete the concrete command class we created earlier.
+
+.. code-block:: php
+
+    $jsonData = $twitter->getMentions(array(
+        'count'     => 5,
+        'trim_user' => true
+    ));
+
+Executing commands in parallel
+------------------------------
+
+Much like HTTP requests, Guzzle allows you to send multiple commands in parallel. You can send commands in parallel by
+passing an array of command objects to a client's ``execute()`` method. The client will serialize each request and
+send them all in parallel. If an error is encountered during the transfer, then a
+``Guzzle\Service\Exception\CommandTransferException`` is thrown, which allows you to retrieve a list of commands that
+succeeded and a list of commands that failed.
+
+.. code-block:: php
+
+    use Guzzle\Service\Exception\CommandTransferException;
+
+    $commands = array();
+    $commands[] = $twitter->getCommand('getMentions');
+    $commands[] = $twitter->getCommand('otherCommandName');
+    // etc...
+
+    try {
+        $result = $client->execute($commands);
+        foreach ($result as $command) {
+            echo $command->getName() . ': ' . $command->getResponse()->getStatusCode() . "\n";
+        }
+    } catch (CommandTransferException $e) {
+        // Get an array of the commands that succeeded
+        foreach ($e->getSuccessfulCommands() as $command) {
+            echo $command->getName() . " succeeded\n";
+        }
+        // Get an array of the commands that failed
+        foreach ($e->getFailedCommands() as $command) {
+            echo $command->getName() . " failed\n";
+        }
+    }
+
+.. note::
+
+    All commands executed from a client using an array must originate from the same client.
+
+Special command options
+-----------------------
+
+Guzzle exposes several options that help to control how commands are validated, serialized, and parsed.
+Command options can be specified when creating a command or in the ``command.params`` parameter in the
+``Guzzle\Service\Client``.
+
+=========================== ============================================================================================
+command.request_options     Option used to add :ref:`Request options <request-options>` to the request created by a
+                            command
+command.hidden_params       An array of the names of parameters ignored by the ``additionalParameters`` parameter schema
+command.disable_validation  Set to true to disable JSON schema validation of the command's input parameters
+command.response_processing Determines how the default response parser will parse the command. One of "raw" no parsing,
+                            "model" (the default method used to parse commands using response models defined in service
+                            descriptions)
+command.headers             (deprecated) Option used to specify custom headers.  Use ``command.request_options`` instead
+command.on_complete         (deprecated) Option used to add an onComplete method to a command.  Use
+                            ``command.after_send`` event instead
+command.response_body       (deprecated) Option used to change the entity body used to store a response.
+                            Use ``command.request_options`` instead
+=========================== ============================================================================================
+
+Advanced client configuration
+=============================
+
+Default command parameters
+--------------------------
+
+When creating a client object, you can specify default command parameters to pass into all commands. Any key value pair
+present in the ``command.params`` settings of a client will be added as default parameters to any command created
+by the client.
+
+.. code-block:: php
+
+    $client = new Guzzle\Service\Client(array(
+        'command.params' => array(
+            'default_1' => 'foo',
+            'another'   => 'bar'
+        )
+    ));
+
+Magic methods
+-------------
+
+Client objects will, by default, attempt to create and execute commands when a missing method is invoked on a client.
+This powerful concept applies to both concrete commands and operation commands powered by a service description. This
+makes it appear to the end user that you have defined actual methods on a client object, when in fact, the methods are
+invoked using PHP's magic ``__call`` method.
+
+The ``__call`` method uses the ``getCommand()`` method of a client, which uses the client's internal
+``Guzzle\Service\Command\Factory\FactoryInterface`` object. The default command factory allows you to instantiate
+operations defined in a client's service description. The method in which a client determines which command to
+execute is defined as follows:
+
+1. The client will first try to find a literal match for an operation in the service description.
+2. If the literal match is not found, the client will try to uppercase the first character of the operation and find
+   the match again.
+3. If a match is still not found, the command factory will inflect the method name from CamelCase to snake_case and
+   attempt to find a matching command.
+4. If a command still does not match, an exception is thrown.
+
+.. code-block:: php
+
+    // Use the magic method
+    $result = $twitter->getMentions();
+
+    // This is exactly the same as:
+    $result = $twitter->getCommand('getMentions')->execute();
+
+You can disable magic methods on a client by passing ``false`` to the ``enableMagicMethod()`` method.
+
+Custom command factory
+----------------------
+
+A client by default uses the ``Guzzle\Service\Command\Factory\CompositeFactory`` which allows multiple command
+factories to attempt to create a command by a certain name. The default CompositeFactory uses a ``ConcreteClassFactory``
+and a ``ServiceDescriptionFactory`` if a service description is specified on a client. You can specify a custom
+command factory if your client requires custom command creation logic using the ``setCommandFactory()`` method of
+a client.
+
+Custom resource Iterator factory
+--------------------------------
+
+Resource iterators can be retrieved from a client using the ``getIterator($name)`` method of a client. This method uses
+a client's internal ``Guzzle\Service\Resource\ResourceIteratorFactoryInterface`` object. A client by default uses a
+``Guzzle\Service\Resource\ResourceIteratorClassFactory`` to attempt to find concrete classes that implement resource
+iterators. The default factory will first look for matching iterators in the ``Iterator`` subdirectory of the client
+followed by the ``Model`` subdirectory of a client. Use the ``setResourceIteratorFactory()`` method of a client to
+specify a custom resource iterator factory.
+
+Plugins and events
+==================
+
+``Guzzle\Service\Client`` exposes various events that allow you to hook in custom logic. A client object owns a
+``Symfony\Component\EventDispatcher\EventDispatcher`` object that can be accessed by calling
+``$client->getEventDispatcher()``. You can use the event dispatcher to add listeners (a simple callback function) or
+event subscribers (classes that listen to specific events of a dispatcher).
+
+.. _service-client-events:
+
+Events emitted from a Service Client
+------------------------------------
+
+A ``Guzzle\Service\Client`` object emits the following events:
+
++------------------------------+--------------------------------------------+------------------------------------------+
+| Event name                   | Description                                | Event data                               |
++==============================+============================================+==========================================+
+| client.command.create        | The client created a command object        | * client: Client object                  |
+|                              |                                            | * command: Command object                |
++------------------------------+--------------------------------------------+------------------------------------------+
+| command.before_prepare       | Before a command is validated and built.   | * command: Command being prepared        |
+|                              | This is also before a request is created.  |                                          |
++------------------------------+--------------------------------------------+------------------------------------------+
+| command.after_prepare        | After a command instantiates and           | * command: Command that was prepared     |
+|                              | configures its request object.             |                                          |
++------------------------------+--------------------------------------------+------------------------------------------+
+| command.before_send          | The client is about to execute a prepared  | * command: Command to execute            |
+|                              | command                                    |                                          |
++------------------------------+--------------------------------------------+------------------------------------------+
+| command.after_send           | The client successfully completed          | * command: The command that was executed |
+|                              | executing a command                        |                                          |
++------------------------------+--------------------------------------------+------------------------------------------+
+| command.parse_response       | Called when ``responseType`` is ``class``  | * command: The command with a response   |
+|                              | and the response is about to be parsed.    |   about to be parsed.                    |
++------------------------------+--------------------------------------------+------------------------------------------+
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+    use Guzzle\Service\Client;
+
+    $client = new Client();
+
+    // create an event listener that operates on request objects
+    $client->getEventDispatcher()->addListener('command.after_prepare', function (Event $event) {
+        $command = $event['command'];
+        $request = $command->getRequest();
+
+        // do something with request
+    });
+
+.. code-block:: php
+
+    use Guzzle\Common\Event;
+    use Guzzle\Common\Client;
+    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+    class EventSubscriber implements EventSubscriberInterface
+    {
+        public static function getSubscribedEvents()
+        {
+            return array(
+                'client.command.create' => 'onCommandCreate',
+                'command.parse_response' => 'onParseResponse'
+            );
+        }
+
+        public function onCommandCreate(Event $event)
+        {
+            $client = $event['client'];
+            $command = $event['command'];
+            // operate on client and command
+        }
+
+        public function onParseResponse(Event $event)
+        {
+            $command = $event['command'];
+            // operate on the command
+        }
+    }
+
+    $client = new Client();
+
+    $client->addSubscriber(new EventSubscriber());

+ 16 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phar-stub.php

@@ -0,0 +1,16 @@
+<?php
+
+Phar::mapPhar('guzzle.phar');
+
+require_once 'phar://guzzle.phar/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php';
+
+$classLoader = new Symfony\Component\ClassLoader\UniversalClassLoader();
+$classLoader->registerNamespaces(array(
+    'Guzzle' => 'phar://guzzle.phar/src',
+    'Symfony\\Component\\EventDispatcher' => 'phar://guzzle.phar/vendor/symfony/event-dispatcher',
+    'Doctrine' => 'phar://guzzle.phar/vendor/doctrine/common/lib',
+    'Monolog' => 'phar://guzzle.phar/vendor/monolog/monolog/src'
+));
+$classLoader->register();
+
+__HALT_COMPILER();

+ 16 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/build.properties.dist

@@ -0,0 +1,16 @@
+# you may need to update this if you're working on a fork.
+guzzle.remote=git@github.com:guzzle/guzzle.git
+
+# github credentials -- only used by GitHub API calls to create subtree repos
+github.basicauth=username:password
+# for the subtree split and testing
+github.org=guzzle
+
+# your git path
+cmd.git=git
+
+# your composer command
+cmd.composer=composer
+
+# test server start
+cmd.testserver=node

+ 33 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/dependencies.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project basedir="../../" default="install-dependencies">
+
+    <property name="cmd.composer" value="" />
+    <property name="cmd.git" value="" />
+    <property name="cmd.testserver" value="" />
+
+    <!--
+    Our custom tasks
+    -->
+    <taskdef name="composerlint" classname="phing.tasks.ComposerLintTask" />
+    <taskdef name="guzzlesubsplit" classname="phing.tasks.GuzzleSubSplitTask" />
+    <taskdef name="guzzlepear" classname="phing.tasks.GuzzlePearPharPackageTask" />
+
+    <target name="find-git">
+        <if>
+            <contains string="${cmd.git}" substring="git" />
+            <then>
+                <echo>using git at ${cmd.git}</echo>
+            </then>
+        <else>
+            <exec command="which git" outputProperty="cmd.git" />
+            <echo>found git at ${cmd.git}</echo>
+        </else>
+        </if>
+    </target>
+
+    <target name="clean-dependencies">
+        <delete dir="${project.basedir}/vendor"/>
+        <delete file="${project.basedir}/composer.lock" />
+    </target>
+
+</project>

+ 142 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/imports/deploy.xml

@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project basedir="../../" default="deploy">
+
+    <property name="git.status" value=""/>
+    <property name="git.currentbranch" value=""/>
+    <target name="check-git-branch-status">
+        <exec command="git status -s -b" outputProperty="git.currentbranch" />
+        <echo msg="${git.currentbranch}"/>
+        <if>
+            <contains string="${git.currentbranch}" substring="${head}"/>
+            <then>
+                <echo>On branch ${head}</echo>
+            </then>
+            <else>
+                <fail message="-Dhead=${head} arg did not match ${git.currentbranch}"/>
+            </else>
+        </if>
+        <exec command="git status -s" outputProperty="git.status" />
+        <if>
+            <equals arg1="${git.status}" arg2="" trim="true"/>
+            <then>
+                <echo>working directory clean</echo>
+            </then>
+            <else>
+                <echo>${git.status}</echo>
+                <fail message="Working directory isn't clean." />
+            </else>
+        </if>
+    </target>
+
+    <property name="version.changelog" value=""/>
+    <property name="version.version" value=""/>
+    <target name="check-changelog-version">
+        <exec executable="fgrep" outputProperty="version.changelog">
+            <arg value="${new.version} ("/>
+            <arg value="${project.basedir}/CHANGELOG.md"/>
+        </exec>
+        <if>
+            <equals arg1="${version.changelog}" arg2="" trim="true"/>
+            <then>
+                <fail message="${new.version} not mentioned in CHANGELOG"/>
+            </then>
+        </if>
+
+        <exec executable="fgrep" outputProperty="version.version">
+            <arg value="const VERSION = '${new.version}'"/>
+            <arg value="${project.basedir}/src/Guzzle/Common/Version.php"/>
+        </exec>
+        <if>
+            <equals arg1="${version.version}" arg2="" trim="true"/>
+            <then>
+                <fail message="${new.version} not mentioned in Guzzle\Common\Version"/>
+            </then>
+        </if>
+
+        <echo>ChangeLog Match: ${version.changelog}</echo>
+        <echo>Guzzle\Common\Version Match: ${version.version}</echo>
+    </target>
+
+    <target name="help" description="HELP AND REMINDERS about what you can do with this project">
+        <echo>releasing: phing -Dnew.version=3.0.x -Dhead=master release</echo>
+        <echo>--</echo>
+        <exec command="phing -l" passthru="true"/>
+    </target>
+
+    <target name="release" depends="check-changelog-version,check-git-branch-status"
+            description="tag, subtree split, package, deploy: Use: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release">
+        <if>
+            <isset property="new.version" />
+            <then>
+                <if>
+                    <contains string="${new.version}" substring="v" casesensitive="false" />
+                    <then>
+                        <fail message="Please specify version as [0-9].[0-9].[0-9]. (I'll add v for you.)"/>
+                    </then>
+                    <else>
+
+                        <echo>BEGINNING RELEASE FOR ${new.version}</echo>
+
+                        <!-- checkout the specified branch -->
+                        <!-- <gitcheckout repository="${repo.dir}" branchname="${head}" gitPath="${cmd.git}" /> -->
+                        <!-- Ensure that the tag exists -->
+                        <!-- push the tag up so subsplit will get it -->
+                        <!--gitpush repository="${repo.dir}" tags="true" gitPath="${cmd.git}" /-->
+
+                        <!-- now do the subsplits -->
+                        <guzzlesubsplit
+                                repository="${repo.dir}"
+                                remote="${guzzle.remote}"
+                                heads="${head}"
+                                tags="v${new.version}"
+                                base="src"
+                                subIndicatorFile="composer.json"
+                                gitPath="${cmd.git}" />
+
+                        <!-- Copy .md files into the PEAR package -->
+                        <copy file="${repo.dir}/LICENSE" tofile=".subsplit/src/Guzzle/LICENSE.md" />
+                        <copy file="${repo.dir}/README.md" tofile=".subsplit/src/Guzzle/README.md" />
+                        <copy file="${repo.dir}/CHANGELOG.md" tofile=".subsplit/src/Guzzle/CHANGELOG.md" />
+
+                        <!-- and now the pear packages -->
+                        <guzzlepear
+                                version="${new.version}"
+                                makephar="true"
+                                />
+                    </else>
+
+                </if>
+            </then>
+
+            <else>
+                <echo>Tip: to create a new release, do: phing -Dnew.version=[TAG] -Dhead=[BRANCH] release</echo>
+            </else>
+
+        </if>
+    </target>
+
+    <target name="pear-channel">
+        <guzzlepear version="${new.version}" deploy="true" makephar="true" />
+    </target>
+
+    <target name="package-phar" description="Create a phar with an autoloader">
+        <pharpackage
+                destfile="${dir.output}/guzzle.phar"
+                basedir="${project.basedir}/.subsplit"
+                stub="phar-stub.php"
+                signature="md5">
+            <fileset dir="${project.basedir}/.subsplit">
+                <include name="src/**/*.php" />
+                <include name="src/**/*.pem" />
+                <include name="vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php" />
+                <include name="vendor/symfony/event-dispatcher/**/*.php" />
+                <include name="vendor/doctrine/common/lib/Doctrine/Common/Cache/*.php" />
+                <include name="vendor/monolog/monolog/src/**/*.php" />
+            </fileset>
+            <metadata>
+                <element name="author" value="Michael Dowling" />
+            </metadata>
+        </pharpackage>
+    </target>
+
+</project>

+ 152 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/ComposerLintTask.php

@@ -0,0 +1,152 @@
+<?php
+/**
+ * Phing task for composer validation.
+ *
+ * @copyright 2012 Clay Loveless <clay@php.net>
+ * @license   http://claylo.mit-license.org/2012/ MIT License
+ */
+
+require_once 'phing/Task.php';
+
+class ComposerLintTask extends Task
+{
+    protected $dir = null;
+    protected $file = null;
+    protected $passthru = false;
+    protected $composer = null;
+
+    /**
+     * The setter for the dir
+     *
+     * @param string $str Directory to crawl recursively for composer files
+     */
+    public function setDir($str)
+    {
+        $this->dir = $str;
+    }
+
+    /**
+     * The setter for the file
+     *
+     * @param string $str Individual file to validate
+     */
+    public function setFile($str)
+    {
+        $this->file = $str;
+    }
+
+    /**
+     * Whether to use PHP's passthru() function instead of exec()
+     *
+     * @param boolean $passthru If passthru shall be used
+     */
+    public function setPassthru($passthru)
+    {
+        $this->passthru = (bool) $passthru;
+    }
+
+    /**
+     * Composer to execute. If unset, will attempt composer.phar in project
+     * basedir, and if that fails, will attempt global composer
+     * installation.
+     *
+     * @param string $str Individual file to validate
+     */
+    public function setComposer($str)
+    {
+        $this->file = $str;
+    }
+
+    /**
+     * The init method: do init steps
+     */
+    public function init()
+    {
+        // nothing needed here
+    }
+
+    /**
+     * The main entry point
+     */
+    public function main()
+    {
+        if ($this->composer === null) {
+            $this->findComposer();
+        }
+
+        $files = array();
+        if (!empty($this->file) && file_exists($this->file)) {
+            $files[] = $this->file;
+        }
+
+        if (!empty($this->dir)) {
+            $found = $this->findFiles();
+            foreach ($found as $file) {
+                $files[] = $this->dir . DIRECTORY_SEPARATOR . $file;
+            }
+        }
+
+        foreach ($files as $file) {
+
+            $cmd = $this->composer . ' validate ' . $file;
+            $cmd = escapeshellcmd($cmd);
+
+            if ($this->passthru) {
+                $retval = null;
+                passthru($cmd, $retval);
+                if ($retval == 1) {
+                    throw new BuildException('invalid composer.json');
+                }
+            } else {
+                $out = array();
+                $retval = null;
+                exec($cmd, $out, $retval);
+                if ($retval == 1) {
+                    $err = join("\n", $out);
+                    throw new BuildException($err);
+                } else {
+                    $this->log($out[0]);
+                }
+            }
+
+        }
+
+    }
+
+    /**
+     * Find the composer.json files using Phing's directory scanner
+     *
+     * @return array
+     */
+    protected function findFiles()
+    {
+        $ds = new DirectoryScanner();
+        $ds->setBasedir($this->dir);
+        $ds->setIncludes(array('**/composer.json'));
+        $ds->scan();
+        return $ds->getIncludedFiles();
+    }
+
+    /**
+     * Find composer installation
+     *
+     */
+    protected function findComposer()
+    {
+        $basedir = $this->project->getBasedir();
+        $php = $this->project->getProperty('php.interpreter');
+
+        if (file_exists($basedir . '/composer.phar')) {
+            $this->composer = "$php $basedir/composer.phar";
+        } else {
+            $out = array();
+            exec('which composer', $out);
+            if (empty($out)) {
+                throw new BuildException(
+                    'Could not determine composer location.'
+                );
+            }
+            $this->composer = $out[0];
+        }
+    }
+}

+ 338 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzlePearPharPackageTask.php

@@ -0,0 +1,338 @@
+<?php
+/**
+ * This file is part of Guzzle's build process.
+ *
+ * @copyright 2012 Clay Loveless <clay@php.net>
+ * @license   http://claylo.mit-license.org/2012/ MIT License
+ */
+
+require_once 'phing/Task.php';
+require_once 'PEAR/PackageFileManager2.php';
+require_once 'PEAR/PackageFileManager/File.php';
+require_once 'PEAR/Packager.php';
+
+class GuzzlePearPharPackageTask extends Task
+{
+    private $version;
+    private $deploy = true;
+    private $makephar = true;
+
+    private $subpackages = array();
+
+    public function setVersion($str)
+    {
+        $this->version = $str;
+    }
+
+    public function getVersion()
+    {
+        return $this->version;
+    }
+
+    public function setDeploy($deploy)
+    {
+        $this->deploy = (bool) $deploy;
+    }
+
+    public function getDeploy()
+    {
+        return $this->deploy;
+    }
+
+    public function setMakephar($makephar)
+    {
+        $this->makephar = (bool) $makephar;
+    }
+
+    public function getMakephar()
+    {
+        return $this->makephar;
+    }
+
+    private $basedir;
+    private $guzzleinfo;
+    private $changelog_release_date;
+    private $changelog_notes = '-';
+
+    public function main()
+    {
+        $this->basedir = $this->getProject()->getBasedir();
+
+        if (!is_dir((string) $this->basedir.'/.subsplit')) {
+            throw new BuildException('PEAR packaging requires .subsplit directory');
+        }
+
+        // main composer file
+        $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/composer.json');
+        $this->guzzleinfo = json_decode($composer_file, true);
+
+        // make sure we have a target
+        $pearwork = (string) $this->basedir . '/build/pearwork';
+        if (!is_dir($pearwork)) {
+            mkdir($pearwork, 0777, true);
+        }
+        $pearlogs = (string) $this->basedir . '/build/artifacts/logs';
+        if (!is_dir($pearlogs)) {
+            mkdir($pearlogs, 0777, true);
+        }
+
+        $version = $this->getVersion();
+        $this->grabChangelog();
+        if ($version[0] == '2') {
+            $this->log('building single PEAR package');
+            $this->buildSinglePackage();
+        } else {
+            // $this->log("building PEAR subpackages");
+            // $this->createSubPackages();
+            // $this->log("building PEAR bundle package");
+            $this->buildSinglePackage();
+        }
+
+        if ($this->getMakephar()) {
+            $this->log("building PHAR");
+            $this->getProject()->executeTarget('package-phar');
+        }
+
+        if ($this->getDeploy()) {
+            $this->doDeployment();
+        }
+    }
+
+    public function doDeployment()
+    {
+        $basedir = (string) $this->basedir;
+        $this->log('beginning PEAR/PHAR deployment');
+
+        chdir($basedir . '/build/pearwork');
+        if (!is_dir('./channel')) {
+            mkdir('./channel');
+        }
+
+        // Pull the PEAR channel down locally
+        passthru('aws s3 sync s3://pear.guzzlephp.org ./channel');
+
+        // add PEAR packages
+        foreach (scandir('./') as $file) {
+            if (substr($file, -4) == '.tgz') {
+                passthru('pirum add ./channel ' . $file);
+            }
+        }
+
+        // if we have a new phar, add it
+        if ($this->getMakephar() && file_exists($basedir . '/build/artifacts/guzzle.phar')) {
+            rename($basedir . '/build/artifacts/guzzle.phar', './channel/guzzle.phar');
+        }
+
+        // Sync up with the S3 bucket
+        chdir($basedir . '/build/pearwork/channel');
+        passthru('aws s3 sync . s3://pear.guzzlephp.org');
+    }
+
+    public function buildSinglePackage()
+    {
+        $v = $this->getVersion();
+        $apiversion = $v[0] . '.0.0';
+
+        $opts = array(
+            'packagedirectory' => (string) $this->basedir . '/.subsplit/src/',
+            'filelistgenerator' => 'file',
+            'ignore' => array('*composer.json'),
+            'baseinstalldir' => '/',
+            'packagefile' => 'package.xml'
+            //'outputdirectory' => (string) $this->basedir . '/build/pearwork/'
+        );
+        $pfm = new PEAR_PackageFileManager2();
+        $pfm->setOptions($opts);
+        $pfm->addRole('md', 'doc');
+        $pfm->addRole('pem', 'php');
+        $pfm->setPackage('Guzzle');
+        $pfm->setSummary("Object-oriented PHP HTTP Client for PHP 5.3+");
+        $pfm->setDescription($this->guzzleinfo['description']);
+        $pfm->setPackageType('php');
+        $pfm->setChannel('guzzlephp.org/pear');
+        $pfm->setAPIVersion($apiversion);
+        $pfm->setReleaseVersion($this->getVersion());
+        $pfm->setAPIStability('stable');
+        $pfm->setReleaseStability('stable');
+        $pfm->setNotes($this->changelog_notes);
+        $pfm->setPackageType('php');
+        $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE');
+        $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes');
+        $pfm->setDate($this->changelog_release_date);
+        $pfm->generateContents();
+
+        $phpdep = $this->guzzleinfo['require']['php'];
+        $phpdep = str_replace('>=', '', $phpdep);
+        $pfm->setPhpDep($phpdep);
+        $pfm->addExtensionDep('required', 'curl');
+        $pfm->setPearinstallerDep('1.4.6');
+        $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0');
+        if (!empty($this->subpackages)) {
+            foreach ($this->subpackages as $package) {
+                $pkg = dirname($package);
+                $pkg = str_replace('/', '_', $pkg);
+                $pfm->addConflictingPackageDepWithChannel($pkg, 'guzzlephp.org/pear', false, $apiversion);
+            }
+        }
+
+        ob_start();
+        $startdir = getcwd();
+        chdir((string) $this->basedir . '/build/pearwork');
+
+        echo "DEBUGGING GENERATED PACKAGE FILE\n";
+        $result = $pfm->debugPackageFile();
+        if ($result) {
+            $out = $pfm->writePackageFile();
+            echo "\n\n\nWRITE PACKAGE FILE RESULT:\n";
+            var_dump($out);
+            // load up package file and build package
+            $packager = new PEAR_Packager();
+            echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n";
+            $dest_package = $packager->package($opts['packagedirectory'].'package.xml');
+            var_dump($dest_package);
+        } else {
+            echo "\n\n\nDEBUGGING RESULT:\n";
+            var_dump($result);
+        }
+        echo "removing package.xml";
+        unlink($opts['packagedirectory'].'package.xml');
+        $log = ob_get_clean();
+        file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package.log', $log);
+        chdir($startdir);
+    }
+
+    public function createSubPackages()
+    {
+        $this->findComponents();
+
+        foreach ($this->subpackages as $package) {
+            $baseinstalldir = dirname($package);
+            $dir = (string) $this->basedir.'/.subsplit/src/' . $baseinstalldir;
+            $composer_file = file_get_contents((string) $this->basedir.'/.subsplit/src/'. $package);
+            $package_info = json_decode($composer_file, true);
+            $this->log('building ' . $package_info['target-dir'] . ' subpackage');
+            $this->buildSubPackage($dir, $baseinstalldir, $package_info);
+        }
+    }
+
+    public function buildSubPackage($dir, $baseinstalldir, $info)
+    {
+        $package = str_replace('/', '_', $baseinstalldir);
+        $opts = array(
+            'packagedirectory' => $dir,
+            'filelistgenerator' => 'file',
+            'ignore' => array('*composer.json', '*package.xml'),
+            'baseinstalldir' => '/' . $info['target-dir'],
+            'packagefile' => 'package.xml'
+        );
+        $pfm = new PEAR_PackageFileManager2();
+        $pfm->setOptions($opts);
+        $pfm->setPackage($package);
+        $pfm->setSummary($info['description']);
+        $pfm->setDescription($info['description']);
+        $pfm->setPackageType('php');
+        $pfm->setChannel('guzzlephp.org/pear');
+        $pfm->setAPIVersion('3.0.0');
+        $pfm->setReleaseVersion($this->getVersion());
+        $pfm->setAPIStability('stable');
+        $pfm->setReleaseStability('stable');
+        $pfm->setNotes($this->changelog_notes);
+        $pfm->setPackageType('php');
+        $pfm->setLicense('MIT', 'http://github.com/guzzle/guzzle/blob/master/LICENSE');
+        $pfm->addMaintainer('lead', 'mtdowling', 'Michael Dowling', 'mtdowling@gmail.com', 'yes');
+        $pfm->setDate($this->changelog_release_date);
+        $pfm->generateContents();
+
+        $phpdep = $this->guzzleinfo['require']['php'];
+        $phpdep = str_replace('>=', '', $phpdep);
+        $pfm->setPhpDep($phpdep);
+        $pfm->setPearinstallerDep('1.4.6');
+
+        foreach ($info['require'] as $type => $version) {
+            if ($type == 'php') {
+                continue;
+            }
+            if ($type == 'symfony/event-dispatcher') {
+                $pfm->addPackageDepWithChannel('required', 'EventDispatcher', 'pear.symfony.com', '2.1.0');
+            }
+            if ($type == 'ext-curl') {
+                $pfm->addExtensionDep('required', 'curl');
+            }
+            if (substr($type, 0, 6) == 'guzzle') {
+                $gdep = str_replace('/', ' ', $type);
+                $gdep = ucwords($gdep);
+                $gdep = str_replace(' ', '_', $gdep);
+                $pfm->addPackageDepWithChannel('required', $gdep, 'guzzlephp.org/pear', $this->getVersion());
+            }
+        }
+
+        // can't have main Guzzle package AND sub-packages
+        $pfm->addConflictingPackageDepWithChannel('Guzzle', 'guzzlephp.org/pear', false, $apiversion);
+
+        ob_start();
+        $startdir = getcwd();
+        chdir((string) $this->basedir . '/build/pearwork');
+
+        echo "DEBUGGING GENERATED PACKAGE FILE\n";
+        $result = $pfm->debugPackageFile();
+        if ($result) {
+            $out = $pfm->writePackageFile();
+            echo "\n\n\nWRITE PACKAGE FILE RESULT:\n";
+            var_dump($out);
+            // load up package file and build package
+            $packager = new PEAR_Packager();
+            echo "\n\n\nBUILDING PACKAGE FROM PACKAGE FILE:\n";
+            $dest_package = $packager->package($opts['packagedirectory'].'/package.xml');
+            var_dump($dest_package);
+        } else {
+            echo "\n\n\nDEBUGGING RESULT:\n";
+            var_dump($result);
+        }
+        echo "removing package.xml";
+        unlink($opts['packagedirectory'].'/package.xml');
+        $log = ob_get_clean();
+        file_put_contents((string) $this->basedir . '/build/artifacts/logs/pear_package_'.$package.'.log', $log);
+        chdir($startdir);
+    }
+
+    public function findComponents()
+    {
+        $ds = new DirectoryScanner();
+        $ds->setBasedir((string) $this->basedir.'/.subsplit/src');
+        $ds->setIncludes(array('**/composer.json'));
+        $ds->scan();
+        $files = $ds->getIncludedFiles();
+        $this->subpackages = $files;
+    }
+
+    public function grabChangelog()
+    {
+        $cl = file((string) $this->basedir.'/.subsplit/CHANGELOG.md');
+        $notes = '';
+        $in_version = false;
+        $release_date = null;
+
+        foreach ($cl as $line) {
+            $line = trim($line);
+            if (preg_match('/^\* '.$this->getVersion().' \(([0-9\-]+)\)$/', $line, $matches)) {
+                $release_date = $matches[1];
+                $in_version = true;
+                continue;
+            }
+            if ($in_version && empty($line) && empty($notes)) {
+                continue;
+            }
+            if ($in_version && ! empty($line)) {
+                $notes .= $line."\n";
+            }
+            if ($in_version && empty($line) && !empty($notes)) {
+                $in_version = false;
+            }
+        }
+        $this->changelog_release_date = $release_date;
+
+        if (! empty($notes)) {
+            $this->changelog_notes = $notes;
+        }
+    }
+}

+ 385 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phing/tasks/GuzzleSubSplitTask.php

@@ -0,0 +1,385 @@
+<?php
+/**
+ * Phing wrapper around git subsplit.
+ *
+ * @see https://github.com/dflydev/git-subsplit
+ * @copyright 2012 Clay Loveless <clay@php.net>
+ * @license   http://claylo.mit-license.org/2012/ MIT License
+ */
+
+require_once 'phing/tasks/ext/git/GitBaseTask.php';
+
+// base - base of tree to split out
+// subIndicatorFile - composer.json, package.xml?
+class GuzzleSubSplitTask extends GitBaseTask
+{
+    /**
+     * What git repository to pull from and publish to
+     */
+    protected $remote = null;
+
+    /**
+     * Publish for comma-separated heads instead of all heads
+     */
+    protected $heads = null;
+
+    /**
+     * Publish for comma-separated tags instead of all tags
+     */
+    protected $tags = null;
+
+    /**
+     * Base of the tree RELATIVE TO .subsplit working dir
+     */
+    protected $base = null;
+
+    /**
+     * The presence of this file will indicate that the directory it resides
+     * in is at the top level of a split.
+     */
+    protected $subIndicatorFile = 'composer.json';
+
+    /**
+     * Do everything except actually send the update.
+     */
+    protected $dryRun = null;
+
+    /**
+     * Do not sync any heads.
+     */
+    protected $noHeads = false;
+
+    /**
+     * Do not sync any tags.
+     */
+    protected $noTags = false;
+
+    /**
+     * The splits we found in the heads
+     */
+    protected $splits;
+
+    public function setRemote($str)
+    {
+        $this->remote = $str;
+    }
+
+    public function getRemote()
+    {
+        return $this->remote;
+    }
+
+    public function setHeads($str)
+    {
+        $this->heads = explode(',', $str);
+    }
+
+    public function getHeads()
+    {
+        return $this->heads;
+    }
+
+    public function setTags($str)
+    {
+        $this->tags = explode(',', $str);
+    }
+
+    public function getTags()
+    {
+        return $this->tags;
+    }
+
+    public function setBase($str)
+    {
+        $this->base = $str;
+    }
+
+    public function getBase()
+    {
+        return $this->base;
+    }
+
+    public function setSubIndicatorFile($str)
+    {
+        $this->subIndicatorFile = $str;
+    }
+
+    public function getSubIndicatorFile()
+    {
+        return $this->subIndicatorFile;
+    }
+
+    public function setDryRun($bool)
+    {
+        $this->dryRun = (bool) $bool;
+    }
+
+    public function getDryRun()
+    {
+        return $this->dryRun;
+    }
+
+    public function setNoHeads($bool)
+    {
+        $this->noHeads = (bool) $bool;
+    }
+
+    public function getNoHeads()
+    {
+        return $this->noHeads;
+    }
+
+    public function setNoTags($bool)
+    {
+        $this->noTags = (bool) $bool;
+    }
+
+    public function getNoTags()
+    {
+        return $this->noTags;
+    }
+
+    /**
+     * GitClient from VersionControl_Git
+     */
+    protected $client   = null;
+
+    /**
+     * The main entry point
+     */
+    public function main()
+    {
+        $repo = $this->getRepository();
+        if (empty($repo)) {
+            throw new BuildException('"repository" is a required parameter');
+        }
+
+        $remote = $this->getRemote();
+        if (empty($remote)) {
+            throw new BuildException('"remote" is a required parameter');
+        }
+
+        chdir($repo);
+        $this->client = $this->getGitClient(false, $repo);
+
+        // initalized yet?
+        if (!is_dir('.subsplit')) {
+            $this->subsplitInit();
+        } else {
+            // update
+            $this->subsplitUpdate();
+        }
+
+        // find all splits based on heads requested
+        $this->findSplits();
+
+        // check that GitHub has the repos
+        $this->verifyRepos();
+
+        // execute the subsplits
+        $this->publish();
+    }
+
+    public function publish()
+    {
+        $this->log('DRY RUN ONLY FOR NOW');
+        $base = $this->getBase();
+        $base = rtrim($base, '/') . '/';
+        $org = $this->getOwningTarget()->getProject()->getProperty('github.org');
+
+        $splits = array();
+
+        $heads = $this->getHeads();
+        foreach ($heads as $head) {
+            foreach ($this->splits[$head] as $component => $meta) {
+                $splits[] = $base . $component . ':git@github.com:'. $org.'/'.$meta['repo'];
+            }
+
+            $cmd = 'git subsplit publish ';
+            $cmd .= escapeshellarg(implode(' ', $splits));
+
+            if ($this->getNoHeads()) {
+                $cmd .= ' --no-heads';
+            } else {
+                $cmd .= ' --heads='.$head;
+            }
+
+            if ($this->getNoTags()) {
+                $cmd .= ' --no-tags';
+            } else {
+                if ($this->getTags()) {
+                    $cmd .= ' --tags=' . escapeshellarg(implode(' ', $this->getTags()));
+                }
+            }
+
+            passthru($cmd);
+        }
+    }
+
+    /**
+     * Runs `git subsplit update`
+     */
+    public function subsplitUpdate()
+    {
+        $repo = $this->getRepository();
+        $this->log('git-subsplit update...');
+        $cmd = $this->client->getCommand('subsplit');
+        $cmd->addArgument('update');
+        try {
+            $cmd->execute();
+        } catch (Exception $e) {
+            throw new BuildException('git subsplit update failed'. $e);
+        }
+        chdir($repo . '/.subsplit');
+        passthru('php ../composer.phar update --dev');
+        chdir($repo);
+    }
+
+    /**
+     * Runs `git subsplit init` based on the remote repository.
+     */
+    public function subsplitInit()
+    {
+        $remote = $this->getRemote();
+        $cmd = $this->client->getCommand('subsplit');
+        $this->log('running git-subsplit init ' . $remote);
+
+        $cmd->setArguments(array(
+            'init',
+            $remote
+        ));
+
+        try {
+            $output = $cmd->execute();
+        } catch (Exception $e) {
+            throw new BuildException('git subsplit init failed'. $e);
+        }
+        $this->log(trim($output), Project::MSG_INFO);
+        $repo = $this->getRepository();
+        chdir($repo . '/.subsplit');
+        passthru('php ../composer.phar install --dev');
+        chdir($repo);
+    }
+
+    /**
+     * Find the composer.json files using Phing's directory scanner
+     *
+     * @return array
+     */
+    protected function findSplits()
+    {
+        $this->log("checking heads for subsplits");
+        $repo = $this->getRepository();
+        $base = $this->getBase();
+
+        $splits = array();
+        $heads = $this->getHeads();
+
+        if (!empty($base)) {
+            $base = '/' . ltrim($base, '/');
+        } else {
+            $base = '/';
+        }
+
+        chdir($repo . '/.subsplit');
+        foreach ($heads as $head) {
+            $splits[$head] = array();
+
+            // check each head requested *BEFORE* the actual subtree split command gets it
+            passthru("git checkout '$head'");
+            $ds = new DirectoryScanner();
+            $ds->setBasedir($repo . '/.subsplit' . $base);
+            $ds->setIncludes(array('**/'.$this->subIndicatorFile));
+            $ds->scan();
+            $files = $ds->getIncludedFiles();
+
+            // Process the files we found
+            foreach ($files as $file) {
+                $pkg = file_get_contents($repo . '/.subsplit' . $base .'/'. $file);
+                $pkg_json = json_decode($pkg, true);
+                $name = $pkg_json['name'];
+                $component = str_replace('/composer.json', '', $file);
+                // keep this for split cmd
+                $tmpreponame = explode('/', $name);
+                $reponame = $tmpreponame[1];
+                $splits[$head][$component]['repo'] = $reponame;
+                $nscomponent = str_replace('/', '\\', $component);
+                $splits[$head][$component]['desc'] = "[READ ONLY] Subtree split of $nscomponent: " . $pkg_json['description'];
+            }
+        }
+
+        // go back to how we found it
+        passthru("git checkout master");
+        chdir($repo);
+        $this->splits = $splits;
+    }
+
+    /**
+     * Based on list of repositories we determined we *should* have, talk
+     * to GitHub and make sure they're all there.
+     *
+     */
+    protected function verifyRepos()
+    {
+        $this->log('verifying GitHub target repos');
+        $github_org = $this->getOwningTarget()->getProject()->getProperty('github.org');
+        $github_creds = $this->getOwningTarget()->getProject()->getProperty('github.basicauth');
+
+        if ($github_creds == 'username:password') {
+            $this->log('Skipping GitHub repo checks. Update github.basicauth in build.properties to verify repos.', 1);
+            return;
+        }
+
+        $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos?type=all');
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($ch, CURLOPT_USERPWD, $github_creds);
+        // change this when we know we can use our bundled CA bundle!
+        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+        $result = curl_exec($ch);
+        curl_close($ch);
+        $repos = json_decode($result, true);
+        $existing_repos = array();
+
+        // parse out the repos we found on GitHub
+        foreach ($repos as $repo) {
+            $tmpreponame = explode('/', $repo['full_name']);
+            $reponame = $tmpreponame[1];
+            $existing_repos[$reponame] = $repo['description'];
+        }
+
+        $heads = $this->getHeads();
+        foreach ($heads as $head) {
+            foreach ($this->splits[$head] as $component => $meta) {
+
+                $reponame = $meta['repo'];
+
+                if (!isset($existing_repos[$reponame])) {
+                    $this->log("Creating missing repo $reponame");
+                    $payload = array(
+                        'name' => $reponame,
+                        'description' => $meta['desc'],
+                        'homepage' => 'http://www.guzzlephp.org/',
+                        'private' => true,
+                        'has_issues' => false,
+                        'has_wiki' => false,
+                        'has_downloads' => true,
+                        'auto_init' => false
+                    );
+                    $ch = curl_init('https://api.github.com/orgs/'.$github_org.'/repos');
+                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+                    curl_setopt($ch, CURLOPT_USERPWD, $github_creds);
+                    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
+                    curl_setopt($ch, CURLOPT_POST, 1);
+                    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
+                    // change this when we know we can use our bundled CA bundle!
+                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+                    $result = curl_exec($ch);
+                    echo "Response code: ".curl_getinfo($ch, CURLINFO_HTTP_CODE)."\n";
+                    curl_close($ch);
+                } else {
+                    $this->log("Repo $reponame exists", 2);
+                }
+            }
+        }
+    }
+}

+ 48 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/phpunit.xml.dist

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/bootstrap.php"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         syntaxCheck="false"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">
+
+    <testsuites>
+        <testsuite>
+            <directory>./tests/Guzzle/Tests</directory>
+        </testsuite>
+    </testsuites>
+
+    <logging>
+        <log type="junit" target="build/artifacts/logs/junit.xml" logIncompleteSkipped="false" />
+    </logging>
+
+    <filter>
+        <whitelist>
+            <directory suffix=".php">./src/Guzzle</directory>
+            <exclude>
+                <directory suffix="Interface.php">./src/Guzzle</directory>
+                <file>./src/Guzzle/Common/Exception/GuzzleException.php</file>
+                <file>./src/Guzzle/Http/Exception/HttpException.php</file>
+                <file>./src/Guzzle/Http/Exception/ServerErrorResponseException.php</file>
+                <file>./src/Guzzle/Http/Exception/ClientErrorResponseException.php</file>
+                <file>./src/Guzzle/Http/Exception/TooManyRedirectsException.php</file>
+                <file>./src/Guzzle/Http/Exception/CouldNotRewindStreamException.php</file>
+                <file>./src/Guzzle/Common/Exception/BadMethodCallException.php</file>
+                <file>./src/Guzzle/Common/Exception/InvalidArgumentException.php</file>
+                <file>./src/Guzzle/Common/Exception/RuntimeException.php</file>
+                <file>./src/Guzzle/Common/Exception/UnexpectedValueException.php</file>
+                <file>./src/Guzzle/Service/Exception/ClientNotFoundException.php</file>
+                <file>./src/Guzzle/Service/Exception/CommandException.php</file>
+                <file>./src/Guzzle/Service/Exception/DescriptionBuilderException.php</file>
+                <file>./src/Guzzle/Service/Exception/ServiceBuilderException.php</file>
+                <file>./src/Guzzle/Service/Exception/ServiceNotFoundException.php</file>
+                <file>./src/Guzzle/Service/Exception/ValidationException.php</file>
+                <file>./src/Guzzle/Service/Exception/JsonException.php</file>
+            </exclude>
+        </whitelist>
+    </filter>
+
+</phpunit>

+ 66 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/AbstractBatchDecorator.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Abstract decorator used when decorating a BatchInterface
+ */
+abstract class AbstractBatchDecorator implements BatchInterface
+{
+    /** @var BatchInterface Decorated batch object */
+    protected $decoratedBatch;
+
+    /**
+     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
+     */
+    public function __construct(BatchInterface $decoratedBatch)
+    {
+        $this->decoratedBatch = $decoratedBatch;
+    }
+
+    /**
+     * Allow decorators to implement custom methods
+     *
+     * @param string $method Missing method name
+     * @param array  $args   Method arguments
+     *
+     * @return mixed
+     * @codeCoverageIgnore
+     */
+    public function __call($method, array $args)
+    {
+        return call_user_func_array(array($this->decoratedBatch, $method), $args);
+    }
+
+    public function add($item)
+    {
+        $this->decoratedBatch->add($item);
+
+        return $this;
+    }
+
+    public function flush()
+    {
+        return $this->decoratedBatch->flush();
+    }
+
+    public function isEmpty()
+    {
+        return $this->decoratedBatch->isEmpty();
+    }
+
+    /**
+     * Trace the decorators associated with the batch
+     *
+     * @return array
+     */
+    public function getDecorators()
+    {
+        $found = array($this);
+        if (method_exists($this->decoratedBatch, 'getDecorators')) {
+            $found = array_merge($found, $this->decoratedBatch->getDecorators());
+        }
+
+        return $found;
+    }
+}

+ 92 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Batch.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Batch\Exception\BatchTransferException;
+
+/**
+ * Default batch implementation used to convert queued items into smaller chunks of batches using a
+ * {@see BatchDivisorIterface} and transfers each batch using a {@see BatchTransferInterface}.
+ *
+ * Any exception encountered during a flush operation will throw a {@see BatchTransferException} object containing the
+ * batch that failed. After an exception is encountered, you can flush the batch again to attempt to finish transferring
+ * any previously created batches or queued items.
+ */
+class Batch implements BatchInterface
+{
+    /** @var \SplQueue Queue of items in the queue */
+    protected $queue;
+
+    /** @var array Divided batches to be transferred */
+    protected $dividedBatches;
+
+    /** @var BatchTransferInterface */
+    protected $transferStrategy;
+
+    /** @var BatchDivisorInterface */
+    protected $divisionStrategy;
+
+    /**
+     * @param BatchTransferInterface $transferStrategy Strategy used to transfer items
+     * @param BatchDivisorInterface  $divisionStrategy Divisor used to create batches
+     */
+    public function __construct(BatchTransferInterface $transferStrategy, BatchDivisorInterface $divisionStrategy)
+    {
+        $this->transferStrategy = $transferStrategy;
+        $this->divisionStrategy = $divisionStrategy;
+        $this->queue = new \SplQueue();
+        $this->queue->setIteratorMode(\SplQueue::IT_MODE_DELETE);
+        $this->dividedBatches = array();
+    }
+
+    public function add($item)
+    {
+        $this->queue->enqueue($item);
+
+        return $this;
+    }
+
+    public function flush()
+    {
+        $this->createBatches();
+
+        $items = array();
+        foreach ($this->dividedBatches as $batchIndex => $dividedBatch) {
+            while ($dividedBatch->valid()) {
+                $batch = $dividedBatch->current();
+                $dividedBatch->next();
+                try {
+                    $this->transferStrategy->transfer($batch);
+                    $items = array_merge($items, $batch);
+                } catch (\Exception $e) {
+                    throw new BatchTransferException($batch, $items, $e, $this->transferStrategy, $this->divisionStrategy);
+                }
+            }
+            // Keep the divided batch down to a minimum in case of a later exception
+            unset($this->dividedBatches[$batchIndex]);
+        }
+
+        return $items;
+    }
+
+    public function isEmpty()
+    {
+        return count($this->queue) == 0 && count($this->dividedBatches) == 0;
+    }
+
+    /**
+     * Create batches for any queued items
+     */
+    protected function createBatches()
+    {
+        if (count($this->queue)) {
+            if ($batches = $this->divisionStrategy->createBatches($this->queue)) {
+                // Convert arrays into iterators
+                if (is_array($batches)) {
+                    $batches = new \ArrayIterator($batches);
+                }
+                $this->dividedBatches[] = $batches;
+            }
+        }
+    }
+}

+ 199 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchBuilder.php

@@ -0,0 +1,199 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Common\Exception\RuntimeException;
+
+/**
+ * Builder used to create custom batch objects
+ */
+class BatchBuilder
+{
+    /** @var bool Whether or not the batch should automatically flush*/
+    protected $autoFlush = false;
+
+    /** @var bool Whether or not to maintain a batch history */
+    protected $history = false;
+
+    /** @var bool Whether or not to buffer exceptions encountered in transfer */
+    protected $exceptionBuffering = false;
+
+    /** @var mixed Callable to invoke each time a flush completes */
+    protected $afterFlush;
+
+    /** @var BatchTransferInterface Object used to transfer items in the queue */
+    protected $transferStrategy;
+
+    /** @var BatchDivisorInterface Object used to divide the queue into batches */
+    protected $divisorStrategy;
+
+    /** @var array of Mapped transfer strategies by handle name */
+    protected static $mapping = array(
+        'request' => 'Guzzle\Batch\BatchRequestTransfer',
+        'command' => 'Guzzle\Batch\BatchCommandTransfer'
+    );
+
+    /**
+     * Create a new instance of the BatchBuilder
+     *
+     * @return BatchBuilder
+     */
+    public static function factory()
+    {
+        return new self();
+    }
+
+    /**
+     * Automatically flush the batch when the size of the queue reaches a certain threshold. Adds {@see FlushingBatch}.
+     *
+     * @param $threshold Number of items to allow in the queue before a flush
+     *
+     * @return BatchBuilder
+     */
+    public function autoFlushAt($threshold)
+    {
+        $this->autoFlush = $threshold;
+
+        return $this;
+    }
+
+    /**
+     * Maintain a history of all items that have been transferred using the batch. Adds {@see HistoryBatch}.
+     *
+     * @return BatchBuilder
+     */
+    public function keepHistory()
+    {
+        $this->history = true;
+
+        return $this;
+    }
+
+    /**
+     * Buffer exceptions thrown during transfer so that you can transfer as much as possible, and after a transfer
+     * completes, inspect each exception that was thrown. Enables the {@see ExceptionBufferingBatch} decorator.
+     *
+     * @return BatchBuilder
+     */
+    public function bufferExceptions()
+    {
+        $this->exceptionBuffering = true;
+
+        return $this;
+    }
+
+    /**
+     * Notify a callable each time a batch flush completes. Enables the {@see NotifyingBatch} decorator.
+     *
+     * @param mixed $callable Callable function to notify
+     *
+     * @return BatchBuilder
+     * @throws InvalidArgumentException if the argument is not callable
+     */
+    public function notify($callable)
+    {
+        $this->afterFlush = $callable;
+
+        return $this;
+    }
+
+    /**
+     * Configures the batch to transfer batches of requests. Associates a {@see \Guzzle\Http\BatchRequestTransfer}
+     * object as both the transfer and divisor strategy.
+     *
+     * @param int $batchSize Batch size for each batch of requests
+     *
+     * @return BatchBuilder
+     */
+    public function transferRequests($batchSize = 50)
+    {
+        $className = self::$mapping['request'];
+        $this->transferStrategy = new $className($batchSize);
+        $this->divisorStrategy = $this->transferStrategy;
+
+        return $this;
+    }
+
+    /**
+     * Configures the batch to transfer batches commands. Associates as
+     * {@see \Guzzle\Service\Command\BatchCommandTransfer} as both the transfer and divisor strategy.
+     *
+     * @param int $batchSize Batch size for each batch of commands
+     *
+     * @return BatchBuilder
+     */
+    public function transferCommands($batchSize = 50)
+    {
+        $className = self::$mapping['command'];
+        $this->transferStrategy = new $className($batchSize);
+        $this->divisorStrategy = $this->transferStrategy;
+
+        return $this;
+    }
+
+    /**
+     * Specify the strategy used to divide the queue into an array of batches
+     *
+     * @param BatchDivisorInterface $divisorStrategy Strategy used to divide a batch queue into batches
+     *
+     * @return BatchBuilder
+     */
+    public function createBatchesWith(BatchDivisorInterface $divisorStrategy)
+    {
+        $this->divisorStrategy = $divisorStrategy;
+
+        return $this;
+    }
+
+    /**
+     * Specify the strategy used to transport the items when flush is called
+     *
+     * @param BatchTransferInterface $transferStrategy How items are transferred
+     *
+     * @return BatchBuilder
+     */
+    public function transferWith(BatchTransferInterface $transferStrategy)
+    {
+        $this->transferStrategy = $transferStrategy;
+
+        return $this;
+    }
+
+    /**
+     * Create and return the instantiated batch
+     *
+     * @return BatchInterface
+     * @throws RuntimeException if no transfer strategy has been specified
+     */
+    public function build()
+    {
+        if (!$this->transferStrategy) {
+            throw new RuntimeException('No transfer strategy has been specified');
+        }
+
+        if (!$this->divisorStrategy) {
+            throw new RuntimeException('No divisor strategy has been specified');
+        }
+
+        $batch = new Batch($this->transferStrategy, $this->divisorStrategy);
+
+        if ($this->exceptionBuffering) {
+            $batch = new ExceptionBufferingBatch($batch);
+        }
+
+        if ($this->afterFlush) {
+            $batch = new NotifyingBatch($batch, $this->afterFlush);
+        }
+
+        if ($this->autoFlush) {
+            $batch = new FlushingBatch($batch, $this->autoFlush);
+        }
+
+        if ($this->history) {
+            $batch = new HistoryBatch($batch);
+        }
+
+        return $batch;
+    }
+}

+ 39 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureDivisor.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+
+/**
+ * Divides batches using a callable
+ */
+class BatchClosureDivisor implements BatchDivisorInterface
+{
+    /** @var callable Method used to divide the batches */
+    protected $callable;
+
+    /** @var mixed $context Context passed to the callable */
+    protected $context;
+
+    /**
+     * @param callable $callable Method used to divide the batches. The method must accept an \SplQueue and return an
+     *                           array of arrays containing the divided items.
+     * @param mixed    $context  Optional context to pass to the batch divisor
+     *
+     * @throws InvalidArgumentException if the callable is not callable
+     */
+    public function __construct($callable, $context = null)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException('Must pass a callable');
+        }
+
+        $this->callable = $callable;
+        $this->context = $context;
+    }
+
+    public function createBatches(\SplQueue $queue)
+    {
+        return call_user_func($this->callable, $queue, $this->context);
+    }
+}

+ 40 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchClosureTransfer.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+
+/**
+ * Batch transfer strategy where transfer logic can be defined via a Closure.
+ * This class is to be used with {@see Guzzle\Batch\BatchInterface}
+ */
+class BatchClosureTransfer implements BatchTransferInterface
+{
+    /** @var callable A closure that performs the transfer */
+    protected $callable;
+
+    /** @var mixed $context Context passed to the callable */
+    protected $context;
+
+    /**
+     * @param mixed $callable Callable that performs the transfer. This function should accept two arguments:
+     *                        (array $batch, mixed $context).
+     * @param mixed $context  Optional context to pass to the batch divisor
+     *
+     * @throws InvalidArgumentException
+     */
+    public function __construct($callable, $context = null)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException('Argument must be callable');
+        }
+
+        $this->callable = $callable;
+        $this->context = $context;
+    }
+
+    public function transfer(array $batch)
+    {
+        return empty($batch) ? null : call_user_func($this->callable, $batch, $this->context);
+    }
+}

+ 75 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchCommandTransfer.php

@@ -0,0 +1,75 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Batch\BatchTransferInterface;
+use Guzzle\Batch\BatchDivisorInterface;
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Service\Command\CommandInterface;
+use Guzzle\Service\Exception\InconsistentClientTransferException;
+
+/**
+ * Efficiently transfers multiple commands in parallel per client
+ * This class is to be used with {@see Guzzle\Batch\BatchInterface}
+ */
+class BatchCommandTransfer implements BatchTransferInterface, BatchDivisorInterface
+{
+    /** @var int Size of each command batch */
+    protected $batchSize;
+
+    /**
+     * @param int $batchSize Size of each batch
+     */
+    public function __construct($batchSize = 50)
+    {
+        $this->batchSize = $batchSize;
+    }
+
+    /**
+     * Creates batches by grouping commands by their associated client
+     * {@inheritdoc}
+     */
+    public function createBatches(\SplQueue $queue)
+    {
+        $groups = new \SplObjectStorage();
+        foreach ($queue as $item) {
+            if (!$item instanceof CommandInterface) {
+                throw new InvalidArgumentException('All items must implement Guzzle\Service\Command\CommandInterface');
+            }
+            $client = $item->getClient();
+            if (!$groups->contains($client)) {
+                $groups->attach($client, new \ArrayObject(array($item)));
+            } else {
+                $groups[$client]->append($item);
+            }
+        }
+
+        $batches = array();
+        foreach ($groups as $batch) {
+            $batches = array_merge($batches, array_chunk($groups[$batch]->getArrayCopy(), $this->batchSize));
+        }
+
+        return $batches;
+    }
+
+    public function transfer(array $batch)
+    {
+        if (empty($batch)) {
+            return;
+        }
+
+        // Get the client of the first found command
+        $client = reset($batch)->getClient();
+
+        // Keep a list of all commands with invalid clients
+        $invalid = array_filter($batch, function ($command) use ($client) {
+            return $command->getClient() !== $client;
+        });
+
+        if (!empty($invalid)) {
+            throw new InconsistentClientTransferException($invalid);
+        }
+
+        $client->execute($batch);
+    }
+}

+ 18 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchDivisorInterface.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Interface used for dividing a queue of items into an array of batches
+ */
+interface BatchDivisorInterface
+{
+    /**
+     * Divide a queue of items into an array batches
+     *
+     * @param \SplQueue $queue Queue of items to divide into batches. Items are removed as they are iterated.
+     *
+     * @return array|\Traversable Returns an array or Traversable object that contains arrays of items to transfer
+     */
+    public function createBatches(\SplQueue $queue);
+}

+ 32 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchInterface.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Interface for efficiently transferring items in a queue using batches
+ */
+interface BatchInterface
+{
+    /**
+     * Add an item to the queue
+     *
+     * @param mixed $item Item to add
+     *
+     * @return self
+     */
+    public function add($item);
+
+    /**
+     * Flush the batch and transfer the items
+     *
+     * @return array Returns an array flushed items
+     */
+    public function flush();
+
+    /**
+     * Check if the batch is empty and has further items to transfer
+     *
+     * @return bool
+     */
+    public function isEmpty();
+}

+ 65 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchRequestTransfer.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Batch\BatchTransferInterface;
+use Guzzle\Batch\BatchDivisorInterface;
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Http\Message\RequestInterface;
+
+/**
+ * Batch transfer strategy used to efficiently transfer a batch of requests.
+ * This class is to be used with {@see Guzzle\Batch\BatchInterface}
+ */
+class BatchRequestTransfer implements BatchTransferInterface, BatchDivisorInterface
+{
+    /** @var int Size of each command batch */
+    protected $batchSize;
+
+    /**
+     * Constructor used to specify how large each batch should be
+     *
+     * @param int $batchSize Size of each batch
+     */
+    public function __construct($batchSize = 50)
+    {
+        $this->batchSize = $batchSize;
+    }
+
+    /**
+     * Creates batches of requests by grouping requests by their associated curl multi object.
+     * {@inheritdoc}
+     */
+    public function createBatches(\SplQueue $queue)
+    {
+        // Create batches by client objects
+        $groups = new \SplObjectStorage();
+        foreach ($queue as $item) {
+            if (!$item instanceof RequestInterface) {
+                throw new InvalidArgumentException('All items must implement Guzzle\Http\Message\RequestInterface');
+            }
+            $client = $item->getClient();
+            if (!$groups->contains($client)) {
+                $groups->attach($client, array($item));
+            } else {
+                $current = $groups[$client];
+                $current[] = $item;
+                $groups[$client] = $current;
+            }
+        }
+
+        $batches = array();
+        foreach ($groups as $batch) {
+            $batches = array_merge($batches, array_chunk($groups[$batch], $this->batchSize));
+        }
+
+        return $batches;
+    }
+
+    public function transfer(array $batch)
+    {
+        if ($batch) {
+            reset($batch)->getClient()->send($batch);
+        }
+    }
+}

+ 47 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchSizeDivisor.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Divides batches into smaller batches under a certain size
+ */
+class BatchSizeDivisor implements BatchDivisorInterface
+{
+    /** @var int Size of each batch */
+    protected $size;
+
+    /** @param int $size Size of each batch */
+    public function __construct($size)
+    {
+        $this->size = $size;
+    }
+
+    /**
+     * Set the size of each batch
+     *
+     * @param int $size Size of each batch
+     *
+     * @return BatchSizeDivisor
+     */
+    public function setSize($size)
+    {
+        $this->size = $size;
+
+        return $this;
+    }
+
+    /**
+     * Get the size of each batch
+     *
+     * @return int
+     */
+    public function getSize()
+    {
+        return $this->size;
+    }
+
+    public function createBatches(\SplQueue $queue)
+    {
+        return array_chunk(iterator_to_array($queue, false), $this->size);
+    }
+}

+ 16 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/BatchTransferInterface.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * Interface used for transferring batches of items
+ */
+interface BatchTransferInterface
+{
+    /**
+     * Transfer an array of items
+     *
+     * @param array $batch Array of items to transfer
+     */
+    public function transfer(array $batch);
+}

+ 90 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/Exception/BatchTransferException.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace Guzzle\Batch\Exception;
+
+use Guzzle\Common\Exception\GuzzleException;
+use Guzzle\Batch\BatchTransferInterface as TransferStrategy;
+use Guzzle\Batch\BatchDivisorInterface as DivisorStrategy;
+
+/**
+ * Exception thrown during a batch transfer
+ */
+class BatchTransferException extends \Exception implements GuzzleException
+{
+    /** @var array The batch being sent when the exception occurred */
+    protected $batch;
+
+    /** @var TransferStrategy The transfer strategy in use when the exception occurred */
+    protected $transferStrategy;
+
+    /** @var DivisorStrategy The divisor strategy in use when the exception occurred */
+    protected $divisorStrategy;
+
+    /** @var array Items transferred at the point in which the exception was encountered */
+    protected $transferredItems;
+
+    /**
+     * @param array            $batch            The batch being sent when the exception occurred
+     * @param array            $transferredItems Items transferred at the point in which the exception was encountered
+     * @param \Exception       $exception        Exception encountered
+     * @param TransferStrategy $transferStrategy The transfer strategy in use when the exception occurred
+     * @param DivisorStrategy  $divisorStrategy  The divisor strategy in use when the exception occurred
+     */
+    public function __construct(
+        array $batch,
+        array $transferredItems,
+        \Exception $exception,
+        TransferStrategy $transferStrategy = null,
+        DivisorStrategy $divisorStrategy = null
+    ) {
+        $this->batch = $batch;
+        $this->transferredItems = $transferredItems;
+        $this->transferStrategy = $transferStrategy;
+        $this->divisorStrategy = $divisorStrategy;
+        parent::__construct(
+            'Exception encountered while transferring batch: ' . $exception->getMessage(),
+            $exception->getCode(),
+            $exception
+        );
+    }
+
+    /**
+     * Get the batch that we being sent when the exception occurred
+     *
+     * @return array
+     */
+    public function getBatch()
+    {
+        return $this->batch;
+    }
+
+    /**
+     * Get the items transferred at the point in which the exception was encountered
+     *
+     * @return array
+     */
+    public function getTransferredItems()
+    {
+        return $this->transferredItems;
+    }
+
+    /**
+     * Get the transfer strategy
+     *
+     * @return TransferStrategy
+     */
+    public function getTransferStrategy()
+    {
+        return $this->transferStrategy;
+    }
+
+    /**
+     * Get the divisor strategy
+     *
+     * @return DivisorStrategy
+     */
+    public function getDivisorStrategy()
+    {
+        return $this->divisorStrategy;
+    }
+}

+ 50 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/ExceptionBufferingBatch.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Batch\Exception\BatchTransferException;
+
+/**
+ * BatchInterface decorator used to buffer exceptions encountered during a transfer.  The exceptions can then later be
+ * processed after a batch flush has completed.
+ */
+class ExceptionBufferingBatch extends AbstractBatchDecorator
+{
+    /** @var array Array of BatchTransferException exceptions */
+    protected $exceptions = array();
+
+    public function flush()
+    {
+        $items = array();
+
+        while (!$this->decoratedBatch->isEmpty()) {
+            try {
+                $transferredItems = $this->decoratedBatch->flush();
+            } catch (BatchTransferException $e) {
+                $this->exceptions[] = $e;
+                $transferredItems = $e->getTransferredItems();
+            }
+            $items = array_merge($items, $transferredItems);
+        }
+
+        return $items;
+    }
+
+    /**
+     * Get the buffered exceptions
+     *
+     * @return array Array of BatchTransferException objects
+     */
+    public function getExceptions()
+    {
+        return $this->exceptions;
+    }
+
+    /**
+     * Clear the buffered exceptions
+     */
+    public function clearExceptions()
+    {
+        $this->exceptions = array();
+    }
+}

+ 60 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/FlushingBatch.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * BatchInterface decorator used to add automatic flushing of the queue when the size of the queue reaches a threshold.
+ */
+class FlushingBatch extends AbstractBatchDecorator
+{
+    /** @var int The threshold for which to automatically flush */
+    protected $threshold;
+
+    /** @var int Current number of items known to be in the queue */
+    protected $currentTotal = 0;
+
+    /**
+     * @param BatchInterface $decoratedBatch  BatchInterface that is being decorated
+     * @param int            $threshold       Flush when the number in queue matches the threshold
+     */
+    public function __construct(BatchInterface $decoratedBatch, $threshold)
+    {
+        $this->threshold = $threshold;
+        parent::__construct($decoratedBatch);
+    }
+
+    /**
+     * Set the auto-flush threshold
+     *
+     * @param int $threshold The auto-flush threshold
+     *
+     * @return FlushingBatch
+     */
+    public function setThreshold($threshold)
+    {
+        $this->threshold = $threshold;
+
+        return $this;
+    }
+
+    /**
+     * Get the auto-flush threshold
+     *
+     * @return int
+     */
+    public function getThreshold()
+    {
+        return $this->threshold;
+    }
+
+    public function add($item)
+    {
+        $this->decoratedBatch->add($item);
+        if (++$this->currentTotal >= $this->threshold) {
+            $this->currentTotal = 0;
+            $this->decoratedBatch->flush();
+        }
+
+        return $this;
+    }
+}

+ 39 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/HistoryBatch.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Guzzle\Batch;
+
+/**
+ * BatchInterface decorator used to keep a history of items that were added to the batch.  You must clear the history
+ * manually to remove items from the history.
+ */
+class HistoryBatch extends AbstractBatchDecorator
+{
+    /** @var array Items in the history */
+    protected $history = array();
+
+    public function add($item)
+    {
+        $this->history[] = $item;
+        $this->decoratedBatch->add($item);
+
+        return $this;
+    }
+
+    /**
+     * Get the batch history
+     *
+     * @return array
+     */
+    public function getHistory()
+    {
+        return $this->history;
+    }
+
+    /**
+     * Clear the batch history
+     */
+    public function clearHistory()
+    {
+        $this->history = array();
+    }
+}

+ 38 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/NotifyingBatch.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+
+/**
+ * BatchInterface decorator used to call a method each time flush is called
+ */
+class NotifyingBatch extends AbstractBatchDecorator
+{
+    /** @var mixed Callable to call */
+    protected $callable;
+
+    /**
+     * @param BatchInterface $decoratedBatch Batch object to decorate
+     * @param mixed          $callable       Callable to call
+     *
+     * @throws InvalidArgumentException
+     */
+    public function __construct(BatchInterface $decoratedBatch, $callable)
+    {
+        if (!is_callable($callable)) {
+            throw new InvalidArgumentException('The passed argument is not callable');
+        }
+
+        $this->callable = $callable;
+        parent::__construct($decoratedBatch);
+    }
+
+    public function flush()
+    {
+        $items = $this->decoratedBatch->flush();
+        call_user_func($this->callable, $items);
+
+        return $items;
+    }
+}

+ 31 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Batch/composer.json

@@ -0,0 +1,31 @@
+{
+    "name": "guzzle/batch",
+    "description": "Guzzle batch component for batching requests, commands, or custom transfers",
+    "homepage": "http://guzzlephp.org/",
+    "keywords": ["batch", "HTTP", "REST", "guzzle"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.2",
+        "guzzle/common": "self.version"
+    },
+    "autoload": {
+        "psr-0": { "Guzzle\\Batch": "" }
+    },
+    "suggest": {
+        "guzzle/http": "self.version",
+        "guzzle/service": "self.version"
+    },
+    "target-dir": "Guzzle/Batch",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.7-dev"
+        }
+    }
+}

+ 21 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/AbstractCacheAdapter.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace Guzzle\Cache;
+
+/**
+ * Abstract cache adapter
+ */
+abstract class AbstractCacheAdapter implements CacheAdapterInterface
+{
+    protected $cache;
+
+    /**
+     * Get the object owned by the adapter
+     *
+     * @return mixed
+     */
+    public function getCacheObject()
+    {
+        return $this->cache;
+    }
+}

+ 117 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterFactory.php

@@ -0,0 +1,117 @@
+<?php
+
+namespace Guzzle\Cache;
+
+use Doctrine\Common\Cache\Cache;
+use Guzzle\Common\Version;
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Common\Exception\RuntimeException;
+use Guzzle\Common\FromConfigInterface;
+use Zend\Cache\Storage\StorageInterface;
+
+/**
+ * Generates cache adapters from any number of known cache implementations
+ */
+class CacheAdapterFactory implements FromConfigInterface
+{
+    /**
+     * Create a Guzzle cache adapter based on an array of options
+     *
+     * @param mixed $cache Cache value
+     *
+     * @return CacheAdapterInterface
+     * @throws InvalidArgumentException
+     */
+    public static function fromCache($cache)
+    {
+        if (!is_object($cache)) {
+            throw new InvalidArgumentException('Cache must be one of the known cache objects');
+        }
+
+        if ($cache instanceof CacheAdapterInterface) {
+            return $cache;
+        } elseif ($cache instanceof Cache) {
+            return new DoctrineCacheAdapter($cache);
+        } elseif ($cache instanceof StorageInterface) {
+            return new Zf2CacheAdapter($cache);
+        } else {
+            throw new InvalidArgumentException('Unknown cache type: ' . get_class($cache));
+        }
+    }
+
+    /**
+     * Create a Guzzle cache adapter based on an array of options
+     *
+     * @param array $config Array of configuration options
+     *
+     * @return CacheAdapterInterface
+     * @throws InvalidArgumentException
+     * @deprecated This will be removed in a future version
+     * @codeCoverageIgnore
+     */
+    public static function factory($config = array())
+    {
+        Version::warn(__METHOD__ . ' is deprecated');
+        if (!is_array($config)) {
+            throw new InvalidArgumentException('$config must be an array');
+        }
+
+        if (!isset($config['cache.adapter']) && !isset($config['cache.provider'])) {
+            $config['cache.adapter'] = 'Guzzle\Cache\NullCacheAdapter';
+            $config['cache.provider'] = null;
+        } else {
+            // Validate that the options are valid
+            foreach (array('cache.adapter', 'cache.provider') as $required) {
+                if (!isset($config[$required])) {
+                    throw new InvalidArgumentException("{$required} is a required CacheAdapterFactory option");
+                }
+                if (is_string($config[$required])) {
+                    // Convert dot notation to namespaces
+                    $config[$required] = str_replace('.', '\\', $config[$required]);
+                    if (!class_exists($config[$required])) {
+                        throw new InvalidArgumentException("{$config[$required]} is not a valid class for {$required}");
+                    }
+                }
+            }
+            // Instantiate the cache provider
+            if (is_string($config['cache.provider'])) {
+                $args = isset($config['cache.provider.args']) ? $config['cache.provider.args'] : null;
+                $config['cache.provider'] = self::createObject($config['cache.provider'], $args);
+            }
+        }
+
+        // Instantiate the cache adapter using the provider and options
+        if (is_string($config['cache.adapter'])) {
+            $args = isset($config['cache.adapter.args']) ? $config['cache.adapter.args'] : array();
+            array_unshift($args, $config['cache.provider']);
+            $config['cache.adapter'] = self::createObject($config['cache.adapter'], $args);
+        }
+
+        return $config['cache.adapter'];
+    }
+
+    /**
+     * Create a class using an array of constructor arguments
+     *
+     * @param string $className Class name
+     * @param array  $args      Arguments for the class constructor
+     *
+     * @return mixed
+     * @throws RuntimeException
+     * @deprecated
+     * @codeCoverageIgnore
+     */
+    private static function createObject($className, array $args = null)
+    {
+        try {
+            if (!$args) {
+                return new $className;
+            } else {
+                $c = new \ReflectionClass($className);
+                return $c->newInstanceArgs($args);
+            }
+        } catch (\Exception $e) {
+            throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
+        }
+    }
+}

+ 55 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/CacheAdapterInterface.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace Guzzle\Cache;
+
+/**
+ * Interface for cache adapters.
+ *
+ * Cache adapters allow Guzzle to utilize various frameworks for caching HTTP responses.
+ *
+ * @link http://www.doctrine-project.org/ Inspired by Doctrine 2
+ */
+interface CacheAdapterInterface
+{
+    /**
+     * Test if an entry exists in the cache.
+     *
+     * @param string $id      cache id The cache id of the entry to check for.
+     * @param array  $options Array of cache adapter options
+     *
+     * @return bool Returns TRUE if a cache entry exists for the given cache id, FALSE otherwise.
+     */
+    public function contains($id, array $options = null);
+
+    /**
+     * Deletes a cache entry.
+     *
+     * @param string $id      cache id
+     * @param array  $options Array of cache adapter options
+     *
+     * @return bool TRUE on success, FALSE on failure
+     */
+    public function delete($id, array $options = null);
+
+    /**
+     * Fetches an entry from the cache.
+     *
+     * @param string $id      cache id The id of the cache entry to fetch.
+     * @param array  $options Array of cache adapter options
+     *
+     * @return string The cached data or FALSE, if no cache entry exists for the given id.
+     */
+    public function fetch($id, array $options = null);
+
+    /**
+     * Puts data into the cache.
+     *
+     * @param string   $id       The cache id
+     * @param string   $data     The cache entry/data
+     * @param int|bool $lifeTime The lifetime. If != false, sets a specific lifetime for this cache entry
+     * @param array    $options  Array of cache adapter options
+     *
+     * @return bool TRUE if the entry was successfully stored in the cache, FALSE otherwise.
+     */
+    public function save($id, $data, $lifeTime = false, array $options = null);
+}

+ 57 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/ClosureCacheAdapter.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Guzzle\Cache;
+
+/**
+ * Cache adapter that defers to closures for implementation
+ */
+class ClosureCacheAdapter implements CacheAdapterInterface
+{
+    /**
+     * @var array Mapping of method names to callables
+     */
+    protected $callables;
+
+    /**
+     * The callables array is an array mapping the actions of the cache adapter to callables.
+     * - contains: Callable that accepts an $id and $options argument
+     * - delete:   Callable that accepts an $id and $options argument
+     * - fetch:    Callable that accepts an $id and $options argument
+     * - save:     Callable that accepts an $id, $data, $lifeTime, and $options argument
+     *
+     * @param array $callables array of action names to callable
+     *
+     * @throws \InvalidArgumentException if the callable is not callable
+     */
+    public function __construct(array $callables)
+    {
+        // Validate each key to ensure it exists and is callable
+        foreach (array('contains', 'delete', 'fetch', 'save') as $key) {
+            if (!array_key_exists($key, $callables) || !is_callable($callables[$key])) {
+                throw new \InvalidArgumentException("callables must contain a callable {$key} key");
+            }
+        }
+
+        $this->callables = $callables;
+    }
+
+    public function contains($id, array $options = null)
+    {
+        return call_user_func($this->callables['contains'], $id, $options);
+    }
+
+    public function delete($id, array $options = null)
+    {
+        return call_user_func($this->callables['delete'], $id, $options);
+    }
+
+    public function fetch($id, array $options = null)
+    {
+        return call_user_func($this->callables['fetch'], $id, $options);
+    }
+
+    public function save($id, $data, $lifeTime = false, array $options = null)
+    {
+        return call_user_func($this->callables['save'], $id, $data, $lifeTime, $options);
+    }
+}

+ 41 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/DoctrineCacheAdapter.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Guzzle\Cache;
+
+use Doctrine\Common\Cache\Cache;
+
+/**
+ * Doctrine 2 cache adapter
+ *
+ * @link http://www.doctrine-project.org/
+ */
+class DoctrineCacheAdapter extends AbstractCacheAdapter
+{
+    /**
+     * @param Cache $cache Doctrine cache object
+     */
+    public function __construct(Cache $cache)
+    {
+        $this->cache = $cache;
+    }
+
+    public function contains($id, array $options = null)
+    {
+        return $this->cache->contains($id);
+    }
+
+    public function delete($id, array $options = null)
+    {
+        return $this->cache->delete($id);
+    }
+
+    public function fetch($id, array $options = null)
+    {
+        return $this->cache->fetch($id);
+    }
+
+    public function save($id, $data, $lifeTime = false, array $options = null)
+    {
+        return $this->cache->save($id, $data, $lifeTime !== false ? $lifeTime : 0);
+    }
+}

+ 31 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/NullCacheAdapter.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace Guzzle\Cache;
+
+/**
+ * Null cache adapter
+ */
+class NullCacheAdapter extends AbstractCacheAdapter
+{
+    public function __construct() {}
+
+    public function contains($id, array $options = null)
+    {
+        return false;
+    }
+
+    public function delete($id, array $options = null)
+    {
+        return true;
+    }
+
+    public function fetch($id, array $options = null)
+    {
+        return false;
+    }
+
+    public function save($id, $data, $lifeTime = false, array $options = null)
+    {
+        return true;
+    }
+}

+ 44 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf1CacheAdapter.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace Guzzle\Cache;
+
+use Guzzle\Common\Version;
+
+/**
+ * Zend Framework 1 cache adapter
+ *
+ * @link http://framework.zend.com/manual/en/zend.cache.html
+ * @deprecated
+ * @codeCoverageIgnore
+ */
+class Zf1CacheAdapter extends AbstractCacheAdapter
+{
+    /**
+     * @param \Zend_Cache_Backend $cache Cache object to wrap
+     */
+    public function __construct(\Zend_Cache_Backend $cache)
+    {
+        Version::warn(__CLASS__ . ' is deprecated. Upgrade to ZF2 or use PsrCacheAdapter');
+        $this->cache = $cache;
+    }
+
+    public function contains($id, array $options = null)
+    {
+        return $this->cache->test($id);
+    }
+
+    public function delete($id, array $options = null)
+    {
+        return $this->cache->remove($id);
+    }
+
+    public function fetch($id, array $options = null)
+    {
+        return $this->cache->load($id);
+    }
+
+    public function save($id, $data, $lifeTime = false, array $options = null)
+    {
+        return $this->cache->save($data, $id, array(), $lifeTime);
+    }
+}

+ 41 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/Zf2CacheAdapter.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Guzzle\Cache;
+
+use Zend\Cache\Storage\StorageInterface;
+
+/**
+ * Zend Framework 2 cache adapter
+ *
+ * @link http://packages.zendframework.com/docs/latest/manual/en/zend.cache.html
+ */
+class Zf2CacheAdapter extends AbstractCacheAdapter
+{
+    /**
+     * @param StorageInterface $cache Zend Framework 2 cache adapter
+     */
+    public function __construct(StorageInterface $cache)
+    {
+        $this->cache = $cache;
+    }
+
+    public function contains($id, array $options = null)
+    {
+        return $this->cache->hasItem($id);
+    }
+
+    public function delete($id, array $options = null)
+    {
+        return $this->cache->removeItem($id);
+    }
+
+    public function fetch($id, array $options = null)
+    {
+        return $this->cache->getItem($id);
+    }
+
+    public function save($id, $data, $lifeTime = false, array $options = null)
+    {
+        return $this->cache->setItem($id, $data);
+    }
+}

+ 27 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Cache/composer.json

@@ -0,0 +1,27 @@
+{
+    "name": "guzzle/cache",
+    "description": "Guzzle cache adapter component",
+    "homepage": "http://guzzlephp.org/",
+    "keywords": ["cache", "adapter", "zf", "doctrine", "guzzle"],
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Michael Dowling",
+            "email": "mtdowling@gmail.com",
+            "homepage": "https://github.com/mtdowling"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.2",
+        "guzzle/common": "self.version"
+    },
+    "autoload": {
+        "psr-0": { "Guzzle\\Cache": "" }
+    },
+    "target-dir": "Guzzle/Cache",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.7-dev"
+        }
+    }
+}

+ 49 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/AbstractHasDispatcher.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace Guzzle\Common;
+
+use Symfony\Component\EventDispatcher\EventDispatcher;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Class that holds an event dispatcher
+ */
+class AbstractHasDispatcher implements HasDispatcherInterface
+{
+    /** @var EventDispatcherInterface */
+    protected $eventDispatcher;
+
+    public static function getAllEvents()
+    {
+        return array();
+    }
+
+    public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
+    {
+        $this->eventDispatcher = $eventDispatcher;
+
+        return $this;
+    }
+
+    public function getEventDispatcher()
+    {
+        if (!$this->eventDispatcher) {
+            $this->eventDispatcher = new EventDispatcher();
+        }
+
+        return $this->eventDispatcher;
+    }
+
+    public function dispatch($eventName, array $context = array())
+    {
+        return $this->getEventDispatcher()->dispatch($eventName, new Event($context));
+    }
+
+    public function addSubscriber(EventSubscriberInterface $subscriber)
+    {
+        $this->getEventDispatcher()->addSubscriber($subscriber);
+
+        return $this;
+    }
+}

+ 403 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Collection.php

@@ -0,0 +1,403 @@
+<?php
+
+namespace Guzzle\Common;
+
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Common\Exception\RuntimeException;
+
+/**
+ * Key value pair collection object
+ */
+class Collection implements \ArrayAccess, \IteratorAggregate, \Countable, ToArrayInterface
+{
+    /** @var array Data associated with the object. */
+    protected $data;
+
+    /**
+     * @param array $data Associative array of data to set
+     */
+    public function __construct(array $data = array())
+    {
+        $this->data = $data;
+    }
+
+    /**
+     * Create a new collection from an array, validate the keys, and add default values where missing
+     *
+     * @param array $config   Configuration values to apply.
+     * @param array $defaults Default parameters
+     * @param array $required Required parameter names
+     *
+     * @return self
+     * @throws InvalidArgumentException if a parameter is missing
+     */
+    public static function fromConfig(array $config = array(), array $defaults = array(), array $required = array())
+    {
+        $data = $config + $defaults;
+
+        if ($missing = array_diff($required, array_keys($data))) {
+            throw new InvalidArgumentException('Config is missing the following keys: ' . implode(', ', $missing));
+        }
+
+        return new self($data);
+    }
+
+    public function count()
+    {
+        return count($this->data);
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->data);
+    }
+
+    public function toArray()
+    {
+        return $this->data;
+    }
+
+    /**
+     * Removes all key value pairs
+     *
+     * @return Collection
+     */
+    public function clear()
+    {
+        $this->data = array();
+
+        return $this;
+    }
+
+    /**
+     * Get all or a subset of matching key value pairs
+     *
+     * @param array $keys Pass an array of keys to retrieve only a subset of key value pairs
+     *
+     * @return array Returns an array of all matching key value pairs
+     */
+    public function getAll(array $keys = null)
+    {
+        return $keys ? array_intersect_key($this->data, array_flip($keys)) : $this->data;
+    }
+
+    /**
+     * Get a specific key value.
+     *
+     * @param string $key Key to retrieve.
+     *
+     * @return mixed|null Value of the key or NULL
+     */
+    public function get($key)
+    {
+        return isset($this->data[$key]) ? $this->data[$key] : null;
+    }
+
+    /**
+     * Set a key value pair
+     *
+     * @param string $key   Key to set
+     * @param mixed  $value Value to set
+     *
+     * @return Collection Returns a reference to the object
+     */
+    public function set($key, $value)
+    {
+        $this->data[$key] = $value;
+
+        return $this;
+    }
+
+    /**
+     * Add a value to a key.  If a key of the same name has already been added, the key value will be converted into an
+     * array and the new value will be pushed to the end of the array.
+     *
+     * @param string $key   Key to add
+     * @param mixed  $value Value to add to the key
+     *
+     * @return Collection Returns a reference to the object.
+     */
+    public function add($key, $value)
+    {
+        if (!array_key_exists($key, $this->data)) {
+            $this->data[$key] = $value;
+        } elseif (is_array($this->data[$key])) {
+            $this->data[$key][] = $value;
+        } else {
+            $this->data[$key] = array($this->data[$key], $value);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Remove a specific key value pair
+     *
+     * @param string $key A key to remove
+     *
+     * @return Collection
+     */
+    public function remove($key)
+    {
+        unset($this->data[$key]);
+
+        return $this;
+    }
+
+    /**
+     * Get all keys in the collection
+     *
+     * @return array
+     */
+    public function getKeys()
+    {
+        return array_keys($this->data);
+    }
+
+    /**
+     * Returns whether or not the specified key is present.
+     *
+     * @param string $key The key for which to check the existence.
+     *
+     * @return bool
+     */
+    public function hasKey($key)
+    {
+        return array_key_exists($key, $this->data);
+    }
+
+    /**
+     * Case insensitive search the keys in the collection
+     *
+     * @param string $key Key to search for
+     *
+     * @return bool|string Returns false if not found, otherwise returns the key
+     */
+    public function keySearch($key)
+    {
+        foreach (array_keys($this->data) as $k) {
+            if (!strcasecmp($k, $key)) {
+                return $k;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks if any keys contains a certain value
+     *
+     * @param string $value Value to search for
+     *
+     * @return mixed Returns the key if the value was found FALSE if the value was not found.
+     */
+    public function hasValue($value)
+    {
+        return array_search($value, $this->data);
+    }
+
+    /**
+     * Replace the data of the object with the value of an array
+     *
+     * @param array $data Associative array of data
+     *
+     * @return Collection Returns a reference to the object
+     */
+    public function replace(array $data)
+    {
+        $this->data = $data;
+
+        return $this;
+    }
+
+    /**
+     * Add and merge in a Collection or array of key value pair data.
+     *
+     * @param Collection|array $data Associative array of key value pair data
+     *
+     * @return Collection Returns a reference to the object.
+     */
+    public function merge($data)
+    {
+        foreach ($data as $key => $value) {
+            $this->add($key, $value);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Over write key value pairs in this collection with all of the data from an array or collection.
+     *
+     * @param array|\Traversable $data Values to override over this config
+     *
+     * @return self
+     */
+    public function overwriteWith($data)
+    {
+        if (is_array($data)) {
+            $this->data = $data + $this->data;
+        } elseif ($data instanceof Collection) {
+            $this->data = $data->toArray() + $this->data;
+        } else {
+            foreach ($data as $key => $value) {
+                $this->data[$key] = $value;
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns a Collection containing all the elements of the collection after applying the callback function to each
+     * one. The Closure should accept three parameters: (string) $key, (string) $value, (array) $context and return a
+     * modified value
+     *
+     * @param \Closure $closure Closure to apply
+     * @param array    $context Context to pass to the closure
+     * @param bool     $static  Set to TRUE to use the same class as the return rather than returning a Collection
+     *
+     * @return Collection
+     */
+    public function map(\Closure $closure, array $context = array(), $static = true)
+    {
+        $collection = $static ? new static() : new self();
+        foreach ($this as $key => $value) {
+            $collection->add($key, $closure($key, $value, $context));
+        }
+
+        return $collection;
+    }
+
+    /**
+     * Iterates over each key value pair in the collection passing them to the Closure. If the  Closure function returns
+     * true, the current value from input is returned into the result Collection.  The Closure must accept three
+     * parameters: (string) $key, (string) $value and return Boolean TRUE or FALSE for each value.
+     *
+     * @param \Closure $closure Closure evaluation function
+     * @param bool     $static  Set to TRUE to use the same class as the return rather than returning a Collection
+     *
+     * @return Collection
+     */
+    public function filter(\Closure $closure, $static = true)
+    {
+        $collection = ($static) ? new static() : new self();
+        foreach ($this->data as $key => $value) {
+            if ($closure($key, $value)) {
+                $collection->add($key, $value);
+            }
+        }
+
+        return $collection;
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->data[$offset]);
+    }
+
+    public function offsetGet($offset)
+    {
+        return isset($this->data[$offset]) ? $this->data[$offset] : null;
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->data[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->data[$offset]);
+    }
+
+    /**
+     * Set a value into a nested array key. Keys will be created as needed to set the value.
+     *
+     * @param string $path  Path to set
+     * @param mixed  $value Value to set at the key
+     *
+     * @return self
+     * @throws RuntimeException when trying to setPath using a nested path that travels through a scalar value
+     */
+    public function setPath($path, $value)
+    {
+        $current =& $this->data;
+        $queue = explode('/', $path);
+        while (null !== ($key = array_shift($queue))) {
+            if (!is_array($current)) {
+                throw new RuntimeException("Trying to setPath {$path}, but {$key} is set and is not an array");
+            } elseif (!$queue) {
+                $current[$key] = $value;
+            } elseif (isset($current[$key])) {
+                $current =& $current[$key];
+            } else {
+                $current[$key] = array();
+                $current =& $current[$key];
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Gets a value from the collection using an array path (e.g. foo/baz/bar would retrieve bar from two nested arrays)
+     * Allows for wildcard searches which recursively combine matches up to the level at which the wildcard occurs. This
+     * can be useful for accepting any key of a sub-array and combining matching keys from each diverging path.
+     *
+     * @param string $path      Path to traverse and retrieve a value from
+     * @param string $separator Character used to add depth to the search
+     * @param mixed  $data      Optional data to descend into (used when wildcards are encountered)
+     *
+     * @return mixed|null
+     */
+    public function getPath($path, $separator = '/', $data = null)
+    {
+        if ($data === null) {
+            $data =& $this->data;
+        }
+
+        $path = is_array($path) ? $path : explode($separator, $path);
+        while (null !== ($part = array_shift($path))) {
+            if (!is_array($data)) {
+                return null;
+            } elseif (isset($data[$part])) {
+                $data =& $data[$part];
+            } elseif ($part != '*') {
+                return null;
+            } else {
+                // Perform a wildcard search by diverging and merging paths
+                $result = array();
+                foreach ($data as $value) {
+                    if (!$path) {
+                        $result = array_merge_recursive($result, (array) $value);
+                    } elseif (null !== ($test = $this->getPath($path, $separator, $value))) {
+                        $result = array_merge_recursive($result, (array) $test);
+                    }
+                }
+                return $result;
+            }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Inject configuration settings into an input string
+     *
+     * @param string $input Input to inject
+     *
+     * @return string
+     * @deprecated
+     */
+    public function inject($input)
+    {
+        Version::warn(__METHOD__ . ' is deprecated');
+        $replace = array();
+        foreach ($this->data as $key => $val) {
+            $replace['{' . $key . '}'] = $val;
+        }
+
+        return strtr($input, $replace);
+    }
+}

+ 52 - 0
sites/all/libraries/mailgun/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace Guzzle\Common;
+
+use Symfony\Component\EventDispatcher\Event as SymfonyEvent;
+
+/**
+ * Default event for Guzzle notifications
+ */
+class Event extends SymfonyEvent implements ToArrayInterface, \ArrayAccess, \IteratorAggregate
+{
+    /** @var array */
+    private $context;
+
+    /**
+     * @param array $context Contextual information
+     */
+    public function __construct(array $context = array())
+    {
+        $this->context = $context;
+    }
+
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->context);
+    }
+
+    public function offsetGet($offset)
+    {
+        return isset($this->context[$offset]) ? $this->context[$offset] : null;
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->context[$offset] = $value;
+    }
+
+    public function offsetExists($offset)
+    {
+        return isset($this->context[$offset]);
+    }
+
+    public function offsetUnset($offset)
+    {
+        unset($this->context[$offset]);
+    }
+
+    public function toArray()
+    {
+        return $this->context;
+    }
+}

Some files were not shown because too many files changed in this diff