LyoqQ0ZpbGUqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogIEZpbGVOYW1lICAgIFtpbnQuaF0KCiAgU3lzdGVtTmFtZSAgW0FCQzogTG9naWMgc3ludGhlc2lzIGFuZCB2ZXJpZmljYXRpb24gc3lzdGVtLl0KCiAgUGFja2FnZU5hbWUgW0ludGVycG9sYXRpb24gZW5naW5lLl0KCiAgU3lub3BzaXMgICAgW0V4dGVybmFsIGRlY2xhcmF0aW9ucy5dCgogIEF1dGhvciAgICAgIFtBbGFuIE1pc2hjaGVua29dCiAgCiAgQWZmaWxpYXRpb24gW1VDIEJlcmtlbGV5XQoKICBEYXRlICAgICAgICBbVmVyLiAxLjAuIFN0YXJ0ZWQgLSBKdW5lIDI0LCAyMDA4Ll0KCiAgUmV2aXNpb24gICAgWyRJZDogaW50LmgsdiAxLjAwIDIwMDUvMDYvMjAgMDA6MDA6MDAgYWxhbm1pIEV4cCAkXQoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKI2lmbmRlZiBBQkNfX2FpZ19faW50X19pbnRfaAojZGVmaW5lIEFCQ19fYWlnX19pbnRfX2ludF9oCgoKLyogCiAgICBUaGUgaW50ZXJwb2xhdGlvbiBhbGdvcml0aG0gaW1wbGVtZW50ZWQgaGVyZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgcGFwZXI6CiAgICBLLiBMLiBNY01pbGxhbi4gSW50ZXJwb2xhdGlvbiBhbmQgU0FULWJhc2VkIG1vZGVsIGNoZWNraW5nLiBDQVaSMDMsIHBwLiAxLTEzLgoqLwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DTFVERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKCkFCQ19OQU1FU1BBQ0VfSEVBREVSX1NUQVJUCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICBCQVNJQyBUWVBFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vIHNpbXVsYXRpb24gbWFuYWdlcgp0eXBlZGVmIHN0cnVjdCBJbnRlcl9NYW5QYXJhbXNfdF8gSW50ZXJfTWFuUGFyYW1zX3Q7CnN0cnVjdCBJbnRlcl9NYW5QYXJhbXNfdF8KewogICAgaW50ICBuQlRMaW1pdDsgICAgICAvLyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNvbmZsaWN0cwogICAgaW50ICBuRnJhbWVzTWF4OyAgICAvLyB0aGUgbWF4IG51bWJlciB0aW1lZnJhbWVzIHRvIHVucm9sbAogICAgaW50ICBuU2VjTGltaXQ7ICAgICAvLyB0aW1lIGxpbWl0IGluIHNlY29uZHMKICAgIGludCAgbkZyYW1lc0s7ICAgICAgLy8gdGhlIG51bWJlciBvZiB0aW1lZnJhbWVzIHRvIHVzZSBpbiBpbmR1Y3Rpb24KICAgIGludCAgZlJld3JpdGU7ICAgICAgLy8gdXNlIGFkZGl0aW9uYWwgcmV3cml0aW5nIHRvIHNpbXBsaWZ5IHRpbWVmcmFtZXMKICAgIGludCAgZlRyYW5zTG9vcDsgICAgLy8gYWRkIHRyYW5zaXRpb24gaW50byB0aGUgaW5pdCBzdGF0ZSB1bmRlciBuZXcgUEkgdmFyCiAgICBpbnQgIGZVc2VQdWRsYWs7ICAgIC8vIHVzZSBQdWRsdWsgaW50ZXJwb2xhdGlvbiBwcm9jZWR1cmUKICAgIGludCAgZlVzZU90aGVyOyAgICAgLy8gdXNlIG90aGVyIHVuZGlzY2xvc2VkIG9wdGlvbgogICAgaW50ICBmVXNlTWluaVNhdDsgICAvLyB1c2UgTWluaVNhdC0xLjE0cCBpbnN0ZWFkIG9mIGludGVybmFsIHByb29mIGVuZ2luZQogICAgaW50ICBmQ2hlY2tLc3RlcDsgICAvLyBjaGVjayB1c2luZyBLLXN0ZXAgaW5kdWN0aW9uCiAgICBpbnQgIGZVc2VCaWFzOyAgICAgIC8vIGJpYXMgZGVjaXNpb25zIHRvIGdsb2JhbCB2YXJpYWJsZXMKICAgIGludCAgZlVzZUJhY2t3YXJkOyAgLy8gcGVyZm9ybSBiYWNrd2FyZCBpbnRlcnBvbGF0aW9uCiAgICBpbnQgIGZVc2VTZXBhcmF0ZTsgIC8vIHNvbHZlIGVhY2ggb3V0cHV0IHNlcGFyYXRlbHkKICAgIGludCAgZlVzZVR3b0ZyYW1lczsgLy8gY3JlYXRlIHRoZSBPUiBvZiB0d28gbGFzdCB0aW1lZnJhbWVzCiAgICBpbnQgIGZEcm9wU2F0T3V0czsgIC8vIHJlcGxhY2UgYnkgMSB0aGUgc29sdmVkIG91dHB1dHMKICAgIGludCAgZkRyb3BJbnZhcjsgICAgLy8gZHVtcCBpbmR1Y3RpdmUgaW52YXJpYW50IGludG8gZmlsZQogICAgaW50ICBmVmVyYm9zZTsgICAgICAvLyBwcmludCB2ZXJib3NlIHN0YXRpc3RpY3MKICAgIGludCAgaUZyYW1lTWF4OyAgICAgLy8gdGhlIHRpbWUgZnJhbWUgcmVhY2hlZAogICAgY2hhciAqIHBGaWxlTmFtZTsgICAvLyBmaWxlIG5hbWUgdG8gZHVtcCBpbnRlcnBvbGFudAp9OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgICBNQUNSTyBERUZJTklUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovKj09PSBpbnRDb3JlLmMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmV4dGVybiB2b2lkICAgICAgIEludGVyX01hblNldERlZmF1bHRQYXJhbXMoIEludGVyX01hblBhcmFtc190ICogcCApOwpleHRlcm4gaW50ICAgICAgICBJbnRlcl9NYW5QZXJmb3JtSW50ZXJwb2xhdGlvbiggQWlnX01hbl90ICogcEFpZywgSW50ZXJfTWFuUGFyYW1zX3QgKiBwUGFycywgaW50ICogcGlGcmFtZSApOwoKCgoKQUJDX05BTUVTUEFDRV9IRUFERVJfRU5ECgoKCiNlbmRpZgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg==