incubator-deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mfoj...@redhat.com
Subject [PATCH core 12/13] Added possibility to associate IP address to instance (EC2, GoGrid)
Date Tue, 16 Nov 2010 11:41:07 GMT
From: Michal Fojtik <mfojtik@redhat.com>

---
 server/lib/deltacloud/base_driver/features.rb      |    7 +
 server/lib/deltacloud/base_driver/mock_driver.rb   |    1 +
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |    7 +-
 .../lib/deltacloud/drivers/gogrid/gogrid_driver.rb |    4 +-
 tests/ec2/api.feature                              |    1 +
 tests/ec2/instances.feature                        |   15 +
 tests/ec2/step_definitions/instances_steps.rb      |   10 +
 ...images.c4b6748639aec6ee0563714c9b6663e90253577b |    8 +
 ..._owner.ffb952b433edf7fe6cb4e04c86f82ac9ce0faa51 |  358 ++++++++++++++++++++
 ...tances.da39a3ee5e6b4b0d3255bfef95601890afd80709 |   13 +
 ...tances.c4b6748639aec6ee0563714c9b6663e90253577b |   11 +
 ...tances.c4b6748639aec6ee0563714c9b6663e90253577b |   11 +
 12 files changed, 444 insertions(+), 2 deletions(-)
 create mode 100644 tests/ec2/support/ec2/create-public_ip_describe_images.c4b6748639aec6ee0563714c9b6663e90253577b
 create mode 100644 tests/ec2/support/ec2/create-public_ip_describe_images_by_owner.ffb952b433edf7fe6cb4e04c86f82ac9ce0faa51
 create mode 100644 tests/ec2/support/ec2/create-public_ip_describe_instances.da39a3ee5e6b4b0d3255bfef95601890afd80709
 create mode 100644 tests/ec2/support/ec2/create-public_ip_launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
 create mode 100644 tests/ec2/support/ec2/launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b

diff --git a/server/lib/deltacloud/base_driver/features.rb b/server/lib/deltacloud/base_driver/features.rb
index 2d79f4b..5a8db6c 100644
--- a/server/lib/deltacloud/base_driver/features.rb
+++ b/server/lib/deltacloud/base_driver/features.rb
@@ -177,5 +177,12 @@ module Deltacloud
       end
     end
 
+    declare_feature :instances, :public_ip do
+      description "Associate public IP address to instance"
+      operation :create do
+        param :public_ip, :string,  :optional
+      end
+    end
+
   end
 end
diff --git a/server/lib/deltacloud/base_driver/mock_driver.rb b/server/lib/deltacloud/base_driver/mock_driver.rb
index 8635685..516857e 100644
--- a/server/lib/deltacloud/base_driver/mock_driver.rb
+++ b/server/lib/deltacloud/base_driver/mock_driver.rb
@@ -26,6 +26,7 @@ module Mock
         :attach_volume,
         :detach_volume,
         :describe_snapshots,
+        :associate_address,
         :try_create_snapshot,
       ]
     end
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index c58c1b4..07ae7af 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -41,6 +41,7 @@ module Deltacloud
 
         feature :instances, :user_data
         feature :instances, :authentication_key
+        feature :instances, :public_ip
         feature :images, :owner_id
         feature :buckets, :bucket_location
 
@@ -171,7 +172,11 @@ module Deltacloud
           instance_options.merge!(:availability_zone => opts[:availability_zone]) if opts[:availability_zone]
           instance_options.merge!(:instance_type => opts[:hwp_id]) if opts[:hwp_id]
           safely do
-            convert_instance(ec2.launch_instances(image_id, instance_options).first)
+            new_instance = convert_instance(ec2.launch_instances(image_id, instance_options).first)
+            if opts[:public_ip]
+              ec2.associate_address(new_instance.id, opts[:public_ip])
+            end
+            new_instance
           end
         end
     
diff --git a/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb b/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
index fd8e756..6c59934 100644
--- a/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
+++ b/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
@@ -36,6 +36,7 @@ module Deltacloud
 class GogridDriver < Deltacloud::BaseDriver
 
   feature :instances, :authentication_password
+  feature :instances, :public_ip
 
   define_hardware_profile 'server' do
     cpu            2
@@ -83,12 +84,13 @@ class GogridDriver < Deltacloud::BaseDriver
     end
     client = new_client(credentials)
     name = (opts[:name] && opts[:name]!='') ? opts[:name] : get_random_instance_name
+    public_ip = (opts and opts[:public_ip]) ? opts[:public_ip] : nil
     safely do
       instance = client.request('grid/server/add', {
         'name' => name,
         'image' => image_id,
         'server.ram' => server_ram,
-        'ip' => get_free_ip_from_realm(credentials, opts[:realm_id] || '1')
+        'ip' => public_ip || get_free_ip_from_realm(credentials, opts[:realm_id] || '1')
       })['list'].first
       if instance
         login_data = get_login_data(client, instance[:id])
diff --git a/tests/ec2/api.feature b/tests/ec2/api.feature
index 85b8498..f289e87 100644
--- a/tests/ec2/api.feature
+++ b/tests/ec2/api.feature
@@ -50,3 +50,4 @@ Feature: Accessing API entry points
     Then client should get list of features inside 'instances':
     | authentication_key |
     | user_data |
+    | public_ip |
diff --git a/tests/ec2/instances.feature b/tests/ec2/instances.feature
index 1e235ce..de13502 100644
--- a/tests/ec2/instances.feature
+++ b/tests/ec2/instances.feature
@@ -28,6 +28,21 @@ Feature: Managing instances
     And this instance should have last hardware profile
     And this instance should have name
 
+  @prefix-create-public_ip
+  Scenario: Choosing public ip address for instance
+    Given URI /api/instances exists
+    And authentification is required for this URI
+    When client want to create a new instance
+    Then client should choose first image
+    And client choose public IP address '184.73.218.247'
+    When client request for a new instance
+    Then new instance should be created
+    And this instance should have chosed image
+    And this instance should be in 'PENDING' state
+    And this instance should have valid id
+    And this instance should have name
+    And IP address for this instance should be '184.73.218.247'
+
   Scenario: Listing current instances
     Given URI /api/instances exists
     And authentification is required for this URI
diff --git a/tests/ec2/step_definitions/instances_steps.rb b/tests/ec2/step_definitions/instances_steps.rb
index 957d242..142e756 100644
--- a/tests/ec2/step_definitions/instances_steps.rb
+++ b/tests/ec2/step_definitions/instances_steps.rb
@@ -82,6 +82,7 @@ When /^client request for a new instance$/ do
     :image_id => @image.xpath('@id').first.text
   }
   params[:hwp_id] = @hwp_id if @hwp_id
+  params[:public_ip] = @public_ip if @public_ip
   post "#{@uri}", params
 end
 
@@ -131,6 +132,10 @@ When /^client choose (\w+) hardware profile$/ do |position|
   end
 end
 
+When /^client choose public IP address '([\w\.]+)'$/ do |address|
+  @public_up = address
+end
+
 Then /^this instance should have last hardware profile$/ do
   output_xml.xpath('instance/hardware_profile/@id').first.text.should == @hwp_id
 end
@@ -142,3 +147,8 @@ end
 Then /^I set mock scenario to default$/ do
   @scenario = ''
 end
