← Back to team overview

txaws-dev team mailing list archive

[Merge] lp:~jelmer/txaws/wsdl into lp:txaws

 

Jelmer Vernooij has proposed merging lp:~jelmer/txaws/wsdl into lp:txaws.

Requested reviews:
  txAWS Developers (txaws-dev)

For more details, see:
https://code.launchpad.net/~jelmer/txaws/wsdl/+merge/89072

Import the WSDL parser from CloudDeck.

This should allow awsproxy to use this code too.

The new code lives in txaws.wsdl and txaws.tests.test_wsdl. It requires the lxml parser (which is more advanced than Python's default parsers), which wasn't a dependency for txaws earlier. I hope that's not a problem (users who don't use txaws.wsdl should be able to avoid lxml, too).

Potentially the txaws client calls could use this XML parser too, rather than manually unpacking as they are doing now. I haven't looked at that yet though.
-- 
https://code.launchpad.net/~jelmer/txaws/wsdl/+merge/89072
Your team txAWS Developers is requested to review the proposed merge of lp:~jelmer/txaws/wsdl into lp:txaws.
=== modified file 'README'
--- README	2012-01-06 09:51:07 +0000
+++ README	2012-01-18 16:28:35 +0000
@@ -7,6 +7,7 @@
 
 * The dateutil python package (python-dateutil on Debian or similar systems)
 
+* lxml (only when using txaws.wsdl)
 
 Things present here
 -------------------

