Error while using REST API with Ovirt

Dear Experts. We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4. We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init. Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code. But post this Manager getting handed. Error code is attached. Need your help please. Regards, Chandrahasa S =====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you

On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name": String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest); Then, after the update, you need to start the VM and it will use that configuration: String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest); Some advices: * Check the XML schema for the structure of the XML documents: https://rhevmanager/api?schema * When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers: yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml"); * Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again. * If you are planning to do complex things you may find it helpful the Java SDK: http://www.ovirt.org/Java-sdk -- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

Dear Juan / All, Thanks for reply. I tried to give the hostname with the tag mentioned "host_name". Its working. So below are the issues still remaining: 1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm. 2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm. 3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload. Error attached. Regards, Chandrahasa S From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name": String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest); Then, after the update, you need to start the VM and it will use that configuration: String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest); Some advices: * Check the XML schema for the structure of the XML documents: https://rhevmanager/api?schema * When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers: yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml"); * Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again. * If you are planning to do complex things you may find it helpful the Java SDK: http://www.ovirt.org/Java-sdk -- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L. =====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you

On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug: https://bugzilla.redhat.com/1144005 The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer exception. The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database, but in the RESTAPI it is "static". To workaround this issue you can delete the VMs and create them again with the correct boot protocol. If you don't want to create the VMs again you can fix the database manually like this: # su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug:
https://bugzilla.redhat.com/1144005
The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer exception.
The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database, but in the RESTAPI it is "static".
To workaround this issue you can delete the VMs and create them again with the correct boot protocol.
If you don't want to create the VMs again you can fix the database manually like this:
# su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me. Yes on RunVm we send the cloud-init params only the first time, ie when the is_initialized flag is false in vm_static table, You can resend the existing cloud-init params (and override them) via the RunOnce - I believe that if you run the VM via Rest with the <initialization>
On 18.09.14 15:00, Juan Hernandez wrote: section it will run via RunOnce.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
In 3.5 we have a filed vm_hostname, regarding the IP you can provide the Sysprep file in the Initialization/Sysprep elements (not sure that is the right name, Juan?) - please note that if you do provide it we send the Sysprep as is and not replace the vm_hostname and other fields that user provided.
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

