PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoYykgMjAwOSBFY2xpcHNlIEZvdW5kYXRpb24gYW5kIG90aGVycy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICoKICogQ29udHJpYnV0b3JzOgogKiBT6WJhc3RpZW4gR+lyYXJkLCBDRUEgTElTVAogKiAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJIwoJIyBCZWdpbjogcGFnZS1zcGVjaWZpYyBzZXR0aW5ncy4KCSRwYWdlVGl0bGUgCQk9ICJQYXB5cnVzIEN1c3R1bWl6YXRpb24gRG9jdW1lbnRhdGlvbiI7CgkkcGFnZUtleXdvcmRzCT0gInBhcHlydXMsIHVzZXJzLCBkb2N1bWVudHMsIHR1dG9yaWFscywgZXhhbXBsZXMiOwoJJHBhZ2VBdXRob3IJCT0gIlNlYmFzdGllbiBHZXJhcmQiOwoJCQoJIyBQYXN0ZSB5b3VyIEhUTUwgY29udGVudCBiZXR3ZWVuIHRoZSBFT0hUTUwgbWFya2VycyEJCglvYl9zdGFydCgpOwoJPz4KCTxkaXYgaWQ9Im1pZGNvbHVtbiI+CgkJPGgxPlBhcHlydXMgQ3VzdHVtaXphdGlvbiBEb2N1bWVudGF0aW9uIENvcm5lcjwvaDE+CgkJCgkJPHA+CgkJCVBhcHlydXMgaXMgYSBVTUwgdG9vbCB0aGF0IHByb3ZpZGUgdmVyeSBhZHZhbmNlZCBmYWNpbGlsaXRsaWVzIGZvciBjdXN0bWl6aW5nIHRoZSB0b29sLiBZb3Ugd2lsbCBmaW5kIGluIHRoaXMgcGFnZSB0dXRvcmlhbHMgYW5kIGV4YW1wbGVzIGlsbHVzdHJhdGluZyB0aGUgdXNhZ2Ugb2YgYWxsIHRoaXMgY3VzdHVtIGZhY2lsaXRpZXMuIAoJCTwvcD4KCQkKCQk8aDM+VHV0b3JpYWxzPC9oMz4KCQkJPHVsPgoJCQkJPGxpPkNvbWluZyBzb29uLi4uPC9saT4KCQkJPC91bD4KCQk8aDM+RXhhbXBsZXM8L2gzPgoJCQk8dWw+CgkJCQk8bGk+PGEgaHJlZj0iLi9jdXN0dW1pemF0aW9uRXhhbXBsZXMvY3VzdHVtaXphdGlvbkV4YW1wbGVzSW5kZXgucGhwIj5UaGUgbWl4aW4gbWFjaGluIERTTUwgZXhhbXBsZTwvbGk+CgkJCTwvdWw+CgkJPCEtLQoJCTxoMz4mbHQ7aDMmZ3Q7IHRhZzwvaDM+CgkJPGRpdiBjbGFzcz0iaG9tZWl0ZW0iPgoJCQk8dWw+CgkJCQk8bGk+VGhpcyBpcyBhbiB1bm9yZGVyZWQgbGlzdDwvbGk+CgkJCQk8bGk+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LjwvbGk+CgkJCQk8bGk+RHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW08L2xpPgogCQkJCTxsaT5DdXJhYml0dXIgdmVsIGxvcmVtIGluIHR1cnBpcyBhZGlwaXNjaW5nIGRpY3R1bS4gTnVuYyBtaSBlc3QsIHNjZWxlcmlzcXVlIHZpdGFlLCB2ZW5lbmF0aXMgZXQsIGV1aXNtb2QgZXQsIHNlbS4gUHJhZXNlbnQgYWxpcXVldCBtaSB2ZWwgZmVsaXMuIFBlbGxlbnRlc3F1ZSBwZWxsZW50ZXNxdWUgY29udmFsbGlzIGFudGUuIFByYWVzZW50IGltcGVyZGlldCB2ZWxpdCB2aXRhZSBqdXN0by4gTnVsbGFtIHF1aXMgcHVydXMuIEFlbmVhbiBuZXF1ZSBlbmltLCBjb25zZXF1YXQgbm9uLCBtYXR0aXMgZXUsIGdyYXZpZGEgc2VkLCBtYXNzYS48L2xpPgoJCQk8L3VsPgoJCQk8b2w+IAoJCQkJPGxpPlRoaXMgaXMgYW4gb3JkZXJlZCBsaXN0PC9saT4KCQkJCTxsaT5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuPC9saT4KCQkJCTxsaT5EdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bTwvbGk+CiAJCQkJPGxpPkN1cmFiaXR1ciB2ZWwgbG9yZW0gaW4gdHVycGlzIGFkaXBpc2NpbmcgZGljdHVtLiBOdW5jIG1pIGVzdCwgc2NlbGVyaXNxdWUgdml0YWUsIHZlbmVuYXRpcyBldCwgZXVpc21vZCBldCwgc2VtLiBQcmFlc2VudCBhbGlxdWV0IG1pIHZlbCBmZWxpcy4gUGVsbGVudGVzcXVlIHBlbGxlbnRlc3F1ZSBjb252YWxsaXMgYW50ZS4gUHJhZXNlbnQgaW1wZXJkaWV0IHZlbGl0IHZpdGFlIGp1c3RvLiBOdWxsYW0gcXVpcyBwdXJ1cy4gQWVuZWFuIG5lcXVlIGVuaW0sIGNvbnNlcXVhdCBub24sIG1hdHRpcyBldSwgZ3JhdmlkYSBzZWQsIG1hc3NhLjwvbGk+CgkJCTwvb2w+CQkJCQoJCTwvZGl2PgoJCQoJCTxoMj4mbHQ7aDImZ3Q7IHRhZzwvaDI+CgkJPHRhYmxlPgoJCQk8dHI+CgkJCQk8dGQ+VGFibGVzIGxvb2sgPC90ZD4KCQkJCTx0ZD5saWtlIHRoaXM8L3RkPgoJCQk8L3RyPgoJCQk8dHI+CgkJCQk8dGQ+RGF0YTwvdGQ+CgkJCQk8dGQ+RGF0YTwvdGQ+CgkJCTwvdHI+CgkJCTx0cj4KCQkJCTx0ZD5EYXRhPC90ZD4KCQkJCTx0ZD5EYXRhPC90ZD4KCQkJPC90cj4KCQk8L3RhYmxlPgoJCS0tPgoJCQoJPC9kaXY+CgoJPCEtLSByZW1vdmUgdGhlIGVudGlyZSA8ZGl2PiB0YWcgdG8gb21pdCB0aGUgcmlnaHQgY29sdW1uISAgLS0+Cgk8ZGl2IGlkPSJyaWdodGNvbHVtbiI+CgkJPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQk8aDY+UmVsYXRlZCBMaW5rczwvaDY+CgkJCTx1bD4KCQkJCTxsaT5Gb3IgZGV2ZWxvcHBlcnMsIGxldCdzIHNlZSBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvTURUL1BhcHlydXMiPlBhcHlydXMgd2lraTwvYT48L2xpPgoJCQkJPGxpPkZvciBxdWVzdGlvbnMsIGxldCdzIGdvIHRvIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL25ld3Nwb3J0YWwvdGhyZWFkLnBocD9ncm91cD1lY2xpcHNlLnBhcHlydXMiPlBhcHlydXMgZm9ydW08L2E+PC9saT4KCQkJPC91bD4KCQk8L2Rpdj4KCQk8IS0tCgkJPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQk8aDY+Jmx0O2g2Jmd0OyB0YWc8L2g2PgoJCQkJPGRpdiBjbGFzcz0ibW9kYWwiPgoJCQkJCVdyYXBwaW5nIHlvdXIgY29udGVudCB1c2luZyBhIGRpdi5tb2RhbCB0YWcgaGVyZSB3aWxsIGFkZCB0aGUgZ3JhZGllbnQgYmFja2dyb3VuZAoJCQkJPC9kaXY+CgkJPC9kaXY+CgkJLS0+Cgk8L2Rpdj4KCgkKCTw/CgkkaHRtbCA9IG9iX2dldF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJ05vdmEnLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4=