[Users] oVirt Python SDK: getting the full filenames of disk images

--_000_69303615BE133645963548DD4A3BFCB3BDB80CE2K7fintechru_ Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: quoted-printable Dear ovirt-engine users, I will be appreciated if someone experienced in oVirt Python SDK could advi= ce the method of getting the full filename of the VM's disk images in the R= HEV hypervisor's file system. Can I get filename with a full file system pa= th from a ovirtsdk.infrastructure.brokers.VMDisk class instance? If Python SDK (what is preffered) can't provide such an information, may be= it is still possible with RHEV-M REST API? Thank you, Vitaly Isaev Software engineer Information security department Fintech JSC, Moscow, Russia --_000_69303615BE133645963548DD4A3BFCB3BDB80CE2K7fintechru_ Content-Type: text/html; charset="koi8-r" Content-Transfer-Encoding: quoted-printable <html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr= osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" = xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:= //www.w3.org/TR/REC-html40"> <head> <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dkoi8-r"> <meta name=3D"Generator" content=3D"Microsoft Word 14 (filtered medium)"> <style><!-- /* Font Definitions */ @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-language:EN-US;} a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:purple; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-compose; font-family:"Calibri","sans-serif"; color:windowtext;} .MsoChpDefault {mso-style-type:export-only; font-family:"Calibri","sans-serif"; mso-fareast-language:EN-US;} @page WordSection1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm;} div.WordSection1 {page:WordSection1;} --></style><!--[if gte mso 9]><xml> <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext=3D"edit"> <o:idmap v:ext=3D"edit" data=3D"1" /> </o:shapelayout></xml><![endif]--> </head> <body lang=3D"RU" link=3D"blue" vlink=3D"purple"> <div class=3D"WordSection1"> <p class=3D"MsoNormal"><span lang=3D"EN-US">Dear ovirt-engine users, <o:p><= /o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US">I will be appreciated if someon= e experienced in oVirt Python SDK could advice the method of getting the fu= ll filename of the VM’s disk images in the RHEV hypervisor’s fi= le system. Can I get filename with a full file system path from a ovirtsdk.infrastructure.brokers.VMDisk class instance?<o:p></o= :p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US">If Python SDK (what is preffere= d) can’t provide such an information, may be it is still possible wit= h RHEV-M REST API?<o:p></o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US">Thank you, <o:p></o:p></span></= p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10.0pt;mso-f= areast-language:RU">Vitaly Isaev<o:p></o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10.0pt;color= :gray;mso-fareast-language:RU">Software engineer<o:p></o:p></span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10.0pt;color= :gray;mso-fareast-language:RU">Information security department<o:p></o:p></= span></p> <p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"font-size:10.0pt;color= :gray;mso-fareast-language:RU">Fintech JSC, Moscow, Russia<o:p></o:p></span=
</p> <p class=3D"MsoNormal"><o:p> </o:p></p> </div> </body> </html>
--_000_69303615BE133645963548DD4A3BFCB3BDB80CE2K7fintechru_--