This is a multipart message in MIME format. --=_alternative 00198BD465257D5C_= MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBKdWFuLA0KDQpUaGFua3MgbG90IGZvciBzdXBwb3J0Lg0KDQpJbnRlcm5hbCBzZXJ2ZXIg ZXJyb3IgaXNzdWUgYWxzbyByZXNvbHZlZCB3aXRoIGxpbnV4IGd1ZXN0cy4gTm93IHdlIGFyZSAN CmFibGUgdG8gcHJvdmlkZSBpcCBhbmQgaG9zdG5hbWUgdG8gbGludXggZ3Vlc3RzIGluIHJoZXYg My40IHN1Y2Nlc3NmdWxseSANCnZpYSBSRVNUQVBJIGdpdmluZyBib290IHByb3RvY29sIGFzICAg ICAic3RhdGljIiBhcyBhZHZpc2VkLg0KDQogICAgICAgIEZvciBXaW5kb3dzIEd1ZXN0IHdlIGRp ZCB0aGUgZm9sbG93aW5nOg0KMSkgICAgICBQcmVwYXJlZCBhIHRlbXBsYXRlIHdpdGggZ3Vlc3Qg YWdlbnRzIGluc3RhbGxlZCBhbmQgZGVwbG95ZWQgYSB2bSANCnN1Y2Nlc3NmdWxseSB0aHJvdWdo IFJFU1RBUEkuDQoyKSAgICAgIEZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBwYXJ0IHNhbWUgYXMg TGludXggZ3Vlc3QgZGlkIG5vdCB3b3JrIGluIA0KdGhpcyBjYXNlIGFuZCBpdCBnaXZlcyBkZWZh dWx0L2dhcmJhZ2UgaXAsaG9zdG5hbWUgdG8gdGhlIHZtLg0KMykgICAgICBTbyB3ZSB0cmllZCBn aXZpbmcgaXQgdGhyb3VnaCBzeXNwcmVwL3BheWxvYWQgdGFnIHRocm91Z2ggUkVTVCANCkFQSS4g Q29kZSBzbmlwcGV0IGlzIGFzIGZvbGxvd3M6DQoNCiAgICAgICAgSHR0cFB1dCBwdXQgPSBuZXcg SHR0cFB1dCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiDQpodHRw czovL3JoZXZtYW5hZ2VyL2FwaS92bXMvN2RhYzc0ZDItYzUwNC00YmJkLTg2NTktYzg3NzNhODQ0 Y2IzLyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGlucHV0WE1MMSA9ICI8P3ht bCB2ZXJzaW9uPVwiMS4wXCI/PiIgDQovKiI8dm0+IiovDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyI8c3NvPiIrIjxtZXRob2RzPiIrIjxtZXRob2QgDQppZD1cIiIr IkdVRVNUX0FHRU5UIisiXCIvPiIrIjwvbWV0aG9kcz4iKyI8L3Nzbz4iDQogKyI8ZG9tYWluPiIr IjxuYW1lPnVsdGltYXRpeHVhdC5uZXQ8L25hbWU+IisiPC9kb21haW4+Ig0KIA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiPHBheWxvYWRzPiIrIjxwYXlsb2FkIA0K dHlwZT1cIiIrImZsb3BweSIrIlwiPiIrICI8ZmlsZXM+IisiPGZpbGU+Ig0KICsiPG5hbWU+L1dF Qi1JTkYvc3lzcHJlcC54bWw8L25hbWU+IiANCiArIjwvZmlsZT4iKyI8L2ZpbGVzPiIrIjwvcGF5 bG9hZD4iKyI8L3BheWxvYWRzPiINCiArIjxyZXBvcnRlZF9kZXZpY2VzPiIrIjxyZXBvcnRlZF9k ZXZpY2U+IisiPGlwcz4iKyI8aXAgDQphZGRyZXNzPVwiIisiMS4xLjEuMSIrIlwiLzwvaXBzPiIN CiANCiANCisiPGZxZG4+V0lOLUFTMDVFT0FEQXdlcndlcjwvZnFkbj4iKyI8L3JlcG9ydGVkX2Rl dmljZT4iKyI8cmVwb3J0ZWRfZGV2aWNlcz4iOw0KIA0KICAgICAgICAgICAgICAgICAgICAgICAg U3RyaW5nRW50aXR5IGlucHV0MSA9IG5ldyBTdHJpbmdFbnRpdHkoaW5wdXRYTUwxKTsNCiAgICAg ICAgICAgICAgICAgICAgICAgIHB1dC5zZXRFbnRpdHkoaW5wdXQxKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIHB1dC5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94bWwi KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBSZXNwb25zZSByZXNwb25zZU5JQyA9IA0K aHR0cGNsaWVudC5leGVjdXRlKHB1dCk7DQogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0u b3V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByaW50bG4oIlJF U1BPTlNFIA0KOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogIg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlc3BvbnNl TklDKTsNCiANCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJkMSA9IG5l dyBCdWZmZXJlZFJlYWRlcihuZXcgDQpJbnB1dFN0cmVhbVJlYWRlcigNCiByZXNwb25zZU5JQy5n ZXRFbnRpdHkoKS5nZXRDb250ZW50KCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu ZyBsaW5lMSA9ICIiOw0KICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lMSA9IHJk MS5yZWFkTGluZSgpKSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN5c3RlbS5vdXQucHJpbnRsbigiTElORSA6Ojo6Ojo6Ojo6Ojo6ICIgKyANCmxpbmUxKTsNCiAg ICAgICAgICAgICAgICAgICAgICAgIH0NCiANCiAgICAgICAgVGhlIG91dHB1dCBzYXlzIHRoYXQg bXkgY29kZSBpcyBzeW50YWN0aWNhbGx5IGluY29ycmVjdC4gSSBhbSBub3QgDQp2ZXJ5IHN1cmUg YXMgdG8gd2hhdCBoYXMgdG8gYmUgdGhlIGNvbnRlbnQgb2YgInN5c3ByZXAueG1sIiBmaWxlIGFu ZCB3aGF0IA0KaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QgaGVyZS4NCiANCiAgICAgICAgQWxz byB3aGlsZSBkZXBsb3lpbmcgdGhlIHdpbmRvd3MgbWFjaGluZSBtYW51YWxseSB0aHJvdWdoIHRo ZSByaGV2IA0KbWFuYWdlciAsIHdoaWxlIHVzaW5nIHN5c3ByZXAgb3B0aW9uIGluICJydW4gb25j ZSIgLCBJIGFtIHVuYWJsZSB0byBmaW5kIA0KdGhlIGlwIGFuZCBob3N0bmFtZSBvcHRpb25zIGFz IGZvdW5kICAgIGZvciBsaW51eCAgICAgICBtYWNoaW5lcy4NCiANCg0KUmVnYXJkcywNCkNoYW5k cmFoYXNhIFMNCg0KDQoNCkZyb206ICAgSnVhbiBIZXJuYW5kZXogPGpoZXJuYW5kQHJlZGhhdC5j b20+DQpUbzogICAgIENoYW5kcmFoYXNhIFMgPGNoYW5kcmFoYXNhLnNAdGNzLmNvbT4NCkNjOiAg ICAgQWdhcndhbCBSdWNoaXRhIDxhZ2Fyd2FsLnJ1Y2hpdGFAdGNzLmNvbT4sIHVzZXJzQG92aXJ0 Lm9yZywgDQoiJ1NoYWhhciBIYXZpdmknIiA8c2hhdml2aUByZWRoYXQuY29tPg0KRGF0ZTogICAw OS8xOC8yMDE0IDA2OjMwIFBNDQpTdWJqZWN0OiAgICAgICAgUmU6IFtvdmlydC11c2Vyc10gRXJy b3Igd2hpbGUgdXNpbmcgUkVTVCBBUEkgd2l0aCBPdmlydA0KDQoNCg0KT24gMDkvMTgvMjAxNCAw MTozOSBQTSwgQ2hhbmRyYWhhc2EgUyB3cm90ZToNCj4gRGVhciBKdWFuIC8gQWxsLA0KPiANCj4g VGhhbmtzIGZvciByZXBseS4NCj4gDQo+ICBJIHRyaWVkIHRvIGdpdmUgdGhlIGhvc3RuYW1lIHdp dGggdGhlIHRhZyBtZW50aW9uZWQgImhvc3RfbmFtZSIuIEl0cw0KPiB3b3JraW5nLg0KPiANCj4g ICAgICAgICBTbyBiZWxvdyBhcmUgdGhlIGlzc3VlcyBzdGlsbCByZW1haW5pbmc6DQo+IA0KPiAg ICAgICAgIDEpIFRoZSBpc3N1ZSBvZiBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3Igc3RpbGwgcGVyc2l0 cyAocmhldg0KPiBtYW5hZ2VyIHNob3dpbmcgaXNzdWVzKSBldmVuIGFmdGVyIGZvbGxvd2luZyB0 aGUgYWR2aWNlIG9mIHRoZSBleHBlcnQNCj4gYW5kIGRvaW5nIHRoZSBpbml0aWFsaXphdGlvbiBw YXJ0IGp1c3Qgb25jZShnaXZpbmcgaXAgYW5kIA0KPiAgaG9zdG5hbWUpIGFmdGVyIGNyZWF0aW5n IHRoZSB2bS4NCj4gDQoNCkFjdHVhbGx5IHRoaXMgaXMgYSBidWc6DQoNCmh0dHBzOi8vYnVnemls bGEucmVkaGF0LmNvbS8xMTQ0MDA1DQoNClRoZSByZWFzb24gaXMgdGhhdCB3aGVuIHlvdSB1c2Ug YW4gaW5jb3JyZWN0IGJvb3QgcHJvdG9jb2wgd2UgZW5kIHVwDQpzdG9yaW5nIG51bGwgaW4gdGhl IGNvcnJlc3BvbmRpbmcgcGxhY2UgaW4gdGhlIGRhdGFiYXNlLCBhbmQgbGF0ZXIgd2UNCnVzZSB0 aGUgdmFsdWUgd2l0aG91dCBjaGVja2luZyBpdCwgd2hpY2ggdHJpZ2dlcnMgYSBudWxsIHBvaW50 ZXIgDQpleGNlcHRpb24uDQoNClRoZSByaWdodCB2YWx1ZSBmb3IgdGhlIGJvb3QgcHJvdG9jb2wg aXMgInN0YXRpYyIsIG5vdCAiU1RBVElDX0lQIi4gVGhlDQoiU1RBVElDX0lQIiB2YWx1ZSBpcyB3 aGF0IHdlIHVzZSBpbiB0aGUgYmFja2VuZCBhbmQgaW4gdGhlIGRhdGFiYXNlLCBidXQNCmluIHRo ZSBSRVNUQVBJIGl0IGlzICJzdGF0aWMiLg0KDQpUbyB3b3JrYXJvdW5kIHRoaXMgaXNzdWUgeW91 IGNhbiBkZWxldGUgdGhlIFZNcyBhbmQgY3JlYXRlIHRoZW0gYWdhaW4NCndpdGggdGhlIGNvcnJl Y3QgYm9vdCBwcm90b2NvbC4NCg0KSWYgeW91IGRvbid0IHdhbnQgdG8gY3JlYXRlIHRoZSBWTXMg YWdhaW4geW91IGNhbiBmaXggdGhlIGRhdGFiYXNlDQptYW51YWxseSBsaWtlIHRoaXM6DQoNCiMg c3UgLSBwb3N0Z3Jlcw0KIyBwc3FsDQpwb3N0Z3Jlcz0jIFxjIGVuZ2luZQ0KZW5naW5lPSMgdXBk YXRlIHZtX2luaXQgc2V0IG5ldHdvcmtzID0gcmVwbGFjZShuZXR3b3JrcywgJyJib290UHJvdG9j b2wiDQo6IG51bGwnLCAnImJvb3RQcm90b2NvbCIgOiAiU1RBVElDX0lQIicpOw0KDQo+ICAgICAg ICAgMikgUGxlYXNlIGNvbmZpcm0gaWYgdGhpcyBpcyB0aGUgY2FzZSB0aGF0ICB3ZSBjYW4gZG8N Cj4gaW5pdGlhbGl6YXRpb24gcGFydCBvbmx5IG9uY2Ugb24gYSBwYXJ0aWN1bGFyIHZtICwgdGhl biB3ZSBjYW4NCj4gcmVjb25maWd1cmUgdGhlIG5ldHdvcmsgKGlwLCBzdWJuZXQsIGdhdGV3YXkg ZXRjKQ0KPiAgICAgICAgICAgICBvciBub3QgZm9yIHRoYXQgdm0uDQo+IA0KDQpJJ20gcmVhc29u YWJseSBzdXJlIHRoYXQgeW91IGNhbiBydW4gaW5pdGlhbGl6YXRpb24gb25seSBvbmNlIHBlciBW TSwNCmJ1dCBTaGFoYXIgY2FuIGNvbmZpcm0gdGhpcyBiZXR0ZXIgdGhhbiBtZS4NCg0KPiAgICAg ICAgIDMpIEZvciBXaW5kb3dzIGd1ZXN0IHdlIGFyZSBzdGlsbCB1bmFibGUgdG8gcHJvdmlkZSBp cCBkZXRhaWxzDQo+IGFuZCBob3N0bmFtZSB1c2luZyBzeXNwcmVwL3BheWxvYWQuDQo+IA0KDQpJ J20gbm90IGZhbWlsaWFyIHdpdGggU3lzcHJlcC4gQ2FuIHlvdSBwcm92aWRlIGFuIGV4YW1wbGUg b2YgdGhlIGNvZGUNCnRoYXQgeW91IGFyZSB1c2luZyBmb3IgdGhhdD8NCg0KPiBFcnJvciBhdHRh Y2hlZC4NCj4gDQo+IA0KPiANCj4gUmVnYXJkcywNCj4gQ2hhbmRyYWhhc2EgUw0KPiANCj4gDQo+ IA0KPiBGcm9tOiAgICAgICAgSnVhbiBIZXJuYW5kZXogPGpoZXJuYW5kQHJlZGhhdC5jb20+DQo+ IFRvOiAgICAgICAgQ2hhbmRyYWhhc2EgUyA8Y2hhbmRyYWhhc2Euc0B0Y3MuY29tPiwgdXNlcnNA b3ZpcnQub3JnDQo+IENjOiAgICAgICAgQWdhcndhbCBSdWNoaXRhIDxhZ2Fyd2FsLnJ1Y2hpdGFA dGNzLmNvbT4NCj4gRGF0ZTogICAgICAgIDA5LzE4LzIwMTQgMDM6MzUgUE0NCj4gU3ViamVjdDog ICAgICAgIFJlOiBbb3ZpcnQtdXNlcnNdIEVycm9yIHdoaWxlIHVzaW5nIFJFU1QgQVBJIHdpdGgg T3ZpcnQNCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiANCj4gDQo+IE9uIDA5LzE4LzIwMTQgMDg6 MTggQU0sIENoYW5kcmFoYXNhIFMgd3JvdGU6DQo+PiBEZWFyIEV4cGVydHMuDQo+Pg0KPj4gV2Ug YXJlIEludGVncmF0aW5nIG91ciBpbnRlcm5hbCBjbG91ZCBwb3J0YWwgd2l0aCAgT3ZpcnQgLyBS SEVWTSANCnZlcnNpb24NCj4+IDMuNC4NCj4+DQo+PiBXZSBhcmUgaW50ZWdyYXRpbmcgb3VyIGlu dGVybmFsIGNsb3VkIHdpdGggT3ZpcnQgLyBSSEVWTS4gVk0gdGVtcGxhdGUNCj4+IGNyZWF0ZWQg dXNpbmcgY2xvdWQgaW5pdC4NCj4+DQo+PiBUaHJvdWdoIFJFU1QgQVBJIE5pcHBldCB3aGlsZSBj b2RlcyBwYXNzZXMgY29tbWFuZCB0byB0ZW1wbGF0ZSAoIHdpdGgNCj4+IGNsb3VkIGluaXQpIElQ LCBIT1NUTkFNRSwgV2UgYXJlIGFibGUgdG8gc2V0IElQIGFuZCBIb3N0bmFtZSB0byBWTQ0KPj4g dGhyb3VnaCBjb2RlLg0KPj4NCj4+IEJ1dCBwb3N0IHRoaXMgTWFuYWdlciBnZXR0aW5nIGhhbmRl ZC4gRXJyb3IgY29kZSBpcyBhdHRhY2hlZC4NCj4+DQo+PiBOZWVkIHlvdXIgaGVscCBwbGVhc2Uu DQo+Pg0KPiANCj4gSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSB5b3UgYWxyZWFkeSBjcmVhdGVk IGEgdGVtcGxhdGUgd2l0aCB0aGUgY2xvdWQNCj4gaW5pdCBjb25maWd1cmF0aW9uLCB0aGVuIHlv dSBjcmVhdGVkIGEgVk0gZnJvbSB0aGF0IHRlbXBsYXRlLCBhbmQgeW91DQo+IHdhbnQgdG8gbW9k aWZ5IGl0IGFuZCBzdGFydCBpdC4gSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBWTSB5b3UgbmVlZCB0 bw0KPiBpc3N1ZSBhIFBVVCByZXF1ZXN0LCBhbmQgdGhlIHRhZyBuYW1lIGZvciB0aGUgaG9zdCBp cyAiaG9zdF9uYW1lIjoNCj4gDQo+ICAgIFN0cmluZyB1cGRhdGVYbWwgPQ0KPiAgICAgICAgICAi PD94bWwgdmVyc2lvbj1cIjEuMFwiPz4iDQo+ICAgICAgICArICI8dm0+Ig0KPiAgICAgICAgKyAg ICI8aW5pdGlhbGl6YXRpb24+Ig0KPiAgICAgICAgKyAgICAgIjxob3N0X25hbWU+bWVnaGFhc2Fk bWluLnVsdGltYXRpeHVhdC5uZXQ8L2hvc3RfbmFtZT4iDQo+ICAgICAgICArICAgICAiPHJlZ2Vu ZXJhdGVfc3NoX2tleXM+ZmFsc2U8L3JlZ2VuZXJhdGVfc3NoX2tleXM+Ig0KPiAgICAgICAgKyAg ICAgIjxuaWNfY29uZmlndXJhdGlvbnM+Ig0KPiAgICAgICAgKyAgICAgICAiPG5pY19jb25maWd1 cmF0aW9uPiINCj4gICAgICAgICsgICAgICAgICAiPG5hbWU+ZXRoMDwvbmFtZT4iDQo+ICAgICAg ICArICAgICAgICAgIjxpcCBhZGRyZXNzPVwiMS4xLjEuMVwiIG5ldG1hc2s9XCIyNTUuMjU1LjI1 NS4wXCINCj4gZ2F0ZXdheT1cIjEzLjMuMy4zXCIvPiINCj4gICAgICAgICsgICAgICAgICAiPGJv b3RfcHJvdG9jb2w+c3RhdGljPC9ib290X3Byb3RvY29sPiINCj4gICAgICAgICsgICAgICAgICAi PG9uX2Jvb3Q+dHJ1ZTwvb25fYm9vdD4iDQo+ICAgICAgICArICAgICAgICI8L25pY19jb25maWd1 cmF0aW9uPiINCj4gICAgICAgICsgICAgICI8L25pY19jb25maWd1cmF0aW9ucz4iDQo+ICAgICAg ICArICAgIjwvaW5pdGlhbGl6YXRpb24+Ig0KPiAgICAgICAgKyAiPC92bT4iOw0KPiAgICBTdHJp bmdFbnRpdHkgdXBkYXRlRW50aXR5ID0gbmV3IFN0cmluZ0VudGl0eSh1cGRhdGVYbWwpOw0KPiAg ICBIdHRwUHV0IHVwZGF0ZVJlcXVlc3QgPSBuZXcgSHR0cFB1dChhcGlVcmwgKyAiL3Ztcy8iICsg dm1JZCk7DQo+ICAgIHVwZGF0ZVJlcXVlc3Quc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBw bGljYXRpb24veG1sIik7DQo+ICAgIHVwZGF0ZVJlcXVlc3Quc2V0SGVhZGVyKCJBY2NlcHQiLCAi YXBwbGljYXRpb24veG1sIik7DQo+ICAgIHVwZGF0ZVJlcXVlc3Quc2V0RW50aXR5KHVwZGF0ZUVu dGl0eSk7DQo+ICAgIEh0dHBSZXNwb25zZSB1cGRhdGVSZXNwb25zZSA9IGNsaWVudC5leGVjdXRl KHVwZGF0ZVJlcXVlc3QpOw0KPiANCj4gVGhlbiwgYWZ0ZXIgdGhlIHVwZGF0ZSwgeW91IG5lZWQg dG8gc3RhcnQgdGhlIFZNIGFuZCBpdCB3aWxsIHVzZSB0aGF0DQo+IGNvbmZpZ3VyYXRpb246DQo+ IA0KPiAgICBTdHJpbmcgc3RhcnRYbWwgPQ0KPiAgICAgICAgICAiPD94bWwgdmVyc2lvbj1cIjEu MFwiPz4iDQo+ICAgICAgICArICI8YWN0aW9uLz4iOw0KPiAgICBTdHJpbmdFbnRpdHkgc3RhcnRF bnRpdHkgPSBuZXcgU3RyaW5nRW50aXR5KHN0YXJ0WG1sKTsNCj4gICAgSHR0cFBvc3Qgc3RhcnRS ZXF1ZXN0ID0gbmV3IEh0dHBQb3N0KGFwaVVybCArICIvdm1zLyIgKyB2bUlkICsNCj4gIi9zdGFy dCIpOw0KPiAgICBzdGFydFJlcXVlc3Quc2V0RW50aXR5KHN0YXJ0RW50aXR5KTsNCj4gICAgc3Rh cnRSZXF1ZXN0LnNldEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3htbCIpOw0K PiAgICBzdGFydFJlcXVlc3Quc2V0SGVhZGVyKCJBY2NlcHQiLCAiYXBwbGljYXRpb24veG1sIik7 DQo+ICAgIEh0dHBSZXNwb25zZSBzdGFydFJlc3BvbnNlID0gY2xpZW50LmV4ZWN1dGUoc3RhcnRS ZXF1ZXN0KTsNCj4gDQo+IFNvbWUgYWR2aWNlczoNCj4gDQo+ICogQ2hlY2sgdGhlIFhNTCBzY2hl bWEgZm9yIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBkb2N1bWVudHM6DQo+IA0KPiAgaHR0cHM6 Ly9yaGV2bWFuYWdlci9hcGk/c2NoZW1hDQo+IA0KPiAqIFdoZW4gc2VuZGluZyByZXF1ZXN0cyB0 byB0aGUgUkVTVEFQSSBtYWtlcyBzdXJlIHRvIGFsd2F5cyBleHBsaWNpdGx5DQo+IGFkZCB0aGUg Q29udGVudC1UeXBlIGFuZCBBY2NlcHQgaGVhZGVyczoNCj4gDQo+ICB5b3VyUmVxdWVzdC5zZXRI ZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94bWwiKTsNCj4gIHlvdXJSZXF1ZXN0 LnNldEhlYWRlcigiQWNjZXB0IiwgImFwcGxpY2F0aW9uL3htbCIpOw0KPiANCj4gKiBUYWtlIGlu dG8gYWNjb3VudCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiB3aXRoIGNsb3VkLWluaXQgd2lsbCBv bmx5IGJlDQo+IGV4ZWN1dGVkIHRoZSBmaXJzdCB0aW1lIHlvdSBzdGFydCB0aGUgVk0sIHNvIGlu IHlvdXIgdGVzdHMgeW91IHdpbGwgbmVlZA0KPiB0byByZW1vdmUgdGhlIFZNIGFuZCBjcmVhdGUg aXQgYWdhaW4uDQo+IA0KPiAqIElmIHlvdSBhcmUgcGxhbm5pbmcgdG8gZG8gY29tcGxleCB0aGlu Z3MgeW91IG1heSBmaW5kIGl0IGhlbHBmdWwgdGhlDQo+IEphdmEgU0RLOg0KPiANCj4gIGh0dHA6 Ly93d3cub3ZpcnQub3JnL0phdmEtc2RrDQo+IA0KDQotLSANCkRpcmVjY2nDs24gQ29tZXJjaWFs OiBDL0pvc2UgQmFyZGFzYW5vIEJhb3MsIDksIEVkaWYuIEdvcmJlYSAzLCBwbGFudGENCjPCukQs IDI4MDE2IE1hZHJpZCwgU3BhaW4NCkluc2NyaXRhIGVuIGVsIFJlZy4gTWVyY2FudGlsIGRlIE1h ZHJpZCDigJMgQy5JLkYuIEI4MjY1Nzk0MSAtIFJlZCBIYXQgUy5MLg0KDQoNCj09PT09LS0tLS09 PT09PS0tLS0tPT09PT0KTm90aWNlOiBUaGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMg ZS1tYWlsCm1lc3NhZ2UgYW5kL29yIGF0dGFjaG1lbnRzIHRvIGl0IG1heSBjb250YWluIApjb25m aWRlbnRpYWwgb3IgcHJpdmlsZWdlZCBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSAKbm90IHRoZSBp bnRlbmRlZCByZWNpcGllbnQsIGFueSBkaXNzZW1pbmF0aW9uLCB1c2UsIApyZXZpZXcsIGRpc3Ry aWJ1dGlvbiwgcHJpbnRpbmcgb3IgY29weWluZyBvZiB0aGUgCmluZm9ybWF0aW9uIGNvbnRhaW5l ZCBpbiB0aGlzIGUtbWFpbCBtZXNzYWdlIAphbmQvb3IgYXR0YWNobWVudHMgdG8gaXQgYXJlIHN0 cmljdGx5IHByb2hpYml0ZWQuIElmIAp5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGNvbW11bmljYXRp b24gaW4gZXJyb3IsIApwbGVhc2Ugbm90aWZ5IHVzIGJ5IHJlcGx5IGUtbWFpbCBvciB0ZWxlcGhv bmUgYW5kIAppbW1lZGlhdGVseSBhbmQgcGVybWFuZW50bHkgZGVsZXRlIHRoZSBtZXNzYWdlIAph bmQgYW55IGF0dGFjaG1lbnRzLiBUaGFuayB5b3UKCgo= --=_alternative 00198BD465257D5C_= MIME-Version: 1.0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPkRlYXIgSnVhbiw8L2ZvbnQ+DQo8YnI+DQo8 YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPlRoYW5rcyBsb3QgZm9yIHN1cHBvcnQu PC9mb250Pg0KPGJyPg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlmIj5JbnRlcm5h bCBzZXJ2ZXIgZXJyb3IgaXNzdWUgYWxzbyByZXNvbHZlZA0Kd2l0aCBsaW51eCBndWVzdHMuIE5v dyB3ZSBhcmUgYWJsZSB0byBwcm92aWRlIGlwIGFuZCBob3N0bmFtZSB0byBsaW51eA0KZ3Vlc3Rz IGluIHJoZXYgMy40IHN1Y2Nlc3NmdWxseSB2aWEgUkVTVEFQSSBnaXZpbmcgYm9vdCBwcm90b2Nv bCBhcyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZxdW90O3N0YXRpYyZxdW90OyBhcyBh ZHZpc2VkLjwvZm9udD4NCjxicj4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IEZvcg0KV2luZG93cyBHdWVzdCB3ZSBkaWQgdGhl IGZvbGxvd2luZzo8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPjEp ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1ByZXBhcmVkDQphIHRlbXBsYXRlIHdpdGggZ3Vl c3QgYWdlbnRzIGluc3RhbGxlZCBhbmQgZGVwbG95ZWQgYSB2bSBzdWNjZXNzZnVsbHkgdGhyb3Vn aA0KUkVTVEFQSS48L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPjIp ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0ZvbGxvd2luZw0KaW5pdGlhbGl6YXRpb24gcGFy dCBzYW1lIGFzIExpbnV4IGd1ZXN0IGRpZCBub3Qgd29yayBpbiB0aGlzIGNhc2UgYW5kIGl0DQpn aXZlcyBkZWZhdWx0L2dhcmJhZ2UgaXAsaG9zdG5hbWUgdG8gdGhlIHZtLjwvZm9udD4NCjxicj48 Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+MykgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwO1NvDQp3ZSB0cmllZCBnaXZpbmcgaXQgdGhyb3VnaCBzeXNwcmVwL3BheWxvYWQg dGFnIHRocm91Z2ggUkVTVCBBUEkuIENvZGUgc25pcHBldA0KaXMgYXMgZm9sbG93czo8L2ZvbnQ+ DQo8YnI+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyBIdHRwUHV0DQpwdXQgPSBuZXcgSHR0cFB1dCg8L2ZvbnQ+DQo8YnI+PGZv bnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm cXVvdDs8L2ZvbnQ+PGEgaHJlZj0iaHR0cHM6Ly8xOTIuMTY4LjExNC4zNi9hcGkvdm1zLzdkYWM3 NGQyLWM1MDQtNGJiZC04NjU5LWM4NzczYTg0NGNiMy8iPjxmb250IHNpemU9MiBjb2xvcj1ibHVl IGZhY2U9InNhbnMtc2VyaWYiPmh0dHBzOi8vcmhldm1hbmFnZXIvYXBpL3Ztcy83ZGFjNzRkMi1j NTA0LTRiYmQtODY1OS1jODc3M2E4NDRjYjMvPC9mb250PjwvYT48Zm9udCBzaXplPTIgZmFjZT0i c2Fucy1zZXJpZiI+JnF1b3Q7KTs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMt c2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBTdHJpbmcNCmlucHV0WE1MMSA9ICZx dW90OyZsdDs/eG1sIHZlcnNpb249XCZxdW90OzEuMFwmcXVvdDs/Jmd0OyZxdW90OyAvKiZxdW90 OyZsdDt2bSZndDsmcXVvdDsqLzwvZm9udD4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1z ZXJpZiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICsmcXVvdDsmbHQ7c3NvJmd0OyZxdW90 OysmcXVvdDsmbHQ7bWV0aG9kcyZndDsmcXVvdDsrJnF1b3Q7Jmx0O21ldGhvZA0KaWQ9XCZxdW90 OyZxdW90OysmcXVvdDtHVUVTVF9BR0VOVCZxdW90OysmcXVvdDtcJnF1b3Q7LyZndDsmcXVvdDsr JnF1b3Q7Jmx0Oy9tZXRob2RzJmd0OyZxdW90OysmcXVvdDsmbHQ7L3NzbyZndDsmcXVvdDs8L2Zv bnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyArJnF1b3Q7Jmx0O2RvbWFpbiZndDsmcXVvdDsrJnF1b3Q7Jmx0O25hbWUmZ3Q7 dWx0aW1hdGl4dWF0Lm5ldCZsdDsvbmFtZSZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9kb21haW4mZ3Q7 JnF1b3Q7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlmIj4mbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyA8L2ZvbnQ+ DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyArJnF1b3Q7Jmx0O3BheWxvYWRzJmd0OyZxdW90OysmcXVvdDsmbHQ7cGF5bG9hZA0K dHlwZT1cJnF1b3Q7JnF1b3Q7KyZxdW90O2Zsb3BweSZxdW90OysmcXVvdDtcJnF1b3Q7Jmd0OyZx dW90OysgJnF1b3Q7Jmx0O2ZpbGVzJmd0OyZxdW90OysmcXVvdDsmbHQ7ZmlsZSZndDsmcXVvdDs8 L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyArJnF1b3Q7Jmx0O25hbWUmZ3Q7L1dFQi1JTkYvc3lzcHJlcC54bWwmbHQ7 L25hbWUmZ3Q7JnF1b3Q7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZh Y2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 DQombmJzcDsgJm5ic3A7KyZxdW90OyZsdDsvZmlsZSZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9maWxl cyZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9wYXlsb2FkJmd0OyZxdW90OysmcXVvdDsmbHQ7L3BheWxv YWRzJmd0OyZxdW90OzwvZm9udD4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsg KyZxdW90OyZsdDtyZXBvcnRlZF9kZXZpY2VzJmd0OyZxdW90OysmcXVvdDsmbHQ7cmVwb3J0ZWRf ZGV2aWNlJmd0OyZxdW90OysmcXVvdDsmbHQ7aXBzJmd0OyZxdW90OysmcXVvdDsmbHQ7aXANCmFk ZHJlc3M9XCZxdW90OyZxdW90OysmcXVvdDsxLjEuMS4xJnF1b3Q7KyZxdW90O1wmcXVvdDsvJmx0 Oy9pcHMmZ3Q7JnF1b3Q7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlm Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyArJnF1b3Q7Jmx0O2ZxZG4mZ3Q7V0lOLUFTMDVFT0FEQXdl cndlciZsdDsvZnFkbiZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9yZXBvcnRlZF9kZXZpY2UmZ3Q7JnF1 b3Q7KyZxdW90OyZsdDtyZXBvcnRlZF9kZXZpY2VzJmd0OyZxdW90Ozs8L2ZvbnQ+DQo8YnI+PGZv bnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsNCjwvZm9udD4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+Jm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFN0cmluZ0VudGl0eQ0KaW5wdXQxID0gbmV3IFN0cmluZ0Vu dGl0eShpbnB1dFhNTDEpOzwvZm9udD4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJp ZiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHB1dC5zZXRFbnRpdHkoaW5wdXQxKTs8L2Zv bnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyBwdXQuc2V0SGVhZGVyKCZxdW90O0NvbnRlbnQtVHlwZSZxdW90OywNCiZxdW90 O2FwcGxpY2F0aW9uL3htbCZxdW90Oyk7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJz YW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgSHR0cFJlc3BvbnNlDQpyZXNw b25zZU5JQyA9IGh0dHBjbGllbnQuZXhlY3V0ZShwdXQpOzwvZm9udD4NCjxicj48Zm9udCBzaXpl PTIgZmFjZT0ic2Fucy1zZXJpZiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0K Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFN5c3RlbS5v dXQ8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyAucHJpbnRsbigmcXVvdDtSRVNQT05TRQ0KOjo6Ojo6Ojo6Ojo6Ojo6 Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogJnF1b3Q7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNl PSJzYW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgKyByZXNwb25zZU5JQyk7 PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgPC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlm Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgQnVmZmVyZWRSZWFkZXINCnJkMSA9IG5ldyBC dWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoPC9mb250Pg0KPGJyPjxmb250IHNp emU9MiBmYWNlPSJzYW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmVzcG9u c2VOSUMuZ2V0RW50aXR5KCkuZ2V0Q29udGVudCgpKSk7PC9mb250Pg0KPGJyPjxmb250IHNpemU9 MiBmYWNlPSJzYW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQom bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgU3RyaW5nDQps aW5lMSA9ICZxdW90OyZxdW90Ozs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMt c2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB3aGlsZQ0KKChsaW5lMSA9IHJkMS5y ZWFkTGluZSgpKSAhPSBudWxsKSB7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5z LXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7 ICZuYnNwOyBTeXN0ZW0ub3V0LnByaW50bG4oJnF1b3Q7TElORSA6Ojo6Ojo6Ojo6Ojo6DQomcXVv dDsgKyBsaW5lMSk7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlmIj4m bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZm9udD4NCjxicj48Zm9udCBzaXplPTIgZmFj ZT0ic2Fucy1zZXJpZiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDwvZm9udD4NCjxicj48 Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 IFRoZQ0Kb3V0cHV0IHNheXMgdGhhdCBteSBjb2RlIGlzIHN5bnRhY3RpY2FsbHkgaW5jb3JyZWN0 LiBJIGFtIG5vdCB2ZXJ5IHN1cmUNCmFzIHRvIHdoYXQgaGFzIHRvIGJlIHRoZSBjb250ZW50IG9m ICZxdW90O3N5c3ByZXAueG1sJnF1b3Q7IGZpbGUgYW5kIHdoYXQNCmlzIHN5bnRhY3RpY2FsbHkg aW5jb3JyZWN0IGhlcmUuPC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlm Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgPC9mb250Pg0KPGJyPjxmb250IHNpemU9MiBm YWNlPSJzYW5zLXNlcmlmIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgQWxzbw0Kd2hpbGUg ZGVwbG95aW5nIHRoZSB3aW5kb3dzIG1hY2hpbmUgbWFudWFsbHkgdGhyb3VnaCB0aGUgcmhldiBt YW5hZ2VyICwNCndoaWxlIHVzaW5nIHN5c3ByZXAgb3B0aW9uIGluICZxdW90O3J1biBvbmNlJnF1 b3Q7ICwgSSBhbSB1bmFibGUgdG8gZmluZA0KdGhlIGlwIGFuZCBob3N0bmFtZSBvcHRpb25zIGFz IGZvdW5kICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBmb3INCmxpbnV4ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOyBtYWNoaW5lcy48L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9 InNhbnMtc2VyaWYiPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA8L2ZvbnQ+DQo8YnI+DQo8 YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPlJlZ2FyZHMsPGJyPg0KQ2hhbmRyYWhh c2EgUzxicj4NCjwvZm9udD4NCjxicj4NCjxicj4NCjxicj48Zm9udCBzaXplPTEgY29sb3I9IzVm NWY1ZiBmYWNlPSJzYW5zLXNlcmlmIj5Gcm9tOiAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7 PC9mb250Pjxmb250IHNpemU9MSBmYWNlPSJzYW5zLXNlcmlmIj5KdWFuIEhlcm5hbmRleiAmbHQ7 amhlcm5hbmRAcmVkaGF0LmNvbSZndDs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0xIGNvbG9yPSM1 ZjVmNWYgZmFjZT0ic2Fucy1zZXJpZiI+VG86ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDs8 L2ZvbnQ+PGZvbnQgc2l6ZT0xIGZhY2U9InNhbnMtc2VyaWYiPkNoYW5kcmFoYXNhIFMgJmx0O2No YW5kcmFoYXNhLnNAdGNzLmNvbSZndDs8L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0xIGNvbG9yPSM1 ZjVmNWYgZmFjZT0ic2Fucy1zZXJpZiI+Q2M6ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDs8 L2ZvbnQ+PGZvbnQgc2l6ZT0xIGZhY2U9InNhbnMtc2VyaWYiPkFnYXJ3YWwgUnVjaGl0YSAmbHQ7 YWdhcndhbC5ydWNoaXRhQHRjcy5jb20mZ3Q7LA0KdXNlcnNAb3ZpcnQub3JnLCAmcXVvdDsnU2hh aGFyIEhhdml2aScmcXVvdDsgJmx0O3NoYXZpdmlAcmVkaGF0LmNvbSZndDs8L2ZvbnQ+DQo8YnI+ PGZvbnQgc2l6ZT0xIGNvbG9yPSM1ZjVmNWYgZmFjZT0ic2Fucy1zZXJpZiI+RGF0ZTogJm5ic3A7 ICZuYnNwOyAmbmJzcDsNCiZuYnNwOzwvZm9udD48Zm9udCBzaXplPTEgZmFjZT0ic2Fucy1zZXJp ZiI+MDkvMTgvMjAxNCAwNjozMCBQTTwvZm9udD4NCjxicj48Zm9udCBzaXplPTEgY29sb3I9IzVm NWY1ZiBmYWNlPSJzYW5zLXNlcmlmIj5TdWJqZWN0OiAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5i c3A7PC9mb250Pjxmb250IHNpemU9MSBmYWNlPSJzYW5zLXNlcmlmIj5SZTogW292aXJ0LXVzZXJz XQ0KRXJyb3Igd2hpbGUgdXNpbmcgUkVTVCBBUEkgd2l0aCBPdmlydDwvZm9udD4NCjxicj4NCjxo ciBub3NoYWRlPg0KPGJyPg0KPGJyPg0KPGJyPjx0dD48Zm9udCBzaXplPTI+T24gMDkvMTgvMjAx NCAwMTozOSBQTSwgQ2hhbmRyYWhhc2EgUyB3cm90ZTo8YnI+DQomZ3Q7IERlYXIgSnVhbiAvIEFs bCw8YnI+DQomZ3Q7IDxicj4NCiZndDsgVGhhbmtzIGZvciByZXBseS48YnI+DQomZ3Q7IDxicj4N CiZndDsgJm5ic3A7SSB0cmllZCB0byBnaXZlIHRoZSBob3N0bmFtZSB3aXRoIHRoZSB0YWcgbWVu dGlvbmVkICZxdW90O2hvc3RfbmFtZSZxdW90Oy4NCkl0czxicj4NCiZndDsgd29ya2luZy48YnI+ DQomZ3Q7IDxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNvIGJlbG93IGFy ZSB0aGUgaXNzdWVzIHN0aWxsIHJlbWFpbmluZzo8YnI+DQomZ3Q7IDxicj4NCiZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEpIFRoZSBpc3N1ZSBvZiBpbnRlcm5hbCBzZXJ2ZXIgZXJy b3INCnN0aWxsIHBlcnNpdHMgKHJoZXY8YnI+DQomZ3Q7IG1hbmFnZXIgc2hvd2luZyBpc3N1ZXMp IGV2ZW4gYWZ0ZXIgZm9sbG93aW5nIHRoZSBhZHZpY2Ugb2YgdGhlIGV4cGVydDxicj4NCiZndDsg YW5kIGRvaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwYXJ0IGp1c3Qgb25jZShnaXZpbmcgaXAgYW5k ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzxicj4NCiZndDsgJm5i c3A7aG9zdG5hbWUpIGFmdGVyIGNyZWF0aW5nIHRoZSB2bS48YnI+DQomZ3Q7IDxicj4NCjxicj4N CkFjdHVhbGx5IHRoaXMgaXMgYSBidWc6PGJyPg0KPGJyPg0KPC9mb250PjwvdHQ+PGEgaHJlZj1o dHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vMTE0NDAwNT48dHQ+PGZvbnQgc2l6ZT0yPmh0dHBz Oi8vYnVnemlsbGEucmVkaGF0LmNvbS8xMTQ0MDA1PC9mb250PjwvdHQ+PC9hPjx0dD48Zm9udCBz aXplPTI+PGJyPg0KPGJyPg0KVGhlIHJlYXNvbiBpcyB0aGF0IHdoZW4geW91IHVzZSBhbiBpbmNv cnJlY3QgYm9vdCBwcm90b2NvbCB3ZSBlbmQgdXA8YnI+DQpzdG9yaW5nIG51bGwgaW4gdGhlIGNv cnJlc3BvbmRpbmcgcGxhY2UgaW4gdGhlIGRhdGFiYXNlLCBhbmQgbGF0ZXIgd2U8YnI+DQp1c2Ug dGhlIHZhbHVlIHdpdGhvdXQgY2hlY2tpbmcgaXQsIHdoaWNoIHRyaWdnZXJzIGEgbnVsbCBwb2lu dGVyIGV4Y2VwdGlvbi48YnI+DQo8YnI+DQpUaGUgcmlnaHQgdmFsdWUgZm9yIHRoZSBib290IHBy b3RvY29sIGlzICZxdW90O3N0YXRpYyZxdW90Oywgbm90ICZxdW90O1NUQVRJQ19JUCZxdW90Oy4N ClRoZTxicj4NCiZxdW90O1NUQVRJQ19JUCZxdW90OyB2YWx1ZSBpcyB3aGF0IHdlIHVzZSBpbiB0 aGUgYmFja2VuZCBhbmQgaW4gdGhlIGRhdGFiYXNlLA0KYnV0PGJyPg0KaW4gdGhlIFJFU1RBUEkg aXQgaXMgJnF1b3Q7c3RhdGljJnF1b3Q7Ljxicj4NCjxicj4NClRvIHdvcmthcm91bmQgdGhpcyBp c3N1ZSB5b3UgY2FuIGRlbGV0ZSB0aGUgVk1zIGFuZCBjcmVhdGUgdGhlbSBhZ2Fpbjxicj4NCndp dGggdGhlIGNvcnJlY3QgYm9vdCBwcm90b2NvbC48YnI+DQo8YnI+DQpJZiB5b3UgZG9uJ3Qgd2Fu dCB0byBjcmVhdGUgdGhlIFZNcyBhZ2FpbiB5b3UgY2FuIGZpeCB0aGUgZGF0YWJhc2U8YnI+DQpt YW51YWxseSBsaWtlIHRoaXM6PGJyPg0KPGJyPg0KIyBzdSAtIHBvc3RncmVzPGJyPg0KIyBwc3Fs PGJyPg0KcG9zdGdyZXM9IyBcYyBlbmdpbmU8YnI+DQplbmdpbmU9IyB1cGRhdGUgdm1faW5pdCBz ZXQgbmV0d29ya3MgPSByZXBsYWNlKG5ldHdvcmtzLCAnJnF1b3Q7Ym9vdFByb3RvY29sJnF1b3Q7 PGJyPg0KOiBudWxsJywgJyZxdW90O2Jvb3RQcm90b2NvbCZxdW90OyA6ICZxdW90O1NUQVRJQ19J UCZxdW90OycpOzxicj4NCjxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDIp IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgaXMgdGhlIGNhc2UNCnRoYXQgJm5ic3A7d2UgY2FuIGRv PGJyPg0KJmd0OyBpbml0aWFsaXphdGlvbiBwYXJ0IG9ubHkgb25jZSBvbiBhIHBhcnRpY3VsYXIg dm0gLCB0aGVuIHdlIGNhbjxicj4NCiZndDsgcmVjb25maWd1cmUgdGhlIG5ldHdvcmsgKGlwLCBz dWJuZXQsIGdhdGV3YXkgZXRjKTxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgb3Igbm90IGZvciB0aGF0IHZtLjxicj4NCiZndDsgPGJyPg0KPGJyPg0K SSdtIHJlYXNvbmFibHkgc3VyZSB0aGF0IHlvdSBjYW4gcnVuIGluaXRpYWxpemF0aW9uIG9ubHkg b25jZSBwZXIgVk0sPGJyPg0KYnV0IFNoYWhhciBjYW4gY29uZmlybSB0aGlzIGJldHRlciB0aGFu IG1lLjxicj4NCjxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDMpIEZvciBX aW5kb3dzIGd1ZXN0IHdlIGFyZSBzdGlsbCB1bmFibGUNCnRvIHByb3ZpZGUgaXAgZGV0YWlsczxi cj4NCiZndDsgYW5kIGhvc3RuYW1lIHVzaW5nIHN5c3ByZXAvcGF5bG9hZC48YnI+DQomZ3Q7IDxi cj4NCjxicj4NCkknbSBub3QgZmFtaWxpYXIgd2l0aCBTeXNwcmVwLiBDYW4geW91IHByb3ZpZGUg YW4gZXhhbXBsZSBvZiB0aGUgY29kZTxicj4NCnRoYXQgeW91IGFyZSB1c2luZyBmb3IgdGhhdD88 YnI+DQo8YnI+DQomZ3Q7IEVycm9yIGF0dGFjaGVkLjxicj4NCiZndDsgPGJyPg0KJmd0OyA8YnI+ DQomZ3Q7IDxicj4NCiZndDsgUmVnYXJkcyw8YnI+DQomZ3Q7IENoYW5kcmFoYXNhIFM8YnI+DQom Z3Q7IDxicj4NCiZndDsgPGJyPg0KJmd0OyA8YnI+DQomZ3Q7IEZyb206ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwO0p1YW4gSGVybmFuZGV6ICZsdDtqaGVybmFuZEByZWRoYXQuY29tJmd0Ozxi cj4NCiZndDsgVG86ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0NoYW5kcmFoYXNhIFMgJmx0 O2NoYW5kcmFoYXNhLnNAdGNzLmNvbSZndDssDQp1c2Vyc0BvdmlydC5vcmc8YnI+DQomZ3Q7IENj OiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtBZ2Fyd2FsIFJ1Y2hpdGEgJmx0O2FnYXJ3YWwu cnVjaGl0YUB0Y3MuY29tJmd0Ozxicj4NCiZndDsgRGF0ZTogJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7MDkvMTgvMjAxNCAwMzozNSBQTTxicj4NCiZndDsgU3ViamVjdDogJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7UmU6IFtvdmlydC11c2Vyc10gRXJyb3Igd2hpbGUNCnVzaW5nIFJFU1Qg QVBJIHdpdGggT3ZpcnQ8YnI+DQomZ3Q7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxicj4NCiZndDsgPGJyPg0K Jmd0OyA8YnI+DQomZ3Q7IDxicj4NCiZndDsgT24gMDkvMTgvMjAxNCAwODoxOCBBTSwgQ2hhbmRy YWhhc2EgUyB3cm90ZTo8YnI+DQomZ3Q7Jmd0OyBEZWFyIEV4cGVydHMuPGJyPg0KJmd0OyZndDs8 YnI+DQomZ3Q7Jmd0OyBXZSBhcmUgSW50ZWdyYXRpbmcgb3VyIGludGVybmFsIGNsb3VkIHBvcnRh bCB3aXRoICZuYnNwO092aXJ0DQovIFJIRVZNIHZlcnNpb248YnI+DQomZ3Q7Jmd0OyAzLjQuPGJy Pg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0OyBXZSBhcmUgaW50ZWdyYXRpbmcgb3VyIGludGVybmFs IGNsb3VkIHdpdGggT3ZpcnQgLyBSSEVWTS4gVk0gdGVtcGxhdGU8YnI+DQomZ3Q7Jmd0OyBjcmVh dGVkIHVzaW5nIGNsb3VkIGluaXQuPGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0OyBUaHJvdWdo IFJFU1QgQVBJIE5pcHBldCB3aGlsZSBjb2RlcyBwYXNzZXMgY29tbWFuZCB0byB0ZW1wbGF0ZQ0K KCB3aXRoPGJyPg0KJmd0OyZndDsgY2xvdWQgaW5pdCkgSVAsIEhPU1ROQU1FLCBXZSBhcmUgYWJs ZSB0byBzZXQgSVAgYW5kIEhvc3RuYW1lIHRvDQpWTTxicj4NCiZndDsmZ3Q7IHRocm91Z2ggY29k ZS48YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7IEJ1dCBwb3N0IHRoaXMgTWFuYWdlciBnZXR0 aW5nIGhhbmRlZC4gRXJyb3IgY29kZSBpcyBhdHRhY2hlZC48YnI+DQomZ3Q7Jmd0Ozxicj4NCiZn dDsmZ3Q7IE5lZWQgeW91ciBoZWxwIHBsZWFzZS48YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsgPGJy Pg0KJmd0OyBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5IHlvdSBhbHJlYWR5IGNyZWF0ZWQgYSB0 ZW1wbGF0ZSB3aXRoIHRoZQ0KY2xvdWQ8YnI+DQomZ3Q7IGluaXQgY29uZmlndXJhdGlvbiwgdGhl biB5b3UgY3JlYXRlZCBhIFZNIGZyb20gdGhhdCB0ZW1wbGF0ZSwgYW5kDQp5b3U8YnI+DQomZ3Q7 IHdhbnQgdG8gbW9kaWZ5IGl0IGFuZCBzdGFydCBpdC4gSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBW TSB5b3UgbmVlZA0KdG88YnI+DQomZ3Q7IGlzc3VlIGEgUFVUIHJlcXVlc3QsIGFuZCB0aGUgdGFn IG5hbWUgZm9yIHRoZSBob3N0IGlzICZxdW90O2hvc3RfbmFtZSZxdW90Ozo8YnI+DQomZ3Q7IDxi cj4NCiZndDsgJm5ic3A7ICZuYnNwO1N0cmluZyB1cGRhdGVYbWwgPTxicj4NCiZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZxdW90OyZsdDs/eG1sIHZlcnNpb249XCZxdW90 OzEuMFwmcXVvdDs/Jmd0OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7KyAmcXVvdDsmbHQ7dm0mZ3Q7JnF1b3Q7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsrICZuYnNwOyAmcXVvdDsmbHQ7aW5pdGlhbGl6YXRpb24mZ3Q7JnF1b3Q7PGJyPg0K Jmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsrICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0 O2hvc3RfbmFtZSZndDttZWdoYWFzYWRtaW4udWx0aW1hdGl4dWF0Lm5ldCZsdDsvaG9zdF9uYW1l Jmd0OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmbmJzcDsg Jm5ic3A7ICZxdW90OyZsdDtyZWdlbmVyYXRlX3NzaF9rZXlzJmd0O2ZhbHNlJmx0Oy9yZWdlbmVy YXRlX3NzaF9rZXlzJmd0OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7KyAmbmJzcDsgJm5ic3A7ICZxdW90OyZsdDtuaWNfY29uZmlndXJhdGlvbnMmZ3Q7JnF1b3Q7 PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsrICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZxdW90OyZsdDtuaWNfY29uZmlndXJhdGlvbiZndDsmcXVvdDs8YnI+DQomZ3Q7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOysgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZxdW90 OyZsdDtuYW1lJmd0O2V0aDAmbHQ7L25hbWUmZ3Q7JnF1b3Q7PGJyPg0KJmd0OyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsrICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmcXVvdDsmbHQ7 aXANCmFkZHJlc3M9XCZxdW90OzEuMS4xLjFcJnF1b3Q7IG5ldG1hc2s9XCZxdW90OzI1NS4yNTUu MjU1LjBcJnF1b3Q7PGJyPg0KJmd0OyBnYXRld2F5PVwmcXVvdDsxMy4zLjMuM1wmcXVvdDsvJmd0 OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0O2Jvb3RfcHJvdG9jb2wmZ3Q7c3RhdGljJmx0Oy9i b290X3Byb3RvY29sJmd0OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0O29uX2Jvb3QmZ3Q7dHJ1 ZSZsdDsvb25fYm9vdCZndDsmcXVvdDs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOysgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0Oy9uaWNfY29uZmlndXJhdGlvbiZn dDsmcXVvdDs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOysgJm5ic3A7ICZu YnNwOyAmcXVvdDsmbHQ7L25pY19jb25maWd1cmF0aW9ucyZndDsmcXVvdDs8YnI+DQomZ3Q7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOysgJm5ic3A7ICZxdW90OyZsdDsvaW5pdGlhbGl6YXRp b24mZ3Q7JnF1b3Q7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsrICZxdW90 OyZsdDsvdm0mZ3Q7JnF1b3Q7Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwO1N0cmluZ0VudGl0eSB1 cGRhdGVFbnRpdHkgPSBuZXcgU3RyaW5nRW50aXR5KHVwZGF0ZVhtbCk7PGJyPg0KJmd0OyAmbmJz cDsgJm5ic3A7SHR0cFB1dCB1cGRhdGVSZXF1ZXN0ID0gbmV3IEh0dHBQdXQoYXBpVXJsICsgJnF1 b3Q7L3Ztcy8mcXVvdDsNCisgdm1JZCk7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7dXBkYXRlUmVx dWVzdC5zZXRIZWFkZXIoJnF1b3Q7Q29udGVudC1UeXBlJnF1b3Q7LCAmcXVvdDthcHBsaWNhdGlv bi94bWwmcXVvdDspOzxicj4NCiZndDsgJm5ic3A7ICZuYnNwO3VwZGF0ZVJlcXVlc3Quc2V0SGVh ZGVyKCZxdW90O0FjY2VwdCZxdW90OywgJnF1b3Q7YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+ DQomZ3Q7ICZuYnNwOyAmbmJzcDt1cGRhdGVSZXF1ZXN0LnNldEVudGl0eSh1cGRhdGVFbnRpdHkp Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwO0h0dHBSZXNwb25zZSB1cGRhdGVSZXNwb25zZSA9IGNs aWVudC5leGVjdXRlKHVwZGF0ZVJlcXVlc3QpOzxicj4NCiZndDsgPGJyPg0KJmd0OyBUaGVuLCBh ZnRlciB0aGUgdXBkYXRlLCB5b3UgbmVlZCB0byBzdGFydCB0aGUgVk0gYW5kIGl0IHdpbGwgdXNl IHRoYXQ8YnI+DQomZ3Q7IGNvbmZpZ3VyYXRpb246PGJyPg0KJmd0OyA8YnI+DQomZ3Q7ICZuYnNw OyAmbmJzcDtTdHJpbmcgc3RhcnRYbWwgPTxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyZxdW90OyZsdDs/eG1sIHZlcnNpb249XCZxdW90OzEuMFwmcXVvdDs/Jmd0 OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmcXVvdDsmbHQ7 YWN0aW9uLyZndDsmcXVvdDs7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7U3RyaW5nRW50aXR5IHN0 YXJ0RW50aXR5ID0gbmV3IFN0cmluZ0VudGl0eShzdGFydFhtbCk7PGJyPg0KJmd0OyAmbmJzcDsg Jm5ic3A7SHR0cFBvc3Qgc3RhcnRSZXF1ZXN0ID0gbmV3IEh0dHBQb3N0KGFwaVVybCArICZxdW90 Oy92bXMvJnF1b3Q7DQorIHZtSWQgKzxicj4NCiZndDsgJnF1b3Q7L3N0YXJ0JnF1b3Q7KTs8YnI+ DQomZ3Q7ICZuYnNwOyAmbmJzcDtzdGFydFJlcXVlc3Quc2V0RW50aXR5KHN0YXJ0RW50aXR5KTs8 YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDtzdGFydFJlcXVlc3Quc2V0SGVhZGVyKCZxdW90O0NvbnRl bnQtVHlwZSZxdW90OywgJnF1b3Q7YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+DQomZ3Q7ICZu YnNwOyAmbmJzcDtzdGFydFJlcXVlc3Quc2V0SGVhZGVyKCZxdW90O0FjY2VwdCZxdW90OywgJnF1 b3Q7YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDtIdHRwUmVz cG9uc2Ugc3RhcnRSZXNwb25zZSA9IGNsaWVudC5leGVjdXRlKHN0YXJ0UmVxdWVzdCk7PGJyPg0K Jmd0OyA8YnI+DQomZ3Q7IFNvbWUgYWR2aWNlczo8YnI+DQomZ3Q7IDxicj4NCiZndDsgKiBDaGVj ayB0aGUgWE1MIHNjaGVtYSBmb3IgdGhlIHN0cnVjdHVyZSBvZiB0aGUgWE1MIGRvY3VtZW50czo8 YnI+DQomZ3Q7IDxicj4NCiZndDsgJm5ic3A7PC9mb250PjwvdHQ+PGEgaHJlZj1odHRwczovL3Jo ZXZtYW5hZ2VyL2FwaT9zY2hlbWE+PHR0Pjxmb250IHNpemU9Mj5odHRwczovL3JoZXZtYW5hZ2Vy L2FwaT9zY2hlbWE8L2ZvbnQ+PC90dD48L2E+PHR0Pjxmb250IHNpemU9Mj48YnI+DQomZ3Q7IDxi cj4NCiZndDsgKiBXaGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIFJFU1RBUEkgbWFrZXMgc3Vy ZSB0byBhbHdheXMgZXhwbGljaXRseTxicj4NCiZndDsgYWRkIHRoZSBDb250ZW50LVR5cGUgYW5k IEFjY2VwdCBoZWFkZXJzOjxicj4NCiZndDsgPGJyPg0KJmd0OyAmbmJzcDt5b3VyUmVxdWVzdC5z ZXRIZWFkZXIoJnF1b3Q7Q29udGVudC1UeXBlJnF1b3Q7LCAmcXVvdDthcHBsaWNhdGlvbi94bWwm cXVvdDspOzxicj4NCiZndDsgJm5ic3A7eW91clJlcXVlc3Quc2V0SGVhZGVyKCZxdW90O0FjY2Vw dCZxdW90OywgJnF1b3Q7YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+DQomZ3Q7IDxicj4NCiZn dDsgKiBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiB3aXRoIGNsb3Vk LWluaXQgd2lsbCBvbmx5DQpiZTxicj4NCiZndDsgZXhlY3V0ZWQgdGhlIGZpcnN0IHRpbWUgeW91 IHN0YXJ0IHRoZSBWTSwgc28gaW4geW91ciB0ZXN0cyB5b3Ugd2lsbA0KbmVlZDxicj4NCiZndDsg dG8gcmVtb3ZlIHRoZSBWTSBhbmQgY3JlYXRlIGl0IGFnYWluLjxicj4NCiZndDsgPGJyPg0KJmd0 OyAqIElmIHlvdSBhcmUgcGxhbm5pbmcgdG8gZG8gY29tcGxleCB0aGluZ3MgeW91IG1heSBmaW5k IGl0IGhlbHBmdWwNCnRoZTxicj4NCiZndDsgSmF2YSBTREs6PGJyPg0KJmd0OyA8YnI+DQomZ3Q7 ICZuYnNwOzwvZm9udD48L3R0PjxhIGhyZWY9Imh0dHA6Ly93d3cub3ZpcnQub3JnL0phdmEtc2Rr Ij48dHQ+PGZvbnQgc2l6ZT0yPmh0dHA6Ly93d3cub3ZpcnQub3JnL0phdmEtc2RrPC9mb250Pjwv dHQ+PC9hPjx0dD48Zm9udCBzaXplPTI+PGJyPg0KJmd0OyA8YnI+DQo8YnI+DQotLSA8YnI+DQpE aXJlY2Npw7NuIENvbWVyY2lhbDogQy9Kb3NlIEJhcmRhc2FubyBCYW9zLCA5LCBFZGlmLiBHb3Ji ZWEgMywgcGxhbnRhPGJyPg0KM8K6RCwgMjgwMTYgTWFkcmlkLCBTcGFpbjxicj4NCkluc2NyaXRh IGVuIGVsIFJlZy4gTWVyY2FudGlsIGRlIE1hZHJpZCDigJMgQy5JLkYuIEI4MjY1Nzk0MSAtIFJl ZCBIYXQgUy5MLjxicj4NCjwvZm9udD48L3R0Pg0KPGJyPg08cD49PT09PS0tLS0tPT09PT0tLS0t LT09PT09PGJyPgpOb3RpY2U6IFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBlLW1h aWw8YnI+Cm1lc3NhZ2UgYW5kL29yIGF0dGFjaG1lbnRzIHRvIGl0IG1heSBjb250YWluIDxicj4K Y29uZmlkZW50aWFsIG9yIHByaXZpbGVnZWQgaW5mb3JtYXRpb24uIElmIHlvdSBhcmUgPGJyPgpu b3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgYW55IGRpc3NlbWluYXRpb24sIHVzZSwgPGJyPgpy ZXZpZXcsIGRpc3RyaWJ1dGlvbiwgcHJpbnRpbmcgb3IgY29weWluZyBvZiB0aGUgPGJyPgppbmZv cm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBlLW1haWwgbWVzc2FnZSA8YnI+CmFuZC9vciBhdHRh Y2htZW50cyB0byBpdCBhcmUgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgPGJyPgp5b3UgaGF2ZSBy ZWNlaXZlZCB0aGlzIGNvbW11bmljYXRpb24gaW4gZXJyb3IsIDxicj4KcGxlYXNlIG5vdGlmeSB1 cyBieSByZXBseSBlLW1haWwgb3IgdGVsZXBob25lIGFuZCA8YnI+CmltbWVkaWF0ZWx5IGFuZCBw ZXJtYW5lbnRseSBkZWxldGUgdGhlIG1lc3NhZ2UgPGJyPgphbmQgYW55IGF0dGFjaG1lbnRzLiBU aGFuayB5b3U8L3A+Cgo8cD48L3A+ --=_alternative 00198BD465257D5C_=--

