PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgokcGFnZVRpdGxlIAkJPSAiVGVjaG5vbG9neSBQcm9qZWN0IExlYWRlcnMiOwokcGFnZUtleXdvcmRzCT0gInRlY2hub2xvZ3kiOwokcGFnZUF1dGhvcgkJPSAiQmpvcm4gRnJlZW1hbi1CZW5zb24gTm92IDIwLzA1IjsKCm9iX3N0YXJ0KCk7Cj8+CiAgICA8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgogICAgICAgIDxoMT48Pz0gJHBhZ2VUaXRsZSA/PjwvaDE+CiAgICAgICAgCiAgICAgIDxwPlRoZSBFY2xpcHNlIFRlY2hub2xvZ3kgUHJvamVjdCBpcyBtYW5hZ2VkIGJ5IGEgc21hbGwgZ3JvdXAga25vd24gYXMgdGhlIAogICAgICAgIEVjbGlwc2UgVGVjaG5vbG9neSBQcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlICg8YSBocmVmPSJ0ZWNobm9sb2d5LWNoYXJ0ZXIucGhwI1BNQyI+UE1DPC9hPikuIAogICAgICAgIFRoZSBQTUMgaG9sZHMgd2Vla2x5IGNvbmZlcmVuY2UgY2FsbHMgKHNlZSAKICAgICAgICA8YSBocmVmPSJwbWMtbWludXRlcy5waHAiPnRoZSBtaW51dGVzPC9hPikgYW5kIGhvbGRzIChzb21lKQogICAgICAgIGRpc2N1c3Npb25zIG9uIDxhIGhyZWY9Im1haWx0bzp0ZWNobm9sb2d5LXBtY0BlY2xpcHNlLm9yZyI+dGVjaG5vbG9neS1wbWNAZWNsaXBzZS5vcmc8L2E+IG1haWxpbmcgbGlzdC4KICAgICAgICBUaGUgd29yayBvZiB0aGUgUHJvamVjdCBpcyBvcmdhbml6ZWQgaW50byBzdWJwcm9qZWN0cy4gRWFjaCBzdWJwcm9qZWN0IAogICAgICAgIGhhcyBhIGxlYWRlciB3aG8gaGFzIG92ZXJhbGwgcmVzcG9uc2liaWxpdHkgZm9yIGl0cyBzdWNjZXNzLiBMYXJnZSBzdWJwcm9qZWN0cyAKICAgICAgICBhcmUgZnVydGhlciBkaXZpZGVkIGludG8gY29tcG9uZW50IHRlYW1zLCBlYWNoIG9mIHdobyBoYXMgYSBsZWFkZXIgdGhhdCAKICAgICAgICBpcyByZXNwb25zaWJsZSBmb3IgaXRzIG92ZXJhbGwgc3VjY2Vzcy4gV2UgaGF2ZSBsaXN0ZWQganVzdCB0aGUgUE1DIAogICAgICAgIDwhLS0gYW5kIAogICAgICAgIHN1YnByb2plY3QgbGVhZGVycyAKICAgICAgICAtLT4KICAgICAgICBoZXJlIGJ1dCB5b3Ugd2lsbCBlbmNvdW50ZXIgbWFueSBkZWRpY2F0ZWQgZWNsaXBzZSAKICAgICAgICBwcm9qZWN0IGNvbW1pdHRlcnMgYW5kIGRldmVsb3BlcnMgaW4gdGhlIDxhIGhyZWY9Ii9uZXdzZ3JvdXBzLyIgdGFyZ2V0PSJfdG9wIj5uZXdzZ3JvdXBzPC9hPiAKICAgICAgICBhbmQgPGEgaHJlZj0iL21haWwvIiB0YXJnZXQ9Il90b3AiPm1haWxpbmcgbGlzdHM8L2E+LjwvcD4KCjxoMj5Qcm9qZWN0IAogICAgICBNYW5hZ2VtZW50IENvbW1pdHRlZTwvaDI+CgogICAgICAgPHVsIGNsYXNzPSJtaWRsaXN0Ij4KPGxpPiAgICA8Yj5Cam9ybiBGcmVlbWFuLUJlbnNvbiwgRWNsaXBzZSBGb3VuZGF0aW9uIChiam9ybiBhdCBlY2xpcHNlLm9yZykgKFBNQyAKICAgIGxlYWQpPC9iPjxicj4KICAgICAgQmpvcm4gaXMgdGhlIERpcmVjdG9yLCBPcGVuIFNvdXJjZSBQcm9jZXNzIGF0IHRoZSAKICAgIEVjbGlwc2UgRm91bmRhdGlvbi4gVGhyb3VnaG91dCBoaXMgbWVhbmRlcmluZyBjYXJlZXIsIEJqb3JuIGhhcyBhbHdheXMgYmVlbiBpbnRlcmVzdGVkIAogICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZXMgYW5kIElERXMgaW4gc3BpdGUgb2Ygb2NjYXNzaW9uYWxseSB3YW5kZXJpbmcgYXdheSAKICAgICAgZnJvbSB0aGVpciBvbmUgdHJ1ZSBwYXRoLiBCam9ybiBoYXMgd29ya2VkIGZvciBPVEksIEFtYXpvbi5jb20sIFJhdGlvbmFsLCAKICAgICAgYW5kIEdlbXN0b25lLCBhbW9uZyBvdGhlcnMuIEhlIGlzIGFsc28gaGFwcHkgdG8gZXhwb3VuZCBhdCBsZW5ndGggYWJvdXQgCiAgICAgIGhpcyBsb3ZlIG9mIGZseWluZy4gPGJyLz48L2xpPgoKPGxpPiA8Yj5XYXluZSBCZWF0b24sIEVjbGlwc2UgRm91bmRhdGlvbiAod2F5bmUgYXQgZWNsaXBzZS5vcmcpPC9iPjxicj4KPC9saT4KICAgICAgCiAgICAgIDxsaT48Yj5XYXJkIEN1bm5pbmdoYW0sIEVjbGlwc2UgRm91bmRhdGlvbiAod2FyZCBhdCBlY2xpcHNlLm9yZyk8L2I+PGJyPgogICAgICA8L2xpPgogICAgICAKICAgICAgPGxpPjxiPkpvaG4gRHVpbW92aWNoLCBJQk0gKGpvaG5fZHVpbW92aWNoIGF0IGNhLmlibS5jb20pPC9iPjxicj4KICAgICAgSm9obiBEdWltb3ZpY2gsIElCTSBkaXN0aW5ndWlzaGVkIGVuZ2luZWVyLCBoYXMgYmVlbiB0aGUgbGVhZCBkZXNpZ25lciBhbmQgCiAgICAgIGltcGxlbWVudG9yIGZvciBPVEkvSUJNJiMxNDY7cyB2aXJ0dWFsIG1hY2hpbmUgdGVjaG5vbG9neSBmb3IgdGhlIHBhc3QgdGVuIAogICAgICB5ZWFycy4gSGUgaGFzIGRlc2lnbmVkIHZpcnR1YWwgbWFjaGluZXMgZm9yIGEgd2lkZSByYW5nZSBvZiBwbGF0Zm9ybXMsIGZyb20gCiAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGVtYmVkZGVkIGFuZCByZWFsIHRpbWUgc3lzdGVtcyB0byB0aG9zZSBmb3IgSUJNIAogICAgICBtYWluZnJhbWUgc3lzdGVtcy4gSm9obiBoYXMgcGxheWVkIGEga2V5IHJvbGUgaW4gdGhlIGRldmVsb3BtZW50IG9mIEVOVlkvU21hbGx0YWxrLCAKICAgICAgVkEvTWljcm8gRWRpdGlvbiwgYW5kIFZBL0phdmEgSmF2YSBJREVzLiBJbiBhZGRpdGlvbiB0byBzZXJ2aW5nIG9uIHRoZSBFY2xpcHNlIAogICAgICBUZWNobm9sb2d5IFBNQywgSm9obiBzZXJ2ZXMgYXMgdGhlIGxlYWQgb2YgdGhlIEVjbGlwc2UgVG9vbHMgUE1DLjxici8+PC9saT4KICAgICAgCiAgICAgIDxsaT48Yj5DbGlmZiBTY2htaWR0LCBCRUEgKGNsaWZmIGF0IGJlYS5jb20pPC9iPjxicj4KICAgICAgQ2xpZmYgaXMgYSBtZW1iZXIgb2YgQXBhY2hlknMgSW5jdWJhdG9yIFByb2plY3QgTWFuYWdlbWVudCBDb21taXR0ZWUgYW5kCiAgICAgIGJyaW5ncyB0aGlzIGV4cGVyaWVuY2UgdG8gdGhlIEVjbGlwc2UgVGVjaG5vbG9neSBwcm9qZWN0LiBIZSBoYXMgc3BlbnQgdGhlCiAgICAgIGxhc3QgdHdvIHllYXJzIGNvbGxhYm9yYXRpbmcgd2l0aCB2YXJpb3VzIG9wZW4gc291cmNlIGNvbW11bml0aWVzIHRvCiAgICAgIGV2b2x2ZSBwb2xpY2llcyBhbmQgcHJvY2VkdXJlcyB0aGF0IGVuY291cmFnZSB0aGUgc3VjY2VzcyBvZiBuZXcgb3BlbgogICAgICBzb3VyY2UgcHJvamVjdHMsIHBhcnRpY3VsYXJseSB3aXRoIHJlc3BlY3QgdG8gbGljZW5zaW5nLCBsb2dpc3RpY3MsIGFuZAogICAgICBjb21tdW5pdHkgZGV2ZWxvcG1lbnQuIEhlIGhhcyBhbHNvIGJlZW4gcmVzcG9uc2libGUgZm9yIEJFQZJzIG9wZW4KICAgICAgc291cmNlIHN0cmF0ZWd5IGFuZCByZWxhdGlvbnNoaXAgd2l0aCBvcGVuIHNvdXJjZSBvcmdhbml6YXRpb25zLCBzdWNoIGFzCiAgICAgIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gYW5kIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gUHJpb3IgdG8gdGhpcywKICAgICAgaGUgc3BlY2lhbGl6ZWQgaW4gc3RhbmRhcmRzIHN0cmF0ZWd5LCB3b3JraW5nIHdpdGggT0FTSVMsIHRoZSBKYXZhCiAgICAgIENvbW11bml0eSBQcm9jZXNzLCBhbmQgdGhlIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0uPGJyLz48L2xpPgogICAgICAKICAgICAgPC91bD4KPC9kaXY+CjwvZGl2Pgo8P3BocAoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCgkkaHRtbCA9IG9iX2dldF9jb250ZW50cygpOwoJb2JfZW5kX2NsZWFuKCk7CgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/Pgo=