Probably not, but you can - get the disk image UUID (that's the name in the filesystem or LV name), - get the UUID of the storage domain (that will be the top level dir name or VG name) - get the DC UUID (this will be the top level dir name and the mount point for LVM) Then compose the path out of these. Keep in mind that the disk UUID you get is the latest leaf in a snapshot tree, and if you need the entire chain of images, you need to recursively traverse the tree starting at the leaf, using the PUUID tag to find the parent. Might be a better way, but I'm not aware of it. Moreover, if you explain why you need to touch those images manually instead of letting ovirt handle everything, we might be able to suggest a better way -- D On Wed, Dec 4, 2013 at 2:34 AM, Исаев Виталий Анатольевич <isaev@fintech.ru>wrote:
Dear ovirt-engine users,
I will be appreciated if someone experienced in oVirt Python SDK could advice the method of getting the full filename of the VM’s disk images in the RHEV hypervisor’s file system. Can I get filename with a full file system path from a ovirtsdk.infrastructure.brokers.VMDisk class instance?
If Python SDK (what is preffered) can’t provide such an information, may be it is still possible with RHEV-M REST API?
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users

--_000_69303615BE133645963548DD4A3BFCB3BDCBCFE2K7fintechru_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgRGFuLCBnbGFkIHRvIG1lZXQgeW91IGJvdGggb24gTE9SIGFuZCBpbiB0aGlzIG1haWxpbmcg bGlzdCA6KQ0KDQoNClVuZm9ydHVuYXRlbHkgb3ZpcnRzZGsuaW5mcmFzdHJ1Y3R1cmUuYnJva2Vy cy48YW55dGhpbmc+IGNsYXNzZXMgaW5zdGFuY2VzIG1pc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhl IGhpZ2hlciBvYmplY3RzIHZlcnkgb2Z0ZW4uIFRoZSB0eXBpY2FsIHNpdHVhdGlvbiBpcyByZXR1 cm5pbmcgb2YgZW1wdHkgc3RyaW5nIHdoZW4gd2UgYXNrIHNvbWV0aGluZyBhYm91dCB0aGUgcGFy ZW50IGZyb20gdGhlIGNoaWxkIG9iamVjdCAoImNoaWxkIiBhbmQgInBhcmVudCIgaW4gdGVybXMg UmVkIEhhdCBFbnRlcnByaXNlIFZpcnR1YWxpemF0aW9uIG9iamVjdHMgaGllcmFyY2h5KS4gQ29u c2lkZXIgdGhpcyBQeXRob24gY29kZToNCg0KDQoNCiAgICAgICAgICAgICAgICBmcm9tIG92aXJ0 c2RrLmFwaSBpbXBvcnQgQVBJDQoNCiAgICAgICAgICAgICAgICBmcm9tIG92aXJ0c2RrLnhtbCBp bXBvcnQgcGFyYW1zDQoNCiAgICAgICAgICAgICAgICAuLi4NCg0KICAgICAgICAgICAgICAgIGFw aSA9IEFQSSguLi4pDQoNCiAgICAgICAgICAgICAgICBkID0gYXBpLnZtcy5saXN0KClbaV0uZ2V0 X2Rpc2tzKCkubGlzdCgpW2ldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgb3ZpcnRzZGsuaW5mcmFzdHJ1Y3R1cmUuYnJva2Vycy5WTURpc2sgY2xhc3Mg aW5zdGFuY2UsIGkg4oCTIGFueSBudW1iZXIgaW4gcmFuZ2UoYXBpLnZtcy5saXN0KCkuX19sZW5f XygpKQ0KDQogICAgICAgICAgICAgICAgcyA9IGQuZ2V0X3N0b3JhZ2VfZG9tYWlucygpLmdldF9z dG9yYWdlX2RvbWFpbigpWzBdICAgICAgICAgICAgICAjIG92aXJ0c2RrLmluZnJhc3RydWN0dXJl LnBhcmFtcy5TdG9yYWdlRG9tYWluIGNsYXNzIGluc3RhbmNlDQoNCiAgICAgICAgICAgICAgICB0 ID0gcy5nZXRfZGF0YV9jZW50ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm9uZVR5cGUNCg0K DQoNClNvIHlvdSBjYW4gc2VlIHRoYXQgdGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrIGhlcmUu DQoNCg0KT3VyIHB1cnBvc2UgaXMgY2hlY2tpbmcgdGhlIFZN4oCZcyBkaXNrIGltYWdlIGludGVn cml0eSAoSSBtZWFuIGludGVncml0eSBvZiBzeXN0ZW0gZmlsZXMsIHN0b3JlZCBpbiAvYm9vdCwg L2JpbiwgL3NiaW4sIC9saWIgZXRjLikgZXZlcnkgdGltZSB0aGUgVk0gc3RhcnRzLiBUaGUgaW50 ZWdyaXR5IGNoZWNraW5nIHNjcmlwdCBpcyB3cml0dGVuIGluIFB5dGhvbiBhbmQgcmVsaWVzIG9u IGxpYmd1ZXN0ZnMgYW5kIHZkc20gaG9va3MuIFNwZWNpZmljIHZkc20gaG9vayBydW5zIG91ciBz Y3JpcHQgYW5kIGJsb2NrIHRoZSBWTeKAmXMgYm9vdCBwcm9jZXNzIHVudGlsIHRoZSBjb3JyZWN0 bmVzcyBvZiB0aGUgc3lzdGVtIGZpbGVzIGhhc2ggc3VtcyB3aWxsIGJlIGNoZWNrZWQuIEJ1dCBs aWJndWVzdGZzIHJlcXVpcmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpc2sgdG8gYmUgaGFuZGxl ZCwgYW5kIGl04oCZcyBub3QgaW50ZWdyYXRlZCB3aXRoIG92aXJ0IGluZnJhc3RydWN0dXJlLiBB bmQgaGVyZSB3ZSBmYWNlIHdpdGggYSB0YXNrIG9mIGZ1bGwgZGlzayBpbWFnZSBmaWxlbmFtZXMg ZGVmaW5pdGlvbi4NCg0KVGhhbmsgeW91LA0KVml0YWx5IElzYWV2DQpTb2Z0d2FyZSBlbmdpbmVl cg0KSW5mb3JtYXRpb24gc2VjdXJpdHkgZGVwYXJ0bWVudA0KRmludGVjaCBKU0MsIE1vc2Nvdywg UnVzc2lhDQoNCkZyb206IERhbiBZYXNueSBbbWFpbHRvOmR5YXNueUBnbWFpbC5jb21dDQpTZW50 OiBGcmlkYXksIERlY2VtYmVyIDA2LCAyMDEzIDg6NTYgUE0NClRvOiDQmNGB0LDQtdCyINCS0LjR gtCw0LvQuNC5INCQ0L3QsNGC0L7Qu9GM0LXQstC40YcNCkNjOiB1c2Vyc0BvdmlydC5vcmcNClN1 YmplY3Q6IFJlOiBbVXNlcnNdIG9WaXJ0IFB5dGhvbiBTREs6IGdldHRpbmcgdGhlIGZ1bGwgZmls ZW5hbWVzIG9mIGRpc2sgaW1hZ2VzDQoNClByb2JhYmx5IG5vdCwgYnV0IHlvdSBjYW4NCi0gZ2V0 IHRoZSBkaXNrIGltYWdlIFVVSUQgKHRoYXQncyB0aGUgbmFtZSBpbiB0aGUgZmlsZXN5c3RlbSBv ciBMViBuYW1lKSwNCi0gZ2V0IHRoZSBVVUlEIG9mIHRoZSBzdG9yYWdlIGRvbWFpbiAodGhhdCB3 aWxsIGJlIHRoZSB0b3AgbGV2ZWwgZGlyIG5hbWUgb3IgVkcgbmFtZSkNCi0gZ2V0IHRoZSBEQyBV VUlEICh0aGlzIHdpbGwgYmUgdGhlIHRvcCBsZXZlbCBkaXIgbmFtZSBhbmQgdGhlIG1vdW50IHBv aW50IGZvciBMVk0pDQoNClRoZW4gY29tcG9zZSB0aGUgcGF0aCBvdXQgb2YgdGhlc2UuIEtlZXAg aW4gbWluZCB0aGF0IHRoZSBkaXNrIFVVSUQgeW91IGdldCBpcyB0aGUgbGF0ZXN0IGxlYWYgaW4g YSBzbmFwc2hvdCB0cmVlLCBhbmQgaWYgeW91IG5lZWQgdGhlIGVudGlyZSBjaGFpbiBvZiBpbWFn ZXMsIHlvdSBuZWVkIHRvIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSB0cmVlIHN0YXJ0aW5nIGF0 IHRoZSBsZWFmLCB1c2luZyB0aGUgUFVVSUQgdGFnIHRvIGZpbmQgdGhlIHBhcmVudC4NCg0KTWln aHQgYmUgYSBiZXR0ZXIgd2F5LCBidXQgSSdtIG5vdCBhd2FyZSBvZiBpdC4NCg0KTW9yZW92ZXIs IGlmIHlvdSBleHBsYWluIHdoeSB5b3UgbmVlZCB0byB0b3VjaCB0aG9zZSBpbWFnZXMgbWFudWFs bHkgaW5zdGVhZCBvZiBsZXR0aW5nIG92aXJ0IGhhbmRsZSBldmVyeXRoaW5nLCB3ZSBtaWdodCBi ZSBhYmxlIHRvIHN1Z2dlc3QgYSBiZXR0ZXIgd2F5DQoNCi0tDQpEDQoNCk9uIFdlZCwgRGVjIDQs IDIwMTMgYXQgMjozNCBBTSwg0JjRgdCw0LXQsiDQktC40YLQsNC70LjQuSDQkNC90LDRgtC+0LvR jNC10LLQuNGHIDxpc2FldkBmaW50ZWNoLnJ1PG1haWx0bzppc2FldkBmaW50ZWNoLnJ1Pj4gd3Jv dGU6DQpEZWFyIG92aXJ0LWVuZ2luZSB1c2VycywNCg0KSSB3aWxsIGJlIGFwcHJlY2lhdGVkIGlm IHNvbWVvbmUgZXhwZXJpZW5jZWQgaW4gb1ZpcnQgUHl0aG9uIFNESyBjb3VsZCBhZHZpY2UgdGhl IG1ldGhvZCBvZiBnZXR0aW5nIHRoZSBmdWxsIGZpbGVuYW1lIG9mIHRoZSBWTeKAmXMgZGlzayBp bWFnZXMgaW4gdGhlIFJIRVYgaHlwZXJ2aXNvcuKAmXMgZmlsZSBzeXN0ZW0uIENhbiBJIGdldCBm aWxlbmFtZSB3aXRoIGEgZnVsbCBmaWxlIHN5c3RlbSBwYXRoIGZyb20gYSBvdmlydHNkay5pbmZy YXN0cnVjdHVyZS5icm9rZXJzLlZNRGlzayBjbGFzcyBpbnN0YW5jZT8NCg0KSWYgUHl0aG9uIFNE SyAod2hhdCBpcyBwcmVmZmVyZWQpIGNhbuKAmXQgcHJvdmlkZSBzdWNoIGFuIGluZm9ybWF0aW9u LCBtYXkgYmUgaXQgaXMgc3RpbGwgcG9zc2libGUgd2l0aCBSSEVWLU0gUkVTVCBBUEk/DQoNClRo YW5rIHlvdSwNClZpdGFseSBJc2Fldg0KU29mdHdhcmUgZW5naW5lZXINCkluZm9ybWF0aW9uIHNl Y3VyaXR5IGRlcGFydG1lbnQNCkZpbnRlY2ggSlNDLCBNb3Njb3csIFJ1c3NpYQ0KDQoNCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpVc2VycyBtYWlsaW5n IGxpc3QNClVzZXJzQG92aXJ0Lm9yZzxtYWlsdG86VXNlcnNAb3ZpcnQub3JnPg0KaHR0cDovL2xp c3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzDQoNCg== --_000_69303615BE133645963548DD4A3BFCB3BDCBCFE2K7fintechru_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTQgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 Q2FsaWJyaTsNCglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJ e2ZvbnQtZmFtaWx5OlRhaG9tYTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDt9DQov KiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1z b05vcm1hbA0KCXttYXJnaW46MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNp emU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7fQ0KYTps aW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6 Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29I eXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxl Ow0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KcC5Nc29QbGFpblRleHQsIGxpLk1zb1Bs YWluVGV4dCwgZGl2Lk1zb1BsYWluVGV4dA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNv LXN0eWxlLWxpbms6ItCi0LXQutGB0YIg0JfQvdCw0LoiOw0KCW1hcmdpbjowY207DQoJbWFyZ2lu LWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGli cmkiLCJzYW5zLXNlcmlmIjsNCgltc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUzt9DQpzcGFuLkVt YWlsU3R5bGUxNw0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsNCglmb250LWZhbWls eToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiOw0KCWNvbG9yOiMxRjQ5N0Q7fQ0Kc3Bhbi5hDQoJe21z by1zdHlsZS1uYW1lOiLQotC10LrRgdGCINCX0L3QsNC6IjsNCgltc28tc3R5bGUtcHJpb3JpdHk6 OTk7DQoJbXNvLXN0eWxlLWxpbms60KLQtdC60YHRgjsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs InNhbnMtc2VyaWYiO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1v bmx5Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7DQoJbXNvLWZhcmVhc3Qt bGFuZ3VhZ2U6RU4tVVM7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6NjEyLjBwdCA3OTIu MHB0Ow0KCW1hcmdpbjoyLjBjbSA0Mi41cHQgMi4wY20gMy4wY207fQ0KZGl2LldvcmRTZWN0aW9u MQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48 eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4NCjwv eG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlvdXQg djpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8L286c2hh cGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJSVSIgbGlu az0iYmx1ZSIgdmxpbms9InB1cnBsZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90 Oztjb2xvcjojMUY0OTdEIj5IaSBEYW4sIGdsYWQgdG8gbWVldCB5b3UgYm90aCBvbiBMT1IgYW5k IGluIHRoaXMgbWFpbGluZyBsaXN0IDopPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xv cjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxh aW5UZXh0Ij48c3BhbiBsYW5nPSJFTi1VUyI+VW5mb3J0dW5hdGVseSBvdmlydHNkay5pbmZyYXN0 cnVjdHVyZS5icm9rZXJzLiZsdDthbnl0aGluZyZndDsgY2xhc3NlcyBpbnN0YW5jZXMgbWlzcyBp bmZvcm1hdGlvbiBhYm91dCB0aGUgaGlnaGVyIG9iamVjdHMgdmVyeSBvZnRlbi4gVGhlIHR5cGlj YWwgc2l0dWF0aW9uIGlzIHJldHVybmluZyBvZiBlbXB0eSBzdHJpbmcgd2hlbiB3ZSBhc2sgc29t ZXRoaW5nIGFib3V0IHRoZSBwYXJlbnQNCiBmcm9tIHRoZSBjaGlsZCBvYmplY3QgKCZxdW90O2No aWxkJnF1b3Q7IGFuZCAmcXVvdDtwYXJlbnQmcXVvdDsgaW4gdGVybXMgUmVkIEhhdCBFbnRlcnBy aXNlIFZpcnR1YWxpemF0aW9uIG9iamVjdHMgaGllcmFyY2h5KS4gQ29uc2lkZXIgdGhpcyBQeXRo b24gY29kZTo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48 c3BhbiBsYW5nPSJFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb1BsYWluVGV4dCI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyBmcm9tIG92aXJ0c2RrLmFwaSBpbXBvcnQgQVBJPG86cD48L286cD48L3NwYW4+ PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBmcm9tIG92aXJ0c2RrLnhtbCBpbXBvcnQgcGFyYW1z PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+PHNwYW4gbGFu Zz0iRU4tVVMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAuLi48bzpwPjwvbzpw Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48c3BhbiBsYW5nPSJFTi1VUyI+ Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGFwaSA9IEFQSSguLi4pPG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+PHNwYW4gbGFuZz0iRU4tVVMi PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBkID0gYXBpLnZtcy5saXN0KClbaV0u Z2V0X2Rpc2tzKCkubGlzdCgpW2ldICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsgIyBvdmlydHNkay5pbmZyYXN0cnVjdHVyZS5icm9rZXJzLlZNRGlzayBj bGFzcyBpbnN0YW5jZSwgaSDigJMgYW55IG51bWJlciBpbiByYW5nZShhcGkudm1zLmxpc3QoKS5f X2xlbl9fKCkpPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+ PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzID0g ZC5nZXRfc3RvcmFnZV9kb21haW5zKCkuZ2V0X3N0b3JhZ2VfZG9tYWluKClbMF0gJm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7ICMgb3ZpcnRzZGsuaW5mcmFzdHJ1Y3R1cmUucGFyYW1zLlN0b3JhZ2VEb21haW4gY2xh c3MgaW5zdGFuY2U8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0 Ij48c3BhbiBsYW5nPSJFTi1VUyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHQg PSBzLmdldF9kYXRhX2NlbnRlcigpJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICMgTm9uZVR5cGU8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48c3BhbiBsYW5nPSJFTi1VUyI+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb1BsYWluVGV4dCI+PHNwYW4gbGFuZz0i RU4tVVMiPlNvIHlvdSBjYW4gc2VlIHRoYXQgdGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrIGhl cmUuDQo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48c3Bh biBsYW5nPSJFTi1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjoj MUY0OTdEIj5PdXIgcHVycG9zZSBpcyBjaGVja2luZyB0aGUgVk3igJlzIGRpc2sgaW1hZ2UgaW50 ZWdyaXR5IChJIG1lYW4gaW50ZWdyaXR5IG9mIHN5c3RlbSBmaWxlcywgc3RvcmVkIGluIC9ib290 LCAvYmluLCAvc2JpbiwgL2xpYiBldGMuKSBldmVyeSB0aW1lIHRoZQ0KIFZNIHN0YXJ0cy4gVGhl IGludGVncml0eSBjaGVja2luZyBzY3JpcHQgaXMgd3JpdHRlbiBpbiBQeXRob24gYW5kIHJlbGll cyBvbiBsaWJndWVzdGZzIGFuZCB2ZHNtIGhvb2tzLiBTcGVjaWZpYyB2ZHNtIGhvb2sgcnVucyBv dXIgc2NyaXB0IGFuZCBibG9jayB0aGUgVk3igJlzIGJvb3QgcHJvY2VzcyB1bnRpbCB0aGUgY29y cmVjdG5lc3Mgb2YgdGhlIHN5c3RlbSBmaWxlcyBoYXNoIHN1bXMgd2lsbCBiZSBjaGVja2VkLiBC dXQgbGliZ3Vlc3RmcyByZXF1aXJlcw0KIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpc2sgdG8gYmUg aGFuZGxlZCwgYW5kIGl04oCZcyBub3QgaW50ZWdyYXRlZCB3aXRoIG92aXJ0IGluZnJhc3RydWN0 dXJlLiBBbmQgaGVyZSB3ZSBmYWNlIHdpdGggYSB0YXNrIG9mIGZ1bGwgZGlzayBpbWFnZSBmaWxl bmFtZXMgZGVmaW5pdGlvbi4NCjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Y29sb3I6IzFG NDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj5U aGFuayB5b3UsPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj5WaXRh bHkgSXNhZXY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7O2NvbG9yOmdyYXkiPlNvZnR3YXJl IGVuZ2luZWVyPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjpncmF5Ij5JbmZvcm1h dGlvbiBzZWN1cml0eSBkZXBhcnRtZW50PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xv cjpncmF5Ij5GaW50ZWNoIEpTQywgTW9zY293LCBSdXNzaWE8bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6 ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVvdDtzYW5zLXNlcmlm JnF1b3Q7O2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEw LjBwdDtmb250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90 OyI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEw LjBwdDtmb250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90 OyI+IERhbiBZYXNueSBbbWFpbHRvOmR5YXNueTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZx dW90OyI+QGdtYWlsLmNvbV0NCjxicj4NCjxiPlNlbnQ6PC9iPiBGcmlkYXksIERlY2VtYmVyIDA2 LCAyMDEzIDg6NTYgUE08YnI+DQo8Yj5Ubzo8L2I+INCY0YHQsNC10LIg0JLQuNGC0LDQu9C40Lkg 0JDQvdCw0YLQvtC70YzQtdCy0LjRhzxicj4NCjxiPkNjOjwvYj4gdXNlcnNAb3ZpcnQub3JnPGJy Pg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbVXNlcnNdIG9WaXJ0IFB5dGhvbiBTREs6IGdldHRpbmcg dGhlIGZ1bGwgZmlsZW5hbWVzIG9mIGRpc2sgaW1hZ2VzPG86cD48L286cD48L3NwYW4+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+UHJvYmFibHkgbm90LCBidXQgeW91IGNhbiZuYnNwOzxvOnA+PC9vOnA+ PC9wPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPi0gZ2V0IHRoZSBkaXNrIGltYWdlIFVV SUQgKHRoYXQncyB0aGUgbmFtZSBpbiB0aGUgZmlsZXN5c3RlbSBvciBMViBuYW1lKSwmbmJzcDs8 bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4tIGdldCB0aGUgVVVJ RCBvZiB0aGUgc3RvcmFnZSBkb21haW4gKHRoYXQgd2lsbCBiZSB0aGUgdG9wIGxldmVsIGRpciBu YW1lIG9yIFZHIG5hbWUpJm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPi0gZ2V0IHRoZSBEQyBVVUlEICh0aGlzIHdpbGwgYmUg dGhlIHRvcCBsZXZlbCBkaXIgbmFtZSBhbmQgdGhlIG1vdW50IHBvaW50IGZvciBMVk0pPG86cD48 L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNw OzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRoZW4gY29t cG9zZSB0aGUgcGF0aCBvdXQgb2YgdGhlc2UuIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBkaXNrIFVV SUQgeW91IGdldCBpcyB0aGUgbGF0ZXN0IGxlYWYgaW4gYSBzbmFwc2hvdCB0cmVlLCBhbmQgaWYg eW91IG5lZWQgdGhlIGVudGlyZSBjaGFpbiBvZiBpbWFnZXMsIHlvdSBuZWVkIHRvIHJlY3Vyc2l2 ZWx5IHRyYXZlcnNlIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBsZWFmLCB1c2luZyB0aGUgUFVV SUQNCiB0YWcgdG8gZmluZCB0aGUgcGFyZW50LjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5NaWdodCBiZSBhIGJldHRlciB3YXksIGJ1dCBJJ20g bm90IGF3YXJlIG9mIGl0LjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj5Nb3Jlb3ZlciwgaWYgeW91IGV4cGxhaW4gd2h5IHlvdSBuZWVkIHRvIHRv dWNoIHRob3NlIGltYWdlcyBtYW51YWxseSBpbnN0ZWFkIG9mIGxldHRpbmcgb3ZpcnQgaGFuZGxl IGV2ZXJ5dGhpbmcsIHdlIG1pZ2h0IGJlIGFibGUgdG8gc3VnZ2VzdCBhIGJldHRlciB3YXk8bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5i c3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+LS08bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkQ8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1ib3R0b206MTIuMHB0Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj5PbiBXZWQsIERlYyA0LCAyMDEzIGF0IDI6MzQgQU0sINCY0YHQ sNC10LIg0JLQuNGC0LDQu9C40Lkg0JDQvdCw0YLQvtC70YzQtdCy0LjRhyAmbHQ7PGEgaHJlZj0i bWFpbHRvOmlzYWV2QGZpbnRlY2gucnUiIHRhcmdldD0iX2JsYW5rIj5pc2FldkBmaW50ZWNoLnJ1 PC9hPiZndDsgd3JvdGU6PG86cD48L286cD48L3A+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRv bS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPkRlYXIgb3ZpcnQtZW5naW5lIHVzZXJzLA0K PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1t YXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj48c3BhbiBsYW5n PSJFTi1VUyI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDph dXRvIj48c3BhbiBsYW5nPSJFTi1VUyI+SSB3aWxsIGJlIGFwcHJlY2lhdGVkIGlmIHNvbWVvbmUg ZXhwZXJpZW5jZWQgaW4gb1ZpcnQgUHl0aG9uIFNESyBjb3VsZCBhZHZpY2UgdGhlIG1ldGhvZCBv ZiBnZXR0aW5nIHRoZSBmdWxsIGZpbGVuYW1lIG9mIHRoZSBWTeKAmXMgZGlzayBpbWFnZXMgaW4g dGhlIFJIRVYgaHlwZXJ2aXNvcuKAmXMNCiBmaWxlIHN5c3RlbS4gQ2FuIEkgZ2V0IGZpbGVuYW1l IHdpdGggYSBmdWxsIGZpbGUgc3lzdGVtIHBhdGggZnJvbSBhIG92aXJ0c2RrLmluZnJhc3RydWN0 dXJlLmJyb2tlcnMuVk1EaXNrIGNsYXNzIGluc3RhbmNlPzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28t bWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOzwvc3Bhbj48 bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRv cC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMi PklmIFB5dGhvbiBTREsgKHdoYXQgaXMgcHJlZmZlcmVkKSBjYW7igJl0IHByb3ZpZGUgc3VjaCBh biBpbmZvcm1hdGlvbiwgbWF5IGJlIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHdpdGggUkhFVi1NIFJF U1QgQVBJPzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNw YW4gbGFuZz0iRU4tVVMiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRv bS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPlRoYW5rIHlvdSwNCjwvc3Bhbj48bzpwPjwv bzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6 YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl PSJmb250LXNpemU6MTAuMHB0Ij5WaXRhbHkgSXNhZXY8L3NwYW4+PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1h cmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtjb2xvcjpncmF5Ij5Tb2Z0d2FyZSBlbmdpbmVlcjwvc3Bhbj48bzpwPjwvbzpwPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bztt c28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250 LXNpemU6MTAuMHB0O2NvbG9yOmdyYXkiPkluZm9ybWF0aW9uIHNlY3VyaXR5IGRlcGFydG1lbnQ8 L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1h cmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9 IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtjb2xvcjpncmF5Ij5GaW50ZWNoIEpTQywg TW9zY293LCBSdXNzaWE8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs IiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1 dG8iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEyLjBwdCI+PGJyPg0KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+DQpVc2VycyBtYWlsaW5nIGxpc3Q8 YnI+DQo8YSBocmVmPSJtYWlsdG86VXNlcnNAb3ZpcnQub3JnIj5Vc2Vyc0BvdmlydC5vcmc8L2E+ PGJyPg0KPGEgaHJlZj0iaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3Vz ZXJzIiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3VzZXJzPC9hPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+ DQo= --_000_69303615BE133645963548DD4A3BFCB3BDCBCFE2K7fintechru_--

Please see reply inline On Mon, Dec 9, 2013 at 12:03 AM, Исаев Виталий Анатольевич <isaev@fintech.ru
wrote:
Hi Dan, glad to meet you both on LOR and in this mailing list :)
I know, I'm everywhere :)
Unfortunately ovirtsdk.infrastructure.brokers.<anything> classes instances miss information about the higher objects very often. The typical situation is returning of empty string when we ask something about the parent from the child object ("child" and "parent" in terms Red Hat Enterprise Virtualization objects hierarchy). Consider this Python code:
from ovirtsdk.api import API
from ovirtsdk.xml import params
...
api = API(...)
d = api.vms.list()[i].get_disks().list()[i] # ovirtsdk.infrastructure.brokers.VMDisk class instance, i – any number in range(api.vms.list().__len__())
s = d.get_storage_domains().get_storage_domain()[0] # ovirtsdk.infrastructure.params.StorageDomain class instance
t = s.get_data_center() # NoneType
So you can see that this approach does not work here.
I hope Michael or Itamar can shed some more light on this part, I don't have a system in front of me to check. AFAIR some objects aren't linked directly and you simply need to know how to get to them, I've had plenty of help from Michael before, when I was running a seemingly correct script, and getting no data, simply because I didn't understand the way the API looks for objects and relationships.
Our purpose is checking the VM’s disk image integrity (I mean integrity of system files, stored in /boot, /bin, /sbin, /lib etc.) every time the VM starts. The integrity checking script is written in Python and relies on libguestfs and vdsm hooks. Specific vdsm hook runs our script and block the VM’s boot process until the correctness of the system files hash sums will be checked. But libguestfs requires the full path to the disk to be handled, and it’s not integrated with ovirt infrastructure. And here we face with a task of full disk image filenames definition.
I assume you are using before_vm_start? This will catch the VM definitions, as passed by the engine, and allow you to reassemble the domxml. You can get the disk path from the domxml directly, bypassing the engine APIs completely. The problem however, if you are doing this on block storage, is that the right LV will not be prepared for use by vdsm at this point, so you'll have to make it accessible manually, then disable access and let vdsm do it's job. Much easier with NFS/Gluster of course.
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
*From:* Dan Yasny [mailto:dyasny@gmail.com] *Sent:* Friday, December 06, 2013 8:56 PM *To:* Исаев Виталий Анатольевич *Cc:* users@ovirt.org *Subject:* Re: [Users] oVirt Python SDK: getting the full filenames of disk images
Probably not, but you can
- get the disk image UUID (that's the name in the filesystem or LV name),
- get the UUID of the storage domain (that will be the top level dir name or VG name)
- get the DC UUID (this will be the top level dir name and the mount point for LVM)
Then compose the path out of these. Keep in mind that the disk UUID you get is the latest leaf in a snapshot tree, and if you need the entire chain of images, you need to recursively traverse the tree starting at the leaf, using the PUUID tag to find the parent.
Might be a better way, but I'm not aware of it.
Moreover, if you explain why you need to touch those images manually instead of letting ovirt handle everything, we might be able to suggest a better way
--
D
On Wed, Dec 4, 2013 at 2:34 AM, Исаев Виталий Анатольевич < isaev@fintech.ru> wrote:
Dear ovirt-engine users,
I will be appreciated if someone experienced in oVirt Python SDK could advice the method of getting the full filename of the VM’s disk images in the RHEV hypervisor’s file system. Can I get filename with a full file system path from a ovirtsdk.infrastructure.brokers.VMDisk class instance?
If Python SDK (what is preffered) can’t provide such an information, may be it is still possible with RHEV-M REST API?
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users

--_000_69303615BE133645963548DD4A3BFCB3C18738E2K7fintechru_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGFuLCB0aGFuayB5b3UgZm9yIGEgbmljZSBhZHZpY2UuICBJIGhhdmUgZm9yZ290dGVuIGFib3V0 IGRvbXhtbCByaWNoIG9wcG9ydHVuaXRpZXPigKYNCg0KVml0YWx5IElzYWV2DQpTb2Z0d2FyZSBl bmdpbmVlcg0KSW5mb3JtYXRpb24gc2VjdXJpdHkgZGVwYXJ0bWVudA0KRmludGVjaCBKU0MsIE1v c2NvdywgUnVzc2lhDQoNCkZyb206IERhbiBZYXNueSBbbWFpbHRvOmR5YXNueUBnbWFpbC5jb21d DQpTZW50OiBNb25kYXksIERlY2VtYmVyIDA5LCAyMDEzIDg6MTQgUE0NClRvOiDQmNGB0LDQtdCy INCS0LjRgtCw0LvQuNC5INCQ0L3QsNGC0L7Qu9GM0LXQstC40YcNCkNjOiB1c2Vyc0BvdmlydC5v cmcNClN1YmplY3Q6IFJlOiBbVXNlcnNdIG9WaXJ0IFB5dGhvbiBTREs6IGdldHRpbmcgdGhlIGZ1 bGwgZmlsZW5hbWVzIG9mIGRpc2sgaW1hZ2VzDQoNClBsZWFzZSBzZWUgcmVwbHkgaW5saW5lDQoN Ck9uIE1vbiwgRGVjIDksIDIwMTMgYXQgMTI6MDMgQU0sINCY0YHQsNC10LIg0JLQuNGC0LDQu9C4 0Lkg0JDQvdCw0YLQvtC70YzQtdCy0LjRhyA8aXNhZXZAZmludGVjaC5ydTxtYWlsdG86aXNhZXZA ZmludGVjaC5ydT4+IHdyb3RlOg0KSGkgRGFuLCBnbGFkIHRvIG1lZXQgeW91IGJvdGggb24gTE9S IGFuZCBpbiB0aGlzIG1haWxpbmcgbGlzdCA6KQ0KDQpJIGtub3csIEknbSBldmVyeXdoZXJlIDop DQoNCg0KDQpVbmZvcnR1bmF0ZWx5IG92aXJ0c2RrLmluZnJhc3RydWN0dXJlLmJyb2tlcnMuPGFu eXRoaW5nPiBjbGFzc2VzIGluc3RhbmNlcyBtaXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaWdo ZXIgb2JqZWN0cyB2ZXJ5IG9mdGVuLiBUaGUgdHlwaWNhbCBzaXR1YXRpb24gaXMgcmV0dXJuaW5n IG9mIGVtcHR5IHN0cmluZyB3aGVuIHdlIGFzayBzb21ldGhpbmcgYWJvdXQgdGhlIHBhcmVudCBm cm9tIHRoZSBjaGlsZCBvYmplY3QgKCJjaGlsZCIgYW5kICJwYXJlbnQiIGluIHRlcm1zIFJlZCBI YXQgRW50ZXJwcmlzZSBWaXJ0dWFsaXphdGlvbiBvYmplY3RzIGhpZXJhcmNoeSkuIENvbnNpZGVy IHRoaXMgUHl0aG9uIGNvZGU6DQoNCg0KDQogICAgICAgICAgICAgICAgZnJvbSBvdmlydHNkay5h cGkgaW1wb3J0IEFQSQ0KDQogICAgICAgICAgICAgICAgZnJvbSBvdmlydHNkay54bWwgaW1wb3J0 IHBhcmFtcw0KDQogICAgICAgICAgICAgICAgLi4uDQoNCiAgICAgICAgICAgICAgICBhcGkgPSBB UEkoLi4uKQ0KDQogICAgICAgICAgICAgICAgZCA9IGFwaS52bXMubGlzdCgpW2ldLmdldF9kaXNr cygpLmxpc3QoKVtpXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIG92aXJ0c2RrLmluZnJhc3RydWN0dXJlLmJyb2tlcnMuVk1EaXNrIGNsYXNzIGluc3Rh bmNlLCBpIOKAkyBhbnkgbnVtYmVyIGluIHJhbmdlKGFwaS52bXMubGlzdCgpLl9fbGVuX18oKSkN Cg0KICAgICAgICAgICAgICAgIHMgPSBkLmdldF9zdG9yYWdlX2RvbWFpbnMoKS5nZXRfc3RvcmFn ZV9kb21haW4oKVswXSAgICAgICAgICAgICAgIyBvdmlydHNkay5pbmZyYXN0cnVjdHVyZS5wYXJh bXMuU3RvcmFnZURvbWFpbiBjbGFzcyBpbnN0YW5jZQ0KDQogICAgICAgICAgICAgICAgdCA9IHMu Z2V0X2RhdGFfY2VudGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vbmVUeXBlDQoNCg0KDQpT byB5b3UgY2FuIHNlZSB0aGF0IHRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBoZXJlLg0KDQoN Cg0KSSBob3BlIE1pY2hhZWwgb3IgSXRhbWFyIGNhbiBzaGVkIHNvbWUgbW9yZSBsaWdodCBvbiB0 aGlzIHBhcnQsIEkgZG9uJ3QgaGF2ZSBhIHN5c3RlbSBpbiBmcm9udCBvZiBtZSB0byBjaGVjay4g QUZBSVIgc29tZSBvYmplY3RzIGFyZW4ndCBsaW5rZWQgZGlyZWN0bHkgYW5kIHlvdSBzaW1wbHkg bmVlZCB0byBrbm93IGhvdyB0byBnZXQgdG8gdGhlbSwgSSd2ZSBoYWQgcGxlbnR5IG9mIGhlbHAg ZnJvbSBNaWNoYWVsIGJlZm9yZSwgd2hlbiBJIHdhcyBydW5uaW5nIGEgc2VlbWluZ2x5IGNvcnJl Y3Qgc2NyaXB0LCBhbmQgZ2V0dGluZyBubyBkYXRhLCBzaW1wbHkgYmVjYXVzZSBJIGRpZG4ndCB1 bmRlcnN0YW5kIHRoZSB3YXkgdGhlIEFQSSBsb29rcyBmb3Igb2JqZWN0cyBhbmQgcmVsYXRpb25z aGlwcy4NCg0KT3VyIHB1cnBvc2UgaXMgY2hlY2tpbmcgdGhlIFZN4oCZcyBkaXNrIGltYWdlIGlu dGVncml0eSAoSSBtZWFuIGludGVncml0eSBvZiBzeXN0ZW0gZmlsZXMsIHN0b3JlZCBpbiAvYm9v dCwgL2JpbiwgL3NiaW4sIC9saWIgZXRjLikgZXZlcnkgdGltZSB0aGUgVk0gc3RhcnRzLiBUaGUg aW50ZWdyaXR5IGNoZWNraW5nIHNjcmlwdCBpcyB3cml0dGVuIGluIFB5dGhvbiBhbmQgcmVsaWVz IG9uIGxpYmd1ZXN0ZnMgYW5kIHZkc20gaG9va3MuIFNwZWNpZmljIHZkc20gaG9vayBydW5zIG91 ciBzY3JpcHQgYW5kIGJsb2NrIHRoZSBWTeKAmXMgYm9vdCBwcm9jZXNzIHVudGlsIHRoZSBjb3Jy ZWN0bmVzcyBvZiB0aGUgc3lzdGVtIGZpbGVzIGhhc2ggc3VtcyB3aWxsIGJlIGNoZWNrZWQuIEJ1 dCBsaWJndWVzdGZzIHJlcXVpcmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpc2sgdG8gYmUgaGFu ZGxlZCwgYW5kIGl04oCZcyBub3QgaW50ZWdyYXRlZCB3aXRoIG92aXJ0IGluZnJhc3RydWN0dXJl LiBBbmQgaGVyZSB3ZSBmYWNlIHdpdGggYSB0YXNrIG9mIGZ1bGwgZGlzayBpbWFnZSBmaWxlbmFt ZXMgZGVmaW5pdGlvbi4NCg0KSSBhc3N1bWUgeW91IGFyZSB1c2luZyBiZWZvcmVfdm1fc3RhcnQ/ IFRoaXMgd2lsbCBjYXRjaCB0aGUgVk0gZGVmaW5pdGlvbnMsIGFzIHBhc3NlZCBieSB0aGUgZW5n aW5lLCBhbmQgYWxsb3cgeW91IHRvIHJlYXNzZW1ibGUgdGhlIGRvbXhtbC4gWW91IGNhbiBnZXQg dGhlIGRpc2sgcGF0aCBmcm9tIHRoZSBkb214bWwgZGlyZWN0bHksIGJ5cGFzc2luZyB0aGUgZW5n aW5lIEFQSXMgY29tcGxldGVseS4NClRoZSBwcm9ibGVtIGhvd2V2ZXIsIGlmIHlvdSBhcmUgZG9p bmcgdGhpcyBvbiBibG9jayBzdG9yYWdlLCBpcyB0aGF0IHRoZSByaWdodCBMViB3aWxsIG5vdCBi ZSBwcmVwYXJlZCBmb3IgdXNlIGJ5IHZkc20gYXQgdGhpcyBwb2ludCwgc28geW91J2xsIGhhdmUg dG8gbWFrZSBpdCBhY2Nlc3NpYmxlIG1hbnVhbGx5LCB0aGVuIGRpc2FibGUgYWNjZXNzIGFuZCBs ZXQgdmRzbSBkbyBpdCdzIGpvYi4gTXVjaCBlYXNpZXIgd2l0aCBORlMvR2x1c3RlciBvZiBjb3Vy c2UuDQoNCg0KDQpUaGFuayB5b3UsDQpWaXRhbHkgSXNhZXYNClNvZnR3YXJlIGVuZ2luZWVyDQpJ bmZvcm1hdGlvbiBzZWN1cml0eSBkZXBhcnRtZW50DQpGaW50ZWNoIEpTQywgTW9zY293LCBSdXNz aWENCg0KRnJvbTogRGFuIFlhc255IFttYWlsdG86ZHlhc255PG1haWx0bzpkeWFzbnk+QGdtYWls LmNvbTxodHRwOi8vZ21haWwuY29tPl0NClNlbnQ6IEZyaWRheSwgRGVjZW1iZXIgMDYsIDIwMTMg ODo1NiBQTQ0KVG86INCY0YHQsNC10LIg0JLQuNGC0LDQu9C40Lkg0JDQvdCw0YLQvtC70YzQtdCy 0LjRhw0KQ2M6IHVzZXJzQG92aXJ0Lm9yZzxtYWlsdG86dXNlcnNAb3ZpcnQub3JnPg0KU3ViamVj dDogUmU6IFtVc2Vyc10gb1ZpcnQgUHl0aG9uIFNESzogZ2V0dGluZyB0aGUgZnVsbCBmaWxlbmFt ZXMgb2YgZGlzayBpbWFnZXMNCg0KUHJvYmFibHkgbm90LCBidXQgeW91IGNhbg0KLSBnZXQgdGhl IGRpc2sgaW1hZ2UgVVVJRCAodGhhdCdzIHRoZSBuYW1lIGluIHRoZSBmaWxlc3lzdGVtIG9yIExW IG5hbWUpLA0KLSBnZXQgdGhlIFVVSUQgb2YgdGhlIHN0b3JhZ2UgZG9tYWluICh0aGF0IHdpbGwg YmUgdGhlIHRvcCBsZXZlbCBkaXIgbmFtZSBvciBWRyBuYW1lKQ0KLSBnZXQgdGhlIERDIFVVSUQg KHRoaXMgd2lsbCBiZSB0aGUgdG9wIGxldmVsIGRpciBuYW1lIGFuZCB0aGUgbW91bnQgcG9pbnQg Zm9yIExWTSkNCg0KVGhlbiBjb21wb3NlIHRoZSBwYXRoIG91dCBvZiB0aGVzZS4gS2VlcCBpbiBt aW5kIHRoYXQgdGhlIGRpc2sgVVVJRCB5b3UgZ2V0IGlzIHRoZSBsYXRlc3QgbGVhZiBpbiBhIHNu YXBzaG90IHRyZWUsIGFuZCBpZiB5b3UgbmVlZCB0aGUgZW50aXJlIGNoYWluIG9mIGltYWdlcywg eW91IG5lZWQgdG8gcmVjdXJzaXZlbHkgdHJhdmVyc2UgdGhlIHRyZWUgc3RhcnRpbmcgYXQgdGhl IGxlYWYsIHVzaW5nIHRoZSBQVVVJRCB0YWcgdG8gZmluZCB0aGUgcGFyZW50Lg0KDQpNaWdodCBi ZSBhIGJldHRlciB3YXksIGJ1dCBJJ20gbm90IGF3YXJlIG9mIGl0Lg0KDQpNb3Jlb3ZlciwgaWYg eW91IGV4cGxhaW4gd2h5IHlvdSBuZWVkIHRvIHRvdWNoIHRob3NlIGltYWdlcyBtYW51YWxseSBp bnN0ZWFkIG9mIGxldHRpbmcgb3ZpcnQgaGFuZGxlIGV2ZXJ5dGhpbmcsIHdlIG1pZ2h0IGJlIGFi bGUgdG8gc3VnZ2VzdCBhIGJldHRlciB3YXkNCg0KLS0NCkQNCg0KT24gV2VkLCBEZWMgNCwgMjAx MyBhdCAyOjM0IEFNLCDQmNGB0LDQtdCyINCS0LjRgtCw0LvQuNC5INCQ0L3QsNGC0L7Qu9GM0LXQ stC40YcgPGlzYWV2QGZpbnRlY2gucnU8bWFpbHRvOmlzYWV2QGZpbnRlY2gucnU+PiB3cm90ZToN CkRlYXIgb3ZpcnQtZW5naW5lIHVzZXJzLA0KDQpJIHdpbGwgYmUgYXBwcmVjaWF0ZWQgaWYgc29t ZW9uZSBleHBlcmllbmNlZCBpbiBvVmlydCBQeXRob24gU0RLIGNvdWxkIGFkdmljZSB0aGUgbWV0 aG9kIG9mIGdldHRpbmcgdGhlIGZ1bGwgZmlsZW5hbWUgb2YgdGhlIFZN4oCZcyBkaXNrIGltYWdl cyBpbiB0aGUgUkhFViBoeXBlcnZpc29y4oCZcyBmaWxlIHN5c3RlbS4gQ2FuIEkgZ2V0IGZpbGVu YW1lIHdpdGggYSBmdWxsIGZpbGUgc3lzdGVtIHBhdGggZnJvbSBhIG92aXJ0c2RrLmluZnJhc3Ry dWN0dXJlLmJyb2tlcnMuVk1EaXNrIGNsYXNzIGluc3RhbmNlPw0KDQpJZiBQeXRob24gU0RLICh3 aGF0IGlzIHByZWZmZXJlZCkgY2Fu4oCZdCBwcm92aWRlIHN1Y2ggYW4gaW5mb3JtYXRpb24sIG1h eSBiZSBpdCBpcyBzdGlsbCBwb3NzaWJsZSB3aXRoIFJIRVYtTSBSRVNUIEFQST8NCg0KVGhhbmsg eW91LA0KVml0YWx5IElzYWV2DQpTb2Z0d2FyZSBlbmdpbmVlcg0KSW5mb3JtYXRpb24gc2VjdXJp dHkgZGVwYXJ0bWVudA0KRmludGVjaCBKU0MsIE1vc2NvdywgUnVzc2lhDQoNCg0KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NClVzZXJzIG1haWxpbmcgbGlz dA0KVXNlcnNAb3ZpcnQub3JnPG1haWx0bzpVc2Vyc0BvdmlydC5vcmc+DQpodHRwOi8vbGlzdHMu b3ZpcnQub3JnL21haWxtYW4vbGlzdGluZm8vdXNlcnMNCg0KDQo= --_000_69303615BE133645963548DD4A3BFCB3C18738E2K7fintechru_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTQgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 Q2FsaWJyaTsNCglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJ e2ZvbnQtZmFtaWx5OlRhaG9tYTsNCglwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDt9DQov KiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1z b05vcm1hbA0KCXttYXJnaW46MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNp emU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7fQ0KYTps aW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6 Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29I eXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxl Ow0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KcA0KCXttc28tc3R5bGUtcHJpb3JpdHk6 OTk7DQoJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltc28t bWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsNCgltYXJnaW4tbGVmdDowY207DQoJZm9udC1zaXplOjEy LjBwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiO30NCnAuTXNvQWNl dGF0ZSwgbGkuTXNvQWNldGF0ZSwgZGl2Lk1zb0FjZXRhdGUNCgl7bXNvLXN0eWxlLXByaW9yaXR5 Ojk5Ow0KCW1zby1zdHlsZS1saW5rOiLQotC10LrRgdGCINCy0YvQvdC+0YHQutC4INCX0L3QsNC6 IjsNCgltYXJnaW46MGNtOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6OC4w cHQ7DQoJZm9udC1mYW1pbHk6IlRhaG9tYSIsInNhbnMtc2VyaWYiO30NCnNwYW4uRW1haWxTdHls ZTE4DQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5Ow0KCWZvbnQtZmFtaWx5OiJDYWxp YnJpIiwic2Fucy1zZXJpZiI7DQoJY29sb3I6IzFGNDk3RDt9DQpzcGFuLmENCgl7bXNvLXN0eWxl LW5hbWU6ItCi0LXQutGB0YIg0LLRi9C90L7RgdC60Lgg0JfQvdCw0LoiOw0KCW1zby1zdHlsZS1w cmlvcml0eTo5OTsNCgltc28tc3R5bGUtbGluazoi0KLQtdC60YHRgiDQstGL0L3QvtGB0LrQuCI7 DQoJZm9udC1mYW1pbHk6IlRhaG9tYSIsInNhbnMtc2VyaWYiOw0KCW1zby1mYXJlYXN0LWxhbmd1 YWdlOlJVO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0K CWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7DQoJbXNvLWZhcmVhc3QtbGFuZ3Vh Z2U6RU4tVVM7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6NjEyLjBwdCA3OTIuMHB0Ow0K CW1hcmdpbjoyLjBjbSA0Mi41cHQgMi4wY20gMy4wY207fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtw YWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0K PG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4NCjwveG1sPjwh W2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlvdXQgdjpleHQ9 ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8L286c2hhcGVsYXlv dXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJSVSIgbGluaz0iYmx1 ZSIgdmxpbms9InB1cnBsZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xv cjojMUY0OTdEIj5EYW4sIHRoYW5rIHlvdSBmb3IgYSBuaWNlIGFkdmljZS4gJm5ic3A7SSBoYXZl IGZvcmdvdHRlbiBhYm91dCBkb214bWwgcmljaCBvcHBvcnR1bml0aWVz4oCmPG86cD48L286cD48 L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxl PSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7 c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQt c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVvdDtzYW5zLXNl cmlmJnF1b3Q7O2NvbG9yOiMxRjQ5N0QiPlZpdGFseSBJc2FldjxvOnA+PC9vOnA+PC9zcGFuPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1z aXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2Vy aWYmcXVvdDs7Y29sb3I6Z3JheSI+U29mdHdhcmUgZW5naW5lZXI8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQt c2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OywmcXVvdDtzYW5zLXNl cmlmJnF1b3Q7O2NvbG9yOmdyYXkiPkluZm9ybWF0aW9uIHNlY3VyaXR5IGRlcGFydG1lbnQ8bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1V UyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7O2NvbG9yOmdyYXkiPkZpbnRlY2ggSlNDLCBNb3Njb3cs IFJ1c3NpYTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss JnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZx dW90OyI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7Ij4gRGFuIFlh c255IFttYWlsdG86ZHlhc255QGdtYWlsLmNvbV0NCjxicj4NCjxiPlNlbnQ6PC9iPiBNb25kYXks IERlY2VtYmVyIDA5LCAyMDEzIDg6MTQgUE08YnI+DQo8Yj5Ubzo8L2I+INCY0YHQsNC10LIg0JLQ uNGC0LDQu9C40Lkg0JDQvdCw0YLQvtC70YzQtdCy0LjRhzxicj4NCjxiPkNjOjwvYj4gdXNlcnNA b3ZpcnQub3JnPGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbVXNlcnNdIG9WaXJ0IFB5dGhvbiBT REs6IGdldHRpbmcgdGhlIGZ1bGwgZmlsZW5hbWVzIG9mIGRpc2sgaW1hZ2VzPG86cD48L286cD48 L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+UGxlYXNlIHNlZSByZXBseSBpbmxpbmU8bzpwPjwv bzpwPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRv bToxMi4wcHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPk9uIE1vbiwgRGVjIDksIDIwMTMgYXQgMTI6MDMgQU0sINCY0YHQsNC10LIg0JLQuNGC0LDQ u9C40Lkg0JDQvdCw0YLQvtC70YzQtdCy0LjRhyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmlzYWV2QGZp bnRlY2gucnUiIHRhcmdldD0iX2JsYW5rIj5pc2FldkBmaW50ZWNoLnJ1PC9hPiZndDsgd3JvdGU6 PG86cD48L286cD48L3A+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNw YW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj5IaSBE YW4sIGdsYWQgdG8gbWVldCB5b3UgYm90aCBvbiBMT1IgYW5kIGluIHRoaXMgbWFpbGluZyBsaXN0 IDopPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPkkga25vdywgSSdtIGV2ZXJ5d2hlcmUgOik8bzpwPjwvbzpwPjwvcD4N CjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9w Pg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29s aWQgI0NDQ0NDQyAxLjBwdDtwYWRkaW5nOjBjbSAwY20gMGNtIDYuMHB0O21hcmdpbi1sZWZ0OjQu OHB0O21hcmdpbi1yaWdodDowY20iPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFs IiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1 dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Y29sb3I6IzFGNDk3 RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHA+PHNwYW4gbGFuZz0iRU4tVVMiPlVu Zm9ydHVuYXRlbHkgb3ZpcnRzZGsuaW5mcmFzdHJ1Y3R1cmUuYnJva2Vycy4mbHQ7YW55dGhpbmcm Z3Q7IGNsYXNzZXMgaW5zdGFuY2VzIG1pc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpZ2hlciBv YmplY3RzIHZlcnkgb2Z0ZW4uIFRoZSB0eXBpY2FsIHNpdHVhdGlvbiBpcyByZXR1cm5pbmcgb2Yg ZW1wdHkgc3RyaW5nIHdoZW4gd2UgYXNrIHNvbWV0aGluZyBhYm91dCB0aGUgcGFyZW50IGZyb20g dGhlIGNoaWxkIG9iamVjdA0KICgmcXVvdDtjaGlsZCZxdW90OyBhbmQgJnF1b3Q7cGFyZW50JnF1 b3Q7IGluIHRlcm1zIFJlZCBIYXQgRW50ZXJwcmlzZSBWaXJ0dWFsaXphdGlvbiBvYmplY3RzIGhp ZXJhcmNoeSkuIENvbnNpZGVyIHRoaXMgUHl0aG9uIGNvZGU6PC9zcGFuPjxvOnA+PC9vOnA+PC9w Pg0KPHA+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxw PjxzcGFuIGxhbmc9IkVOLVVTIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZnJv bSBvdmlydHNkay5hcGkgaW1wb3J0IEFQSTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwPjxzcGFu IGxhbmc9IkVOLVVTIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZnJvbSBvdmly dHNkay54bWwgaW1wb3J0IHBhcmFtczwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwPjxzcGFuIGxh bmc9IkVOLVVTIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLi4uPC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPHA+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyBhcGkgPSBBUEkoLi4uKTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwPjxz cGFuIGxhbmc9IkVOLVVTIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZCA9IGFw aS52bXMubGlzdCgpW2ldLmdldF9kaXNrcygpLmxpc3QoKVtpXSAmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICMgb3ZpcnRzZGsuaW5mcmFzdHJ1Y3R1cmUu YnJva2Vycy5WTURpc2sgY2xhc3MgaW5zdGFuY2UsIGkg4oCTIGFueSBudW1iZXIgaW4gcmFuZ2Uo YXBpLnZtcy5saXN0KCkuX19sZW5fXygpKTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwPjxzcGFu IGxhbmc9IkVOLVVTIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcyA9IGQuZ2V0 X3N0b3JhZ2VfZG9tYWlucygpLmdldF9zdG9yYWdlX2RvbWFpbigpWzBdICZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAjIG92aXJ0c2RrLmluZnJhc3RydWN0dXJlLnBhcmFtcy5TdG9yYWdlRG9tYWluIGNsYXNzIGlu c3RhbmNlPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHA+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB0ID0gcy5nZXRfZGF0YV9jZW50ZXIoKSZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAjIE5vbmVUeXBlPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHA+PHNwYW4gbGFuZz0iRU4tVVMi PiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwPjxzcGFuIGxhbmc9IkVOLVVTIj5TbyB5 b3UgY2FuIHNlZSB0aGF0IHRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBoZXJlLiA8L3NwYW4+ DQo8bzpwPjwvbzpwPjwvcD4NCjxwPjxzcGFuIGxhbmc9IkVOLVVTIj4mbmJzcDs8L3NwYW4+PG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+SSBob3BlIE1pY2hhZWwgb3IgSXRhbWFyIGNhbiBzaGVkIHNvbWUg bW9yZSBsaWdodCBvbiB0aGlzIHBhcnQsIEkgZG9uJ3QgaGF2ZSBhIHN5c3RlbSBpbiBmcm9udCBv ZiBtZSB0byBjaGVjay4gQUZBSVIgc29tZSBvYmplY3RzIGFyZW4ndCBsaW5rZWQgZGlyZWN0bHkg YW5kIHlvdSBzaW1wbHkgbmVlZCB0byBrbm93IGhvdyB0byBnZXQgdG8gdGhlbSwgSSd2ZSBoYWQg cGxlbnR5IG9mIGhlbHAgZnJvbSBNaWNoYWVsDQogYmVmb3JlLCB3aGVuIEkgd2FzIHJ1bm5pbmcg YSBzZWVtaW5nbHkgY29ycmVjdCBzY3JpcHQsIGFuZCBnZXR0aW5nIG5vIGRhdGEsIHNpbXBseSBi ZWNhdXNlIEkgZGlkbid0IHVuZGVyc3RhbmQgdGhlIHdheSB0aGUgQVBJIGxvb2tzIGZvciBvYmpl Y3RzIGFuZCByZWxhdGlvbnNoaXBzLjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1 b3RlIHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3Bh ZGRpbmc6MGNtIDBjbSAwY20gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXJpZ2h0OjBj bSI+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2lu LXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4t VVMiIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj5PdXIgcHVycG9zZSBpcyBj aGVja2luZyB0aGUgVk3igJlzIGRpc2sgaW1hZ2UgaW50ZWdyaXR5IChJIG1lYW4gaW50ZWdyaXR5 IG9mIHN5c3RlbSBmaWxlcywNCiBzdG9yZWQgaW4gL2Jvb3QsIC9iaW4sIC9zYmluLCAvbGliIGV0 Yy4pIGV2ZXJ5IHRpbWUgdGhlIFZNIHN0YXJ0cy4gVGhlIGludGVncml0eSBjaGVja2luZyBzY3Jp cHQgaXMgd3JpdHRlbiBpbiBQeXRob24gYW5kIHJlbGllcyBvbiBsaWJndWVzdGZzIGFuZCB2ZHNt IGhvb2tzLiBTcGVjaWZpYyB2ZHNtIGhvb2sgcnVucyBvdXIgc2NyaXB0IGFuZCBibG9jayB0aGUg Vk3igJlzIGJvb3QgcHJvY2VzcyB1bnRpbCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHN5c3RlbQ0K IGZpbGVzIGhhc2ggc3VtcyB3aWxsIGJlIGNoZWNrZWQuIEJ1dCBsaWJndWVzdGZzIHJlcXVpcmVz IHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpc2sgdG8gYmUgaGFuZGxlZCwgYW5kIGl04oCZcyBub3Qg aW50ZWdyYXRlZCB3aXRoIG92aXJ0IGluZnJhc3RydWN0dXJlLiBBbmQgaGVyZSB3ZSBmYWNlIHdp dGggYSB0YXNrIG9mIGZ1bGwgZGlzayBpbWFnZSBmaWxlbmFtZXMgZGVmaW5pdGlvbi48L3NwYW4+ PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+SSBhc3N1bWUgeW91IGFyZSB1c2luZyBiZWZvcmVfdm1fc3Rh cnQ/IFRoaXMgd2lsbCBjYXRjaCB0aGUgVk0gZGVmaW5pdGlvbnMsIGFzIHBhc3NlZCBieSB0aGUg ZW5naW5lLCBhbmQgYWxsb3cgeW91IHRvIHJlYXNzZW1ibGUgdGhlIGRvbXhtbC4gWW91IGNhbiBn ZXQgdGhlIGRpc2sgcGF0aCBmcm9tIHRoZSBkb214bWwgZGlyZWN0bHksIGJ5cGFzc2luZyB0aGUg ZW5naW5lIEFQSXMgY29tcGxldGVseS4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRoZSBwcm9ibGVtIGhvd2V2ZXIsIGlmIHlvdSBhcmUg ZG9pbmcgdGhpcyBvbiBibG9jayBzdG9yYWdlLCBpcyB0aGF0IHRoZSByaWdodCBMViB3aWxsIG5v dCBiZSBwcmVwYXJlZCBmb3IgdXNlIGJ5IHZkc20gYXQgdGhpcyBwb2ludCwgc28geW91J2xsIGhh dmUgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIG1hbnVhbGx5LCB0aGVuIGRpc2FibGUgYWNjZXNzIGFu ZCBsZXQgdmRzbSBkbyBpdCdzIGpvYi4gTXVjaCBlYXNpZXINCiB3aXRoIE5GUy9HbHVzdGVyIG9m IGNvdXJzZS48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJi b3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCAjQ0NDQ0NDIDEuMHB0O3BhZGRpbmc6MGNtIDBj bSAwY20gNi4wcHQ7bWFyZ2luLWxlZnQ6NC44cHQ7bWFyZ2luLXJpZ2h0OjBjbSI+DQo8ZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0 bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fu cy1zZXJpZiZxdW90Oztjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNv LW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2Vy aWYmcXVvdDs7Y29sb3I6IzFGNDk3RCI+VGhhbmsgeW91LDwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28t bWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNp emU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssJnF1b3Q7c2Fucy1zZXJp ZiZxdW90Oztjb2xvcjojMUY0OTdEIj5WaXRhbHkgSXNhZXY8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNv LW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1z aXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2Vy aWYmcXVvdDs7Y29sb3I6Z3JheSI+U29mdHdhcmUgZW5naW5lZXI8L3NwYW4+PG86cD48L286cD48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87 bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9u dC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMt c2VyaWYmcXVvdDs7Y29sb3I6Z3JheSI+SW5mb3JtYXRpb24gc2VjdXJpdHkgZGVwYXJ0bWVudDwv c3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFy Z2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0i RU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjpncmF5Ij5GaW50ZWNoIEpTQywgTW9z Y293LCBSdXNzaWE8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8i PjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTom cXVvdDtDYWxpYnJpJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Y29sb3I6IzFGNDk3RCI+ Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj48Yj48 c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7VGFob21hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDsiPkZyb206PC9zcGFuPjwvYj48 c3BhbiBsYW5nPSJFTi1VUyIgc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7VGFob21hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDsiPiBEYW4NCiBZYXNueSBbbWFp bHRvOjxhIGhyZWY9Im1haWx0bzpkeWFzbnkiIHRhcmdldD0iX2JsYW5rIj5keWFzbnk8L2E+PC9z cGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9t YSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7Ij5APGEgaHJlZj0iaHR0cDovL2dtYWlsLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPmdtYWlsLmNvbTwvYT5dDQo8YnI+DQo8Yj5TZW50OjwvYj4gRnJp ZGF5LCBEZWNlbWJlciAwNiwgMjAxMyA4OjU2IFBNPGJyPg0KPGI+VG86PC9iPiDQmNGB0LDQtdCy INCS0LjRgtCw0LvQuNC5INCQ0L3QsNGC0L7Qu9GM0LXQstC40Yc8YnI+DQo8Yj5DYzo8L2I+IDxh IGhyZWY9Im1haWx0bzp1c2Vyc0BvdmlydC5vcmciIHRhcmdldD0iX2JsYW5rIj51c2Vyc0Bvdmly dC5vcmc8L2E+PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbVXNlcnNdIG9WaXJ0IFB5dGhvbiBT REs6IGdldHRpbmcgdGhlIGZ1bGwgZmlsZW5hbWVzIG9mIGRpc2sgaW1hZ2VzPC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFs dDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1 dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPlByb2JhYmx5IG5vdCwgYnV0IHlvdSBjYW4m bmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPi0gZ2V0 IHRoZSBkaXNrIGltYWdlIFVVSUQgKHRoYXQncyB0aGUgbmFtZSBpbiB0aGUgZmlsZXN5c3RlbSBv ciBMViBuYW1lKSwmbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0 OmF1dG8iPi0gZ2V0IHRoZSBVVUlEIG9mIHRoZSBzdG9yYWdlIGRvbWFpbiAodGhhdCB3aWxsIGJl IHRoZSB0b3AgbGV2ZWwgZGlyIG5hbWUgb3IgVkcgbmFtZSkmbmJzcDs8bzpwPjwvbzpwPjwvcD4N CjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1t YXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4tIGdldCB0aGUg REMgVVVJRCAodGhpcyB3aWxsIGJlIHRoZSB0b3AgbGV2ZWwgZGlyIG5hbWUgYW5kIHRoZSBtb3Vu dCBwb2ludCBmb3IgTFZNKTxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90 dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2lu LWJvdHRvbS1hbHQ6YXV0byI+VGhlbiBjb21wb3NlIHRoZSBwYXRoIG91dCBvZiB0aGVzZS4gS2Vl cCBpbiBtaW5kIHRoYXQgdGhlIGRpc2sgVVVJRCB5b3UgZ2V0IGlzIHRoZSBsYXRlc3QgbGVhZiBp biBhIHNuYXBzaG90IHRyZWUsIGFuZCBpZiB5b3UgbmVlZCB0aGUgZW50aXJlIGNoYWluIG9mIGlt YWdlcywgeW91IG5lZWQgdG8gcmVjdXJzaXZlbHkNCiB0cmF2ZXJzZSB0aGUgdHJlZSBzdGFydGlu ZyBhdCB0aGUgbGVhZiwgdXNpbmcgdGhlIFBVVUlEIHRhZyB0byBmaW5kIHRoZSBwYXJlbnQuPG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPiZuYnNw OzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj5N aWdodCBiZSBhIGJldHRlciB3YXksIGJ1dCBJJ20gbm90IGF3YXJlIG9mIGl0LjxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJn aW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJzcDs8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28t bWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+TW9yZW92ZXIs IGlmIHlvdSBleHBsYWluIHdoeSB5b3UgbmVlZCB0byB0b3VjaCB0aG9zZSBpbWFnZXMgbWFudWFs bHkgaW5zdGVhZCBvZiBsZXR0aW5nIG92aXJ0IGhhbmRsZSBldmVyeXRoaW5nLCB3ZSBtaWdodCBi ZSBhYmxlIHRvIHN1Z2dlc3QgYSBiZXR0ZXIgd2F5PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87 bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDph dXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4tLTxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDph dXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj5EPG86cD48L286cD48L3A+DQo8L2Rpdj4N CjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRv cC1hbHQ6YXV0bzttYXJnaW4tYm90dG9tOjEyLjBwdCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRv O21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj5PbiBXZWQsIERlYyA0LCAyMDEzIGF0IDI6MzQg QU0sINCY0YHQsNC10LIg0JLQuNGC0LDQu9C40Lkg0JDQvdCw0YLQvtC70YzQtdCy0LjRhyAmbHQ7 PGEgaHJlZj0ibWFpbHRvOmlzYWV2QGZpbnRlY2gucnUiIHRhcmdldD0iX2JsYW5rIj5pc2FldkBm aW50ZWNoLnJ1PC9hPiZndDsgd3JvdGU6PG86cD48L286cD48L3A+DQo8ZGl2Pg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFy Z2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPkRlYXIgb3ZpcnQtZW5naW5l IHVzZXJzLA0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj48 c3BhbiBsYW5nPSJFTi1VUyI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCIgc3R5bGU9Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90 dG9tLWFsdDphdXRvIj48c3BhbiBsYW5nPSJFTi1VUyI+SSB3aWxsIGJlIGFwcHJlY2lhdGVkIGlm IHNvbWVvbmUgZXhwZXJpZW5jZWQgaW4gb1ZpcnQgUHl0aG9uIFNESyBjb3VsZCBhZHZpY2UgdGhl IG1ldGhvZCBvZiBnZXR0aW5nIHRoZSBmdWxsIGZpbGVuYW1lIG9mIHRoZSBWTeKAmXMgZGlzayBp bWFnZXMgaW4gdGhlIFJIRVYgaHlwZXJ2aXNvcuKAmXMNCiBmaWxlIHN5c3RlbS4gQ2FuIEkgZ2V0 IGZpbGVuYW1lIHdpdGggYSBmdWxsIGZpbGUgc3lzdGVtIHBhdGggZnJvbSBhIG92aXJ0c2RrLmlu ZnJhc3RydWN0dXJlLmJyb2tlcnMuVk1EaXNrIGNsYXNzIGluc3RhbmNlPzwvc3Bhbj48bzpwPjwv bzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6 YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNw Ozwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28t bWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFu Zz0iRU4tVVMiPklmIFB5dGhvbiBTREsgKHdoYXQgaXMgcHJlZmZlcmVkKSBjYW7igJl0IHByb3Zp ZGUgc3VjaCBhbiBpbmZvcm1hdGlvbiwgbWF5IGJlIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHdpdGgg UkhFVi1NIFJFU1QgQVBJPzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6 YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttc28tbWFy Z2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiPlRoYW5rIHlvdSwNCjwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2lu LXRvcC1hbHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4t VVMiIHN0eWxlPSJmb250LXNpemU6MTAuMHB0Ij5WaXRhbHkgSXNhZXY8L3NwYW4+PG86cD48L286 cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1 dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxzcGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0i Zm9udC1zaXplOjEwLjBwdDtjb2xvcjpncmF5Ij5Tb2Z0d2FyZSBlbmdpbmVlcjwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1h bHQ6YXV0bzttc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0byI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0 eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9yOmdyYXkiPkluZm9ybWF0aW9uIHNlY3VyaXR5IGRl cGFydG1lbnQ8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG8iPjxz cGFuIGxhbmc9IkVOLVVTIiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtjb2xvcjpncmF5Ij5GaW50 ZWNoIEpTQywgTW9zY293LCBSdXNzaWE8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibXNvLW1hcmdpbi10b3AtYWx0OmF1dG87bXNvLW1hcmdpbi1ib3R0 b20tYWx0OmF1dG8iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzttYXJnaW4tYm90 dG9tOjEyLjBwdCI+PGJyPg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX188YnI+DQpVc2VycyBtYWlsaW5nIGxpc3Q8YnI+DQo8YSBocmVmPSJtYWlsdG86VXNl cnNAb3ZpcnQub3JnIiB0YXJnZXQ9Il9ibGFuayI+VXNlcnNAb3ZpcnQub3JnPC9hPjxicj4NCjxh IGhyZWY9Imh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby91c2VycyIgdGFy Z2V0PSJfYmxhbmsiPmh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby91c2Vy czwvYT48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1zby1tYXJnaW4tdG9wLWFsdDphdXRvO21zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvIj4mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4N CjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rp dj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --_000_69303615BE133645963548DD4A3BFCB3C18738E2K7fintechru_--

Just make sure you are not changing anything that might cause a splitbrain between the engine database and the actual image set on the storage, those are usually tricky to debug and fix On Thu, Dec 12, 2013 at 4:32 AM, Исаев Виталий Анатольевич <isaev@fintech.ru
wrote:
Dan, thank you for a nice advice. I have forgotten about domxml rich opportunities…
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
*From:* Dan Yasny [mailto:dyasny@gmail.com] *Sent:* Monday, December 09, 2013 8:14 PM
*To:* Исаев Виталий Анатольевич *Cc:* users@ovirt.org *Subject:* Re: [Users] oVirt Python SDK: getting the full filenames of disk images
Please see reply inline
On Mon, Dec 9, 2013 at 12:03 AM, Исаев Виталий Анатольевич < isaev@fintech.ru> wrote:
Hi Dan, glad to meet you both on LOR and in this mailing list :)
I know, I'm everywhere :)
Unfortunately ovirtsdk.infrastructure.brokers.<anything> classes instances miss information about the higher objects very often. The typical situation is returning of empty string when we ask something about the parent from the child object ("child" and "parent" in terms Red Hat Enterprise Virtualization objects hierarchy). Consider this Python code:
from ovirtsdk.api import API
from ovirtsdk.xml import params
...
api = API(...)
d = api.vms.list()[i].get_disks().list()[i] # ovirtsdk.infrastructure.brokers.VMDisk class instance, i – any number in range(api.vms.list().__len__())
s = d.get_storage_domains().get_storage_domain()[0] # ovirtsdk.infrastructure.params.StorageDomain class instance
t = s.get_data_center() # NoneType
So you can see that this approach does not work here.
I hope Michael or Itamar can shed some more light on this part, I don't have a system in front of me to check. AFAIR some objects aren't linked directly and you simply need to know how to get to them, I've had plenty of help from Michael before, when I was running a seemingly correct script, and getting no data, simply because I didn't understand the way the API looks for objects and relationships.
Our purpose is checking the VM’s disk image integrity (I mean integrity of system files, stored in /boot, /bin, /sbin, /lib etc.) every time the VM starts. The integrity checking script is written in Python and relies on libguestfs and vdsm hooks. Specific vdsm hook runs our script and block the VM’s boot process until the correctness of the system files hash sums will be checked. But libguestfs requires the full path to the disk to be handled, and it’s not integrated with ovirt infrastructure. And here we face with a task of full disk image filenames definition.
I assume you are using before_vm_start? This will catch the VM definitions, as passed by the engine, and allow you to reassemble the domxml. You can get the disk path from the domxml directly, bypassing the engine APIs completely.
The problem however, if you are doing this on block storage, is that the right LV will not be prepared for use by vdsm at this point, so you'll have to make it accessible manually, then disable access and let vdsm do it's job. Much easier with NFS/Gluster of course.
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
*From:* Dan Yasny [mailto:dyasny@gmail.com] *Sent:* Friday, December 06, 2013 8:56 PM *To:* Исаев Виталий Анатольевич *Cc:* users@ovirt.org *Subject:* Re: [Users] oVirt Python SDK: getting the full filenames of disk images
Probably not, but you can
- get the disk image UUID (that's the name in the filesystem or LV name),
- get the UUID of the storage domain (that will be the top level dir name or VG name)
- get the DC UUID (this will be the top level dir name and the mount point for LVM)
Then compose the path out of these. Keep in mind that the disk UUID you get is the latest leaf in a snapshot tree, and if you need the entire chain of images, you need to recursively traverse the tree starting at the leaf, using the PUUID tag to find the parent.
Might be a better way, but I'm not aware of it.
Moreover, if you explain why you need to touch those images manually instead of letting ovirt handle everything, we might be able to suggest a better way
--
D
On Wed, Dec 4, 2013 at 2:34 AM, Исаев Виталий Анатольевич < isaev@fintech.ru> wrote:
Dear ovirt-engine users,
I will be appreciated if someone experienced in oVirt Python SDK could advice the method of getting the full filename of the VM’s disk images in the RHEV hypervisor’s file system. Can I get filename with a full file system path from a ovirtsdk.infrastructure.brokers.VMDisk class instance?
If Python SDK (what is preffered) can’t provide such an information, may be it is still possible with RHEV-M REST API?
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users

On 12/04/2013 11:34 AM, Исаев Виталий Анатольевич wrote:
Dear ovirt-engine users,
I will be appreciated if someone experienced in oVirt Python SDK could advice the method of getting the full filename of the VM’s disk images in the RHEV hypervisor’s file system. Can I get filename with a full file system path from a ovirtsdk.infrastructure.brokers.VMDisk class instance?
If Python SDK (what is preffered) can’t provide such an information, may be it is still possible with RHEV-M REST API?
Thank you,
Vitaly Isaev
Software engineer
Information security department
Fintech JSC, Moscow, Russia
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users
its supposed to be an internal detail at that level (for example, it changed location in 3.3). I think at vdsm hook level its more inline with exepctation is will be used. may i ask what you are trying to do?
participants (3)
-
Dan Yasny
-
Itamar Heim
-
Исаев Виталий Анатольевич