On 09/23/2014 06:39 AM, Chandrahasa S wrote:
Dear Juan,
Thanks lot for support.
Internal server error issue also resolved with linux guests. Now we are able to provide ip and hostname to linux guests in rhev 3.4 successfully via RESTAPI giving boot protocol as "static" as advised.
For Windows Guest we did the following: 1) Prepared a template with guest agents installed and deployed a vm successfully through RESTAPI. 2) Following initialization part same as Linux guest did not work in this case and it gives default/garbage ip,hostname to the vm. 3) So we tried giving it through sysprep/payload tag through REST API. Code snippet is as follows:
HttpPut put = new HttpPut(
"https://rhevmanager/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/ <https://192.168.114.36/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/>"); String inputXML1 = "<?xml version=\"1.0\"?>" /*"<vm>"*/ +"<sso>"+"<methods>"+"<method id=\""+"GUEST_AGENT"+"\"/>"+"</methods>"+"</sso>"
+"<domain>"+"<name>ultimatixuat.net</name>"+"</domain>"
+"<payloads>"+"<payload type=\""+"floppy"+"\">"+ "<files>"+"<file>"
+"<name>/WEB-INF/sysprep.xml</name>"
+"</file>"+"</files>"+"</payload>"+"</payloads>"
+"<reported_devices>"+"<reported_device>"+"<ips>"+"<ip address=\""+"1.1.1.1"+"\"/</ips>"
+"<fqdn>WIN-AS05EOADAwerwer</fqdn>"+"</reported_device>"+"<reported_devices>";
StringEntity input1 = new StringEntity(inputXML1); put.setEntity(input1); put.setHeader("Content-Type", "application/xml"); HttpResponse responseNIC = httpclient.execute(put); System.out .println("RESPONSE ::::::::::::::::::::::::::::::::::: " + responseNIC);
BufferedReader rd1 = new BufferedReader(new InputStreamReader(
responseNIC.getEntity().getContent())); String line1 = ""; while ((line1 = rd1.readLine()) != null) { System.out.println("LINE ::::::::::::: " + line1); }
The output says that my code is syntactically incorrect. I am not very sure as to what has to be the content of "sysprep.xml" file and what is syntactically incorrect here.
Also while deploying the windows machine manually through the rhev manager , while using sysprep option in "run once" , I am unable to find the ip and hostname options as found for linux machines.
Regards, Chandrahasa S
What version of Windows are you using?
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org, "'Shahar Havivi'" <shavivi@redhat.com> Date: 09/18/2014 06:30 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug:
https://bugzilla.redhat.com/1144005
The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer exception.
The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database, but in the RESTAPI it is "static".
To workaround this issue you can delete the VMs and create them again with the correct boot protocol.
If you don't want to create the VMs again you can fix the database manually like this:
# su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