+
+Then /^IP address for this instance should be '([\w\.]+)'$/ do |address|
+  puts output_xml.to_s
+end
+
diff --git a/tests/ec2/support/ec2/create-public_ip_describe_images.c4b6748639aec6ee0563714c9b6663e90253577b
b/tests/ec2/support/ec2/create-public_ip_describe_images.c4b6748639aec6ee0563714c9b6663e90253577b
new file mode 100644
index 0000000..0599c5d
--- /dev/null
+++ b/tests/ec2/support/ec2/create-public_ip_describe_images.c4b6748639aec6ee0563714c9b6663e90253577b
@@ -0,0 +1,8 @@
+BAhbBnsPOhJhd3NfaXNfcHVibGljVDoNYXdzX25hbWUiG3NsZXMtMTAtc3Az
+LXYxLjAwLmkzODY6FGF3c19kZXNjcmlwdGlvbiJDU1VTRSBMaW51eCBFbnRl
+cnByaXNlIFNlcnZlciAxMCBTZXJ2aWNlIFBhY2sgMyBmb3IgeDg2ICh2MS4w
+MCk6E2F3c19pbWFnZV90eXBlIgxtYWNoaW5lOhFhd3NfbG9jYXRpb24iImFt
+YXpvbi9zbGVzLTEwLXNwMy12MS4wMC5pMzg2OhJhd3Nfa2VybmVsX2lkIhFh
+a2ktNDA3ZDk1Mjk6DmF3c19zdGF0ZSIOYXZhaWxhYmxlOg5hd3Nfb3duZXIi
+ETAxMzkwNzg3MTMyMjoVYXdzX2FyY2hpdGVjdHVyZSIJaTM4NjoLYXdzX2lk
+IhFhbWktMTZhMzU3N2Y=
diff --git a/tests/ec2/support/ec2/create-public_ip_describe_images_by_owner.ffb952b433edf7fe6cb4e04c86f82ac9ce0faa51
b/tests/ec2/support/ec2/create-public_ip_describe_images_by_owner.ffb952b433edf7fe6cb4e04c86f82ac9ce0faa51
new file mode 100644
index 0000000..09b4fe2
--- /dev/null
+++ b/tests/ec2/support/ec2/create-public_ip_describe_images_by_owner.ffb952b433edf7fe6cb4e04c86f82ac9ce0faa51
@@ -0,0 +1,358 @@
+BAhbX3sMOhJhd3NfaXNfcHVibGljVDoTYXdzX2ltYWdlX3R5cGUiDG1hY2hp
+bmU6EWF3c19sb2NhdGlvbiJMZWMyLXB1YmxpYy13aW5kb3dzLWltYWdlcy9T
+cWxTdnJTdGQyMDAzcjIteDg2XzY0LVdpbi12MS4wNy5tYW5pZmVzdC54bWw6
+DmF3c19zdGF0ZSIOYXZhaWxhYmxlOg5hd3Nfb3duZXIiETIwNjAyOTYyMTUz
+MjoVYXdzX2FyY2hpdGVjdHVyZSILeDg2XzY0Ogthd3NfaWQiEWFtaS0wNTM1
+ZDY2Y3sPOwBUOhZhd3NfcHJvZHVjdF9jb2Rlc1sGIg04MEVEMDBCODsGIgxt
+YWNoaW5lOwciSGVjMi1wYWlkLWlibS1pbWFnZXMvaWJtLXRpdm9saS1pdG0t
+MDYuMjEuMDMuMDAtMzJiLTYwMC5tYW5pZmVzdC54bWw6EmF3c19rZXJuZWxf
+aWQiEWFraS03ZTQ4YTgxNzsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0
+OhNhd3NfcmFtZGlza19pZCIRYXJpLTY2NDhhODBmOwoiCWkzODY7CyIRYW1p
+LTA2NGNhYzZmew87AFQ7DFsGIg1FM0Q0OENFRTsGIgxtYWNoaW5lOwciUGVj
+Mi1wYWlkLWlibS1pbWFnZXMvd2Vic3BoZXJlLWFwcGxpY2F0aW9uLXNlcnZl
+ci03LjAuMC43LTMyYml0Lm1hbmlmZXN0LnhtbDsNIhFha2ktMzAzOGRhNTk7
+CCIOYXZhaWxhYmxlOwkiETQ3MDI1NDUzNDAyNDsOIhFhcmktMzIzOGRhNWI7
+CiIJaTM4NjsLIhFhbWktMTAwMGUyNzl7DzsAVDsMWwYiDUE5NDA4QjRCOwYi
+DG1hY2hpbmU7ByJHZWMyLXBhaWQtaWJtLWltYWdlcy1pZHMvaWJtLWlkcy13
+b3JrZ3JvdXAtMTEuNS12MjAyLTEubWFuaWZlc3QueG1sOw0iEWFraS0wMjUx
+YjM2YjsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS0wYzUx
+YjM2NTsKIgt4ODZfNjQ7CyIRYW1pLTEwNTFiMzc5ew47AFQ7BiIMbWFjaGlu
+ZTsHIj9hd3MtdG9vbGtpdC1mb3ItZWNsaXBzZS1hbWlzLXVzL3RvbWNhdC12
+MS4wLjAubWFuaWZlc3QueG1sOw0iEWFraS1hNzFjZjljZTsIIg5hdmFpbGFi
+bGU7CSIRMjA1NjA1ODE5NzE2Ow4iEWFyaS1hNTFjZjljYzsKIglpMzg2Owsi
+EWFtaS0xMWNhMmQ3OHsPOwBUOg1hd3NfbmFtZSIbc2xlcy0xMC1zcDMtdjEu
+MDAuaTM4NjoUYXdzX2Rlc2NyaXB0aW9uIkNTVVNFIExpbnV4IEVudGVycHJp
+c2UgU2VydmVyIDEwIFNlcnZpY2UgUGFjayAzIGZvciB4ODYgKHYxLjAwKTsG
+IgxtYWNoaW5lOwciImFtYXpvbi9zbGVzLTEwLXNwMy12MS4wMC5pMzg2Ow0i
+EWFraS00MDdkOTUyOTsIIg5hdmFpbGFibGU7CSIRMDEzOTA3ODcxMzIyOwoi
+CWkzODY7CyIRYW1pLTE2YTM1Nzdmew07AFQ7BiIMbWFjaGluZTsHIkBlYzIt
+cHVibGljLWltYWdlcy9mZWRvcmEtY29yZTQtaTM4Ni1iYXNlLXYxLjA3Lm1h
+bmlmZXN0LnhtbDsNIhFha2ktOWIwMGU1ZjI7CCIOYXZhaWxhYmxlOwkiETIw
+NjAyOTYyMTUzMjsKIglpMzg2OwsiEWFtaS0yMDVmYmE0OXsOOwBUOwYiDG1h
+Y2hpbmU7ByJFYXdzLWNvbnNvbGUtcXVpY2tzdGFydC1hbWlzL3BlcmwvMS4z
+L3BlcmxxdWlja3N0YXJ0Lm1hbmlmZXN0LnhtbDsNIhFha2ktZjVjMTIxOWM7
+CCIOYXZhaWxhYmxlOwkiETIwNTYwNTgxOTcxNjsOIhFhcmktZGJjMTIxYjI7
+CiIJaTM4NjsLIhFhbWktMjBiMDUzNDl7DDsAVDsGIgxtYWNoaW5lOwciNWVj
+Mi1wdWJsaWMtaW1hZ2VzL2ZlZG9yYS1jb3JlNC1iYXNlLm1hbmlmZXN0Lnht
+bDsIIg5hdmFpbGFibGU7CSIRMjA2MDI5NjIxNTMyOwoiCWkzODY7CyIRYW1p
+LTIwYjY1MzQ5eww7AFQ7BiIMbWFjaGluZTsHIjtlYzItcHVibGljLWltYWdl
+cy9mZWRvcmEtY29yZTQtYmFzZS12MS4wNy5tYW5pZmVzdC54bWw7CCIOYXZh
+aWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIglpMzg2OwsiEWFtaS0yMTVmYmE0
+OHsMOwBUOwYiDG1hY2hpbmU7ByJDZWMyLXB1YmxpYy1pbWFnZXMvZmVkb3Jh
+LWNvcmU0LWFwYWNoZS1teXNxbC12MS4wNy5tYW5pZmVzdC54bWw7CCIOYXZh
+aWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIglpMzg2OwsiEWFtaS0yMjVmYmE0
+YnsOOwBUOwYiDG1hY2hpbmU7ByJFYXdzLWNvbnNvbGUtcXVpY2tzdGFydC1h
+bWlzL3J1YnkvMS4yL3J1YnlxdWlja3N0YXJ0Lm1hbmlmZXN0LnhtbDsNIhFh
+a2ktZjVjMTIxOWM7CCIOYXZhaWxhYmxlOwkiETIwNTYwNTgxOTcxNjsOIhFh
+cmktZGJjMTIxYjI7CiIJaTM4NjsLIhFhbWktMjJiMDUzNGJ7DDsAVDsGIgxt
+YWNoaW5lOwciNmVjMi1wdWJsaWMtaW1hZ2VzL2ZlZG9yYS1jb3JlNC1teXNx
+bC5tYW5pZmVzdC54bWw7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUzMjsK
+IglpMzg2OwsiEWFtaS0yMmI2NTM0YnsMOwBUOwYiDG1hY2hpbmU7ByI5ZWMy
+LXB1YmxpYy1pbWFnZXMvZ2V0dGluZy1zdGFydGVkLXYxLjA3Lm1hbmlmZXN0
+LnhtbDsIIg5hdmFpbGFibGU7CSIRMjA2MDI5NjIxNTMyOwoiCWkzODY7CyIR
+YW1pLTIzNWZiYTRheww7AFQ7BiIMbWFjaGluZTsHIjdlYzItcHVibGljLWlt
+YWdlcy9mZWRvcmEtY29yZTQtYXBhY2hlLm1hbmlmZXN0LnhtbDsIIg5hdmFp
+bGFibGU7CSIRMjA2MDI5NjIxNTMyOwoiCWkzODY7CyIRYW1pLTIzYjY1MzRh
+ew87AFQ7DFsGIg1ENkY2MDUyQTsGIgxtYWNoaW5lOwciTGVjMi1wYWlkLWli
+bS1pbWFnZXMvaW5mb3JtaXgtZHluYW1pYy1zZXJ2ZXItZXhwcmVzcy0zMi1i
+aXQubWFuaWZlc3QueG1sOw0iEWFraS1iMzRiYWNkYTsIIg5hdmFpbGFibGU7
+CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS1iMjRiYWNkYjsKIglpMzg2OwsiEWFt
+aS0yNDRhYWQ0ZHsOOwBUOwYiDG1hY2hpbmU7ByI+ZWMyLXB1YmxpYy1pbWFn
+ZXMvZmVkb3JhLTgteDg2XzY0LWJhc2UtdjEuMDgubWFuaWZlc3QueG1sOw0i
+EWFraS1iNTFjZjlkYzsIIg5hdmFpbGFibGU7CSIRMjA2MDI5NjIxNTMyOw4i
+EWFyaS1iMzFjZjlkYTsKIgt4ODZfNjQ7CyIRYW1pLTI1NDdhMzRjeww7AFQ7
+BiIMbWFjaGluZTsHIjxlYzItcHVibGljLWltYWdlcy9mZWRvcmEtY29yZTQt
+bXlzcWwtdjEuMDcubWFuaWZlc3QueG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYw
+Mjk2MjE1MzI7CiIJaTM4NjsLIhFhbWktMjU1ZmJhNGN7DDsAVDsGIgxtYWNo
+aW5lOwciPWVjMi1wdWJsaWMtaW1hZ2VzL2ZlZG9yYS1jb3JlNC1hcGFjaGUt
+bXlzcWwubWFuaWZlc3QueG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1
+MzI7CiIJaTM4NjsLIhFhbWktMjViNjUzNGN7DDsAVDsGIgxtYWNoaW5lOwci
+M2VjMi1wdWJsaWMtaW1hZ2VzL2RldmVsb3Blci1pbWFnZS5tYW5pZmVzdC54
+bWw7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIglpMzg2OwsiEWFt
+aS0yNmI2NTM0ZnsOOwBUOwYiDG1hY2hpbmU7ByJGL2F3cy1jb25zb2xlLXF1
+aWNrc3RhcnQtYW1pcy9wZXJsLzEuMi9wZXJscXVpY2tzdGFydC5tYW5pZmVz
+dC54bWw7DSIRYWtpLWE3MWNmOWNlOwgiDmF2YWlsYWJsZTsJIhEyMDU2MDU4
+MTk3MTY7DiIRYXJpLWE1MWNmOWNjOwoiCWkzODY7CyIRYW1pLTI3ZTcwMDRl
+ew47AFQ7BiIMbWFjaGluZTsHIj5lYzItcHVibGljLWltYWdlcy9mZWRvcmEt
+OC14ODZfNjQtYmFzZS12MS4wNy5tYW5pZmVzdC54bWw7DSIRYWtpLWI1MWNm
+OWRjOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7DiIRYXJpLWIzMWNm
+OWRhOwoiC3g4Nl82NDsLIhFhbWktMmE1ZmJhNDN7DjsAVDsGIgxtYWNoaW5l
+OwciPGVjMi1wdWJsaWMtaW1hZ2VzL2ZlZG9yYS04LWkzODYtYmFzZS12MS4w
+Ny5tYW5pZmVzdC54bWw7DSIRYWtpLWE3MWNmOWNlOwgiDmF2YWlsYWJsZTsJ
+IhEyMDYwMjk2MjE1MzI7DiIRYXJpLWE1MWNmOWNjOwoiCWkzODY7CyIRYW1p
+LTJiNWZiYTQyew07AFQ7DFsGIg1BNzlFQzBEQjsGIgxtYWNoaW5lOwciN2Vj
+Mi1wdWJsaWMtaW1hZ2VzL2RlbW8tcGFpZC1BTUktdjEuMDcubWFuaWZlc3Qu
+eG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7CiIJaTM4NjsLIhFh
+bWktMmM1ZmJhNDV7DjsAVDsGIgxtYWNoaW5lOwciQGF3cy1jb25zb2xlLXF1
+aWNrc3RhcnQtYW1pcy9waHBxdWlja3N0YXJ0LXYxLjUubWFuaWZlc3QueG1s
+Ow0iEWFraS1mNWMxMjE5YzsIIg5hdmFpbGFibGU7CSIRMjA1NjA1ODE5NzE2
+Ow4iEWFyaS1kYmMxMjFiMjsKIglpMzg2OwsiEWFtaS0yY2IwNTM0NXsOOwBU
+OwYiDG1hY2hpbmU7ByJDZWMyLXB1YmxpYy1pbWFnZXMvZmVkb3JhLWNvcmUt
+Ni14ODZfNjQtYmFzZS12MS4wNy5tYW5pZmVzdC54bWw7DSIRYWtpLWE1M2Fk
+ZmNjOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7DiIRYXJpLWEyM2Fk
+ZmNiOwoiC3g4Nl82NDsLIhFhbWktMmQ1ZmJhNDR7DDsAVDsGIgxtYWNoaW5l
+OwciPWVjMi1wdWJsaWMtaW1hZ2VzL2ZlZG9yYS1jb3JlNC1hcGFjaGUtdjEu
+MDcubWFuaWZlc3QueG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7
+CiIJaTM4NjsLIhFhbWktMmU1ZmJhNDd7DjsAVDsGIgxtYWNoaW5lOwciSWF3
+cy1jb25zb2xlLXF1aWNrc3RhcnQtYW1pcy90b21jYXQvMS4yL3RvbWNhdHF1
+aWNrc3RhcnQubWFuaWZlc3QueG1sOw0iEWFraS1mNWMxMjE5YzsIIg5hdmFp
+bGFibGU7CSIRMjA1NjA1ODE5NzE2Ow4iEWFyaS1kYmMxMjFiMjsKIglpMzg2
+OwsiEWFtaS0yZWIwNTM0N3sMOwBUOwYiDG1hY2hpbmU7ByI+ZWMyLXB1Ymxp
+Yy1pbWFnZXMvZGV2ZWxvcGVyLWltYWdlLWkzODYtdjEuMDcubWFuaWZlc3Qu
+eG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7CiIJaTM4NjsLIhFh
+bWktMmY1ZmJhNDZ7EDsAVDsPIi93ZWJzcGhlcmUtYXBwbGljYXRpb24tc2Vy
+dmVyLTcuMC4wLjktMzJiaXQ7DFsGIg1FM0Q0OENFRTsGIgxtYWNoaW5lOwci
+V2VjMi1wYWlkLWlibS13YXMtdXMtZWFzdC0xL3dlYnNwaGVyZS1hcHBsaWNh
+dGlvbi1zZXJ2ZXItNy4wLjAuOS0zMmJpdC5tYW5pZmVzdC54bWw7DSIRYWtp
+LWRkNjg4MWI0OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7DiIRYXJp
+LWQ3Njg4MWJlOwoiCWkzODY7CyIRYW1pLTMxNmE4MzU4ew87AFQ7DFsGIg01
+NzhCRjVCQTsGIgxtYWNoaW5lOwciSGVjMi1wYWlkLWlibS1pbWFnZXMvaWJt
+LWxvdHVzLWZvcm1zLXR1cmJvLTMuNS4xLTMyLWJpdC5tYW5pZmVzdC54bWw7
+DSIRYWtpLTJkZDMzMDQ0OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7
+DiIRYXJpLTIxZDMzMDQ4OwoiCWkzODY7CyIRYW1pLTM1ZDMzMDVjeww7AFQ7
+BiIMbWFjaGluZTsHIjxlYzItcHVibGljLWltYWdlcy9mZWRvcmEtY29yZTYt
+YmFzZS14ODZfNjQubWFuaWZlc3QueG1sOwgiDmF2YWlsYWJsZTsJIhEyMDYw
+Mjk2MjE1MzI7CiILeDg2XzY0OwsiEWFtaS0zNmZmMWE1ZnsOOwBUOwYiDG1h
+Y2hpbmU7ByIzZWMyLXB1YmxpYy1pbWFnZXMvZ2V0dGluZy1zdGFydGVkLm1h
+bmlmZXN0LnhtbDsNIhFha2ktYTcxY2Y5Y2U7CCIOYXZhaWxhYmxlOwkiETIw
+NjAyOTYyMTUzMjsOIhFhcmktYTUxY2Y5Y2M7CiIJaTM4NjsLIhFhbWktM2M0
+N2EzNTV7DzsAVDsMWwYiDUE5NDA4QjRCOwYiDG1hY2hpbmU7ByJWZWMyLXBh
+aWQtaWJtLWltYWdlcy9pbmZvcm1peC1keW5hbWljLXNlcnZlci13b3JrZ3Jv
+dXAtZWRpdGlvbi02NC1iaXQubWFuaWZlc3QueG1sOw0iEWFraS1kYjRiYWNi
+MjsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS1kZDRiYWNi
+NDsKIgt4ODZfNjQ7CyIRYW1pLTQzNGFhZDJhew47AFQ7BiIMbWFjaGluZTsH
+IkovYXdzLWNvbnNvbGUtcXVpY2tzdGFydC1hbWlzL3RvbWNhdC8xLjEvdG9t
+Y2F0cXVpY2tzdGFydC5tYW5pZmVzdC54bWw7DSIRYWtpLWE3MWNmOWNlOwgi
+DmF2YWlsYWJsZTsJIhEyMDU2MDU4MTk3MTY7DiIRYXJpLWE1MWNmOWNjOwoi
+CWkzODY7CyIRYW1pLTQ1ZTcwMDJjew47AFQ7BiIMbWFjaGluZTsHIjxlYzIt
+cHVibGljLWltYWdlcy9mZWRvcmEtOC1pMzg2LWJhc2UtdjEuMTAubWFuaWZl
+c3QueG1sOw0iEWFraS02ZWFhNDkwNzsIIg5hdmFpbGFibGU7CSIRMjA2MDI5
+NjIxNTMyOw4iEWFyaS00MmI5NWEyYjsKIglpMzg2OwsiEWFtaS00OGFhNDky
+MXsPOwBUOwxbBiINRUE1RjA1QTM7BiIMbWFjaGluZTsHIjplYzItcGFpZC1p
+Ym0taW1hZ2VzL2RiMi13b3JrZ3JvdXAtNjQtYml0Lm1hbmlmZXN0LnhtbDsN
+IhFha2ktODU0OWFlZWM7CCIOYXZhaWxhYmxlOwkiETQ3MDI1NDUzNDAyNDsO
+IhFhcmktNzY0OGFmMWY7CiILeDg2XzY0OwsiEWFtaS00YzQ4YWYyNXsPOwBU
+OwxbBiINQTQ4MTg5NUQ7BiIMbWFjaGluZTsHIjhlYzItcGFpZC1pYm0taW1h
+Z2VzL2RiMi1leHByZXNzLTMyLWJpdC5tYW5pZmVzdC54bWw7DSIRYWtpLTgx
+NDlhZWU4OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7DiIRYXJpLTc3
+NDhhZjFlOwoiCWkzODY7CyIRYW1pLTRkNDhhZjI0ew87AFQ7DFsGIg01NzhC
+RjVCQTsGIgxtYWNoaW5lOwciPmVjMi1wYWlkLWlibS1pbWFnZXMvbG90dXMt
+Zm9ybXMtdHVyYm8tMzItYml0Lm1hbmlmZXN0LnhtbDsNIhFha2ktOGIzZmRl
+ZTI7CCIOYXZhaWxhYmxlOwkiETQ3MDI1NDUzNDAyNDsOIhFhcmktODEzZmRl
+ZTg7CiIJaTM4NjsLIhFhbWktNGQ0ZmFlMjR7DzsAVDsMWwYiDTQ5Q0E3MzA1
+OwYiDG1hY2hpbmU7ByJHZWMyLXBhaWQtaWJtLWltYWdlcy9pYm0tdGl2b2xp
+LWl0bS0wNi4yMS4wMy4wMC0zMmItNTAubWFuaWZlc3QueG1sOw0iEWFraS02
+ODQ4YTgwMTsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS02
+YzQ4YTgwNTsKIglpMzg2OwsiEWFtaS01MDQ4YTgzOXsPOwBUOwxbBiINQ0NF
+QjM2OEI7BiIMbWFjaGluZTsHIkhlYzItcGFpZC1pYm0taW1hZ2VzL2libS10
+aXZvbGktaXRtLTA2LjIxLjAzLjAwLTMyYi0yMDAubWFuaWZlc3QueG1sOw0i
+EWFraS03YzQ4YTgxNTsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4i
+EWFyaS02NDQ4YTgwZDsKIglpMzg2OwsiEWFtaS01MjQ4YTgzYnsOOwBUOwYi
+DG1hY2hpbmU7ByI8ZWMyLXB1YmxpYy1pbWFnZXMvZmVkb3JhLTgtaTM4Ni1i
+YXNlLXYxLjA4Lm1hbmlmZXN0LnhtbDsNIhFha2ktYTcxY2Y5Y2U7CCIOYXZh
+aWxhYmxlOwkiETIwNjAyOTYyMTUzMjsOIhFhcmktYTUxY2Y5Y2M7CiIJaTM4
+NjsLIhFhbWktNTY0N2EzM2Z7DzsAVDsMWwYiDUUzRDQ4Q0VFOwYiDG1hY2hp
+bmU7ByJYZWMyLXBhaWQtaWJtLXdhcy11cy1lYXN0LTEvd2Vic3BoZXJlLWFw
+cGxpY2F0aW9uLXNlcnZlci03LjAuMC4xMS0zMmJpdC5tYW5pZmVzdC54bWw7
+DSIRYWtpLTRhOTA3YTIzOwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7
+DiIRYXJpLTQyOTA3YTJiOwoiCWkzODY7CyIRYW1pLTU4OTc3ZDMxew87AFQ7
+DFsGIg1FQTVGMDVBMzsGIgxtYWNoaW5lOwciSmVjMi1wYWlkLWlibS1pbWFn
+ZXMtZGIyL2libS1kYjItd29ya2dyb3VwLTkuNy5GUDItNjQtYml0Lm1hbmlm
+ZXN0LnhtbDsNIhFha2ktYjI4MTc0ZGI7CCIOYXZhaWxhYmxlOwkiETQ3MDI1
+NDUzNDAyNDsOIhFhcmktODg4MTc0ZTE7CiILeDg2XzY0OwsiEWFtaS01Yzgw
+NzUzNXsOOwBUOwYiDG1hY2hpbmU7ByJGL2F3cy1jb25zb2xlLXF1aWNrc3Rh
+cnQtYW1pcy9ydWJ5LzEuMS9ydWJ5cXVpY2tzdGFydC5tYW5pZmVzdC54bWw7
+DSIRYWtpLWE3MWNmOWNlOwgiDmF2YWlsYWJsZTsJIhEyMDU2MDU4MTk3MTY7
+DiIRYXJpLWE1MWNmOWNjOwoiCWkzODY7CyIRYW1pLTVlZTcwMDM3ew47AFQ7
+BiIMbWFjaGluZTsHIkEvYXdzLWNvbnNvbGUtcXVpY2tzdGFydC1hbWlzL3Bo
+cHF1aWNrc3RhcnQtdjEuNC5tYW5pZmVzdC54bWw7DSIRYWtpLWE3MWNmOWNl
+OwgiDmF2YWlsYWJsZTsJIhEyMDU2MDU4MTk3MTY7DiIRYXJpLWE1MWNmOWNj
+OwoiCWkzODY7CyIRYW1pLTYwZGEzZDA5ew87AFQ7DFsGIg1FM0Q0OENFRTsG
+IgxtYWNoaW5lOwciUWVjMi1wYWlkLWlibS1pbWFnZXMvd2Vic3BoZXJlLWFw
+cGxpY2F0aW9uLXNlcnZlci03LjAuMC4zLTMyLWJpdC5tYW5pZmVzdC54bWw7
+DSIRYWtpLTg2NzA5MGVmOwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7
+DiIRYXJpLTlhNzA5MGYzOwoiCWkzODY7CyIRYW1pLTY2NzE5MTBmew87AFQ7
+DFsGIg1ENkZCMTExMzsGIgxtYWNoaW5lOwciRGVjMi1wYWlkLWlibS1pbWFn
+ZXMvd2Vic3BoZXJlLXNtYXNoLTEuMS4xLjEtMzItYml0Lm1hbmlmZXN0Lnht
+bDsNIhFha2ktNmY3Nzk0MDY7CCIOYXZhaWxhYmxlOwkiETQ3MDI1NDUzNDAy
+NDsOIhFhcmktNjE3Nzk0MDg7CiIJaTM4NjsLIhFhbWktNjc3Njk1MGV7DzsA
+VDsMWwYiDUE0ODE4OTVEOwYiDG1hY2hpbmU7ByJIZWMyLXBhaWQtaWJtLWlt
+YWdlcy1kYjIvaWJtLWRiMi1leHByZXNzLTkuNy5GUDItMzItYml0Lm1hbmlm
+ZXN0LnhtbDsNIhFha2ktOWVkNTNmZjc7CCIOYXZhaWxhYmxlOwkiETQ3MDI1
+NDUzNDAyNDsOIhFhcmktODY4MTc0ZWY7CiIJaTM4NjsLIhFhbWktNmE4MDc1
+MDN7DzsAVDsMWwYiDThGQ0UzRUVCOwYiDG1hY2hpbmU7ByJaZWMyLXBhaWQt
+aWJtLWltYWdlcy9sb3R1cy13ZWItY29udGVudC1tYW5hZ2VtZW50LXN0YW5k
+YXJkLWVkaXRpb24tNjQtYml0Lm1hbmlmZXN0LnhtbDsNIhFha2ktODI0OWFl
+ZWI7CCIOYXZhaWxhYmxlOwkiETQ3MDI1NDUzNDAyNDsOIhFhcmktNDg0OGFm
+MjE7CiILeDg2XzY0OwsiEWFtaS02YzU1YjIwNXsPOwBUOwxbBiINNDc2RDI5
+Q0I7BiIMbWFjaGluZTsHIm9lYzItcGFpZC1pYm0taW1hZ2VzL3dlYnNwaGVy
+ZS1wb3J0YWwtYW5kLWxvdHVzLXdlYi1jb250ZW50LW1hbmFnZW1lbnQtc3Rh
+bmRhcmQtZWRpdGlvbi02NC1iaXQubWFuaWZlc3QueG1sOw0iEWFraS04MzQ5
+YWVlYTsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS00OTQ4
+YWYyMDsKIgt4ODZfNjQ7CyIRYW1pLTZmNTViMjA2ew87AFQ7DFsGIg1ENkY2
+MDUyQTsGIgxtYWNoaW5lOwciRWVjMi1wYWlkLWlibS1pbWFnZXMtaWRzL2li
+bS1pZHMtZXhwcmVzcy0xMS41LXYyMDItMS5tYW5pZmVzdC54bWw7DSIRYWtp
+LTYwNTFiMzA5OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7DiIRYXJp
+LTY0NTFiMzBkOwoiCWkzODY7CyIRYW1pLTc0NTFiMzFkew87AFQ7DFsGIg1B
+NDgxODk1RDsGIgxtYWNoaW5lOwciSGVjMi1wYWlkLWlibS1pbWFnZXMtZGIy
+L2libS1kYjItZXhwcmVzcy05LjcuRlAxLTMyLWJpdC5tYW5pZmVzdC54bWw7
+DSIRYWtpLWJjZTYwYmQ1OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7
+DiIRYXJpLTg4ZTYwYmUxOwoiCWkzODY7CyIRYW1pLTc0ZTAwZDFkew47AFQ7
+DyIbRUMyIENlbnRPUyA1LjQgSFZNIEFNSTsQIhtFQzIgQ2VudE9TIDUuNCBI
+Vk0gQU1JOwYiDG1hY2hpbmU7ByIiYW1hem9uL0VDMiBDZW50T1MgNS40IEhW
+TSBBTUk7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIgt4ODZfNjQ7
+CyIRYW1pLTdlYTI0YTE3exA7AFQ7DyIcZmVkb3JhLTgtaTM4Ni12MS4xNC1z
+dGQ7ECI2RmVkb3JhIDggdjEuMTQgaTM4NiBzdGQtcm9vdCBsdm0tc3dhcCBs
+dm0tc3RvcmFnZTsGIgxtYWNoaW5lOwciI2FtYXpvbi9mZWRvcmEtOC1pMzg2
+LXYxLjE0LXN0ZDsNIhFha2ktOTRjNTI3ZmQ7CCIOYXZhaWxhYmxlOwkiETIw
+NjAyOTYyMTUzMjsOIhFhcmktOTZjNTI3ZmY7CiIJaTM4NjsLIhFhbWktODRk
+YjM5ZWR7EDsAVDsPIh5mZWRvcmEtOC14ODZfNjQtdjEuMTQtc3RkOxAiOEZl
+ZG9yYSA4IHYxLjE0IHg4Nl82NCBzdGQtcm9vdCBsdm0tc3dhcCBsdm0tc3Rv
+cmFnZTsGIgxtYWNoaW5lOwciJWFtYXpvbi9mZWRvcmEtOC14ODZfNjQtdjEu
+MTQtc3RkOw0iEWFraS01NGNlMmMzZDsIIg5hdmFpbGFibGU7CSIRMjA2MDI5
+NjIxNTMyOw4iEWFyaS01NmNlMmMzZjsKIgt4ODZfNjQ7CyIRYW1pLTg2ZGIz
+OWVmew87AFQ7DFsGIg03QTYzRjlGQzsGIgxtYWNoaW5lOwciQGVjMi1wYWlk
+LWlibS1pbWFnZXMvZXh0cmVtZXNjYWxlLTcwLTMyYml0LW5vaWQubWFuaWZl
+c3QueG1sOw0iEWFraS0zMDM4ZGE1OTsIIg5hdmFpbGFibGU7CSIRNDcwMjU0
+NTM0MDI0Ow4iEWFyaS0zMjM4ZGE1YjsKIglpMzg2OwsiEWFtaS1hMDQ2YTRj
+OXsOOwBUOwYiDG1hY2hpbmU7ByJDZWMyLXB1YmxpYy1pbWFnZXMvZmVkb3Jh
+LWNvcmUtNi14ODZfNjQtYmFzZS12MS4wNi5tYW5pZmVzdC54bWw7DSIRYWtp
+LWE1M2FkZmNjOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7DiIRYXJp
+LWEyM2FkZmNiOwoiC3g4Nl82NDsLIhFhbWktYTIxYWZmY2J7DzsAVDsMWwYi
+DUVBNUYwNUEzOwYiDG1hY2hpbmU7ByI+ZWMyLXBhaWQtaWJtLWltYWdlcy9k
+YjItd29ya2dyb3VwLTkuNy02NC1iaXQubWFuaWZlc3QueG1sOw0iEWFraS02
+YmVjMGMwMjsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS02
+ZGVjMGMwNDsKIgt4ODZfNjQ7CyIRYW1pLWEyMWNmY2Niew07AFQ7DFsGIg1F
+QzEyOTcwODsGIgxtYWNoaW5lOwciQWVjMi1wYWlkLWlibS1pbWFnZXMvaWJt
+LWluZm9zcGhlcmUtaXMtd2luY2xpZW50Lm1hbmlmZXN0LnhtbDsIIg5hdmFp
+bGFibGU7CSIRNDcwMjU0NTM0MDI0OwoiCWkzODY7CyIRYW1pLWE4ZTcwNWMx
+ew47AFQ7DyIfRUMyIENlbnRPUyA1LjUgR1BVIEhWTSBBTUk7ECIfRUMyIENl
+bnRPUyA1LjUgR1BVIEhWTSBBTUk7BiIMbWFjaGluZTsHIiZhbWF6b24vRUMy
+IENlbnRPUyA1LjUgR1BVIEhWTSBBTUk7CCIOYXZhaWxhYmxlOwkiETIwNjAy
+OTYyMTUzMjsKIgt4ODZfNjQ7CyIRYW1pLWFhMzBjN2Mzew87AFQ7DFsGIg1B
+NDgxODk1RDsGIgxtYWNoaW5lOwciPGVjMi1wYWlkLWlibS1pbWFnZXMvZGIy
+LWV4cHJlc3MtOS43LTMyLWJpdC5tYW5pZmVzdC54bWw7DSIRYWtpLTlmZWIw
+YmY2OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7DiIRYXJpLTkxZWIw
+YmY4OwoiCWkzODY7CyIRYW1pLWFjMWNmY2M1exA7AFQ7DyIiZ2V0dGluZy1z
+dGFydGVkLXdpdGgtZWJzLWJvb3Q7ECJMRmVkb3JhIDggdjEuMTQgaTM4NiBz
+dGQtcm9vdCBsdm0tc3dhcCBsdm0tc3RvcmFnZSBnZXR0aW5nLXN0YXJ0ZWQt
+Z3VpZGU7BiIMbWFjaGluZTsHIilhbWF6b24vZ2V0dGluZy1zdGFydGVkLXdp
+dGgtZWJzLWJvb3Q7DSIRYWtpLTk0YzUyN2ZkOwgiDmF2YWlsYWJsZTsJIhEy
+MDYwMjk2MjE1MzI7DiIRYXJpLTk2YzUyN2ZmOwoiCWkzODY7CyIRYW1pLWIy
+MzJkMGRiew87AFQ7DFsGIg1ENkZCMTExMzsGIgxtYWNoaW5lOwciPGVjMi1w
+YWlkLWlibS1pbWFnZXMvd2Vic3BoZXJlLXNtYXNoLTMyLWJpdC5tYW5pZmVz
+dC54bWw7DSIRYWtpLTgwNDlhZWU5OwgiDmF2YWlsYWJsZTsJIhE0NzAyNTQ1
+MzQwMjQ7DiIRYXJpLTc0NDhhZjFkOwoiCWkzODY7CyIRYW1pLWI0NTRiM2Rk
+ew07AFQ7DFsGIg1BNzlFQzBEQjsGIgxtYWNoaW5lOwciMWVjMi1wdWJsaWMt
+aW1hZ2VzL2RlbW8tcGFpZC1BTUkubWFuaWZlc3QueG1sOwgiDmF2YWlsYWJs
+ZTsJIhEyMDYwMjk2MjE1MzI7CiIJaTM4NjsLIhFhbWktYmQ5ZDc4ZDR7DjsA
+VDsPIiZXaW5kb3dzLVNlcnZlcjIwMDgtaTM4Ni1CYXNlLXYxMDM7ECI3TWlj
+cm9zb2Z0IFdpbmRvd3MgMjAwOCBEYXRhY2VudGVyIDMyLWJpdCBBTUkgdjEu
+MDM7BiIMbWFjaGluZTsHIi1hbWF6b24vV2luZG93cy1TZXJ2ZXIyMDA4LWkz
+ODYtQmFzZS12MTAzOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7CiIJ
+aTM4NjsLIhFhbWktYzNlNDBkYWF7DjsAVDsPIixXaW5kb3dzLVNlcnZlcjIw
+MDgtaTM4Ni1TcWxFeHByZXNzLXYxMDM7ECJFTWljcm9zb2Z0IFdpbmRvd3Mg
+MjAwOCBEYXRhY2VudGVyIDMyLWJpdCwgU3FsIEV4cHJlc3MsIEFNSSB2MS4w
+MzsGIgxtYWNoaW5lOwciM2FtYXpvbi9XaW5kb3dzLVNlcnZlcjIwMDgtaTM4
+Ni1TcWxFeHByZXNzLXYxMDM7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUz
+MjsKIglpMzg2OwsiEWFtaS1jNWU0MGRhY3sOOwBUOw8iMVdpbmRvd3MtU2Vy
+dmVyMjAwM1IyLXg4Nl82NC1TcWxTdGFuZGFyZC12MTA5OxAiS01pY3Jvc29m
+dCBXaW5kb3dzIDIwMDMgUjIgNjQtYml0LCBTcWwgMjAwNSBTdGFuZGFyZCwg
+QU1JIFJlbGVhc2UgdjEuMDk7BiIMbWFjaGluZTsHIjhhbWF6b24vV2luZG93
+cy1TZXJ2ZXIyMDAzUjIteDg2XzY0LVNxbFN0YW5kYXJkLXYxMDk7CCIOYXZh
+aWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIgt4ODZfNjQ7CyIRYW1pLWM5MWZm
+MGEwew87AFQ7DFsGIg1FQTVGMDVBMzsGIgxtYWNoaW5lOwciSmVjMi1wYWlk
+LWlibS1pbWFnZXMtZGIyL2libS1kYjItd29ya2dyb3VwLTkuNy5GUDEtNjQt
+Yml0Lm1hbmlmZXN0LnhtbDsNIhFha2ktZjhmZDEwOTE7CCIOYXZhaWxhYmxl
+OwkiETQ3MDI1NDUzNDAyNDsOIhFhcmktZmNmZDEwOTU7CiILeDg2XzY0Owsi
+EWFtaS1jZWZkMTBhN3sOOwBUOwYiDG1hY2hpbmU7ByJAYXdzLXRvb2xraXQt
+Zm9yLWVjbGlwc2UtYW1pcy11cy9oYXByb3h5LXYxLjAuMi5tYW5pZmVzdC54
+bWw7DSIRYWtpLWE3MWNmOWNlOwgiDmF2YWlsYWJsZTsJIhEyMDU2MDU4MTk3
+MTY7DiIRYXJpLWE1MWNmOWNjOwoiCWkzODY7CyIRYW1pLWQxY2EyZGI4eww7
+AFQ7BiIMbWFjaGluZTsHIkxlYzItcHVibGljLXdpbmRvd3MtaW1hZ2VzL1Nx
+bFN2ckV4cDIwMDNyMi14ODZfNjQtV2luLXYxLjA3Lm1hbmlmZXN0LnhtbDsI
+Ig5hdmFpbGFibGU7CSIRMjA2MDI5NjIxNTMyOwoiC3g4Nl82NDsLIhFhbWkt
+ZDkyMGMzYjB7DjsAVDsPIihXaW5kb3dzLVNlcnZlcjIwMDgteDg2XzY0LUJh
+c2UtdjEwMzsQIjdNaWNyb3NvZnQgV2luZG93cyAyMDA4IERhdGFjZW50ZXIg
+NjQtYml0IEFNSSB2MS4wMzsGIgxtYWNoaW5lOwciL2FtYXpvbi9XaW5kb3dz
+LVNlcnZlcjIwMDgteDg2XzY0LUJhc2UtdjEwMzsIIg5hdmFpbGFibGU7CSIR
+MjA2MDI5NjIxNTMyOwoiC3g4Nl82NDsLIhFhbWktZDllNDBkYjB7DDsAVDsG
+IgxtYWNoaW5lOwciSmVjMi1wdWJsaWMtd2luZG93cy1pbWFnZXMvU3FsU3Zy
+RXhwMjAwM3IyLWkzODYtV2luLXYxLjA3Lm1hbmlmZXN0LnhtbDsIIg5hdmFp
+bGFibGU7CSIRMjA2MDI5NjIxNTMyOwoiCWkzODY7CyIRYW1pLWRiMjBjM2Iy
+ew87AFQ7DFsGIg1ENjYyRTk4OTsGIgxtYWNoaW5lOwciQGVjMi1wYWlkLWli
+bS1pbWFnZXMvbG90dXMtbWFzaHVwLWNlbnRlci0zMi1iaXQubWFuaWZlc3Qu
+eG1sOw0iEWFraS05YjNmZGVmMjsIIg5hdmFpbGFibGU7CSIRNDcwMjU0NTM0
+MDI0Ow4iEWFyaS05ZjNmZGVmNjsKIglpMzg2OwsiEWFtaS1kYjVjYmRiMnsO
+OwBUOw8iLldpbmRvd3MtU2VydmVyMjAwOC14ODZfNjQtU3FsRXhwcmVzcy12
+MTAzOxAiSU1pY3Jvc29mdCBXaW5kb3dzIDIwMDggRGF0YWNlbnRlciA2NC1i
+aXQsIFNxbCAyMDA4IEV4cHJlc3MgQU1JIHYxLjAzOwYiDG1hY2hpbmU7ByI1
+YW1hem9uL1dpbmRvd3MtU2VydmVyMjAwOC14ODZfNjQtU3FsRXhwcmVzcy12
+MTAzOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7CiILeDg2XzY0Owsi
+EWFtaS1kYmU0MGRiMnsMOwBUOwYiDG1hY2hpbmU7ByJJZWMyLXB1YmxpYy13
+aW5kb3dzLWltYWdlcy9TZXJ2ZXIyMDAzcjIteDg2XzY0LVdpbi12MS4wNy5t
+YW5pZmVzdC54bWw7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIgt4
+ODZfNjQ7CyIRYW1pLWRkMjBjM2I0ew47AFQ7DyIvV2luZG93cy1TZXJ2ZXIy
+MDA4LXg4Nl82NC1TcWxTdGFuZGFyZC12MTAzOxAiSk1pY3Jvc29mdCBXaW5k
+b3dzIDIwMDggRGF0YWNlbnRlciA2NC1iaXQsIFNxbCAyMDA4IFN0YW5kYXJk
+IEFNSSB2MS4wMzsGIgxtYWNoaW5lOwciNmFtYXpvbi9XaW5kb3dzLVNlcnZl
+cjIwMDgteDg2XzY0LVNxbFN0YW5kYXJkLXYxMDM7CCIOYXZhaWxhYmxlOwki
+ETIwNjAyOTYyMTUzMjsKIgt4ODZfNjQ7CyIRYW1pLWRkZTQwZGI0eww7AFQ7
+BiIMbWFjaGluZTsHIkdlYzItcHVibGljLXdpbmRvd3MtaW1hZ2VzL1NlcnZl
+cjIwMDNyMi1pMzg2LVdpbi12MS4wNy5tYW5pZmVzdC54bWw7CCIOYXZhaWxh
+YmxlOwkiETIwNjAyOTYyMTUzMjsKIglpMzg2OwsiEWFtaS1kZjIwYzNiNnsP
+OwBUOw8iG3NsZXMtMTEtc3AxLXYxLjAwLmkzODY7ECJDU1VTRSBMaW51eCBF
+bnRlcnByaXNlIFNlcnZlciAxMSBTZXJ2aWNlIFBhY2sgMSBmb3IgeDg2ICh2
+MS4wMCk7BiIMbWFjaGluZTsHIiJhbWF6b24vc2xlcy0xMS1zcDEtdjEuMDAu
+aTM4NjsNIhFha2ktNDA3ZDk1Mjk7CCIOYXZhaWxhYmxlOwkiETAxMzkwNzg3
+MTMyMjsKIglpMzg2OwsiEWFtaS1lMGEzNTc4OXsPOwBUOw8iHXNsZXMtMTEt
+c3AxLXYxLjAwLng4Nl82NDsQIkZTVVNFIExpbnV4IEVudGVycHJpc2UgU2Vy
+dmVyIDExIFNlcnZpY2UgUGFjayAxIGZvciB4ODZfNjQgKHYxLjAwKTsGIgxt
+YWNoaW5lOwciJGFtYXpvbi9zbGVzLTExLXNwMS12MS4wMC54ODZfNjQ7DSIR
+YWtpLTQyN2Q5NTJiOwgiDmF2YWlsYWJsZTsJIhEwMTM5MDc4NzEzMjI7CiIL
+eDg2XzY0OwsiEWFtaS1lNGEzNTc4ZHsPOwBUOw8iHXNsZXMtMTAtc3AzLXYx
+LjAwLng4Nl82NDsQIkZTVVNFIExpbnV4IEVudGVycHJpc2UgU2VydmVyIDEw
+IFNlcnZpY2UgUGFjayAzIGZvciB4ODZfNjQgKHYxLjAwKTsGIgxtYWNoaW5l
+OwciJGFtYXpvbi9zbGVzLTEwLXNwMy12MS4wMC54ODZfNjQ7DSIRYWtpLTQy
+N2Q5NTJiOwgiDmF2YWlsYWJsZTsJIhEwMTM5MDc4NzEzMjI7CiILeDg2XzY0
+OwsiEWFtaS1lZWEzNTc4N3sOOwBUOw8iKFdpbmRvd3MtU2VydmVyMjAwM1Iy
+LWkzODYtQmFzZS12MTA5OxAiNk1pY3Jvc29mdCBXaW5kb3dzIDIwMDMgUjIg
+RGF0YWNlbnRlciAzMi1iaXQgdjEuMDk7BiIMbWFjaGluZTsHIi9hbWF6b24v
+V2luZG93cy1TZXJ2ZXIyMDAzUjItaTM4Ni1CYXNlLXYxMDk7CCIOYXZhaWxh
+YmxlOwkiETIwNjAyOTYyMTUzMjsKIglpMzg2OwsiEWFtaS1mMTFmZjA5OHsO
+OwBUOwYiDG1hY2hpbmU7ByI+ZWMyLXB1YmxpYy1pbWFnZXMvZmVkb3JhLTgt
+eDg2XzY0LWJhc2UtdjEuMDYubWFuaWZlc3QueG1sOw0iEWFraS1iNTFjZjlk
+YzsIIg5hdmFpbGFibGU7CSIRMjA2MDI5NjIxNTMyOw4iEWFyaS1iMzFjZjlk
+YTsKIgt4ODZfNjQ7CyIRYW1pLWYyMWFmZjliew47AFQ7DyIuV2luZG93cy1T
+ZXJ2ZXIyMDAzUjItaTM4Ni1TcWxFeHByZXNzLXYxMDk7ECJTTWljcm9zb2Z0
+IFdpbmRvd3MgMjAwMyBSMiAzMi1iaXQsIElJUyA2LjAsIFNxbCAyMDA1IEV4
+cHJlc3MsIEFNSSBSZWxlYXNlIHYxLjA5OwYiDG1hY2hpbmU7ByI1YW1hem9u
+L1dpbmRvd3MtU2VydmVyMjAwM1IyLWkzODYtU3FsRXhwcmVzcy12MTA5Owgi
+DmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7CiIJaTM4NjsLIhFhbWktZjMx
+ZmYwOWF7DjsAVDsGIgxtYWNoaW5lOwciPGVjMi1wdWJsaWMtaW1hZ2VzL2Zl
+ZG9yYS04LWkzODYtYmFzZS12MS4wNi5tYW5pZmVzdC54bWw7DSIRYWtpLWE3
+MWNmOWNlOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2MjE1MzI7DiIRYXJpLWE1
+MWNmOWNjOwoiCWkzODY7CyIRYW1pLWY1MWFmZjljew47AFQ7DyIqV2luZG93
+cy1TZXJ2ZXIyMDAzUjIteDg2XzY0LUJhc2UtdjEwOTsQIjZNaWNyb3NvZnQg
+V2luZG93cyAyMDAzIFIyIERhdGFjZW50ZXIgNjQtYml0IHYxLjA5OwYiDG1h
+Y2hpbmU7ByIxYW1hem9uL1dpbmRvd3MtU2VydmVyMjAwM1IyLXg4Nl82NC1C
+YXNlLXYxMDk7CCIOYXZhaWxhYmxlOwkiETIwNjAyOTYyMTUzMjsKIgt4ODZf
+NjQ7CyIRYW1pLWY1MWZmMDljew47AFQ7BiIMbWFjaGluZTsHIj5lYzItcHVi
+bGljLWltYWdlcy9mZWRvcmEtOC14ODZfNjQtYmFzZS12MS4xMC5tYW5pZmVz
+dC54bWw7DSIRYWtpLWEzZDczN2NhOwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2
+MjE1MzI7DiIRYXJpLTdjYjk1YTE1OwoiC3g4Nl82NDsLIhFhbWktZjYxZGZk
+OWZ7DjsAVDsPIjBXaW5kb3dzLVNlcnZlcjIwMDNSMi14ODZfNjQtU3FsRXhw
+cmVzcy12MTA5OxAiU01pY3Jvc29mdCBXaW5kb3dzIDIwMDMgUjIgNjQtYml0
+LCBJSVMgNi4wLCBTcWwgMjAwNSBFeHByZXNzLCBBTUkgUmVsZWFzZSB2MS4w
+OTsGIgxtYWNoaW5lOwciN2FtYXpvbi9XaW5kb3dzLVNlcnZlcjIwMDNSMi14
+ODZfNjQtU3FsRXhwcmVzcy12MTA5OwgiDmF2YWlsYWJsZTsJIhEyMDYwMjk2
+MjE1MzI7CiILeDg2XzY0OwsiEWFtaS1mNzFmZjA5ZXsPOwBUOwxbBiINMjFF
+OUVCQzk7BiIMbWFjaGluZTsHImNlYzItcGFpZC1pYm0taW1hZ2VzLWluZm9z
+cGhlcmUvaWJtLWluZm9zcGhlcmUtZGF0YXN0YWdlLXF1YWxpdHlzdGFnZS1z
+ZXJ2ZXItNjRiaXQubWFuaWZlc3QueG1sOw0iEWFraS1mODU4YmE5MTsIIg5h
+dmFpbGFibGU7CSIRNDcwMjU0NTM0MDI0Ow4iEWFyaS1mNDU4YmE5ZDsKIgt4
+ODZfNjQ7CyIRYW1pLWY4YWQ0MDkxew87AFQ7DFsGIg1ENjYyRTk4OTsGIgxt
+YWNoaW5lOwciQmVjMi1wYWlkLWlibS1pbWFnZXMvaWJtLW1hc2h1cC1jZW50
+ZXItMi4wLTMyLWJpdC5tYW5pZmVzdC54bWw7DSIRYWtpLWY4ZjAxMjkxOwgi
+DmF2YWlsYWJsZTsJIhE0NzAyNTQ1MzQwMjQ7DiIRYXJpLWZhZjAxMjkzOwoi
+CWkzODY7CyIRYW1pLWZlZjAxMjk3
diff --git a/tests/ec2/support/ec2/create-public_ip_describe_instances.da39a3ee5e6b4b0d3255bfef95601890afd80709
b/tests/ec2/support/ec2/create-public_ip_describe_instances.da39a3ee5e6b4b0d3255bfef95601890afd80709
new file mode 100644
index 0000000..55a3a43
--- /dev/null
+++ b/tests/ec2/support/ec2/create-public_ip_describe_instances.da39a3ee5e6b4b0d3255bfef95601890afd80709
@@ -0,0 +1,13 @@
+BAhbBnsYOhRhd3NfaW5zdGFuY2VfaWQiD2ktNzBlZTg4MWQ6FWFtaV9sYXVu
+Y2hfaW5kZXgiBjA6D2F3c19ncm91cHNbBiIMZGVmYXVsdDoWYXdzX2luc3Rh
+bmNlX3R5cGUiDW0xLnNtYWxsOhNhd3Nfc3RhdGVfY29kZSIHMTY6EWF3c19p
+bWFnZV9pZCIRYW1pLTE2YTM1NzdmOhZhd3NfcHJvZHVjdF9jb2Rlc1sAOhph
+d3NfYXZhaWxhYmlsaXR5X3pvbmUiD3VzLWVhc3QtMWE6FXByaXZhdGVfZG5z
+X25hbWUiLmRvbVUtMTItMzEtMzktMEEtNDUtOTMuY29tcHV0ZS0xLmludGVy
+bmFsOhthd3NfcHJpdmF0ZV9pcF9hZGRyZXNzIhExMC4yMTEuNzAuOTc6EmF3
+c19rZXJuZWxfaWQiEWFraS00MDdkOTUyOToOYXdzX3N0YXRlIgxydW5uaW5n
+Og5hd3Nfb3duZXIiETI5Mzc4Nzc0OTg4NDoVbW9uaXRvcmluZ19zdGF0ZSIN
+ZGlzYWJsZWQ6EXNzaF9rZXlfbmFtZSIAOg9hd3NfcmVhc29uIgA6DWRuc19u
+YW1lIjBlYzItMTc0LTEyOS0xMjktMTk1LmNvbXB1dGUtMS5hbWF6b25hd3Mu
+Y29tOhdhd3NfcmVzZXJ2YXRpb25faWQiD3ItMDdlMDYxNmQ6FGF3c19sYXVu
+Y2hfdGltZSIdMjAxMC0xMS0xNlQxMToyNzoyNS4wMDBa
diff --git a/tests/ec2/support/ec2/create-public_ip_launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
b/tests/ec2/support/ec2/create-public_ip_launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
new file mode 100644
index 0000000..9201f5b
--- /dev/null
+++ b/tests/ec2/support/ec2/create-public_ip_launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
@@ -0,0 +1,11 @@
+BAhbBnsXOhRhd3NfaW5zdGFuY2VfaWQiD2ktNThlYjhkMzU6FWFtaV9sYXVu
+Y2hfaW5kZXgiBjA6D2F3c19ncm91cHNbBiIMZGVmYXVsdDoWYXdzX2luc3Rh
+bmNlX3R5cGUiDW0xLnNtYWxsOhNhd3Nfc3RhdGVfY29kZSIMcGVuZGluZzoR
+YXdzX2ltYWdlX2lkIhFhbWktMTZhMzU3N2Y6FmF3c19wcm9kdWN0X2NvZGVz
+WwA6GmF3c19hdmFpbGFiaWxpdHlfem9uZSIPdXMtZWFzdC0xYToVcHJpdmF0
+ZV9kbnNfbmFtZSIAOhJhd3Nfa2VybmVsX2lkIhFha2ktNDA3ZDk1Mjk6DmF3
+c19zdGF0ZSIMcGVuZGluZzoOYXdzX293bmVyIhEyOTM3ODc3NDk4ODQ6FW1v
+bml0b3Jpbmdfc3RhdGUiDWRpc2FibGVkOhFzc2hfa2V5X25hbWUiADoPYXdz
+X3JlYXNvbiIAOg1kbnNfbmFtZSIAOhdhd3NfcmVzZXJ2YXRpb25faWQiD3It
+OTNlNTY0Zjk6FGF3c19sYXVuY2hfdGltZSIdMjAxMC0xMS0xNlQxMTozMjo1
+MC4wMDBa
diff --git a/tests/ec2/support/ec2/launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
b/tests/ec2/support/ec2/launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
new file mode 100644
index 0000000..f33be34
--- /dev/null
+++ b/tests/ec2/support/ec2/launch_instances.c4b6748639aec6ee0563714c9b6663e90253577b
@@ -0,0 +1,11 @@
+BAhbBnsXOhRhd3NfaW5zdGFuY2VfaWQiD2ktNzBlZTg4MWQ6FWFtaV9sYXVu
+Y2hfaW5kZXgiBjA6D2F3c19ncm91cHNbBiIMZGVmYXVsdDoWYXdzX2luc3Rh
+bmNlX3R5cGUiDW0xLnNtYWxsOhNhd3Nfc3RhdGVfY29kZSIMcGVuZGluZzoR
+YXdzX2ltYWdlX2lkIhFhbWktMTZhMzU3N2Y6FmF3c19wcm9kdWN0X2NvZGVz
+WwA6GmF3c19hdmFpbGFiaWxpdHlfem9uZSIPdXMtZWFzdC0xYToVcHJpdmF0
+ZV9kbnNfbmFtZSIAOhJhd3Nfa2VybmVsX2lkIhFha2ktNDA3ZDk1Mjk6DmF3
+c19zdGF0ZSIMcGVuZGluZzoOYXdzX293bmVyIhEyOTM3ODc3NDk4ODQ6FW1v
+bml0b3Jpbmdfc3RhdGUiDWRpc2FibGVkOhFzc2hfa2V5X25hbWUiADoPYXdz
+X3JlYXNvbiIAOg1kbnNfbmFtZSIAOhdhd3NfcmVzZXJ2YXRpb25faWQiD3It
+MDdlMDYxNmQ6FGF3c19sYXVuY2hfdGltZSIdMjAxMC0xMS0xNlQxMToyNzoy
+NS4wMDBa
-- 
1.7.3.2


Mime
View raw message