LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgICAgQ29weXJpZ2h0IKkgMTk5NSwgMTk5NiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBNYXluYXJkLCBNYXNzYWNodXNldHRzLgoKICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAoKUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIApkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkICAKdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyAgCm9mIHNvZnR3YXJlIGFuZCBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIERpZ2l0YWwgbm90ICAKYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIAp3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIERpZ2l0YWwgZ3JhbnRzIHRoaXMgcGVybWlzc2lvbiAKcHJvdmlkZWQgdGhhdCB5b3UgcHJvbWluZW50bHkgbWFyaywgYXMgbm90IHBhcnQgb2YgdGhlIG9yaWdpbmFsLCBhbnkgCm1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGlzIHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24uCgpEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMgYW5kL29yIGd1YXJhbnRlZXMgIAp3aXRoIHJlZ2FyZCB0byB0aGlzIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBmaXRuZXNzIGZvciAKYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG1lcmNoYW50YWJpbGl0eSwgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyAKcmVnYXJkaW5nIHRoZSB1c2Ugb2YsIG9yIHRoZSByZXN1bHRzIG9mIHRoZSB1c2Ugb2YsIHRoZSBzb2Z0d2FyZSBhbmQgCmRvY3VtZW50YXRpb24gaW4gdGVybXMgb2YgY29ycmVjdG5lc3MsIGFjY3VyYWN5LCByZWxpYWJpbGl0eSwgY3VycmVudG5lc3Mgb3IKb3RoZXJ3aXNlOyBhbmQgeW91IHJlbHkgb24gdGhlIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIGFuZCByZXN1bHRzIHNvbGVseSBhdCAKeW91ciBvd24gcmlzay4gCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBkYXZpZC5ydXNsaW5nQHJlby5tdHMuZGVjLmNvbQogKgogKiBNb2RpZmllZCBmb3IgUUVNVSBQQUxjb2RlIGJ5IHJ0aEB0d2lkZGxlLm5ldC4KICovCgojaW5jbHVkZSAicHJvdG9zLmgiCiNpbmNsdWRlICJ1YXJ0LmgiCgojaWZuZGVmIFNFUklBTF9TUEVFRAojZGVmaW5lIFNFUklBTF9TUEVFRCA5NjAwCiNlbmRpZgoKaW50CnVhcnRfY2hhcmF2KGludCBvZmZzZXQpCnsKCXJldHVybiBpbmIoY29tMkxzciArIG9mZnNldCkgJiAxOwp9CgppbnQKdWFydF9nZXRjaGFyKGludCBvZmZzZXQpCnsKCXdoaWxlICghdWFydF9jaGFyYXYob2Zmc2V0KSkKCQljb250aW51ZTsKCXJldHVybiBpbmIoY29tMlJiciArIG9mZnNldCk7Cn0KCnN0YXRpYyB2b2lkCnVhcnRfcHV0Y2hhcl9yYXcoaW50IG9mZnNldCwgY2hhciBjKQp7Cgl3aGlsZSAoKGluYihjb20yTHNyICsgb2Zmc2V0KSAmIDB4MjApID09IDApCgkJY29udGludWU7CglvdXRiKGMsIGNvbTJUaHIgKyBvZmZzZXQpOwp9Cgp2b2lkCnVhcnRfcHV0Y2hhcihpbnQgb2Zmc2V0LCBjaGFyIGMpCnsKCWlmIChjID09ICdcbicpCgkJdWFydF9wdXRjaGFyX3JhdyhvZmZzZXQsICdccicpOwoJdWFydF9wdXRjaGFyX3JhdyhvZmZzZXQsIGMpOwp9Cgp2b2lkCnVhcnRfcHV0cyhpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICpzKQp7Cgl3aGlsZSAoKnMgIT0gJ1wwJykKCQl1YXJ0X3B1dGNoYXIob2Zmc2V0LCAqcysrKTsKfQoKc3RhdGljIHZvaWQKdWFydF9pbml0X2xpbmUoaW50IG9mZnNldCwgaW50IGJhdWQpCnsKCWludCBpOwoJaW50IGJhdWRjb25zdDsKCglzd2l0Y2ggKGJhdWQpIHsKCWNhc2UgNTYwMDA6CgkJYmF1ZGNvbnN0ID0gMjsKCQlicmVhazsKCWNhc2UgMzg0MDA6CgkJYmF1ZGNvbnN0ID0gMzsKCQlicmVhazsKCWNhc2UgMTkyMDA6CgkJYmF1ZGNvbnN0ID0gNjsKCQlicmVhazsKCWNhc2UgOTYwMDoKCQliYXVkY29uc3QgPSAxMjsKCQlicmVhazsKCWNhc2UgNDgwMDoKCQliYXVkY29uc3QgPSAyNDsKCQlicmVhazsKCWNhc2UgMjQwMDoKCQliYXVkY29uc3QgPSA0ODsKCQlicmVhazsKCWNhc2UgMTIwMDoKCQliYXVkY29uc3QgPSA5NjsKCQlicmVhazsKCWNhc2UgMzAwOgoJCWJhdWRjb25zdCA9IDM4NDsKCQlicmVhazsKCWNhc2UgMTUwOgoJCWJhdWRjb25zdCA9IDc2ODsKCQlicmVhazsKCWRlZmF1bHQ6CgkJYmF1ZGNvbnN0ID0gMTI7CgkJYnJlYWs7Cgl9CgoKCW91dGIoMHg4NywgY29tMkxjciArIG9mZnNldCk7CglvdXRiKDAsIGNvbTJEbG0gKyBvZmZzZXQpOwoJb3V0YihiYXVkY29uc3QsIGNvbTJEbGwgKyBvZmZzZXQpOwoJb3V0YigweDA3LCBjb20yTGNyICsgb2Zmc2V0KTsKCW91dGIoMHgwRiwgY29tMk1jciArIG9mZnNldCk7CgoJZm9yIChpID0gMTA7IGkgPiAwOyBpLS0pIHsKCQlpZiAoaW5iKGNvbTJMc3IgKyBvZmZzZXQpID09IDApCgkJCWJyZWFrOwoJCWluYihjb20yUmJyICsgb2Zmc2V0KTsKCX0KfQoKdm9pZCB1YXJ0X2luaXQodm9pZCkKewoJdWFydF9pbml0X2xpbmUoQ09NMSwgU0VSSUFMX1NQRUVEKTsKCXVhcnRfaW5pdF9saW5lKENPTTIsIFNFUklBTF9TUEVFRCk7Cn0K