This is a multipart message in MIME format. --=_alternative 0052008365257D5C_= MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 V2luZG93cyAyMDA4IFIyDQoNClJlZ2FyZHMsDQpDaGFuZHJhaGFzYSBTDQoNCg0KDQpGcm9tOiAg IEp1YW4gSGVybmFuZGV6IDxqaGVybmFuZEByZWRoYXQuY29tPg0KVG86ICAgICBDaGFuZHJhaGFz YSBTIDxjaGFuZHJhaGFzYS5zQHRjcy5jb20+DQpDYzogICAgIEFnYXJ3YWwgUnVjaGl0YSA8YWdh cndhbC5ydWNoaXRhQHRjcy5jb20+LCB1c2Vyc0BvdmlydC5vcmcNCkRhdGU6ICAgMDkvMjMvMjAx NCAwNjo1OCBQTQ0KU3ViamVjdDogICAgICAgIFJlOiBbb3ZpcnQtdXNlcnNdIEVycm9yIHdoaWxl IHVzaW5nIFJFU1QgQVBJIHdpdGggT3ZpcnQNCg0KDQoNCk9uIDA5LzIzLzIwMTQgMDY6MzkgQU0s IENoYW5kcmFoYXNhIFMgd3JvdGU6DQo+IERlYXIgSnVhbiwNCj4gDQo+IFRoYW5rcyBsb3QgZm9y IHN1cHBvcnQuDQo+IA0KPiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IgaXNzdWUgYWxzbyByZXNvbHZl ZCB3aXRoIGxpbnV4IGd1ZXN0cy4gTm93IHdlIGFyZQ0KPiBhYmxlIHRvIHByb3ZpZGUgaXAgYW5k IGhvc3RuYW1lIHRvIGxpbnV4IGd1ZXN0cyBpbiByaGV2IDMuNCBzdWNjZXNzZnVsbHkNCj4gdmlh IFJFU1RBUEkgZ2l2aW5nIGJvb3QgcHJvdG9jb2wgYXMgICAgICAgICAic3RhdGljIiBhcyBhZHZp c2VkLg0KPiANCj4gICAgICAgICBGb3IgV2luZG93cyBHdWVzdCB3ZSBkaWQgdGhlIGZvbGxvd2lu ZzoNCj4gMSkgICAgICAgIFByZXBhcmVkIGEgdGVtcGxhdGUgd2l0aCBndWVzdCBhZ2VudHMgaW5z dGFsbGVkIGFuZCBkZXBsb3llZCBhDQo+IHZtIHN1Y2Nlc3NmdWxseSB0aHJvdWdoIFJFU1RBUEku DQo+IDIpICAgICAgICBGb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gcGFydCBzYW1lIGFzIExpbnV4 IGd1ZXN0IGRpZCBub3Qgd29yaw0KPiBpbiB0aGlzIGNhc2UgYW5kIGl0IGdpdmVzIGRlZmF1bHQv Z2FyYmFnZSBpcCxob3N0bmFtZSB0byB0aGUgdm0uDQo+IDMpICAgICAgICAgIFNvIHdlIHRyaWVk IGdpdmluZyBpdCB0aHJvdWdoIHN5c3ByZXAvcGF5bG9hZCB0YWcgdGhyb3VnaA0KPiBSRVNUIEFQ SS4gQ29kZSBzbmlwcGV0IGlzIGFzIGZvbGxvd3M6DQo+IA0KPiAgICAgICAgIEh0dHBQdXQgcHV0 ID0gbmV3IEh0dHBQdXQoDQo+IA0KPiAiaHR0cHM6Ly9yaGV2bWFuYWdlci9hcGkvdm1zLzdkYWM3 NGQyLWM1MDQtNGJiZC04NjU5LWM4NzczYTg0NGNiMy8NCj4gPGh0dHBzOi8vMTkyLjE2OC4xMTQu MzYvYXBpL3Ztcy83ZGFjNzRkMi1jNTA0LTRiYmQtODY1OS1jODc3M2E4NDRjYjMvDQo+Iik7DQo+ ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnB1dFhNTDEgPSAiPD94bWwgdmVyc2lv bj1cIjEuMFwiPz4iDQo+IC8qIjx2bT4iKi8NCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsiPHNzbz4iKyI8bWV0aG9kcz4iKyI8bWV0aG9kDQo+IGlkPVwiIisiR1VF U1RfQUdFTlQiKyJcIi8+IisiPC9tZXRob2RzPiIrIjwvc3NvPiINCj4gDQo+ICsiPGRvbWFpbj4i KyI8bmFtZT51bHRpbWF0aXh1YXQubmV0PC9uYW1lPiIrIjwvZG9tYWluPiINCj4gDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIjxwYXlsb2Fkcz4iKyI8cGF5bG9h ZA0KPiB0eXBlPVwiIisiZmxvcHB5IisiXCI+IisgIjxmaWxlcz4iKyI8ZmlsZT4iDQo+IA0KPiAr IjxuYW1lPi9XRUItSU5GL3N5c3ByZXAueG1sPC9uYW1lPiIgDQo+IA0KPiAgKyI8L2ZpbGU+Iisi PC9maWxlcz4iKyI8L3BheWxvYWQ+IisiPC9wYXlsb2Fkcz4iDQo+IA0KPiArIjxyZXBvcnRlZF9k ZXZpY2VzPiIrIjxyZXBvcnRlZF9kZXZpY2U+IisiPGlwcz4iKyI8aXANCj4gYWRkcmVzcz1cIiIr IjEuMS4xLjEiKyJcIi88L2lwcz4iDQo+IA0KPiANCj4gDQorIjxmcWRuPldJTi1BUzA1RU9BREF3 ZXJ3ZXI8L2ZxZG4+IisiPC9yZXBvcnRlZF9kZXZpY2U+IisiPHJlcG9ydGVkX2RldmljZXM+IjsN Cj4gDQo+IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdFbnRpdHkgaW5wdXQxID0g bmV3IA0KU3RyaW5nRW50aXR5KGlucHV0WE1MMSk7DQo+ICAgICAgICAgICAgICAgICAgICAgICAg IHB1dC5zZXRFbnRpdHkoaW5wdXQxKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICAgcHV0LnNl dEhlYWRlcigiQ29udGVudC1UeXBlIiwgDQoiYXBwbGljYXRpb24veG1sIik7DQo+ICAgICAgICAg ICAgICAgICAgICAgICAgIEh0dHBSZXNwb25zZSByZXNwb25zZU5JQyA9IA0KaHR0cGNsaWVudC5l eGVjdXRlKHB1dCk7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcmludGxuKCJSRVNQT05TRQ0K PiA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAiDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByZXNwb25zZU5JQyk7 DQo+IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciByZDEgPSBuZXcg QnVmZmVyZWRSZWFkZXIobmV3DQo+IElucHV0U3RyZWFtUmVhZGVyKA0KPiANCj4gcmVzcG9uc2VO SUMuZ2V0RW50aXR5KCkuZ2V0Q29udGVudCgpKSk7DQo+ICAgICAgICAgICAgICAgICAgICAgICAg IFN0cmluZyBsaW5lMSA9ICIiOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxp bmUxID0gcmQxLnJlYWRMaW5lKCkpICE9IG51bGwpIHsNCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxJTkUgOjo6Ojo6Ojo6Ojo6OiAiDQo+ICsg bGluZTEpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+IA0KPiAgICAgICAgIFRoZSBv dXRwdXQgc2F5cyB0aGF0IG15IGNvZGUgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QuIEkgYW0N Cj4gbm90IHZlcnkgc3VyZSBhcyB0byB3aGF0IGhhcyB0byBiZSB0aGUgY29udGVudCBvZiAic3lz cHJlcC54bWwiIGZpbGUgYW5kDQo+IHdoYXQgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QgaGVy ZS4NCj4gDQo+ICAgICAgICAgQWxzbyB3aGlsZSBkZXBsb3lpbmcgdGhlIHdpbmRvd3MgbWFjaGlu ZSBtYW51YWxseSB0aHJvdWdoIHRoZQ0KPiByaGV2IG1hbmFnZXIgLCB3aGlsZSB1c2luZyBzeXNw cmVwIG9wdGlvbiBpbiAicnVuIG9uY2UiICwgSSBhbSB1bmFibGUgdG8NCj4gZmluZCB0aGUgaXAg YW5kIGhvc3RuYW1lIG9wdGlvbnMgYXMgZm91bmQgICAgICAgICBmb3IgbGludXggDQo+IG1hY2hp bmVzLg0KPiANCj4gDQo+IFJlZ2FyZHMsDQo+IENoYW5kcmFoYXNhIFMNCj4gDQoNCldoYXQgdmVy c2lvbiBvZiBXaW5kb3dzIGFyZSB5b3UgdXNpbmc/DQoNCj4gDQo+IA0KPiBGcm9tOiAgICAgICAg SnVhbiBIZXJuYW5kZXogPGpoZXJuYW5kQHJlZGhhdC5jb20+DQo+IFRvOiAgICAgICAgQ2hhbmRy YWhhc2EgUyA8Y2hhbmRyYWhhc2Euc0B0Y3MuY29tPg0KPiBDYzogICAgICAgIEFnYXJ3YWwgUnVj aGl0YSA8YWdhcndhbC5ydWNoaXRhQHRjcy5jb20+LCB1c2Vyc0BvdmlydC5vcmcsDQo+ICInU2hh aGFyIEhhdml2aSciIDxzaGF2aXZpQHJlZGhhdC5jb20+DQo+IERhdGU6ICAgICAgICAwOS8xOC8y MDE0IDA2OjMwIFBNDQo+IFN1YmplY3Q6ICAgICAgICBSZTogW292aXJ0LXVzZXJzXSBFcnJvciB3 aGlsZSB1c2luZyBSRVNUIEFQSSB3aXRoIE92aXJ0DQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4g DQo+IA0KPiBPbiAwOS8xOC8yMDE0IDAxOjM5IFBNLCBDaGFuZHJhaGFzYSBTIHdyb3RlOg0KPj4g RGVhciBKdWFuIC8gQWxsLA0KPj4NCj4+IFRoYW5rcyBmb3IgcmVwbHkuDQo+Pg0KPj4gIEkgdHJp ZWQgdG8gZ2l2ZSB0aGUgaG9zdG5hbWUgd2l0aCB0aGUgdGFnIG1lbnRpb25lZCAiaG9zdF9uYW1l Ii4gSXRzDQo+PiB3b3JraW5nLg0KPj4NCj4+ICAgICAgICAgU28gYmVsb3cgYXJlIHRoZSBpc3N1 ZXMgc3RpbGwgcmVtYWluaW5nOg0KPj4NCj4+ICAgICAgICAgMSkgVGhlIGlzc3VlIG9mIGludGVy bmFsIHNlcnZlciBlcnJvciBzdGlsbCBwZXJzaXRzIChyaGV2DQo+PiBtYW5hZ2VyIHNob3dpbmcg aXNzdWVzKSBldmVuIGFmdGVyIGZvbGxvd2luZyB0aGUgYWR2aWNlIG9mIHRoZSBleHBlcnQNCj4+ IGFuZCBkb2luZyB0aGUgaW5pdGlhbGl6YXRpb24gcGFydCBqdXN0IG9uY2UoZ2l2aW5nIGlwIGFu ZCANCj4+ICBob3N0bmFtZSkgYWZ0ZXIgY3JlYXRpbmcgdGhlIHZtLg0KPj4NCj4gDQo+IEFjdHVh bGx5IHRoaXMgaXMgYSBidWc6DQo+IA0KPiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vMTE0 NDAwNQ0KPiANCj4gVGhlIHJlYXNvbiBpcyB0aGF0IHdoZW4geW91IHVzZSBhbiBpbmNvcnJlY3Qg Ym9vdCBwcm90b2NvbCB3ZSBlbmQgdXANCj4gc3RvcmluZyBudWxsIGluIHRoZSBjb3JyZXNwb25k aW5nIHBsYWNlIGluIHRoZSBkYXRhYmFzZSwgYW5kIGxhdGVyIHdlDQo+IHVzZSB0aGUgdmFsdWUg d2l0aG91dCBjaGVja2luZyBpdCwgd2hpY2ggdHJpZ2dlcnMgYSBudWxsIHBvaW50ZXIgDQpleGNl cHRpb24uDQo+IA0KPiBUaGUgcmlnaHQgdmFsdWUgZm9yIHRoZSBib290IHByb3RvY29sIGlzICJz dGF0aWMiLCBub3QgIlNUQVRJQ19JUCIuIFRoZQ0KPiAiU1RBVElDX0lQIiB2YWx1ZSBpcyB3aGF0 IHdlIHVzZSBpbiB0aGUgYmFja2VuZCBhbmQgaW4gdGhlIGRhdGFiYXNlLCBidXQNCj4gaW4gdGhl IFJFU1RBUEkgaXQgaXMgInN0YXRpYyIuDQo+IA0KPiBUbyB3b3JrYXJvdW5kIHRoaXMgaXNzdWUg eW91IGNhbiBkZWxldGUgdGhlIFZNcyBhbmQgY3JlYXRlIHRoZW0gYWdhaW4NCj4gd2l0aCB0aGUg Y29ycmVjdCBib290IHByb3RvY29sLg0KPiANCj4gSWYgeW91IGRvbid0IHdhbnQgdG8gY3JlYXRl IHRoZSBWTXMgYWdhaW4geW91IGNhbiBmaXggdGhlIGRhdGFiYXNlDQo+IG1hbnVhbGx5IGxpa2Ug dGhpczoNCj4gDQo+ICMgc3UgLSBwb3N0Z3Jlcw0KPiAjIHBzcWwNCj4gcG9zdGdyZXM9IyBcYyBl bmdpbmUNCj4gZW5naW5lPSMgdXBkYXRlIHZtX2luaXQgc2V0IG5ldHdvcmtzID0gcmVwbGFjZShu ZXR3b3JrcywgJyJib290UHJvdG9jb2wiDQo+IDogbnVsbCcsICciYm9vdFByb3RvY29sIiA6ICJT VEFUSUNfSVAiJyk7DQo+IA0KPj4gICAgICAgICAyKSBQbGVhc2UgY29uZmlybSBpZiB0aGlzIGlz IHRoZSBjYXNlIHRoYXQgIHdlIGNhbiBkbw0KPj4gaW5pdGlhbGl6YXRpb24gcGFydCBvbmx5IG9u Y2Ugb24gYSBwYXJ0aWN1bGFyIHZtICwgdGhlbiB3ZSBjYW4NCj4+IHJlY29uZmlndXJlIHRoZSBu ZXR3b3JrIChpcCwgc3VibmV0LCBnYXRld2F5IGV0YykNCj4+ICAgICAgICAgICAgIG9yIG5vdCBm b3IgdGhhdCB2bS4NCj4+DQo+IA0KPiBJJ20gcmVhc29uYWJseSBzdXJlIHRoYXQgeW91IGNhbiBy dW4gaW5pdGlhbGl6YXRpb24gb25seSBvbmNlIHBlciBWTSwNCj4gYnV0IFNoYWhhciBjYW4gY29u ZmlybSB0aGlzIGJldHRlciB0aGFuIG1lLg0KPiANCj4+ICAgICAgICAgMykgRm9yIFdpbmRvd3Mg Z3Vlc3Qgd2UgYXJlIHN0aWxsIHVuYWJsZSB0byBwcm92aWRlIGlwIGRldGFpbHMNCj4+IGFuZCBo b3N0bmFtZSB1c2luZyBzeXNwcmVwL3BheWxvYWQuDQo+Pg0KPiANCj4gSSdtIG5vdCBmYW1pbGlh ciB3aXRoIFN5c3ByZXAuIENhbiB5b3UgcHJvdmlkZSBhbiBleGFtcGxlIG9mIHRoZSBjb2RlDQo+ IHRoYXQgeW91IGFyZSB1c2luZyBmb3IgdGhhdD8NCj4gDQo+PiBFcnJvciBhdHRhY2hlZC4NCj4+ DQo+Pg0KPj4NCj4+IFJlZ2FyZHMsDQo+PiBDaGFuZHJhaGFzYSBTDQo+Pg0KPj4NCj4+DQo+PiBG cm9tOiAgICAgICAgSnVhbiBIZXJuYW5kZXogPGpoZXJuYW5kQHJlZGhhdC5jb20+DQo+PiBUbzog ICAgICAgIENoYW5kcmFoYXNhIFMgPGNoYW5kcmFoYXNhLnNAdGNzLmNvbT4sIHVzZXJzQG92aXJ0 Lm9yZw0KPj4gQ2M6ICAgICAgICBBZ2Fyd2FsIFJ1Y2hpdGEgPGFnYXJ3YWwucnVjaGl0YUB0Y3Mu Y29tPg0KPj4gRGF0ZTogICAgICAgIDA5LzE4LzIwMTQgMDM6MzUgUE0NCj4+IFN1YmplY3Q6ICAg ICAgICBSZTogW292aXJ0LXVzZXJzXSBFcnJvciB3aGlsZSB1c2luZyBSRVNUIEFQSSB3aXRoIE92 aXJ0DQo+PiANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4NCj4+DQo+Pg0KPj4gT24gMDkvMTgvMjAxNCAw ODoxOCBBTSwgQ2hhbmRyYWhhc2EgUyB3cm90ZToNCj4+PiBEZWFyIEV4cGVydHMuDQo+Pj4NCj4+ PiBXZSBhcmUgSW50ZWdyYXRpbmcgb3VyIGludGVybmFsIGNsb3VkIHBvcnRhbCB3aXRoICBPdmly dCAvIFJIRVZNIA0KdmVyc2lvbg0KPj4+IDMuNC4NCj4+Pg0KPj4+IFdlIGFyZSBpbnRlZ3JhdGlu ZyBvdXIgaW50ZXJuYWwgY2xvdWQgd2l0aCBPdmlydCAvIFJIRVZNLiBWTSB0ZW1wbGF0ZQ0KPj4+ IGNyZWF0ZWQgdXNpbmcgY2xvdWQgaW5pdC4NCj4+Pg0KPj4+IFRocm91Z2ggUkVTVCBBUEkgTmlw cGV0IHdoaWxlIGNvZGVzIHBhc3NlcyBjb21tYW5kIHRvIHRlbXBsYXRlICggd2l0aA0KPj4+IGNs b3VkIGluaXQpIElQLCBIT1NUTkFNRSwgV2UgYXJlIGFibGUgdG8gc2V0IElQIGFuZCBIb3N0bmFt ZSB0byBWTQ0KPj4+IHRocm91Z2ggY29kZS4NCj4+Pg0KPj4+IEJ1dCBwb3N0IHRoaXMgTWFuYWdl ciBnZXR0aW5nIGhhbmRlZC4gRXJyb3IgY29kZSBpcyBhdHRhY2hlZC4NCj4+Pg0KPj4+IE5lZWQg eW91ciBoZWxwIHBsZWFzZS4NCj4+Pg0KPj4NCj4+IElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHkg eW91IGFscmVhZHkgY3JlYXRlZCBhIHRlbXBsYXRlIHdpdGggdGhlIGNsb3VkDQo+PiBpbml0IGNv bmZpZ3VyYXRpb24sIHRoZW4geW91IGNyZWF0ZWQgYSBWTSBmcm9tIHRoYXQgdGVtcGxhdGUsIGFu ZCB5b3UNCj4+IHdhbnQgdG8gbW9kaWZ5IGl0IGFuZCBzdGFydCBpdC4gSW4gb3JkZXIgdG8gdXBk YXRlIHRoZSBWTSB5b3UgbmVlZCB0bw0KPj4gaXNzdWUgYSBQVVQgcmVxdWVzdCwgYW5kIHRoZSB0 YWcgbmFtZSBmb3IgdGhlIGhvc3QgaXMgImhvc3RfbmFtZSI6DQo+Pg0KPj4gICAgU3RyaW5nIHVw ZGF0ZVhtbCA9DQo+PiAgICAgICAgICAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz4iDQo+PiAgICAg ICAgKyAiPHZtPiINCj4+ICAgICAgICArICAgIjxpbml0aWFsaXphdGlvbj4iDQo+PiAgICAgICAg KyAgICAgIjxob3N0X25hbWU+bWVnaGFhc2FkbWluLnVsdGltYXRpeHVhdC5uZXQ8L2hvc3RfbmFt ZT4iDQo+PiAgICAgICAgKyAgICAgIjxyZWdlbmVyYXRlX3NzaF9rZXlzPmZhbHNlPC9yZWdlbmVy YXRlX3NzaF9rZXlzPiINCj4+ICAgICAgICArICAgICAiPG5pY19jb25maWd1cmF0aW9ucz4iDQo+ PiAgICAgICAgKyAgICAgICAiPG5pY19jb25maWd1cmF0aW9uPiINCj4+ICAgICAgICArICAgICAg ICAgIjxuYW1lPmV0aDA8L25hbWU+Ig0KPj4gICAgICAgICsgICAgICAgICAiPGlwIGFkZHJlc3M9 XCIxLjEuMS4xXCIgbmV0bWFzaz1cIjI1NS4yNTUuMjU1LjBcIg0KPj4gZ2F0ZXdheT1cIjEzLjMu My4zXCIvPiINCj4+ICAgICAgICArICAgICAgICAgIjxib290X3Byb3RvY29sPnN0YXRpYzwvYm9v dF9wcm90b2NvbD4iDQo+PiAgICAgICAgKyAgICAgICAgICI8b25fYm9vdD50cnVlPC9vbl9ib290 PiINCj4+ICAgICAgICArICAgICAgICI8L25pY19jb25maWd1cmF0aW9uPiINCj4+ICAgICAgICAr ICAgICAiPC9uaWNfY29uZmlndXJhdGlvbnM+Ig0KPj4gICAgICAgICsgICAiPC9pbml0aWFsaXph dGlvbj4iDQo+PiAgICAgICAgKyAiPC92bT4iOw0KPj4gICAgU3RyaW5nRW50aXR5IHVwZGF0ZUVu dGl0eSA9IG5ldyBTdHJpbmdFbnRpdHkodXBkYXRlWG1sKTsNCj4+ICAgIEh0dHBQdXQgdXBkYXRl UmVxdWVzdCA9IG5ldyBIdHRwUHV0KGFwaVVybCArICIvdm1zLyIgKyB2bUlkKTsNCj4+ICAgIHVw ZGF0ZVJlcXVlc3Quc2V0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veG1sIik7 DQo+PiAgICB1cGRhdGVSZXF1ZXN0LnNldEhlYWRlcigiQWNjZXB0IiwgImFwcGxpY2F0aW9uL3ht bCIpOw0KPj4gICAgdXBkYXRlUmVxdWVzdC5zZXRFbnRpdHkodXBkYXRlRW50aXR5KTsNCj4+ICAg IEh0dHBSZXNwb25zZSB1cGRhdGVSZXNwb25zZSA9IGNsaWVudC5leGVjdXRlKHVwZGF0ZVJlcXVl c3QpOw0KPj4NCj4+IFRoZW4sIGFmdGVyIHRoZSB1cGRhdGUsIHlvdSBuZWVkIHRvIHN0YXJ0IHRo ZSBWTSBhbmQgaXQgd2lsbCB1c2UgdGhhdA0KPj4gY29uZmlndXJhdGlvbjoNCj4+DQo+PiAgICBT dHJpbmcgc3RhcnRYbWwgPQ0KPj4gICAgICAgICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+Ig0K Pj4gICAgICAgICsgIjxhY3Rpb24vPiI7DQo+PiAgICBTdHJpbmdFbnRpdHkgc3RhcnRFbnRpdHkg PSBuZXcgU3RyaW5nRW50aXR5KHN0YXJ0WG1sKTsNCj4+ICAgIEh0dHBQb3N0IHN0YXJ0UmVxdWVz dCA9IG5ldyBIdHRwUG9zdChhcGlVcmwgKyAiL3Ztcy8iICsgdm1JZCArDQo+PiAiL3N0YXJ0Iik7 DQo+PiAgICBzdGFydFJlcXVlc3Quc2V0RW50aXR5KHN0YXJ0RW50aXR5KTsNCj4+ICAgIHN0YXJ0 UmVxdWVzdC5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94bWwiKTsNCj4+ ICAgIHN0YXJ0UmVxdWVzdC5zZXRIZWFkZXIoIkFjY2VwdCIsICJhcHBsaWNhdGlvbi94bWwiKTsN Cj4+ICAgIEh0dHBSZXNwb25zZSBzdGFydFJlc3BvbnNlID0gY2xpZW50LmV4ZWN1dGUoc3RhcnRS ZXF1ZXN0KTsNCj4+DQo+PiBTb21lIGFkdmljZXM6DQo+Pg0KPj4gKiBDaGVjayB0aGUgWE1MIHNj aGVtYSBmb3IgdGhlIHN0cnVjdHVyZSBvZiB0aGUgWE1MIGRvY3VtZW50czoNCj4+DQo+PiAgaHR0 cHM6Ly9yaGV2bWFuYWdlci9hcGk/c2NoZW1hDQo+Pg0KPj4gKiBXaGVuIHNlbmRpbmcgcmVxdWVz dHMgdG8gdGhlIFJFU1RBUEkgbWFrZXMgc3VyZSB0byBhbHdheXMgZXhwbGljaXRseQ0KPj4gYWRk IHRoZSBDb250ZW50LVR5cGUgYW5kIEFjY2VwdCBoZWFkZXJzOg0KPj4NCj4+ICB5b3VyUmVxdWVz dC5zZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94bWwiKTsNCj4+ICB5b3Vy UmVxdWVzdC5zZXRIZWFkZXIoIkFjY2VwdCIsICJhcHBsaWNhdGlvbi94bWwiKTsNCj4+DQo+PiAq IFRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIHdpdGggY2xvdWQtaW5p dCB3aWxsIG9ubHkgDQpiZQ0KPj4gZXhlY3V0ZWQgdGhlIGZpcnN0IHRpbWUgeW91IHN0YXJ0IHRo ZSBWTSwgc28gaW4geW91ciB0ZXN0cyB5b3Ugd2lsbCANCm5lZWQNCj4+IHRvIHJlbW92ZSB0aGUg Vk0gYW5kIGNyZWF0ZSBpdCBhZ2Fpbi4NCj4+DQo+PiAqIElmIHlvdSBhcmUgcGxhbm5pbmcgdG8g ZG8gY29tcGxleCB0aGluZ3MgeW91IG1heSBmaW5kIGl0IGhlbHBmdWwgdGhlDQo+PiBKYXZhIFNE SzoNCj4+DQo+PiAgaHR0cDovL3d3dy5vdmlydC5vcmcvSmF2YS1zZGsNCj4+DQoNCi0tIA0KRGly ZWNjacOzbiBDb21lcmNpYWw6IEMvSm9zZSBCYXJkYXNhbm8gQmFvcywgOSwgRWRpZi4gR29yYmVh IDMsIHBsYW50YQ0KM8K6RCwgMjgwMTYgTWFkcmlkLCBTcGFpbg0KSW5zY3JpdGEgZW4gZWwgUmVn LiBNZXJjYW50aWwgZGUgTWFkcmlkIOKAkyBDLkkuRi4gQjgyNjU3OTQxIC0gUmVkIEhhdCBTLkwu DQoNCg0KPT09PT0tLS0tLT09PT09LS0tLS09PT09PQpOb3RpY2U6IFRoZSBpbmZvcm1hdGlvbiBj b250YWluZWQgaW4gdGhpcyBlLW1haWwKbWVzc2FnZSBhbmQvb3IgYXR0YWNobWVudHMgdG8gaXQg bWF5IGNvbnRhaW4gCmNvbmZpZGVudGlhbCBvciBwcml2aWxlZ2VkIGluZm9ybWF0aW9uLiBJZiB5 b3UgYXJlIApub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgYW55IGRpc3NlbWluYXRpb24sIHVz ZSwgCnJldmlldywgZGlzdHJpYnV0aW9uLCBwcmludGluZyBvciBjb3B5aW5nIG9mIHRoZSAKaW5m b3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZS1tYWlsIG1lc3NhZ2UgCmFuZC9vciBhdHRhY2ht ZW50cyB0byBpdCBhcmUgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgCnlvdSBoYXZlIHJlY2VpdmVk IHRoaXMgY29tbXVuaWNhdGlvbiBpbiBlcnJvciwgCnBsZWFzZSBub3RpZnkgdXMgYnkgcmVwbHkg ZS1tYWlsIG9yIHRlbGVwaG9uZSBhbmQgCmltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseSBkZWxl dGUgdGhlIG1lc3NhZ2UgCmFuZCBhbnkgYXR0YWNobWVudHMuIFRoYW5rIHlvdQoKCg== --=_alternative 0052008365257D5C_= MIME-Version: 1.0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPldpbmRvd3MgMjAwOCBSMjwvZm9udD4NCjxi cj4NCjxicj48Zm9udCBzaXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+UmVnYXJkcyw8L2ZvbnQ+DQo8 YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPkNoYW5kcmFoYXNhIFM8YnI+DQo8L2Zv bnQ+DQo8YnI+DQo8YnI+DQo8YnI+PGZvbnQgc2l6ZT0xIGNvbG9yPSM1ZjVmNWYgZmFjZT0ic2Fu cy1zZXJpZiI+RnJvbTogJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOzwvZm9udD48Zm9udCBz aXplPTEgZmFjZT0ic2Fucy1zZXJpZiI+SnVhbiBIZXJuYW5kZXogJmx0O2poZXJuYW5kQHJlZGhh dC5jb20mZ3Q7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MSBjb2xvcj0jNWY1ZjVmIGZhY2U9InNh bnMtc2VyaWYiPlRvOiAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7PC9mb250Pjxmb250IHNp emU9MSBmYWNlPSJzYW5zLXNlcmlmIj5DaGFuZHJhaGFzYSBTICZsdDtjaGFuZHJhaGFzYS5zQHRj cy5jb20mZ3Q7PC9mb250Pg0KPGJyPjxmb250IHNpemU9MSBjb2xvcj0jNWY1ZjVmIGZhY2U9InNh bnMtc2VyaWYiPkNjOiAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7PC9mb250Pjxmb250IHNp emU9MSBmYWNlPSJzYW5zLXNlcmlmIj5BZ2Fyd2FsIFJ1Y2hpdGEgJmx0O2FnYXJ3YWwucnVjaGl0 YUB0Y3MuY29tJmd0OywNCnVzZXJzQG92aXJ0Lm9yZzwvZm9udD4NCjxicj48Zm9udCBzaXplPTEg Y29sb3I9IzVmNWY1ZiBmYWNlPSJzYW5zLXNlcmlmIj5EYXRlOiAmbmJzcDsgJm5ic3A7ICZuYnNw Ow0KJm5ic3A7PC9mb250Pjxmb250IHNpemU9MSBmYWNlPSJzYW5zLXNlcmlmIj4wOS8yMy8yMDE0 IDA2OjU4IFBNPC9mb250Pg0KPGJyPjxmb250IHNpemU9MSBjb2xvcj0jNWY1ZjVmIGZhY2U9InNh bnMtc2VyaWYiPlN1YmplY3Q6ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDs8L2ZvbnQ+PGZv bnQgc2l6ZT0xIGZhY2U9InNhbnMtc2VyaWYiPlJlOiBbb3ZpcnQtdXNlcnNdDQpFcnJvciB3aGls ZSB1c2luZyBSRVNUIEFQSSB3aXRoIE92aXJ0PC9mb250Pg0KPGJyPg0KPGhyIG5vc2hhZGU+DQo8 YnI+DQo8YnI+DQo8YnI+PHR0Pjxmb250IHNpemU9Mj5PbiAwOS8yMy8yMDE0IDA2OjM5IEFNLCBD aGFuZHJhaGFzYSBTIHdyb3RlOjxicj4NCiZndDsgRGVhciBKdWFuLDxicj4NCiZndDsgPGJyPg0K Jmd0OyBUaGFua3MgbG90IGZvciBzdXBwb3J0Ljxicj4NCiZndDsgPGJyPg0KJmd0OyBJbnRlcm5h bCBzZXJ2ZXIgZXJyb3IgaXNzdWUgYWxzbyByZXNvbHZlZCB3aXRoIGxpbnV4IGd1ZXN0cy4gTm93 IHdlDQphcmU8YnI+DQomZ3Q7IGFibGUgdG8gcHJvdmlkZSBpcCBhbmQgaG9zdG5hbWUgdG8gbGlu dXggZ3Vlc3RzIGluIHJoZXYgMy40IHN1Y2Nlc3NmdWxseTxicj4NCiZndDsgdmlhIFJFU1RBUEkg Z2l2aW5nIGJvb3QgcHJvdG9jb2wgYXMgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZxdW90 O3N0YXRpYyZxdW90Ow0KYXMgYWR2aXNlZC48YnI+DQomZ3Q7IDxicj4NCiZndDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IEZvciBXaW5kb3dzIEd1ZXN0IHdlIGRpZCB0aGUgZm9sbG93aW5n Ojxicj4NCiZndDsgMSkgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7UHJlcGFyZWQgYSB0ZW1w bGF0ZSB3aXRoIGd1ZXN0IGFnZW50cw0KaW5zdGFsbGVkIGFuZCBkZXBsb3llZCBhPGJyPg0KJmd0 OyB2bSBzdWNjZXNzZnVsbHkgdGhyb3VnaCBSRVNUQVBJLjxicj4NCiZndDsgMikgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7Rm9sbG93aW5nIGluaXRpYWxpemF0aW9uIHBhcnQgc2FtZSBhcw0K TGludXggZ3Vlc3QgZGlkIG5vdCB3b3JrPGJyPg0KJmd0OyBpbiB0aGlzIGNhc2UgYW5kIGl0IGdp dmVzIGRlZmF1bHQvZ2FyYmFnZSBpcCxob3N0bmFtZSB0byB0aGUgdm0uPGJyPg0KJmd0OyAzKSAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7U28gd2UgdHJpZWQgZ2l2aW5nIGl0IHRo cm91Z2gNCnN5c3ByZXAvcGF5bG9hZCB0YWcgdGhyb3VnaDxicj4NCiZndDsgUkVTVCBBUEkuIENv ZGUgc25pcHBldCBpcyBhcyBmb2xsb3dzOjxicj4NCiZndDsgPGJyPg0KJmd0OyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgSHR0cFB1dCBwdXQgPSBuZXcgSHR0cFB1dCg8YnI+DQomZ3Q7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7PGJyPg0KJmd0OyAmcXVvdDs8L2ZvbnQ+PC90dD48YSBo cmVmPSJodHRwczovL3JoZXZtYW5hZ2VyL2FwaS92bXMvN2RhYzc0ZDItYzUwNC00YmJkLTg2NTkt Yzg3NzNhODQ0Y2IzLyI+PHR0Pjxmb250IHNpemU9Mj5odHRwczovL3JoZXZtYW5hZ2VyL2FwaS92 bXMvN2RhYzc0ZDItYzUwNC00YmJkLTg2NTktYzg3NzNhODQ0Y2IzLzwvZm9udD48L3R0PjwvYT48 dHQ+PGZvbnQgc2l6ZT0yPjxicj4NCiZndDsgJmx0OzwvZm9udD48L3R0PjxhIGhyZWY9Imh0dHBz Oi8vMTkyLjE2OC4xMTQuMzYvYXBpL3Ztcy83ZGFjNzRkMi1jNTA0LTRiYmQtODY1OS1jODc3M2E4 NDRjYjMvIj48dHQ+PGZvbnQgc2l6ZT0yPmh0dHBzOi8vMTkyLjE2OC4xMTQuMzYvYXBpL3Ztcy83 ZGFjNzRkMi1jNTA0LTRiYmQtODY1OS1jODc3M2E4NDRjYjMvPC9mb250PjwvdHQ+PC9hPjx0dD48 Zm9udCBzaXplPTI+Jmd0OyZxdW90Oyk7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAm bmJzcDsgU3RyaW5nIGlucHV0WE1MMSA9ICZxdW90OyZsdDs/eG1sIHZlcnNpb249XCZxdW90OzEu MFwmcXVvdDs/Jmd0OyZxdW90Ozxicj4NCiZndDsgLyomcXVvdDsmbHQ7dm0mZ3Q7JnF1b3Q7Ki88 YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICsmcXVvdDsmbHQ7c3NvJmd0OyZx dW90OysmcXVvdDsmbHQ7bWV0aG9kcyZndDsmcXVvdDsrJnF1b3Q7Jmx0O21ldGhvZDxicj4NCiZn dDsgaWQ9XCZxdW90OyZxdW90OysmcXVvdDtHVUVTVF9BR0VOVCZxdW90OysmcXVvdDtcJnF1b3Q7 LyZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9tZXRob2RzJmd0OyZxdW90OysmcXVvdDsmbHQ7L3NzbyZn dDsmcXVvdDs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7PGJyPg0KJmd0OyAr JnF1b3Q7Jmx0O2RvbWFpbiZndDsmcXVvdDsrJnF1b3Q7Jmx0O25hbWUmZ3Q7dWx0aW1hdGl4dWF0 Lm5ldCZsdDsvbmFtZSZndDsmcXVvdDsrJnF1b3Q7Jmx0Oy9kb21haW4mZ3Q7JnF1b3Q7PGJyPg0K Jmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICsmcXVvdDsmbHQ7cGF5bG9h ZHMmZ3Q7JnF1b3Q7KyZxdW90OyZsdDtwYXlsb2FkPGJyPg0KJmd0OyB0eXBlPVwmcXVvdDsmcXVv dDsrJnF1b3Q7ZmxvcHB5JnF1b3Q7KyZxdW90O1wmcXVvdDsmZ3Q7JnF1b3Q7KyAmcXVvdDsmbHQ7 ZmlsZXMmZ3Q7JnF1b3Q7KyZxdW90OyZsdDtmaWxlJmd0OyZxdW90Ozxicj4NCiZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDs8YnI+DQomZ3Q7ICsmcXVvdDsmbHQ7bmFtZSZndDsvV0VCLUlO Ri9zeXNwcmVwLnhtbCZsdDsvbmFtZSZndDsmcXVvdDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzxicj4NCiZndDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7PGJyPg0KJmd0 OyAmbmJzcDsrJnF1b3Q7Jmx0Oy9maWxlJmd0OyZxdW90OysmcXVvdDsmbHQ7L2ZpbGVzJmd0OyZx dW90OysmcXVvdDsmbHQ7L3BheWxvYWQmZ3Q7JnF1b3Q7KyZxdW90OyZsdDsvcGF5bG9hZHMmZ3Q7 JnF1b3Q7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7PGJyPg0KJmd0OyArJnF1b3Q7Jmx0O3JlcG9ydGVkX2RldmljZXMmZ3Q7 JnF1b3Q7KyZxdW90OyZsdDtyZXBvcnRlZF9kZXZpY2UmZ3Q7JnF1b3Q7KyZxdW90OyZsdDtpcHMm Z3Q7JnF1b3Q7KyZxdW90OyZsdDtpcDxicj4NCiZndDsgYWRkcmVzcz1cJnF1b3Q7JnF1b3Q7KyZx dW90OzEuMS4xLjEmcXVvdDsrJnF1b3Q7XCZxdW90Oy8mbHQ7L2lwcyZndDsmcXVvdDs8YnI+DQom Z3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzxicj4NCiZndDsg KyZxdW90OyZsdDtmcWRuJmd0O1dJTi1BUzA1RU9BREF3ZXJ3ZXImbHQ7L2ZxZG4mZ3Q7JnF1b3Q7 KyZxdW90OyZsdDsvcmVwb3J0ZWRfZGV2aWNlJmd0OyZxdW90OysmcXVvdDsmbHQ7cmVwb3J0ZWRf ZGV2aWNlcyZndDsmcXVvdDs7PGJyPg0KJmd0OyA8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5i c3A7ICZuYnNwOyAmbmJzcDs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyBT dHJpbmdFbnRpdHkgaW5wdXQxID0gbmV3IFN0cmluZ0VudGl0eShpbnB1dFhNTDEpOzxicj4NCiZn dDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7IHB1dC5zZXRFbnRpdHkoaW5wdXQxKTs8YnI+ DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyBwdXQuc2V0SGVhZGVyKCZxdW90O0Nv bnRlbnQtVHlwZSZxdW90OywgJnF1b3Q7YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+DQomZ3Q7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyBIdHRwUmVzcG9uc2UgcmVzcG9uc2VOSUMgPSBo dHRwY2xpZW50LmV4ZWN1dGUocHV0KTs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZu YnNwOyBTeXN0ZW0ub3V0PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAucHJp bnRsbigmcXVvdDtSRVNQT05TRTxicj4NCiZndDsgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6 Ojo6Ojo6OjogJnF1b3Q7PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsNCiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyArIHJl c3BvbnNlTklDKTs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOzxicj4NCiZn dDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7IEJ1ZmZlcmVkUmVhZGVyIHJkMSA9IG5ldyBC dWZmZXJlZFJlYWRlcihuZXc8YnI+DQomZ3Q7IElucHV0U3RyZWFtUmVhZGVyKDxicj4NCiZndDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs8YnI+DQomZ3Q7IHJlc3BvbnNlTklDLmdldEVudGl0 eSgpLmdldENvbnRlbnQoKSkpOzxicj4NCiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQombmJzcDsgJm5ic3A7 IFN0cmluZyBsaW5lMSA9ICZxdW90OyZxdW90Ozs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5i c3A7ICZuYnNwOyB3aGlsZSAoKGxpbmUxID0gcmQxLnJlYWRMaW5lKCkpICE9IG51bGwpIHs8YnI+ DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgU3lzdGVtLm91dC5wcmludGxuKCZxdW90O0xJTkUNCjo6Ojo6Ojo6Ojo6OjogJnF1b3Q7 PGJyPg0KJmd0OyArIGxpbmUxKTs8YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOw0KJm5ic3A7ICZuYnNw OyB9PGJyPg0KJmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsNCiZuYnNwOyAmbmJzcDs8YnI+DQomZ3Q7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBUaGUgb3V0cHV0IHNheXMgdGhhdCBteSBjb2RlIGlzIHN5 bnRhY3RpY2FsbHkNCmluY29ycmVjdC4gSSBhbTxicj4NCiZndDsgbm90IHZlcnkgc3VyZSBhcyB0 byB3aGF0IGhhcyB0byBiZSB0aGUgY29udGVudCBvZiAmcXVvdDtzeXNwcmVwLnhtbCZxdW90Ow0K ZmlsZSBhbmQ8YnI+DQomZ3Q7IHdoYXQgaXMgc3ludGFjdGljYWxseSBpbmNvcnJlY3QgaGVyZS48 YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzxicj4NCiZndDsgJm5ic3A7ICZu YnNwOyAmbmJzcDsgJm5ic3A7IEFsc28gd2hpbGUgZGVwbG95aW5nIHRoZSB3aW5kb3dzIG1hY2hp bmUNCm1hbnVhbGx5IHRocm91Z2ggdGhlPGJyPg0KJmd0OyByaGV2IG1hbmFnZXIgLCB3aGlsZSB1 c2luZyBzeXNwcmVwIG9wdGlvbiBpbiAmcXVvdDtydW4gb25jZSZxdW90Ow0KLCBJIGFtIHVuYWJs ZSB0bzxicj4NCiZndDsgZmluZCB0aGUgaXAgYW5kIGhvc3RuYW1lIG9wdGlvbnMgYXMgZm91bmQg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7DQpmb3IgbGludXggJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7PGJyPg0KJmd0OyBtYWNoaW5lcy48YnI+DQomZ3Q7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOzxicj4NCiZndDsgPGJyPg0KJmd0OyBSZWdhcmRzLDxicj4NCiZndDsgQ2hhbmRy YWhhc2EgUzxicj4NCiZndDsgPGJyPg0KPGJyPg0KV2hhdCB2ZXJzaW9uIG9mIFdpbmRvd3MgYXJl IHlvdSB1c2luZz88YnI+DQo8YnI+DQomZ3Q7IDxicj4NCiZndDsgPGJyPg0KJmd0OyBGcm9tOiAm bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtKdWFuIEhlcm5hbmRleiAmbHQ7amhlcm5hbmRAcmVk aGF0LmNvbSZndDs8YnI+DQomZ3Q7IFRvOiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtDaGFu ZHJhaGFzYSBTICZsdDtjaGFuZHJhaGFzYS5zQHRjcy5jb20mZ3Q7PGJyPg0KJmd0OyBDYzogJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7QWdhcndhbCBSdWNoaXRhICZsdDthZ2Fyd2FsLnJ1Y2hp dGFAdGNzLmNvbSZndDssDQp1c2Vyc0BvdmlydC5vcmcsPGJyPg0KJmd0OyAmcXVvdDsnU2hhaGFy IEhhdml2aScmcXVvdDsgJmx0O3NoYXZpdmlAcmVkaGF0LmNvbSZndDs8YnI+DQomZ3Q7IERhdGU6 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzA5LzE4LzIwMTQgMDY6MzAgUE08YnI+DQomZ3Q7 IFN1YmplY3Q6ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1JlOiBbb3ZpcnQtdXNlcnNdIEVy cm9yIHdoaWxlDQp1c2luZyBSRVNUIEFQSSB3aXRoIE92aXJ0PGJyPg0KJmd0OyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS08YnI+DQomZ3Q7IDxicj4NCiZndDsgPGJyPg0KJmd0OyA8YnI+DQomZ3Q7IE9uIDA5LzE4 LzIwMTQgMDE6MzkgUE0sIENoYW5kcmFoYXNhIFMgd3JvdGU6PGJyPg0KJmd0OyZndDsgRGVhciBK dWFuIC8gQWxsLDxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyZndDsgVGhhbmtzIGZvciByZXBseS48 YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7ICZuYnNwO0kgdHJpZWQgdG8gZ2l2ZSB0aGUgaG9z dG5hbWUgd2l0aCB0aGUgdGFnIG1lbnRpb25lZCAmcXVvdDtob3N0X25hbWUmcXVvdDsuDQpJdHM8 YnI+DQomZ3Q7Jmd0OyB3b3JraW5nLjxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyZndDsgJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFNvIGJlbG93IGFyZSB0aGUgaXNzdWVzIHN0aWxsIHJlbWFp bmluZzo8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyAxKSBUaGUgaXNzdWUgb2YgaW50ZXJuYWwgc2VydmVyIGVycm9yDQpzdGlsbCBwZXJzaXRz IChyaGV2PGJyPg0KJmd0OyZndDsgbWFuYWdlciBzaG93aW5nIGlzc3VlcykgZXZlbiBhZnRlciBm b2xsb3dpbmcgdGhlIGFkdmljZSBvZiB0aGUNCmV4cGVydDxicj4NCiZndDsmZ3Q7IGFuZCBkb2lu ZyB0aGUgaW5pdGlhbGl6YXRpb24gcGFydCBqdXN0IG9uY2UoZ2l2aW5nIGlwIGFuZCAmbmJzcDsN CiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs8YnI+DQomZ3Q7Jmd0OyAmbmJzcDto b3N0bmFtZSkgYWZ0ZXIgY3JlYXRpbmcgdGhlIHZtLjxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyA8 YnI+DQomZ3Q7IEFjdHVhbGx5IHRoaXMgaXMgYSBidWc6PGJyPg0KJmd0OyA8YnI+DQomZ3Q7IDwv Zm9udD48L3R0PjxhIGhyZWY9aHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tLzExNDQwMDU+PHR0 Pjxmb250IHNpemU9Mj5odHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vMTE0NDAwNTwvZm9udD48 L3R0PjwvYT48dHQ+PGZvbnQgc2l6ZT0yPjxicj4NCiZndDsgPGJyPg0KJmd0OyBUaGUgcmVhc29u IGlzIHRoYXQgd2hlbiB5b3UgdXNlIGFuIGluY29ycmVjdCBib290IHByb3RvY29sIHdlIGVuZA0K dXA8YnI+DQomZ3Q7IHN0b3JpbmcgbnVsbCBpbiB0aGUgY29ycmVzcG9uZGluZyBwbGFjZSBpbiB0 aGUgZGF0YWJhc2UsIGFuZCBsYXRlcg0Kd2U8YnI+DQomZ3Q7IHVzZSB0aGUgdmFsdWUgd2l0aG91 dCBjaGVja2luZyBpdCwgd2hpY2ggdHJpZ2dlcnMgYSBudWxsIHBvaW50ZXIgZXhjZXB0aW9uLjxi cj4NCiZndDsgPGJyPg0KJmd0OyBUaGUgcmlnaHQgdmFsdWUgZm9yIHRoZSBib290IHByb3RvY29s IGlzICZxdW90O3N0YXRpYyZxdW90Oywgbm90ICZxdW90O1NUQVRJQ19JUCZxdW90Oy4NClRoZTxi cj4NCiZndDsgJnF1b3Q7U1RBVElDX0lQJnF1b3Q7IHZhbHVlIGlzIHdoYXQgd2UgdXNlIGluIHRo ZSBiYWNrZW5kIGFuZCBpbiB0aGUNCmRhdGFiYXNlLCBidXQ8YnI+DQomZ3Q7IGluIHRoZSBSRVNU QVBJIGl0IGlzICZxdW90O3N0YXRpYyZxdW90Oy48YnI+DQomZ3Q7IDxicj4NCiZndDsgVG8gd29y a2Fyb3VuZCB0aGlzIGlzc3VlIHlvdSBjYW4gZGVsZXRlIHRoZSBWTXMgYW5kIGNyZWF0ZSB0aGVt IGFnYWluPGJyPg0KJmd0OyB3aXRoIHRoZSBjb3JyZWN0IGJvb3QgcHJvdG9jb2wuPGJyPg0KJmd0 OyA8YnI+DQomZ3Q7IElmIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSB0aGUgVk1zIGFnYWluIHlv dSBjYW4gZml4IHRoZSBkYXRhYmFzZTxicj4NCiZndDsgbWFudWFsbHkgbGlrZSB0aGlzOjxicj4N CiZndDsgPGJyPg0KJmd0OyAjIHN1IC0gcG9zdGdyZXM8YnI+DQomZ3Q7ICMgcHNxbDxicj4NCiZn dDsgcG9zdGdyZXM9IyBcYyBlbmdpbmU8YnI+DQomZ3Q7IGVuZ2luZT0jIHVwZGF0ZSB2bV9pbml0 IHNldCBuZXR3b3JrcyA9IHJlcGxhY2UobmV0d29ya3MsICcmcXVvdDtib290UHJvdG9jb2wmcXVv dDs8YnI+DQomZ3Q7IDogbnVsbCcsICcmcXVvdDtib290UHJvdG9jb2wmcXVvdDsgOiAmcXVvdDtT VEFUSUNfSVAmcXVvdDsnKTs8YnI+DQomZ3Q7IDxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAyKSBQbGVhc2UgY29uZmlybSBpZiB0aGlzIGlzIHRoZSBjYXNlDQp0aGF0 ICZuYnNwO3dlIGNhbiBkbzxicj4NCiZndDsmZ3Q7IGluaXRpYWxpemF0aW9uIHBhcnQgb25seSBv bmNlIG9uIGEgcGFydGljdWxhciB2bSAsIHRoZW4gd2UgY2FuPGJyPg0KJmd0OyZndDsgcmVjb25m aWd1cmUgdGhlIG5ldHdvcmsgKGlwLCBzdWJuZXQsIGdhdGV3YXkgZXRjKTxicj4NCiZndDsmZ3Q7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IG9yIG5vdCBmb3IgdGhh dCB2bS48YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsgPGJyPg0KJmd0OyBJJ20gcmVhc29uYWJseSBz dXJlIHRoYXQgeW91IGNhbiBydW4gaW5pdGlhbGl6YXRpb24gb25seSBvbmNlIHBlcg0KVk0sPGJy Pg0KJmd0OyBidXQgU2hhaGFyIGNhbiBjb25maXJtIHRoaXMgYmV0dGVyIHRoYW4gbWUuPGJyPg0K Jmd0OyA8YnI+DQomZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMykgRm9yIFdp bmRvd3MgZ3Vlc3Qgd2UgYXJlIHN0aWxsDQp1bmFibGUgdG8gcHJvdmlkZSBpcCBkZXRhaWxzPGJy Pg0KJmd0OyZndDsgYW5kIGhvc3RuYW1lIHVzaW5nIHN5c3ByZXAvcGF5bG9hZC48YnI+DQomZ3Q7 Jmd0Ozxicj4NCiZndDsgPGJyPg0KJmd0OyBJJ20gbm90IGZhbWlsaWFyIHdpdGggU3lzcHJlcC4g Q2FuIHlvdSBwcm92aWRlIGFuIGV4YW1wbGUgb2YgdGhlIGNvZGU8YnI+DQomZ3Q7IHRoYXQgeW91 IGFyZSB1c2luZyBmb3IgdGhhdD88YnI+DQomZ3Q7IDxicj4NCiZndDsmZ3Q7IEVycm9yIGF0dGFj aGVkLjxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsm Z3Q7IFJlZ2FyZHMsPGJyPg0KJmd0OyZndDsgQ2hhbmRyYWhhc2EgUzxicj4NCiZndDsmZ3Q7PGJy Pg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7IEZyb206ICZuYnNwOyAmbmJz cDsgJm5ic3A7ICZuYnNwO0p1YW4gSGVybmFuZGV6ICZsdDtqaGVybmFuZEByZWRoYXQuY29tJmd0 Ozxicj4NCiZndDsmZ3Q7IFRvOiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtDaGFuZHJhaGFz YSBTICZsdDtjaGFuZHJhaGFzYS5zQHRjcy5jb20mZ3Q7LA0KdXNlcnNAb3ZpcnQub3JnPGJyPg0K Jmd0OyZndDsgQ2M6ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO0FnYXJ3YWwgUnVjaGl0YSAm bHQ7YWdhcndhbC5ydWNoaXRhQHRjcy5jb20mZ3Q7PGJyPg0KJmd0OyZndDsgRGF0ZTogJm5ic3A7 ICZuYnNwOyAmbmJzcDsgJm5ic3A7MDkvMTgvMjAxNCAwMzozNSBQTTxicj4NCiZndDsmZ3Q7IFN1 YmplY3Q6ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO1JlOiBbb3ZpcnQtdXNlcnNdIEVycm9y IHdoaWxlDQp1c2luZyBSRVNUIEFQSSB3aXRoIE92aXJ0PGJyPg0KJmd0OyZndDsgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0 OyZndDsgT24gMDkvMTgvMjAxNCAwODoxOCBBTSwgQ2hhbmRyYWhhc2EgUyB3cm90ZTo8YnI+DQom Z3Q7Jmd0OyZndDsgRGVhciBFeHBlcnRzLjxicj4NCiZndDsmZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7 Jmd0OyBXZSBhcmUgSW50ZWdyYXRpbmcgb3VyIGludGVybmFsIGNsb3VkIHBvcnRhbCB3aXRoICZu YnNwO092aXJ0DQovIFJIRVZNIHZlcnNpb248YnI+DQomZ3Q7Jmd0OyZndDsgMy40Ljxicj4NCiZn dDsmZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7Jmd0OyBXZSBhcmUgaW50ZWdyYXRpbmcgb3VyIGludGVy bmFsIGNsb3VkIHdpdGggT3ZpcnQgLyBSSEVWTS4NClZNIHRlbXBsYXRlPGJyPg0KJmd0OyZndDsm Z3Q7IGNyZWF0ZWQgdXNpbmcgY2xvdWQgaW5pdC48YnI+DQomZ3Q7Jmd0OyZndDs8YnI+DQomZ3Q7 Jmd0OyZndDsgVGhyb3VnaCBSRVNUIEFQSSBOaXBwZXQgd2hpbGUgY29kZXMgcGFzc2VzIGNvbW1h bmQgdG8gdGVtcGxhdGUNCiggd2l0aDxicj4NCiZndDsmZ3Q7Jmd0OyBjbG91ZCBpbml0KSBJUCwg SE9TVE5BTUUsIFdlIGFyZSBhYmxlIHRvIHNldCBJUCBhbmQgSG9zdG5hbWUNCnRvIFZNPGJyPg0K Jmd0OyZndDsmZ3Q7IHRocm91Z2ggY29kZS48YnI+DQomZ3Q7Jmd0OyZndDs8YnI+DQomZ3Q7Jmd0 OyZndDsgQnV0IHBvc3QgdGhpcyBNYW5hZ2VyIGdldHRpbmcgaGFuZGVkLiBFcnJvciBjb2RlIGlz IGF0dGFjaGVkLjxicj4NCiZndDsmZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7Jmd0OyBOZWVkIHlvdXIg aGVscCBwbGVhc2UuPGJyPg0KJmd0OyZndDsmZ3Q7PGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0 OyBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5IHlvdSBhbHJlYWR5IGNyZWF0ZWQgYSB0ZW1wbGF0 ZSB3aXRoDQp0aGUgY2xvdWQ8YnI+DQomZ3Q7Jmd0OyBpbml0IGNvbmZpZ3VyYXRpb24sIHRoZW4g eW91IGNyZWF0ZWQgYSBWTSBmcm9tIHRoYXQgdGVtcGxhdGUsDQphbmQgeW91PGJyPg0KJmd0OyZn dDsgd2FudCB0byBtb2RpZnkgaXQgYW5kIHN0YXJ0IGl0LiBJbiBvcmRlciB0byB1cGRhdGUgdGhl IFZNIHlvdQ0KbmVlZCB0bzxicj4NCiZndDsmZ3Q7IGlzc3VlIGEgUFVUIHJlcXVlc3QsIGFuZCB0 aGUgdGFnIG5hbWUgZm9yIHRoZSBob3N0IGlzICZxdW90O2hvc3RfbmFtZSZxdW90Ozo8YnI+DQom Z3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDtTdHJpbmcgdXBkYXRlWG1sID08YnI+ DQomZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7JnF1b3Q7Jmx0Oz94 bWwgdmVyc2lvbj1cJnF1b3Q7MS4wXCZxdW90Oz8mZ3Q7JnF1b3Q7PGJyPg0KJmd0OyZndDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmcXVvdDsmbHQ7dm0mZ3Q7JnF1b3Q7PGJyPg0KJmd0 OyZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmbmJzcDsgJnF1b3Q7Jmx0O2luaXRp YWxpemF0aW9uJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOysgJm5ic3A7ICZuYnNwOyAmcXVvdDsmbHQ7aG9zdF9uYW1lJmd0O21lZ2hhYXNhZG1pbi51 bHRpbWF0aXh1YXQubmV0Jmx0Oy9ob3N0X25hbWUmZ3Q7JnF1b3Q7PGJyPg0KJmd0OyZndDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmbmJzcDsgJm5ic3A7ICZxdW90OyZsdDtyZWdlbmVy YXRlX3NzaF9rZXlzJmd0O2ZhbHNlJmx0Oy9yZWdlbmVyYXRlX3NzaF9rZXlzJmd0OyZxdW90Ozxi cj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOysgJm5ic3A7ICZuYnNwOyAm cXVvdDsmbHQ7bmljX2NvbmZpZ3VyYXRpb25zJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNw OyAmbmJzcDsgJm5ic3A7ICZuYnNwOysgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0O25p Y19jb25maWd1cmF0aW9uJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOysgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZxdW90OyZsdDtuYW1lJmd0 O2V0aDAmbHQ7L25hbWUmZ3Q7JnF1b3Q7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwOyAmbmJz cDsgJm5ic3A7KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0O2lwDQphZGRy ZXNzPVwmcXVvdDsxLjEuMS4xXCZxdW90OyBuZXRtYXNrPVwmcXVvdDsyNTUuMjU1LjI1NS4wXCZx dW90Ozxicj4NCiZndDsmZ3Q7IGdhdGV3YXk9XCZxdW90OzEzLjMuMy4zXCZxdW90Oy8mZ3Q7JnF1 b3Q7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7KyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJnF1b3Q7Jmx0O2Jvb3RfcHJvdG9jb2wmZ3Q7c3RhdGljJmx0Oy9i b290X3Byb3RvY29sJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7 ICZuYnNwOysgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZxdW90OyZsdDtvbl9ib290Jmd0 O3RydWUmbHQ7L29uX2Jvb3QmZ3Q7JnF1b3Q7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwOyAm bmJzcDsgJm5ic3A7KyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmcXVvdDsmbHQ7L25pY19jb25maWd1 cmF0aW9uJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw OysgJm5ic3A7ICZuYnNwOyAmcXVvdDsmbHQ7L25pY19jb25maWd1cmF0aW9ucyZndDsmcXVvdDs8 YnI+DQomZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsrICZuYnNwOyAmcXVvdDsm bHQ7L2luaXRpYWxpemF0aW9uJmd0OyZxdW90Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOysgJnF1b3Q7Jmx0Oy92bSZndDsmcXVvdDs7PGJyPg0KJmd0OyZndDsgJm5i c3A7ICZuYnNwO1N0cmluZ0VudGl0eSB1cGRhdGVFbnRpdHkgPSBuZXcgU3RyaW5nRW50aXR5KHVw ZGF0ZVhtbCk7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwO0h0dHBQdXQgdXBkYXRlUmVxdWVz dCA9IG5ldyBIdHRwUHV0KGFwaVVybCArICZxdW90Oy92bXMvJnF1b3Q7DQorIHZtSWQpOzxicj4N CiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDt1cGRhdGVSZXF1ZXN0LnNldEhlYWRlcigmcXVvdDtDb250 ZW50LVR5cGUmcXVvdDssDQomcXVvdDthcHBsaWNhdGlvbi94bWwmcXVvdDspOzxicj4NCiZndDsm Z3Q7ICZuYnNwOyAmbmJzcDt1cGRhdGVSZXF1ZXN0LnNldEhlYWRlcigmcXVvdDtBY2NlcHQmcXVv dDssICZxdW90O2FwcGxpY2F0aW9uL3htbCZxdW90Oyk7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZu YnNwO3VwZGF0ZVJlcXVlc3Quc2V0RW50aXR5KHVwZGF0ZUVudGl0eSk7PGJyPg0KJmd0OyZndDsg Jm5ic3A7ICZuYnNwO0h0dHBSZXNwb25zZSB1cGRhdGVSZXNwb25zZSA9IGNsaWVudC5leGVjdXRl KHVwZGF0ZVJlcXVlc3QpOzxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyZndDsgVGhlbiwgYWZ0ZXIg dGhlIHVwZGF0ZSwgeW91IG5lZWQgdG8gc3RhcnQgdGhlIFZNIGFuZCBpdCB3aWxsIHVzZQ0KdGhh dDxicj4NCiZndDsmZ3Q7IGNvbmZpZ3VyYXRpb246PGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0 OyAmbmJzcDsgJm5ic3A7U3RyaW5nIHN0YXJ0WG1sID08YnI+DQomZ3Q7Jmd0OyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7JnF1b3Q7Jmx0Oz94bWwgdmVyc2lvbj1cJnF1b3Q7MS4w XCZxdW90Oz8mZ3Q7JnF1b3Q7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7KyAmcXVvdDsmbHQ7YWN0aW9uLyZndDsmcXVvdDs7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZu YnNwO1N0cmluZ0VudGl0eSBzdGFydEVudGl0eSA9IG5ldyBTdHJpbmdFbnRpdHkoc3RhcnRYbWwp Ozxicj4NCiZndDsmZ3Q7ICZuYnNwOyAmbmJzcDtIdHRwUG9zdCBzdGFydFJlcXVlc3QgPSBuZXcg SHR0cFBvc3QoYXBpVXJsICsgJnF1b3Q7L3Ztcy8mcXVvdDsNCisgdm1JZCArPGJyPg0KJmd0OyZn dDsgJnF1b3Q7L3N0YXJ0JnF1b3Q7KTs8YnI+DQomZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7c3RhcnRS ZXF1ZXN0LnNldEVudGl0eShzdGFydEVudGl0eSk7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNw O3N0YXJ0UmVxdWVzdC5zZXRIZWFkZXIoJnF1b3Q7Q29udGVudC1UeXBlJnF1b3Q7LA0KJnF1b3Q7 YXBwbGljYXRpb24veG1sJnF1b3Q7KTs8YnI+DQomZ3Q7Jmd0OyAmbmJzcDsgJm5ic3A7c3RhcnRS ZXF1ZXN0LnNldEhlYWRlcigmcXVvdDtBY2NlcHQmcXVvdDssICZxdW90O2FwcGxpY2F0aW9uL3ht bCZxdW90Oyk7PGJyPg0KJmd0OyZndDsgJm5ic3A7ICZuYnNwO0h0dHBSZXNwb25zZSBzdGFydFJl c3BvbnNlID0gY2xpZW50LmV4ZWN1dGUoc3RhcnRSZXF1ZXN0KTs8YnI+DQomZ3Q7Jmd0Ozxicj4N CiZndDsmZ3Q7IFNvbWUgYWR2aWNlczo8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7ICogQ2hl Y2sgdGhlIFhNTCBzY2hlbWEgZm9yIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFhNTCBkb2N1bWVudHM6 PGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0OyAmbmJzcDs8L2ZvbnQ+PC90dD48YSBocmVmPWh0 dHBzOi8vcmhldm1hbmFnZXIvYXBpP3NjaGVtYT48dHQ+PGZvbnQgc2l6ZT0yPmh0dHBzOi8vcmhl dm1hbmFnZXIvYXBpP3NjaGVtYTwvZm9udD48L3R0PjwvYT48dHQ+PGZvbnQgc2l6ZT0yPjxicj4N CiZndDsmZ3Q7PGJyPg0KJmd0OyZndDsgKiBXaGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIFJF U1RBUEkgbWFrZXMgc3VyZSB0byBhbHdheXMgZXhwbGljaXRseTxicj4NCiZndDsmZ3Q7IGFkZCB0 aGUgQ29udGVudC1UeXBlIGFuZCBBY2NlcHQgaGVhZGVyczo8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZn dDsmZ3Q7ICZuYnNwO3lvdXJSZXF1ZXN0LnNldEhlYWRlcigmcXVvdDtDb250ZW50LVR5cGUmcXVv dDssICZxdW90O2FwcGxpY2F0aW9uL3htbCZxdW90Oyk7PGJyPg0KJmd0OyZndDsgJm5ic3A7eW91 clJlcXVlc3Quc2V0SGVhZGVyKCZxdW90O0FjY2VwdCZxdW90OywgJnF1b3Q7YXBwbGljYXRpb24v eG1sJnF1b3Q7KTs8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7ICogVGFrZSBpbnRvIGFjY291 bnQgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gd2l0aCBjbG91ZC1pbml0IHdpbGwNCm9ubHkgYmU8 YnI+DQomZ3Q7Jmd0OyBleGVjdXRlZCB0aGUgZmlyc3QgdGltZSB5b3Ugc3RhcnQgdGhlIFZNLCBz byBpbiB5b3VyIHRlc3RzIHlvdQ0Kd2lsbCBuZWVkPGJyPg0KJmd0OyZndDsgdG8gcmVtb3ZlIHRo ZSBWTSBhbmQgY3JlYXRlIGl0IGFnYWluLjxicj4NCiZndDsmZ3Q7PGJyPg0KJmd0OyZndDsgKiBJ ZiB5b3UgYXJlIHBsYW5uaW5nIHRvIGRvIGNvbXBsZXggdGhpbmdzIHlvdSBtYXkgZmluZCBpdCBo ZWxwZnVsDQp0aGU8YnI+DQomZ3Q7Jmd0OyBKYXZhIFNESzo8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZn dDsmZ3Q7ICZuYnNwOzwvZm9udD48L3R0PjxhIGhyZWY9Imh0dHA6Ly93d3cub3ZpcnQub3JnL0ph dmEtc2RrIj48dHQ+PGZvbnQgc2l6ZT0yPmh0dHA6Ly93d3cub3ZpcnQub3JnL0phdmEtc2RrPC9m b250PjwvdHQ+PC9hPjx0dD48Zm9udCBzaXplPTI+PGJyPg0KJmd0OyZndDs8YnI+DQo8YnI+DQot LSA8YnI+DQpEaXJlY2Npw7NuIENvbWVyY2lhbDogQy9Kb3NlIEJhcmRhc2FubyBCYW9zLCA5LCBF ZGlmLiBHb3JiZWEgMywgcGxhbnRhPGJyPg0KM8K6RCwgMjgwMTYgTWFkcmlkLCBTcGFpbjxicj4N Ckluc2NyaXRhIGVuIGVsIFJlZy4gTWVyY2FudGlsIGRlIE1hZHJpZCDigJMgQy5JLkYuIEI4MjY1 Nzk0MSAtIFJlZCBIYXQgUy5MLjxicj4NCjwvZm9udD48L3R0Pg0KPGJyPg08cD49PT09PS0tLS0t PT09PT0tLS0tLT09PT09PGJyPgpOb3RpY2U6IFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4g dGhpcyBlLW1haWw8YnI+Cm1lc3NhZ2UgYW5kL29yIGF0dGFjaG1lbnRzIHRvIGl0IG1heSBjb250 YWluIDxicj4KY29uZmlkZW50aWFsIG9yIHByaXZpbGVnZWQgaW5mb3JtYXRpb24uIElmIHlvdSBh cmUgPGJyPgpub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgYW55IGRpc3NlbWluYXRpb24sIHVz ZSwgPGJyPgpyZXZpZXcsIGRpc3RyaWJ1dGlvbiwgcHJpbnRpbmcgb3IgY29weWluZyBvZiB0aGUg PGJyPgppbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBlLW1haWwgbWVzc2FnZSA8YnI+CmFu ZC9vciBhdHRhY2htZW50cyB0byBpdCBhcmUgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgPGJyPgp5 b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGNvbW11bmljYXRpb24gaW4gZXJyb3IsIDxicj4KcGxlYXNl IG5vdGlmeSB1cyBieSByZXBseSBlLW1haWwgb3IgdGVsZXBob25lIGFuZCA8YnI+CmltbWVkaWF0 ZWx5IGFuZCBwZXJtYW5lbnRseSBkZWxldGUgdGhlIG1lc3NhZ2UgPGJyPgphbmQgYW55IGF0dGFj aG1lbnRzLiBUaGFuayB5b3U8L3A+Cgo8cD48L3A+ --=_alternative 0052008365257D5C_=--