=== added file 'txaws/tests/test_wsdl.py'
--- txaws/tests/test_wsdl.py	1970-01-01 00:00:00 +0000
+++ txaws/tests/test_wsdl.py	2012-01-18 16:28:35 +0000
@@ -0,0 +1,792 @@
+# Copyright (C) 2010-2012 Canonical Ltd.
+# Licenced under the txaws licence available at /LICENSE in the txaws source.
+
+import os
+from twisted.trial.unittest import TestCase
+
+from txaws.wsdl import (
+    EC2ResponseError, LeafSchema, NodeSchema, NodeItem, SequenceSchema,
+    SequenceItem, WSDLParser, etree)
+
+
+class NodeSchemaTest(TestCase):
+
+    def test_create_with_bad_tag(self):
+        """
+        L{NodeSchema.create} raises an error if the tag of the given element
+        doesn't match the expected one.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<egg><bar>spam</bar></egg>")
+        error = self.assertRaises(EC2ResponseError, schema.create, root)
+        self.assertEqual("Expected response with tag 'foo', but got "
+                         "'egg' instead", error.message)
+
+    def test_add_with_invalid_min(self):
+        """
+        L{NodeSchema.add} allows the C{min_occurs} parameter to only be
+        C{None}, zero or one.
+        """
+        schema = NodeSchema("foo")
+        self.assertRaises(RuntimeError, schema.add, LeafSchema("bar"),
+                          min_occurs=-1)
+        self.assertRaises(RuntimeError, schema.add, LeafSchema("bar"),
+                          min_occurs=2)
+
+    def test_dump(self):
+        """
+        L{NodeSchema.dump} creates an L{etree.Element} out of a L{NodeItem}.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        foo = NodeItem(schema)
+        foo.bar = "spam"
+        self.assertEqual("<foo><bar>spam</bar></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_dump_with_multiple_children(self):
+        """
+        L{NodeSchema.dump} supports multiple children.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar"), LeafSchema("egg")])
+        foo = NodeItem(schema)
+        foo.bar = "spam1"
+        foo.egg = "spam2"
+        self.assertEqual("<foo><bar>spam1</bar><egg>spam2</egg></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_dump_with_missing_attribute(self):
+        """
+        L{NodeSchema.dump} ignores missing attributes if C{min_occurs} is zero.
+        """
+        schema = NodeSchema("foo")
+        schema.add(LeafSchema("bar"), min_occurs=0)
+        foo = NodeItem(schema)
+        self.assertEqual("<foo/>", etree.tostring(schema.dump(foo)))
+
+
+class NodeItemTest(TestCase):
+
+    def test_get(self):
+        """
+        The child leaf elements of a L{NodeItem} can be accessed as attributes.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar>egg</bar></foo>")
+        foo = schema.create(root)
+        self.assertEqual("egg", foo.bar)
+
+    def test_get_with_many_children(self):
+        """
+        Multiple children are supported.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar"), LeafSchema("egg")])
+        root = etree.fromstring("<foo><bar>spam1</bar><egg>spam2</egg></foo>")
+        foo = schema.create(root)
+        self.assertEqual("spam1", foo.bar)
+        self.assertEqual("spam2", foo.egg)
+
+    def test_get_with_namespace(self):
+        """
+        The child leaf elements of a L{NodeItem} can be accessed as attributes.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo xmlns=\"spam\"><bar>egg</bar></foo>")
+        foo = schema.create(root)
+        self.assertEqual("egg", foo.bar)
+
+    def test_get_with_unknown_tag(self):
+        """
+        An error is raised when trying to access an attribute not in the
+        schema.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar>egg</bar><spam>boom</spam></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, getattr, foo, "spam")
+        self.assertEqual("Unknown tag 'spam'", error.message)
+
+    def test_get_with_duplicate_tag(self):
+        """
+        An error is raised when trying to access an attribute associated
+        with a tag that appears more than once.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar>spam1</bar><bar>spam2</bar></foo>")
+        item = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, getattr, item, "bar")
+        self.assertEqual("Duplicate tag 'bar'", error.message)
+
+    def test_get_with_missing_required_tag(self):
+        """
+        An error is raised when trying to access a required attribute and
+        the associated tag is missing.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo></foo>")
+        item = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, getattr, item, "bar")
+        self.assertEqual("Missing tag 'bar'", error.message)
+
+    def test_get_with_empty_required_tag(self):
+        """
+        An error is raised if an expected required tag is found but has and
+        empty value.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar/></foo>")
+        item = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, getattr, item, "bar")
+        self.assertEqual("Missing tag 'bar'", error.message)
+
+    def test_get_with_non_required_tag(self):
+        """
+        No error is raised if a tag is missing and its min count is zero.
+        """
+        schema = NodeSchema("foo")
+        schema.add(LeafSchema("bar"), min_occurs=0)
+        root = etree.fromstring("<foo></foo>")
+        foo = schema.create(root)
+        self.assertIdentical(None, foo.bar)
+
+    def test_get_with_reserved_keyword(self):
+        """
+        Attributes associated to tags named against required attributes can
+        be accessed appending a '_' to the name.
+        """
+        schema = NodeSchema("foo", [LeafSchema("return")])
+        root = etree.fromstring("<foo><return>true</return></foo>")
+        foo = schema.create(root)
+        self.assertEqual("true", foo.return_)
+
+    def test_get_with_nested(self):
+        """
+        It is possible to access nested nodes.
+        """
+        schema = NodeSchema("foo", [NodeSchema("bar", [LeafSchema("egg")])])
+        root = etree.fromstring("<foo><bar><egg>spam</egg></bar></foo>")
+        foo = schema.create(root)
+        self.assertEqual("spam", foo.bar.egg)
+
+    def test_get_with_non_required_nested(self):
+        """
+        It is possible to access a non-required nested node that has no
+        associated element in the XML yet, in that case a new element is
+        created for it.
+        """
+        schema = NodeSchema("foo")
+        schema.add(NodeSchema("bar", [LeafSchema("egg")]), min_occurs=0)
+        root = etree.fromstring("<foo/>")
+        foo = schema.create(root)
+        foo.bar.egg = "spam"
+        self.assertEqual("<foo><bar><egg>spam</egg></bar></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_set_with_unknown_tag(self):
+        """
+        An error is raised when trying to set an attribute not in the schema.
+        """
+        schema = NodeSchema("foo")
+        foo = schema.create()
+        error = self.assertRaises(EC2ResponseError, setattr, foo, "bar", "egg")
+        self.assertEqual("Unknown tag 'bar'", error.message)
+
+    def test_set_with_duplicate_tag(self):
+        """
+        An error is raised when trying to set an attribute associated
+        with a tag that appears more than once.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar>spam1</bar><bar>spam2</bar></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, setattr, foo, "bar", "egg")
+        self.assertEqual("Duplicate tag 'bar'", error.message)
+
+    def test_set_with_required_tag(self):
+        """
+        An error is raised when trying to set a required attribute to C{None}.
+        """
+        schema = NodeSchema("foo", [LeafSchema("bar")])
+        root = etree.fromstring("<foo><bar>spam</bar></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, setattr, foo, "bar", None)
+        self.assertEqual("Missing tag 'bar'", error.message)
+        self.assertEqual("spam", foo.bar)
+
+    def test_set_with_non_required_tag(self):
+        """
+        It is possible to set a non-required tag value to C{None}, in that
+        case the element will be removed if present.
+        """
+        schema = NodeSchema("foo")
+        schema.add(LeafSchema("bar"), min_occurs=0)
+        root = etree.fromstring("<foo><bar>spam</bar></foo>")
+        foo = schema.create(root)
+        foo.bar = None
+        self.assertEqual("<foo/>", etree.tostring(schema.dump(foo)))
+
+    def test_set_with_non_leaf_tag(self):
+        """
+        An error is raised when trying to set a non-leaf attribute to
+        a value other than C{None}.
+        """
+        schema = NodeSchema("foo", [NodeSchema("bar", [LeafSchema("egg")])])
+        root = etree.fromstring("<foo><bar><egg>spam</egg></bar></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, setattr, foo, "bar", "yo")
+        self.assertEqual("Can't set non-leaf tag 'bar'", error.message)
+
+    def test_set_with_optional_node_tag(self):
+        """
+        It is possible to set an optional node tag to C{None}, in that
+        case it will be removed from the tree.
+        """
+        schema = NodeSchema("foo")
+        schema.add(NodeSchema("bar", [LeafSchema("egg")]), min_occurs=0)
+        root = etree.fromstring("<foo><bar><egg>spam</egg></bar></foo>")
+        foo = schema.create(root)
+        foo.bar = None
+        self.assertEqual("<foo/>", etree.tostring(schema.dump(foo)))
+
+    def test_set_with_sequence_tag(self):
+        """
+        It is possible to set a sequence tag to C{None}, in that case
+        all its children will be removed
+        """
+        schema = NodeSchema("foo")
+        schema.add(SequenceSchema("bar",
+                                  NodeSchema("item", [LeafSchema("egg")])))
+        root = etree.fromstring("<foo>"
+                                "<bar><item><egg>spam</egg></item></bar><"
+                                "/foo>")
+        foo = schema.create(root)
+        foo.bar = None
+        self.assertEqual("<foo><bar/></foo>", etree.tostring(schema.dump(foo)))
+
+    def test_set_with_required_non_leaf_tag(self):
+        """
+        An error is raised when trying to set a required non-leaf tag
+        to C{None}.
+        """
+        schema = NodeSchema("foo", [NodeSchema("bar", [LeafSchema("egg")])])
+        root = etree.fromstring("<foo><bar><egg>spam</egg></bar></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, setattr, foo, "bar", None)
+        self.assertEqual("Missing tag 'bar'", error.message)
+        self.assertTrue(hasattr(foo, "bar"))
+
+
+class SequenceSchemaTest(TestCase):
+
+    def test_create_with_bad_tag(self):
+        """
+        L{SequenceSchema.create} raises an error if the tag of the given
+        element doesn't match the expected one.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<spam><item><bar>egg</bar></item></spam>")
+        error = self.assertRaises(EC2ResponseError, schema.create, root)
+        self.assertEqual("Expected response with tag 'foo', but got "
+                         "'spam' instead", error.message)
+
+    def test_set_with_leaf(self):
+        """
+        L{SequenceSchema.set} raises an error if the given child is a leaf node
+        """
+        schema = SequenceSchema("foo")
+        error = self.assertRaises(RuntimeError, schema.set, LeafSchema("bar"))
+        self.assertEqual("Sequence can't have leaf children", str(error))
+
+    def test_set_with_previous_child(self):
+        """
+        L{SequenceSchema.set} raises an error if the sequence has already
+        a child.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        error = self.assertRaises(RuntimeError, schema.set, NodeSchema("egg"))
+        self.assertEqual("Sequence has already a child", str(error))
+
+    def test_set_with_no_min_or_max(self):
+        """
+        L{SequenceSchema.set} raises an error if no values are provided for the
+        min and max parameters.
+        """
+        schema = SequenceSchema("foo")
+        child = NodeSchema("item", [LeafSchema("bar")])
+        error = self.assertRaises(RuntimeError, schema.set, child,
+                                  min_occurs=0, max_occurs=None)
+        self.assertEqual("Sequence node without min or max", str(error))
+        error = self.assertRaises(RuntimeError, schema.set, child,
+                                  min_occurs=None, max_occurs=1)
+        self.assertEqual("Sequence node without min or max", str(error))
+
+    def test_dump(self):
+        """
+        L{SequenceSchema.dump} creates a L{etree.Element} out of
+        a L{SequenceItem}.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        foo = SequenceItem(schema)
+        foo.append().bar = "egg"
+        self.assertEqual("<foo><item><bar>egg</bar></item></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_dump_with_many_items(self):
+        """
+        L{SequenceSchema.dump} supports many child items in the sequence.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        foo = SequenceItem(schema)
+        foo.append().bar = "spam0"
+        foo.append().bar = "spam1"
+        self.assertEqual("<foo>"
+                         "<item><bar>spam0</bar></item>"
+                         "<item><bar>spam1</bar></item>"
+                         "</foo>",
+                         etree.tostring(schema.dump(foo)))
+
+
+class SequenceItemTest(TestCase):
+
+    def test_get(self):
+        """
+        The child elements of a L{SequenceItem} can be accessed as attributes.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo><item><bar>egg</bar></item></foo>")
+        foo = schema.create(root)
+        self.assertEqual("egg", foo[0].bar)
+
+    def test_get_items(self):
+        """L{SequenceItem} supports elements with many child items."""
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo>"
+                                "<item><bar>egg0</bar></item>"
+                                "<item><bar>egg1</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        self.assertEqual("egg0", foo[0].bar)
+        self.assertEqual("egg1", foo[1].bar)
+
+    def test_get_with_namespace(self):
+        """
+        The child elements of a L{SequenceItem} can be accessed as attributes.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo xmlns=\"spam\">"
+                                "<item><bar>egg</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        self.assertEqual("egg", foo[0].bar)
+
+    def test_get_with_non_existing_index(self):
+        """An error is raised when trying to access a non existing item."""
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo><item><bar>egg</bar></item></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, foo.__getitem__, 1)
+        self.assertEqual("Non existing item in tag 'foo'", error.message)
+
+    def test_get_with_index_higher_than_max(self):
+        """
+        An error is raised when trying to access an item above the allowed
+        max value.
+        """
+        schema = SequenceSchema("foo")
+        schema.set(NodeSchema("item", [LeafSchema("bar")]), min_occurs=0,
+                   max_occurs=1)
+        root = etree.fromstring("<foo>"
+                                "<item><bar>egg0</bar></item>"
+                                "<item><bar>egg1</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, foo.__getitem__, 1)
+        self.assertEqual("Out of range item in tag 'foo'", error.message)
+
+    def test_append(self):
+        """
+        L{SequenceItem.append} adds a new item to the sequence, appending it
+        at the end.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo><item><bar>egg0</bar></item></foo>")
+        foo = schema.create(root)
+        foo.append().bar = "egg1"
+        self.assertEqual("egg1", foo[1].bar)
+        self.assertEqual("<foo>"
+                         "<item><bar>egg0</bar></item>"
+                         "<item><bar>egg1</bar></item>"
+                         "</foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_append_with_too_many_items(self):
+        """
+        An error is raised when trying to append items above the max.
+        """
+        schema = SequenceSchema("foo")
+        schema.set(NodeSchema("item", [LeafSchema("bar")]), min_occurs=0,
+                   max_occurs=1)
+        root = etree.fromstring("<foo><item><bar>egg</bar></item></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, foo.append)
+        self.assertEqual("Too many items in tag 'foo'", error.message)
+        self.assertEqual(1, len(list(foo)))
+
+    def test_delitem(self):
+        """
+        L{SequenceItem.__delitem__} removes from the sequence the item with the
+        given index.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo>"
+                                "<item><bar>egg0</bar></item>"
+                                "<item><bar>egg1</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        del foo[0]
+        self.assertEqual("egg1", foo[0].bar)
+        self.assertEqual("<foo><item><bar>egg1</bar></item></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_delitem_with_not_enough_items(self):
+        """
+        L{SequenceItem.__delitem__} raises an error if trying to remove an item
+        would make the sequence shorter than the required minimum.
+        """
+        schema = SequenceSchema("foo")
+        schema.set(NodeSchema("item", [LeafSchema("bar")]), min_occurs=1,
+                   max_occurs=10)
+        root = etree.fromstring("<foo><item><bar>egg</bar></item></foo>")
+        foo = schema.create(root)
+        error = self.assertRaises(EC2ResponseError, foo.__delitem__, 0)
+        self.assertEqual("Not enough items in tag 'foo'", error.message)
+        self.assertEqual(1, len(list(foo)))
+
+    def test_remove(self):
+        """
+        L{SequenceItem.remove} removes the given item from the sequence.
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo>"
+                                "<item><bar>egg0</bar></item>"
+                                "<item><bar>egg1</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        foo.remove(foo[0])
+        self.assertEqual("egg1", foo[0].bar)
+        self.assertEqual("<foo><item><bar>egg1</bar></item></foo>",
+                         etree.tostring(schema.dump(foo)))
+
+    def test_remove_with_non_existing_item(self):
+        """
+        L{SequenceItem.remove} raises an exception when trying to remove a
+        non existing item
+        """
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo><item><bar>egg</bar></item></foo>")
+        foo = schema.create(root)
+        item = foo.remove(foo[0])
+        error = self.assertRaises(EC2ResponseError, foo.remove, item)
+        self.assertEqual("Non existing item in tag 'foo'", error.message)
+
+    def test_iter(self):
+        """L{SequenceItem} objects are iterable."""
+        schema = SequenceSchema("foo", NodeSchema("item", [LeafSchema("bar")]))
+        root = etree.fromstring("<foo>"
+                                "<item><bar>egg0</bar></item>"
+                                "<item><bar>egg1</bar></item>"
+                                "</foo>")
+        foo = schema.create(root)
+        [item0, item1] = list(foo)
+        self.assertEqual("egg0", item0.bar)
+        self.assertEqual("egg1", item1.bar)
+
+
+class WDSLParserTest(TestCase):
+
+    def setUp(self):
+        super(WDSLParserTest, self).setUp()
+        parser = WSDLParser()
+        wsdl_dir = os.path.join(os.path.dirname(__file__), "../../wsdl")
+        wsdl_path = os.path.join(wsdl_dir, "2009-11-30.ec2.wsdl")
+        self.schemas = parser.parse(open(wsdl_path).read())
+
+    def test_parse_create_key_pair_response(self):
+        """Parse a CreateKeyPairResponse payload."""
+        schema = self.schemas["CreateKeyPairResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<CreateKeyPairResponse xmlns=\"%s\">"
+               "<requestId>65d85081-abbc</requestId>"
+               "<keyName>foo</keyName>"
+               "<keyFingerprint>9a:81:96:46</keyFingerprint>"
+               "<keyMaterial>MIIEowIBAAKCAQEAi</keyMaterial>"
+               "</CreateKeyPairResponse>" % xmlns)
+
+        response = schema.create(etree.fromstring(xml))
+        self.assertEqual("65d85081-abbc", response.requestId)
+        self.assertEqual("foo", response.keyName)
+        self.assertEqual("9a:81:96:46", response.keyFingerprint)
+        self.assertEqual("MIIEowIBAAKCAQEAi", response.keyMaterial)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_parse_delete_key_pair_response(self):
+        """Parse a DeleteKeyPairResponse payload."""
+        schema = self.schemas["DeleteKeyPairResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<DeleteKeyPairResponse xmlns=\"%s\">"
+               "<requestId>acc41b73-4c47-4f80</requestId>"
+               "<return>true</return>"
+               "</DeleteKeyPairResponse>" % xmlns)
+        root = etree.fromstring(xml)
+        response = schema.create(root)
+        self.assertEqual("acc41b73-4c47-4f80", response.requestId)
+        self.assertEqual("true", response.return_)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_parse_describe_key_pairs_response(self):
+        """Parse a DescribeKeyPairsResponse payload."""
+        schema = self.schemas["DescribeKeyPairsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<DescribeKeyPairsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<keySet>"
+               "<item>"
+               "<keyName>europe-key</keyName>"
+               "<keyFingerprint>94:88:29:60:cf</keyFingerprint>"
+               "</item>"
+               "</keySet>"
+               "</DescribeKeyPairsResponse>" % xmlns)
+        root = etree.fromstring(xml)
+        response = schema.create(root)
+        self.assertEqual("3ef0aa1d-57dd-4272", response.requestId)
+        self.assertEqual("europe-key", response.keySet[0].keyName)
+        self.assertEqual("94:88:29:60:cf", response.keySet[0].keyFingerprint)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_modify_describe_key_pairs_response(self):
+        """Modify a DescribeKeyPairsResponse payload."""
+        schema = self.schemas["DescribeKeyPairsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<DescribeKeyPairsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<keySet>"
+               "<item>"
+               "<keyName>europe-key</keyName>"
+               "<keyFingerprint>94:88:29:60:cf</keyFingerprint>"
+               "</item>"
+               "</keySet>"
+               "</DescribeKeyPairsResponse>" % xmlns)
+        root = etree.fromstring(xml)
+        response = schema.create(root)
+        response.keySet[0].keyName = "new-key"
+        xml = ("<DescribeKeyPairsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<keySet>"
+               "<item>"
+               "<keyName>new-key</keyName>"
+               "<keyFingerprint>94:88:29:60:cf</keyFingerprint>"
+               "</item>"
+               "</keySet>"
+               "</DescribeKeyPairsResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_create_describe_key_pairs_response(self):
+        """Create a DescribeKeyPairsResponse payload."""
+        schema = self.schemas["DescribeKeyPairsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        response = schema.create(namespace=xmlns)
+        response.requestId = "abc"
+        key = response.keySet.append()
+        key.keyName = "some-key"
+        key.keyFingerprint = "11:22:33:44"
+        xml = ("<DescribeKeyPairsResponse xmlns=\"%s\">"
+               "<requestId>abc</requestId>"
+               "<keySet>"
+               "<item>"
+               "<keyName>some-key</keyName>"
+               "<keyFingerprint>11:22:33:44</keyFingerprint>"
+               "</item>"
+               "</keySet>"
+               "</DescribeKeyPairsResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_create_describe_addresses_response(self):
+        """Create a DescribeAddressesResponse payload.
+        """
+        schema = self.schemas["DescribeAddressesResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        response = schema.create(namespace=xmlns)
+        response.requestId = "abc"
+        address = response.addressesSet.append()
+        address.publicIp = "192.168.0.1"
+        xml = ("<DescribeAddressesResponse xmlns=\"%s\">"
+               "<requestId>abc</requestId>"
+               "<addressesSet>"
+               "<item>"
+               "<publicIp>192.168.0.1</publicIp>"
+               "</item>"
+               "</addressesSet>"
+               "</DescribeAddressesResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_create_describe_instances_response_with_username(self):
+        """Create a DescribeInstancesResponse payload.
+        """
+        schema = self.schemas["DescribeInstancesResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        response = schema.create(namespace=xmlns)
+        response.requestId = "abc"
+        reservation = response.reservationSet.append()
+        instance = reservation.instancesSet.append()
+        instance.instanceId = "i-01234567"
+        xml = ("<DescribeInstancesResponse xmlns=\"%s\">"
+               "<requestId>abc</requestId>"
+               "<reservationSet>"
+               "<item>"
+               "<instancesSet>"
+               "<item>"
+               "<instanceId>i-01234567</instanceId>"
+               "</item>"
+               "</instancesSet>"
+               "</item>"
+               "</reservationSet>"
+               "</DescribeInstancesResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_create_describe_instances_response(self):
+        """Create a DescribeInstancesResponse payload.
+        """
+        schema = self.schemas["DescribeInstancesResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        response = schema.create(namespace=xmlns)
+        response.requestId = "abc"
+        reservation = response.reservationSet.append()
+        instance = reservation.instancesSet.append()
+        instance.instanceId = "i-01234567"
+        xml = ("<DescribeInstancesResponse xmlns=\"%s\">"
+               "<requestId>abc</requestId>"
+               "<reservationSet>"
+               "<item>"
+               "<instancesSet>"
+               "<item>"
+               "<instanceId>i-01234567</instanceId>"
+               "</item>"
+               "</instancesSet>"
+               "</item>"
+               "</reservationSet>"
+               "</DescribeInstancesResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_parse_describe_security_groups_response(self):
+        """Parse a DescribeSecurityGroupsResponse payload."""
+        schema = self.schemas["DescribeSecurityGroupsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<DescribeSecurityGroupsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<securityGroupInfo>"
+               "<item>"
+               "<ownerId>UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM</ownerId>"
+               "<groupName>WebServers</groupName>"
+               "<groupDescription>Web</groupDescription>"
+               "<ipPermissions>"
+               "<item>"
+               "<ipProtocol>tcp</ipProtocol>"
+               "<fromPort>80</fromPort>"
+               "<toPort>80</toPort>"
+               "<groups/>"
+               "<ipRanges>"
+               "<item>"
+               "<cidrIp>0.0.0.0/0</cidrIp>"
+               "</item>"
+               "</ipRanges>"
+               "</item>"
+               "</ipPermissions>"
+               "</item>"
+               "</securityGroupInfo>"
+               "</DescribeSecurityGroupsResponse>" % xmlns)
+        root = etree.fromstring(xml)
+        response = schema.create(root)
+        self.assertEqual("3ef0aa1d-57dd-4272", response.requestId)
+        self.assertEqual("UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM",
+                         response.securityGroupInfo[0].ownerId)
+        self.assertEqual("WebServers", response.securityGroupInfo[0].groupName)
+        self.assertEqual("Web", response.securityGroupInfo[0].groupDescription)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_modify_describe_security_groups_response(self):
+        """Modify a DescribeSecurityGroupsResponse payload."""
+        schema = self.schemas["DescribeSecurityGroupsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        xml = ("<DescribeSecurityGroupsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<securityGroupInfo>"
+               "<item>"
+               "<ownerId>UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM</ownerId>"
+               "<groupName>WebServers</groupName>"
+               "<groupDescription>Web</groupDescription>"
+               "<ipPermissions>"
+               "<item>"
+               "<ipProtocol>tcp</ipProtocol>"
+               "<fromPort>80</fromPort>"
+               "<toPort>80</toPort>"
+               "<groups/>"
+               "<ipRanges>"
+               "<item>"
+               "<cidrIp>0.0.0.0/0</cidrIp>"
+               "</item>"
+               "</ipRanges>"
+               "</item>"
+               "</ipPermissions>"
+               "</item>"
+               "</securityGroupInfo>"
+               "</DescribeSecurityGroupsResponse>" % xmlns)
+        root = etree.fromstring(xml)
+        response = schema.create(root)
+        response.securityGroupInfo[0].ownerId = "abc123"
+        response.securityGroupInfo[0].groupName = "Everybody"
+        response.securityGroupInfo[0].groupDescription = "All People"
+        xml = ("<DescribeSecurityGroupsResponse xmlns=\"%s\">"
+               "<requestId>3ef0aa1d-57dd-4272</requestId>"
+               "<securityGroupInfo>"
+               "<item>"
+               "<ownerId>abc123</ownerId>"
+               "<groupName>Everybody</groupName>"
+               "<groupDescription>All People</groupDescription>"
+               "<ipPermissions>"
+               "<item>"
+               "<ipProtocol>tcp</ipProtocol>"
+               "<fromPort>80</fromPort>"
+               "<toPort>80</toPort>"
+               "<groups/>"
+               "<ipRanges>"
+               "<item>"
+               "<cidrIp>0.0.0.0/0</cidrIp>"
+               "</item>"
+               "</ipRanges>"
+               "</item>"
+               "</ipPermissions>"
+               "</item>"
+               "</securityGroupInfo>"
+               "</DescribeSecurityGroupsResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))
+
+    def test_create_describe_security_groups_response(self):
+        """Create a DescribeSecurityGroupsResponse payload."""
+        schema = self.schemas["DescribeSecurityGroupsResponse"]
+        xmlns = "http://ec2.amazonaws.com/doc/2008-12-01/";
+        response = schema.create(namespace=xmlns)
+        response.requestId = "requestId123"
+        group = response.securityGroupInfo.append()
+        group.ownerId = "deadbeef31337"
+        group.groupName = "hexadecimalonly"
+        group.groupDescription = "All people that love hex"
+        xml = ("<DescribeSecurityGroupsResponse xmlns=\"%s\">"
+               "<requestId>requestId123</requestId>"
+               "<securityGroupInfo>"
+               "<item>"
+               "<ownerId>deadbeef31337</ownerId>"
+               "<groupName>hexadecimalonly</groupName>"
+               "<groupDescription>All people that love hex</groupDescription>"
+               "</item>"
+               "</securityGroupInfo>"
+               "</DescribeSecurityGroupsResponse>" % xmlns)
+        self.assertEqual(xml, etree.tostring(schema.dump(response)))

=== added file 'txaws/wsdl.py'
--- txaws/wsdl.py	1970-01-01 00:00:00 +0000
+++ txaws/wsdl.py	2012-01-18 16:28:35 +0000
@@ -0,0 +1,587 @@
+# Copyright (C) 2010-2012 Canonical Ltd.
+# Licenced under the txaws licence available at /LICENSE in the txaws source.
+
+"""Parse EC2 WSDL definitions and generate schemas.
+
+To understand how the machinery in this module works, let's consider the
+following bit of the EC2 WSDL definition, that specifies the format for
+the response of a DescribeKeyPairs query:
+
+  <element name='DescribeKeyPairsResponse'
+           type='tns:DescribeKeyPairsResponseType'/>
+
+  <complexType name='DescribeKeyPairsResponseType'>
+    <sequence>
+      <element name='requestId' type='string'/>
+      <element name='keySet' type='tns:DescribeKeyPairsResponseInfoType'/>
+    </sequence>
+  </complexType>
+
+  <complexType name='DescribeKeyPairsResponseInfoType'>
+    <sequence>
+      <element name='item' type='tns:DescribeKeyPairsResponseItemType'
+               minOccurs='0' maxOccurs='unbounded'/>
+    </sequence>
+  </complexType>
+
+  <complexType name='DescribeKeyPairsResponseItemType'>
+    <sequence>
+      <element name='keyName' type='string' />
+      <element name='keyFingerprint' type='string' />
+  <complexType>
+
+The L{WSDLParser} will take the above XML input and automatically generate
+a top-level L{NodeSchema} that can be used to access and modify the XML content
+of an actual DescribeKeyPairsResponse payload in an easy way.
+
+The automatically generated L{NodeSchema} object will be the same as the
+following manually created one:
+
+>>> child1 = LeafSchema('requestId')
+>>> sub_sub_child1 = LeafSchema('key_name')
+>>> sub_sub_child2 = LeafSchema('key_fingerprint')
+>>> sub_child = NodeSchema('item')
+>>> sub_child.add(sub_sub_child1)
+>>> sub_child.add(sub_sub_child2)
+>>> child2 = SequenceSchema('keySet')
+>>> child2.set(sub_child)
+>>> schema = NodeSchema('DescribeKeyPairsResponse')
+>>> schema.add(child1)
+>>> schema.add(child2)
+
+Now this L{NodeSchema} object can be used to access and modify a response
+XML payload, for example:
+
+  <DescribeKeyPairsResponse xmlns='http://ec2.amazonaws.com/doc/2008-12-01/'>
+    <requestId>3ef0aa1d-57dd-4272</requestId>
+    <keySet>
+      <item>
+        <keyName>some-key</keyName>
+        <keyFingerprint>94:88:29:60:cf</keyFingerprint>
+      </item>
+    </keySet>
+  </DescribeKeyPairsResponse>
+
+Let's assume to have an 'xml' variable that holds the XML payload above, now
+we can:
+
+>>> response = schema.create(etree.fromstring(xml))
+>>> response.requestId
+3ef0aa1d-57dd-4272
+>>> response.keySet[0].keyName
+some-key
+>>> response.keySet[0].keyFingerprint
+94:88:29:60:cf
+
+Note that there is no upfront parsing, the schema just makes sure that
+the response elements one actually accesses are consistent with the EC2
+WDSL definition and that all modifications of those items are consistent
+as well.
+"""
+
+from lxml import etree
+
+from txaws.server.exception import APIError
+
+
+class EC2ResponseError(APIError):
+    """Raised when a response doesn't comply with its schema."""
+
+    def __init__(self, message):
+        super(EC2ResponseError, self).__init__(500, "InvalidResponse", message)
+
+
+class LeafSchema(object):
+    """Schema for a single XML leaf element in an EC2 response.
+
+    @param tag: The name of the XML element tag this schema is for.
+    """
+
+    def __init__(self, tag):
+        self.tag = tag
+
+
+class NodeSchema(object):
+    """Schema for a single XML inner node in an EC2 response.
+
+    A L{Node} can have other L{Node} or L{LeafSchema} objects as children.
+
+    @param tag: The name of the XML element tag this schema is for.
+    @param _children: Optionally, the schemas for the child nodes, used only
+        by tests.
+    """
+
+    reserved = ["return"]
+
+    def __init__(self, tag, _children=None):
+        self.tag = tag
+        self.children = {}
+        self.children_min_occurs = {}
+        if _children:
+            for child in _children:
+                self.add(child)
+
+    def create(self, root=None, namespace=None):
+        """Create an inner node element.
+
+        @param root: The inner C{etree.Element} the item will be rooted at.
+        @result: A L{NodeItem} with the given root, or a new one if none.
+        @raises L{ECResponseError}: If the given C{root} has a bad tag.
+        """
+        if root is not None:
+            tag = root.tag
+            if root.nsmap:
+                namespace = root.nsmap[None]
+                tag = tag[len(namespace) + 2:]
+            if tag != self.tag:
+                raise EC2ResponseError("Expected response with tag '%s', but "
+                                       "got '%s' instead" % (self.tag, tag))
+        return NodeItem(self, root, namespace)
+
+    def dump(self, item):
+        """Return the C{etree.Element} of the given L{NodeItem}.
+
+        @param item: The L{NodeItem} to dump.
+        """
+        return item._root
+
+    def add(self, child, min_occurs=1):
+        """Add a child node.
+
+        @param child: The schema for the child node.
+        @param min_occurs: The minimum number of times the child node must
+            occur, if C{None} is given the default is 1.
+        """
+        if not min_occurs in (0, 1):
+            raise RuntimeError("Unexpected min bound for node schema")
+        self.children[child.tag] = child
+        self.children_min_occurs[child.tag] = min_occurs
+        return child
+
+
+class NodeItem(object):
+    """An inner node item in a tree of response elements.
+
+    @param schema: The L{NodeSchema} this item must comply to.
+    @param root: The C{etree.Element} this item is rooted at, if C{None}
+        a new one will be created.
+    """
+
+    def __init__(self, schema, root=None, namespace=None):
+        object.__setattr__(self, "_schema", schema)
+        object.__setattr__(self, "_namespace", namespace)
+        if root is None:
+            tag = self._get_namespace_tag(schema.tag)
+            nsmap = None
+            if namespace is not None:
+                nsmap = {None: namespace}
+            root = etree.Element(tag, nsmap=nsmap)
+        object.__setattr__(self, "_root", root)
+
+    def __getattr__(self, name):
+        """Get the child item with the given C{name}.
+
+        @raises L{EC2ResponseError}: In the following cases:
+            - The given C{name} is not in the schema.
+            - There is more than one element tagged C{name} in the response.
+            - No matching element is found in the response and C{name} is
+              requred.
+            - A required element is present but empty.
+        """
+        tag = self._get_tag(name)
+        schema = self._get_schema(tag)
+
+        child = self._find_child(tag)
+        if child is None:
+            if isinstance(schema, LeafSchema):
+                return self._check_value(tag, None)
+            child = self._create_child(tag)
+
+        if isinstance(schema, LeafSchema):
+            return self._check_value(tag, child.text)
+        return schema.create(child)
+
+    def __setattr__(self, name, value):
+        """Set the child item with the given C{name} to the given C{value}.
+
+        Setting a non-leaf child item to C{None} will make it disappear from
+        the tree completely.
+
+        @raises L{EC2ResponseError}: In the following cases:
+            - The given C{name} is not in the schema.
+            - There is more than one element tagged C{name} in the response.
+            - The given value is C{None} and the element is required.
+            - The given C{name} is associated with a non-leaf node, and
+              the given C{value} is not C{None}.
+            - The given C{name} is associated with a required non-leaf
+              and the given C{value} is C{None}.
+        """
+        tag = self._get_tag(name)
+        schema = self._get_schema(tag)
+        child = self._find_child(tag)
+        if not isinstance(schema, LeafSchema):
+            if value is not None:
+                raise EC2ResponseError("Can't set non-leaf tag '%s'" % tag)
+
+            if isinstance(schema, NodeSchema):
+                # Setting a node child item to None means removing it.
+                self._check_value(tag, None)
+                if child is not None:
+                    self._root.remove(child)
+            if isinstance(schema, SequenceSchema):
+                # Setting a sequence child item to None means removing all
+                # its children.
+                if child is None:
+                    child = self._create_child(tag)
+                for item in child.getchildren():
+                    child.remove(item)
+            return
+
+        if child is None:
+            child = self._create_child(tag)
+        child.text = self._check_value(tag, value)
+        if child.text is None:
+            self._root.remove(child)
+
+    def _create_child(self, tag):
+        """Create a new child element with the given tag."""
+        return etree.SubElement(self._root, self._get_namespace_tag(tag))
+
+    def _find_child(self, tag):
+        """Find the child C{etree.Element} with the matching C{tag}.
+
+        @raises L{EC2ResponseError}: If more than one such elements are found.
+        """
+        tag = self._get_namespace_tag(tag)
+        children = self._root.findall(tag)
+        if len(children) > 1:
+            raise EC2ResponseError("Duplicate tag '%s'" % tag)
+        if len(children) == 0:
+            return None
+        return children[0]
+
+    def _check_value(self, tag, value):
+        """Ensure that the element matching C{tag} can have the given C{value}.
+
+        @param tag: The tag to consider.
+        @param value: The value to check
+        @return: The unchanged L{value}, if valid.
+        @raises L{EC2ResponseError}: If the value is invalid.
+        """
+        if value is None:
+            if self._schema.children_min_occurs[tag] > 0:
+                raise EC2ResponseError("Missing tag '%s'" % tag)
+            return value
+        return value
+
+    def _get_tag(self, name):
+        """Get the L{NodeItem} attribute name for the given C{tag}."""
+        if name.endswith("_"):
+            if name[:-1] in self._schema.reserved:
+                return name[:-1]
+        return name
+
+    def _get_namespace_tag(self, tag):
+        """Return the given C{tag} with the namespace prefix added, if any."""
+        if self._namespace is not None:
+            tag = "{%s}%s" % (self._namespace, tag)
+        return tag
+
+    def _get_schema(self, tag):
+        """Return the child schema for the given C{tag}.
+
+        @raises L{EC2ResponseError}: If the tag doesn't belong to the schema.
+        """
+        schema = self._schema.children.get(tag)
+        if not schema:
+            raise EC2ResponseError("Unknown tag '%s'" % tag)
+        return schema
+
+    def to_xml(self):
+        """Convert the response to bare bones XML."""
+        return etree.tostring(self._root, encoding="utf-8")
+
+
+class SequenceSchema(object):
+    """Schema for a single XML inner node holding a sequence of other nodes.
+
+    @param tag: The name of the XML element tag this schema is for.
+    @param _child: Optionally the schema of the items in the sequence, used
+        by tests only.
+    """
+
+    def __init__(self, tag, _child=None):
+        self.tag = tag
+        self.child = None
+        if _child:
+            self.set(_child, 0, "unbounded")
+
+    def create(self, root=None, namespace=None):
+        """Create a sequence element with the given root.
+
+        @param root: The C{etree.Element} to root the sequence at, if C{None} a
+            new one will be created..
+        @result: A L{SequenceItem} with the given root.
+        @raises L{ECResponseError}: If the given C{root} has a bad tag.
+        """
+        if root is not None:
+            tag = root.tag
+            if root.nsmap:
+                namespace = root.nsmap[None]
+                tag = tag[len(namespace) + 2:]
+            if tag != self.tag:
+                raise EC2ResponseError("Expected response with tag '%s', but "
+                                       "got '%s' instead" % (self.tag, tag))
+        return SequenceItem(self, root, namespace)
+
+    def dump(self, item):
+        """Return the C{etree.Element} of the given L{SequenceItem}.
+
+        @param item: The L{SequenceItem} to dump.
+        """
+        return item._root
+
+    def set(self, child, min_occurs=1, max_occurs=1):
+        """Set the schema for the sequence children.
+
+        @param child: The schema that children must match.
+        @param min_occurs: The minimum number of children the sequence
+            must have.
+        @param max_occurs: The maximum number of children the sequence
+            can have.
+        """
+        if isinstance(child, LeafSchema):
+            raise RuntimeError("Sequence can't have leaf children")
+        if self.child is not None:
+            raise RuntimeError("Sequence has already a child")
+        if min_occurs is None or max_occurs is None:
+            raise RuntimeError("Sequence node without min or max")
+        if isinstance(child, LeafSchema):
+            raise RuntimeError("Sequence node with leaf child type")
+        if not child.tag == "item":
+            raise RuntimeError("Sequence node with bad child tag")
+
+        self.child = child
+        self.min_occurs = min_occurs
+        self.max_occurs = max_occurs
+        return child
+
+
+class SequenceItem(object):
+    """A sequence node item in a tree of response elements.
+
+    @param schema: The L{SequenceSchema} this item must comply to.
+    @param root: The C{etree.Element} this item is rooted at, if C{None}
+        a new one will be created.
+    """
+
+    def __init__(self, schema, root=None, namespace=None):
+        if root is None:
+            root = etree.Element(schema.tag)
+        object.__setattr__(self, "_schema", schema)
+        object.__setattr__(self, "_root", root)
+        object.__setattr__(self, "_namespace", namespace)
+
+    def __getitem__(self, index):
+        """Get the item with the given C{index} in the sequence.
+
+        @raises L{EC2ResponseError}: In the following cases:
+            - If there is no child element with the given C{index}.
+            - The given C{index} is higher than the allowed max.
+        """
+        schema = self._schema.child
+        tag = self._schema.tag
+        if (self._schema.max_occurs != "unbounded" and
+            index > self._schema.max_occurs - 1):
+            raise EC2ResponseError("Out of range item in tag '%s'" % tag)
+        child = self._get_child(self._root.getchildren(), index)
+        return schema.create(child)
+
+    def append(self):
+        """Append a new item to the sequence, appending it to the end.
+
+        @return: The newly created item.
+        @raises L{EC2ResponseError}: If the operation would result in having
+             more child elements than the allowed max.
+        """
+        tag = self._schema.tag
+        children = self._root.getchildren()
+        if len(children) >= self._schema.max_occurs:
+            raise EC2ResponseError("Too many items in tag '%s'" % tag)
+        schema = self._schema.child
+        tag = "item"
+        if self._namespace is not None:
+            tag = "{%s}%s" % (self._namespace, tag)
+        child = etree.SubElement(self._root, tag)
+        return schema.create(child)
+
+    def __delitem__(self, index):
+        """Remove the item with the given C{index} from the sequence.
+
+        @raises L{EC2ResponseError}: If the operation would result in having
+             less child elements than the required min_occurs, or if no such
+             index is found.
+        """
+        tag = self._schema.tag
+        children = self._root.getchildren()
+        if len(children) <= self._schema.min_occurs:
+            raise EC2ResponseError("Not enough items in tag '%s'" % tag)
+        self._root.remove(self._get_child(children, index))
+
+    def remove(self, item):
+        """Remove the given C{item} from the sequence.
+
+        @raises L{EC2ResponseError}: If the operation would result in having
+             less child elements than the required min_occurs, or if no such
+             index is found.
+        """
+        for index, child in enumerate(self._root.getchildren()):
+            if child is item._root:
+                del self[index]
+                return item
+        raise EC2ResponseError("Non existing item in tag '%s'" %
+                               self._schema.tag)
+
+    def __iter__(self):
+        """Iter all the sequence items in order."""
+        schema = self._schema.child
+        for child in self._root.iterchildren():
+            yield schema.create(child)
+
+    def __len__(self):
+        """Return the length of the sequence."""
+        return len(self._root.getchildren())
+
+    def _get_child(self, children, index):
+        """Return the child with the given index."""
+        try:
+            return children[index]
+        except IndexError:
+            raise EC2ResponseError("Non existing item in tag '%s'" %
+                                   self._schema.tag)
+
+
+class WSDLParser(object):
+    """Build response schemas out of EC2 WSDL definitions"""
+
+    leaf_types = ["string", "boolean", "dateTime", "int", "long", "double",
+        "integer"]
+
+    def parse(self, wsdl):
+        """Parse the given C{wsdl} data and build the associated schemas.
+
+        @param wdsl: A string containing the raw xml of the WDSL definition
+            to parse.
+        @return: A C{dict} mapping response type names to their schemas.
+        """
+        parser = etree.XMLParser(remove_blank_text=True, remove_comments=True)
+        root = etree.fromstring(wsdl, parser=parser)
+        types = {}
+        responses = {}
+        schemas = {}
+        namespace = root.attrib["targetNamespace"]
+
+        for element in root[0][0]:
+            self._remove_namespace_from_tag(element)
+            if element.tag in ["annotation", "group"]:
+                continue
+            name = element.attrib["name"]
+            if element.tag == "element":
+                if name.endswith("Response"):
+                    if name in responses:
+                        raise RuntimeError("Schema already defined")
+                    responses[name] = element
+            elif element.tag == "complexType":
+                types[name] = [element, False]
+            else:
+                raise RuntimeError("Top-level element with unexpected tag")
+
+        for name, element in responses.iteritems():
+            schemas[name] = self._parse_type(element, types)
+            schemas[name].namespace = namespace
+
+        return schemas
+
+    def _remove_namespace_from_tag(self, element):
+        tag = element.tag
+        if "}" in tag:
+            tag = tag.split("}", 1)[1]
+        element.tag = tag
+
+    def _parse_type(self, element, types):
+        """Parse a 'complexType' element.
+
+        @param element: The top-level complexType element
+        @param types: A map of the elements of all available complexType's.
+        @return: The schema for the complexType.
+        """
+        name = element.attrib["name"]
+        type = element.attrib["type"]
+        if not type.startswith("tns:"):
+            raise RuntimeError("Unexpected element type %s" % type)
+        type = type[4:]
+
+        [children] = types[type][0]
+        types[type][1] = True
+
+        self._remove_namespace_from_tag(children)
+        if children.tag not in ("sequence", "choice"):
+            raise RuntimeError("Unexpected children type %s" % children.tag)
+
+        if children[0].attrib["name"] == "item":
+            schema = SequenceSchema(name)
+        else:
+            schema = NodeSchema(name)
+
+        for child in children:
+            self._remove_namespace_from_tag(child)
+            if child.tag == "element":
+                name, type, min_occurs, max_occurs = self._parse_child(child)
+                if type in self.leaf_types:
+                    if max_occurs != 1:
+                        raise RuntimeError("Unexpected max value for leaf")
+                    if not isinstance(schema, NodeSchema):
+                        raise RuntimeError("Attempt to add leaf to a non-node")
+                    schema.add(LeafSchema(name), min_occurs=min_occurs)
+                else:
+                    if name == "item":  # sequence
+                        if not isinstance(schema, SequenceSchema):
+                            raise RuntimeError("Attempt to set child for "
+                                               "non-sequence")
+                        schema.set(self._parse_type(child, types),
+                                   min_occurs=min_occurs,
+                                   max_occurs=max_occurs)
+                    else:
+                        if max_occurs != 1:
+                            raise RuntimeError("Unexpected max for node")
+                        if not isinstance(schema, NodeSchema):
+                            raise RuntimeError("Unexpected schema type")
+                        schema.add(self._parse_type(child, types),
+                                   min_occurs=min_occurs)
+            elif child.tag == "choice":
+                pass
+            else:
+                raise RuntimeError("Unexpected child type")
+        return schema
+
+    def _parse_child(self, child):
+        """Parse a single child element.
+
+        @param child: The child C{etree.Element} to parse.
+        @return: A tuple C{(name, type, min_occurs, max_occurs)} with the
+            details about the given child.
+        """
+        if set(child.attrib) - set(["name", "type", "minOccurs", "maxOccurs"]):
+            raise RuntimeError("Unexpected attribute in child")
+        name = child.attrib["name"]
+        type = child.attrib["type"].split(":")[1]
+        min_occurs = child.attrib.get("minOccurs")
+        max_occurs = child.attrib.get("maxOccurs")
+        if min_occurs is None:
+            min_occurs = "1"
+        min_occurs = int(min_occurs)
+        if max_occurs is None:
+            max_occurs = "1"
+        if max_occurs != "unbounded":
+            max_occurs = int(max_occurs)
+        return name, type, min_occurs, max_occurs

=== added directory 'wsdl'
=== added file 'wsdl/2009-11-30.ec2.wsdl'
--- wsdl/2009-11-30.ec2.wsdl	1970-01-01 00:00:00 +0000
+++ wsdl/2009-11-30.ec2.wsdl	2012-01-18 16:28:35 +0000
@@ -0,0 +1,4668 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"; xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:tns="http://ec2.amazonaws.com/doc/2009-11-30/";
+  targetNamespace="http://ec2.amazonaws.com/doc/2009-11-30/";>
+
+  <types>
+		<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+		           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+		           xmlns:tns="http://ec2.amazonaws.com/doc/2009-11-30/";
+		           targetNamespace="http://ec2.amazonaws.com/doc/2009-11-30/";    
+		           elementFormDefault="qualified">
+		  
+		  <xs:annotation>
+		    <xs:documentation xml:lang="en">
+		      
+		    </xs:documentation>
+		  </xs:annotation>
+		  
+		  <!-- CreateImage -->
+		
+		  <xs:element name='CreateImage' type='tns:CreateImageType' />
+		  
+		  <xs:complexType name='CreateImageType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+			  <xs:element name='name' type='xs:string' />
+		      <xs:element name='description' type='xs:string' minOccurs='0' />
+		      <xs:element name='noReboot' type='xs:boolean' minOccurs='0' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:element name='CreateImageResponse' type='tns:CreateImageResponseType' />
+		
+		  <xs:complexType name='CreateImageResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='imageId' type='xs:string' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  
+		  <!-- RegisterImage -->
+		  
+		  <xs:complexType name='ProductCodeType'>
+		    <xs:sequence>
+		      <xs:element name='productCode' type='xs:string' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='ProductCodeSetType'>
+		    <xs:sequence>
+		      <xs:element name='item' type='tns:ProductCodeType' minOccurs='0' maxOccurs='unbounded' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		    
+		  <xs:element name='RegisterImage' type='tns:RegisterImageType' />
+		  <xs:element name='RegisterImageResponse' type='tns:RegisterImageResponseType' />
+		  <xs:complexType name='RegisterImageType'>
+		    <xs:sequence>
+		      <xs:element name='imageLocation' type='xs:string' minOccurs='0' />
+			  <xs:element name='name' type='xs:string' />
+		      <xs:element name='description' type='xs:string' minOccurs='0' />
+		      <xs:element name='architecture' type='xs:string' minOccurs='0' />
+		      <xs:element name='kernelId' type='xs:string' minOccurs='0' />
+		      <xs:element name='ramdiskId' type='xs:string' minOccurs='0' />
+		      <xs:element name='rootDeviceName' type='xs:string' minOccurs='0' />
+		      <xs:element name='blockDeviceMapping' type='tns:BlockDeviceMappingType' minOccurs='0' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='RegisterImageResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='imageId' type='xs:string' />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeregisterImage request definitions -->
+		
+		  <xs:element name="DeregisterImage" type="tns:DeregisterImageType"/>
+		
+		  <xs:complexType name="DeregisterImageType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeregisterImage response definitions -->
+		
+		  <xs:element name="DeregisterImageResponse" type="tns:DeregisterImageResponseType"/>
+		
+		  <xs:complexType name="DeregisterImageResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateKeyPair request definitions -->
+		  
+		  <xs:element name="CreateKeyPair" type="tns:CreateKeyPairType"/>
+		
+		  <xs:complexType name="CreateKeyPairType">
+		    <xs:sequence>
+		      <xs:element name="keyName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateKeyPair response definitions -->
+		
+		  <xs:element name="CreateKeyPairResponse" type="tns:CreateKeyPairResponseType"/>
+		  
+		  <xs:complexType name="CreateKeyPairResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="keyName" type="xs:string"/>
+		      <xs:element name="keyFingerprint" type="xs:string"/>
+		      <xs:element name="keyMaterial" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteKeyPair request definitions -->
+		  
+		  <xs:element name="DeleteKeyPair" type="tns:DeleteKeyPairType" />
+		
+		  <xs:complexType name="DeleteKeyPairType">
+		    <xs:sequence>
+		      <xs:element name="keyName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteKeyPair response definitions -->
+		
+		  <xs:element name="DeleteKeyPairResponse" type="tns:DeleteKeyPairResponseType"/>
+		  
+		  <xs:complexType name="DeleteKeyPairResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeKeyPairs Request definitions -->
+		
+		  <xs:element name="DescribeKeyPairs" type="tns:DescribeKeyPairsType"/>
+		
+		  <xs:complexType name="DescribeKeyPairsType">
+		    <xs:sequence>
+		      <xs:element name="keySet" type="tns:DescribeKeyPairsInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeKeyPairsInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeKeyPairsItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeKeyPairsItemType">
+		    <xs:sequence>
+		      <xs:element name="keyName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeKeyPairs Response definitions -->
+		
+		  <xs:element name="DescribeKeyPairsResponse" type="tns:DescribeKeyPairsResponseType"/>
+		  
+		  <xs:complexType name="DescribeKeyPairsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="keySet" type="tns:DescribeKeyPairsResponseInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeKeyPairsResponseInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeKeyPairsResponseItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeKeyPairsResponseItemType">
+		    <xs:sequence>
+		      <xs:element name="keyName" type="xs:string" />
+		      <xs:element name="keyFingerprint" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- RunInstances request definitions -->
+		
+		  <xs:element name="RunInstances" type="tns:RunInstancesType"/>
+		
+		  <xs:complexType name="RunInstancesType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		      <xs:element name="minCount" type="xs:int"/>
+		      <xs:element name="maxCount" type="xs:int"/>
+		      <xs:element name="keyName" type="xs:string" minOccurs="0" />
+		      <xs:element name="groupSet" type="tns:GroupSetType"/>
+		      <xs:element name="additionalInfo" type="xs:string" minOccurs="0"/>
+		      <xs:element name="userData" type="tns:UserDataType" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="addressingType" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="placement" type="tns:PlacementRequestType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="kernelId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="ramdiskId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="monitoring" type="tns:MonitoringInstanceType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="subnetId" type="xs:string" minOccurs="0" maxOccurs="1" />
+			  <xs:element name="disableApiTermination" type="xs:boolean" minOccurs="0" maxOccurs="1" />
+			  <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string" minOccurs="0" maxOccurs="1" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="GroupSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:GroupItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="GroupItemType">
+		    <xs:sequence>
+		      <xs:element name="groupId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="UserDataType" mixed="true">
+		    <xs:sequence>
+		      <xs:element name="data" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		    <xs:attribute name="version" type="xs:string" use="required" fixed="1.0"/>
+		    <xs:attribute name="encoding" type="xs:string" use="required" fixed="base64"/>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="BlockDeviceMappingType"> 
+		    <xs:sequence> 
+		      <xs:element name="item" type="tns:BlockDeviceMappingItemType" minOccurs="0" maxOccurs="unbounded" /> 
+		    </xs:sequence> 
+		  </xs:complexType> 
+		
+		  <xs:complexType name="BlockDeviceMappingItemType"> 
+		    <xs:sequence> 
+		      <xs:element name="deviceName" type="xs:string"/> 
+			  <xs:choice>
+			    <xs:element name="virtualName" type="xs:string"/> 
+			    <xs:element name="ebs" type="tns:EbsBlockDeviceType"/>
+			    <xs:element name="noDevice" type="tns:EmptyElementType"/>
+			  </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType> 
+		  
+		  <xs:complexType name="EbsBlockDeviceType">
+		    <xs:sequence>
+			  <xs:element name="snapshotId" type="xs:string" minOccurs="0"/>
+			  <xs:element name="volumeSize" type="xs:int" minOccurs="0"/>
+			  <xs:element name="deleteOnTermination" type="xs:boolean" minOccurs="0"/>
+			</xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="PlacementRequestType"> 
+		    <xs:sequence> 
+		      <xs:element name="availabilityZone" type="xs:string" minOccurs="0" maxOccurs="1" /> 
+		    </xs:sequence> 
+		  </xs:complexType> 
+		
+		  <xs:complexType name="MonitoringInstanceType"> 
+		    <xs:sequence> 
+		      <xs:element name="enabled" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
+		    </xs:sequence> 
+		  </xs:complexType>
+		  
+		  <!-- RunInstances response definitions -->
+		
+		  <xs:element name="RunInstancesResponse" type="tns:RunInstancesResponseType"/>
+		  
+		  <xs:complexType name="RunInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="reservationId" type="xs:string"/>
+		      <xs:element name="ownerId" type="xs:string"/>
+		      <xs:element name="groupSet" type="tns:GroupSetType"/>
+		      <xs:element name="instancesSet" type="tns:RunningInstancesSetType"/>
+		      <xs:element name="requesterId" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ReservationInfoType">
+		    <xs:sequence>
+		      <xs:element name="reservationId" type="xs:string"/>
+		      <xs:element name="ownerId" type="xs:string"/>
+		      <xs:element name="groupSet" type="tns:GroupSetType"/>
+		      <xs:element name="instancesSet" type="tns:RunningInstancesSetType"/>
+		      <xs:element name="requesterId" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RunningInstancesSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:RunningInstancesItemType" minOccurs="1" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RunningInstancesItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="imageId" type="xs:string" minOccurs="0" />
+		      <xs:element name="instanceState" type="tns:InstanceStateType"/>
+		      <xs:element name="privateDnsName" type="xs:string"/>
+		      <xs:element name="dnsName" type="xs:string" minOccurs="0" />
+		      <xs:element name="reason" type="xs:string" minOccurs="0"/>
+		      <xs:element name="keyName" type="xs:string" minOccurs="0"/>
+		      <xs:element name="amiLaunchIndex" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="productCodes" type="tns:ProductCodesSetType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="instanceType" type="xs:string"/>
+		      <xs:element name="launchTime" type="xs:dateTime" />
+		      <xs:element name="placement" type="tns:PlacementResponseType" minOccurs="0"/>
+		      <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+		      <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+		      <xs:element name="platform" type="xs:string" minOccurs="0"/>
+		      <xs:element name="monitoring" type="tns:InstanceMonitoringStateType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="subnetId" type="xs:string" minOccurs="0" />
+		      <xs:element name="vpcId" type="xs:string" minOccurs="0" />
+		      <xs:element name="privateIpAddress" type="xs:string" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="ipAddress" type="xs:string" minOccurs="0" maxOccurs="1" />
+		      <xs:element name='stateReason' type='tns:StateReasonType' minOccurs="0" />
+		      <xs:element name='architecture' type='xs:string' minOccurs='0' />
+			  <xs:element name='rootDeviceType' type='xs:string' minOccurs='0' />
+		      <xs:element name='rootDeviceName' type='xs:string' minOccurs='0' />
+			  <xs:element name='blockDeviceMapping' type='tns:InstanceBlockDeviceMappingResponseType' minOccurs='0' />
+		      <xs:element name="instanceLifecycle" type="xs:string" minOccurs="0" />
+		      <xs:element name="spotInstanceRequestId" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="PlacementResponseType">
+		    <xs:sequence> 
+		      <xs:element name="availabilityZone" type="xs:string" /> 
+		    </xs:sequence> 
+		  </xs:complexType> 
+		
+		  <xs:complexType name="StateReasonType">
+		    <xs:sequence>
+		      <xs:element name="code" type="xs:string"/>
+		      <xs:element name="message" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name='InstanceBlockDeviceMappingResponseType'>
+		    <xs:sequence>
+		      <xs:element name='item' type='tns:InstanceBlockDeviceMappingResponseItemType' minOccurs='0' maxOccurs='unbounded' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name='InstanceBlockDeviceMappingResponseItemType'>
+		    <xs:sequence>
+		      <xs:element name='deviceName' type='xs:string' />
+			  <xs:choice>
+			    <xs:element name='ebs' type='tns:EbsInstanceBlockDeviceMappingResponseType' />
+			  </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name='EbsInstanceBlockDeviceMappingResponseType'>
+		    <xs:sequence>
+			  <xs:element name='volumeId' type='xs:string' />
+			  <xs:element name='status' type='xs:string' />
+			  <xs:element name='attachTime' type='xs:dateTime' />
+			  <xs:element name='deleteOnTermination' type='xs:boolean' minOccurs='0' />
+			</xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- GetConsoleOutput request definitions -->
+		
+		  <xs:element name="GetConsoleOutput" type="tns:GetConsoleOutputType"/>
+		
+		  <xs:complexType name="GetConsoleOutputType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- GetConsoleOutput response definitions -->
+		
+		  <xs:element name="GetConsoleOutputResponse" type="tns:GetConsoleOutputResponseType"/>
+		
+		  <xs:complexType name="GetConsoleOutputResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string" />
+		      <xs:element name="timestamp" type="xs:dateTime" />
+		      <xs:element name="output" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- GetPasswordData request definitions -->
+		
+		  <xs:element name="GetPasswordData" type="tns:GetPasswordDataType"/>
+		
+		  <xs:complexType name="GetPasswordDataType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- GetPasswordData response definitions -->
+		
+		  <xs:element name="GetPasswordDataResponse" type="tns:GetPasswordDataResponseType"/>
+		
+		  <xs:complexType name="GetPasswordDataResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string" />
+		      <xs:element name="timestamp" type="xs:dateTime" />
+		      <xs:element name="passwordData" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- TerminateInstances -->
+		
+		  <xs:complexType name='InstanceIdType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='InstanceIdSetType'>
+		    <xs:sequence>
+		      <xs:element name='item' type='tns:InstanceIdType' minOccurs='0' maxOccurs='unbounded' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='InstanceStateChangeType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+		      <xs:element name='currentState' type='tns:InstanceStateType' />
+		      <xs:element name='previousState' type='tns:InstanceStateType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='InstanceStateChangeSetType'>
+		    <xs:sequence>
+		      <xs:element name='item' type='tns:InstanceStateChangeType' minOccurs='0' maxOccurs='unbounded' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:element name='TerminateInstances' type='tns:TerminateInstancesType' />
+		  <xs:element name='TerminateInstancesResponse' type='tns:TerminateInstancesResponseType' />
+		  <xs:complexType name='TerminateInstancesType'>
+		    <xs:sequence>
+		      <xs:element name='instancesSet' type='tns:InstanceIdSetType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='TerminateInstancesResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='instancesSet' type='tns:InstanceStateChangeSetType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  
+		  <xs:complexType name='InstanceBlockDeviceMappingType'>
+		    <xs:sequence>
+		      <xs:element name='item' type='tns:InstanceBlockDeviceMappingItemType' minOccurs='0' maxOccurs='unbounded' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name='InstanceBlockDeviceMappingItemType'>
+		    <xs:sequence>
+		      <xs:element name='deviceName' type='xs:string' />
+			  <xs:choice>
+			    <xs:element name='virtualName' type='xs:string' />
+			    <xs:element name='ebs' type='tns:InstanceEbsBlockDeviceType' />
+			    <xs:element name='noDevice' type='tns:EmptyElementType' />
+			  </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name='InstanceEbsBlockDeviceType'>
+		    <xs:sequence>
+			  <xs:element name='volumeId' type='xs:string' />
+			  <xs:element name='deleteOnTermination' type='xs:boolean' minOccurs='0' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- Stop instances -->
+		
+		  <xs:element name='StopInstances' type='tns:StopInstancesType' />
+		  <xs:element name='StopInstancesResponse' type='tns:StopInstancesResponseType' />
+		  <xs:complexType name='StopInstancesType'>
+		    <xs:sequence>
+		      <xs:element name='instancesSet' type='tns:InstanceIdSetType' />
+		      <xs:element name='force' type='xs:boolean' minOccurs='0' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='StopInstancesResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='instancesSet' type='tns:InstanceStateChangeSetType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!--  Start instances -->
+		  <xs:element name='StartInstances' type='tns:StartInstancesType' />
+		  <xs:element name='StartInstancesResponse' type='tns:StartInstancesResponseType' />
+		   <xs:complexType name='StartInstancesType'>
+		    <xs:sequence>
+		      <xs:element name='instancesSet' type='tns:InstanceIdSetType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name='StartInstancesResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='instancesSet' type='tns:InstanceStateChangeSetType' />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- RebootInstances request definitions -->
+		  <xs:element name="RebootInstances" type="tns:RebootInstancesType"/>
+		
+		  <xs:complexType name="RebootInstancesType">
+		    <xs:sequence>
+		      <xs:element name="instancesSet" type="tns:RebootInstancesInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="RebootInstancesInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:RebootInstancesItemType" minOccurs="1" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RebootInstancesItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- RebootInstances response definitions -->
+		
+		  <xs:element name="RebootInstancesResponse" type="tns:RebootInstancesResponseType"/>
+		
+		  <xs:complexType name="RebootInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeInstances Request definitions -->
+		
+		  <xs:element name="DescribeInstances" type="tns:DescribeInstancesType"/>
+		
+		  <xs:complexType name="DescribeInstancesType">
+		    <xs:sequence>
+		      <xs:element name="instancesSet" type="tns:DescribeInstancesInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeInstancesInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeInstancesItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeInstancesItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeInstances Response definitions -->
+		
+		  <xs:element name="DescribeInstancesResponse" type="tns:DescribeInstancesResponseType"/>
+		  
+		  <xs:complexType name="DescribeInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="reservationSet" type="tns:ReservationSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ReservationSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:ReservationInfoType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeImages Request definitions -->
+		
+		  <xs:element name="DescribeImages" type="tns:DescribeImagesType"/>
+		
+		  <xs:complexType name="DescribeImagesType">
+		    <xs:sequence>
+		      <xs:element name="executableBySet" type="tns:DescribeImagesExecutableBySetType" minOccurs="0"/>
+		      <xs:element name="imagesSet" type="tns:DescribeImagesInfoType"/>
+		      <xs:element name="ownersSet" type="tns:DescribeImagesOwnersType" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeImagesInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeImagesItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeImagesItemType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="DescribeImagesOwnersType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeImagesOwnerType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeImagesOwnerType">
+		    <xs:sequence>
+		      <xs:element name="owner" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="DescribeImagesExecutableBySetType" >
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeImagesExecutableByType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="DescribeImagesExecutableByType" >
+		    <xs:sequence>
+		      <xs:element name="user" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeImages Response definitions -->
+		
+		  <xs:element name="DescribeImagesResponse" type="tns:DescribeImagesResponseType"/>
+		  
+		  <xs:complexType name="DescribeImagesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="imagesSet" type="tns:DescribeImagesResponseInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeImagesResponseInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeImagesResponseItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeImagesResponseItemType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string" />
+		      <xs:element name="imageLocation" type="xs:string" minOccurs="0" />
+		      <xs:element name="imageState" type="xs:string" />
+		      <xs:element name="imageOwnerId" type="xs:string" />
+		      <xs:element name="isPublic" type="xs:boolean" />
+		      <xs:element name="productCodes" type="tns:ProductCodesSetType" minOccurs="0" />
+		      <xs:element name="architecture" type="xs:string"  minOccurs="0"/>
+		      <xs:element name="imageType" type="xs:string"  minOccurs="0"/>
+		      <xs:element name="kernelId" type="xs:string"  minOccurs="0"/>
+		      <xs:element name="ramdiskId" type="xs:string"  minOccurs="0"/>
+		      <xs:element name="platform" type="xs:string"  minOccurs="0"/>
+			  <xs:element name="stateReason" type="tns:StateReasonType" minOccurs="0"/>
+		      <xs:element name="imageOwnerAlias" type="xs:string" minOccurs="0"/>
+			  <xs:element name="name" type="xs:string" minOccurs="0" />
+		      <xs:element name="description" type="xs:string"  minOccurs="0"/>
+			  <xs:element name='rootDeviceType' type='xs:string' minOccurs='0' />
+		      <xs:element name="rootDeviceName" type="xs:string" minOccurs="0" />
+		      <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateSecurityGroup Request definitions -->
+		
+		  <xs:element name="CreateSecurityGroup" 
+		              type="tns:CreateSecurityGroupType"/>
+		
+		  <xs:complexType name="CreateSecurityGroupType">
+		    <xs:sequence>
+		      <xs:element name="groupName" type="xs:string"/>
+		      <xs:element name="groupDescription" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateSecurityGroup Response definitions -->
+		
+		  <xs:element name="CreateSecurityGroupResponse" 
+		              type="tns:CreateSecurityGroupResponseType"/>
+		
+		  <xs:complexType name="CreateSecurityGroupResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteSecurityGroup Request definitions -->
+		
+		  <xs:element name="DeleteSecurityGroup" 
+		              type="tns:DeleteSecurityGroupType"/>
+		
+		  <xs:complexType name="DeleteSecurityGroupType">
+		    <xs:sequence>
+		      <xs:element name="groupName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteSecurityGroup Response definitions -->
+		
+		  <xs:element name="DeleteSecurityGroupResponse" 
+		              type="tns:DeleteSecurityGroupResponseType"/>
+		
+		  <xs:complexType name="DeleteSecurityGroupResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeSecurityGroups Request definitions -->
+		
+		  <xs:element name="DescribeSecurityGroups" 
+		              type="tns:DescribeSecurityGroupsType"/>
+		
+		  <xs:complexType name="DescribeSecurityGroupsType">
+		    <xs:sequence>
+		      <xs:element name="securityGroupSet" type="tns:DescribeSecurityGroupsSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSecurityGroupsSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeSecurityGroupsSetItemType"
+		                  minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSecurityGroupsSetItemType">
+		    <xs:sequence>
+		      <xs:element name="groupName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeSecurityGroups Response definitions -->
+		
+		  <xs:element name="DescribeSecurityGroupsResponse" 
+		              type="tns:DescribeSecurityGroupsResponseType"/>
+		
+		  <xs:complexType name="DescribeSecurityGroupsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="securityGroupInfo" type="tns:SecurityGroupSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="IpPermissionSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:IpPermissionType"
+		                  minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="IpPermissionType">
+		    <xs:sequence>
+		      <xs:element name="ipProtocol" type="xs:string"/>
+		      <xs:element name="fromPort" type="xs:int"/>
+		      <xs:element name="toPort" type="xs:int"/>
+		      <xs:element name="groups" type="tns:UserIdGroupPairSetType"/>
+		      <xs:element name="ipRanges" type="tns:IpRangeSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="IpRangeSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:IpRangeItemType"
+		                  minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="IpRangeItemType">
+		    <xs:sequence>
+		      <xs:element name="cidrIp" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="UserIdGroupPairSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:UserIdGroupPairType" 
+		                  minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="UserIdGroupPairType">
+		    <xs:sequence>
+		      <xs:element name="userId" type="xs:string"/>
+		      <xs:element name="groupName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SecurityGroupSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SecurityGroupItemType" 
+		                  minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SecurityGroupItemType">
+		    <xs:sequence>
+		      <xs:element name="ownerId" type="xs:string"/>
+		      <xs:element name="groupName" type="xs:string"/>
+		      <xs:element name="groupDescription" type="xs:string"/>      
+		      <xs:element name="ipPermissions" type="tns:IpPermissionSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AuthorizeSecurityGroupIngress Request definitions -->
+		
+		
+		  <xs:element name="AuthorizeSecurityGroupIngress" 
+		              type="tns:AuthorizeSecurityGroupIngressType"/>
+		
+		  <xs:complexType name="AuthorizeSecurityGroupIngressType">
+		    <xs:sequence>
+		      <xs:element name="userId" type="xs:string"/>
+		      <xs:element name="groupName" type="xs:string"/>
+		      <xs:element name="ipPermissions" type="tns:IpPermissionSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AuthorizeSecurityGroupIngress Response definitions -->
+		
+		  <xs:element name="AuthorizeSecurityGroupIngressResponse" 
+		              type="tns:AuthorizeSecurityGroupIngressResponseType"/>
+		
+		  <xs:complexType name="AuthorizeSecurityGroupIngressResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- RevokeSecurityGroupIngress Request definitions -->
+		
+		
+		  <xs:element name="RevokeSecurityGroupIngress" 
+		              type="tns:RevokeSecurityGroupIngressType"/>
+		
+		  <xs:complexType name="RevokeSecurityGroupIngressType">
+		    <xs:sequence>
+		      <xs:element name="userId" type="xs:string"/>
+		      <xs:element name="groupName" type="xs:string"/>
+		      <xs:element name="ipPermissions" type="tns:IpPermissionSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- RevokeSecurityGroupIngress Response definitions -->
+		
+		  <xs:element name="RevokeSecurityGroupIngressResponse" 
+		              type="tns:RevokeSecurityGroupIngressResponseType"/>
+		
+		  <xs:complexType name="RevokeSecurityGroupIngressResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- Instance state type definition -->
+		
+		  <xs:complexType name="InstanceStateType">
+		    <xs:sequence>
+		      <xs:element name="code" type="xs:int"/>
+		      <xs:element name="name" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- ModifyInstanceAttribute Definitions -->
+		  
+		  <xs:element name='ModifyInstanceAttribute' type='tns:ModifyInstanceAttributeType' />
+		 
+		  <xs:complexType name='ModifyInstanceAttributeType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+			  <xs:choice>
+		        <xs:element name='instanceType' type='tns:AttributeValueType' />
+		        <xs:element name='kernel' type='tns:AttributeValueType' />
+		        <xs:element name='ramdisk' type='tns:AttributeValueType' />
+				<xs:element name="userData" type="tns:AttributeValueType"/>
+				<xs:element name='disableApiTermination' type='tns:AttributeBooleanValueType' />
+				<xs:element name='instanceInitiatedShutdownBehavior' type='tns:AttributeValueType' />
+				<xs:element name="blockDeviceMapping" type="tns:InstanceBlockDeviceMappingType"/>
+			  </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		
+		  <!-- ModifyInstanceAttributeResponse Definitions -->  
+		  
+		  <xs:element name='ModifyInstanceAttributeResponse' type='tns:ModifyInstanceAttributeResponseType' />
+		 
+		  <xs:complexType name='ModifyInstanceAttributeResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='return' type='xs:boolean' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- ResetImageAttribute Definitions -->
+				  
+		  <xs:element name='ResetInstanceAttribute' type='tns:ResetInstanceAttributeType' />
+		
+		  <xs:complexType name='ResetInstanceAttributeType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+		      <xs:group ref='tns:ResetInstanceAttributesGroup'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:group name='ResetInstanceAttributesGroup' >
+		    <xs:choice>
+		      <xs:element name='kernel' type='tns:EmptyElementType' />
+		      <xs:element name='ramdisk' type='tns:EmptyElementType' />
+		    </xs:choice>
+		  </xs:group>
+		  
+		  <!-- ResetInstanceAttributeResponse Definitions -->
+		  
+		  <xs:element name='ResetInstanceAttributeResponse' type='tns:ResetInstanceAttributeResponseType' />
+		  
+		  <xs:complexType name='ResetInstanceAttributeResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='return' type='xs:boolean' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- DescribeInstanceAttribute Definitions -->
+		  
+		  <xs:element name='DescribeInstanceAttribute' type='tns:DescribeInstanceAttributeType' />
+		  
+		  <xs:complexType name='DescribeInstanceAttributeType'>
+		    <xs:sequence>
+		      <xs:element name='instanceId' type='xs:string' />
+		      <xs:group ref='tns:DescribeInstanceAttributesGroup' />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:group name='DescribeInstanceAttributesGroup' >
+		    <xs:choice>
+		      <xs:element name='instanceType' type='tns:EmptyElementType' />
+		      <xs:element name='kernel' type='tns:EmptyElementType' />
+		      <xs:element name='ramdisk' type='tns:EmptyElementType' />
+			  <xs:element name='userData' type='tns:EmptyElementType' />
+			  <xs:element name='disableApiTermination' type='tns:EmptyElementType' />
+			  <xs:element name='instanceInitiatedShutdownBehavior' type='tns:EmptyElementType' />
+			  <xs:element name='rootDeviceName' type='tns:EmptyElementType' />
+			  <xs:element name="blockDeviceMapping" type="tns:EmptyElementType"/>
+		    </xs:choice>
+		  </xs:group>
+		  
+		  <!-- DescribeImageAttributeResponse Definitions -->
+		  
+		  <xs:element name='DescribeInstanceAttributeResponse' type='tns:DescribeInstanceAttributeResponseType' />  
+		  
+		  <xs:complexType name='DescribeInstanceAttributeResponseType'>
+		    <xs:sequence>
+		      <xs:element name='requestId' type='xs:string' />
+		      <xs:element name='instanceId' type='xs:string' />
+		      <xs:choice>
+		        <xs:element name='instanceType' type='tns:NullableAttributeValueType' />
+		        <xs:element name='kernel' type='tns:NullableAttributeValueType' />
+		        <xs:element name='ramdisk' type='tns:NullableAttributeValueType' />
+		        <xs:element name="userData" type="tns:NullableAttributeValueType"/>
+			    <xs:element name='disableApiTermination' type='tns:NullableAttributeBooleanValueType' />
+			    <xs:element name='instanceInitiatedShutdownBehavior' type='tns:NullableAttributeValueType' />
+				<xs:element name='rootDeviceName' type='tns:NullableAttributeValueType' />
+			    <xs:element name="blockDeviceMapping" type="tns:InstanceBlockDeviceMappingResponseType"/>
+		      </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- ModifyImageAttribute Definitions -->
+		  
+		  <xs:element name="ModifyImageAttribute"
+		              type="tns:ModifyImageAttributeType"/>
+		  
+		  <xs:complexType name="ModifyImageAttributeType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		      <xs:choice>
+		        <xs:element name="launchPermission" type="tns:LaunchPermissionOperationType"/>
+		        <xs:element name="productCodes" type="tns:ProductCodeListType" />
+				<xs:element name="description" type="tns:AttributeValueType" />
+		      </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="LaunchPermissionOperationType">
+		    <xs:choice>
+		      <xs:element name="add" type="tns:LaunchPermissionListType"/>
+		      <xs:element name="remove" type="tns:LaunchPermissionListType"/>
+		    </xs:choice>
+		  </xs:complexType>
+		
+		  <xs:complexType name="LaunchPermissionListType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:LaunchPermissionItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="LaunchPermissionItemType">
+		    <xs:choice>
+		      <xs:element name="userId" type="xs:string"/>
+		      <xs:element name="group" type="xs:string" />
+		    </xs:choice>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ProductCodeListType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:ProductCodeItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ProductCodeItemType">
+		    <xs:choice>
+		      <xs:element name="productCode" type="xs:string"/>
+		    </xs:choice>
+		  </xs:complexType>
+		
+		  <!-- ModifyImageAttributeResponse Definitions -->
+		
+		  <xs:element name="ModifyImageAttributeResponse"
+		              type="tns:ModifyImageAttributeResponseType" />
+		              
+		  <xs:complexType name="ModifyImageAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- ResetImageAttribute Definitions -->
+		  
+		  <xs:element name="ResetImageAttribute"
+		              type="tns:ResetImageAttributeType" />
+		             
+		  <xs:complexType name="ResetImageAttributeType" >
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		      <xs:group ref="tns:ResetImageAttributesGroup"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:group name="ResetImageAttributesGroup" >
+		    <xs:choice>
+		      <xs:element name="launchPermission" type="tns:EmptyElementType"/>
+		    </xs:choice>
+		  </xs:group>
+		  
+		  <xs:complexType name="EmptyElementType">
+		  </xs:complexType>
+		
+		  <!-- ResetImageAttributeResponse Definitions -->
+		
+		  <xs:element name="ResetImageAttributeResponse"
+		              type="tns:ResetImageAttributeResponseType" />
+		
+		  <xs:complexType name="ResetImageAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- DescribeImageAttribute Definitions -->
+		  
+		  <xs:element name="DescribeImageAttribute"
+		              type="tns:DescribeImageAttributeType" />
+		
+		  <xs:complexType name="DescribeImageAttributeType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string" />
+		      <xs:group ref="tns:DescribeImageAttributesGroup" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:group name="DescribeImageAttributesGroup" >
+		    <xs:choice>
+		      <xs:element name="launchPermission" type="tns:EmptyElementType"/>
+		      <xs:element name="productCodes" type="tns:EmptyElementType" />
+		      <xs:element name="kernel" type="tns:EmptyElementType" />
+		      <xs:element name="ramdisk" type="tns:EmptyElementType" />
+		      <xs:element name="blockDeviceMapping" type="tns:EmptyElementType" />
+			  <xs:element name="description" type="tns:EmptyElementType" />
+		    </xs:choice>
+		  </xs:group>
+		
+		  <!-- DescribeImageAttributeResponse Definitions -->
+		  
+		  <xs:element name="DescribeImageAttributeResponse"
+		              type="tns:DescribeImageAttributeResponseType" />
+		              
+		  <xs:complexType name="DescribeImageAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="imageId" type="xs:string" />
+		      <xs:choice>
+		        <xs:element name="launchPermission" type="tns:LaunchPermissionListType"/>
+		        <xs:element name="productCodes" type="tns:ProductCodeListType" />
+		        <xs:element name="kernel" type="tns:NullableAttributeValueType" />
+		        <xs:element name="ramdisk" type="tns:NullableAttributeValueType" />
+				<xs:element name="description" type="tns:NullableAttributeValueType" />
+		        <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"/>
+		      </xs:choice>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="NullableAttributeValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="NullableAttributeBooleanValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:boolean" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AttributeValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="AttributeBooleanValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- ConfirmProductInstance Definitions -->
+		  
+		  <xs:element name="ConfirmProductInstance" 
+		              type="tns:ConfirmProductInstanceType" />
+		
+		  <xs:complexType name="ConfirmProductInstanceType" >
+		    <xs:sequence>
+		      <xs:element name="productCode" type="xs:string" />
+		      <xs:element name="instanceId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="ProductCodesSetType" >
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:ProductCodesSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="ProductCodesSetItemType" >
+		    <xs:sequence>
+		      <xs:element name="productCode" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- ConfirmProductInstanceResponse Definitions -->
+		  
+		  <xs:element name="ConfirmProductInstanceResponse" 
+		              type="tns:ConfirmProductInstanceResponseType" />
+		  
+		  <xs:complexType name="ConfirmProductInstanceResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean" />
+		      <xs:element name="ownerId" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeAvailabilityZones Definitions -->
+		
+		  <xs:element name="DescribeAvailabilityZones" 
+		              type="tns:DescribeAvailabilityZonesType" />
+		
+		  <xs:complexType name="DescribeAvailabilityZonesType">
+		    <xs:sequence>
+		      <xs:element name="availabilityZoneSet" type="tns:DescribeAvailabilityZonesSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeAvailabilityZonesSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeAvailabilityZonesSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeAvailabilityZonesSetItemType">
+		    <xs:sequence>
+		      <xs:element name="zoneName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeAvailabilityZones Response definitions -->
+		
+		  <xs:element name="DescribeAvailabilityZonesResponse" 
+		              type="tns:DescribeAvailabilityZonesResponseType"/>
+		
+		  <xs:complexType name="DescribeAvailabilityZonesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="availabilityZoneInfo" type="tns:AvailabilityZoneSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AvailabilityZoneSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:AvailabilityZoneItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AvailabilityZoneMessageType">
+		    <xs:sequence>
+		      <xs:element name="message" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="AvailabilityZoneMessageSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:AvailabilityZoneMessageType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AvailabilityZoneItemType">
+		    <xs:sequence>
+		      <xs:element name="zoneName" type="xs:string"/>
+		      <xs:element name="zoneState" type="xs:string"/>
+		      <xs:element name="regionName" type="xs:string"/>
+		      <xs:element name="messageSet" type="tns:AvailabilityZoneMessageSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AllocateAddress definitions -->
+		  
+		  <xs:element name='AllocateAddress' type='tns:AllocateAddressType'/>
+		  <xs:complexType name='AllocateAddressType'/>
+		
+		  <!-- AllocateAddressResponse definitions -->
+		  
+		  <xs:element name='AllocateAddressResponse' type='tns:AllocateAddressResponseType'/>
+		  <xs:complexType name='AllocateAddressResponseType'>
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name='publicIp' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- ReleaseAddress definitions -->
+		  
+		  <xs:element name='ReleaseAddress' type='tns:ReleaseAddressType'/>
+		  <xs:complexType name='ReleaseAddressType'>
+		    <xs:sequence>
+		      <xs:element name='publicIp' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- ReleaseAddressResponse definitions -->
+		  
+		  <xs:element name='ReleaseAddressResponse' type='tns:ReleaseAddressResponseType'/>
+		  <xs:complexType name='ReleaseAddressResponseType'>
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name='return' type='xs:boolean'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeAddresses definitions -->
+		  
+		  <xs:element name='DescribeAddresses' type='tns:DescribeAddressesType'/>
+		  <xs:complexType name='DescribeAddressesType'>
+		    <xs:sequence>
+		      <xs:element name='publicIpsSet' type='tns:DescribeAddressesInfoType'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name='DescribeAddressesInfoType'>
+		    <xs:sequence>
+		      <xs:element name='item' maxOccurs='unbounded' minOccurs='0' type='tns:DescribeAddressesItemType'/>
+		    </xs:sequence>
+		
+		  </xs:complexType>
+		
+		  <xs:complexType name='DescribeAddressesItemType'>
+		    <xs:sequence>
+		      <xs:element name='publicIp' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeAddressesResponse definitions -->
+		
+		  <xs:element name='DescribeAddressesResponse' type='tns:DescribeAddressesResponseType'/>
+		  <xs:complexType name='DescribeAddressesResponseType'>
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name='addressesSet' type='tns:DescribeAddressesResponseInfoType'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name='DescribeAddressesResponseInfoType'>
+		    <xs:sequence>
+		      <xs:element name='item' maxOccurs='unbounded' minOccurs='0' type='tns:DescribeAddressesResponseItemType'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name='DescribeAddressesResponseItemType'>
+		    <xs:sequence>
+		      <xs:element name='publicIp' type='xs:string'/>
+		      <xs:element name='instanceId' minOccurs='0' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AssociateAddress definitions -->
+		  
+		  <xs:element name='AssociateAddress' type='tns:AssociateAddressType'/>
+		  <xs:complexType name='AssociateAddressType'>
+		    <xs:sequence>
+		      <xs:element name='publicIp' type='xs:string'/>
+		      <xs:element name='instanceId' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AssociateAddressResponse definitions -->
+		  
+		  <xs:element name='AssociateAddressResponse' type='tns:AssociateAddressResponseType'/>
+		  <xs:complexType name='AssociateAddressResponseType'>
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name='return' type='xs:boolean'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DisassociateAddress definitions -->
+		  
+		  <xs:element name='DisassociateAddress' type='tns:DisassociateAddressType'/>
+		  <xs:complexType name='DisassociateAddressType'>
+		    <xs:sequence>
+		      <xs:element name='publicIp' type='xs:string'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DisassociateAddressResponse definitions -->
+		  
+		  <xs:element name='DisassociateAddressResponse' type='tns:DisassociateAddressResponseType'/>
+		  <xs:complexType name='DisassociateAddressResponseType'>
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name='return' type='xs:boolean'/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateVolume request definitions -->
+		  
+		  <xs:element name="CreateVolume" type="tns:CreateVolumeType"/>
+		
+		  <xs:complexType name="CreateVolumeType">
+		    <xs:sequence>
+		      <xs:element name="size" type="xs:string" minOccurs="0"/>
+		      <xs:element name="snapshotId" type="xs:string" minOccurs="0"/>
+		      <xs:element name="availabilityZone" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateVolume response definitions -->
+		
+		  <xs:element name="CreateVolumeResponse" type="tns:CreateVolumeResponseType"/>
+		  
+		  <xs:complexType name="CreateVolumeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="size" type="xs:string"/>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:element name="availabilityZone" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="createTime" type="xs:dateTime"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteVolume request definitions -->
+		  
+		  <xs:element name="DeleteVolume" type="tns:DeleteVolumeType"/>
+		
+		  <xs:complexType name="DeleteVolumeType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteVolume response definitions -->
+		
+		  <xs:element name="DeleteVolumeResponse" type="tns:DeleteVolumeResponseType"/>
+		  
+		  <xs:complexType name="DeleteVolumeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeVolumes request definitions -->
+		  
+		  <xs:element name="DescribeVolumes" 
+		              type="tns:DescribeVolumesType" />
+		
+		  <xs:complexType name="DescribeVolumesType">
+		    <xs:sequence>
+		      <xs:element name="volumeSet" type="tns:DescribeVolumesSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeVolumesSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeVolumesSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeVolumesSetItemType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeVolumes response definitions -->
+		
+		  <xs:element name="DescribeVolumesResponse"
+		              type="tns:DescribeVolumesResponseType"/>
+		  
+		  <xs:complexType name="DescribeVolumesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="volumeSet" type="tns:DescribeVolumesSetResponseType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeVolumesSetResponseType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeVolumesSetItemResponseType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeVolumesSetItemResponseType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="size" type="xs:string"/>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:element name="availabilityZone" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="createTime" type="xs:dateTime"/>
+		      <xs:element name="attachmentSet" type="tns:AttachmentSetResponseType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AttachmentSetResponseType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:AttachmentSetItemResponseType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="AttachmentSetItemResponseType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="device" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="attachTime" type="xs:dateTime"/>
+			  <xs:element name="deleteOnTermination" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AttachVolume request definitions -->
+		  
+		  <xs:element name="AttachVolume" type="tns:AttachVolumeType"/>
+		
+		  <xs:complexType name="AttachVolumeType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="device" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- AttachVolume response definitions -->
+		
+		  <xs:element name="AttachVolumeResponse" type="tns:AttachVolumeResponseType"/>
+		  
+		  <xs:complexType name="AttachVolumeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="device" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="attachTime" type="xs:dateTime"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DetachVolume request definitions -->
+		  
+		  <xs:element name="DetachVolume" type="tns:DetachVolumeType"/>
+		
+		  <xs:complexType name="DetachVolumeType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="device" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="force" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DetachVolume response definitions -->
+		
+		  <xs:element name="DetachVolumeResponse" type="tns:DetachVolumeResponseType"/>
+		  
+		  <xs:complexType name="DetachVolumeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="device" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="attachTime" type="xs:dateTime"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateSnapshot request definitions -->
+		  
+		  <xs:element name="CreateSnapshot" type="tns:CreateSnapshotType"/>
+		
+		  <xs:complexType name="CreateSnapshotType">
+		    <xs:sequence>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="description" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CreateSnapshot response definitions -->
+		
+		  <xs:element name="CreateSnapshotResponse" type="tns:CreateSnapshotResponseType"/>
+		  
+		  <xs:complexType name="CreateSnapshotResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="startTime" type="xs:dateTime"/>
+		      <xs:element name="progress" type="xs:string"/>
+		      <xs:element name="ownerId" type="xs:string"/>
+		      <xs:element name="volumeSize" type="xs:string"/>
+		      <xs:element name="description" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteSnapshot request definitions -->
+		  
+		  <xs:element name="DeleteSnapshot" type="tns:DeleteSnapshotType"/>
+		
+		  <xs:complexType name="DeleteSnapshotType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DeleteSnapshot response definitions -->
+		
+		  <xs:element name="DeleteSnapshotResponse" type="tns:DeleteSnapshotResponseType"/>
+		  
+		  <xs:complexType name="DeleteSnapshotResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeSnapshots request definitions -->
+		  
+		  <xs:element name="DescribeSnapshots" 
+		              type="tns:DescribeSnapshotsType" />
+		
+		  <xs:complexType name="DescribeSnapshotsType">
+		    <xs:sequence>
+		      <xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetType"/>
+		      <xs:element name="ownersSet" type="tns:DescribeSnapshotsOwnersType" minOccurs="0"/>
+		      <xs:element name="restorableBySet" type="tns:DescribeSnapshotsRestorableBySetType" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeSnapshotsSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsSetItemType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsOwnersType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeSnapshotsOwnerType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsOwnerType">
+		    <xs:sequence>
+		      <xs:element name="owner" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsRestorableBySetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeSnapshotsRestorableByType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsRestorableByType">
+		    <xs:sequence>
+		      <xs:element name="user" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeSnapshots response definitions -->
+		
+		  <xs:element name="DescribeSnapshotsResponse"
+		              type="tns:DescribeSnapshotsResponseType"/>
+		  
+		  <xs:complexType name="DescribeSnapshotsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetResponseType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsSetResponseType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeSnapshotsSetItemResponseType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSnapshotsSetItemResponseType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:element name="volumeId" type="xs:string"/>
+		      <xs:element name="status" type="xs:string"/>
+		      <xs:element name="startTime" type="xs:dateTime"/>
+		      <xs:element name="progress" type="xs:string"/>
+		      <xs:element name="ownerId" type="xs:string"/>
+		      <xs:element name="volumeSize" type="xs:string"/>
+		      <xs:element name="description" type="xs:string" minOccurs="0"/>
+		      <xs:element name="ownerAlias" type="xs:string" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- ModifySnapshotAttribute Definitions -->
+		  
+		  <xs:element name="ModifySnapshotAttribute"
+		              type="tns:ModifySnapshotAttributeType"/>
+		  
+		  <xs:complexType name="ModifySnapshotAttributeType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:element name="createVolumePermission" type="tns:CreateVolumePermissionOperationType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="CreateVolumePermissionOperationType">
+		    <xs:choice>
+		      <xs:element name="add" type="tns:CreateVolumePermissionListType"/>
+		      <xs:element name="remove" type="tns:CreateVolumePermissionListType"/>
+		    </xs:choice>
+		  </xs:complexType>
+		
+		  <xs:complexType name="CreateVolumePermissionListType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:CreateVolumePermissionItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="CreateVolumePermissionItemType">
+		    <xs:choice>
+		      <xs:element name="userId" type="xs:string"/>
+		      <xs:element name="group" type="xs:string" />
+		    </xs:choice>
+		  </xs:complexType>
+		
+		  <!-- ModifySnapshotAttributeResponse Definitions -->
+		
+		  <xs:element name="ModifySnapshotAttributeResponse"
+		              type="tns:ModifySnapshotAttributeResponseType" />
+		              
+		  <xs:complexType name="ModifySnapshotAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- ResetSnapshotAttribute Definitions -->
+		  
+		  <xs:element name="ResetSnapshotAttribute"
+		              type="tns:ResetSnapshotAttributeType"/>
+		  
+		  <xs:complexType name="ResetSnapshotAttributeType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string"/>
+		      <xs:group ref="tns:ResetSnapshotAttributesGroup" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:group name="ResetSnapshotAttributesGroup" >
+		    <xs:choice>
+		      <xs:element name="createVolumePermission" type="tns:EmptyElementType"/>
+		    </xs:choice>
+		  </xs:group>
+		
+		  <!-- ResetSnapshotAttributeResponse Definitions -->
+		
+		  <xs:element name="ResetSnapshotAttributeResponse"
+		              type="tns:ResetSnapshotAttributeResponseType" />
+		              
+		  <xs:complexType name="ResetSnapshotAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="return" type="xs:boolean"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <!-- DescribeSnapshotAttribute Definitions -->
+		  
+		  <xs:element name="DescribeSnapshotAttribute"
+		              type="tns:DescribeSnapshotAttributeType" />
+		
+		  <xs:complexType name="DescribeSnapshotAttributeType">
+		    <xs:sequence>
+		      <xs:element name="snapshotId" type="xs:string" />
+		      <xs:group ref="tns:DescribeSnapshotAttributesGroup" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:group name="DescribeSnapshotAttributesGroup" >
+		    <xs:choice>
+		      <xs:element name="createVolumePermission" type="tns:EmptyElementType"/>
+		    </xs:choice>
+		  </xs:group>
+		
+		  <!-- DescribeSnapshotAttributeResponse Definitions -->
+		  
+		  <xs:element name="DescribeSnapshotAttributeResponse"
+		              type="tns:DescribeSnapshotAttributeResponseType" />
+		              
+		  <xs:complexType name="DescribeSnapshotAttributeResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="snapshotId" type="xs:string" />
+		      <xs:element name="createVolumePermission" type="tns:CreateVolumePermissionListType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- BundleInstance request definitions -->
+		  
+		  <xs:element name="BundleInstance" type="tns:BundleInstanceType"/>
+		
+		  <xs:complexType name="BundleInstanceType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="storage" type="tns:BundleInstanceTaskStorageType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="BundleInstanceTaskStorageType">
+		    <xs:sequence>
+		      <xs:element name="S3" type="tns:BundleInstanceS3StorageType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="BundleInstanceS3StorageType">
+		    <xs:sequence>
+		      <xs:element name="bucket" type="xs:string"/>
+		      <xs:element name="prefix" type="xs:string"/>
+		      <xs:element name="awsAccessKeyId" type="xs:string" minOccurs="0" />
+		      <xs:element name="uploadPolicy" type="xs:string" minOccurs="0" />
+		      <xs:element name="uploadPolicySignature" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- BundleInstance response definitions -->
+		
+		  <xs:element name="BundleInstanceResponse" type="tns:BundleInstanceResponseType"/>
+		  
+		  <xs:complexType name="BundleInstanceResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="bundleInstanceTask" type="tns:BundleInstanceTaskType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="BundleInstanceTaskType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string"/>
+		      <xs:element name="bundleId" type="xs:string"/>
+		      <xs:element name="state" type="xs:string"/>
+		      <xs:element name="startTime" type="xs:dateTime"/>
+		      <xs:element name="updateTime" type="xs:dateTime"/>
+		      <xs:element name="storage" type="tns:BundleInstanceTaskStorageType"/>
+		      <xs:element name="progress" type="xs:string" minOccurs="0"/>
+		      <xs:element name="error" type="tns:BundleInstanceTaskErrorType" minOccurs="0"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="BundleInstanceTaskErrorType">
+		    <xs:sequence>
+		      <xs:element name="code" type="xs:string"/>
+		      <xs:element name="message" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeBundleTasks request definitions -->
+		
+		  <xs:element name="DescribeBundleTasks" type="tns:DescribeBundleTasksType"/>
+		
+		  <xs:complexType name="DescribeBundleTasksType">
+		    <xs:sequence>
+		      <xs:element name="bundlesSet" type="tns:DescribeBundleTasksInfoType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeBundleTasksInfoType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeBundleTasksItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeBundleTasksItemType">
+		    <xs:sequence>
+		      <xs:element name="bundleId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeBundleTasks response definitions -->
+		
+		  <xs:element name="DescribeBundleTasksResponse" type="tns:DescribeBundleTasksResponseType"/>
+		  
+		  <xs:complexType name="DescribeBundleTasksResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="bundleInstanceTasksSet" type="tns:BundleInstanceTasksSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="BundleInstanceTasksSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:BundleInstanceTaskType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CancelBundleTask request definitions -->
+		  
+		  <xs:element name="CancelBundleTask" type="tns:CancelBundleTaskType"/>
+		
+		  <xs:complexType name="CancelBundleTaskType">
+		    <xs:sequence>
+		      <xs:element name="bundleId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- CancelBundleTask response definitions -->
+		
+		  <xs:element name="CancelBundleTaskResponse" type="tns:CancelBundleTaskResponseType"/>
+		  
+		  <xs:complexType name="CancelBundleTaskResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="bundleInstanceTask" type="tns:BundleInstanceTaskType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeRegions Definitions -->
+		
+		  <xs:element name="DescribeRegions" 
+		              type="tns:DescribeRegionsType" />
+		
+		  <xs:complexType name="DescribeRegionsType">
+		    <xs:sequence>
+		      <xs:element name="regionSet" type="tns:DescribeRegionsSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeRegionsSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeRegionsSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeRegionsSetItemType">
+		    <xs:sequence>
+		      <xs:element name="regionName" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeRegions Response definitions -->
+		
+		  <xs:element name="DescribeRegionsResponse" 
+		              type="tns:DescribeRegionsResponseType"/>
+		
+		  <xs:complexType name="DescribeRegionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>
+		      <xs:element name="regionInfo" type="tns:RegionSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RegionSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:RegionItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RegionItemType">
+		    <xs:sequence>
+		      <xs:element name="regionName" type="xs:string"/>
+		      <xs:element name="regionEndpoint" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeReservedInstancesOfferings definitions -->
+		  
+		  <xs:element name="DescribeReservedInstancesOfferings" 
+		              type="tns:DescribeReservedInstancesOfferingsType"/>
+		              
+		  <xs:complexType name="DescribeReservedInstancesOfferingsType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesOfferingsSet" type="tns:DescribeReservedInstancesOfferingsSetType" minOccurs="0"/>
+		      <xs:element name="instanceType" type="xs:string" minOccurs="0" />
+		      <xs:element name="availabilityZone" type="xs:string"  minOccurs="0" />
+		      <xs:element name="productDescription" type="xs:string"  minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		                
+		  <xs:complexType name="DescribeReservedInstancesOfferingsSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeReservedInstancesOfferingsSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesOfferingsSetItemType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesOfferingId" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeReservedInstancesOfferingsResponse definitions -->
+		
+		  <xs:element name="DescribeReservedInstancesOfferingsResponse" 
+		              type="tns:DescribeReservedInstancesOfferingsResponseType"/>
+		
+		  <xs:complexType name="DescribeReservedInstancesOfferingsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>    
+		      <xs:element name="reservedInstancesOfferingsSet" type="tns:DescribeReservedInstancesOfferingsResponseSetType"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="DescribeReservedInstancesOfferingsResponseSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeReservedInstancesOfferingsResponseSetItemType" minOccurs="0" maxOccurs="unbounded"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesOfferingsResponseSetItemType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesOfferingId" type="xs:string" />
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="availabilityZone" type="xs:string" />
+		      <xs:element name="duration" type="xs:long" />
+		      <xs:element name="fixedPrice" type="xs:double" />
+		      <xs:element name="usagePrice" type="xs:double" />
+		      <xs:element name="productDescription" type="xs:string" />  
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- PurchaseReservedInstancesOffering definitions -->
+		  <xs:element name="PurchaseReservedInstancesOffering" 
+		              type="tns:PurchaseReservedInstancesOfferingType"/>
+		
+		  <xs:complexType name="PurchaseReservedInstancesOfferingType">
+		  	<xs:sequence>
+		      <xs:element name="reservedInstancesOfferingId" type="xs:string" />
+		      <xs:element name="instanceCount" type="xs:int" />      
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- PurchaseReservedInstancesOfferingResponse definitions -->
+		  <xs:element name="PurchaseReservedInstancesOfferingResponse" 
+		              type="tns:PurchaseReservedInstancesOfferingResponseType"/>
+		
+		  <xs:complexType name="PurchaseReservedInstancesOfferingResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>    
+		      <xs:element name="reservedInstancesId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeReservedInstances definitions -->
+		  <xs:element name="DescribeReservedInstances" 
+		              type="tns:DescribeReservedInstancesType"/>
+		
+		  <xs:complexType name="DescribeReservedInstancesType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesSet" type="tns:DescribeReservedInstancesSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeReservedInstancesSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesSetItemType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- DescribeReservedInstancesResponse definitions -->
+		  <xs:element name="DescribeReservedInstancesResponse" 
+		              type="tns:DescribeReservedInstancesResponseType"/>
+		
+		  <xs:complexType name="DescribeReservedInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>    
+		      <xs:element name="reservedInstancesSet" type="tns:DescribeReservedInstancesResponseSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesResponseSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DescribeReservedInstancesResponseSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeReservedInstancesResponseSetItemType">
+		    <xs:sequence>
+		      <xs:element name="reservedInstancesId" type="xs:string" />
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="availabilityZone" type="xs:string" />
+		      <xs:element name="start" type="xs:dateTime" />
+		      <xs:element name="duration" type="xs:long" />
+		      <xs:element name="fixedPrice" type="xs:double" />
+		      <xs:element name="usagePrice" type="xs:double" />
+		      <xs:element name="instanceCount" type="xs:integer" />
+		      <xs:element name="productDescription" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		
+		  <!-- MonitorInstances / UnmonitorInstances definitions -->
+		  
+		  <xs:element name="MonitorInstances" 
+		              type="tns:MonitorInstancesType" />
+		  
+		  <xs:element name="UnmonitorInstances" 
+		              type="tns:MonitorInstancesType" />
+		              
+		  <xs:complexType name="MonitorInstancesType">
+		    <xs:sequence>
+		      <xs:element name="instancesSet" type="tns:MonitorInstancesSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="MonitorInstancesSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:MonitorInstancesSetItemType" minOccurs="1" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="MonitorInstancesSetItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  
+		  <!-- MonitorInstancesResponse definitions -->
+		  
+		  <xs:element name="MonitorInstancesResponse" 
+		              type="tns:MonitorInstancesResponseType"/>
+		
+		  <xs:element name="UnmonitorInstancesResponse" 
+		              type="tns:MonitorInstancesResponseType"/>
+		              
+		  <xs:complexType name="MonitorInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string"/>    
+		      <xs:element name="instancesSet" type="tns:MonitorInstancesResponseSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="MonitorInstancesResponseSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:MonitorInstancesResponseSetItemType" minOccurs="1" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="MonitorInstancesResponseSetItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceId" type="xs:string" />
+		      <xs:element name="monitoring" type="tns:InstanceMonitoringStateType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="InstanceMonitoringStateType">
+		    <xs:sequence>
+		      <xs:element name="state" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- VPC definitions -->
+		  
+		  <xs:complexType name="AttachmentType">
+		    <xs:sequence>
+		      <xs:element name="vpcId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="AttachmentSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:AttachmentType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnGatewayType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="availabilityZone" type="xs:string" />
+		      <xs:element name="attachments" type="tns:AttachmentSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CustomerGatewayType">
+		    <xs:sequence>
+		      <xs:element name="customerGatewayId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="ipAddress" type="xs:string" />
+		      <xs:element name="bgpAsn" type="xs:int" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnConnectionType">
+		    <xs:sequence>
+		      <xs:element name="vpnConnectionId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		      <xs:element name="customerGatewayConfiguration" type="xs:string" minOccurs="0" />
+		      <xs:element name="type" type="xs:string" minOccurs="0" />
+		      <xs:element name="customerGatewayId" type="xs:string" />
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpcType">
+		    <xs:sequence>
+		      <xs:element name="vpcId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" minOccurs="0" />
+		      <xs:element name="cidrBlock" type="xs:string" minOccurs="0" />
+		      <xs:element name="dhcpOptionsId" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="SubnetType">
+		    <xs:sequence>
+		      <xs:element name="subnetId" type="xs:string" />
+		      <xs:element name="state" type="xs:string" minOccurs="0" />
+		      <xs:element name="vpcId" type="xs:string" minOccurs="0" />
+		      <xs:element name="cidrBlock" type="xs:string" minOccurs="0" />
+		      <xs:element name="availableIpAddressCount" type="xs:int" minOccurs="0" />
+		      <xs:element name="availabilityZone" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CustomerGatewaySetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:CustomerGatewayType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnGatewaySetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpnGatewayType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnConnectionSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpnConnectionType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpcSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpcType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="SubnetSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SubnetType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CustomerGatewayIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="customerGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CustomerGatewayIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:CustomerGatewayIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnGatewayIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnGatewayIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpnGatewayIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnConnectionIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="vpnConnectionId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpnConnectionIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpnConnectionIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpcIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="vpcId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="VpcIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:VpcIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="SubnetIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="subnetId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="SubnetIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SubnetIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpOptionsIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="dhcpOptionsId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpOptionsIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DhcpOptionsIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpConfigurationItemSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DhcpConfigurationItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpOptionsSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DhcpOptionsType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpConfigurationItemType">
+		    <xs:sequence>
+		      <xs:element name="key" type="xs:string" />
+		      <xs:element name="valueSet" type="tns:DhcpValueSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpOptionsType">
+		    <xs:sequence>
+		      <xs:element name="dhcpOptionsId" type="xs:string" />
+		      <xs:element name="dhcpConfigurationSet" type="tns:DhcpConfigurationItemSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DhcpValueSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:DhcpValueType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="FilterType">
+		    <xs:sequence>
+		      <xs:element name="name" type="xs:string" />
+		      <xs:element name="valueSet" type="tns:ValueSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="FilterSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:FilterType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="ValueType">
+		    <xs:sequence>
+		      <xs:element name="value" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="ValueSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:ValueType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:element name="CreateCustomerGateway" type="tns:CreateCustomerGatewayType" />
+		  <xs:element name="CreateCustomerGatewayResponse" type="tns:CreateCustomerGatewayResponseType" />
+		  <xs:element name="DeleteCustomerGateway" type="tns:DeleteCustomerGatewayType" />
+		  <xs:element name="DeleteCustomerGatewayResponse" type="tns:DeleteCustomerGatewayResponseType" />
+		  <xs:element name="DescribeCustomerGateways" type="tns:DescribeCustomerGatewaysType" />
+		  <xs:element name="DescribeCustomerGatewaysResponse" type="tns:DescribeCustomerGatewaysResponseType" />
+		  <xs:element name="CreateVpnGateway" type="tns:CreateVpnGatewayType" />
+		  <xs:element name="CreateVpnGatewayResponse" type="tns:CreateVpnGatewayResponseType" />
+		  <xs:element name="DeleteVpnGateway" type="tns:DeleteVpnGatewayType" />
+		  <xs:element name="DeleteVpnGatewayResponse" type="tns:DeleteVpnGatewayResponseType" />
+		  <xs:element name="DescribeVpnGateways" type="tns:DescribeVpnGatewaysType" />
+		  <xs:element name="DescribeVpnGatewaysResponse" type="tns:DescribeVpnGatewaysResponseType" />
+		  <xs:element name="CreateVpnConnection" type="tns:CreateVpnConnectionType" />
+		  <xs:element name="CreateVpnConnectionResponse" type="tns:CreateVpnConnectionResponseType" />
+		  <xs:element name="DeleteVpnConnection" type="tns:DeleteVpnConnectionType" />
+		  <xs:element name="DeleteVpnConnectionResponse" type="tns:DeleteVpnConnectionResponseType" />
+		  <xs:element name="DescribeVpnConnections" type="tns:DescribeVpnConnectionsType" />
+		  <xs:element name="DescribeVpnConnectionsResponse" type="tns:DescribeVpnConnectionsResponseType" />
+		  <xs:element name="AttachVpnGateway" type="tns:AttachVpnGatewayType" />
+		  <xs:element name="AttachVpnGatewayResponse" type="tns:AttachVpnGatewayResponseType" />
+		  <xs:element name="DetachVpnGateway" type="tns:DetachVpnGatewayType" />
+		  <xs:element name="DetachVpnGatewayResponse" type="tns:DetachVpnGatewayResponseType" />
+		  <xs:element name="CreateVpc" type="tns:CreateVpcType" />
+		  <xs:element name="CreateVpcResponse" type="tns:CreateVpcResponseType" />
+		  <xs:element name="DescribeVpcs" type="tns:DescribeVpcsType" />
+		  <xs:element name="DescribeVpcsResponse" type="tns:DescribeVpcsResponseType" />
+		  <xs:element name="DeleteVpc" type="tns:DeleteVpcType" />
+		  <xs:element name="DeleteVpcResponse" type="tns:DeleteVpcResponseType" />
+		  <xs:element name="CreateSubnet" type="tns:CreateSubnetType" />
+		  <xs:element name="CreateSubnetResponse" type="tns:CreateSubnetResponseType" />
+		  <xs:element name="DescribeSubnets" type="tns:DescribeSubnetsType" />
+		  <xs:element name="DescribeSubnetsResponse" type="tns:DescribeSubnetsResponseType" />
+		  <xs:element name="DeleteSubnet" type="tns:DeleteSubnetType" />
+		  <xs:element name="DeleteSubnetResponse" type="tns:DeleteSubnetResponseType" />
+		  <xs:element name="DeleteDhcpOptions" type="tns:DeleteDhcpOptionsType" />
+		  <xs:element name="DeleteDhcpOptionsResponse" type="tns:DeleteDhcpOptionsResponseType" />
+		  <xs:element name="DescribeDhcpOptions" type="tns:DescribeDhcpOptionsType" />
+		  <xs:element name="DescribeDhcpOptionsResponse" type="tns:DescribeDhcpOptionsResponseType" />
+		  <xs:element name="CreateDhcpOptions" type="tns:CreateDhcpOptionsType" />
+		  <xs:element name="CreateDhcpOptionsResponse" type="tns:CreateDhcpOptionsResponseType" />
+		  <xs:element name="AssociateDhcpOptions" type="tns:AssociateDhcpOptionsType" />
+		  <xs:element name="AssociateDhcpOptionsResponse" type="tns:AssociateDhcpOptionsResponseType" />
+		  <xs:complexType name="CreateCustomerGatewayType">
+		    <xs:sequence>
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="ipAddress" type="xs:string" />
+		      <xs:element name="bgpAsn" type="xs:int" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateCustomerGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="customerGateway" type="tns:CustomerGatewayType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteCustomerGatewayType">
+		    <xs:sequence>
+		      <xs:element name="customerGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteCustomerGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeCustomerGatewaysType">
+		    <xs:sequence>
+		      <xs:element name="customerGatewaySet" type="tns:CustomerGatewayIdSetType" minOccurs="0" />
+		      <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeCustomerGatewaysResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="customerGatewaySet" type="tns:CustomerGatewaySetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpnGatewayType">
+		    <xs:sequence>
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="availabilityZone" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpnGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpnGateway" type="tns:VpnGatewayType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpnGatewayType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpnGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpnGatewaysType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewaySet" type="tns:VpnGatewayIdSetType" minOccurs="0" />
+		      <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpnGatewaysResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpnGatewaySet" type="tns:VpnGatewaySetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpnConnectionType">
+		    <xs:sequence>
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="customerGatewayId" type="xs:string" />
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpnConnectionResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpnConnection" type="tns:VpnConnectionType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpnConnectionType">
+		    <xs:sequence>
+		      <xs:element name="vpnConnectionId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpnConnectionResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpnConnectionsType">
+		    <xs:sequence>
+		      <xs:element name="vpnConnectionSet" type="tns:VpnConnectionIdSetType" minOccurs="0" />
+		      <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpnConnectionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpnConnectionSet" type="tns:VpnConnectionSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="AttachVpnGatewayType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		      <xs:element name="vpcId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="AttachVpnGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="attachment" type="tns:AttachmentType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DetachVpnGatewayType">
+		    <xs:sequence>
+		      <xs:element name="vpnGatewayId" type="xs:string" />
+		      <xs:element name="vpcId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DetachVpnGatewayResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpcType">
+		    <xs:sequence>
+		      <xs:element name="cidrBlock" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateVpcResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpc" type="tns:VpcType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpcsType">
+		    <xs:sequence>
+		      <xs:element name="vpcSet" type="tns:VpcIdSetType" minOccurs="0" />
+		      <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeVpcsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="vpcSet" type="tns:VpcSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpcType">
+		    <xs:sequence>
+		      <xs:element name="vpcId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteVpcResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateSubnetType">
+		    <xs:sequence>
+		      <xs:element name="vpcId" type="xs:string" />
+		      <xs:element name="cidrBlock" type="xs:string" />
+		      <xs:element name="availabilityZone" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateSubnetResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="subnet" type="tns:SubnetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeSubnetsType">
+		    <xs:sequence>
+		      <xs:element name="subnetSet" type="tns:SubnetIdSetType" minOccurs="0" />
+		      <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeSubnetsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="subnetSet" type="tns:SubnetSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteSubnetType">
+		    <xs:sequence>
+		      <xs:element name="subnetId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteSubnetResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteDhcpOptionsType">
+		    <xs:sequence>
+		      <xs:element name="dhcpOptionsId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DeleteDhcpOptionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeDhcpOptionsType">
+		    <xs:sequence>
+		      <xs:element name="dhcpOptionsSet" type="tns:DhcpOptionsIdSetType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="DescribeDhcpOptionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="dhcpOptionsSet" type="tns:DhcpOptionsSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateDhcpOptionsType">
+		    <xs:sequence>
+		      <xs:element name="dhcpConfigurationSet" type="tns:DhcpConfigurationItemSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="CreateDhcpOptionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="dhcpOptions" type="tns:DhcpOptionsType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="AssociateDhcpOptionsType">
+		    <xs:sequence>
+		      <xs:element name="dhcpOptionsId" type="xs:string" />
+		      <xs:element name="vpcId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  <xs:complexType name="AssociateDhcpOptionsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <!-- SpotInstances methods -->
+		
+		  <xs:element name="RequestSpotInstances" type="tns:RequestSpotInstancesType" />
+		  <xs:element name="RequestSpotInstancesResponse" type="tns:RequestSpotInstancesResponseType" />
+		  <xs:element name="DescribeSpotInstanceRequests" type="tns:DescribeSpotInstanceRequestsType" />	
+		  <xs:element name="DescribeSpotInstanceRequestsResponse" type="tns:DescribeSpotInstanceRequestsResponseType" />
+		  <xs:element name="CancelSpotInstanceRequests" type="tns:CancelSpotInstanceRequestsType" />
+		  <xs:element name="CancelSpotInstanceRequestsResponse" type="tns:CancelSpotInstanceRequestsResponseType" />
+		  <xs:element name="DescribeSpotPriceHistory" type="tns:DescribeSpotPriceHistoryType" />
+		  <xs:element name="DescribeSpotPriceHistoryResponse" type="tns:DescribeSpotPriceHistoryResponseType" />
+		
+		  <xs:element name="CreateSpotDatafeedSubscription" type="tns:CreateSpotDatafeedSubscriptionType" />
+		  <xs:element name="CreateSpotDatafeedSubscriptionResponse" type="tns:CreateSpotDatafeedSubscriptionResponseType" />
+		  <xs:element name="DescribeSpotDatafeedSubscription" type="tns:DescribeSpotDatafeedSubscriptionType" />
+		  <xs:element name="DescribeSpotDatafeedSubscriptionResponse" type="tns:DescribeSpotDatafeedSubscriptionResponseType" />
+		  <xs:element name="DeleteSpotDatafeedSubscription" type="tns:DeleteSpotDatafeedSubscriptionType" />
+		  <xs:element name="DeleteSpotDatafeedSubscriptionResponse" type="tns:DeleteSpotDatafeedSubscriptionResponseType" />
+		  
+		  <xs:complexType name="RequestSpotInstancesType">
+		    <xs:sequence>
+		      <xs:element name="spotPrice" type="xs:string" />
+		      <xs:element name="instanceCount" type="xs:integer" minOccurs="0" />
+		      <xs:element name="type" type="xs:string" minOccurs="0" />
+		      <xs:element name="validFrom" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="validUntil" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="launchGroup" type="xs:string" minOccurs="0" />
+		      <xs:element name="availabilityZoneGroup" type="xs:string" minOccurs="0" />
+		      <xs:element name="launchSpecification" type="tns:LaunchSpecificationRequestType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="LaunchSpecificationRequestType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		      <xs:element name="keyName" type="xs:string" minOccurs="0" />
+		      <xs:element name="groupSet" type="tns:GroupSetType"/>
+		      <xs:element name="userData" type="tns:UserDataType" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="addressingType" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="placement" type="tns:PlacementRequestType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="kernelId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="ramdiskId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="monitoring" type="tns:MonitoringInstanceType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="subnetId" type="xs:string" minOccurs="0" maxOccurs="1" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="LaunchSpecificationResponseType">
+		    <xs:sequence>
+		      <xs:element name="imageId" type="xs:string"/>
+		      <xs:element name="keyName" type="xs:string" minOccurs="0" />
+		      <xs:element name="groupSet" type="tns:GroupSetType"/>
+		      <xs:element name="addressingType" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="placement" type="tns:PlacementRequestType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="kernelId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="ramdiskId" type="xs:string" minOccurs="0" maxOccurs="1"/>
+		      <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="monitoring" type="tns:MonitoringInstanceType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="subnetId" type="xs:string" minOccurs="0" maxOccurs="1" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotInstanceRequestSetItemType">
+		    <xs:sequence>
+		      <xs:element name="spotInstanceRequestId" type="xs:string" />
+		      <xs:element name="spotPrice" type="xs:string" />
+		      <xs:element name="type" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		      <xs:element name="fault" type="tns:SpotInstanceStateFaultType" minOccurs="0" />
+		      <xs:element name="validFrom" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="validUntil" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="launchGroup" type="xs:string" minOccurs="0" />
+		      <xs:element name="availabilityZoneGroup" type="xs:string" minOccurs="0" />
+		      <xs:element name="launchSpecification" type="tns:LaunchSpecificationResponseType" minOccurs="0" />
+		      <xs:element name="instanceId" type="xs:string" minOccurs="0" />
+		      <xs:element name="createTime" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="productDescription" type="xs:string" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotInstanceStateFaultType">
+		    <xs:sequence>
+		      <xs:element name="code" type="xs:string"/>
+		      <xs:element name="message" type="xs:string"/>
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotInstanceRequestSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SpotInstanceRequestSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="RequestSpotInstancesResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotInstanceRequestSet" type="tns:SpotInstanceRequestSetType" minOccurs="1" maxOccurs="1" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSpotInstanceRequestsType">
+		    <xs:sequence>
+		      <xs:element name="spotInstanceRequestIdSet" type="tns:SpotInstanceRequestIdSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotInstanceRequestIdSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SpotInstanceRequestIdSetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+					
+		  <xs:complexType name="SpotInstanceRequestIdSetItemType">
+		    <xs:sequence>
+		      <xs:element name="spotInstanceRequestId" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSpotInstanceRequestsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotInstanceRequestSet" type="tns:SpotInstanceRequestSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="CancelSpotInstanceRequestsType">
+		    <xs:sequence>
+		      <xs:element name="spotInstanceRequestIdSet" type="tns:SpotInstanceRequestIdSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="CancelSpotInstanceRequestsResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotInstanceRequestSet" type="tns:CancelSpotInstanceRequestsResponseSetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="CancelSpotInstanceRequestsResponseSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:CancelSpotInstanceRequestsResponseSetItemType" minOccurs="1" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="CancelSpotInstanceRequestsResponseSetItemType">
+			  <xs:sequence>
+			    <xs:element name="spotInstanceRequestId" type="xs:string" />
+			    <xs:element name="state" type="xs:string" />
+			  </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSpotPriceHistoryType">
+		    <xs:sequence>
+		      <xs:element name="startTime" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="endTime" type="xs:dateTime" minOccurs="0" />
+		      <xs:element name="instanceTypeSet" type="tns:InstanceTypeSetType" minOccurs="0" maxOccurs="1" />
+		      <xs:element name="productDescriptionSet" type="tns:ProductDescriptionSetType" minOccurs="0" maxOccurs="1" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="InstanceTypeSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:InstanceTypeSetItemType" minOccurs="1" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="InstanceTypeSetItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceType" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ProductDescriptionSetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:ProductDescriptionSetItemType" minOccurs="1" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="ProductDescriptionSetItemType">
+		    <xs:sequence>
+		      <xs:element name="productDescription" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSpotPriceHistoryResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotPriceHistorySet" type="tns:SpotPriceHistorySetType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotPriceHistorySetType">
+		    <xs:sequence>
+		      <xs:element name="item" type="tns:SpotPriceHistorySetItemType" minOccurs="0" maxOccurs="unbounded" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="SpotPriceHistorySetItemType">
+		    <xs:sequence>
+		      <xs:element name="instanceType" type="xs:string" />
+		      <xs:element name="productDescription" type="xs:string" />
+		      <xs:element name="spotPrice" type="xs:string" />
+		      <xs:element name="timestamp" type="xs:dateTime" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="SpotDatafeedSubscriptionType">
+		    <xs:sequence>
+		      <xs:element name="ownerId" type="xs:string" />
+		      <xs:element name="bucket" type="xs:string" />
+		      <xs:element name="prefix" type="xs:string" />
+		      <xs:element name="state" type="xs:string" />
+		      <xs:element name="fault" type="tns:SpotInstanceStateFaultType" minOccurs="0" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="CreateSpotDatafeedSubscriptionType">
+		    <xs:sequence>
+		      <xs:element name="bucket" type="xs:string" />
+		      <xs:element name="prefix" type="xs:string" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="CreateSpotDatafeedSubscriptionResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotDatafeedSubscription" type="tns:SpotDatafeedSubscriptionType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		
+		  <xs:complexType name="DescribeSpotDatafeedSubscriptionType" />
+		
+		  <xs:complexType name="DescribeSpotDatafeedSubscriptionResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="spotDatafeedSubscription" type="tns:SpotDatafeedSubscriptionType" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		  <xs:complexType name="DeleteSpotDatafeedSubscriptionType" />
+		  
+		  <xs:complexType name="DeleteSpotDatafeedSubscriptionResponseType">
+		    <xs:sequence>
+		      <xs:element name="requestId" type="xs:string" />
+		      <xs:element name="return" type="xs:boolean" />
+		    </xs:sequence>
+		  </xs:complexType>
+		  
+		</xs:schema>
+  </types>
+
+  <!-- message definitions -->
+
+  <message name="CreateImageRequestMsg">
+    <part name="CreateImageRequestMsgReq" element="tns:CreateImage" />
+  </message>
+
+  <message name="CreateImageResponseMsg">
+    <part name="CreateImageResponseMsgResp" element="tns:CreateImageResponse" />
+  </message>
+  
+  <message name="RegisterImageRequestMsg">
+    <part name="RegisterImageRequestMsgReq" element="tns:RegisterImage" />
+  </message>
+
+  <message name="RegisterImageResponseMsg">
+    <part name="RegisterImageResponseMsgResp" element="tns:RegisterImageResponse" />
+  </message>
+
+  <message name="DeregisterImageRequestMsg">
+    <part name="DeregisterImageRequestMsgReq" element="tns:DeregisterImage" />
+  </message>
+
+  <message name="DeregisterImageResponseMsg">
+    <part name="DeregisterImageResponseMsgResp" element="tns:DeregisterImageResponse" />
+  </message>
+
+  <message name="RunInstancesRequestMsg">
+    <part name="RunInstancesRequestMsgReq" element="tns:RunInstances" />
+  </message>
+
+  <message name="RunInstancesResponseMsg">
+    <part name="RunInstancesResponseMsgResp" element="tns:RunInstancesResponse" />
+  </message>
+
+  <message name="CreateKeyPairRequestMsg">
+    <part name="CreateKeyPairRequestMsgReq" element="tns:CreateKeyPair" />
+  </message>
+
+  <message name="CreateKeyPairResponseMsg">
+    <part name="CreateKeyPairResponseMsgResp" element="tns:CreateKeyPairResponse" />
+  </message>
+
+  <message name="DescribeKeyPairsRequestMsg">
+    <part name="DescribeKeyPairsRequestMsgReq" element="tns:DescribeKeyPairs" />
+  </message>
+
+  <message name="DescribeKeyPairsResponseMsg">
+    <part name="DescribeKeyPairsResponseMsgResp" element="tns:DescribeKeyPairsResponse" />
+  </message>
+
+  <message name="DeleteKeyPairRequestMsg">
+    <part name="DeleteKeyPairRequestMsgReq" element="tns:DeleteKeyPair" />
+  </message>
+
+  <message name="DeleteKeyPairResponseMsg">
+    <part name="DeleteKeyPairResponseMsgResp" element="tns:DeleteKeyPairResponse" />
+  </message>
+
+  <message name="GetConsoleOutputRequestMsg">
+    <part name="GetConsoleOutputRequestMsgReq" element="tns:GetConsoleOutput" />
+  </message>
+  
+  <message name="GetConsoleOutputResponseMsg">
+    <part name="GetConsoleOutputResponseMsgResp" element="tns:GetConsoleOutputResponse" />
+  </message>
+
+  <message name="GetPasswordDataRequestMsg">
+    <part name="GetPasswordDataRequestMsgReq" element="tns:GetPasswordData" />
+  </message>
+  
+  <message name="GetPasswordDataResponseMsg">
+    <part name="GetPasswordDataResponseMsgResp" element="tns:GetPasswordDataResponse" />
+  </message>
+
+  <message name="TerminateInstancesRequestMsg">
+    <part name="TerminateInstancesRequestMsgReq" element="tns:TerminateInstances" />
+  </message>
+  
+  <message name="TerminateInstancesResponseMsg">
+    <part name="TerminateInstancesResponseMsgResp" element="tns:TerminateInstancesResponse" />
+  </message>
+
+  
+  <message name="StopInstancesRequestMsg">
+    <part name="StopInstancesRequestMsgReq" element="tns:StopInstances" />
+  </message>
+  
+  <message name="StopInstancesResponseMsg">
+    <part name="StopInstancesResponseMsgResp" element="tns:StopInstancesResponse" />
+  </message>
+
+  <message name="StartInstancesRequestMsg">
+    <part name="StartInstancesRequestMsgReq" element="tns:StartInstances" />
+  </message>
+  
+  <message name="StartInstancesResponseMsg">
+    <part name="StartInstancesResponseMsgResp" element="tns:StartInstancesResponse" />
+  </message>
+
+  <message name="RebootInstancesRequestMsg">
+    <part name="RebootInstancesRequestMsgReq" element="tns:RebootInstances" />
+  </message>
+
+  <message name="RebootInstancesResponseMsg">
+    <part name="RebootInstancesRequestMsgResp" element="tns:RebootInstancesResponse" />
+  </message>
+
+  <message name="DescribeInstancesRequestMsg">
+    <part name="DescribeInstancesRequestMsgReq" element="tns:DescribeInstances" />
+  </message>
+
+  <message name="DescribeInstancesResponseMsg">
+    <part name="DescribeInstancesRequestMsgResp" element="tns:DescribeInstancesResponse" />
+  </message>
+
+  <message name="DescribeImagesRequestMsg">
+    <part name="DescribeImagesRequestMsgReq" element="tns:DescribeImages" />
+  </message>
+
+  <message name="DescribeImagesResponseMsg">
+    <part name="DescribeImagesRequestMsgResp" element="tns:DescribeImagesResponse" />
+  </message>
+
+  <message name="CreateSecurityGroupRequestMsg">
+    <part name="CreateSecurityGroupRequestMsgReq" element="tns:CreateSecurityGroup" />
+  </message>
+
+  <message name="CreateSecurityGroupResponseMsg">
+    <part name="CreateSecurityGroupRequestMsgResp" element="tns:CreateSecurityGroupResponse" />
+  </message>
+
+  <message name="DeleteSecurityGroupRequestMsg">
+    <part name="DeleteSecurityGroupRequestMsgReq" element="tns:DeleteSecurityGroup" />
+  </message>
+
+  <message name="DeleteSecurityGroupResponseMsg">
+    <part name="DeleteSecurityGroupRequestMsgResp" element="tns:DeleteSecurityGroupResponse" />
+  </message>
+
+  <message name="DescribeSecurityGroupsRequestMsg">
+    <part name="DescribeSecurityGroupsRequestMsgReq" element="tns:DescribeSecurityGroups" />
+  </message>
+
+  <message name="DescribeSecurityGroupsResponseMsg">
+    <part name="DescribeSecurityGroupsRequestMsgResp" element="tns:DescribeSecurityGroupsResponse" />
+  </message>
+
+  <message name="AuthorizeSecurityGroupIngressRequestMsg">
+    <part name="AuthorizeSecurityGroupIngressRequestMsgReq" element="tns:AuthorizeSecurityGroupIngress" />
+  </message>
+
+  <message name="AuthorizeSecurityGroupIngressResponseMsg">
+    <part name="AuthorizeSecurityGroupIngressRequestMsgResp" element="tns:AuthorizeSecurityGroupIngressResponse" />
+  </message>
+
+  <message name="RevokeSecurityGroupIngressRequestMsg">
+    <part name="RevokeSecurityGroupIngressRequestMsgReq" element="tns:RevokeSecurityGroupIngress" />
+  </message>
+
+  <message name="RevokeSecurityGroupIngressResponseMsg">
+    <part name="RevokeSecurityGroupIngressRequestMsgResp" element="tns:RevokeSecurityGroupIngressResponse" />
+  </message>
+
+ <message name="ModifyInstanceAttributeRequestMsg">
+    <part name="ModifyInstanceAttributeRequestMsgReq" element="tns:ModifyInstanceAttribute" />
+  </message>
+  
+  <message name="ModifyInstanceAttributeResponseMsg">
+    <part name="ModifyInstanceAttributeRequestMsgResp" element="tns:ModifyInstanceAttributeResponse" />
+  </message>
+  
+  <message name="ResetInstanceAttributeRequestMsg">
+    <part name="ResetInstanceAttributeRequestMsgReq" element="tns:ResetInstanceAttribute" />
+  </message>
+  
+  <message name="ResetInstanceAttributeResponseMsg">
+    <part name="ResetInstanceAttributeRequestMsgResp" element="tns:ResetInstanceAttributeResponse" />
+  </message>
+  
+  <message name="DescribeInstanceAttributeRequestMsg">
+    <part name="DescribeInstanceAttributeRequestMsgReq" element="tns:DescribeInstanceAttribute" />
+  </message>
+  
+  <message name="DescribeInstanceAttributeResponseMsg">
+    <part name="DescribeInstanceAttributeRequestMsgResp" element="tns:DescribeInstanceAttributeResponse"/>
+  </message>
+
+  <message name="ModifyImageAttributeRequestMsg">
+    <part name="ModifyImageAttributeRequestMsgReq" element="tns:ModifyImageAttribute" />
+  </message>
+  
+  <message name="ModifyImageAttributeResponseMsg">
+    <part name="ModifyImageAttributeRequestMsgResp" element="tns:ModifyImageAttributeResponse" />
+  </message>
+  
+  <message name="ResetImageAttributeRequestMsg">
+    <part name="ResetImageAttributeRequestMsgReq" element="tns:ResetImageAttribute" />
+  </message>
+  
+  <message name="ResetImageAttributeResponseMsg">
+    <part name="ResetImageAttributeRequestMsgResp" element="tns:ResetImageAttributeResponse" />
+  </message>
+  
+  <message name="DescribeImageAttributeRequestMsg">
+    <part name="DescribeImageAttributeRequestMsgReq" element="tns:DescribeImageAttribute" />
+  </message>
+  
+  <message name="DescribeImageAttributeResponseMsg">
+    <part name="DescribeImageAttributeRequestMsgResp" element="tns:DescribeImageAttributeResponse"/>
+  </message>
+
+  <message name="ConfirmProductInstanceRequestMsg">
+    <part name="ConfirmProductInstanceRequestMsgReq" element="tns:ConfirmProductInstance"/>
+  </message>
+
+  <message name="ConfirmProductInstanceResponseMsg">
+    <part name="ConfirmProductInstanceRequestMsgResp" element="tns:ConfirmProductInstanceResponse"/>
+  </message>
+
+  <message name="DescribeAvailabilityZonesRequestMsg">
+    <part name="DescribeAvailabilityZonesRequestMsgReq" element="tns:DescribeAvailabilityZones"/>
+  </message>
+
+  <message name="DescribeAvailabilityZonesResponseMsg">
+    <part name="DescribeAvailabilityZonesRequestMsgResp" element="tns:DescribeAvailabilityZonesResponse"/>
+  </message>
+
+  <message name="DescribeRegionsRequestMsg">
+    <part name="DescribeRegionsRequestMsgReq" element="tns:DescribeRegions"/>
+  </message>
+
+  <message name="DescribeRegionsResponseMsg">
+    <part name="DescribeRegionsRequestMsgResp" element="tns:DescribeRegionsResponse"/>
+  </message>
+
+  <message name='AllocateAddressRequestMsg'>
+    <part name='AllocateAddressRequestMsgReq' element='tns:AllocateAddress'/>
+  </message>
+  
+  <message name='AllocateAddressResponseMsg'>
+    <part name='AllocateAddressResponseMsgResp' element='tns:AllocateAddressResponse'/>
+  </message>
+
+  <message name='ReleaseAddressRequestMsg'>
+    <part name='ReleaseAddressRequestMsgReq' element='tns:ReleaseAddress'/>
+  </message>
+
+  <message name='ReleaseAddressResponseMsg'>
+    <part name='ReleaseAddressResponseMsgResp' element='tns:ReleaseAddressResponse'/>
+  </message>
+
+  <message name='DescribeAddressesRequestMsg'>
+    <part name='DescribeAddressesRequestMsgReq' element='tns:DescribeAddresses'/>
+  </message>
+
+  <message name='DescribeAddressesResponseMsg'>
+    <part name='DescribeAddressesResponseMsgResp' element='tns:DescribeAddressesResponse'/>
+  </message>
+
+  <message name='AssociateAddressRequestMsg'>
+    <part name='AssociateAddressRequestMsgReq' element='tns:AssociateAddress'/>
+  </message>
+
+  <message name='AssociateAddressResponseMsg'>
+    <part name='AssociateAddressResponseMsgResp' element='tns:AssociateAddressResponse'/>
+  </message>
+
+  <message name='DisassociateAddressRequestMsg'>
+    <part name='DisassociateAddressRequestMsgReq' element='tns:DisassociateAddress'/>
+  </message>
+
+  <message name='DisassociateAddressResponseMsg'>
+    <part name='DisassociateAddressResponseMsgResp' element='tns:DisassociateAddressResponse'/>
+  </message>
+
+  <message name="CreateVolumeRequestMsg">
+    <part name="CreateVolumeRequestMsgReq" element="tns:CreateVolume"/>
+  </message>
+
+  <message name="CreateVolumeResponseMsg">
+    <part name="CreateVolumeRequestMsgResp" element="tns:CreateVolumeResponse"/>
+  </message>
+
+  <message name="DeleteVolumeRequestMsg">
+    <part name="DeleteVolumeRequestMsgReq" element="tns:DeleteVolume"/>
+  </message>
+
+  <message name="DeleteVolumeResponseMsg">
+    <part name="DeleteVolumeRequestMsgResp" element="tns:DeleteVolumeResponse"/>
+  </message>
+
+  <message name="DescribeVolumesRequestMsg">
+    <part name="DescribeVolumesRequestMsgReq" element="tns:DescribeVolumes"/>
+  </message>
+
+  <message name="DescribeVolumesResponseMsg">
+    <part name="DescribeVolumesRequestMsgResp" element="tns:DescribeVolumesResponse"/>
+  </message>
+
+  <message name="AttachVolumeRequestMsg">
+    <part name="AttachVolumeRequestMsgReq" element="tns:AttachVolume"/>
+  </message>
+
+  <message name="AttachVolumeResponseMsg">
+    <part name="AttachVolumeResponseMsgResp" element="tns:AttachVolumeResponse"/>
+  </message>
+
+  <message name="DetachVolumeRequestMsg">
+    <part name="DetachVolumeRequestMsgReq" element="tns:DetachVolume"/>
+  </message>
+
+  <message name="DetachVolumeResponseMsg">
+    <part name="DetachVolumeResponseMsgResp" element="tns:DetachVolumeResponse"/>
+  </message>
+
+  <message name="CreateSnapshotRequestMsg">
+    <part name="CreateSnapshotRequestMsgReq" element="tns:CreateSnapshot"/>
+  </message>
+
+  <message name="CreateSnapshotResponseMsg">
+    <part name="CreateSnapshotRequestMsgResp" element="tns:CreateSnapshotResponse"/>
+  </message>
+
+  <message name="DeleteSnapshotRequestMsg">
+    <part name="DeleteSnapshotRequestMsgReq" element="tns:DeleteSnapshot"/>
+  </message>
+
+  <message name="DeleteSnapshotResponseMsg">
+    <part name="DeleteSnapshotRequestMsgResp" element="tns:DeleteSnapshotResponse"/>
+  </message>
+
+  <message name="DescribeSnapshotsRequestMsg">
+    <part name="DescribeSnapshotsRequestMsgReq" element="tns:DescribeSnapshots"/>
+  </message>
+
+  <message name="DescribeSnapshotsResponseMsg">
+    <part name="DescribeSnapshotsRequestMsgResp" element="tns:DescribeSnapshotsResponse"/>
+  </message>
+
+  <message name="ModifySnapshotAttributeRequestMsg">
+    <part name="ModifySnapshotAttributeRequestMsgReq" element="tns:ModifySnapshotAttribute"/>
+  </message>
+
+  <message name="ModifySnapshotAttributeResponseMsg">
+    <part name="ModifySnapshotAttributeResponseMsgResp" element="tns:ModifySnapshotAttributeResponse"/>
+  </message>
+
+  <message name="ResetSnapshotAttributeRequestMsg">
+    <part name="ResetSnapshotAttributeRequestMsgReq" element="tns:ResetSnapshotAttribute"/>
+  </message>
+
+  <message name="ResetSnapshotAttributeResponseMsg">
+    <part name="ResetSnapshotAttributeResponseMsgResp" element="tns:ResetSnapshotAttributeResponse"/>
+  </message>
+
+  <message name="DescribeSnapshotAttributeRequestMsg">
+    <part name="DescribeSnapshotAttributeRequestMsgReq" element="tns:DescribeSnapshotAttribute"/>
+  </message>
+
+  <message name="DescribeSnapshotAttributeResponseMsg">
+    <part name="DescribeSnapshotAttributeResponseMsgResp" element="tns:DescribeSnapshotAttributeResponse"/>
+  </message>
+
+  <message name="BundleInstanceRequestMsg">
+    <part name="BundleInstanceRequestMsgReq" element="tns:BundleInstance" />
+  </message>
+
+  <message name="BundleInstanceResponseMsg">
+    <part name="BundleInstanceResponseMsgResp" element="tns:BundleInstanceResponse" />
+  </message>
+
+  <message name="DescribeBundleTasksRequestMsg">
+    <part name="DescribeBundleTasksRequestMsgReq" element="tns:DescribeBundleTasks" />
+  </message>
+
+  <message name="DescribeBundleTasksResponseMsg">
+    <part name="DescribeBundleTasksResponseMsgResp" element="tns:DescribeBundleTasksResponse" />
+  </message>
+
+  <message name="CancelBundleTaskRequestMsg">
+    <part name="CancelBundleTaskRequestMsgReq" element="tns:CancelBundleTask" />
+  </message>
+
+  <message name="CancelBundleTaskResponseMsg">
+    <part name="CancelBundleTaskResponseMsgResp" element="tns:CancelBundleTaskResponse" />
+  </message>
+
+  <message name="DescribeReservedInstancesOfferingsRequestMsg">
+    <part name="DescribeReservedInstancesOfferingsRequestMsgReq" element="tns:DescribeReservedInstancesOfferings" />
+  </message>
+
+  <message name="DescribeReservedInstancesOfferingsResponseMsg">
+    <part name="DescribeReservedInstancesOfferingsResponseMsgResp" element="tns:DescribeReservedInstancesOfferingsResponse" />
+  </message>
+
+  <message name="PurchaseReservedInstancesOfferingRequestMsg">
+    <part name="PurchaseReservedInstancesOfferingRequestMsgReq" element="tns:PurchaseReservedInstancesOffering" />
+  </message>
+
+  <message name="PurchaseReservedInstancesOfferingResponseMsg">
+    <part name="PurchaseReservedInstancesOfferingResponseMsgResp" element="tns:PurchaseReservedInstancesOfferingResponse" />
+  </message>
+
+  <message name="DescribeReservedInstancesRequestMsg">
+    <part name="DescribeReservedInstancesRequestMsgReq" element="tns:DescribeReservedInstances" />
+  </message>
+
+  <message name="DescribeReservedInstancesResponseMsg">
+    <part name="DescribeReservedInstancesResponseMsgResp" element="tns:DescribeReservedInstancesResponse" />
+  </message>
+
+  <message name="MonitorInstancesRequestMsg">
+    <part name="MonitorInstancesRequestMsgReq" element="tns:MonitorInstances" />
+  </message>
+  
+  <message name="MonitorInstancesResponseMsg">
+    <part name="MonitorInstancesResponseMsgResp" element="tns:MonitorInstancesResponse" />
+  </message>
+  
+  <message name="UnmonitorInstancesRequestMsg">
+    <part name="UnmonitorInstancesRequestMsgReq" element="tns:UnmonitorInstances" />
+  </message>
+  
+  <message name="UnmonitorInstancesResponseMsg">
+    <part name="UnmonitorInstancesResponseMsgResp" element="tns:UnmonitorInstancesResponse" />
+  </message>
+
+  <message name="CreateCustomerGatewayRequestMsg">
+    <part name="CreateCustomerGatewayRequestMsgReq" element="tns:CreateCustomerGateway" />
+  </message>
+  
+  <message name="CreateCustomerGatewayResponseMsg">
+    <part name="CreateCustomerGatewayResponseMsgResp" element="tns:CreateCustomerGatewayResponse" />
+  </message>
+  
+  <message name="DeleteCustomerGatewayRequestMsg">
+    <part name="DeleteCustomerGatewayRequestMsgReq" element="tns:DeleteCustomerGateway" />
+  </message>
+  
+  <message name="DeleteCustomerGatewayResponseMsg">
+    <part name="DeleteCustomerGatewayResponseMsgResp" element="tns:DeleteCustomerGatewayResponse" />
+  </message>
+  
+  <message name="DescribeCustomerGatewaysRequestMsg">
+    <part name="DescribeCustomerGatewaysRequestMsgReq" element="tns:DescribeCustomerGateways" />
+  </message>
+  
+  <message name="DescribeCustomerGatewaysResponseMsg">
+    <part name="DescribeCustomerGatewaysResponseMsgResp" element="tns:DescribeCustomerGatewaysResponse" />
+  </message>
+  
+  <message name="CreateVpnGatewayRequestMsg">
+    <part name="CreateVpnGatewayRequestMsgReq" element="tns:CreateVpnGateway" />
+  </message>
+  
+  <message name="CreateVpnGatewayResponseMsg">
+    <part name="CreateVpnGatewayResponseMsgResp" element="tns:CreateVpnGatewayResponse" />
+  </message>
+  
+  <message name="DeleteVpnGatewayRequestMsg">
+    <part name="DeleteVpnGatewayRequestMsgReq" element="tns:DeleteVpnGateway" />
+  </message>
+  
+  <message name="DeleteVpnGatewayResponseMsg">
+    <part name="DeleteVpnGatewayResponseMsgResp" element="tns:DeleteVpnGatewayResponse" />
+  </message>
+  
+  <message name="DescribeVpnGatewaysRequestMsg">
+    <part name="DescribeVpnGatewaysRequestMsgReq" element="tns:DescribeVpnGateways" />
+  </message>
+  
+  <message name="DescribeVpnGatewaysResponseMsg">
+    <part name="DescribeVpnGatewaysResponseMsgResp" element="tns:DescribeVpnGatewaysResponse" />
+  </message>
+  
+  <message name="CreateVpnConnectionRequestMsg">
+    <part name="CreateVpnConnectionRequestMsgReq" element="tns:CreateVpnConnection" />
+  </message>
+  
+  <message name="CreateVpnConnectionResponseMsg">
+    <part name="CreateVpnConnectionResponseMsgResp" element="tns:CreateVpnConnectionResponse" />
+  </message>
+  
+  <message name="DeleteVpnConnectionRequestMsg">
+    <part name="DeleteVpnConnectionRequestMsgReq" element="tns:DeleteVpnConnection" />
+  </message>
+  
+  <message name="DeleteVpnConnectionResponseMsg">
+    <part name="DeleteVpnConnectionResponseMsgResp" element="tns:DeleteVpnConnectionResponse" />
+  </message>
+  
+  <message name="DescribeVpnConnectionsRequestMsg">
+    <part name="DescribeVpnConnectionsRequestMsgReq" element="tns:DescribeVpnConnections" />
+  </message>
+  
+  <message name="DescribeVpnConnectionsResponseMsg">
+    <part name="DescribeVpnConnectionsResponseMsgResp" element="tns:DescribeVpnConnectionsResponse" />
+  </message>
+  
+  <message name="AttachVpnGatewayRequestMsg">
+    <part name="AttachVpnGatewayRequestMsgReq" element="tns:AttachVpnGateway" />
+  </message>
+  
+  <message name="AttachVpnGatewayResponseMsg">
+    <part name="AttachVpnGatewayResponseMsgResp" element="tns:AttachVpnGatewayResponse" />
+  </message>
+  
+  <message name="DetachVpnGatewayRequestMsg">
+    <part name="DetachVpnGatewayRequestMsgReq" element="tns:DetachVpnGateway" />
+  </message>
+  
+  <message name="DetachVpnGatewayResponseMsg">
+    <part name="DetachVpnGatewayResponseMsgResp" element="tns:DetachVpnGatewayResponse" />
+  </message>
+  
+  <message name="CreateVpcRequestMsg">
+    <part name="CreateVpcRequestMsgReq" element="tns:CreateVpc" />
+  </message>
+  
+  <message name="CreateVpcResponseMsg">
+    <part name="CreateVpcResponseMsgResp" element="tns:CreateVpcResponse" />
+  </message>
+  
+  <message name="DeleteVpcRequestMsg">
+    <part name="DeleteVpcRequestMsgReq" element="tns:DeleteVpc" />
+  </message>
+  
+  <message name="DeleteVpcResponseMsg">
+    <part name="DeleteVpcResponseMsgResp" element="tns:DeleteVpcResponse" />
+  </message>
+  
+  <message name="DescribeVpcsRequestMsg">
+    <part name="DescribeVpcsRequestMsgReq" element="tns:DescribeVpcs" />
+  </message>
+  
+  <message name="DescribeVpcsResponseMsg">
+    <part name="DescribeVpcsResponseMsgResp" element="tns:DescribeVpcsResponse" />
+  </message>
+  
+  <message name="CreateSubnetRequestMsg">
+    <part name="CreateSubnetRequestMsgReq" element="tns:CreateSubnet" />
+  </message>
+  
+  <message name="CreateSubnetResponseMsg">
+    <part name="CreateSubnetResponseMsgResp" element="tns:CreateSubnetResponse" />
+  </message>
+  
+  <message name="DeleteSubnetRequestMsg">
+    <part name="DeleteSubnetRequestMsgReq" element="tns:DeleteSubnet" />
+  </message>
+  
+  <message name="DeleteSubnetResponseMsg">
+    <part name="DeleteSubnetResponseMsgResp" element="tns:DeleteSubnetResponse" />
+  </message>
+  
+  <message name="DescribeSubnetsRequestMsg">
+    <part name="DescribeSubnetsRequestMsgReq" element="tns:DescribeSubnets" />
+  </message>
+  
+  <message name="DescribeSubnetsResponseMsg">
+    <part name="DescribeSubnetsResponseMsgResp" element="tns:DescribeSubnetsResponse" />
+  </message>
+  
+  <message name="CreateDhcpOptionsRequestMsg">
+    <part name="CreateDhcpOptionsRequestMsgReq" element="tns:CreateDhcpOptions" />
+  </message>
+  
+  <message name="CreateDhcpOptionsResponseMsg">
+    <part name="CreateDhcpOptionsResponseMsgResp" element="tns:CreateDhcpOptionsResponse" />
+  </message>
+  
+  <message name="DescribeDhcpOptionsRequestMsg">
+    <part name="DescribeDhcpOptionsRequestMsgReq" element="tns:DescribeDhcpOptions" />
+  </message>
+  
+  <message name="DescribeDhcpOptionsResponseMsg">
+    <part name="DescribeDhcpOptionsResponseMsgResp" element="tns:DescribeDhcpOptionsResponse" />
+  </message>
+  
+  <message name="DeleteDhcpOptionsRequestMsg">
+    <part name="DeleteDhcpOptionsRequestMsgReq" element="tns:DeleteDhcpOptions" />
+  </message>
+  
+  <message name="DeleteDhcpOptionsResponseMsg">
+    <part name="DeleteDhcpOptionsResponseMsgResp" element="tns:DeleteDhcpOptionsResponse" />
+  </message>
+  
+  <message name="AssociateDhcpOptionsRequestMsg">
+    <part name="AssociateDhcpOptionsRequestMsgReq" element="tns:AssociateDhcpOptions" />
+  </message>
+  
+  <message name="AssociateDhcpOptionsResponseMsg">
+    <part name="AssociateDhcpOptionsResponseMsgResp" element="tns:AssociateDhcpOptionsResponse" />
+  </message>
+
+  <message name="RequestSpotInstancesRequestMsg">
+    <part name="RequestSpotInstancesRequestMsgReq" element="tns:RequestSpotInstances" />
+  </message>
+
+  <message name="RequestSpotInstancesResponseMsg">
+    <part name="RequestSpotInstancesResponseMsgResp" element="tns:RequestSpotInstancesResponse" />
+  </message>
+
+  <message name="DescribeSpotInstanceRequestsRequestMsg">
+    <part name="DescribeSpotInstanceRequestsRequestMsgReq" element="tns:DescribeSpotInstanceRequests" />
+  </message>
+
+  <message name="DescribeSpotInstanceRequestsResponseMsg">
+    <part name="DescribeSpotInstanceRequestsResponseMsgResp" element="tns:DescribeSpotInstanceRequestsResponse" />
+  </message>
+
+  <message name="CancelSpotInstanceRequestsRequestMsg">
+    <part name="CancelSpotInstanceRequestsRequestMsgReq" element="tns:CancelSpotInstanceRequests" />
+  </message>
+
+  <message name="CancelSpotInstanceRequestsResponseMsg">
+    <part name="CancelSpotInstanceRequestsResponseMsgResp" element="tns:CancelSpotInstanceRequestsResponse" />
+  </message>
+
+  <message name="DescribeSpotPriceHistoryRequestMsg">
+    <part name="DescribeSpotPriceHistoryRequestMsgReq" element="tns:DescribeSpotPriceHistory" />
+  </message>
+
+  <message name="DescribeSpotPriceHistoryResponseMsg">
+    <part name="DescribeSpotPriceHistoryResponseMsgResp" element="tns:DescribeSpotPriceHistoryResponse" />
+  </message>
+
+  <message name="CreateSpotDatafeedSubscriptionRequestMsg">
+    <part name="CreateSpotDatafeedSubscriptionRequestMsgReq" element="tns:CreateSpotDatafeedSubscription" />
+  </message>
+
+  <message name="CreateSpotDatafeedSubscriptionResponseMsg">
+    <part name="CreateSpotDatafeedSubscriptionResponseMsgResp" element="tns:CreateSpotDatafeedSubscriptionResponse" />
+  </message>
+
+  <message name="DescribeSpotDatafeedSubscriptionRequestMsg">
+    <part name="DescribeSpotDatafeedSubscriptionRequestMsgReq" element="tns:DescribeSpotDatafeedSubscription" />
+  </message>
+
+  <message name="DescribeSpotDatafeedSubscriptionResponseMsg">
+    <part name="DescribeSpotDatafeedSubscriptionResponseMsgResp" element="tns:DescribeSpotDatafeedSubscriptionResponse" />
+  </message>
+
+  <message name="DeleteSpotDatafeedSubscriptionRequestMsg">
+    <part name="DeleteSpotDatafeedSubscriptionRequestMsgReq" element="tns:DeleteSpotDatafeedSubscription" />
+  </message>
+
+  <message name="DeleteSpotDatafeedSubscriptionResponseMsg">
+    <part name="DeleteSpotDatafeedSubscriptionResponseMsgResp" element="tns:DeleteSpotDatafeedSubscriptionResponse" />
+  </message>
+  
+  <portType name="AmazonEC2PortType">
+    <operation name="CreateImage">
+      <input message="tns:CreateImageRequestMsg" />
+      <output message="tns:CreateImageResponseMsg" />
+    </operation>
+    <operation name="RegisterImage">
+      <input message="tns:RegisterImageRequestMsg" />
+      <output message="tns:RegisterImageResponseMsg" />
+    </operation>
+    <operation name="DeregisterImage">
+      <input message="tns:DeregisterImageRequestMsg" />
+      <output message="tns:DeregisterImageResponseMsg" />
+    </operation>
+    <operation name="RunInstances">
+      <input message="tns:RunInstancesRequestMsg" />
+      <output message="tns:RunInstancesResponseMsg" />
+    </operation>
+    <operation name="CreateKeyPair">
+      <input message="tns:CreateKeyPairRequestMsg" />
+      <output message="tns:CreateKeyPairResponseMsg" />
+    </operation>
+    <operation name="DescribeKeyPairs">
+      <input message="tns:DescribeKeyPairsRequestMsg" />
+      <output message="tns:DescribeKeyPairsResponseMsg" />
+    </operation>
+    <operation name="DeleteKeyPair">
+      <input message="tns:DeleteKeyPairRequestMsg" />
+      <output message="tns:DeleteKeyPairResponseMsg" />
+    </operation>
+    <operation name="GetConsoleOutput">
+      <input message="tns:GetConsoleOutputRequestMsg" />
+      <output message="tns:GetConsoleOutputResponseMsg" />
+    </operation>
+    <operation name="GetPasswordData">
+      <input message="tns:GetPasswordDataRequestMsg" />
+      <output message="tns:GetPasswordDataResponseMsg" />
+    </operation>
+    <operation name="TerminateInstances">
+      <input message="tns:TerminateInstancesRequestMsg" />
+      <output message="tns:TerminateInstancesResponseMsg" />
+    </operation>
+    <operation name="StopInstances">
+      <input message="tns:StopInstancesRequestMsg" />
+      <output message="tns:StopInstancesResponseMsg" />
+    </operation>
+    <operation name="StartInstances">
+      <input message="tns:StartInstancesRequestMsg" />
+      <output message="tns:StartInstancesResponseMsg" />
+    </operation>
+    <operation name="RebootInstances">
+      <input message="tns:RebootInstancesRequestMsg" />
+      <output message="tns:RebootInstancesResponseMsg" />
+    </operation>
+    <operation name="DescribeInstances">
+      <input message="tns:DescribeInstancesRequestMsg" />
+      <output message="tns:DescribeInstancesResponseMsg" />
+    </operation>
+    <operation name="DescribeImages">
+      <input message="tns:DescribeImagesRequestMsg" />
+      <output message="tns:DescribeImagesResponseMsg" />
+    </operation>
+    <operation name="CreateSecurityGroup">
+      <input message="tns:CreateSecurityGroupRequestMsg" />
+      <output message="tns:CreateSecurityGroupResponseMsg" />
+    </operation>
+    <operation name="DeleteSecurityGroup">
+      <input message="tns:DeleteSecurityGroupRequestMsg" />
+      <output message="tns:DeleteSecurityGroupResponseMsg" />
+    </operation>
+    <operation name="DescribeSecurityGroups">
+      <input message="tns:DescribeSecurityGroupsRequestMsg" />
+      <output message="tns:DescribeSecurityGroupsResponseMsg" />
+    </operation>
+    <operation name="AuthorizeSecurityGroupIngress">
+      <input message="tns:AuthorizeSecurityGroupIngressRequestMsg" />
+      <output message="tns:AuthorizeSecurityGroupIngressResponseMsg" />
+    </operation>
+    <operation name="RevokeSecurityGroupIngress">
+      <input message="tns:RevokeSecurityGroupIngressRequestMsg" />
+      <output message="tns:RevokeSecurityGroupIngressResponseMsg" />
+    </operation>
+	<operation name="ModifyInstanceAttribute">
+      <input message="tns:ModifyInstanceAttributeRequestMsg"/>
+      <output message="tns:ModifyInstanceAttributeResponseMsg"/>
+    </operation>
+    <operation name="ResetInstanceAttribute">
+      <input message="tns:ResetInstanceAttributeRequestMsg"/>
+      <output message="tns:ResetInstanceAttributeResponseMsg"/>
+    </operation>
+    <operation name="DescribeInstanceAttribute">
+      <input message="tns:DescribeInstanceAttributeRequestMsg"/>
+      <output message="tns:DescribeInstanceAttributeResponseMsg"/>
+    </operation>
+    <operation name="ModifyImageAttribute">
+      <input message="tns:ModifyImageAttributeRequestMsg"/>
+      <output message="tns:ModifyImageAttributeResponseMsg"/>
+    </operation>
+    <operation name="ResetImageAttribute">
+      <input message="tns:ResetImageAttributeRequestMsg"/>
+      <output message="tns:ResetImageAttributeResponseMsg"/>
+    </operation>
+    <operation name="DescribeImageAttribute">
+      <input message="tns:DescribeImageAttributeRequestMsg"/>
+      <output message="tns:DescribeImageAttributeResponseMsg"/>
+    </operation>
+    <operation name="ConfirmProductInstance">
+      <input message="tns:ConfirmProductInstanceRequestMsg"/>
+      <output message="tns:ConfirmProductInstanceResponseMsg"/>
+    </operation>
+    <operation name="DescribeAvailabilityZones">
+      <input message="tns:DescribeAvailabilityZonesRequestMsg"/>
+      <output message="tns:DescribeAvailabilityZonesResponseMsg"/>
+    </operation>
+    <operation name='AllocateAddress'>
+      <input message='tns:AllocateAddressRequestMsg'/>
+      <output message='tns:AllocateAddressResponseMsg'/>
+    </operation>
+    <operation name='ReleaseAddress'>
+      <input message='tns:ReleaseAddressRequestMsg'/>
+      <output message='tns:ReleaseAddressResponseMsg'/>
+    </operation>
+    <operation name='DescribeAddresses'>
+      <input message='tns:DescribeAddressesRequestMsg'/>
+      <output message='tns:DescribeAddressesResponseMsg'/>
+    </operation>
+    <operation name='AssociateAddress'>
+      <input message='tns:AssociateAddressRequestMsg'/>
+      <output message='tns:AssociateAddressResponseMsg'/>
+    </operation>
+    <operation name='DisassociateAddress'>
+      <input message='tns:DisassociateAddressRequestMsg'/>
+      <output message='tns:DisassociateAddressResponseMsg'/>
+    </operation>
+    <operation name="CreateVolume">
+      <input message="tns:CreateVolumeRequestMsg"/>
+      <output message="tns:CreateVolumeResponseMsg"/>
+    </operation>
+    <operation name="DeleteVolume">
+      <input message="tns:DeleteVolumeRequestMsg"/>
+      <output message="tns:DeleteVolumeResponseMsg"/>
+    </operation>
+    <operation name="DescribeVolumes">
+      <input message="tns:DescribeVolumesRequestMsg"/>
+      <output message="tns:DescribeVolumesResponseMsg"/>
+    </operation>
+    <operation name="AttachVolume">
+      <input message="tns:AttachVolumeRequestMsg"/>
+      <output message="tns:AttachVolumeResponseMsg"/>
+    </operation>
+    <operation name="DetachVolume">
+      <input message="tns:DetachVolumeRequestMsg"/>
+      <output message="tns:DetachVolumeResponseMsg"/>
+    </operation>
+    <operation name="CreateSnapshot">
+      <input message="tns:CreateSnapshotRequestMsg"/>
+      <output message="tns:CreateSnapshotResponseMsg"/>
+    </operation>
+    <operation name="DeleteSnapshot">
+      <input message="tns:DeleteSnapshotRequestMsg"/>
+      <output message="tns:DeleteSnapshotResponseMsg"/>
+    </operation>
+    <operation name="DescribeSnapshots">
+      <input message="tns:DescribeSnapshotsRequestMsg"/>
+      <output message="tns:DescribeSnapshotsResponseMsg"/>
+    </operation>
+    <operation name="ModifySnapshotAttribute">
+      <input message="tns:ModifySnapshotAttributeRequestMsg"/>
+      <output message="tns:ModifySnapshotAttributeResponseMsg"/>
+    </operation>
+    <operation name="ResetSnapshotAttribute">
+      <input message="tns:ResetSnapshotAttributeRequestMsg"/>
+      <output message="tns:ResetSnapshotAttributeResponseMsg"/>
+    </operation>
+    <operation name="DescribeSnapshotAttribute">
+      <input message="tns:DescribeSnapshotAttributeRequestMsg"/>
+      <output message="tns:DescribeSnapshotAttributeResponseMsg"/>
+    </operation>
+    <operation name="BundleInstance">
+      <input message="tns:BundleInstanceRequestMsg" />
+      <output message="tns:BundleInstanceResponseMsg" />
+    </operation>
+    <operation name="DescribeBundleTasks">
+      <input message="tns:DescribeBundleTasksRequestMsg" />
+      <output message="tns:DescribeBundleTasksResponseMsg" />
+    </operation>
+    <operation name="CancelBundleTask">
+      <input message="tns:CancelBundleTaskRequestMsg" />
+      <output message="tns:CancelBundleTaskResponseMsg" />
+    </operation>
+    <operation name="DescribeRegions">
+      <input message="tns:DescribeRegionsRequestMsg"/>
+      <output message="tns:DescribeRegionsResponseMsg"/>
+    </operation>
+    <operation name="DescribeReservedInstancesOfferings">
+      <input message="tns:DescribeReservedInstancesOfferingsRequestMsg"/>
+      <output message="tns:DescribeReservedInstancesOfferingsResponseMsg"/>
+    </operation>
+    <operation name="PurchaseReservedInstancesOffering">
+      <input message="tns:PurchaseReservedInstancesOfferingRequestMsg"/>
+      <output message="tns:PurchaseReservedInstancesOfferingResponseMsg"/>
+    </operation>
+    <operation name="DescribeReservedInstances">
+      <input message="tns:DescribeReservedInstancesRequestMsg"/>
+      <output message="tns:DescribeReservedInstancesResponseMsg"/>
+    </operation>    
+    <operation name="MonitorInstances">
+      <input message="tns:MonitorInstancesRequestMsg"/>
+      <output message="tns:MonitorInstancesResponseMsg"/>
+    </operation>    
+    <operation name="UnmonitorInstances">
+      <input message="tns:UnmonitorInstancesRequestMsg"/>
+      <output message="tns:UnmonitorInstancesResponseMsg"/>
+    </operation>
+    <operation name="CreateCustomerGateway">
+      <input message="tns:CreateCustomerGatewayRequestMsg"/>
+      <output message="tns:CreateCustomerGatewayResponseMsg"/>
+    </operation>
+    <operation name="DeleteCustomerGateway">
+      <input message="tns:DeleteCustomerGatewayRequestMsg"/>
+      <output message="tns:DeleteCustomerGatewayResponseMsg"/>
+    </operation>
+    <operation name="DescribeCustomerGateways">
+      <input message="tns:DescribeCustomerGatewaysRequestMsg"/>
+      <output message="tns:DescribeCustomerGatewaysResponseMsg"/>
+    </operation>
+    <operation name="CreateVpnGateway">
+      <input message="tns:CreateVpnGatewayRequestMsg"/>
+      <output message="tns:CreateVpnGatewayResponseMsg"/>
+    </operation>
+    <operation name="DeleteVpnGateway">
+      <input message="tns:DeleteVpnGatewayRequestMsg"/>
+      <output message="tns:DeleteVpnGatewayResponseMsg"/>
+    </operation>
+    <operation name="DescribeVpnGateways">
+      <input message="tns:DescribeVpnGatewaysRequestMsg"/>
+      <output message="tns:DescribeVpnGatewaysResponseMsg"/>
+    </operation>
+    <operation name="CreateVpnConnection">
+      <input message="tns:CreateVpnConnectionRequestMsg"/>
+      <output message="tns:CreateVpnConnectionResponseMsg"/>
+    </operation>
+    <operation name="DeleteVpnConnection">
+      <input message="tns:DeleteVpnConnectionRequestMsg"/>
+      <output message="tns:DeleteVpnConnectionResponseMsg"/>
+    </operation>
+    <operation name="DescribeVpnConnections">
+      <input message="tns:DescribeVpnConnectionsRequestMsg"/>
+      <output message="tns:DescribeVpnConnectionsResponseMsg"/>
+    </operation>
+    <operation name="AttachVpnGateway">
+      <input message="tns:AttachVpnGatewayRequestMsg"/>
+      <output message="tns:AttachVpnGatewayResponseMsg"/>
+    </operation>
+    <operation name="DetachVpnGateway">
+      <input message="tns:DetachVpnGatewayRequestMsg"/>
+      <output message="tns:DetachVpnGatewayResponseMsg"/>
+    </operation>
+    <operation name="CreateVpc">
+      <input message="tns:CreateVpcRequestMsg"/>
+      <output message="tns:CreateVpcResponseMsg"/>
+    </operation>
+    <operation name="DeleteVpc">
+      <input message="tns:DeleteVpcRequestMsg"/>
+      <output message="tns:DeleteVpcResponseMsg"/>
+    </operation>
+    <operation name="DescribeVpcs">
+      <input message="tns:DescribeVpcsRequestMsg"/>
+      <output message="tns:DescribeVpcsResponseMsg"/>
+    </operation>
+    <operation name="CreateSubnet">
+      <input message="tns:CreateSubnetRequestMsg"/>
+      <output message="tns:CreateSubnetResponseMsg"/>
+    </operation>
+    <operation name="DeleteSubnet">
+      <input message="tns:DeleteSubnetRequestMsg"/>
+      <output message="tns:DeleteSubnetResponseMsg"/>
+    </operation>
+    <operation name="DescribeSubnets">
+      <input message="tns:DescribeSubnetsRequestMsg"/>
+      <output message="tns:DescribeSubnetsResponseMsg"/>
+    </operation>
+    <operation name="CreateDhcpOptions">
+      <input message="tns:CreateDhcpOptionsRequestMsg"/>
+      <output message="tns:CreateDhcpOptionsResponseMsg"/>
+    </operation>
+    <operation name="DescribeDhcpOptions">
+      <input message="tns:DescribeDhcpOptionsRequestMsg"/>
+      <output message="tns:DescribeDhcpOptionsResponseMsg"/>
+    </operation>
+    <operation name="DeleteDhcpOptions">
+      <input message="tns:DeleteDhcpOptionsRequestMsg"/>
+      <output message="tns:DeleteDhcpOptionsResponseMsg"/>
+    </operation>
+    <operation name="AssociateDhcpOptions">
+      <input message="tns:AssociateDhcpOptionsRequestMsg"/>
+      <output message="tns:AssociateDhcpOptionsResponseMsg"/>
+    </operation>
+    <operation name="RequestSpotInstances">
+      <input message="tns:RequestSpotInstancesRequestMsg" />
+      <output message="tns:RequestSpotInstancesResponseMsg" />
+    </operation>
+    <operation name="DescribeSpotInstanceRequests">
+      <input message="tns:DescribeSpotInstanceRequestsRequestMsg" />
+      <output message="tns:DescribeSpotInstanceRequestsResponseMsg" />
+    </operation>
+    <operation name="CancelSpotInstanceRequests">
+      <input message="tns:CancelSpotInstanceRequestsRequestMsg" />
+      <output message="tns:CancelSpotInstanceRequestsResponseMsg" />
+    </operation>
+    <operation name="DescribeSpotPriceHistory">
+      <input message="tns:DescribeSpotPriceHistoryRequestMsg" />
+      <output message="tns:DescribeSpotPriceHistoryResponseMsg" />
+    </operation>
+    <operation name="CreateSpotDatafeedSubscription">
+      <input message="tns:CreateSpotDatafeedSubscriptionRequestMsg" />
+      <output message="tns:CreateSpotDatafeedSubscriptionResponseMsg" />
+    </operation>
+    <operation name="DescribeSpotDatafeedSubscription">
+      <input message="tns:DescribeSpotDatafeedSubscriptionRequestMsg" />
+      <output message="tns:DescribeSpotDatafeedSubscriptionResponseMsg" />
+    </operation>
+    <operation name="DeleteSpotDatafeedSubscription">
+      <input message="tns:DeleteSpotDatafeedSubscriptionRequestMsg" />
+      <output message="tns:DeleteSpotDatafeedSubscriptionResponseMsg" />
+    </operation>
+    
+  </portType>
+
+  <binding name="AmazonEC2Binding" type="tns:AmazonEC2PortType">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
+
+    <operation name="CreateImage">
+      <soap:operation soapAction="CreateImage" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="RegisterImage">
+      <soap:operation soapAction="RegisterImage" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DeregisterImage">
+      <soap:operation soapAction="DeregisterImage" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="CreateKeyPair">
+      <soap:operation soapAction="CreateKeyPair" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeKeyPairs">
+      <soap:operation soapAction="DescribeKeyPairs" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DeleteKeyPair">
+      <soap:operation soapAction="DeleteKeyPair" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="RunInstances">
+      <soap:operation soapAction="RunInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="GetConsoleOutput">
+      <soap:operation soapAction="GetConsoleOutput" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="GetPasswordData">
+      <soap:operation soapAction="GetPasswordData" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="TerminateInstances">
+      <soap:operation soapAction="TerminateInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+
+    <operation name="StopInstances">
+      <soap:operation soapAction="StopInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="StartInstances">
+      <soap:operation soapAction="StartInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="RebootInstances">
+      <soap:operation soapAction="RebootInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeInstances">
+      <soap:operation soapAction="DescribeInstances" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeImages">
+      <soap:operation soapAction="DescribeImages" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="CreateSecurityGroup">
+      <soap:operation soapAction="CreateSecurityGroup" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DeleteSecurityGroup">
+      <soap:operation soapAction="DeleteSecurityGroup" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeSecurityGroups">
+      <soap:operation soapAction="DescribeSecurityGroups" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="AuthorizeSecurityGroupIngress">
+      <soap:operation soapAction="AuthorizeSecurityGroupIngress" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="RevokeSecurityGroupIngress">
+      <soap:operation soapAction="RevokeSecurityGroupIngress" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+	<operation name="ModifyInstanceAttribute">
+      <soap:operation soapAction="ModifyInstanceAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="ResetInstanceAttribute">
+      <soap:operation soapAction="ResetInstanceAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DescribeInstanceAttribute">
+      <soap:operation soapAction="DescribeInstanceAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+	
+    <operation name="ModifyImageAttribute">
+      <soap:operation soapAction="ModifyImageAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="ResetImageAttribute">
+      <soap:operation soapAction="ResetImageAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DescribeImageAttribute">
+      <soap:operation soapAction="DescribeImageAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="ConfirmProductInstance">
+      <soap:operation soapAction="ConfirmProductInstance" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeAvailabilityZones">
+      <soap:operation soapAction="DescribeAvailabilityZones" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name='AllocateAddress'>
+      <soap:operation soapAction='AllocateAddress'/>
+      <input>
+        <soap:body use='literal'/>
+      </input>
+      <output>
+        <soap:body use='literal'/>
+      </output>
+    </operation>
+
+    <operation name='ReleaseAddress'>
+      <soap:operation soapAction='ReleaseAddress'/>
+      <input>
+        <soap:body use='literal'/>
+      </input>
+      <output>
+        <soap:body use='literal'/>
+      </output>
+    </operation>
+
+    <operation name='DescribeAddresses'>
+      <soap:operation soapAction='DescribeAddresses'/>
+      <input>
+        <soap:body use='literal'/>
+      </input>
+      <output>
+        <soap:body use='literal'/>
+      </output>
+    </operation>
+
+    <operation name='AssociateAddress'>
+      <soap:operation soapAction='AssociateAddress'/>
+      <input>
+        <soap:body use='literal'/>
+      </input>
+      <output>
+        <soap:body use='literal'/>
+      </output>
+    </operation>
+
+    <operation name='DisassociateAddress'>
+      <soap:operation soapAction='DisassociateAddress'/>
+      <input>
+        <soap:body use='literal'/>
+      </input>
+      <output>
+        <soap:body use='literal'/>
+      </output>
+    </operation>
+
+    <operation name="CreateVolume">
+      <soap:operation soapAction="CreateVolume" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DeleteVolume">
+      <soap:operation soapAction="DeleteVolume" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DescribeVolumes">
+      <soap:operation soapAction="DescribeVolumes" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="AttachVolume">
+      <soap:operation soapAction="AttachVolume" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DetachVolume">
+      <soap:operation soapAction="DetachVolume" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="CreateSnapshot">
+      <soap:operation soapAction="CreateSnapshot" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DeleteSnapshot">
+      <soap:operation soapAction="DeleteSnapshot" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="DescribeSnapshots">
+      <soap:operation soapAction="DescribeSnapshots" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="ModifySnapshotAttribute">
+      <soap:operation soapAction="ModifySnapshotAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="ResetSnapshotAttribute">
+      <soap:operation soapAction="ResetSnapshotAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeSnapshotAttribute">
+      <soap:operation soapAction="DescribeSnapshotAttribute" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="BundleInstance">
+      <soap:operation soapAction="BundleInstance" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeBundleTasks">
+      <soap:operation soapAction="DescribeBundleTasks" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="CancelBundleTask">
+      <soap:operation soapAction="CancelBundleTask" />
+      <input>
+        <soap:body use="literal" />
+      </input>
+      <output>
+        <soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeRegions">
+      <soap:operation soapAction="DescribeRegions" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeReservedInstancesOfferings">
+      <soap:operation soapAction="DescribeReservedInstancesOfferings" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="PurchaseReservedInstancesOffering">
+      <soap:operation soapAction="PurchaseReservedInstancesOffering" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeReservedInstances">
+      <soap:operation soapAction="DescribeReservedInstances" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+    
+    <operation name="MonitorInstances">
+      <soap:operation soapAction="MonitorInstances" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="UnmonitorInstances">
+      <soap:operation soapAction="UnmonitorInstances" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateCustomerGateway">
+      <soap:operation soapAction="CreateCustomerGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteCustomerGateway">
+      <soap:operation soapAction="DeleteCustomerGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeCustomerGateways">
+      <soap:operation soapAction="DescribeCustomerGateways" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateVpnGateway">
+      <soap:operation soapAction="CreateVpnGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteVpnGateway">
+      <soap:operation soapAction="DeleteVpnGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeVpnGateways">
+      <soap:operation soapAction="DescribeVpnGateways" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateVpnConnection">
+      <soap:operation soapAction="CreateVpnConnection" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteVpnConnection">
+      <soap:operation soapAction="DeleteVpnConnection" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeVpnConnections">
+      <soap:operation soapAction="DescribeVpnConnections" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="AttachVpnGateway">
+      <soap:operation soapAction="AttachVpnGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DetachVpnGateway">
+      <soap:operation soapAction="DetachVpnGateway" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateVpc">
+      <soap:operation soapAction="CreateVpc" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteVpc">
+      <soap:operation soapAction="DeleteVpc" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeVpcs">
+      <soap:operation soapAction="DescribeVpcs" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateSubnet">
+      <soap:operation soapAction="CreateSubnet" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteSubnet">
+      <soap:operation soapAction="DeleteSubnet" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeSubnets">
+      <soap:operation soapAction="DescribeSubnets" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="CreateDhcpOptions">
+      <soap:operation soapAction="CreateDhcpOptions" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DescribeDhcpOptions">
+      <soap:operation soapAction="DescribeDhcpOptions" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="DeleteDhcpOptions">
+      <soap:operation soapAction="DeleteDhcpOptions" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="AssociateDhcpOptions">
+      <soap:operation soapAction="AssociateDhcpOptions" />
+      <input>
+        <soap:body use="literal"/>
+      </input>
+      <output>
+        <soap:body use="literal"/>
+      </output>
+    </operation>
+
+    <operation name="RequestSpotInstances">
+      <soap:operation soapAction="RequestSpotInstances" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+    </operation>
+
+    <operation name="DescribeSpotInstanceRequests">
+      <soap:operation soapAction="DescribeSpotInstanceRequests" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+    </operation>
+
+   <operation name="CancelSpotInstanceRequests">
+      <soap:operation soapAction="CancelSpotInstanceRequests" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+   </operation>
+
+   <operation name="DescribeSpotPriceHistory">
+      <soap:operation soapAction="DescribeSpotPriceHistory" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+   </operation>
+    
+   <operation name="CreateSpotDatafeedSubscription">
+      <soap:operation soapAction="CreateSpotDatafeedSubscription" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+   </operation>
+
+   <operation name="DescribeSpotDatafeedSubscription">
+      <soap:operation soapAction="DescribeSpotDatafeedSubscription" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+   </operation>
+
+   <operation name="DeleteSpotDatafeedSubscription">
+      <soap:operation soapAction="DeleteSpotDatafeedSubscription" />
+      <input>
+	<soap:body use="literal" />
+      </input>
+      <output>
+	<soap:body use="literal" />
+      </output>
+   </operation>
+
+  </binding>
+
+  <service name="AmazonEC2">
+    <port name="AmazonEC2Port" binding="tns:AmazonEC2Binding">
+      <soap:address location="https://ec2.amazonaws.com/"; />
+    </port>
+  </service>
+
+</definitions>
\ No newline at end of file