LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKgogKiBDb250cmlidXRvcnM6CiAqICAgICBHYXJ5IEthcmFzaXVrIChJQk0gQ29ycG9yYXRpb24pIC0gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgogKiAgICAgSmVzcGVyIFN0ZWVuIE34bGxlciAtIGFkYXB0ZWQgZm9yIFhTTAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcudGVzdHM7CgppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OwppbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CmltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKCi8qKgogKiBTb21lIG1pc2NlbGxhbmVvdXMgaGVscGVyIG1ldGhvZHMuIAogKiBAYXV0aG9yIGthcmFzaXVrCiAqCiAqLwpwdWJsaWMgY2xhc3MgTWlzYyB7CgkKCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgX2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkhIOm1tOnNzLlNTU1MiKTsgLy8kTk9OLU5MUy0xJAoJCglwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UoSW5wdXRTdHJlYW0gaW4pewoJCWlmIChpbiA9PSBudWxsKXJldHVybjsKCQl0cnkgewoJCQlpbi5jbG9zZSgpOwoJCX0KCQljYXRjaCAoSU9FeGNlcHRpb24gZSl7CgkJCS8vIGVhdCBpdAoJCX0KCX0KCglwdWJsaWMgc3RhdGljIHZvaWQgY2xvc2UoT3V0cHV0U3RyZWFtIG91dCkgewoJCWlmIChvdXQgPT0gbnVsbClyZXR1cm47CgkJdHJ5IHsKCQkJb3V0LmNsb3NlKCk7CgkJfQoJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKXsKCQkJLy8gZWF0IGl0CgkJfQkJCgl9CgkKCS8qKgoJICogV3JpdGUgYSBsaW5lIHRvIHRoZSBjb25zb2xlIGZvciBkZWJ1Z2dpbmcuCgkgKiBAcGFyYW0gbGluZQoJICovCglwdWJsaWMgc3RhdGljIHZvaWQgbG9nKFN0cmluZyBsaW5lKXsKCQlTeXN0ZW0uZXJyLnByaW50bG4odGltZXN0YW1wSXQobGluZSkpOyAgCgl9CgkKCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcEl0KFN0cmluZyBsaW5lKXsKCQlEYXRlIGRhdGUgPSBuZXcgRGF0ZSgpOwoJCWxvbmcgdGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpOwoJCXJldHVybiBfZGYuZm9ybWF0KGRhdGUpICsgIiAiICsgdGhyZWFkICsgIiAiICsgbGluZTsvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbG9nKFN0cmluZ0J1ZmZlciBiKXsKCQlsb2coYi50b1N0cmluZygpKTsKCQliLnNldExlbmd0aCgwKTsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG5peShTdHJpbmcgbXNnKXsKCQlpZiAobXNnID09IG51bGwpbXNnID0gIlNvcnJ5LCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiOyAvLyROT04tTkxTLTEkCgkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obXNnKTsKCX0KCQp9Cg==