On 09/23/2014 04:55 PM, Chandrahasa S wrote:
Windows 2008 R2
Regards, Chandrahasa S
Ok. I don't have a 2008 machine to tests, but I tested with Windows 7, which should be quite similar. These are my suggestions: * Take into account that Windows 2008 uses an XML format for the answers file, and that the file name that sysprep will look for is "Unattend.xml". On the other hand the engine will always generate a file named "sysprep.inf", so you need to alter the registry settings of the VM before creating the template. In particular you need to create a key named "UnattendFile" entry under "HKEY-LOCAL-MACHINE -> SYSTEM -> Setup". The value should be the location of the file. For the files generated by the engine it should be "A:\sysprep.inf". With this the sysprep support should work if you use it from the GUI. * The guest agent is nice to have, but not required in order to use sysprep, and it won't allow you to change the IP configuration of the guest, only to view it. * As far as I know sysprep doesn't allow you to configure the IP addresses, only the machine name, so I believe you will have to use a different mechanism, like configuring your DHCP server so that it assigns IP addresses based on MAC addresses or host names. * You don't need to provide the content of the sysprep file, it is automatically generated by the engine, merging the parameters that you pass with the static content in the templte file /usr/share/ovirt-engine/conf/sysprep.2k8. So, to summarize, after preparing correctly the image, you should send a request like this (assuming that the VM is already created from the template): PUT /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3 <vm> <initialization> <host_name>WIN-AS05EOADAwerwer</host_name> <domain>ultimatixuat.net</domain> </initialization> </vm> Then you can start it like this: POST /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/start <action/> And sysprep should trigger and configure the VM. Take into account that this only works the first time you start the VM, so if you are testing multiple times remember to remove and create it again. To debug this, once the VM is started, go to the hypervisor where it is running and find the qemu process: # ps -ef | grep -- '-name the_name_of_your_vm' That should be a very long command line, including a "-drive" option corresponding to the sysprep floppy that the engine created and added to the VM: -drive file=/var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img Copy that .img file somewhere, mount and inspect it: # cp /var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img /tmp/f.img # mount -o loop,ro /tmp/f.img /mnt # find /mnt/ /mnt/ /mnt/sysprep.inf Check the content of the /mnt/sysprep.inf file, it should contain your settings. If the content of the floppy and the sysprep.inf file are correct but your VM is still not being configured then there is something wrong with the preparation of the template.
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org Date: 09/23/2014 06:58 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/23/2014 06:39 AM, Chandrahasa S wrote:
Dear Juan,
Thanks lot for support.
Internal server error issue also resolved with linux guests. Now we are able to provide ip and hostname to linux guests in rhev 3.4 successfully via RESTAPI giving boot protocol as "static" as advised.
For Windows Guest we did the following: 1) Prepared a template with guest agents installed and deployed a vm successfully through RESTAPI. 2) Following initialization part same as Linux guest did not work in this case and it gives default/garbage ip,hostname to the vm. 3) So we tried giving it through sysprep/payload tag through REST API. Code snippet is as follows:
HttpPut put = new HttpPut(
"https://rhevmanager/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/ <https://192.168.114.36/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/>"); String inputXML1 = "<?xml version=\"1.0\"?>" /*"<vm>"*/ +"<sso>"+"<methods>"+"<method id=\""+"GUEST_AGENT"+"\"/>"+"</methods>"+"</sso>"
+"<domain>"+"<name>ultimatixuat.net</name>"+"</domain>"
+"<payloads>"+"<payload type=\""+"floppy"+"\">"+ "<files>"+"<file>"
+"<name>/WEB-INF/sysprep.xml</name>"
+"</file>"+"</files>"+"</payload>"+"</payloads>"
+"<reported_devices>"+"<reported_device>"+"<ips>"+"<ip address=\""+"1.1.1.1"+"\"/</ips>"
+"<fqdn>WIN-AS05EOADAwerwer</fqdn>"+"</reported_device>"+"<reported_devices>";
StringEntity input1 = new StringEntity(inputXML1); put.setEntity(input1); put.setHeader("Content-Type", "application/xml"); HttpResponse responseNIC =
httpclient.execute(put);
System.out .println("RESPONSE ::::::::::::::::::::::::::::::::::: " + responseNIC);
BufferedReader rd1 = new BufferedReader(new InputStreamReader(
responseNIC.getEntity().getContent())); String line1 = ""; while ((line1 = rd1.readLine()) != null) { System.out.println("LINE ::::::::::::: " + line1); }
The output says that my code is syntactically incorrect. I am not very sure as to what has to be the content of "sysprep.xml" file and what is syntactically incorrect here.
Also while deploying the windows machine manually through the rhev manager , while using sysprep option in "run once" , I am unable to find the ip and hostname options as found for linux machines.
Regards, Chandrahasa S
What version of Windows are you using?
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org, "'Shahar Havivi'" <shavivi@redhat.com> Date: 09/18/2014 06:30 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug:
https://bugzilla.redhat.com/1144005
The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer
exception.
The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database, but in the RESTAPI it is "static".
To workaround this issue you can delete the VMs and create them again with the correct boot protocol.
If you don't want to create the VMs again you can fix the database manually like this:
# su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM version 3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.
=====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

