LyoqQ0ZpbGUqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogIEZpbGVOYW1lICAgIFtpbnQyLmhdCgogIFN5c3RlbU5hbWUgIFtBQkM6IExvZ2ljIHN5bnRoZXNpcyBhbmQgdmVyaWZpY2F0aW9uIHN5c3RlbS5dCgogIFBhY2thZ2VOYW1lIFtJbnRlcnBvbGF0aW9uIGVuZ2luZS5dCgogIFN5bm9wc2lzICAgIFtFeHRlcm5hbCBkZWNsYXJhdGlvbnMuXQoKICBBdXRob3IgICAgICBbQWxhbiBNaXNoY2hlbmtvXQogIAogIEFmZmlsaWF0aW9uIFtVQyBCZXJrZWxleV0KCiAgRGF0ZSAgICAgICAgW1Zlci4gMS4wLiBTdGFydGVkIC0gRGVjIDEsIDIwMTMuXQoKICBSZXZpc2lvbiAgICBbJElkOiBpbnQyLmgsdiAxLjAwIDIwMTMvMTIvMDEgMDA6MDA6MDAgYWxhbm1pIEV4cCAkXQoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKI2lmbmRlZiBBQkNfX2FpZ19faW50Ml9faW50X2gKI2RlZmluZSBBQkNfX2FpZ19faW50Ml9faW50X2gKCgovKiAKICAgIFRoZSBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSBpbXBsZW1lbnRlZCBoZXJlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBwYXBlcnM6CiAgICBLLiBMLiBNY01pbGxhbi4gSW50ZXJwb2xhdGlvbiBhbmQgU0FULWJhc2VkIG1vZGVsIGNoZWNraW5nLiBDQVaSMDMsIHBwLiAxLTEzLgogICAgQy4tWS4gV3UgZXQgYWwuIEEgQ0VYLUd1aWRlZCBJbnRlcnBvbGFudCBHZW5lcmF0aW9uIEFsZ29yaXRobSBmb3IgCiAgICBTQVQtYmFzZWQgTW9kZWwgQ2hlY2tpbmcuIERBQycxMy4KKi8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vICAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCgpBQkNfTkFNRVNQQUNFX0hFQURFUl9TVEFSVAoKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gICAgICAgICAgICAgICAgICAgICAgICAgQkFTSUMgVFlQRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLyBzaW11bGF0aW9uIG1hbmFnZXIKdHlwZWRlZiBzdHJ1Y3QgSW50Ml9NYW5QYXJzX3RfIEludDJfTWFuUGFyc190OwpzdHJ1Y3QgSW50Ml9NYW5QYXJzX3RfCnsKICAgIGludCAgICAgbkJUTGltaXQ7ICAgICAgIC8vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY29uZmxpY3RzCiAgICBpbnQgICAgIG5GcmFtZXNTOyAgICAgICAvLyB0aGUgc3RhcnRpbmcgbnVtYmVyIHRpbWVmcmFtZXMKICAgIGludCAgICAgbkZyYW1lc01heDsgICAgIC8vIHRoZSBtYXggbnVtYmVyIHRpbWVmcmFtZXMgdG8gdW5yb2xsCiAgICBpbnQgICAgIG5TZWNMaW1pdDsgICAgICAvLyB0aW1lIGxpbWl0IGluIHNlY29uZHMKICAgIGludCAgICAgbkZyYW1lc0s7ICAgICAgIC8vIHRoZSBudW1iZXIgb2YgdGltZWZyYW1lcyB0byB1c2UgaW4gaW5kdWN0aW9uCiAgICBpbnQgICAgIGZSZXdyaXRlOyAgICAgICAvLyB1c2UgYWRkaXRpb25hbCByZXdyaXRpbmcgdG8gc2ltcGxpZnkgdGltZWZyYW1lcwogICAgaW50ICAgICBmVHJhbnNMb29wOyAgICAgLy8gYWRkIHRyYW5zaXRpb24gaW50byB0aGUgaW5pdCBzdGF0ZSB1bmRlciBuZXcgUEkgdmFyCiAgICBpbnQgICAgIGZEcm9wSW52YXI7ICAgICAvLyBkdW1wIGluZHVjdGl2ZSBpbnZhcmlhbnQgaW50byBmaWxlCiAgICBpbnQgICAgIGZWZXJib3NlOyAgICAgICAvLyBwcmludCB2ZXJib3NlIHN0YXRpc3RpY3MKICAgIGludCAgICAgaUZyYW1lTWF4OyAgICAgIC8vIHRoZSB0aW1lIGZyYW1lIHJlYWNoZWQKICAgIGNoYXIgKiAgcEZpbGVOYW1lOyAgICAgIC8vIGZpbGUgbmFtZSB0byBkdW1wIGludGVycG9sYW50Cn07CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vICAgICAgICAgICAgICAgICAgICAgIE1BQ1JPIERFRklOSVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8qPT09IGludENvcmUuYyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZXh0ZXJuIHZvaWQgICAgICAgSW50Ml9NYW5TZXREZWZhdWx0UGFyYW1zKCBJbnQyX01hblBhcnNfdCAqIHAgKTsKZXh0ZXJuIGludCAgICAgICAgSW50Ml9NYW5QZXJmb3JtSW50ZXJwb2xhdGlvbiggR2lhX01hbl90ICogcCwgSW50Ml9NYW5QYXJzX3QgKiBwUGFycyApOwoKCgoKQUJDX05BTUVTUEFDRV9IRUFERVJfRU5ECgoKCiNlbmRpZgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyAgICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIEZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg==