PGh0bWw+DQo8aGVhZD4NCiAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSIiPg0KICA8dGl0bGU+V3JpdGluZyB5b3VyIE93biBBeGlzMiBNb2R1bGU8L3RpdGxlPg0KICA8bGluayBocmVmPSIuLi9jc3MvYXhpcy1kb2NzLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgLz4NCjwvaGVhZD4NCg0KPGJvZHkgZGlyPSJsdHIiIGxhbmc9ImVuLVVTIj4NCg0KPGEgbmFtZT0iTW9kdWxlcyI+PC9hPg0KPGgxPjwvYT5Xcml0aW5nIHlvdXIgT3duIEF4aXMyIE1vZHVsZTwvaDE+DQoNCjxwPkF4aXMyIHByb3ZpZGVzIGV4dGVuZGVkIHN1cHBvcnQgZm9yIG1vZHVsZXMgKFNlZSA8YQ0KaHJlZj0iQXhpczJBcmNoaXRlY3R1cmVHdWlkZS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+QXJjaGl0ZWN0dXJlIEd1aWRlPC9hPiBmb3INCm1vcmUgZGV0YWlscyBhYm91dCBtb2R1bGVzIGluIEF4aXMyKS4gTGV0J3MgY3JlYXRlIGEgY3VzdG9tIG1vZHVsZSBhbmQgZGVwbG95DQppdCB0byBNeVNlcnZpY2Ugd2hpY2ggd2UgY3JlYXRlZCBlYXJsaWVyLjwvcD4NCg0KPHA+PGk+U2VuZCB5b3VyIGZlZWRiYWNrIG9yIHF1ZXN0aW9ucyB0bzogPGENCmhyZWY9Im1haWx0bzpheGlzLWRldkB3cy5hcGFjaGUub3JnIj5heGlzLWRldkB3cy5hcGFjaGUub3JnPC9hPjwvaT4uIFByZWZpeA0Kc3ViamVjdCB3aXRoIFtBeGlzMl0uIFRvIHN1YnNjcmliZSB0byBtYWlsaW5nIGxpc3Qgc2VlIDxhDQpocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzMi9tYWlsLWxpc3RzLmh0bWwiPmhlcmUuPC9hPjwvcD4NCg0KPGgyPkNvbnRlbnQgTGlzdDwvaDI+DQo8dWw+DQogIDxsaT48YSBocmVmPSIjTXlTZXJ2aWNlX3dpdGhfYV9Mb2dnaW5nX01vZHVsZSI+TXlTZXJ2aWNlIHdpdGggYSBMb2dnaW5nIE1vZHVsZTwvYT48L2xpPg0KICA8dWw+DQogICAgICA8bGk+PGEgaHJlZj0iI1N0ZXAxXzpfTG9nZ2luZ01vZHVsZV9DbGFzcyI+U3RlcDEgOiBMb2dnaW5nTW9kdWxlIENsYXNzPC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI1N0ZXAyXzpfTG9nSGFuZGxlciI+U3RlcDIgOiBMb2dIYW5kbGVyPC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI1N0ZXAzXzpfbW9kdWxlX3htbCI+U3RlcDMgOiBtb2R1bGUueG1sPC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI1N0ZXBfNDpfTW9kaWZ5X3RoZV8mIzM0O2F4aXMyX3htbCYjMzQ7Ij5TdGVwIDQ6IE1vZGlmeSB0aGUgImF4aXMyLnhtbCI8L2E+PC9saT4NCiAgICAgIDxsaT48YSBocmVmPSIjU3RlcDVfOl9Nb2RpZnlfdGhlXyYjMzQ7c2VydmljZXNfeG1sJiMzNDsiPlN0ZXA1IDogTW9kaWZ5IHRoZSAic2VydmljZXMueG1sPC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI1N0ZXA2XzpfUGFja2FnaW5nIj5TdGVwNiA6IFBhY2thZ2luZzwvYT48L2xpPg0KICAgICAgPGxpPjxhIGhyZWY9IiNTdGVwN186X0RlcGxveV90aGVfTW9kdWxlX2luX0F4aXMyIj5TdGVwNyA6IERlcGxveSB0aGUgTW9kdWxlIGluIEF4aXMyPC9hPjwvbGk+DQogIDwvdWw+DQo8L3VsPg0KDQoNCjxwPkZvbGxvd2luZyBzdGVwcyBzaG93IHRoZSBhY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgdG8gZGVwbG95IGENCmN1c3RvbSBtb2R1bGUgZm9yIGEgZ2l2ZW4gV2ViIHNlcnZpY2U6PC9wPg0KPG9sPg0KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbiI+Q3JlYXRlIHRoZSBNb2R1bGUgSW1wbGVtZW50YXRpb248L3A+DQogIDwvbGk+DQogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluIj5DcmVhdGUgdGhlIEhhbmRsZXJzPC9wPg0KICA8L2xpPg0KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbiI+Q3JlYXRlIHRoZSBtb2R1bGUueG1sPC9wPg0KICA8L2xpPg0KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbiI+TW9kaWZ5IHRoZSAiYXhpczIueG1sIiAoaWYgeW91IG5lZWQNCiAgICBjdXN0b20gcGhhc2VzKTwvcD4NCiAgPC9saT4NCiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPk1vZGlmeSB0aGUgInNlcnZpY2VzLnhtbCIgdG8gZW5nYWdlDQogICAgbW9kdWxlcyBhdCB0aGUgZGVwbG95bWVudCB0aW1lLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPlBhY2thZ2UgaW4gYSAiLm1hciIgKE1vZHVsZSBBcmNoaXZlKTwvcD4NCiAgPC9saT4NCiAgPGxpPjxwPkRlcGxveSB0aGUgbW9kdWxlIGluIEF4aXMyPC9wPg0KICA8L2xpPg0KPC9vbD4NCg0KPGEgbmFtZT0iTXlTZXJ2aWNlX3dpdGhfYV9Mb2dnaW5nX01vZHVsZSI+PC9hPg0KPGgzPk15U2VydmljZSB3aXRoIGEgTG9nZ2luZyBNb2R1bGU8L2gzPg0KDQo8cD5MZXQncyB3cml0ZSBhIHNpbXBsZSBsb2dnaW5nIG1vZHVsZSBmb3Igb3VyIHNhbXBsZSBsb2NhdGVkIGF0DQo8Yj4ic2FtcGxlc1x1c2VyZ3VpZGVcc3JjIjwvYj4gZGlyZWN0b3J5IG9mIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLiBUaGlzDQptb2R1bGUgY29udGFpbnMgb25lIGhhbmRsZXIgdGhhdCBqdXN0IGxvZ3MgdGhlIG1lc3NhZ2UgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaA0KaXQuIEF4aXMyIHVzZXMgIi5tYXIiIChNb2R1bGUgQXJjaGl2ZSkgdG8gZGVwbG95IG1vZHVsZXMgaW4gQXhpczIuIEZvbGxvd2luZw0KZGlhZ3JhbSBzaG93cyB0aGUgZmlsZSBzdHJ1Y3R1cmUgaW5zaWRlIHdoaWNoIG5lZWRzIHRvIGJlIHRoZXJlIGluIHRoZSAiLm1hciINCmFyY2hpdmUuIExldCdzIGNyZWF0ZSBhbGwgdGhlc2UgYW5kIHNlZSBob3cgaXQgd29ya3MuPC9wPg0KDQo8cD48aW1nIHNyYz0iaW1hZ2VzL3VzZXJndWlkZS9Nb2R1bGVWaWV3LmpwZyIgbmFtZT0iR3JhcGhpYzUiIGFsaWduPSJib3R0b20iDQpib3JkZXI9IjAiPjwvcD4NCg0KPGEgbmFtZT0iU3RlcDFfOl9Mb2dnaW5nTW9kdWxlX0NsYXNzIj48L2E+DQo8aDQ+U3RlcDEgOiBMb2dnaW5nTW9kdWxlIENsYXNzPC9oND4NCg0KPHA+TG9nZ2luZ01vZHVsZSBpcyB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIEF4aXMyIG1vZHVsZS4gQXhpczINCm1vZHVsZXMgc2hvdWxkIGltcGxlbWVudCB0aGUgIjxhDQpocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2kvd2Vic2VydmljZXMvYXhpczIvdHJ1bmsvamF2YS9tb2R1bGVzL2NvcmUvc3JjL29yZy9hcGFjaGUvYXhpczIvbW9kdWxlcy9Nb2R1bGUuamF2YT9yZXY9Mzk2Nzg1JmFtcDt2aWV3PWxvZyI+b3JnLmFwYWNoZS5heGlzMi5tb2R1bGVzLk1vZHVsZTwvYT4iDQppbnRlcmZhY2Ugd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuPC9wPg0KPHByZT5wdWJsaWMgdm9pZCBpbml0KENvbmZpZ3VyYXRpb25Db250ZXh0IGNvbmZpZ0NvbnRleHQsIEF4aXNNb2R1bGUgbW9kdWxlKSB0aHJvd3MgQXhpc0ZhdWx0Oy8vSW5pdGlhbGl6ZSB0aGUgbW9kdWxlDQpwdWJsaWMgdm9pZCBzaHV0ZG93bihDb25maWd1cmF0aW9uQ29udGV4dCBjb25maWd1cmF0aW9uQ29udGV4dCkgdGhyb3dzIEF4aXNGYXVsdDsvL0VuZCBvZiBtb2R1bGUgcHJvY2Vzc2luZw0KcHVibGljIHZvaWQgZW5nYWdlTm90aWZ5KEF4aXNEZXNjcmlwdGlvbiBheGlzRGVzY3JpcHRpb24pIHRocm93cyBBeGlzRmF1bHQ7DQpwdWJsaWMgU3RyaW5nW10gZ2V0UG9saWN5TmFtZXNwYWNlcygpIHRocm93cyBBeGlzRmF1bHQ7DQpwdWJsaWMgdm9pZCBhcHBseVBvbGljeShQb2xpY3kgcG9saWN5LCBBeGlzRGVzY3JpcHRpb24gYXhpc0Rlc2NyaXB0aW9uKSB0aHJvd3MgQXhpc0ZhdWx0IDsNCnB1YmxpYyBib29sZWFuIGNhblN1cHBvcnRBc3NlcnRpb24oQXNzZXJ0aW9uIGFzc2VydGlvbikgOw0KPC9wcmU+DQoNCjxwPkZpcnQgdGhyZWUgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIHRoZQ0KdGVybWluYXRpb24gLCBhbmQgdGhlIG5leHQgdGhyZWUgbWV0aG9kcyBhcmUgdXNlZCB0byBwZXJmb3JtIHBvbGljeSByZWxhdGVkIHN0dWZmDQpXaXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXIgQXhpc0NvbmZpZ3VyYXRpb24sIHRoZSB1c2VyIGlzIHByb3ZpZGVkDQp3aXRoIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gVGhpcyBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlDQptb2R1bGUgYmVoYXZpb3IgYnkgdGhlIG1vZHVsZSB3cml0ZXJzLiBGb3IgdGhlIHNpbXBsZSBsb2dnaW5nIHNlcnZpY2Ugd2UgY2FuDQprZWVwIHRoZXNlIG1ldGhvZHMgYmxhbmsgaW4gb3VyIGltcGxlbWVudGF0aW9uIGNsYXNzLjwvcD4NCg0KPGEgbmFtZT0iU3RlcDJfOl9Mb2dIYW5kbGVyIj48L2E+DQo8aDQ+U3RlcDIgOiBMb2dIYW5kbGVyPC9oND4NCg0KPHA+QSBtb2R1bGUgaW4gQXhpczIgY2FuIGNvbnRhaW4sIG9uZSBvciBtb3JlIGhhbmRsZXJzIHRoYXQgcGVyZm9ybSB2YXJpb3VzDQpTT0FQIGhlYWRlciBwcm9jZXNzaW5nIGF0IGRpZmZlcmVudCBwaGFzZXMuIChTZWU8YQ0KaHJlZj0iQXhpczJBcmNoaXRlY3R1cmVHdWlkZS5odG1sI2luY29taW5nc29hcCIgdGFyZ2V0PSJfYmxhbmsiPiBBcmNoaXRlY3R1cmUNCkd1aWRlPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwaGFzZXMpLiBUbyB3cml0ZSBhIGhhbmRsZXIgb25lIHNob3VsZA0KaW1wbGVtZW50IDxhDQpocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld2N2cy5jZ2kvd2Vic2VydmljZXMvYXhpczIvdHJ1bmsvamF2YS9tb2R1bGVzL2NvcmUvc3JjL29yZy9hcGFjaGUvYXhpczIvZW5naW5lL0hhbmRsZXIuamF2YT9yZXY9MzU3MTg3JmFtcDt2aWV3PWxvZyI+b3JnLmFwYWNoZS5heGlzMi5lbmdpbmUuSGFuZGxlcjwvYT4uDQpCdXQgZm9yIGNvbnZlbmllbmNlLCA8YQ0KaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpL3dlYnNlcnZpY2VzL2F4aXMyL3RydW5rL2phdmEvbW9kdWxlcy9jb3JlL3NyYy9vcmcvYXBhY2hlL2F4aXMyL2hhbmRsZXJzL0Fic3RyYWN0SGFuZGxlci5qYXZhP3Jldj0zOTY3ODgmYW1wO3ZpZXc9bG9nIj5vcmcuYXBhY2hlLmF4aXMyLmhhbmRsZXJzLkFic3RyYWN0SGFuZGxlcjwvYT4NCnByb3ZpZGVzIGFuIGFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBIYW5kbGVyIGludGVyZmFjZS48L3A+DQoNCjxwPkZvciB0aGUgbG9nZ2luZyBtb2R1bGUgd2Ugd2lsbCB3cml0ZSBhIGhhbmRsZXIgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuDQoicHVibGljIHZvaWQgaW52b2tlKE1lc3NhZ2VDb250ZXh0IGN0eCk7IiBpcyB0aGUgbWV0aG9kIHRoYXQgaXMgY2FsbGVkIGJ5DQpBeGlzMiBlbmdpbmUgd2hlbiB0aGUgY29udHJvbCBpcyBwYXNzZWQgdG8gdGhlIGhhbmRsZXIuICJwdWJsaWMgdm9pZA0KcmV2b2tlKE1lc3NhZ2VDb250ZXh0IGN0eCk7IiBpcyBjYWxsZWQgd2hlbiB0aGUgaGFuZGxlcnMgYXJlIHJldm9rZWQgYnkgdGhlDQpBeGlzMiBlbmdpbmUuPC9wPg0KPHByZT5wdWJsaWMgY2xhc3MgTG9nSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciBpbXBsZW1lbnRzIEhhbmRsZXIgew0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhMb2dIYW5kbGVyLmNsYXNzKTsNCiAgICBwcml2YXRlIFN0cmluZyBuYW1lOw0KDQogICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgew0KICAgICAgICByZXR1cm4gbmFtZTsNCiAgICB9DQoNCiAgICBwdWJsaWMgSW52b2NhdGlvblJlc3BvbnNlIGludm9rZShNZXNzYWdlQ29udGV4dCBtc2dDb250ZXh0KSB0aHJvd3MgQXhpc0ZhdWx0IHsNCiAgICAgICAgbG9nLmluZm8obXNnQ29udGV4dC5nZXRFbnZlbG9wZSgpLnRvU3RyaW5nKCkpOw0KICAgICAgICByZXR1cm4gSW52b2NhdGlvblJlc3BvbnNlLkNPTlRJTlVFOyAgICAgICAgDQogICAgfQ0KDQogICAgcHVibGljIHZvaWQgcmV2b2tlKE1lc3NhZ2VDb250ZXh0IG1zZ0NvbnRleHQpIHsNCiAgICAgICAgbG9nLmluZm8obXNnQ29udGV4dC5nZXRFbnZlbG9wZSgpLnRvU3RyaW5nKCkpOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsNCiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCiAgICB9DQp9PC9wcmU+DQoNCjxhIG5hbWU9IlN0ZXAzXzpfbW9kdWxlX3htbCI+PC9hPg0KPGg0PlN0ZXAzIDogbW9kdWxlLnhtbDwvaDQ+DQoNCjxwPiJtb2R1bGUueG1sIiBjb250YWlucyB0aGUgZGVwbG95bWVudCBjb25maWd1cmF0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyDQptb2R1bGUuIEl0IGNvbnRhaW5zIGRldGFpbHMgc3VjaCBhcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgbW9kdWxlIChpbg0KdGhpcyBleGFtcGxlIGl0IGlzIHRoZSAiTG9nZ2luZ01vZHVsZSIgY2xhc3MgYW5kIHZhcmlvdXMgaGFuZGxlcnMgdGhhdCB3aWxsDQpydW4gaW4gZGlmZmVyZW50IHBoYXNlcykuICJtb2R1bGUueG1sIiBmb3IgdGhlIGxvZ2dpbmcgbW9kdWxlIHdpbGwgYmUgYXMNCmZvbGxvd3M6PC9wPg0KPHByZT4mbHQ7bW9kdWxlIG5hbWU9ImxvZ2dpbmciIGNsYXNzPSJ1c2VyZ3VpZGUubG9nZ2luZ21vZHVsZS5Mb2dnaW5nTW9kdWxlICImZ3Q7DQogICAmbHQ7aW5mbG93Jmd0Ow0KICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJJbkZsb3dMb2dIYW5kbGVyIiBjbGFzcz0idXNlcmd1aWRlLmxvZ2dpbmdtb2R1bGUuTG9nSGFuZGxlciImZ3Q7DQogICAgICAgICZsdDtvcmRlciBwaGFzZT0ibG9nZ2luZ1BoYXNlIiAvJmd0Ow0KICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7DQogICAmbHQ7L2luZmxvdyZndDsNCg0KICAgJmx0O291dGZsb3cmZ3Q7DQogICAgICAgICZsdDtoYW5kbGVyIG5hbWU9Ik91dEZsb3dMb2dIYW5kbGVyIiBjbGFzcz0idXNlcmd1aWRlLmxvZ2dpbmdtb2R1bGUuTG9nSGFuZGxlciImZ3Q7DQogICAgICAgICZsdDtvcmRlciBwaGFzZT0ibG9nZ2luZ1BoYXNlIi8mZ3Q7DQogICAgICAgICZsdDsvaGFuZGxlciZndDsNCiAgICZsdDsvb3V0ZmxvdyZndDsNCg0KICAgJmx0O091dGZhdWx0ZmxvdyZndDsNCiAgICAgICAgJmx0O2hhbmRsZXIgbmFtZT0iRmF1bHRPdXRGbG93TG9nSGFuZGxlciIgY2xhc3M9InVzZXJndWlkZS5sb2dnaW5nbW9kdWxlLkxvZ0hhbmRsZXIiJmd0Ow0KICAgICAgICAmbHQ7b3JkZXIgcGhhc2U9ImxvZ2dpbmdQaGFzZSIvJmd0Ow0KICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7DQogICAmbHQ7L091dGZhdWx0ZmxvdyZndDsNCg0KICAgJmx0O0lOZmF1bHRmbG93Jmd0Ow0KICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJGYXVsdEluRmxvd0xvZ0hhbmRsZXIiIGNsYXNzPSJ1c2VyZ3VpZGUubG9nZ2luZ21vZHVsZS5Mb2dIYW5kbGVyIiZndDsNCiAgICAgICAgJmx0O29yZGVyIHBoYXNlPSJsb2dnaW5nUGhhc2UiLyZndDsNCiAgICAgICAgJmx0Oy9oYW5kbGVyJmd0Ow0KICAgJmx0Oy9JTmZhdWx0ZmxvdyZndDsNCiZsdDsvbW9kdWxlJmd0OzwvcHJlPg0KDQo8cD5BcyB5b3UgY2FuIHNlZSB0aGVyZSBhcmUgZm91ciBmbG93cyBkZWZpbmVkIGluIHRoaXMgIm1vZHVsZS54bWwiPC9wPg0KPG9sPg0KICA8bGk+aW5mbG93oC0gUmVwcmVzZW50cyB0aGUgaGFuZGxlciBjaGFpbiB0aGF0IHdpbGwgcnVuIHdoZW4gYSBtZXNzYWdlIGlzDQogICAgY29taW5nIGluLiA8L2xpPg0KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbiI+b3V0Zmxvd6AtIFJlcHJlc2VudHMgdGhlIGhhbmRsZXIgY2hhaW4NCiAgICB0aGF0IHdpbGwgcnVuIHdoZW4gdGhlIG1lc3NhZ2UgaXMgZ29pbmcgb3V0LiA8L3A+DQogIDwvbGk+DQogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluIj5PdXRmYXVsdGZsb3cgLSBSZXByZXNlbnRzIHRoZSBoYW5kbGVyDQogICAgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuIHRoZXJlIGlzIGEgZmF1bHQgYW5kIHRoZSBmYXVsdCBpcyBnb2luZyBvdXQ8L3A+DQogIDwvbGk+DQogIDxsaT48cD5JTmZhdWx0Zmxvd6AtIFJlcHJlc2VudHMgdGhlIGhhbmRsZXIgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuIHRoZXJlDQogICAgaXMgYSBmYXVsdCBhbmQgdGhlIGZhdWx0IGlzIGNvbWluZyBpbiA8L3A+DQogIDwvbGk+DQo8L29sPg0KDQo8cD5Gb2xsb3dpbmcgc2V0IG9mIHRhZ3MgZGVzY3JpYmUgdGhlIG5hbWUgb2YgdGhlIGhhbmRsZXIsIGhhbmRsZXIgY2xhc3MgYW5kDQp0aGUgcGhhc2UgaW4gd2hpY2ggdGhpcyBoYW5kbGVyIGlzIGdvaW5nIHRvIHJ1bi4gIkluRmxvd0xvZ0hhbmRsZXIiIGlzIHRoZQ0KbmFtZSBnaXZlbiBmb3IgdGhlIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgdGhpcyBoYW5kbGVyIGNsYXNzLiBUaGUgdmFsdWUgb2YNCmNsYXNzIGF0dHJpYnV0ZSBpcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGlzIGhhbmRsZXIuIFNpbmNlIHdlDQphcmUgd3JpdGluZyBsb2dnaW5nIGhhbmRsZXIsIHdlIGNhbiByZXVzZSB0aGUgc2FtZSBoYW5kbGVyIGluIGFsbCB0aGVzZQ0KcGhhc2VzLiBIb3dldmVyIHRoaXMgbWF5IG5vdCBiZSB0aGUgc2FtZSBmb3IgYWxsIHRoZSBtb2R1bGVzLiAiJmx0O29yZGVyDQpwaGFzZT0ibG9nZ2luZ1BoYXNlIiAvJmd0OyIgZGVzY3JpYmVzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGlzIGhhbmRsZXINCnJ1bnMuPC9wPg0KPHByZT4mbHQ7aGFuZGxlciBuYW1lPSJJbkZsb3dMb2dIYW5kbGVyIiBjbGFzcz0idXNlcmd1aWRlLmxvZ2dpbmdtb2R1bGUuTG9nSGFuZGxlciImZ3Q7DQombHQ7b3JkZXIgcGhhc2U9ImxvZ2dpbmdQaGFzZSIgLyZndDsNCiZsdDsvaGFuZGxlciZndDs8L3ByZT4NCg0KPHA+VG8gbGVhcm4gbW9yZSBhYm91dCBQaGFzZSBydWxlcywgY2hlY2sgb3V0IHRoZSBhcnRpY2xlIDxhDQpocmVmPSJodHRwOi8vd3d3LmRldmVsb3Blci5jb20vamF2YS93ZWIvYXJ0aWNsZS5waHAvMzUyOTMyMSINCnRhcmdldD0iX2JsYW5rIj5BeGlzMiBFeGVjdXRpb24gRnJhbWV3b3JrPC9hPjwvcD4NCg0KPGEgbmFtZT0iU3RlcF80Ol9Nb2RpZnlfdGhlXyYjMzQ7YXhpczJfeG1sJiMzNDsiPjwvYT4NCjxoND5TdGVwIDQ6IE1vZGlmeSB0aGUgImF4aXMyLnhtbCI8L2g0Pg0KDQo8cD5JbiB0aGlzIGhhbmRsZXIsIHRoZSBwaGFzZSAibG9nZ2luZ1BoYXNlIiwgaXMgZGVmaW5lZCBieSB0aGUgbW9kdWxlDQp3cml0ZXIuIEl0IGlzIG5vdCBhIHByZS1kZWZpbmVkIGhhbmRsZXIgcGhhc2UsIGhlbmNlIHRoZSBtb2R1bGUgd3JpdGVyIHNob3VsZA0KaW50cm9kdWNlIGl0IHRvIHRoZSAiYXhpczIueG1sIiAoTk9UIHRoZSBzZXJ2aWNlcy54bWwpIHNvIHRoYXQgdGhlIEF4aXMyDQplbmdpbmUga25vd3Mgd2hlcmUgdG8gcGxhY2UgdGhlIGhhbmRsZXIgaW4gZGlmZmVyZW50ICJmbG93cyIgKCBpbkZsb3csDQpvdXRGbG93LCBldGMuKS4gRm9sbG93aW5nIHhtbCBsaW5lcyBzaG93IHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgbWFkZSB0byB0aGUNCiJheGlzMi54bWwiIGluIG9yZGVyIHRvIGRlcGxveSB0aGlzIGxvZ2dpbmcgbW9kdWxlIGluIHRoZSBBeGlzMiBlbmdpbmUuIFRoaXMNCmlzIGFuIGV4dHJhY3Qgb2YgdGhlIHBoYXNlIHNlY3Rpb24gb2YgImF4aXMyLnhtbCIuPC9wPg0KPHByZT4mbHQ7IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0mZ3Q7DQombHQ7IS0tIFBoYXNlcyAtLSZndDsNCiZsdDshLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSZndDsNCg0KJmx0O3BoYXNlT3JkZXIgdHlwZT0iaW5mbG93IiZndDsNCiAgICAgICAgJmx0OyEtLSAgU3lzdGVtIHByZSBkZWZpbmVkIHBoYXNlcyAgICAgICAtLSZndDsNCiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IlRyYW5zcG9ydEluIi8mZ3Q7DQogICAgICAgICZsdDtwaGFzZSBuYW1lPSJQcmVEaXNwYXRjaCIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iRGlzcGF0Y2giIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLmVuZ2luZS5EaXNwYXRjaFBoYXNlIiZndDsNCiAgICAgICAgICAgICZsdDtoYW5kbGVyIG5hbWU9IkFkZHJlc3NpbmdCYXNlZERpc3BhdGNoZXIiDQogICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5lbmdpbmUuQWRkcmVzc2luZ0Jhc2VkRGlzcGF0Y2hlciImZ3Q7DQogICAgICAgICAgICAgICAgJmx0O29yZGVyIHBoYXNlPSJEaXNwYXRjaCIvJmd0Ow0KICAgICAgICAgICAgJmx0Oy9oYW5kbGVyJmd0Ow0KDQogICAgICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJSZXF1ZXN0VVJJQmFzZWREaXNwYXRjaGVyIg0KICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUuYXhpczIuZW5naW5lLlJlcXVlc3RVUklCYXNlZERpc3BhdGNoZXIiJmd0Ow0KICAgICAgICAgICAgICAgICZsdDtvcmRlciBwaGFzZT0iRGlzcGF0Y2giLyZndDsNCiAgICAgICAgICAgICZsdDsvaGFuZGxlciZndDsNCg0KICAgICAgICAgICAgJmx0O2hhbmRsZXIgbmFtZT0iU09BUEFjdGlvbkJhc2VkRGlzcGF0Y2hlciINCiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLmVuZ2luZS5TT0FQQWN0aW9uQmFzZWREaXNwYXRjaGVyIiZndDsNCiAgICAgICAgICAgICAgICAmbHQ7b3JkZXIgcGhhc2U9IkRpc3BhdGNoIi8mZ3Q7DQogICAgICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7DQoNCiAgICAgICAgICAgICZsdDtoYW5kbGVyIG5hbWU9IlNPQVBNZXNzYWdlQm9keUJhc2VkRGlzcGF0Y2hlciINCiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLmVuZ2luZS5TT0FQTWVzc2FnZUJvZHlCYXNlZERpc3BhdGNoZXIiJmd0Ow0KICAgICAgICAgICAgICAgICZsdDtvcmRlciBwaGFzZT0iRGlzcGF0Y2giLyZndDsNCiAgICAgICAgICAgICZsdDsvaGFuZGxlciZndDsNCiAgICAgICAgICAgICZsdDtoYW5kbGVyIG5hbWU9Ikluc3RhbmNlRGlzcGF0Y2hlciINCiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLmVuZ2luZS5JbnN0YW5jZURpc3BhdGNoZXIiJmd0Ow0KICAgICAgICAgICAgICAgICZsdDtvcmRlciBwaGFzZT0iUG9zdERpc3BhdGNoIi8mZ3Q7DQogICAgICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7DQogICAgICAgICZsdDsvcGhhc2UmZ3Q7DQogICAgICAgICZsdDshLS0gIFN5c3RlbSBwcmUgZGVmaW5lZCBwaGFzZXMgICAgICAgLS0mZ3Q7DQogICAgICAgICZsdDshLS0gICBBZnRlciBQb3N0ZGlzcGF0Y2ggcGhhc2UgbW9kdWxlIGF1dGhvciBvciBzZXJ2aWNlIGF1dGhvciBjYW4gYWRkIGFueSBwaGFzZSBoZSB3YW50cyAgICAgIC0tJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uSW5QaGFzZSIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMzYsIDE5MywgMTkpOyI+bG9nZ2luZ1BoYXNlPC9zcGFuPiIvJmd0Ow0KICAgICZsdDsvcGhhc2VPcmRlciZndDsNCiAgICAmbHQ7cGhhc2VPcmRlciB0eXBlPSJvdXRmbG93IiZndDsNCiAgICAgICAgJmx0OyEtLSAgICAgIHVzZXIgY2FuIGFkZCBoaXMgb3duIHBoYXNlcyB0byB0aGlzIGFyZWEgIC0tJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uT3V0UGhhc2UiLyZndDsNCiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDM2LCAxOTMsIDE5KTsiPmxvZ2dpbmdQaGFzZTwvc3Bhbj4iLyZndDsNCiAgICAgICAgJmx0OyEtLXN5c3RlbSBwcmVkZWZpbmVkIHBoYXNlcy0tJmd0Ow0KICAgICAgICAmbHQ7IS0tdGhlc2UgcGhhc2VzIHdpbGwgcnVuIGlycmVzcGVjdGl2ZSBvZiB0aGUgc2VydmljZS0tJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iUG9saWN5RGV0ZXJtaW5hdGlvbiIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iTWVzc2FnZU91dCIvJmd0Ow0KICAgICZsdDsvcGhhc2VPcmRlci8mZ3Q7DQogICAgJmx0O3BoYXNlT3JkZXIgdHlwZT0iSU5mYXVsdGZsb3ciJmd0Ow0KICAgICAgICAmbHQ7IS0tICAgICAgdXNlciBjYW4gYWRkIGhpcyBvd24gcGhhc2VzIHRvIHRoaXMgYXJlYSAgLS0mZ3Q7DQogICAgICAgICZsdDtwaGFzZSBuYW1lPSJPcGVyYXRpb25JbkZhdWx0UGhhc2UiLyZndDsNCiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDM2LCAxOTMsIDE5KTsiPmxvZ2dpbmdQaGFzZTwvc3Bhbj4iLyZndDsNCiAgICAmbHQ7L3BoYXNlT3JkZXImZ3Q7DQogICAgJmx0O3BoYXNlT3JkZXIgdHlwZT0iT3V0ZmF1bHRmbG93IiZndDsNCiAgICAgICAgJmx0OyEtLSAgICAgIHVzZXIgY2FuIGFkZCBoaXMgb3duIHBoYXNlcyB0byB0aGlzIGFyZWEgIC0tJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uT3V0RmF1bHRQaGFzZSIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMzYsIDE5MywgMTkpOyI+bG9nZ2luZ1BoYXNlPC9zcGFuPiIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iUG9saWN5RGV0ZXJtaW5hdGlvbiIvJmd0Ow0KICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iTWVzc2FnZU91dCIvJmd0Ow0KICAgICZsdDsvcGhhc2VPcmRlciZndDsNCiAgICA8L3ByZT4NCg0KPHA+VGhlIHRleHQgaW4gZ3JlZW4sIHRoZSBjdXN0b20gcGhhc2UgImxvZ2dpbmdQaGFzZSIgaXMgcGxhY2VkIGluIGFsbCB0aGUNCmZsb3dzLCBoZW5jZSB0aGF0IHBoYXNlIHdpbGwgYmUgY2FsbGVkIGluIGFsbCB0aGUgbWVzc2FnZSBmbG93cyBpbiB0aGUNCmVuZ2luZS4gU2luY2Ugb3VyIG1vZHVsZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwaGFzZSwgdGhlIExvZ0hhbmRsZXIgaW5zaWRlDQp0aGUgbW9kdWxlIHdpbGwgbm93IGJlIGV4ZWN1dGVkIGluIHRoaXMgcGhhc2UuPC9wPg0KDQo8YSBuYW1lPSJTdGVwNV86X01vZGlmeV90aGVfJiMzNDtzZXJ2aWNlc194bWwmIzM0OyI+PC9hPg0KPGg0PlN0ZXA1IDogTW9kaWZ5IHRoZSAic2VydmljZXMueG1sIjwvaDQ+DQoNCjxwPlVwIHRvIHRoaXMgcG9pbnQgd2UgaGF2ZSBjcmVhdGVkIHRoZSByZXF1aXJlZCBjbGFzc2VzIGFuZCBjb25maWd1cmF0aW9uDQpkZXNjcmlwdGlvbnMgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZSBhbmQgYnkgY2hhbmdpbmcgdGhlICJheGlzMi54bWwiIHdlIGhhdmUNCmNyZWF0ZWQgdGhlIHJlcXVpcmVkIHBoYXNlcyBmb3IgdGhlIGxvZ2dpbmcgbW9kdWxlLjwvcD4NCg0KPHA+TmV4dCBzdGVwIGlzIHRvICI8Yj5lbmdhZ2U8L2I+IiAodXNlKSB0aGlzIG1vZHVsZSBpbiBvbmUgb2Ygb3VyIHNlcnZpY2VzLg0KRm9yIHRoaXMsIGxldCdzIHVzZSB0aGUgc2FtZSBXZWIgc2VydmljZSB0aGF0IHdlIGhhdmUgdXNlZCB0aHJvdWdob3V0IHRoZQ0KdXNlcidzIGd1aWRlLSBNeVNlcnZpY2UuIEhvd2V2ZXIsIHNpbmNlIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSAic2VydmljZXMueG1sIg0Kb2YgTXlTZXJ2aWNlIGluIG9yZGVyIHRvIGVuZ2FnZSB0aGlzIG1vZHVsZSwgd2UgdXNlIGEgc2VwYXJhdGUgV2ViIHNlcnZpY2UsDQpidXQgd2l0aCB0aGUgc2ltaWxhciBvcGVyYXRpb25zLjwvcD4NCg0KPHA+VGhlIGNvZGUgZm9yIHRoaXMgc2VydmljZSBjYW4gYmUgZm91bmQgaW4gdGhlDQoiPHN0cm9uZz5BeGlzMl9IT01FL3NhbXBsZXMvdXNlcmd1aWRlL3NyYy91c2VyZ3VpZGUvZXhhbXBsZTI8L3N0cm9uZz4iDQpkaXJlY3RvcnkuIFRoZSBzaW1wbGUgY2hhbmdlcyB0aGF0IHdlIGhhdmUgZG9uZSB0byAic2VydmljZXMueG1sJyBhcmUgc2hvd24NCmluIGdyZWVuIGluIHRoZSBmb2xsb3dpbmcgbGluZXMgb2YgeG1sLjwvcD4NCjxwcmU+Jmx0O3NlcnZpY2UgbmFtZT0iPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMzYsIDE5MywgMTkpOyI+TXlTZXJ2aWNlV2l0aE1vZHVsZTwvc3Bhbj4iJmd0Ow0KICAgICZsdDtkZXNjcmlwdGlvbiZndDsNCiAgICBUaGlzIGlzIGEgc2FtcGxlIFdlYiBzZXJ2aWNlIHdpdGggYSBsb2dnaW5nIG1vZHVsZSBlbmdhZ2VkLg0KICAgICZsdDsvZGVzY3JpcHRpb24mZ3Q7DQogICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMzYsIDE5MywgMTkpOyI+Jmx0O21vZHVsZSByZWY9ImxvZ2dpbmciLyZndDs8L3NwYW4+DQogICAgJmx0O3BhcmFtZXRlciBuYW1lPSJTZXJ2aWNlQ2xhc3MiIGxvY2tlZD0ieHNkOmZhbHNlIiZndDt1c2VyZ3VpZGUuZXhhbXBsZTIuTXlTZXJ2aWNlJmx0Oy9wYXJhbWV0ZXImZ3Q7DQogICAgJmx0O29wZXJhdGlvbiBuYW1lPSJlY2hvIiZndDsNCiAgICAmbHQ7bWVzc2FnZVJlY2VpdmVyIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLnJlY2VpdmVycy5SYXdYTUxJTk91dE1lc3NhZ2VSZWNlaXZlciIvJmd0Ow0KICAgICZsdDsvb3BlcmF0aW9uJmd0Ow0KICAgICZsdDtvcGVyYXRpb24gbmFtZT0icGluZyImZ3Q7DQogICAgJmx0O21lc3NhZ2VSZWNlaXZlciBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5yZWNlaXZlcnMuUmF3WE1MSU5PdXRNZXNzYWdlUmVjZWl2ZXIiLyZndDsNCiAgICAmbHQ7L29wZXJhdGlvbiZndDsNCiZsdDsvc2VydmljZSZndDs8L3ByZT4NCg0KPHA+SW4gdGhpcyBleGFtcGxlIHdlIGhhdmUgY2hhbmdlZCB0aGUgc2VydmljZSBuYW1lICh0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MNCmlzIHZlcnkgc2ltaWxhciB0byB3aGF0IHdlIGhhdmUgdXNlZCBlYXJsaWVyIGFsdGhvdWdoIGl0IGlzIGluIGEgZGlmZmVyZW50DQpwYWNrYWdlKS4gSW4gYWRkaXRpb24gd2UgaGF2ZSBhZGRlZCB0aGUgbGluZSA8Yj4iJmx0O21vZHVsZQ0KcmVmPSJsb2dnaW5nIi8mZ3Q7IjwvYj4gdG8gInNlcnZpY2VzLnhtbCIuIFRoaXMgaW5mb3JtcyB0aGUgQXhpczIgZW5naW5lIHRoYXQNCnRoZSBtb2R1bGUgImxvZ2dpbmciIHNob3VsZCBiZSBlbmdhZ2VkIGZvciB0aGlzIHNlcnZpY2UuIFRoZSBoYW5kbGVyIGluc2lkZQ0KdGhlIG1vZHVsZSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZWlyIHJlc3BlY3RpdmUgcGhhc2VzIGFzIGRlc2NyaWJlZCBieSB0aGUNCiJtb2R1bGUueG1sIi48L3A+DQoNCjxhIG5hbWU9IlN0ZXA2XzpfUGFja2FnaW5nIj48L2E+DQo8cD48Yj5TdGVwNiA6IFBhY2thZ2luZzwvYj48L3A+DQoNCjxwPkJlZm9yZSBkZXBsb3lpbmcgdGhlIG1vZHVsZSB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgIi5tYXIiIGZpbGUgZm9yIHRoaXMNCm1vZHVsZS4gVGhpcyBjYW4gYmUgZG9uZSwgdXNpbmcgdGhlICJqYXIiIGNvbW1hbmQgYW5kIHRoZW4gcmVuYW1pbmcgdGhlDQpjcmVhdGVkIGphciBmaWxlLiBPciB5b3UgY2FuIGZpbmQgdGhlICJsb2dnaW5nLm1hciIgdGhhdCBpcyBhbHJlYWR5IGNyZWF0ZWQNCmZvciB5b3UgaW4gdGhlICI8c3Ryb25nPkF4aXMyX0hPTUUvc2FtcGxlcy91c2VyZ3VpZGU8L3N0cm9uZz4iIGRpcmVjdG9yeS48L3A+DQoNCjxhIG5hbWU9IlN0ZXA3XzpfRGVwbG95X3RoZV9Nb2R1bGVfaW5fQXhpczIiPjwvYT4NCjxoND5TdGVwNyA6IERlcGxveSB0aGUgTW9kdWxlIGluIEF4aXMyPC9oND4NCg0KPHA+RGVwbG95aW5nIGEgbW9kdWxlIGluIEF4aXMyIHJlcXVpcmUgdGhlIHVzZXIgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGgNCnRoZSBuYW1lICJtb2R1bGVzIiBpbiB0aGUgIndlYmFwcHMvYXhpczIvV0VCLUlORiIgZGlyZWN0b3J5IG9mIHRoZWlyIHNlcnZsZXQNCmNvbnRhaW5lciBhbmQgdGhlbiBjb3B5aW5nIHRoZSAiLm1hciIgZmlsZSB0byB0aGF0IGRpcmVjdG9yeS4gU28gbGV0J3MgZmlyc3QNCmNyZWF0ZSB0aGUgIm1vZHVsZXMiIGRpcmVjdG9yeSBhbmQgZHJvcCB0aGUgImxvZ2dpbmcubWFyIiBpbiB0byB0aGlzDQpkaXJlY3RvcnkuPC9wPg0KDQo8cD5BbHRob3VnaCB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0byB0aGUgInNlcnZpY2VzLnhtbCIgaXMgdmVyeSBsaXR0bGUsIHdlDQpoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBzZXJ2aWNlIGFyY2hpdmUgKE15U2VydmljZVdpdGhNb2R1bGUuYWFyKSBmb3IgdXNlcnMNCnRvIGRlcGxveSBhbmQgc2VlLjwvcD4NCg0KPHA+RGVwbG95IHRoaXMgc2VydmljZSB1c2luZyB0aGUgc2FtZSBzdGVwcyB1c2VkIGluIDxhIGhyZWY9InVzZXJndWlkZS5odG1sI1N0ZXA1X0RlcGxveV93ZWJfc2VydmljZSI+J1N0ZXAgNDogRGVwbG95IFdlYiBTZXJ2aWNlJzwvYT4gc3ViIHNlY3Rpb24gaW4gJzxhIGhyZWY9InVzZXJndWlkZS5odG1sI3dzX2NvZGVnZW4iPldyaXRpbmcgYSBOZXcgU2VydmljZSB1c2luZyBDb2RlZ2VuZXJhdGlvbjwvYT4nLCBhbmQgY29weSB0aGUNCiJsb2dnaW5nLm1hciIgZmlsZSB0byB0aGUgIm1vZHVsZXMiIGRpcmVjdG9yeS48L3A+DQoNCjxwPlRoZW4gcnVuIHVzaW5nIHRoZSAiVGVzdFdlYlNlcnZpY2VXaXRoTW9kdWxlQ2xpZW50LmJhdCIgb3INCiJUZXN0V2ViU2VydmljZVdpdGhNb2R1bGVDbGllbnQuc2giIGluIHRoZQ0KIjxzdHJvbmc+QXhpczJIb21lL3NhbXBsZXMvdXNlcmd1aWRlL3NyYy91c2VyZ3VpZGUvY2xpZW50cy9iaW48L3N0cm9uZz4iDQpkaXJlY3RvcnkuPC9wPg0KDQo8cD5Ob3RlOiBUbyBzZWUgbG9ncywgdGhlIHVzZXIgbmVlZHMgdG8gbW9kaWZ5IHRoZSAibG9nNGoucHJvcGVydGllcyIgdG8gbG9nDQpJTkZPLiBUaGUgcHJvcGVydHkgZmlsZSBpcyBsb2NhdGVkIGluDQoiPHN0cm9uZz53ZWJhcHBzL2F4aXMyL1dFQi1JTkYvY2xhc3Nlczwvc3Ryb25nPiIgb2YgeW91ciBzZXJ2bGV0IGNvbnRhaW5lci4NCkNoYW5nZSB0aGUgbGluZSAibG9nNGoucm9vdENhdGVnb3J5PSBFUlJPUiwgTE9HRklMRSIgdG8NCiJsb2c0ai5yb290Q2F0ZWdvcnk9SU5GTywgRVJST1IsIExPR0ZJTEUiLjwvcD4NCg0KPHA+PGZvbnQgc2l6ZT0iNCI+PGI+Tm90ZSAob24gc2FtcGxlcyk6PC9iPjwvZm9udD4gQWxsIHNhbXBsZXMgbWVudGlvbmVkIGluDQp0aGUgdXNlcidzIGd1aWRlIGFyZSBsb2NhdGVkIGF0IDxiPiJzYW1wbGVzXHVzZXJndWlkZVxzcmMiPC9iPiBkaXJlY3Rvcnkgb2YNCnRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLjwvcD4NCg0KPC9ib2R5Pg0KPC9odG1sPg0K