Are there plans to improve this, so you don't have to mess with the image before using it? Like a switch generating the needed xml file instead of the inf file? On 23/09/14 17:47, Juan Hernandez wrote:
* Take into account that Windows 2008 uses an XML format for the answers file, and that the file name that sysprep will look for is "Unattend.xml". On the other hand the engine will always generate a file named "sysprep.inf", so you need to alter the registry settings of the VM before creating the template. In particular you need to create a key named "UnattendFile" entry under "HKEY-LOCAL-MACHINE -> SYSTEM -> Setup". The value should be the location of the file. For the files generated by the engine it should be "A:\sysprep.inf". With this the sysprep support should work if you use it from the GUI.
-- Mit freundlichen Grüßen / Regards Sven Kieske Systemadministrator Mittwald CM Service GmbH & Co. KG Königsberger Straße 6 32339 Espelkamp T: +49-5772-293-100 F: +49-5772-293-333 https://www.mittwald.de Geschäftsführer: Robert Meyer St.Nr.: 331/5721/1033, USt-IdNr.: DE814773217, HRA 6640, AG Bad Oeynhausen Komplementärin: Robert Meyer Verwaltungs GmbH, HRB 13260, AG Bad Oeynhausen

On 09/24/2014 09:23 AM, Sven Kieske wrote:
Are there plans to improve this, so you don't have to mess with the image before using it? Like a switch generating the needed xml file instead of the inf file?
I'm not aware of any plans in these regards. I opened the following bug to track this request: https://bugzilla.redhat.com/1145999
On 23/09/14 17:47, Juan Hernandez wrote:
* Take into account that Windows 2008 uses an XML format for the answers file, and that the file name that sysprep will look for is "Unattend.xml". On the other hand the engine will always generate a file named "sysprep.inf", so you need to alter the registry settings of the VM before creating the template. In particular you need to create a key named "UnattendFile" entry under "HKEY-LOCAL-MACHINE -> SYSTEM -> Setup". The value should be the location of the file. For the files generated by the engine it should be "A:\sysprep.inf". With this the sysprep support should work if you use it from the GUI.
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

