PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4gIENoYW5nZSB0aGVzZS4gCgkkcGFnZVRpdGxlIAkJPSAiT1NFRSBEZXZlbG9wZXJzIFdvcmtzcGFjZSBTZXR1cCI7CgkkcGFnZUtleXdvcmRzCT0gIk9TRUUsIE9wZW4sIFN5c3RlbSwgRW5naW5lZXJpbmcsIEVudmlyb25tZW50LCBFY2xpcHNlLCBEZWZpbmUsIEFUUywgT1RFLCBBcHBsaWNhdGlvbiBGcmFtZXdvcmsiOwoJJHBhZ2VBdXRob3IJCT0gIlJ5YW4gRC4gQnJvb2tzOyBEb25hbGQgRy4gRHVubmUiOwoJCgkjIFBhc3RlIHlvdXIgSFRNTCBjb250ZW50IGJldHdlZW4gdGhlIEVPSFRNTCBtYXJrZXJzIQkKCSRodG1sID0gPDw8RU9IVE1MCgoJPGRpdiBpZD0ibWlkY29sdW1uIj4KCQk8aDE+JHBhZ2VUaXRsZTwvaDE+CiAgICAgIFRoaXMgcGFnZSBpcyBkZWRpY2F0ZWQgdG8gc3RlcHMgbmVjZXNzYXJ5IHRvIGdldCBhIGRldmVsb3BtZW50IHdvcmtzcGFjZSB1cCBhbmQgcnVubmluZyBmb3IgT1NFRS4gIFBsZWFzZSBjb250YWN0IHVzIGlmIGFueXRoaW5nCiAgICAgIGhlcmUgaXMgbm90IGFjY3VyYXRlIG9yIG1pc3NpbmcuCiAgICAgIAogICAgICA8b2w+CgkgICAgICA8bGk+SW5zdGFsbCBKYXZhIEpESyAxLjYKCSAgICAgIDxsaT5JbnN0YWxsIEVjbGlwc2UgMy4zCgkgICAgICA8bGk+QWRkIFNWTiBjbGllbnQgdG8gRWNsaXBzZSBieSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cucG9sYXJpb24ub3JnL2luZGV4LnBocD9wYWdlPWRvd25sb2FkJnByb2plY3Q9c3VidmVyc2l2ZSI+CgkgICAgICBodHRwOi8vd3d3LnBvbGFyaW9uLm9yZy9pbmRleC5waHA/cGFnZT1kb3dubG9hZCZwcm9qZWN0PXN1YnZlcnNpdmU8L2E+LiBZb3Ugd2lsbAoJICAgICAgd2FudCB0byBhZGQgYWxsIHBsdWctaW5zIGF2YWlsYWJsZSBhdCBOb3RlOiAgVGhpcyB3aWxsIGFsbG93IHlvdSB0byBjb25uZWN0IHRvIHRoZSBPU0VFIFNWTiByZXBvc2l0b3JpZXMgQU5EIE9TRUUgdXNlcyBzb21lIG9mIHRoZXNlIAoJICAgICAgcGx1Zy1pbnMgZm9yIGNvbXBpbGluZy4KCSAgICAgIDxsaT5JZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQsIGluc3RhbGwgdGhlIEdyYXBoaWNhbCBFZGl0aW5nIEZyYW1ld29yayBieSBzZWxlY3RpbmcgSGVscCBwdWxsZG93biAtIFNvZnR3YXJlIFVwZGF0ZXMgLSAKCSAgICAgIEZpbmQgYW5kIEluc3RhbGwgLSBTZWFyY2ggZm9yIG5ldyBmZWF0dXJlcyB0byBpbnN0YWxsIC0gU2VsZWN0IEdFRiBVcGRhdGUgU2l0ZSBhbmQgY29tcGxldGUgaW5zdGFsbGF0aW9uLjwvbGk+CgkgICAgICA8bGk+T1NFRSB1c2VzIHRoZSBHRUYncyBaZXN0IFZpc3VhbGl6YXRpb24gcGx1Z2lucy4gIFRvIHJlc29sdmUgdGhlc2UgZGVwZW5kZW5jaWVzLCB5b3Ugd2lsbCBuZWVkIHRvIGFub255bW91c2x5IGNvbm5lY3QgdG8gdGhlIC9jdnNyb290L3Rvb2xzIAoJICAgICAgQ1ZTIHJlcG9zaXRvcnksIGV4cGFuZCBvdXQgdGhlIG9yZy5lY2xpcHNlLmdlZiBwcm9qZWN0IGFuZCBjaGVjayBvdXQgb3JnLmVjbGlscHNlLnplc3QuY29yZSBhbmQgb3JnLmVjbGlwc2UuemVzdC5sYXlvdXRzIHByb2plY3RzLiAgCgkgICAgICBJbnN0cnVjdGlvbnMgb24gZG9pbmcgdGhpcyBhcmUgYXQgPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL0NWU19Ib3d0byI+aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL0NWU19Ib3d0bzwvYT4gCgkgICAgICA8bGk+T1NFRSB1c2VzIE5lYnVsYSdzIENhbGVuZGFyQ29tYm8uICBUbyByZXNvbHZlIHRoaXMgZGVwZW5kZW5jaWVzLCB5b3Ugd2lsbCBuZWVkIHRvIGFub255bW91c2x5IGNvbm5lY3QgdG8gdGhlIC9jdnNyb290L3RlY2hub2xvZ3kgCgkgICAgICBDVlMgcmVwb3NpdG9yeSwgZXhwYW5kIG91dCB0aGUgb3JnLmVjbGlwc2Uuc3d0Lm5lYnVsYSBwcm9qZWN0IGFuZCBjaGVjayBvdXQgb3JnLmVjbGlwc2UubmVidWxhLndpZGdldHMuY2FsZW5kYXJjb21ibyBwcm9qZWN0LiAgCgkgICAgICBJbnN0cnVjdGlvbnMgb24gZG9pbmcgdGhpcyBhcmUgYXQgPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL0NWU19Ib3d0byI+aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL0NWU19Ib3d0bzwvYT4KCSAgICAgIDxsaT5DcmVhdGUgdHdvIHdvcmtzcGFjZXM6IHdvcmtzcGFjZU9zZWVDbGllbnQgYW5kIHdvcmtzcGFjZU9zZWVTZXJ2ZXIgYW5kIGRvIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2g6PC9saT4KCSAgICAgIDx1bD4KCSAgICAgIAk8bGk+Q29ubmVjdCB0byB0aGUgT1NFRSBTVk4gcmVwb3NpdG9yeS4gIFlvdSB3aWxsIGNvbm5lY3QgdXNpbmcgeW91ciBjb21taXR0ZXIgdXNlcm5hbWUgcGFzc3dvcmQgb3IgZG8gYW4KCSAgICAgIGFub255bW91cyBjb25uZWN0aW9uIGlmIHlvdSBhcmUgbm90IGFuIE9TRUUgY29tbWl0dGVyLiAgSW5zdHJ1Y3Rpb25zIGFyZSBoZXJlIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1NWTl9Ib3d0byI+aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvU1ZOX0hvd3RvPC9hPi48L2xpPgoJICAgICAgCTxsaT5jaGVja291dCBvcmcuZWNsaXBzZS5vc2VlLnN1cHBvcnQuY29uZmlnPC9saT4KCSAgICAgIAk8bGk+RmlsZSAtPiBJbXBvcnQgLT4gUHJlZmVyZW5jZXMgLT4gb3JnLmVjbGlwc2Uub3NlZS5zdXBwb3J0LmNvbmZpZ1xvc2VlX3RlYW0uZXBmPC9saT4KCSAgICAgIAk8bGk+c2VsZWN0IG9yZy5lY2xpcHNlLm9zZWUuc3VwcG9ydC5jb25maWdccHJvamVjdFNldHNcT3NlZVtBcHBTZXJ2ZXJ8Q2xpZW50XVByb2plY3RTZXQucHNmIC0+IEltcG9ydCAtPiBUZWFtIFByb2plY3QgU2V0PC9saT4KCSAgICAgIDwvdWw+CgkgICAgICA8bGk+SW4gdGhlIHdvcmtzcGFjZU9zZWVTZXJ2ZXIgYW5kIGRvIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2g6PC9saT4KCSAgICAgIDx1bD4KCSAgICAgIAk8bGk+RG91YmxlLWNsaWNrIG9uIC90YXJnZXRQbGF0Zm9ybXMvZXF1aW5veDMuNE02LnRhcmdldCCWIGFuIGVkaXRvciB3aWxsIG9wZW48L2xpPgoJICAgICAgCTxsaT5JbiB0aGUgZWRpdG9yIHRoYXQgb3BlbnMsIGluIHRoZSB1cHBlciByaWdodCBoYW5kIGNvcm5lciBjbGljayAiU2V0IGFzIFRhcmdldCBQbGF0Zm9ybSI8L2xpPgoJICAgICAgCTxsaT5MYXVuY2ggdGhlIE9TRUUgQXBwbGljYXRpb24gU2VydmVyIHVzaW5nIHRoZSBsYXVuY2ggY29uZmlndXJhdGlvbiAicnVuT3NlZVNlcnZlciI8L2xpPgoJICAgICAgPC91bD4KCSAgICAgIDwvb2w+CkVPSFRNTDsKCgkjIEdlbmVyYXRlIHRoZSB3ZWIgcGFnZQoJJEFwcC0+Z2VuZXJhdGVQYWdlKCR0aGVtZSwgJE1lbnUsICROYXYsICRwYWdlQXV0aG9yLCAkcGFnZUtleXdvcmRzLCAkcGFnZVRpdGxlLCAkaHRtbCk7Cj8+Cg==