Dear Juan, Thanks for the prompt reply and support. As advised I did the registry editing and then created a template and tried to give the hostname in the manner told to the deployed vm but no luck. It does not give any error but on checking the hostname through machine console it is not set there. Please find attached the screen shot of the registry editing done. Also for ip configuration if any other method is possible other than DHCP server option please tell . Thanks & Regards Ruchita Agarwal From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org Date: 09/23/2014 09:23 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt On 09/23/2014 04:55 PM, Chandrahasa S wrote:
Windows 2008 R2
Regards, Chandrahasa S
Ok. I don't have a 2008 machine to tests, but I tested with Windows 7, which should be quite similar. These are my suggestions: * Take into account that Windows 2008 uses an XML format for the answers file, and that the file name that sysprep will look for is "Unattend.xml". On the other hand the engine will always generate a file named "sysprep.inf", so you need to alter the registry settings of the VM before creating the template. In particular you need to create a key named "UnattendFile" entry under "HKEY-LOCAL-MACHINE -> SYSTEM -> Setup". The value should be the location of the file. For the files generated by the engine it should be "A:\sysprep.inf". With this the sysprep support should work if you use it from the GUI. * The guest agent is nice to have, but not required in order to use sysprep, and it won't allow you to change the IP configuration of the guest, only to view it. * As far as I know sysprep doesn't allow you to configure the IP addresses, only the machine name, so I believe you will have to use a different mechanism, like configuring your DHCP server so that it assigns IP addresses based on MAC addresses or host names. * You don't need to provide the content of the sysprep file, it is automatically generated by the engine, merging the parameters that you pass with the static content in the templte file /usr/share/ovirt-engine/conf/sysprep.2k8. So, to summarize, after preparing correctly the image, you should send a request like this (assuming that the VM is already created from the template): PUT /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3 <vm> <initialization> <host_name>WIN-AS05EOADAwerwer</host_name> <domain>ultimatixuat.net</domain> </initialization> </vm> Then you can start it like this: POST /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/start <action/> And sysprep should trigger and configure the VM. Take into account that this only works the first time you start the VM, so if you are testing multiple times remember to remove and create it again. To debug this, once the VM is started, go to the hypervisor where it is running and find the qemu process: # ps -ef | grep -- '-name the_name_of_your_vm' That should be a very long command line, including a "-drive" option corresponding to the sysprep floppy that the engine created and added to the VM: -drive file=/var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img Copy that .img file somewhere, mount and inspect it: # cp /var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img /tmp/f.img # mount -o loop,ro /tmp/f.img /mnt # find /mnt/ /mnt/ /mnt/sysprep.inf Check the content of the /mnt/sysprep.inf file, it should contain your settings. If the content of the floppy and the sysprep.inf file are correct but your VM is still not being configured then there is something wrong with the preparation of the template.
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org Date: 09/23/2014 06:58 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/23/2014 06:39 AM, Chandrahasa S wrote:
Dear Juan,
Thanks lot for support.
Internal server error issue also resolved with linux guests. Now we are able to provide ip and hostname to linux guests in rhev 3.4
successfully
via RESTAPI giving boot protocol as "static" as advised.
For Windows Guest we did the following: 1) Prepared a template with guest agents installed and deployed a vm successfully through RESTAPI. 2) Following initialization part same as Linux guest did not work in this case and it gives default/garbage ip,hostname to the vm. 3) So we tried giving it through sysprep/payload tag through REST API. Code snippet is as follows:
HttpPut put = new HttpPut(
"https://rhevmanager/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/ <https://192.168.114.36/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/ "); String inputXML1 = "<?xml version=\"1.0\"?>" /*"<vm>"*/ +"<sso>"+"<methods>"+"<method id=\""+"GUEST_AGENT"+"\"/>"+"</methods>"+"</sso>"
+"<domain>"+"<name>ultimatixuat.net</name>"+"</domain>"
+"<payloads>"+"<payload type=\""+"floppy"+"\">"+ "<files>"+"<file>"
+"<name>/WEB-INF/sysprep.xml</name>"
+"</file>"+"</files>"+"</payload>"+"</payloads>"
+"<reported_devices>"+"<reported_device>"+"<ips>"+"<ip address=\""+"1.1.1.1"+"\"/</ips>"
+"<fqdn>WIN-AS05EOADAwerwer</fqdn>"+"</reported_device>"+"<reported_devices>";
StringEntity input1 = new
StringEntity(inputXML1);
put.setEntity(input1); put.setHeader("Content-Type",
"application/xml");
HttpResponse responseNIC =
httpclient.execute(put);
System.out .println("RESPONSE ::::::::::::::::::::::::::::::::::: " + responseNIC);
BufferedReader rd1 = new BufferedReader(new InputStreamReader(
responseNIC.getEntity().getContent())); String line1 = ""; while ((line1 = rd1.readLine()) != null) { System.out.println("LINE :::::::::::::
"
+ line1); }
The output says that my code is syntactically incorrect. I am not very sure as to what has to be the content of "sysprep.xml" file and what is syntactically incorrect here.
Also while deploying the windows machine manually through the rhev manager , while using sysprep option in "run once" , I am unable to find the ip and hostname options as found for linux machines.
Regards, Chandrahasa S
What version of Windows are you using?
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org, "'Shahar Havivi'" <shavivi@redhat.com> Date: 09/18/2014 06:30 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt
On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug:
https://bugzilla.redhat.com/1144005
The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer
exception.
The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database,
but
in the RESTAPI it is "static".
To workaround this issue you can delete the VMs and create them again with the correct boot protocol.
If you don't want to create the VMs again you can fix the database manually like this:
# su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM
version
3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid ? C.I.F. B82657941 - Red Hat S.L.
=====-----=====-----===== Notice: The information contained in this e-mail message and/or attachments to it may contain confidential or privileged information. If you are not the intended recipient, any dissemination, use, review, distribution, printing or copying of the information contained in this e-mail message and/or attachments to it are strictly prohibited. If you have received this communication in error, please notify us by reply e-mail or telephone and immediately and permanently delete the message and any attachments. Thank you
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid ? C.I.F. B82657941 - Red Hat S.L.

On 09/25/2014 11:33 AM, Agarwal Ruchita wrote:
Dear Juan,
Thanks for the prompt reply and support.
As advised I did the registry editing and then created a template and tried to give the hostname in the manner told to the deployed vm but no luck. It does not give any error but on checking the hostname through machine console it is not set there. Please find attached the screen shot of the registry editing done.
Did you check the contents of the floppy disk attached to the VM as I described in the previous message? What is the content? Also make sure that the operating system of the machine is configured correctly. With the RESTAPI you can check as follows: GET /vms/9895613f-3227-4f66-a13b-9f60f197e9e8 <vm> ... <os type="windows_2008R2x64"> ... </os> ... </vm> If the operating system isn't set correctly the engine will try to use cloud-init instead of sysprep, and that doesn't work with Windows.
Also for ip configuration if any other method is possible other than DHCP server option please tell .
It may be possible to set the IP address with a custom Unattend.xml file. I'd suggest you study the Microsoft documentation available here: http://technet.microsoft.com/en-us/library/hh825114.aspx Apparently there is a tool called "Windows System Image Manager (Windows SIM)" that you can use to open and modify a the answers file. But I can't tell you if this allows setting the IP address, as I don't have that tool. If you finally make an answers file that works as you expect, then you can generate it from your program, and send it as part of the RESTAPI request, using the "custom_script" element: PUT /api/vms/9895613f-3227-4f66-a13b-9f60f197e9e8 <vm> <initialization> <custom_script> <![CDATA[the content of your sysprep script]]> </custom_script> </initialization> </vm> Then start the VM: POST /api/vms/9895613f-3227-4f66-a13b-9f60f197e9e8/start <action/>
Thanks & Regards Ruchita Agarwal
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org Date: 09/23/2014 09:23 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/23/2014 04:55 PM, Chandrahasa S wrote:
Windows 2008 R2
Regards, Chandrahasa S
Ok. I don't have a 2008 machine to tests, but I tested with Windows 7, which should be quite similar. These are my suggestions:
* Take into account that Windows 2008 uses an XML format for the answers file, and that the file name that sysprep will look for is "Unattend.xml". On the other hand the engine will always generate a file named "sysprep.inf", so you need to alter the registry settings of the VM before creating the template. In particular you need to create a key named "UnattendFile" entry under "HKEY-LOCAL-MACHINE -> SYSTEM -> Setup". The value should be the location of the file. For the files generated by the engine it should be "A:\sysprep.inf". With this the sysprep support should work if you use it from the GUI.
* The guest agent is nice to have, but not required in order to use sysprep, and it won't allow you to change the IP configuration of the guest, only to view it.
* As far as I know sysprep doesn't allow you to configure the IP addresses, only the machine name, so I believe you will have to use a different mechanism, like configuring your DHCP server so that it assigns IP addresses based on MAC addresses or host names.
* You don't need to provide the content of the sysprep file, it is automatically generated by the engine, merging the parameters that you pass with the static content in the templte file /usr/share/ovirt-engine/conf/sysprep.2k8.
So, to summarize, after preparing correctly the image, you should send a request like this (assuming that the VM is already created from the template):
PUT /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3 <vm> <initialization> <host_name>WIN-AS05EOADAwerwer</host_name> <domain>ultimatixuat.net</domain> </initialization> </vm>
Then you can start it like this:
POST /api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/start <action/>
And sysprep should trigger and configure the VM. Take into account that this only works the first time you start the VM, so if you are testing multiple times remember to remove and create it again.
To debug this, once the VM is started, go to the hypervisor where it is running and find the qemu process:
# ps -ef | grep -- '-name the_name_of_your_vm'
That should be a very long command line, including a "-drive" option corresponding to the sysprep floppy that the engine created and added to the VM:
-drive file=/var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img
Copy that .img file somewhere, mount and inspect it:
# cp /var/run/vdsm/payload/27faa0ce-3e4d-4705-adf8-30d6e9fde741.a659e9a9747fe55a8eb0c7ecbc549c86.img /tmp/f.img # mount -o loop,ro /tmp/f.img /mnt # find /mnt/ /mnt/ /mnt/sysprep.inf
Check the content of the /mnt/sysprep.inf file, it should contain your settings.
If the content of the floppy and the sysprep.inf file are correct but your VM is still not being configured then there is something wrong with the preparation of the template.
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org Date: 09/23/2014 06:58 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/23/2014 06:39 AM, Chandrahasa S wrote:
Dear Juan,
Thanks lot for support.
Internal server error issue also resolved with linux guests. Now we are able to provide ip and hostname to linux guests in rhev 3.4 successfully via RESTAPI giving boot protocol as "static" as advised.
For Windows Guest we did the following: 1) Prepared a template with guest agents installed and deployed a vm successfully through RESTAPI. 2) Following initialization part same as Linux guest did not work in this case and it gives default/garbage ip,hostname to the vm. 3) So we tried giving it through sysprep/payload tag through REST API. Code snippet is as follows:
HttpPut put = new HttpPut(
"https://rhevmanager/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/ <https://192.168.114.36/api/vms/7dac74d2-c504-4bbd-8659-c8773a844cb3/>"); String inputXML1 = "<?xml version=\"1.0\"?>" /*"<vm>"*/ +"<sso>"+"<methods>"+"<method id=\""+"GUEST_AGENT"+"\"/>"+"</methods>"+"</sso>"
+"<domain>"+"<name>ultimatixuat.net</name>"+"</domain>"
+"<payloads>"+"<payload type=\""+"floppy"+"\">"+ "<files>"+"<file>"
+"<name>/WEB-INF/sysprep.xml</name>"
+"</file>"+"</files>"+"</payload>"+"</payloads>"
+"<reported_devices>"+"<reported_device>"+"<ips>"+"<ip address=\""+"1.1.1.1"+"\"/</ips>"
+"<fqdn>WIN-AS05EOADAwerwer</fqdn>"+"</reported_device>"+"<reported_devices>";
StringEntity input1 = new
StringEntity(inputXML1);
put.setEntity(input1); put.setHeader("Content-Type", "application/xml"); HttpResponse responseNIC =
httpclient.execute(put);
System.out .println("RESPONSE ::::::::::::::::::::::::::::::::::: " + responseNIC);
BufferedReader rd1 = new BufferedReader(new InputStreamReader(
responseNIC.getEntity().getContent())); String line1 = ""; while ((line1 = rd1.readLine()) != null) { System.out.println("LINE ::::::::::::: " + line1); }
The output says that my code is syntactically incorrect. I am not very sure as to what has to be the content of "sysprep.xml" file and what is syntactically incorrect here.
Also while deploying the windows machine manually through the rhev manager , while using sysprep option in "run once" , I am unable to find the ip and hostname options as found for linux machines.
Regards, Chandrahasa S
What version of Windows are you using?
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com> Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com>, users@ovirt.org, "'Shahar Havivi'" <shavivi@redhat.com> Date: 09/18/2014 06:30 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 01:39 PM, Chandrahasa S wrote:
Dear Juan / All,
Thanks for reply.
I tried to give the hostname with the tag mentioned "host_name". Its working.
So below are the issues still remaining:
1) The issue of internal server error still persits (rhev manager showing issues) even after following the advice of the expert and doing the initialization part just once(giving ip and hostname) after creating the vm.
Actually this is a bug:
https://bugzilla.redhat.com/1144005
The reason is that when you use an incorrect boot protocol we end up storing null in the corresponding place in the database, and later we use the value without checking it, which triggers a null pointer
exception.
The right value for the boot protocol is "static", not "STATIC_IP". The "STATIC_IP" value is what we use in the backend and in the database, but in the RESTAPI it is "static".
To workaround this issue you can delete the VMs and create them again with the correct boot protocol.
If you don't want to create the VMs again you can fix the database manually like this:
# su - postgres # psql postgres=# \c engine engine=# update vm_init set networks = replace(networks, '"bootProtocol" : null', '"bootProtocol" : "STATIC_IP"');
2) Please confirm if this is the case that we can do initialization part only once on a particular vm , then we can reconfigure the network (ip, subnet, gateway etc) or not for that vm.
I'm reasonably sure that you can run initialization only once per VM, but Shahar can confirm this better than me.
3) For Windows guest we are still unable to provide ip details and hostname using sysprep/payload.
I'm not familiar with Sysprep. Can you provide an example of the code that you are using for that?
Error attached.
Regards, Chandrahasa S
From: Juan Hernandez <jhernand@redhat.com> To: Chandrahasa S <chandrahasa.s@tcs.com>, users@ovirt.org Cc: Agarwal Ruchita <agarwal.ruchita@tcs.com> Date: 09/18/2014 03:35 PM Subject: Re: [ovirt-users] Error while using REST API with Ovirt ------------------------------------------------------------------------
On 09/18/2014 08:18 AM, Chandrahasa S wrote:
Dear Experts.
We are Integrating our internal cloud portal with Ovirt / RHEVM
version
3.4.
We are integrating our internal cloud with Ovirt / RHEVM. VM template created using cloud init.
Through REST API Nippet while codes passes command to template ( with cloud init) IP, HOSTNAME, We are able to set IP and Hostname to VM through code.
But post this Manager getting handed. Error code is attached.
Need your help please.
If I understand correctly you already created a template with the cloud init configuration, then you created a VM from that template, and you want to modify it and start it. In order to update the VM you need to issue a PUT request, and the tag name for the host is "host_name":
String updateXml = "<?xml version=\"1.0\"?>" + "<vm>" + "<initialization>" + "<host_name>meghaasadmin.ultimatixuat.net</host_name>" + "<regenerate_ssh_keys>false</regenerate_ssh_keys>" + "<nic_configurations>" + "<nic_configuration>" + "<name>eth0</name>" + "<ip address=\"1.1.1.1\" netmask=\"255.255.255.0\" gateway=\"13.3.3.3\"/>" + "<boot_protocol>static</boot_protocol>" + "<on_boot>true</on_boot>" + "</nic_configuration>" + "</nic_configurations>" + "</initialization>" + "</vm>"; StringEntity updateEntity = new StringEntity(updateXml); HttpPut updateRequest = new HttpPut(apiUrl + "/vms/" + vmId); updateRequest.setHeader("Content-Type", "application/xml"); updateRequest.setHeader("Accept", "application/xml"); updateRequest.setEntity(updateEntity); HttpResponse updateResponse = client.execute(updateRequest);
Then, after the update, you need to start the VM and it will use that configuration:
String startXml = "<?xml version=\"1.0\"?>" + "<action/>"; StringEntity startEntity = new StringEntity(startXml); HttpPost startRequest = new HttpPost(apiUrl + "/vms/" + vmId + "/start"); startRequest.setEntity(startEntity); startRequest.setHeader("Content-Type", "application/xml"); startRequest.setHeader("Accept", "application/xml"); HttpResponse startResponse = client.execute(startRequest);
Some advices:
* Check the XML schema for the structure of the XML documents:
https://rhevmanager/api?schema
* When sending requests to the RESTAPI makes sure to always explicitly add the Content-Type and Accept headers:
yourRequest.setHeader("Content-Type", "application/xml"); yourRequest.setHeader("Accept", "application/xml");
* Take into account that the initialization with cloud-init will only be executed the first time you start the VM, so in your tests you will need to remove the VM and create it again.
* If you are planning to do complex things you may find it helpful the Java SDK:
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.
participants (5)
-
Agarwal Ruchita
-
Chandrahasa S
-
Juan Hernandez
-
Shahar Havivi
-
Sven Kieske