From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Christina Fu To: git-commits@fedoraproject.org Subject: [rpms/jss] pqc: Resolves: rhbz #1074208,1331596 Date: Tue, 28 Jul 2026 16:48:27 GMT Message-ID: <178525730740.1.4210482625406172463.rpms-jss-94b8206fde24@fedoraproject.org> List-ID: X-Git-Repo: rpms/jss X-Git-Branch: pqc X-Git-Rev: 94b8206fde24bc109d2fe5217484c8d3af7905a2 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvanNzCiAgICAgICAgICAgIEJyYW5jaCA6IHBxYwogICAgICAgICAgICBDb21t aXQgOiA5NGI4MjA2ZmRlMjRiYzEwOWQyZmU1MjE3NDg0YzhkM2FmNzkwNWEyCiAgICAgICAgICAg IEF1dGhvciA6IENocmlzdGluYSBGdSA8Y2Z1QHJlZGhhdC5jb20+CiAgICAgICAgICAgIERhdGUg ICA6IDIwMTYtMDUtMTlUMTQ6MDE6MTQtMDc6MDAKICAgICAgICAgICAgU3RhdHMgIDogKzIwODkv LTQgaW4gNCBmaWxlKHMpCiAgICAgICAgICAgIFVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXBy b2plY3Qub3JnL3JwbXMvanNzL2MvOTRiODIwNmZkZTI0YmMxMDlkMmZlNTIxNzQ4NGM4ZDNhZjc5 MDVhMj9icmFuY2g9cHFjCgogICAgICAgICAgICBMb2c6CiAgICAgICAgICAgIFJlc29sdmVzOiBy aGJ6ICMxMDc0MjA4LDEzMzE1OTYKCi1QS0kgVGlja2V0ICM4MDEKCi0tLQpkaWZmIC0tZ2l0IGEv anNzLVZlcmlmeUNlcnRpZmljYXRlLWVuaGFuY2VtZW50LnBhdGNoIGIvanNzLVZlcmlmeUNlcnRp ZmljYXRlLWVuaGFuY2VtZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjY1ODJiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9qc3MtVmVyaWZ5Q2VydGlmaWNhdGUtZW5o YW5jZW1lbnQucGF0Y2gKQEAgLTAsMCArMSwyMDQgQEAKK0Zyb20gM2M0Y2E4YTIwMTA4ODlmZTI5 MjcwNGViY2M4YjkyMmY3N2YyZjdjMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJF bmRpIFMuIERld2F0YSIgPGVkZXdhdGFAcmVkaGF0LmNvbT4KK0RhdGU6IFdlZCwgOSBEZWMgMjAx NSAwMDozMDo1MCArMDEwMAorU3ViamVjdDogW1BBVENIXSBBZGRlZCB2ZXJpZnlDZXJ0aWZpY2F0 ZSgpIG1ldGhvZC4KKworQSBuZXcgQ3J5cHRvTWFuYWdlci52ZXJpZnlDZXJ0aWZpY2F0ZSgpIG1l dGhvZCBoYXMgYmVlbiBhZGRlZCBhcworYW4gYWx0ZXJuYXRpdmUgdG8gaXNDZXJ0VmFsaWQoKS4g SWYgdGhlcmUgaXMgYSBjZXJ0aWZpY2F0ZQordmFsaWRhdGlvbiBwcm9ibGVtLCB0aGUgbWV0aG9k IHdpbGwgdGhyb3cgYSBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24KK2V4Y2VwdGlvbiB0aGF0IGNvbnRh aW5zIHRoZSBOU1MgZXJyb3IgbWVzc2FnZSBhbmQgY29kZS4gVGhlCitleGNlcHRpb24gd2lsbCBh bHNvIHByb3ZpZGUgYSBzdGFjayB0cmFjZSB0byBoZWxwIHRyb3VibGVzaG9vdAordmFsaWRhdGlv biBpc3N1ZXMuCisKK2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9wa2kvdGlja2V0Lzg1MAorLS0t CisgLi4uL2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhICAgICAgICAgfCA1 NCArKysrKysrKy0tLS0tLQorIG1vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9Q SzExRmluZGVyLmMgIHwgODMgKysrKysrKysrKysrKysrKysrKy0tLQorIC4uLi9qc3Mvb3JnL21v emlsbGEvanNzL3V0aWwvanNzX2V4Y2VwdGlvbnMuaCAgICAgIHwgIDIgKworIDMgZmlsZXMgY2hh bmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEv bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL0NyeXB0b01hbmFnZXIuamF2YSBi L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9DcnlwdG9NYW5hZ2VyLmphdmEK K2luZGV4IDBhNGY1OTA2NGJmZGRiNDJkNDczMDIyNTUwYzI0ZjI1MTcxOWQwMmIuLjU0ZmZkODEz MGIwZTFmMWZjYTQ5ZGQ4YjEzMGE2MjFlNDQ5YzdjZTcgMTAwNjQ0CistLS0gYS9tb3ppbGxhL3Nl Y3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhCisrKysgYi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvQ3J5cHRvTWFuYWdlci5qYXZhCitAQCAt MTUxNSwzMCArMTUxNSw0NCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgQ3J5cHRvTWFuYWdlciBpbXBs ZW1lbnRzIFRva2VuU3VwcGxpZXIKKyAgICAgICAgICAgICBDZXJ0aWZpY2F0ZVVzYWdlIGNlcnRp ZmljYXRlVXNhZ2UpCisgICAgICAgICB0aHJvd3MgT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24sIElu dmFsaWROaWNrbmFtZUV4Y2VwdGlvbgorICAgICB7CistICAgICAgICBpZiAobmlja25hbWU9PW51 bGwpIHsKKy0gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE5pY2tuYW1lRXhjZXB0aW9uKCJO aWNrbmFtZSBtdXN0IGJlIG5vbi1udWxsIik7CistICAgICAgICB9CistICAgICAgICAvLyAwIGNl cnRpZmljYXRlIHVzYWdlIHdpbGwgZ2V0IGN1cnJlbnQgdXNhZ2UKKy0gICAgICAgIC8vIHNob3Vs ZCBjYWxsIGlzQ2VydFZhbGlkKCkgY2FsbCBhYm92ZSB0aGF0IHJldHVybnMgY2VydGlmaWNhdGUg dXNhZ2UKKy0gICAgICAgIGlmICgoY2VydGlmaWNhdGVVc2FnZSA9PSBudWxsKSB8fAorLSAgICAg ICAgICAgICAgICAoY2VydGlmaWNhdGVVc2FnZSA9PSBDZXJ0aWZpY2F0ZVVzYWdlLkNoZWNrQWxs VXNhZ2VzKSl7CistICAgICAgICAgICAgaW50IGN1cnJDZXJ0aWZpY2F0ZVVzYWdlID0gMHgwMDAw OworLSAgICAgICAgICAgIGN1cnJDZXJ0aWZpY2F0ZVVzYWdlID0gdmVyaWZ5Q2VydGlmaWNhdGVO b3dDVU5hdGl2ZShuaWNrbmFtZSwKKy0gICAgICAgICAgICAgICAgY2hlY2tTaWcpOworKyAgICAg ICAgdHJ5IHsKKysgICAgICAgICAgICB2ZXJpZnlDZXJ0aWZpY2F0ZShuaWNrbmFtZSwgY2hlY2tT aWcsIGNlcnRpZmljYXRlVXNhZ2UpOworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAg ICAgICAgfSBjYXRjaCAoT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gfCBJbnZhbGlkTmlja25hbWVF eGNlcHRpb24gZSkgeworKyAgICAgICAgICAgIHRocm93IGU7CisgCistICAgICAgICAgICAgaWYg KGN1cnJDZXJ0aWZpY2F0ZVVzYWdlID09IENlcnRpZmljYXRlVXNhZ2UuYmFzaWNDZXJ0aWZpY2F0 ZVVzYWdlcyl7IAorLSAgICAgICAgICAgICAgICAvLyBjZXJ0IGlzIGdvb2QgZm9yIG5vdGhpbmcK Ky0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICAgICAgICAgIH0gZWxzZQorLSAg ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAg ICAgcmV0dXJuIHZlcmlmeUNlcnRpZmljYXRlTm93TmF0aXZlKG5pY2tuYW1lLCBjaGVja1NpZywK Ky0gICAgICAgICAgICAgIGNlcnRpZmljYXRlVXNhZ2UuZ2V0VXNhZ2UoKSk7CisrICAgICAgICB9 IGNhdGNoIChDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiBlKSB7CisrICAgICAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgICAgfQorICAgICB9CisgCistICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4g dmVyaWZ5Q2VydGlmaWNhdGVOb3dOYXRpdmUoU3RyaW5nIG5pY2tuYW1lLAorLSAgICAgICAgYm9v bGVhbiBjaGVja1NpZywgaW50IGNlcnRpZmljYXRlVXNhZ2UpIHRocm93cyBPYmplY3ROb3RGb3Vu ZEV4Y2VwdGlvbjsKKysgICAgLyoqCisrICAgICAqIFZlcmlmeSBhIGNlcnRpZmljYXRlIHRoYXQg ZXhpc3RzIGluIHRoZSBnaXZlbiBjZXJ0IGRhdGFiYXNlLAorKyAgICAgKiBjaGVjayBpZiBpdCdz IHZhbGlkIGFuZCB0aGF0IHdlIHRydXN0IHRoZSBpc3N1ZXIuIFZlcmlmeSB0aW1lCisrICAgICAq IGFnYWluc3Qgbm93LgorKyAgICAgKiBAcGFyYW0gbmlja25hbWUgbmlja25hbWUgb2YgdGhlIGNl cnRpZmljYXRlIHRvIHZlcmlmeS4KKysgICAgICogQHBhcmFtIGNoZWNrU2lnIHZlcmlmeSB0aGUg c2lnbmF0dXJlIG9mIHRoZSBjZXJ0aWZpY2F0ZQorKyAgICAgKiBAcGFyYW0gY2VydGlmaWNhdGVV c2FnZSBzZWUgY2VydGlmaWNhdGUgdXNhZ2UgZGVmaW5lZCB0byB2ZXJpZnkgY2VydGlmaWNhdGUK KysgICAgICoKKysgICAgICogQGV4Y2VwdGlvbiBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24gSWYg dGhlIG5pY2tuYW1lIGlzIG51bGwuCisrICAgICAqIEBleGNlcHRpb24gT2JqZWN0Tm90Rm91bmRF eGNlcHRpb24gSWYgbm8gY2VydGlmaWNhdGUgY291bGQgYmUgZm91bmQKKysgICAgICogICAgICB3 aXRoIHRoZSBnaXZlbiBuaWNrbmFtZS4KKysgICAgICogQGV4Y2VwdGlvbiBDZXJ0aWZpY2F0ZUV4 Y2VwdGlvbiBJZiBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkLgorKyAgICAgKi8KKysgICAgcHVibGlj IHZvaWQgdmVyaWZ5Q2VydGlmaWNhdGUoU3RyaW5nIG5pY2tuYW1lLAorKyAgICAgICAgICAgIGJv b2xlYW4gY2hlY2tTaWcsCisrICAgICAgICAgICAgQ2VydGlmaWNhdGVVc2FnZSBjZXJ0aWZpY2F0 ZVVzYWdlKQorKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIE9iamVjdE5vdEZvdW5kRXhjZXB0 aW9uLCBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24sIENlcnRpZmljYXRlRXhjZXB0aW9uIHsKKysg ICAgICAgIGludCB1c2FnZSA9IGNlcnRpZmljYXRlVXNhZ2UgPT0gbnVsbCA/IDAgOiBjZXJ0aWZp Y2F0ZVVzYWdlLmdldFVzYWdlKCk7CisrICAgICAgICB2ZXJpZnlDZXJ0aWZpY2F0ZU5vd05hdGl2 ZShuaWNrbmFtZSwgY2hlY2tTaWcsIHVzYWdlKTsKKysgICAgfQorKworKyAgICBwcml2YXRlIG5h dGl2ZSB2b2lkIHZlcmlmeUNlcnRpZmljYXRlTm93TmF0aXZlKAorKyAgICAgICAgICAgIFN0cmlu ZyBuaWNrbmFtZSwKKysgICAgICAgICAgICBib29sZWFuIGNoZWNrU2lnLAorKyAgICAgICAgICAg IGludCBjZXJ0aWZpY2F0ZVVzYWdlKQorKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIE9iamVj dE5vdEZvdW5kRXhjZXB0aW9uLCBJbnZhbGlkTmlja25hbWVFeGNlcHRpb24sIENlcnRpZmljYXRl RXhjZXB0aW9uOworIAorICAgICAvKioKKyAgICAgICogbm90ZTogdGhpcyBtZXRob2QgY2FsbHMg b2Jzb2xldGUgZnVuY3Rpb24gaW4gTlNTCitkaWZmIC0tZ2l0IGEvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL1BLMTFGaW5kZXIuYyBiL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9QSzExRmluZGVyLmMKK2luZGV4IDhjN2YwYjRjMDViNTg1MjdhNDFjYWMx NDBkYmI1ZGMzMDU3ODU3MGYuLjQ5ODY0NzhmZmM4NjBlMTQ1Y2QzMWU0MWMyODgwZmNjMmI1ZTAw N2UgMTAwNjQ0CistLS0gYS9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsx MUZpbmRlci5jCisrKysgYi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvUEsx MUZpbmRlci5jCitAQCAtMTY2NywyMSArMTY2Nyw4NiBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19D cnlwdG9NYW5hZ2VyX3ZlcmlmeUNlcnRpZmljYXRlTm93Q1VOYXRpdmUoSk5JRW52ICplbnYsCisg LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgICogQ3J5cHRvTWFuYWdlci52ZXJpZnlDZXJ0aWZpY2F0ZU5vd05h dGl2ZQorICAqCistICogUmV0dXJucyBKTklfVFJVRSBpZiBzdWNjZXNzLCBKTklfRkFMU0Ugb3Ro ZXJ3aXNlCisrICogVmVyaWZ5IGEgY2VydGlmaWNhdGUgdGhhdCBleGlzdHMgaW4gdGhlIGdpdmVu IGNlcnQgZGF0YWJhc2UsCisrICogY2hlY2sgaWYgaXQncyB2YWxpZCBhbmQgdGhhdCB3ZSB0cnVz dCB0aGUgaXNzdWVyLiBWZXJpZnkgdGltZQorKyAqIGFnYWluc3Qgbm93LgorKyAqIEBwYXJhbSBu aWNrbmFtZSBuaWNrbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUgdG8gdmVyaWZ5LgorKyAqIEBwYXJh bSBjaGVja1NpZyB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiB0aGUgY2VydGlmaWNhdGUKKysgKiBA cGFyYW0gY2VydGlmaWNhdGVVc2FnZSBzZWUgY2VydGlmaWNhdGUgdXNhZ2UgZGVmaW5lZCB0byB2 ZXJpZnkgY2VydGlmaWNhdGUKKysgKgorKyAqIEBleGNlcHRpb24gSW52YWxpZE5pY2tuYW1lRXhj ZXB0aW9uIElmIHRoZSBuaWNrbmFtZSBpcyBudWxsLgorKyAqIEBleGNlcHRpb24gT2JqZWN0Tm90 Rm91bmRFeGNlcHRpb24gSWYgbm8gY2VydGlmaWNhdGUgY291bGQgYmUgZm91bmQKKysgKiAgICAg IHdpdGggdGhlIGdpdmVuIG5pY2tuYW1lLgorKyAqIEBleGNlcHRpb24gQ2VydGlmaWNhdGVFeGNl cHRpb24gSWYgY2VydGlmaWNhdGUgaXMgaW52YWxpZC4KKyAgKi8KKy1KTklFWFBPUlQgamJvb2xl YW4gSk5JQ0FMTAorK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwKKyBKYXZhX29yZ19tb3ppbGxhX2pz c19DcnlwdG9NYW5hZ2VyX3ZlcmlmeUNlcnRpZmljYXRlTm93TmF0aXZlKEpOSUVudiAqZW52LAor LSAgICAgICAgam9iamVjdCBzZWxmLCBqc3RyaW5nIG5pY2tTdHJpbmcsIGpib29sZWFuIGNoZWNr U2lnLCBqaW50IHJlcXVpcmVkX2NlcnRpZmljYXRlVXNhZ2UpCisrICAgICAgICBqb2JqZWN0IHNl bGYsIGpzdHJpbmcgbmlja1N0cmluZywgamJvb2xlYW4gY2hlY2tTaWcsIGppbnQgY2VydGlmaWNh dGVVc2FnZSkKKyB7CistICAgIFNFQ1N0YXR1cyAgICAgICAgIHJ2ICAgID0gU0VDRmFpbHVyZTsK KyAgICAgU0VDQ2VydGlmaWNhdGVVc2FnZSAgICAgIGN1cnJVc2FnZSA9IDB4MDAwMDsKKysgICAg U0VDU3RhdHVzICAgICAgICAgICAgICAgIHJ2ID0gU0VDRmFpbHVyZTsKKysgICAgQ0VSVENlcnRp ZmljYXRlICAgICAgICAgICpjZXJ0ID0gTlVMTDsKKysgICAgY2hhciAgICAgICAgICAgICAgICAg ICAgICpuaWNrbmFtZSA9IE5VTEw7CisgCistICAgIHJ2ID0gdmVyaWZ5Q2VydGlmaWNhdGVOb3co ZW52LCBzZWxmLCBuaWNrU3RyaW5nLCBjaGVja1NpZywgcmVxdWlyZWRfY2VydGlmaWNhdGVVc2Fn ZSwgJmN1cnJVc2FnZSk7CisrICAgIGlmIChuaWNrU3RyaW5nID09IE5VTEwpIHsKKysgICAgICAg IEpTU190aHJvd01zZyhlbnYsIElOVkFMSURfTklDS05BTUVfRVhDRVBUSU9OLCAiTWlzc2luZyBj ZXJ0aWZpY2F0ZSBuaWNrbmFtZSIpOworKyAgICAgICAgZ290byBmaW5pc2g7CisrICAgIH0KKyAK Ky0gICAgaWYoIHJ2ID09IFNFQ1N1Y2Nlc3MpIHsKKy0gICAgICAgIHJldHVybiBKTklfVFJVRTsK Ky0gICAgfSBlbHNlIHsKKy0gICAgICAgIHJldHVybiBKTklfRkFMU0U7CisrICAgIG5pY2tuYW1l ID0gKGNoYXIgKikgKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIG5pY2tTdHJpbmcsIE5V TEwpOworKworKyAgICBpZiAobmlja25hbWUgPT0gTlVMTCkgeworKyAgICAgICAgSlNTX3Rocm93 TXNnKGVudiwgSU5WQUxJRF9OSUNLTkFNRV9FWENFUFRJT04sICJNaXNzaW5nIGNlcnRpZmljYXRl IG5pY2tuYW1lIik7CisrICAgICAgICBnb3RvIGZpbmlzaDsKKysgICAgfQorKworKyAgICBjZXJ0 ID0gQ0VSVF9GaW5kQ2VydEJ5Tmlja25hbWUoQ0VSVF9HZXREZWZhdWx0Q2VydERCKCksIG5pY2tu YW1lKTsKKysKKysgICAgaWYgKGNlcnQgPT0gTlVMTCkgeworKyAgICAgICAgY2hhciAqbXNnQnVm OworKyAgICAgICAgbXNnQnVmID0gUFJfc21wcmludGYoIkNlcnRpZmljYXRlIG5vdCBmb3VuZDog JXMiLCBuaWNrbmFtZSk7CisrICAgICAgICBKU1NfdGhyb3dNc2coZW52LCBPQkpFQ1RfTk9UX0ZP VU5EX0VYQ0VQVElPTiwgbXNnQnVmKTsKKysgICAgICAgIFBSX0ZyZWUobXNnQnVmKTsKKysgICAg ICAgIGdvdG8gZmluaXNoOworKyAgICB9CisrCisrICAgIC8qIDAgZm9yIGNlcnRpZmljYXRlVXNh Z2UgaW4gY2FsbCB0byBDRVJUX1ZlcmlmeUNlcnRpZmljYXRlTm93IHdpbGwKKysgICAgICogcmV0 cmlldmUgdGhlIGN1cnJlbnQgdmFsaWQgdXNhZ2UgaW50byBjdXJyVXNhZ2UKKysgICAgICovCisr ICAgIHJ2ID0gQ0VSVF9WZXJpZnlDZXJ0aWZpY2F0ZU5vdyhDRVJUX0dldERlZmF1bHRDZXJ0REIo KSwgY2VydCwKKysgICAgICAgIGNoZWNrU2lnLCBjZXJ0aWZpY2F0ZVVzYWdlLCBOVUxMLCAmY3Vy clVzYWdlKTsKKysKKysgICAgaWYgKHJ2ICE9IFNFQ1N1Y2Nlc3MpIHsKKysgICAgICAgIEpTU190 aHJvd01zZ1ByRXJyKGVudiwgQ0VSVElGSUNBVEVfRVhDRVBUSU9OLCAiSW52YWxpZCBjZXJ0aWZp Y2F0ZSIpOworKyAgICAgICAgZ290byBmaW5pc2g7CisrICAgIH0KKysKKysgICAgaWYgKChjZXJ0 aWZpY2F0ZVVzYWdlID09IDB4MDAwMCkgJiYKKysgICAgICAgIChjdXJyVXNhZ2UgPT0KKysgICAg ICAgICAgICAoIGNlcnRVc2FnZVVzZXJDZXJ0SW1wb3J0IHwKKysgICAgICAgICAgICBjZXJ0VXNh Z2VWZXJpZnlDQSB8CisrICAgICAgICAgICAgY2VydFVzYWdlUHJvdGVjdGVkT2JqZWN0U2lnbmVy IHwKKysgICAgICAgICAgICBjZXJ0VXNhZ2VBbnlDQSApKSkgeworKworKyAgICAgICAgLyogVGhl IGNlcnRpZmljYXRlIGlzIGdvb2QgZm9yIG5vdGhpbmcuCisrICAgICAgICAgKiBUaGUgZm9sbG93 aW5nIHVzYWdlcyBjYW5ub3QgYmUgdmVyaWZpZWQ6CisrICAgICAgICAgKiAgIGNlcnRVc2FnZUFu eUNBCisrICAgICAgICAgKiAgIGNlcnRVc2FnZVByb3RlY3RlZE9iamVjdFNpZ25lcgorKyAgICAg ICAgICogICBjZXJ0VXNhZ2VVc2VyQ2VydEltcG9ydAorKyAgICAgICAgICogICBjZXJ0VXNhZ2VW ZXJpZnlDQQorKyAgICAgICAgICogICAoMHgwYjgwKQorKyAgICAgICAgICovCisrCisrICAgICAg ICBKU1NfdGhyb3dNc2dQckVycihlbnYsIENFUlRJRklDQVRFX0VYQ0VQVElPTiwgIlVudXNhYmxl IGNlcnRpZmljYXRlIik7CisrICAgICAgICBnb3RvIGZpbmlzaDsKKysgICAgfQorKworK2Zpbmlz aDoKKysgICAgaWYgKG5pY2tuYW1lICE9IE5VTEwpIHsKKysgICAgICAgICgqZW52KS0+UmVsZWFz ZVN0cmluZ1VURkNoYXJzKGVudiwgbmlja1N0cmluZywgbmlja25hbWUpOworKyAgICB9CisrICAg IGlmIChjZXJ0ICE9IE5VTEwpIHsKKysgICAgICAgIENFUlRfRGVzdHJveUNlcnRpZmljYXRlKGNl cnQpOworICAgICB9CisgfQorIAorZGlmZiAtLWdpdCBhL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy91dGlsL2pzc19leGNlcHRpb25zLmggYi9tb3ppbGxhL3NlY3VyaXR5L2pz cy9vcmcvbW96aWxsYS9qc3MvdXRpbC9qc3NfZXhjZXB0aW9ucy5oCitpbmRleCA0ODg0OTI4MzA2 MjIzZmYwNjk5YTIyZTdkYTMzZTNkMTNhOTA0ZDM5Li5hY2QzMjlhNGVjZDM1OTJlYmUxZDcyYzdi ZGFjNDM1ZDg0ZGNhZTk5IDEwMDY0NAorLS0tIGEvbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3V0aWwvanNzX2V4Y2VwdGlvbnMuaAorKysrIGIvbW96aWxsYS9zZWN1cml0eS9q c3Mvb3JnL21vemlsbGEvanNzL3V0aWwvanNzX2V4Y2VwdGlvbnMuaAorQEAgLTc5LDYgKzc5LDgg QEAgUFJfQkVHSU5fRVhURVJOX0MKKyAKKyAjZGVmaW5lIElOVEVSUlVQVEVEX0lPX0VYQ0VQVElP TiAiamF2YS9pby9JbnRlcnJ1cHRlZElPRXhjZXB0aW9uIgorIAorKyNkZWZpbmUgSU5WQUxJRF9O SUNLTkFNRV9FWENFUFRJT04gIm9yZy9tb3ppbGxhL2pzcy91dGlsL0ludmFsaWROaWNrbmFtZUV4 Y2VwdGlvbiIKKysKKyAjZGVmaW5lIElOVkFMSURfS0VZX0ZPUk1BVF9FWENFUFRJT04gIm9yZy9t b3ppbGxhL2pzcy9jcnlwdG8vSW52YWxpZEtleUZvcm1hdEV4Y2VwdGlvbiIKKyAKKyAjZGVmaW5l IElOVkFMSURfUEFSQU1FVEVSX0VYQ0VQVElPTiAiamF2YS9zZWN1cml0eS9JbnZhbGlkUGFyYW1l dGVyRXhjZXB0aW9uIgorLS0gCisyLjUuMAorCgpkaWZmIC0tZ2l0IGEvanNzLWx1bmFzYVVud3Jh cC5wYXRjaCBiL2pzcy1sdW5hc2FVbndyYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNTAyMWJkNgotLS0gL2Rldi9udWxsCisrKyBiL2pzcy1sdW5hc2FVbndyYXAu cGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtdXAganNzLTQuMi42L21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuYy5jZnUganNzLTQu Mi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdy YXBwZXIuYworLS0tIGpzcy00LjIuNi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmMuY2Z1CTIwMTYtMDQtMjggMTY6NTA6MDYuMDAwMDAw MDAwIC0wNzAwCisrKysganNzLTQuMi42L21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuYwkyMDE2LTA0LTI4IDE2OjUwOjAwLjAwMDAwMDAw MCAtMDcwMAorQEAgLTQzNCw3ICs0MzQsNyBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFf UEsxMUtleVdyYXBwCisgICAgICAgICBpc1NlbnNpdGl2ZSA9IFBSX0ZBTFNFOworICAgICAgICAg aXNFeHRyYWN0YWJsZSA9IFBSX0ZBTFNFOworICAgICB9IGVsc2UgaWYgKCBpc0x1bmFzYSkgewor LSAgICAgICAgaXNTZW5zaXRpdmUgPSBQUl9GQUxTRTsKKysgICAgICAgIGlzU2Vuc2l0aXZlID0g UFJfVFJVRTsKKyAgICAgICAgIGlzRXh0cmFjdGFibGUgPSBQUl9UUlVFOworICAgICB9CisgCgpk aWZmIC0tZ2l0IGEvanNzLXN5bWtleS1lbmhhbmNlbWVudHMucGF0Y2ggYi9qc3Mtc3lta2V5LWVu aGFuY2VtZW50cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTk5 NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvanNzLXN5bWtleS1lbmhhbmNlbWVudHMucGF0Y2gKQEAg LTAsMCArMSwxODU1IEBACitkaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL2J1aWxkX2ph dmEucGwuam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9qc3MvYnVpbGRfamF2YS5wbAorLS0tIC4v bW96aWxsYS9zZWN1cml0eS9qc3MvYnVpbGRfamF2YS5wbC5qbWFnbmUJMjAxNi0wNC0xNCAxMzo1 NjoxNi45NDY5MjAyMzkgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL2J1aWxkX2ph dmEucGwJMjAxNi0wNC0xNCAxNDo1MzowOC41MDEyOTgwNjIgLTA3MDAKK0BAIC0zMSw3ICszMSw4 IEBAIG9yZy5tb3ppbGxhLmpzcy5wa2NzMTEuUEsxMU1lc3NhZ2VEaWdlc3QKKyBvcmcubW96aWxs YS5qc3MucGtjczExLlBLMTFQcml2S2V5ICAgCisgb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzEx UHViS2V5ICAgICAKKyBvcmcubW96aWxsYS5qc3MucGtjczExLlBLMTFTeW1LZXkgICAgICAKKy1v cmcubW96aWxsYS5qc3MucGtjczExLlBLMTFLZXlQYWlyR2VuZXJhdG9yIAorK29yZy5tb3ppbGxh Lmpzcy5wa2NzMTEuUEsxMUtleVBhaXJHZW5lcmF0b3IKKytvcmcubW96aWxsYS5qc3MucGtjczEx LlBLMTFTeW1tZXRyaWNLZXlEZXJpdmVyCisgb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzExS2V5 R2VuZXJhdG9yCisgb3JnLm1vemlsbGEuanNzLnBrY3MxMS5QSzExVG9rZW4KKyBvcmcubW96aWxs YS5qc3MucGtjczExLlByaXZhdGVLZXlQcm94eSAgCitkaWZmIC11cCAuL21vemlsbGEvc2VjdXJp dHkvanNzL2xpYi9qc3MuZGVmLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL2xpYi9qc3Mu ZGVmCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9saWIvanNzLmRlZi5qbWFnbmUJMjAxNi0w NC0xNCAxNjowMDowNi4yMjk1MzQyMjggLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNz L2xpYi9qc3MuZGVmCTIwMTYtMDQtMTQgMTY6MDA6MzIuMjI5MzU2MzE0IC0wNzAwCitAQCAtMTU4 LDYgKzE1OCw3IEBAIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExU3RvcmVfZGUKKyBK YXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVN0b3JlX2ltcG9ydFByaXZhdGVLZXk7Cisg SmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFTdG9yZV9wdXRDZXJ0c0luVmVjdG9yOwor IEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExU3RvcmVfcHV0S2V5c0luVmVjdG9yOwor K0phdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExU3RvcmVfcHV0U3ltS2V5c0luVmVjdG9y OworIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9TaWdDb250ZXh0UHJveHlfcmVsZWFzZU5h dGl2ZVJlc291cmNlczsKKyBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVJTQVB1Ymxp Y0tleV9nZXRNb2R1bHVzQnl0ZUFycmF5OworIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9Q SzExUlNBUHVibGljS2V5X2dldFB1YmxpY0V4cG9uZW50Qnl0ZUFycmF5OworQEAgLTMzNiw2ICsz MzcsOCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19DcnlwdG9NYW5hZ2VyX3ZlcmlmCisgSmF2YV9v cmdfbW96aWxsYV9qc3NfYXNuMV9BU04xVXRpbF9nZXRUYWdEZXNjcmlwdGlvbkJ5T2lkOworIEph dmFfb3JnX21vemlsbGFfanNzX3NzbF9Tb2NrZXRCYXNlX3NldFNTTFZlcnNpb25SYW5nZTsKKyBK YXZhX29yZ19tb3ppbGxhX2pzc19zc2xfU1NMU29ja2V0X3NldFNTTFZlcnNpb25SYW5nZURlZmF1 bHQ7CisrSmF2YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFTeW1tZXRyaWNLZXlEZXJpdmVy X25hdGl2ZURlcml2ZVN5bUtleTsKKytKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVN5 bUtleV9zZXROaWNrTmFtZU5hdGl2ZTsKKyA7KyAgICBsb2NhbDoKKyA7KyAgICAgICAqOworIDsr fTsKK2RpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0 by9BbGdvcml0aG0uYy5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvY3J5cHRvL0FsZ29yaXRobS5jCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5jLmptYWduZQkyMDE2LTA0LTE0IDE2OjAyOjM4LjEw ODQ5NDk0MCAtMDcwMAorKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L2NyeXB0by9BbGdvcml0aG0uYwkyMDE2LTA0LTE0IDE2OjAyOjQ3LjI0MzQzMjQzMSAtMDcwMAor QEAgLTExNCw2ICsxMTQsMTEgQEAgSlNTX0FsZ0luZm8gSlNTX0FsZ1RhYmxlW05VTV9BTEdTXSA9 IHsKKyAvKiA1MSAqLyAgICB7U0VDX09JRF9QS0NTNV9QQktERjIsIFNFQ19PSURfVEFHfSwKKyAv KiA1MiAqLyAgICB7U0VDX09JRF9QS0NTNV9QQkVTMiwgU0VDX09JRF9UQUd9LAorIC8qIDUzICov ICAgIHtTRUNfT0lEX1BLQ1M1X1BCTUFDMSwgU0VDX09JRF9UQUd9LAorKy8qIDU0ICovICAgIHtT RUNfT0lEX0hNQUNfU0hBMSxTRUNfT0lEX1RBR30sCisrLyogNTUgKi8gICAge1NFQ19PSURfSE1B Q19TSEEyMjQsU0VDX09JRF9UQUd9LAorKy8qIDU2ICovICAgIHtTRUNfT0lEX0hNQUNfU0hBMjU2 LFNFQ19PSURfVEFHfSwKKysvKiA1NyAqLyAgICB7U0VDX09JRF9ITUFDX1NIQTM4NCxTRUNfT0lE X1RBR30sCisrLyogNTggKi8gICAge1NFQ19PSURfSE1BQ19TSEE1MTIsU0VDX09JRF9UQUd9Cisg LyogUkVNRU1CRVIgVE8gVVBEQVRFIE5VTV9BTEdTISEhICovCisgfTsKKyAKK2RpZmYgLXVwIC4v bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0aG0uaC5q bWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29y aXRobS5oCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRv L0FsZ29yaXRobS5oLmptYWduZQkyMDE2LTA0LTE0IDExOjMwOjQxLjg3MTUxNzkyNiAtMDcwMAor KysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9BbGdvcml0 aG0uaAkyMDE2LTA0LTE0IDExOjMwOjU0LjkzMzQzNjg2MCAtMDcwMAorQEAgLTU2LDcgKzU2LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgSlNTX0FsZ0luZm9TdHIgeworICAgICBKU1NfQWxnVHlwZSB0eXBl OworIH0gSlNTX0FsZ0luZm87CisgCistI2RlZmluZSBOVU1fQUxHUyA1NAorKyNkZWZpbmUgTlVN X0FMR1MgNTkKKyAKKyBleHRlcm4gSlNTX0FsZ0luZm8gSlNTX0FsZ1RhYmxlW107CisgZXh0ZXJu IENLX1VMT05HIEpTU19zeW1rZXlVc2FnZVtdOworZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5 L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZhLmptYWduZSAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGhtLmphdmEKKy0t LSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQWxnb3JpdGht LmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTY6MDY6MTMuMzg4MDIxODEyIC0wNzAwCisrKysgLi9t b3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0FsZ29yaXRobS5qYXZh CTIwMTYtMDQtMTQgMTY6MDY6MjcuNTM3OTI0ODEzIC0wNzAwCitAQCAtMjM3LDUgKzIzNyw5IEBA IHB1YmxpYyBjbGFzcyBBbGdvcml0aG0geworICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIHNo b3J0IFNFQ19PSURfUEtDUzVfUEJLREYyPTUxOworICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFs IHNob3J0IFNFQ19PSURfUEtDUzVfUEJFUzI9NTI7CisgICAgIHByb3RlY3RlZCBzdGF0aWMgZmlu YWwgc2hvcnQgU0VDX09JRF9QS0NTNV9QQk1BQzE9NTM7CistCisrICAgIHByb3RlY3RlZCBzdGF0 aWMgZmluYWwgc2hvcnQgU0VDX09JRF9ITUFDX1NIQTE9NTQ7CisrICAgIHByb3RlY3RlZCBzdGF0 aWMgZmluYWwgc2hvcnQgU0VDX09JRF9ITUFDX1NIQTIyND01NTsKKysgICAgcHJvdGVjdGVkIHN0 YXRpYyBmaW5hbCBzaG9ydCBTRUNfT0lEX0hNQUNfU0hBMjU2PTU2OworKyAgICBwcm90ZWN0ZWQg c3RhdGljIGZpbmFsIHNob3J0IFNFQ19PSURfSE1BQ19TSEEzODQ9NTc7CisrICAgIHByb3RlY3Rl ZCBzdGF0aWMgZmluYWwgc2hvcnQgU0VDX09JRF9ITUFDX1NIQTUxMj01ODsKKyB9CitkaWZmIC11 cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ3J5cHRvU3Rv cmUuamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5 cHRvL0NyeXB0b1N0b3JlLmphdmEKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9jcnlwdG8vQ3J5cHRvU3RvcmUuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNzowMzoz My41MDQyOTgxNzYgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9jcnlwdG8vQ3J5cHRvU3RvcmUuamF2YQkyMDE2LTA0LTE0IDE3OjAzOjQyLjE5ODIzODEx MiAtMDcwMAorQEAgLTc1LDYgKzc1LDE4IEBAIHB1YmxpYyBpbnRlcmZhY2UgQ3J5cHRvU3RvcmUg eworICAgICBnZXRQcml2YXRlS2V5cygpIHRocm93cyBUb2tlbkV4Y2VwdGlvbjsKKyAKKyAgICAg LyoqCisrICAgICAqIFJldHVybnMgYWxsIHN5bW1ldHJpYyBrZXlzIHN0b3JlZCBvbiB0aGlzIHRv a2VuLgorKyAgICAgKgorKyAgICAgKiBAcmV0dXJuIEFuIGFycmF5IG9mIGFsbCBzeW1tZXRyaWMg a2V5cyBzdG9yZWQgb24gdGhpcyB0b2tlbi4KKysgICAgICogQGV4Y2VwdGlvbiBUb2tlbkV4Y2Vw dGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgb24gdGhlIHRva2VuIHdoaWxlCisrICAgICAqICAgICAg Z2F0aGVyaW5nIHRoZSBrZXlzLgorKyAgICAgKi8KKysgICAgcHVibGljIFN5bW1ldHJpY0tleVtd CisrICAgIGdldFN5bW1ldHJpY0tleXMoKSB0aHJvd3MgVG9rZW5FeGNlcHRpb247CisrCisrCisr CisrICAgIC8qKgorICAgICAgKiBEZWxldGVzIHRoZSBnaXZlbiBQcml2YXRlS2V5IGZyb20gdGhl IENyeXB0b1Rva2VuLgorICAgICAgKiBUaGlzIGlzIGEgdmVyeSBkYW5nZXJvdXMgY2FsbDogaXQg ZGVsZXRlcyB0aGUga2V5IGZyb20gdGhlIHVuZGVybHlpbmcKKyAgICAgICogdG9rZW4uIEFmdGVy IGNhbGxpbmcgdGhpcywgdGhlIFByaXZhdGVLZXkgcGFzc2VkIGluIG11c3Qgbm8gbG9uZ2VyCitk aWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vQ3J5 cHRvVG9rZW4uamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvY3J5cHRvL0NyeXB0b1Rva2VuLmphdmEKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9jcnlwdG8vQ3J5cHRvVG9rZW4uamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAx NjowNzozOS40NTg0Mjk3NTYgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9t b3ppbGxhL2pzcy9jcnlwdG8vQ3J5cHRvVG9rZW4uamF2YQkyMDE2LTA0LTE0IDE2OjA3OjUyLjI2 NjM0MTU5NSAtMDcwMAorQEAgLTkyLDYgKzkyLDkgQEAgcHVibGljIGludGVyZmFjZSBDcnlwdG9U b2tlbiB7CisgICAgIGdldENpcGhlckNvbnRleHQoRW5jcnlwdGlvbkFsZ29yaXRobSBhbGdvcml0 aG0pCisgICAgICAgICB0aHJvd3MgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRp b24sIFRva2VuRXhjZXB0aW9uOworIAorKyAgICBwdWJsaWMgYWJzdHJhY3QgU3ltbWV0cmljS2V5 RGVyaXZlciBnZXRTeW1tZXRyaWNLZXlEZXJpdmVyKCkgCisrICAgICAgICB0aHJvd3MgVG9rZW5F eGNlcHRpb247CisrCisgICAgIHB1YmxpYyBhYnN0cmFjdCBLZXlXcmFwcGVyCisgICAgIGdldEtl eVdyYXBwZXIoS2V5V3JhcEFsZ29yaXRobSBhbGdvcml0aG0pCisgICAgICAgICB0aHJvd3MgamF2 YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIFRva2VuRXhjZXB0aW9uOworZGlm ZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvY3J5cHRvL0hNQUNB bGdvcml0aG0uamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9q c3MvY3J5cHRvL0hNQUNBbGdvcml0aG0uamF2YQorLS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mv b3JnL21vemlsbGEvanNzL2NyeXB0by9ITUFDQWxnb3JpdGhtLmphdmEuam1hZ25lCTIwMTYtMDQt MTQgMTY6MDk6MDIuODU4ODU1Njc5IC0wNzAwCisrKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9v cmcvbW96aWxsYS9qc3MvY3J5cHRvL0hNQUNBbGdvcml0aG0uamF2YQkyMDE2LTA0LTE0IDE2OjA5 OjE4LjA0ODc1MTEyMSAtMDcwMAorQEAgLTg1LDQgKzg1LDIxIEBAIHB1YmxpYyBjbGFzcyBITUFD QWxnb3JpdGhtIGV4dGVuZHMgRGlnZXMKKyAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBITUFDQWxn b3JpdGhtIFNIQTEgPSBuZXcgSE1BQ0FsZ29yaXRobQorICAgICAgICAgKENLTV9TSEFfMV9ITUFD LCAiU0hBLTEtSE1BQyIsCisgICAgICAgICAgICAgIE9CSkVDVF9JREVOVElGSUVSLkFMR09SSVRI TS5zdWJCcmFuY2goMjYpLCAyMCk7CisrCisrICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgSE1BQ0Fs Z29yaXRobSBTSEEyMjQgPSBuZXcgSE1BQ0FsZ29yaXRobQorKyAgICAgICAgKFNFQ19PSURfSE1B Q19TSEEyMjQsICJTSEEtMjI0LUhNQUMiLAorKyAgICAgICAgICAgICBPQkpFQ1RfSURFTlRJRklF Ui5SU0FEU0kuc3ViQnJhbmNoKDgpLCAyOCk7CisrCisrICAgIHB1YmxpYyBzdGF0aWMgZmluYWwg SE1BQ0FsZ29yaXRobSBTSEEyNTYgPSBuZXcgSE1BQ0FsZ29yaXRobQorKyAgICAgICAgKFNFQ19P SURfSE1BQ19TSEEyNTYsICJTSEEtMjU2LUhNQUMiLAorKyAgICAgICAgICAgICBPQkpFQ1RfSURF TlRJRklFUi5SU0FEU0kuc3ViQnJhbmNoKDkpLCAzMik7CisrCisrICAgIHB1YmxpYyBzdGF0aWMg ZmluYWwgSE1BQ0FsZ29yaXRobSBTSEEzODQgPSBuZXcgSE1BQ0FsZ29yaXRobQorKyAgICAgICAg KFNFQ19PSURfSE1BQ19TSEEzODQsICJTSEEtMzg0LUhNQUMiLAorKyAgICAgICAgICAgICBPQkpF Q1RfSURFTlRJRklFUi5SU0FEU0kuc3ViQnJhbmNoKDEwKSwgNDgpOworKworKyAgICBwdWJsaWMg c3RhdGljIGZpbmFsIEhNQUNBbGdvcml0aG0gU0hBNTEyID0gbmV3IEhNQUNBbGdvcml0aG0KKysg ICAgICAgIChTRUNfT0lEX0hNQUNfU0hBNTEyLCAiU0hBLTUxMi1ITUFDIiwKKysgICAgICAgICAg ICAgT0JKRUNUX0lERU5USUZJRVIuUlNBRFNJLnN1YkJyYW5jaCgxMSksIDY0KTsKKysKKyB9Citk aWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9jcnlwdG8vS2V5 V3JhcHBlci5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy9jcnlwdG8vS2V5V3JhcHBlci5qYXZhCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvY3J5cHRvL0tleVdyYXBwZXIuamF2YS5qbWFnbmUJMjAxNi0wNC0xNCAxNjox MDo0My45MzAxNTk5NjUgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9jcnlwdG8vS2V5V3JhcHBlci5qYXZhCTIwMTYtMDQtMTQgMTY6MTA6NTUuMzc3MDgx MTcyIC0wNzAwCitAQCAtMTMzLDQgKzEzMywyMSBAQCBwdWJsaWMgaW50ZXJmYWNlIEtleVdyYXBw ZXIgeworICAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRp b24sCisgICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsKKyAK KysgICAgcHVibGljIFN5bW1ldHJpY0tleSB1bndyYXBTeW1tZXRyaWNQZXJtKGJ5dGVbXSB3cmFw cGVkLCBTeW1tZXRyaWNLZXkuVHlwZSB0eXBlLAorKyAgICAgICAgU3ltbWV0cmljS2V5LlVzYWdl IHVzYWdlLCBpbnQga2V5TGVuZ3RoKQorKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJ bGxlZ2FsU3RhdGVFeGNlcHRpb24sCisrICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRobVBhcmFt ZXRlckV4Y2VwdGlvbjsKKysKKysgICAgLyoqCisrICAgICAqIFVud3JhcHMgYSBrZXkgYW5kIGFs bG93cyBpdCB0byBiZSB1c2VkIGZvciBhbGwgb3BlcmF0aW9ucy4KKysgICAgICogQHBhcmFtIGtl eUxlbmd0aCBUaGUgZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSBrZXkgaW4gYnl0ZXMuICBUaGlzIGlz CisrICAgICAqICAgb25seSB1c2VkIGZvciB2YXJpYWJsZS1sZW5ndGgga2V5cyAoUkM0KSBhbmQg bm9uLXBhZGRpbmcKKysgICAgICogICBhbGdvcml0aG1zLiBPdGhlcndpc2UsIGl0IGNhbiBiZSBz ZXQgdG8gYW55dGhpbmcobGlrZSAwKS4KKysgICAgICovCisrICAgIHB1YmxpYyBTeW1tZXRyaWNL ZXkgdW53cmFwU3ltbWV0cmljUGVybShieXRlW10gd3JhcHBlZCwgU3ltbWV0cmljS2V5LlR5cGUg dHlwZSwKKysgICAgICAgIGludCBrZXlMZW5ndGgpCisrICAgICAgICB0aHJvd3MgVG9rZW5FeGNl cHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwKKysgICAgICAgICAgICBJbnZhbGlkQWxnb3Jp dGhtUGFyYW1ldGVyRXhjZXB0aW9uOworKworKworIH0KK2RpZmYgLXVwIC4vbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TeW1tZXRyaWNLZXlEZXJpdmVyLmphdmEu am1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TeW1t ZXRyaWNLZXlEZXJpdmVyLmphdmEKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9jcnlwdG8vU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhLmptYWduZQkyMDE2LTA0LTE0 IDE2OjM2OjM2LjA4MDQ2NDA1MiAtMDcwMAorKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL2NyeXB0by9TeW1tZXRyaWNLZXlEZXJpdmVyLmphdmEJMjAxNi0wNC0xNCAx NjozNjo0OS43ODQzNjk1MTQgLTA3MDAKK0BAIC0wLDAgKzEsNzkgQEAKKysvKiAqKioqKiBCRUdJ TiBMSUNFTlNFIEJMT0NLICoqKioqCisrICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwg Mi4xCisrICoKKysgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRo ZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKysgKiAxLjEgKHRoZSAiTGljZW5zZSIp OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKysg KiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisr ICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisrICoKKysgKiBTb2Z0d2FyZSBkaXN0cmli dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lz LAorKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt cGxpZWQuIFNlZSB0aGUgTGljZW5zZQorKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisrICogTGljZW5zZS4KKysg KgorKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBOZXRzY2FwZSBTZWN1cml0eSBTZXJ2aWNl cyBmb3IgSmF2YS4KKysgKiAgICAgCisrICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP cmlnaW5hbCBDb2RlIGlzCisrICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24u CisrICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHly aWdodCAoQykgMTk5OC0yMDAwCisrICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRz IFJlc2VydmVkLgorKyAqCisrICogQ29udHJpYnV0b3Iocyk6CisrICoKKysgKiBBbHRlcm5hdGl2 ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt cyBvZgorKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy IG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorKyAqIGluIHdo aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj YWJsZSBpbnN0ZWFkCisrICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz ZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKysgKiB1bmRlciB0aGUgdGVybXMg b2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRv CisrICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBNUEwsIGluZGljYXRlIHlvdXIKKysgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlz aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKyAqIGFuZCBvdGhl ciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBu b3QgZGVsZXRlCisrICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisrICoKKysgKiAqKioqKiBFTkQgTElD RU5TRSBCTE9DSyAqKioqKiAqLworKworK3BhY2thZ2Ugb3JnLm1vemlsbGEuanNzLmNyeXB0bzsK KysKKytpbXBvcnQgamF2YS5zZWN1cml0eS5zcGVjLkFsZ29yaXRobVBhcmFtZXRlclNwZWM7Cisr aW1wb3J0IGphdmEuc2VjdXJpdHkuSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsK KytpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7CisraW1wb3J0IGphdmEuc2VjdXJpdHku SW52YWxpZEtleUV4Y2VwdGlvbjsKKysKKytwdWJsaWMgaW50ZXJmYWNlIFN5bW1ldHJpY0tleURl cml2ZXIgeworKworKyAgIC8qIFVzZSB3aXRoIHRoZSBlbmNyeXB0IHR5cGUgbWVjaGFuaXNtcwor KyAgICAgIEV4YW1wbGU6IGluaXREZXJpdmUoCisrICAgICAgICAgICAgICAgICAgICBzeW1LZXks ICAoUEtDUzExQ29uc3RhbnRzLkNLTV9ERVMzX0VDQl9FTkNSWVBUX0RBVEEpIDQzNTRMLCBkZXJp dmF0aW9uRGF0YSwgbnVsbCwKKysgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5D S01fREVTM19FQ0IsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLCAxNik7CisrICAgKi8KKysK KysgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdERlcml2ZShTeW1tZXRyaWNLZXkgYmFzZUtl eSwgCisrICAgICAgICBsb25nIGRlcml2ZU1lY2gsIGJ5dGVbXSBwYXJhbSwgYnl0ZVtdIGl2LCBs b25nIHRhcmdldE1lY2gsIGxvbmcgb3BlcmF0aW9uLCBsb25nIGtleVNpemUpCisrICAgICAgICB0 aHJvd3MgSW52YWxpZEtleUV4Y2VwdGlvbjsKKysKKysKKysKKysgICAgLyogVXNlIHdpdGgga2V5 IGV4dHJhY3Rpb24gYW5kIGtleSBjb25jYXRhbmF0aW9uIG1lY2hhbmlzbXMKKysgIAorKyAgICBF eGFtcGxlOgorKyAgICAgICBwYXJhbTogYnl0ZSBhcnJheSB0aGF0IGhhcyB0aGUgYml0IHBvc2l0 aW9uIG9mIHdoZXJlIHRvIGV4dHJhY3QKKysgICAgIGluaXREZXJpdmUoCisrICAgICAgICAgICAg ICAgIGRlcml2ZWRLZXksIFBLQ1MxMUNvbnN0YW50cy5DS01fRVhUUkFDVF9LRVlfRlJPTV9LRVks cGFyYW0sbnVsbCwKKysgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLQV9FTkNSWVBU LCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSw4KTsKKysgCisrIAorKyAgICBpbml0RGVyaXZl KAorKyAgICAgICAgICAgICAgIGJhc2VTeW1LZXksc2Vjb25kYXJ5U3ltS2V5LCBQS0NTMTFDb25z dGFudHMuQ0tNX0NPTkNBVEVOQVRFX0JBU0VfQU5EX0tFWSxudWxsLG51bGwsCisrICAgICAgICAg ICAgICAgUEtDUzExQ29uc3RhbnRzLkNLTV9ERVMzX0VDQiwgUEtDUzExQ29uc3RhbnRzLkNLQV9E RVJJVkUsMCk7CisrIAorKyAgICAqLyAKKysKKysgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5p dERlcml2ZShTeW1tZXRyaWNLZXkgYmFzZUtleSwgCisrICAgICAgICBTeW1tZXRyaWNLZXkgc2Vj b25kYXJ5S2V5LCBsb25nIGRlcml2ZU1lY2gsIGJ5dGVbXSBwYXJhbSwgYnl0ZVtdIGl2LCBsb25n IHRhcmdldE1lY2gsIGxvbmcgb3BlcmF0aW9uLCBsb25nIGtleVNpemUpCisrICAgICAgICB0aHJv d3MgSW52YWxpZEtleUV4Y2VwdGlvbjsgCisrCisrICAgcHVibGljIGFic3RyYWN0IFN5bW1ldHJp Y0tleSAgZGVyaXZlKCkKKysgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uOworK30KK2RpZmYg LXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL2NyeXB0by9TeW1tZXRy aWNLZXkuamF2YS5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3Mv Y3J5cHRvL1N5bW1ldHJpY0tleS5qYXZhCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcv bW96aWxsYS9qc3MvY3J5cHRvL1N5bW1ldHJpY0tleS5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2 OjExOjUwLjg2NTY5OTIyMiAtMDcwMAorKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL2NyeXB0by9TeW1tZXRyaWNLZXkuamF2YQkyMDE2LTA0LTE0IDE2OjEyOjAyLjc2 ODYxNzI4OSAtMDcwMAorQEAgLTcxLDYgKzcxLDEwIEBAIHB1YmxpYyBpbnRlcmZhY2UgU3ltbWV0 cmljS2V5IHsKKyAKKyAgICAgU3RyaW5nIGdldEZvcm1hdCgpOworIAorKyAgICBTdHJpbmcgZ2V0 Tmlja05hbWUoKTsKKysKKysgICAgdm9pZCBzZXROaWNrTmFtZShTdHJpbmcgbmlja05hbWUpOwor KworICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFR5cGUgeworICAgICAgICAgLy8gYWxs IG5hbWVzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgZm9yIGNhc2UgaW5zZW5zaXRpdml0eQorICAg ICAgICAgcHJpdmF0ZSBzdGF0aWMgSGFzaHRhYmxlIG5hbWVNYXAgPSBuZXcgSGFzaHRhYmxlKCk7 CitkaWZmIC11cCAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEv bWFuaWZlc3QubW4uam1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3BrY3MxMS9tYW5pZmVzdC5tbgorLS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemls bGEvanNzL3BrY3MxMS9tYW5pZmVzdC5tbi5qbWFnbmUJMjAxNi0wNC0xNCAxNjoxNTo1OS4yNzE5 ODkzNDQgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9w a2NzMTEvbWFuaWZlc3QubW4JMjAxNi0wNC0xNCAxNjoxNjoxMC42NzA5MTA4ODEgLTA3MDAKK0BA IC02NCw2ICs2NCw3IEBAIENTUkNTID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJ CQlQSzExU3RvcmUuYwkJCQlcCisgICAgICAgICAgICAgUEsxMVN5bUtleS5jICAgICAgICAgICAg XAorIAkJCVBLMTFUb2tlbi5jCQkJCVwKKysgICAgICAgICAgICBQSzExU3ltbWV0cmljS2V5RGVy aXZlci5jIFwKKyAgICAgICAgICAgICAkKE5VTEwpCisgCisgCitkaWZmIC11cCAuL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMUtleVdyYXBwZXIuYy5qbWFn bmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlX cmFwcGVyLmMKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2Nz MTEvUEsxMUtleVdyYXBwZXIuYy5qbWFnbmUJMjAxNi0wNC0xNCAxNjoxNzoyOS43NjAzNjY0Nzcg LTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEv UEsxMUtleVdyYXBwZXIuYwkyMDE2LTA0LTE0IDE2OjE3OjU4Ljc0MjE2Njk4MyAtMDcwMAorQEAg LTUxOSw3ICs1MTksNyBAQCBKTklFWFBPUlQgam9iamVjdCBKTklDQUxMCisgSmF2YV9vcmdfbW96 aWxsYV9qc3NfcGtjczExX1BLMTFLZXlXcmFwcGVyX25hdGl2ZVVud3JhcFN5bVdpdGhTeW0KKyAg ICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpvYmplY3QgdG9rZW5PYmosIGpvYmplY3Qg dW53cmFwcGVyT2JqLAorICAgICAgICAgamJ5dGVBcnJheSB3cmFwcGVkQkEsIGpvYmplY3Qgd3Jh cEFsZ09iaiwgam9iamVjdCB0eXBlQWxnT2JqLAorLSAgICAgICAgamludCBrZXlMZW4sIGpieXRl QXJyYXkgaXZCQSwgamludCB1c2FnZUVudW0pCisrICAgICAgICBqaW50IGtleUxlbiwgamJ5dGVB cnJheSBpdkJBLCBqaW50IHVzYWdlRW51bSxqYm9vbGVhbiB0ZW1wb3JhcnkpCisgeworICAgICBQ SzExU3ltS2V5ICpzeW1LZXk9TlVMTCwgKndyYXBwaW5nS2V5PU5VTEw7CisgICAgIENLX01FQ0hB TklTTV9UWVBFIHdyYXBwaW5nTWVjaCwga2V5VHlwZU1lY2g7CitAQCAtNTI3LDYgKzUyNyw3IEBA IEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHAKKyAgICAgam9iamVjdCBr ZXlPYmogPSBOVUxMOworICAgICBDS19VTE9ORyBvcGVyYXRpb247CisgICAgIENLX0ZMQUdTIGZs YWdzOworKyAgICBQUkJvb2wgaXNQZXJtYW5lbnQgPSBQUl9GQUxTRTsKKyAKKyAgICAgLyogZ2V0 IGtleSB0eXBlICovCisgICAgIGtleVR5cGVNZWNoID0gSlNTX2dldFBLMTFNZWNoRnJvbUFsZyhl bnYsIHR5cGVBbGdPYmopOworQEAgLTU3OSw4ICs1ODAsMjEgQEAgSmF2YV9vcmdfbW96aWxsYV9q c3NfcGtjczExX1BLMTFLZXlXcmFwcAorICAgICAgICAgZmxhZ3MgPSAwOworICAgICB9CisgCist ICAgIHN5bUtleSA9IFBLMTFfVW53cmFwU3ltS2V5V2l0aEZsYWdzKHdyYXBwaW5nS2V5LCB3cmFw cGluZ01lY2gsIHBhcmFtLAorLSAgICAgICAgd3JhcHBlZEtleSwga2V5VHlwZU1lY2gsIG9wZXJh dGlvbiwga2V5TGVuLCBmbGFncyk7CisrICAgIGlmKCB0ZW1wb3JhcnkgKSB7CisrICAgICAgICBp c1Blcm1hbmVudCA9IFBSX0ZBTFNFOworKyAgICB9IGVsc2UgeworKyAgICAgICAgaXNQZXJtYW5l bnQgPSBQUl9UUlVFOworKyAgICB9CisrCisrICAgIGlmKCBpc1Blcm1hbmVudCA9PSBQUl9GQUxT RSkgeworKyAgICAgICAgc3ltS2V5ID0gUEsxMV9VbndyYXBTeW1LZXlXaXRoRmxhZ3Mod3JhcHBp bmdLZXksIHdyYXBwaW5nTWVjaCwgcGFyYW0sCisrICAgICAgICAgICAgd3JhcHBlZEtleSwga2V5 VHlwZU1lY2gsIG9wZXJhdGlvbiwga2V5TGVuLCBmbGFncyk7CisrCisrICAgIH0gZWxzZSB7Cisr ICAgICAgICBzeW1LZXkgPSBQSzExX1Vud3JhcFN5bUtleVdpdGhGbGFnc1Blcm0od3JhcHBpbmdL ZXksIHdyYXBwaW5nTWVjaCwgcGFyYW0sCisrICAgICAgICAgICAgd3JhcHBlZEtleSwga2V5VHlw ZU1lY2gsIG9wZXJhdGlvbiwga2V5TGVuLCBmbGFncyxpc1Blcm1hbmVudCk7CisrICAgIH0KKysK KyAgICAgaWYoIHN5bUtleSA9PSBOVUxMICkgeworICAgICAgICAgSlNTX3Rocm93TXNnKGVudiwg VE9LRU5fRVhDRVBUSU9OLCAiRmFpbGVkIHRvIHVud3JhcCBrZXkiKTsKKyAgICAgICAgIGdvdG8g ZmluaXNoOworQEAgLTcwMiw3ICs3MTYsNyBAQCBmaW5pc2g6CisgSk5JRVhQT1JUIGpvYmplY3Qg Sk5JQ0FMTAorIEphdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9QSzExS2V5V3JhcHBlcl9uYXRp dmVVbndyYXBTeW1QbGFpbnRleHQKKyAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpv YmplY3QgdG9rZW5PYmosIGpieXRlQXJyYXkgd3JhcHBlZEJBLAorLSAgICAgICAgam9iamVjdCB0 eXBlQWxnT2JqLCBqaW50IHVzYWdlRW51bSkKKysgICAgICAgIGpvYmplY3QgdHlwZUFsZ09iaiwg amludCB1c2FnZUVudW0samJvb2xlYW4gdGVtcG9yYXJ5KQorIHsKKyAgICAgUEsxMVN5bUtleSAq c3ltS2V5PU5VTEw7CisgICAgIENLX01FQ0hBTklTTV9UWVBFIGtleVR5cGVNZWNoOworQEAgLTcx MSw2ICs3MjUsOCBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMUtleVdyYXBwCisg ICAgIFBLMTFTbG90SW5mbyAqc2xvdCA9IE5VTEw7CisgICAgIENLX1VMT05HIG9wZXJhdGlvbjsK KyAgICAgQ0tfRkxBR1MgZmxhZ3M7CisrICAgIFBSQm9vbCBpc1Blcm0gPSBQUl9GQUxTRTsKKysK KyAKKyAgICAgLyogZ2V0IGtleSB0eXBlICovCisgICAgIGtleVR5cGVNZWNoID0gSlNTX2dldFBL MTFNZWNoRnJvbUFsZyhlbnYsIHR5cGVBbGdPYmopOworQEAgLTc0MCw5ICs3NTYsMTUgQEAgSmF2 YV9vcmdfbW96aWxsYV9qc3NfcGtjczExX1BLMTFLZXlXcmFwcAorICAgICAgICAgZmxhZ3MgPSAw OworICAgICB9CisgCisrICAgIGlmKCB0ZW1wb3JhcnkgKSB7CisrICAgICAgICBpc1Blcm0gPSBQ Ul9GQUxTRTsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIGlzUGVybSA9IFBSX1RSVUU7CisrICAg IH0KKysKKyAgICAgLyogcHVsbCBpbiB0aGUga2V5ICovCisgICAgIHN5bUtleSA9IFBLMTFfSW1w b3J0U3ltS2V5V2l0aEZsYWdzKHNsb3QsIGtleVR5cGVNZWNoLCBQSzExX09yaWdpblVud3JhcCwK Ky0gICAgICAgIG9wZXJhdGlvbiwgd3JhcHBlZEtleSwgZmxhZ3MsIFBSX0ZBTFNFIC8qaXNQZXJt Ki8sIE5VTEwpOworKyAgICAgICAgb3BlcmF0aW9uLCB3cmFwcGVkS2V5LCBmbGFncywgaXNQZXJt LCBOVUxMKTsKKyAgICAgaWYoIHN5bUtleSA9PSBOVUxMICkgeworICAgICAgICAgSlNTX3Rocm93 TXNnKGVudiwgVE9LRU5fRVhDRVBUSU9OLCAiRmFpbGVkIHRvIHVud3JhcCBrZXkiKTsKKyAgICAg ICAgIGdvdG8gZmluaXNoOworZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFwcGVyLmphdmEuam1hZ25lIC4vbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExS2V5V3JhcHBlci5qYXZhCistLS0g Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFw cGVyLmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTY6MTk6MjYuOTk4NTU5NDgwIC0wNzAwCisrKysg Li9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFLZXlXcmFw cGVyLmphdmEJMjAxNi0wNC0xNCAxNjoxOTo0MC45NDE0NjM1MDYgLTA3MDAKK0BAIC00OTgsOCAr NDk4LDI1IEBAIGZpbmFsIGNsYXNzIFBLMTFLZXlXcmFwcGVyIGltcGxlbWVudHMgS2UKKyAgICAg ICAgIHJldHVybiB1bndyYXBTeW1tZXRyaWMod3JhcHBlZCwgdHlwZSwgLTEsIGtleUxlbik7Cisg ICAgIH0KKyAKKysgICAgcHVibGljIFN5bW1ldHJpY0tleQorKyAgICB1bndyYXBTeW1tZXRyaWNQ ZXJtKGJ5dGVbXSB3cmFwcGVkLCBTeW1tZXRyaWNLZXkuVHlwZSB0eXBlLAorKyAgICAgICAgU3lt bWV0cmljS2V5LlVzYWdlIHVzYWdlLCBpbnQga2V5TGVuKQorKyAgICAgICAgdGhyb3dzIFRva2Vu RXhjZXB0aW9uLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sCisrICAgICAgICAgICAgSW52YWxpZEFs Z29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbgorKyAgICB7CisrICAgICAgICByZXR1cm4gdW53cmFw U3ltbWV0cmljUGVybSh3cmFwcGVkLCB0eXBlLCB1c2FnZS5nZXRWYWwoKSwga2V5TGVuKTsKKysg ICAgfQorKworKyAgICBwdWJsaWMgU3ltbWV0cmljS2V5CisrICAgIHVud3JhcFN5bW1ldHJpY1Bl cm0oYnl0ZVtdIHdyYXBwZWQsIFN5bW1ldHJpY0tleS5UeXBlIHR5cGUsIGludCBrZXlMZW4pCisr ICAgICAgICB0aHJvd3MgVG9rZW5FeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwKKysg ICAgICAgICAgICBJbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uCisrICAgIHsKKysg ICAgICAgIHJldHVybiB1bndyYXBTeW1tZXRyaWNQZXJtKHdyYXBwZWQsIHR5cGUsIC0xLCBrZXlM ZW4pOworKyAgICB9CisrCisgICAgIHByaXZhdGUgU3ltbWV0cmljS2V5CistICAgIHVud3JhcFN5 bW1ldHJpYyhieXRlW10gd3JhcHBlZCwgU3ltbWV0cmljS2V5LlR5cGUgdHlwZSwKKysgICAgdW53 cmFwU3ltbWV0cmljUGVybShieXRlW10gd3JhcHBlZCwgU3ltbWV0cmljS2V5LlR5cGUgdHlwZSwK KyAgICAgICAgIGludCB1c2FnZUVudW0sIGludCBrZXlMZW4pCisgICAgICAgICB0aHJvd3MgVG9r ZW5FeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICBJbnZhbGlk QWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uCitAQCAtNTA4LDYgKzUyNSwxMCBAQCBmaW5hbCBj bGFzcyBQSzExS2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCisgICAgICAgICAgICAgdGhyb3cgbmV3 IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOworICAgICAgICAgfQorIAorKyAgICAgICAgLyogU2lu Y2Ugd2Ugd2FudCBwZXJtYW5lbnQsbWFrZSB0aGUgdGVtcG9yYXJ5IGFyZyBmYWxzZSAqLworKyAg ICAgICAgYm9vbGVhbiB0ZW1wb3JhcnkgPSBmYWxzZTsKKysKKysKKyAgICAgICAgIGlmKCAoISBh bGdvcml0aG0uaXNQYWRkZWQoKSkgJiYgKHR5cGUgPT0gU3ltbWV0cmljS2V5LlJDNCkgKSB7Cisg ICAgICAgICAgICAgaWYoIGtleUxlbiA8PSAwICkgeworICAgICAgICAgICAgICAgICB0aHJvdyBu ZXcgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbigKK0BAIC01MjEsMTIgKzU0Miw1 MyBAQCBmaW5hbCBjbGFzcyBQSzExS2V5V3JhcHBlciBpbXBsZW1lbnRzIEtlCisgCisgICAgICAg ICBpZiggYWxnb3JpdGhtID09IEtleVdyYXBBbGdvcml0aG0uUExBSU5URVhUICkgeworICAgICAg ICAgICAgIHJldHVybiBuYXRpdmVVbndyYXBTeW1QbGFpbnRleHQodG9rZW4sIHdyYXBwZWQsIGFs Z0Zyb21UeXBlKHR5cGUpLAorLSAgICAgICAgICAgICAgICB1c2FnZUVudW0gKTsKKysgICAgICAg ICAgICAgICAgdXNhZ2VFbnVtLHRlbXBvcmFyeSApOworICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICBpZiggc3ltS2V5ICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgIEFzc2VydC5f YXNzZXJ0KHB1YktleT09bnVsbCAmJiBwcml2S2V5PT1udWxsKTsKKyAgICAgICAgICAgICAgICAg cmV0dXJuIG5hdGl2ZVVud3JhcFN5bVdpdGhTeW0odG9rZW4sIHN5bUtleSwgd3JhcHBlZCwgYWxn b3JpdGhtLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGFsZ0Zyb21UeXBlKHR5cGUpLCBrZXlM ZW4sIElWLCB1c2FnZUVudW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgIGFsZ0Zyb21UeXBl KHR5cGUpLCBrZXlMZW4sIElWLCB1c2FnZUVudW0sdGVtcG9yYXJ5KTsKKysgICAgICAgICAgICB9 IGVsc2UgeworKyAgICAgICAgICAgICAgICBBc3NlcnQuX2Fzc2VydChwcml2S2V5IT1udWxsICYm IHB1YktleT09bnVsbCAmJiBzeW1LZXk9PW51bGwpOworKyAgICAgICAgICAgICAgICB0aHJvdyBu ZXcgVG9rZW5FeGNlcHRpb24oIldlIGRvIG5vdCBzdXBwb3J0IHBlcm1uYW1lbnQgdW53cmFwcGlu ZyB3aXRoIHByaXZhdGUga2V5LiIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg fQorKworKworKyAgICBwcml2YXRlIFN5bW1ldHJpY0tleQorKyAgICB1bndyYXBTeW1tZXRyaWMo Ynl0ZVtdIHdyYXBwZWQsIFN5bW1ldHJpY0tleS5UeXBlIHR5cGUsCisrICAgICAgICBpbnQgdXNh Z2VFbnVtLCBpbnQga2V5TGVuKQorKyAgICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uLCBJbGxl Z2FsU3RhdGVFeGNlcHRpb24sCisrICAgICAgICAgICAgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRl ckV4Y2VwdGlvbgorKyAgICB7CisrICAgICAgICBpZiggc3RhdGUgIT0gVU5XUkFQICkgeworKyAg ICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKKysgICAgICAgIH0K KysKKysgICAgICAgIGlmKCAoISBhbGdvcml0aG0uaXNQYWRkZWQoKSkgJiYgKHR5cGUgPT0gU3lt bWV0cmljS2V5LlJDNCkgKSB7CisrICAgICAgICAgICAgaWYoIGtleUxlbiA8PSAwICkgeworKyAg ICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlv bigKKysgICAgICAgICAgICAgICAgICAgICJSQzQga2V5cyB3cmFwcGVkIGluIHVucGFkZGVkIGFs Z29yaXRobXMgbmVlZCBrZXkgbGVuZ3RoIisKKysgICAgICAgICAgICAgICAgICAgICIgc3BlY2lm aWVkIHdoZW4gdW53cmFwcGluZyIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gZWxzZSB7 CisrICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIHRoZSBrZXkgbGVuZ3RoCisrICAgICAgICAgICAg Ly9rZXlMZW4gPSAwOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogU2luY2Ugd2UgRE9OVCB3 YW50IHBlcm1hbmVudCxtYWtlIHRoZSB0ZW1wb3JhcnkgYXJnIHRydWUgKi8KKysgICAgICAgIGJv b2xlYW4gdGVtcG9yYXJ5ID0gdHJ1ZTsKKysKKysKKysgICAgICAgIGlmKCBhbGdvcml0aG0gPT0g S2V5V3JhcEFsZ29yaXRobS5QTEFJTlRFWFQgKSB7CisrICAgICAgICAgICAgcmV0dXJuIG5hdGl2 ZVVud3JhcFN5bVBsYWludGV4dCh0b2tlbiwgd3JhcHBlZCwgYWxnRnJvbVR5cGUodHlwZSksCisr ICAgICAgICAgICAgICAgIHVzYWdlRW51bSwgdGVtcG9yYXJ5ICk7CisrICAgICAgICB9IGVsc2Ug eworKyAgICAgICAgICAgIGlmKCBzeW1LZXkgIT0gbnVsbCApIHsKKysgICAgICAgICAgICAgICAg QXNzZXJ0Ll9hc3NlcnQocHViS2V5PT1udWxsICYmIHByaXZLZXk9PW51bGwpOworKyAgICAgICAg ICAgICAgICByZXR1cm4gbmF0aXZlVW53cmFwU3ltV2l0aFN5bSh0b2tlbiwgc3ltS2V5LCB3cmFw cGVkLCBhbGdvcml0aG0sCisrICAgICAgICAgICAgICAgICAgICAgICAgYWxnRnJvbVR5cGUodHlw ZSksIGtleUxlbiwgSVYsIHVzYWdlRW51bSx0ZW1wb3JhcnkpOworICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgIEFzc2VydC5fYXNzZXJ0KHByaXZLZXkhPW51bGwgJiYgcHVi S2V5PT1udWxsICYmIHN5bUtleT09bnVsbCk7CisgICAgICAgICAgICAgICAgIHJldHVybiBuYXRp dmVVbndyYXBTeW1XaXRoUHJpdih0b2tlbiwgcHJpdktleSwgd3JhcHBlZCwKK0BAIC01ODYsNyAr NjQ4LDcgQEAgZmluYWwgY2xhc3MgUEsxMUtleVdyYXBwZXIgaW1wbGVtZW50cyBLZQorICAgICBw cml2YXRlIHN0YXRpYyBuYXRpdmUgU3ltbWV0cmljS2V5CisgICAgIG5hdGl2ZVVud3JhcFN5bVdp dGhTeW0oUEsxMVRva2VuIHRva2VuLCBTeW1tZXRyaWNLZXkgdW53cmFwcGluZ0tleSwKKyAgICAg ICAgIGJ5dGVbXSB3cmFwcGVkS2V5LCBLZXlXcmFwQWxnb3JpdGhtIGFsZywgQWxnb3JpdGhtIHR5 cGUsIGludCBrZXlMZW4sCistICAgICAgICBieXRlW10gSVYsIGludCB1c2FnZUVudW0pCisrICAg ICAgICBieXRlW10gSVYsIGludCB1c2FnZUVudW0sYm9vbGVhbiB0ZW1wb3JhcnkpCisgICAgICAg ICAgICAgdGhyb3dzIFRva2VuRXhjZXB0aW9uOworIAorICAgICAvKioKK0BAIC02MDAsNyArNjYy LDcgQEAgZmluYWwgY2xhc3MgUEsxMUtleVdyYXBwZXIgaW1wbGVtZW50cyBLZQorIAorICAgICBw cml2YXRlIHN0YXRpYyBuYXRpdmUgU3ltbWV0cmljS2V5CisgICAgIG5hdGl2ZVVud3JhcFN5bVBs YWludGV4dChQSzExVG9rZW4gdG9rZW4sIGJ5dGVbXSB3cmFwcGVkS2V5LAorLSAgICAgICAgQWxn b3JpdGhtIHR5cGUsIGludCB1c2FnZUVudW0pOworKyAgICAgICAgQWxnb3JpdGhtIHR5cGUsIGlu dCB1c2FnZUVudW0sYm9vbGVhbiB0ZW1wb3JhcnkpOworIAorICAgICBwcml2YXRlIHZvaWQgcmVz ZXQoKSB7CisgICAgICAgICBzdGF0ZSA9IFVOSU5JVElBTElaRUQ7CitkaWZmIC11cCAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMU1lc3NhZ2VEaWdlc3Qu Yy5qbWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFNZXNzYWdlRGlnZXN0LmMKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMU1lc3NhZ2VEaWdlc3QuYy5qbWFnbmUJMjAxNi0wNS0wNiAxODoxMDow NC41MzE5MTI0MDcgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxh L2pzcy9wa2NzMTEvUEsxMU1lc3NhZ2VEaWdlc3QuYwkyMDE2LTA1LTA2IDE3OjM2OjE5LjkxMzkz MzYzOSAtMDcwMAorQEAgLTk5LDE3ICs5OSwxOSBAQCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2Nz MTFfUEsxMU1lc3NhZ2VECisgICAgIH0KKyAKKyAgICAgLyogY29weSB0aGUga2V5LCBzZXR0aW5n IHRoZSBDS0FfU0lHTiBhdHRyaWJ1dGUgKi8KKy0gICAgbmV3S2V5ID0gUEsxMV9Db3B5U3ltS2V5 Rm9yU2lnbmluZyhvcmlnS2V5LCBtZWNoKTsKKysvKiAgICBuZXdLZXkgPSBQSzExX0NvcHlTeW1L ZXlGb3JTaWduaW5nKG9yaWdLZXksIG1lY2gpOworICAgICBpZiggbmV3S2V5ID09IE5VTEwgKSB7 CisgICAgICAgICBKU1NfdGhyb3dNc2coZW52LCBESUdFU1RfRVhDRVBUSU9OLAorICAgICAgICAg ICAgICAgICAgICAgICAgICJVbmFibGUgdG8gc2V0IENLQV9TSUdOIGF0dHJpYnV0ZSBvbiBzeW1t ZXRyaWMga2V5Iik7CisgICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICAgfQorIAorKyovCisrCisg ICAgIHBhcmFtLmRhdGEgPSBOVUxMOworICAgICBwYXJhbS5sZW4gPSAwOworIAorLSAgICBjb250 ZXh0ID0gUEsxMV9DcmVhdGVDb250ZXh0QnlTeW1LZXkobWVjaCwgQ0tBX1NJR04sIG5ld0tleSwg JnBhcmFtKTsKKysgICAgY29udGV4dCA9IFBLMTFfQ3JlYXRlQ29udGV4dEJ5U3ltS2V5KG1lY2gs IENLQV9TSUdOLCBvcmlnS2V5LCAmcGFyYW0pOworICAgICBpZiggY29udGV4dCA9PSBOVUxMICkg eworICAgICAgICAgSlNTX3Rocm93TXNnKGVudiwgRElHRVNUX0VYQ0VQVElPTiwKKyAgICAgICAg ICAgICAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGlnZXN0IGNvbnRleHQiKTsKK2RpZmYgLXVwIC4v bW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3RvcmUuYy5q bWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFT dG9yZS5jCistLS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczEx L1BLMTFTdG9yZS5jLmptYWduZQkyMDE2LTA0LTE0IDE2OjIyOjE2LjE3NDM5NDk3NyAtMDcwMAor KysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3Rv cmUuYwkyMDE2LTA0LTE0IDE2OjIyOjI2LjYwNTMyMzE3NiAtMDcwMAorQEAgLTQ0LDEzICs0NCwx MDEgQEAKKyAjaW5jbHVkZSA8Y2VydC5oPgorICNpbmNsdWRlIDxjZXJ0ZGIuaD4KKyAjaW5jbHVk ZSA8c2VjYXNuMS5oPgorLQorICNpbmNsdWRlIDxqc3N1dGlsLmg+CisgI2luY2x1ZGUgPEFsZ29y aXRobS5oPgorICNpbmNsdWRlICJwazExdXRpbC5oIgorICNpbmNsdWRlIDxqYXZhX2lkcy5oPgor ICNpbmNsdWRlIDxqc3NfZXhjZXB0aW9ucy5oPgorIAorK3R5cGVkZWYgc3RydWN0CisreworKyAg ICBlbnVtCisrICAgIHsKKysgICAgICAgIFBXX05PTkUgPSAwLAorKyAgICAgICAgUFdfRlJPTUZJ TEUgPSAxLAorKyAgICAgICAgUFdfUExBSU5URVhUID0gMiwKKysgICAgICAgIFBXX0VYVEVSTkFM ID0gMworKyAgICB9IHNvdXJjZTsKKysgICAgY2hhciAqZGF0YTsKKyt9IHNlY3VQV0RhdGE7Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKysgKiBQSzExU3RvcmUucHV0U3ltS2V5c0luVmVjdG9yCisrICov CisrSk5JRVhQT1JUIHZvaWQgSk5JQ0FMTAorK0phdmFfb3JnX21vemlsbGFfanNzX3BrY3MxMV9Q SzExU3RvcmVfcHV0U3ltS2V5c0luVmVjdG9yCisrICAgIChKTklFbnYgKmVudiwgam9iamVjdCB0 aGlzLCBqb2JqZWN0IGtleVZlY3RvcikKKyt7CisrICAgIFBLMTFTbG90SW5mbyAqc2xvdDsKKysg ICAgam9iamVjdCBvYmplY3QgPSBOVUxMOworKyAgICBqY2xhc3MgdmVjdG9yQ2xhc3M7CisrICAg IGptZXRob2RJRCBhZGRFbGVtZW50OworKworKyAgICBQSzExU3ltS2V5ICpmaXJzdFN5bUtleT0g TlVMTDsKKysgICAgUEsxMVN5bUtleSAqc2sgID0gTlVMTDsKKysgICAgUEsxMVN5bUtleSAqbmV4 dFN5bUtleSA9IE5VTEw7CisrICAgIHNlY3VQV0RhdGEgIHB3ZGF0YTsKKysKKysgICAgUEsxMVN5 bUtleSAqZnJlZVN5bUtleSA9IE5VTEw7CisrICAgIFBLMTFTeW1LZXkgKm5leHRGcmVlU3ltS2V5 ID0gTlVMTDsKKysKKysgICAgcHdkYXRhLnNvdXJjZSAgID0gUFdfTk9ORTsKKysgICAgcHdkYXRh LmRhdGEgICAgID0gKGNoYXIgKikgTlVMTDsKKysKKysgICAgUFJfQVNTRVJUKGVudiE9TlVMTCAm JiB0aGlzIT1OVUxMICYmIGtleVZlY3RvciE9TlVMTCk7CisrCisrICAgIGlmKCBKU1NfUEsxMV9n ZXRTdG9yZVNsb3RQdHIoZW52LCB0aGlzLCAmc2xvdCkgIT0gUFJfU1VDQ0VTUykgeworKyAgICAg ICAgQVNTRVJUX09VVE9GTUVNKGVudik7CisrICAgICAgICBnb3RvIGZpbmlzaDsKKysgICAgfQor KyAgICBQUl9BU1NFUlQoc2xvdCE9TlVMTCk7CisrCisrICAgIHZlY3RvckNsYXNzID0gKCplbnYp LT5HZXRPYmplY3RDbGFzcyhlbnYsIGtleVZlY3Rvcik7CisrICAgIGlmKHZlY3RvckNsYXNzID09 IE5VTEwpIHsKKysgICAgICAgIEFTU0VSVF9PVVRPRk1FTShlbnYpOworKyAgICAgICAgZ290byBm aW5pc2g7CisrICAgIH0KKysKKysgICAgYWRkRWxlbWVudCA9ICgqZW52KS0+R2V0TWV0aG9kSUQo ZW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3JDbGFzcywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkVDVE9SX0FERF9FTEVNRU5U X05BTUUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFQ1RPUl9BRERf RUxFTUVOVF9TSUcpOworKyAgICBpZihhZGRFbGVtZW50ID09IE5VTEwpIHsKKysgICAgICAgIEFT U0VSVF9PVVRPRk1FTShlbnYpOworKyAgICAgICAgZ290byBmaW5pc2g7CisrICAgIH0KKysKKysg ICAgUEsxMV9BdXRoZW50aWNhdGUoc2xvdCwgUFJfVFJVRSAvKmxvYWQgY2VydHMqLywgTlVMTCAv KndpbmN4Ki8pOworKworKyAgICAvKiBPYnRhaW4gdGhlIHN5bW1ldHJpYyBrZXkgbGlzdC4gKi8K KysgICAgZmlyc3RTeW1LZXkgPSBQSzExX0xpc3RGaXhlZEtleXNJblNsb3QoIHNsb3QgLCBOVUxM LCAoIHZvaWQgKikgJnB3ZGF0YSApOworKyAgICBzayA9IGZpcnN0U3ltS2V5OworKworKyAgICB3 aGlsZSgoIHNrICE9IE5VTEwgKSkKKysgICAgeworKyAgICAgICAgaWYoIHNrICkgeworKworKyAg ICAgICAgICAgIG5leHRTeW1LZXkgPSBzazsKKysgICAgICAgICAgICBvYmplY3QgPSBKU1NfUEsx MV93cmFwU3ltS2V5KGVudiwgJnNrKTsKKysKKysgICAgICAgICAgICBpZihvYmplY3QgPT0gTlVM TCkgeworKyAgICAgICAgICAgICAgICBQUl9BU1NFUlQoICgqZW52KS0+RXhjZXB0aW9uT2NjdXJy ZWQoZW52KSApOworKyAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKysgICAgICAgICAgICB9 CisrCisrICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorKyAgICAgICAgICAgICogSW5zZXJ0IHRoZSBrZXkgaW50byB0aGUgdmVj dG9yCisrICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKyAgICAgICAgICAgICgqZW52KS0+Q2FsbFZvaWRNZXRob2QoZW52LCBr ZXlWZWN0b3IsIGFkZEVsZW1lbnQsIG9iamVjdCk7CisrICAgICAgICB9CisrCisrICAgICAgICBz ayA9IFBLMTFfR2V0TmV4dFN5bUtleSggbmV4dFN5bUtleSApOworKyAgICB9CisrCisrZmluaXNo OgorKworKyAgICByZXR1cm47CisrfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogUEsxMVN0b3Jl LnB1dEtleXNJblZlY3RvcgorZGlmZiAtdXAgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96 aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5qYXZhLmptYWduZSAuL21vemlsbGEvc2VjdXJpdHkv anNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN0b3JlLmphdmEKKy0tLSAuL21vemlsbGEv c2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN0b3JlLmphdmEuam1hZ25l CTIwMTYtMDQtMTQgMTY6MjM6MjYuOTk3OTA3NDcxIC0wNzAwCisrKysgLi9tb3ppbGxhL3NlY3Vy aXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTdG9yZS5qYXZhCTIwMTYtMDQtMTQg MTY6MjM6MzQuNDM1ODU2MjcyIC0wNzAwCitAQCAtNjYsOCArNjYsMjMgQEAgcHVibGljIGZpbmFs IGNsYXNzIFBLMTFTdG9yZSBpbXBsZW1lbnRzCisgICAgICAgICBrZXlzLmNvcHlJbnRvKCAoT2Jq ZWN0W10pIGFycmF5ICk7CisgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgIH0KKysKKysgICAg cHVibGljIHN5bmNocm9uaXplZCBTeW1tZXRyaWNLZXlbXQorKyAgICBnZXRTeW1tZXRyaWNLZXlz KCkgdGhyb3dzIFRva2VuRXhjZXB0aW9uIHsKKysKKysgICAgICAgIFZlY3RvciBrZXlzID0gbmV3 IFZlY3RvcigpOworKyAgICAgICAgcHV0U3ltS2V5c0luVmVjdG9yKGtleXMpOworKyAgICAgICAg U3ltbWV0cmljS2V5W10gYXJyYXkgPSBuZXcgU3ltbWV0cmljS2V5W2tleXMuc2l6ZSgpXTsKKysg ICAgICAgIGtleXMuY29weUludG8oIChPYmplY3RbXSkgYXJyYXkpOworKyAgICAgICAgcmV0dXJu IGFycmF5OworKyAgICB9CisrCisrCisrCisgICAgIHByb3RlY3RlZCBuYXRpdmUgdm9pZCBwdXRL ZXlzSW5WZWN0b3IoVmVjdG9yIGtleXMpIHRocm93cyBUb2tlbkV4Y2VwdGlvbjsKKyAKKysgICAg cHJvdGVjdGVkIG5hdGl2ZSB2b2lkIHB1dFN5bUtleXNJblZlY3RvcihWZWN0b3Igc3ltS2V5cykg dGhyb3dzIFRva2VuRXhjZXB0aW9uOworKworIAorICAgICBwdWJsaWMgbmF0aXZlIHZvaWQgZGVs ZXRlUHJpdmF0ZUtleShQcml2YXRlS2V5IGtleSkKKyAgICAgICAgIHRocm93cyBOb1N1Y2hJdGVt T25Ub2tlbkV4Y2VwdGlvbiwgVG9rZW5FeGNlcHRpb247CitkaWZmIC11cCAuL21vemlsbGEvc2Vj dXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleS5jLmptYWduZSAuL21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleS5jCist LS0gLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFTeW1L ZXkuYy5qbWFnbmUJMjAxNi0wNC0xNCAxNjoyNDo0NC41NjUzNzI1NTcgLTA3MDAKKysrKyAuL21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleS5jCTIw MTYtMDUtMTcgMTE6Mzc6NDguNTMyNDg1MTA0IC0wNzAwCitAQCAtMzMsNyArMzMsNiBAQAorICAq IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg ICoKKyAgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworLQorICNpbmNsdWRlICJf am5pL29yZ19tb3ppbGxhX2pzc19wa2NzMTFfU3ltS2V5UHJveHkuaCIKKyAKKyAjaW5jbHVkZSA8 bnNwci5oPgorQEAgLTYyLDYgKzYxLDggQEAgSlNTX1BLMTFfd3JhcFN5bUtleShKTklFbnYgKmVu diwgUEsxMVN5bQorICAgICBqbWV0aG9kSUQgY29uc3RydWN0b3I7CisgICAgIGpieXRlQXJyYXkg cHRyQXJyYXk7CisgICAgIGpvYmplY3QgS2V5PU5VTEw7CisrICAgIGNoYXIgKm5pY2tuYW1lID0g TlVMTDsKKysgICAganN0cmluZyBqbmlja25hbWUgPSBOVUxMOworIAorICAgICBQUl9BU1NFUlQo ZW52IT1OVUxMICYmIHN5bUtleSE9TlVMTCAmJiAqc3ltS2V5IT1OVUxMKTsKKyAKK0BAIC03Miwx MCArNzMsMTcgQEAgSlNTX1BLMTFfd3JhcFN5bUtleShKTklFbnYgKmVudiwgUEsxMVN5bQorICAg ICAgICAgZ290byBmaW5pc2g7CisgICAgIH0KKyAKKysgICAgbmlja25hbWUgPSBQSzExX0dldFN5 bUtleU5pY2tuYW1lKCAqc3ltS2V5ICk7CisrCisrICAgIGlmIChuaWNrbmFtZSkgeworKyAgICAg ICAgam5pY2tuYW1lID0gKCplbnYpLT5OZXdTdHJpbmdVVEYoZW52LCBuaWNrbmFtZSk7CisrICAg IH0KKysKKysgCisgICAgIC8qIGZpbmQgdGhlIGNvbnN0cnVjdG9yICovCisgICAgIGNvbnN0cnVj dG9yID0gKCplbnYpLT5HZXRNZXRob2RJRChlbnYsIGtleUNsYXNzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQTEFJTl9DT05TVFJVQ1RPUiwKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEsxMVNZTUtFWV9DT05TVFJVQ1RPUl9TSUcp OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSzExU1lNS0VZX0NP TlNUUlVDVE9SXzFfU0lHKTsKKyAgICAgaWYoY29uc3RydWN0b3IgPT0gTlVMTCkgeworICAgICAg ICAgQVNTRVJUX09VVE9GTUVNKGVudik7CisgICAgICAgICBnb3RvIGZpbmlzaDsKK0BAIC04Nywx MiArOTUsMTYgQEAgSlNTX1BLMTFfd3JhcFN5bUtleShKTklFbnYgKmVudiwgUEsxMVN5bQorICAg ICAgICAgZ290byBmaW5pc2g7CisgICAgIH0KKyAgICAgLyogY2FsbCB0aGUgY29uc3RydWN0b3Ig Ki8KKy0gICAgS2V5ID0gKCplbnYpLT5OZXdPYmplY3QoZW52LCBrZXlDbGFzcywgY29uc3RydWN0 b3IsIHB0ckFycmF5KTsKKysgICAgS2V5ID0gKCplbnYpLT5OZXdPYmplY3QoZW52LCBrZXlDbGFz cywgY29uc3RydWN0b3IsIHB0ckFycmF5LGpuaWNrbmFtZSk7CisgCisgZmluaXNoOgorICAgICBp ZihLZXkgPT0gTlVMTCkgeworICAgICAgICAgUEsxMV9GcmVlU3ltS2V5KCpzeW1LZXkpOworICAg ICB9CisrICAgIGlmKG5pY2tuYW1lICE9IE5VTEwpIHsKKysgICAgICAgIFBPUlRfRnJlZShuaWNr bmFtZSk7CisrICAgICAgICBuaWNrbmFtZSA9IE5VTEw7CisrICAgIH0KKyAgICAgKnN5bUtleSA9 IE5VTEw7CisgICAgIHJldHVybiBLZXk7CisgfQorQEAgLTE4MSw2ICsxOTMsNDkgQEAgZmluaXNo OgorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICAqCisrICogUEsxMVN5bUtleS5zZXROaWNrTmFtZU5h dGl2ZQorKyAqLworK0pOSUVYUE9SVCB2b2lkIEpOSUNBTEwKKytKYXZhX29yZ19tb3ppbGxhX2pz c19wa2NzMTFfUEsxMVN5bUtleV9zZXROaWNrTmFtZU5hdGl2ZQorKyAgICAoSk5JRW52ICplbnYs IGpvYmplY3QgdGhpcyxqc3RyaW5nIG5pY2tuYW1lKQorK3sKKysgICAgUEsxMVN5bUtleSAqa2V5 PU5VTEw7CisrICAgIGNvbnN0IGNoYXIgKmtleW5hbWUgPSBOVUxMOworKyAgICBTRUNTdGF0dXMg c3RhdHVzOworKworKyAgICAvKiBJZiBubyBuaWNrbmFtZSBwcm92aWRlZCwgd2UgYXJlIGRvbmUg Ki8KKysgICAgaWYoIG5pY2tuYW1lID09IE5VTEwgKSB7CisrICAgICAgICBKU1NfdGhyb3dNc2dQ ckVycihlbnYsIFRPS0VOX0VYQ0VQVElPTiwKKysgICAgICAgICAgICAiTmlja25hbWUgaXMgTlVM TCwgd2lsbCBub3QgYmUgc2V0Iik7ICAgICAgICAKKysgICAgICAgIGdvdG8gZmluaXNoOworKyAg ICB9CisrCisrICAgIC8qIGdldCB0aGUga2V5IHBvaW50ZXIgKi8KKysgICAgaWYoIEpTU19QSzEx X2dldFN5bUtleVB0cihlbnYsIHRoaXMsICZrZXkpICE9IFBSX1NVQ0NFU1MpIHsKKysgICAgICAg IGdvdG8gZmluaXNoOworKyAgICB9CisrCisrICAgIC8qIGNvbnZlcnQgdGhlIEphdmEgU3RyaW5n IGludG8gYSBuYXRpdmUgIkMiIHN0cmluZyAqLworKyAgICBrZXluYW1lID0gKCplbnYpLT5HZXRT dHJpbmdVVEZDaGFycyggZW52LCBuaWNrbmFtZSwgMCApOworKworKyAgICAvKiBuYW1lIHRoZSBr ZXkgKi8KKysgICAgc3RhdHVzID0gUEsxMV9TZXRTeW1LZXlOaWNrbmFtZSgga2V5LCBrZXluYW1l ICk7CisrICAgIGlmKCBzdGF0dXMgIT0gU0VDU3VjY2VzcyApIHsKKysgICAgICAgIEpTU190aHJv d01zZ1ByRXJyKGVudiwgVE9LRU5fRVhDRVBUSU9OLAorKyAgICAgICAgICAgICJGYWlsZWQgdG8g bmFtZSBzeW1tZXRyaWMga2V5Iik7CisrICAgIH0KKytmaW5pc2g6CisrCisrICAgIGlmKCBrZXlu YW1lICE9IE5VTEwgKSB7CisrICAgICAgICAvKiBmcmVlIHRoZSBuYXRpdmUgIkMiIHN0cmluZyAq LworKyAgICAgICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBuaWNrbmFtZSwg a2V5bmFtZSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuOworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKysgKgorICAqIFBLMTFTeW1LZXkuZ2V0S2V5RGF0YQorICAqLworIEpOSUVYUE9SVCBqYnl0 ZUFycmF5IEpOSUNBTEwKK0BAIC0yNzksNiArMzM0LDEwIEBAIEphdmFfb3JnX21vemlsbGFfanNz X3BrY3MxMV9QSzExU3ltS2V5X2cKKyAgICAgICAgICAgY2FzZSBDS0tfQUVTOgorICAgICAgICAg ICAgIHR5cGVGaWVsZE5hbWUgPSBBRVNfS0VZVFlQRV9GSUVMRDsKKyAgICAgICAgICAgICBicmVh azsKKysgICAgICAgICAgY2FzZSBDS0tfREVTMjoKKysgICAgICAgICAgICAgcHJpbnRmKCJoZWxs byBkZXMyISBcbiIpOworKyAgICAgICAgICAgICB0eXBlRmllbGROYW1lID0gREVTM19LRVlUWVBF X0ZJRUxEOworKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICBQUl9BU1NFUlQoUFJfRkFMU0UpOworICAgICAgICAgICAgIHR5cGVGaWVsZE5hbWUg PSBERVNfS0VZVFlQRV9GSUVMRDsKK2RpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3Jn L21vemlsbGEvanNzL3BrY3MxMS9QSzExU3ltS2V5LmphdmEuam1hZ25lIC4vbW96aWxsYS9zZWN1 cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3ltS2V5LmphdmEKKy0tLSAuL21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bUtleS5qYXZh LmptYWduZQkyMDE2LTA0LTE0IDE2OjU4OjMzLjM4NTM3MTYzMyAtMDcwMAorKysrIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3BrY3MxMS9QSzExU3ltS2V5LmphdmEJMjAx Ni0wNS0xNyAxMTo0MTozNi4zMjM4NDEwNDUgLTA3MDAKK0BAIC00NCw5ICs0NCwxNyBAQCBwdWJs aWMgZmluYWwgY2xhc3MgUEsxMVN5bUtleSBpbXBsZW1lbnRzCisgICAgIHByb3RlY3RlZCBQSzEx U3ltS2V5KGJ5dGVbXSBwb2ludGVyKSB7CisgICAgICAgICBBc3NlcnQuX2Fzc2VydChwb2ludGVy IT1udWxsKTsKKyAgICAgICAgIGtleVByb3h5ICA9IG5ldyBTeW1LZXlQcm94eShwb2ludGVyKTsK KysgICAgICAgIG5pY2tOYW1lID0gbnVsbDsKKysgICAgfQorKworKyAgICBwcm90ZWN0ZWQgUEsx MVN5bUtleShieXRlW10gcG9pbnRlcixTdHJpbmcgbmlja05hbWUpIHsKKysgICAgICAgIEFzc2Vy dC5fYXNzZXJ0KHBvaW50ZXIhPW51bGwpOworKyAgICAgICAga2V5UHJveHkgID0gbmV3IFN5bUtl eVByb3h5KHBvaW50ZXIpOworKyAgICAgICAgdGhpcy5uaWNrTmFtZSA9IG5pY2tOYW1lOworICAg ICB9CisgCisgICAgIHByaXZhdGUgU3ltS2V5UHJveHkga2V5UHJveHk7CisrICAgIHByaXZhdGUg U3RyaW5nIG5pY2tOYW1lOworIAorICAgICBwdWJsaWMgU3ltbWV0cmljS2V5LlR5cGUgZ2V0VHlw ZSgpIHsKKyAgICAgICAgIEtleVR5cGUga3QgPSBnZXRLZXlUeXBlKCk7CitAQCAtMTA4LDYgKzEx NiwyMCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgUEsxMVN5bUtleSBpbXBsZW1lbnRzCisgICAgIHB1 YmxpYyBTdHJpbmcgZ2V0Rm9ybWF0KCkgeworICAgICAgICAgcmV0dXJuICJSQVciOworICAgICB9 CisrCisrICAgIHB1YmxpYyBTdHJpbmcgZ2V0Tmlja05hbWUoKSB7CisrICAgICAgICByZXR1cm4g bmlja05hbWU7CisrICAgIH0KKysKKysgICAgcHVibGljIHZvaWQgc2V0Tmlja05hbWUoU3RyaW5n IG5pY2tOYW1lKSB7CisrICAgICAgICB0aGlzLm5pY2tOYW1lID0gbmlja05hbWU7CisrCisrICAg ICAgICBpZiggbmlja05hbWUgIT0gbnVsbCkgeworKyAgICAgICAgICAgIHNldE5pY2tOYW1lTmF0 aXZlKG5pY2tOYW1lKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBwdWJsaWMgbmF0aXZl IHZvaWQgc2V0Tmlja05hbWVOYXRpdmUoU3RyaW5nIG5pY2tOYW1lKTsKKyB9CisgCisgY2xhc3Mg U3ltS2V5UHJveHkgZXh0ZW5kcyBLZXlQcm94eSB7CitkaWZmIC11cCAuL21vemlsbGEvc2VjdXJp dHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1ldHJpY0tleURlcml2ZXIuYy5q bWFnbmUgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFT eW1tZXRyaWNLZXlEZXJpdmVyLmMKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3pp bGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1ldHJpY0tleURlcml2ZXIuYy5qbWFnbmUJMjAxNi0wNC0x NCAxNjoyNjoxOC42MTE3MjM3NjMgLTA3MDAKKysrKyAuL21vemlsbGEvc2VjdXJpdHkvanNzL29y Zy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1ldHJpY0tleURlcml2ZXIuYwkyMDE2LTA1LTE3 IDE0OjEzOjM1LjQ1NjU3NDA4MiAtMDcwMAorQEAgLTAsMCArMSwzNjQgQEAKKysvKiAqKioqKiBC RUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisrICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xH UEwgMi4xCisrICoKKysgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRv IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKysgKiAxLjEgKHRoZSAiTGljZW5z ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK KysgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0 CisrICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisrICoKKysgKiBTb2Z0d2FyZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh c2lzLAorKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y IGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisrICogTGljZW5zZS4K KysgKgorKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBOZXRzY2FwZSBTZWN1cml0eSBTZXJ2 aWNlcyBmb3IgSmF2YS4KKysgKgorKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp Z2luYWwgQ29kZSBpcworKyAqIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgor KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln aHQgKEMpIDE5OTgtMjAwMAorKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKysgKgorKyAqIENvbnRyaWJ1dG9yKHMpOgorKyAqCisrICogQWx0ZXJuYXRpdmVs eSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMg b2YKKysgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKysgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKysgKiBpbiB3aGlj aCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2Fi bGUgaW5zdGVhZAorKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug b2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisrICogdW5kZXIgdGhlIHRlcm1zIG9m IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwor KyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg TVBMLCBpbmRpY2F0ZSB5b3VyCisrICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lv bnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKysgKiBhbmQgb3RoZXIg cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90 IGRlbGV0ZQorKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlv dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKysgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBv ZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorKyAqCisrICogKioqKiogRU5EIExJQ0VO U0UgQkxPQ0sgKioqKiogKi8KKysjaW5jbHVkZSAiX2puaS9vcmdfbW96aWxsYV9qc3NfcGtjczEx X1BLMTFTeW1tZXRyaWNLZXlEZXJpdmVyLmgiCisrI2luY2x1ZGUgPHBsYXJlbmEuaD4KKysjaW5j bHVkZSA8c2VjbW9kdC5oPgorKyNpbmNsdWRlIDxwazExZnVuYy5oPgorKyNpbmNsdWRlIDxwazEx cHFnLmg+CisrI2luY2x1ZGUgPHNlY2Vyci5oPgorKyNpbmNsdWRlIDxuc3ByLmg+CisrI2luY2x1 ZGUgPGtleS5oPgorKyNpbmNsdWRlIDxzZWNhc24xLmg+CisrI2luY2x1ZGUgPGJhc2U2NC5oPgor KyNpbmNsdWRlIDxjZXJ0Lmg+CisrI2luY2x1ZGUgPGNyeXB0b2hpLmg+CisrCisrI2luY2x1ZGUg PGpzc3V0aWwuaD4KKysjaW5jbHVkZSA8anNzX2V4Y2VwdGlvbnMuaD4KKysjaW5jbHVkZSA8anNz X2JpZ2ludC5oPgorKyNpbmNsdWRlIDxBbGdvcml0aG0uaD4KKysjaW5jbHVkZSA8am5pLmg+Cisr I2luY2x1ZGUgPHNlY2l0ZW0uaD4KKysjaW5jbHVkZSAiamF2YV9pZHMuaCIKKysKKysjaW5jbHVk ZSAicGsxMXV0aWwuaCIKKysjaW5jbHVkZSA8cGxzdHIuaD4KKysKKysvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KysgKiBFeHBvc2UgdGhlIE5TUyBmdW5jdGlvbmFsaXR5IGF0IGxvdyBsZXZlbCwgb25lIHNob3Vs ZCBrbm93IHdoYXQgdG8gZG8KKysgKiBhdCB0aGUgSmF2YSBsZXZlbC4gCisrICovCisrCisrSk5J RVhQT1JUIGpvYmplY3QgSk5JQ0FMTCBKYXZhX29yZ19tb3ppbGxhX2pzc19wa2NzMTFfUEsxMVN5 bW1ldHJpY0tleURlcml2ZXJfbmF0aXZlRGVyaXZlU3ltS2V5CisrICAoSk5JRW52ICogZW52LCBq b2JqZWN0IHRoaXMsam9iamVjdCB0b2tlbk9iaiwgCisrICBqb2JqZWN0IGJhc2VLZXlPYmosIGpv YmplY3Qgc2Vjb25kYXJ5S2V5T2JqLCAKKysgIGpsb25nIGRlcml2ZU1lY2hhbmlzbSwgamJ5dGVB cnJheSBwYXJhbSwgamJ5dGVBcnJheSBpdiwgamxvbmcgdGFyZ2V0TWVjaGFuaXNtLCBqbG9uZyBv cGVyYXRpb24sIGpsb25nIGtleVNpemUpCisreworKyAgICBqb2JqZWN0IGtleU9iaiA9IE5VTEw7 CisrICAgIFBLMTFTbG90SW5mbyAqc2xvdD1OVUxMOworKyAgICBQSzExU2xvdEluZm8gKmJlc3RT bG90ID0gTlVMTDsKKysgICAgUEsxMVNsb3RJbmZvICpzbG90Rm9yS2V5ID0gTlVMTDsKKysgICAg UEsxMVNsb3RJbmZvICpzbG90Rm9yU2Vjb25kYXJ5S2V5ID0gTlVMTDsKKysgICAgUEsxMVNsb3RJ bmZvICpmaW5hbFNsb3QgPSBOVUxMOworKyAgICBQSzExU2xvdEluZm8gKmZpbmFsU2Vjb25kYXJ5 U2xvdCA9IE5VTEw7CisrICAgIFBLMTFTbG90SW5mbyAqZmluYWxCYXNlS2V5U2xvdCA9IE5VTEw7 CisrCisrICAgIFBLMTFTeW1LZXkgKmJhc2VLZXkgPSBOVUxMOworKyAgICBQSzExU3ltS2V5ICpi ZXN0QmFzZUtleSA9IE5VTEw7CisrICAgIFBLMTFTeW1LZXkgKmZpbmFsQmFzZUtleSA9IE5VTEw7 CisrICAgIFBLMTFTeW1LZXkgKm5ld0tleSA9IE5VTEw7CisrCisrICAgIFBLMTFTeW1LZXkgKnNl Y29uZGFyeUtleSA9IE5VTEw7CisrICAgIFBLMTFTeW1LZXkgKmJlc3RTZWNvbmRhcnlLZXkgPSBO VUxMOworKyAgICBQSzExU3ltS2V5ICpmaW5hbFNlY29uZGFyeUtleSA9IE5VTEw7CisrICAgIFBL MTFTeW1LZXkgKmRlcml2ZWRLZXkgPSBOVUxMOworKyAgICBqYnl0ZSAqcGFyYW1WYWx1ZSA9IE5V TEw7CisrICAgIGludCBwYXJhbUxlbmd0aCA9IDA7CisrICAgIGpieXRlICppdlZhbHVlID0gTlVM TDsKKysgICAgaW50IGl2TGVuZ3RoID0gMDsKKysKKysKKysgICAgQ0tfT0JKRUNUX0hBTkRMRSBr ZXloYW5kbGUgPSAwOworKworKyAgICBDS19BRVNfQ0JDX0VOQ1JZUFRfREFUQV9QQVJBTVMgYWVz OworKyAgICBDS19ERVNfQ0JDX0VOQ1JZUFRfREFUQV9QQVJBTVMgZGVzOworKyAgICBDS19LRVlf REVSSVZBVElPTl9TVFJJTkdfREFUQSBzdHJpbmc7CisrCisrICAgIFNFQ0l0ZW0gcGFyYW1zSXRl bSA9IHsgc2lCdWZmZXIsIE5VTEwsIDAgfTsKKysKKysgICAgUFJfQVNTRVJUKGVudiE9TlVMTCAm JiB0aGlzIT1OVUxMKTsKKysKKysgICAgaWYoIGJhc2VLZXlPYmogPT0gMCkgeworKyAgICAgICAg UFJfZnByaW50ZihQUl9TVERPVVQsImJhc2VLZXlPYmogY2FuIG5vdCBiZSBudWxsIVxuIik7Cisr ICAgICAgICBnb3RvIGxvc2VyOworKyAgICB9CisrCisrICAgIGlmKCBwYXJhbSAhPSBOVUxMKSB7 CisrICAgICAgICBwYXJhbVZhbHVlID0gKCplbnYpLT5HZXRCeXRlQXJyYXlFbGVtZW50cyhlbnYs cGFyYW0sIE5VTEwpOworKyAgICAgICAgcGFyYW1MZW5ndGggPSAoKmVudiktPkdldEFycmF5TGVu Z3RoKGVudixwYXJhbSk7CisrICAgIH0KKysKKysgICAgaWYoIGl2ICE9IE5VTEwpIHsKKysgICAg ICAgIGl2VmFsdWUgPSAoKmVudiktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGVudixpdiwgTlVMTCk7 CisrICAgICAgICBpdkxlbmd0aCA9ICgqZW52KS0+R2V0QXJyYXlMZW5ndGgoZW52LGl2KTsKKysg ICAgfQorKworKyAgICAvKiBTZXQgdXAgdGhlIHBhcmFtcyBkYXRhIGZvciB0aGUgUEsxMV9EZXJp dmUgZmFtaWx5ICovCisrCisrICAgIHN3aXRjaCAoIGRlcml2ZU1lY2hhbmlzbSApIHsKKysgICAg ICAgIGNhc2UgQ0tNX0RFU19FQ0JfRU5DUllQVF9EQVRBOgorKyAgICAgICAgY2FzZSBDS01fREVT M19FQ0JfRU5DUllQVF9EQVRBOgorKyAgICAgICAgY2FzZSBDS01fQUVTX0VDQl9FTkNSWVBUX0RB VEE6CisrICAgICAgICBjYXNlIENLTV9DQU1FTExJQV9FQ0JfRU5DUllQVF9EQVRBOgorKyAgICAg ICAgY2FzZSBDS01fU0VFRF9FQ0JfRU5DUllQVF9EQVRBOgorKyAgICAgICAgLyogVXNlIENLX0tF WV9ERVJJVkFUSU9OX1NUUklOR19EQVRBICovIAorKworKyAgICAgICAgICAgIHN0cmluZy5wRGF0 YSA9ICh1bnNpZ25lZCBjaGFyICopIHBhcmFtVmFsdWU7CisrICAgICAgICAgICAgc3RyaW5nLnVs TGVuID0gcGFyYW1MZW5ndGg7CisrICAgICAgICAgICAgcGFyYW1zSXRlbS5kYXRhID0gKHZvaWQg KikgJnN0cmluZzsKKysgICAgICAgICAgICBwYXJhbXNJdGVtLmxlbiA9IHNpemVvZihzdHJpbmcp OworKworKyAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIENLTV9ERVNfQ0JDX0VOQ1JZUFRf REFUQToKKysgICAgICAgIGNhc2UgQ0tNX0RFUzNfQ0JDX0VOQ1JZUFRfREFUQToKKysgICAgICAg IC8qIFVzZSBDS19ERVNfQ0JDX0VOQ1JZUFRfREFUQV9QQVJBTVMgKi8KKysgICAgCisrICAgICAg ICAgICAgaWYoIGl2VmFsdWUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgIFBSX2ZwcmludGYo UFJfU1RET1VULCAiTmVlZCBpdiBwYXJhbSBmb3IgQ0tNX0RFU19DQkNfRU5DUllQVF9EQVRBIG9y IENLTV9ERVMzX0NCQ19FTkNSWVBUX0RBVEEuIFxuIik7CisrICAgICAgICAgICAgICAgZ290byBs b3NlcjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgIGlmKCBpdkxlbmd0aCAhPSA4 KSB7CisrICAgICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsICJOZWVkIGl2IHBhcmFt IGZvciBDS01fREVTX0NCQ19FTkNSWVBUX0RBVEEgIHN0cnVjdHVyZSB0byBiZSA4IGJ5dGVzIS4g XG4iKTsKKysgICAgICAgICAgICAgICBnb3RvIGxvc2VyOworKyAgICAgICAgICAgIH0KKysKKysg ICAgICAgICAgICBkZXMucERhdGEgPSAodW5zaWduZWQgY2hhciAqKSBwYXJhbVZhbHVlOworKyAg ICAgICAgICAgIGRlcy5sZW5ndGggPSBwYXJhbUxlbmd0aDsKKysgICAgICAgICAgICBQT1JUX01l bWNweShkZXMuaXYsaXZWYWx1ZSxpdkxlbmd0aCk7CisrICAgICAgICAgICAgcGFyYW1zSXRlbS5k YXRhID0gKHZvaWQgKikgJmRlczsKKysgICAgICAgICAgICBwYXJhbXNJdGVtLmxlbiA9IHNpemVv ZihkZXMpOworKyAgICAKKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBDS01fQUVT X0NCQ19FTkNSWVBUX0RBVEE6CisrICAgICAgICBjYXNlIENLTV9DQU1FTExJQV9DQkNfRU5DUllQ VF9EQVRBOgorKyAgICAgICAgY2FzZSBDS01fU0VFRF9DQkNfRU5DUllQVF9EQVRBOgorKyAgICAg ICAgLyogVXNlIENLX0FFU19DQkNfRU5DUllQVF9EQVRBX1BBUkFNUyAqLworKyAgICAgICAgICAg IAorKyAgICAgICAgICAgIGlmICggaXZWYWx1ZSA9PSBOVUxMICkgeworKyAgICAgICAgICAgICAg ICBQUl9mcHJpbnRmKFBSX1NURE9VVCwgIk5lZWQgaXYgcGFyYW0gZm9yIENCQyBlbmNyeXB0IGRl cml2ZSBmb3IgQUVTLCBvciBDQU1FTExJQSBvciBTRUVELiBcbiIpOworKyAgICAgICAgICAgICAg ICBnb3RvIGxvc2VyOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiggaXZMZW5n dGggIT0gMTYpIHsKKysgICAgICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsICJOZWVk IGl2IHBhcmFtIGZvciBDS19BRVNfQ0JDX0VOQ1JZUFRfREFUQV9QQVJBTVMgc3RydWN0dXJlIHRv IGJlIDE2IGJ5dGVzIS4gXG4iKTsKKysgICAgICAgICAgICAgICAgZ290byBsb3NlcjsKKysgICAg ICAgICAgICB9CisrCisrICAgICAgICAgICAgYWVzLnBEYXRhID0gKHVuc2lnbmVkIGNoYXIgKikg cGFyYW1WYWx1ZTsKKysgICAgICAgICAgICBhZXMubGVuZ3RoID0gcGFyYW1MZW5ndGg7CisrICAg ICAgICAgICAgUE9SVF9NZW1jcHkoYWVzLml2LGl2VmFsdWUsaXZMZW5ndGgpOworKyAgICAgICAg ICAgIHBhcmFtc0l0ZW0uZGF0YSA9ICh2b2lkICopICZhZXM7CisrICAgICAgICAgICAgcGFyYW1z SXRlbS5sZW4gPSBzaXplb2YoYWVzKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVs dDoKKysgICAgICAgICAgICBwYXJhbXNJdGVtLmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBwYXJh bVZhbHVlOworKyAgICAgICAgICAgIHBhcmFtc0l0ZW0ubGVuID0gcGFyYW1MZW5ndGg7CisrICAg ICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvKiBHZXQgc2xvdCAqLworKyAgICBpZiggSlNT X1BLMTFfZ2V0VG9rZW5TbG90UHRyKGVudiwgdG9rZW5PYmosICZzbG90KSAhPSBQUl9TVUNDRVNT KSB7CisrICAgICAgICBnb3RvIGxvc2VyOworKyAgICB9CisrCisrICAgIC8qIEdldCBiYXNlIGtl eSAqLworKworKyAgICBpZiggSlNTX1BLMTFfZ2V0U3ltS2V5UHRyKGVudiwgYmFzZUtleU9iaiwg JmJhc2VLZXkpICE9IFBSX1NVQ0NFU1MpIHsKKysgICAgICAgIFBSX2ZwcmludGYoUFJfU1RET1VU LCAiUEsxMVN5bW1ldHJpY0tleURlcml2ZXIubmF0aXZlRGVyaXZlU3ltS2V5OiBVbmFibGUgdG8g ZXh0cmFjdCBzeW1tZXRyaWMgYmFzZSBrZXkhIik7CisrICAgICAgICBnb3RvIGxvc2VyOworKyAg ICB9CisrCisrICAgIC8qIEFzayBOU1Mgd2hhdCB0aGUgYmVzdCBzbG90IGZvciB0aGUgZ2l2ZW4g bWVjaGFuaXNtICovCisrCisrICAgIGJlc3RTbG90ID0gUEsxMV9HZXRCZXN0U2xvdChkZXJpdmVN ZWNoYW5pc20sIE5VTEwpOworKworKyAgICBpZiggYmVzdFNsb3QgPT0gTlVMTCkgeworKyAgICAg ICAgUFJfZnByaW50ZihQUl9TVERPVVQsIlBLMTFTeW1tZXRyaWNLZXlEZXJpdmVyLm5hdGl2ZURl cml2ZVN5bUtleTogQ2FuJ3QgZmluZCBzdWl0YWJsZSBzbG90IGZvciBzeW0ga2V5IGRlcml2YXRp b24hIFxuIik7CisrICAgICAgICBnb3RvIGxvc2VyOworKyAgICB9CisrCisrICAgIHNsb3RGb3JL ZXkgPSBQSzExX0dldFNsb3RGcm9tS2V5KGJhc2VLZXkpOworKworKyAgICBpbnQga2V5T25SZXF1 ZXN0ZWRTbG90ID0gMDsKKysgICAgaW50IGJhc2VLZXlNb3ZlZD0gMDsKKysKKysgICAgaWYoc2xv dEZvcktleSAhPSBzbG90KSB7CisrICAgICAgICBrZXlPblJlcXVlc3RlZFNsb3QgPSAwOworKyAg ICB9ICBlbHNlIHsKKysgICAgICAgIGtleU9uUmVxdWVzdGVkU2xvdCA9IDE7CisrICAgICAgICBm aW5hbEJhc2VLZXlTbG90ID0gc2xvdDsKKysgICAgfSAKKysKKysgICAgaWYgKCBQSzExX0RvZXNN ZWNoYW5pc20oIHNsb3QsIGRlcml2ZU1lY2hhbmlzbSkpIHsKKysgICAgICAgIGlmICgga2V5T25S ZXF1ZXN0ZWRTbG90ICkgeworKyAgICAgICAgICAgIGZpbmFsQmFzZUtleSA9IGJhc2VLZXk7Cisr ICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGJlc3RCYXNlS2V5ID0gUEsxMV9Nb3ZlU3lt S2V5KCBzbG90LCBDS0FfRU5DUllQVCwgMCwgUFJfRkFMU0UsIGJhc2VLZXkgKTsKKysgICAgICAg ICAgICBpZihiZXN0QmFzZUtleSA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIFBSX2Zwcmlu dGYoUFJfU1RET1VULCJQSzExU3ltbWV0cmljS2V5RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXk6 ICBDYW4ndCBtb3ZlIEJhc2UgS2V5IHRvIHJlcXVlc3RlZCBzbG90IVxuIik7CisrICAgICAgICAg ICAgICAgIGdvdG8gbG9zZXI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJhc2VLZXlN b3ZlZCA9IDE7CisrICAgICAgICAgICAgZmluYWxCYXNlS2V5ID0gYmVzdEJhc2VLZXk7CisrICAg ICAgICAgICAgZmluYWxCYXNlS2V5U2xvdCA9IHNsb3Q7CisrICAgICAgICB9CisrCisrICAgIH0g ZWxzZSB7CisrICAgICAgICAgICAgYmVzdEJhc2VLZXkgPSBQSzExX01vdmVTeW1LZXkoIGJlc3RT bG90LCBDS0FfRU5DUllQVCwgMCwgUFJfRkFMU0UsIGJhc2VLZXkgKTsKKysgICAgICAgICAgICBp ZihiZXN0QmFzZUtleSA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIFBSX2ZwcmludGYoUFJf U1RET1VULCJQSzExU3ltbWV0cmljS2V5RGVyaXZlci5uYXRpdmVEZXJpdmVTeW1LZXk6ICBDYW4n dCBtb3ZlIEJhc2UgS2V5IHRvIGJlc3Qgc2xvdCFcbiIpOworKyAgICAgICAgICAgICAgICBnb3Rv IGxvc2VyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBiYXNlS2V5TW92ZWQgPSAxOwor KyAgICAgICAgICAgIGZpbmFsQmFzZUtleSA9IGJlc3RCYXNlS2V5OworKyAgICAgICAgICAgIGZp bmFsQmFzZUtleVNsb3QgPSBiZXN0U2xvdDsKKysgICAgfQorKworKyAgICAvKiBBc3N1bWUgd2Ug d2FudCB0byBkbyBhIGNvbmNhdGVuYXRpb24gZmFtaWx5IGhlcmUgKi8KKysKKysgICAgaWYoIHNl Y29uZGFyeUtleU9iaiAhPSBOVUxMKSB7CisrICAgICAgICBpZiggSlNTX1BLMTFfZ2V0U3ltS2V5 UHRyKGVudiwgc2Vjb25kYXJ5S2V5T2JqLCAmc2Vjb25kYXJ5S2V5KSAhPSBQUl9TVUNDRVNTKSB7 CisrICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsIlBLMTFTeW1tZXRyaWNLZXlEZXJp dmVyLm5hdGl2ZURlcml2ZVN5bUtleTogIENhbid0IGZpbmQgc2Vjb25kYXJ5IHN5bSBrZXkhXG4i KTsKKysgICAgICAgICAgICBnb3RvIGxvc2VyOworKyAgICAgICAgfQorKworKyAgICAgICAgLyog TWFrZSBzdXJlIHRoZSBzZWNvbmRhcnkga2V5IGlzIGluIHRoZSBwcm9wZXIgc2xvdCB0byBkbyBj b25jYXRlbmF0aW9uICovCisrCisrICAgICAgICBzbG90Rm9yU2Vjb25kYXJ5S2V5ID0gUEsxMV9H ZXRTbG90RnJvbUtleSggc2Vjb25kYXJ5S2V5ICk7CisrCisrICAgICAgICBpZiggZmluYWxCYXNl S2V5U2xvdCAhPSBzbG90Rm9yU2Vjb25kYXJ5S2V5ICkgeworKworKyAgICAgICAgICAgIGZpbmFs U2Vjb25kYXJ5S2V5ID0gUEsxMV9Nb3ZlU3ltS2V5IChmaW5hbEJhc2VLZXlTbG90LCBDS0FfRU5D UllQVCwgMCwgUFJfRkFMU0UsIHNlY29uZGFyeUtleSk7CisrCisrICAgICAgICAgICAgaWYoIGZp bmFsU2Vjb25kYXJ5S2V5ID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgUFJfZnByaW50ZihQ Ul9TVERPVVQsIlBLMTFTeW1tZXRyaWNLZXlEZXJpdmVyLm5hdGl2ZURlcml2ZVN5bUtleSwgUHJv YmxlbSBtb3Zpbmcgc2Vjb25kYXJ5IGtleSB0byBwcm9wZXIgc2xvdC5cbiIpOworKyAgICAgICAg ICAgICAgICBnb3RvIGxvc2VyOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgICAgZmluYWxTZWNvbmRhcnlLZXkgPSBzZWNvbmRhcnlLZXk7CisrICAgICAgICB9 CisrCisrICAgICAgICBpZiggcGFyYW1WYWx1ZSA9PSBOVUxMKSB7CisrICAgICAgICAgICAga2V5 aGFuZGxlID0gUEsxMV9HZXRTeW1LZXlIYW5kbGUoZmluYWxTZWNvbmRhcnlLZXkpOworKworKyAg ICAgICAgICAgIGlmKCBrZXloYW5kbGUgPT0gMCkgeworKyAgICAgICAgICAgICAgICBQUl9mcHJp bnRmKFBSX1NURE9VVCwiUEsxMVN5bW1ldHJpY0tleURlcml2ZXIubmF0aXZlRGVyaXZlU3ltS2V5 LCBjYW4ndCBnZXQgaGFuZGxlIGZvciBzZWNvbmRhcnkgc3ltIGtleS5cbiIpOworKyAgICAgICAg ICAgICAgICBnb3RvIGxvc2VyOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBwYXJh bXNJdGVtLmRhdGE9KHVuc2lnbmVkIGNoYXIgKikgJmtleWhhbmRsZTsKKysgICAgICAgICAgICBw YXJhbXNJdGVtLmxlbj1zaXplb2Yoa2V5aGFuZGxlKTsKKysKKysgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgICAgUFJfZnByaW50ZihQUl9TVERPVVQsIlBLMTFTeW1tZXRyaWNLZXlEZXJpdmVy Lm5hdGl2ZURlcml2ZVN5bUtleTogaW5jb3JyZWN0IGlucHV0IHBhcmFtZXRlciBwcm92aWRlZCFc biIpOworKyAgICAgICAgICAgIGdvdG8gbG9zZXI7CisrICAgICAgICB9CisrICAgIH0KKysKKysg ICAgZGVyaXZlZEtleSA9IFBLMTFfRGVyaXZlKGZpbmFsQmFzZUtleSwgZGVyaXZlTWVjaGFuaXNt LCAmcGFyYW1zSXRlbSwgdGFyZ2V0TWVjaGFuaXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwga2V5U2l6ZSk7 CisrICAgIGlmKGRlcml2ZWRLZXkgPT0gTlVMTCkgeworKyAgICAgICAgUFJfZnByaW50ZihQUl9T VERPVVQsCisrICAgICAgICAgICAgICAgICAgICAiRVJST1I6IENhbid0IGRlcml2ZSBzeW1tZXRy aWMga2V5LCBlcnJvcjogJWQgXG4iLFBSX0dldEVycm9yKCkpOworKyAgICAgICAgZ290byBsb3Nl cjsKKysgICAgfQorKworKyAgICBpZiAoIChmaW5hbFNsb3QgPSAgUEsxMV9HZXRTbG90RnJvbUtl eShkZXJpdmVkS2V5ICkpICE9IHNsb3QpIHsKKysgICAgICAgIG5ld0tleSA9ICBQSzExX01vdmVT eW1LZXkgKCBzbG90LCBDS0FfRU5DUllQVCwgMCwgUFJfRkFMU0UsIGRlcml2ZWRLZXkpOworKwor KyAgICAgICAgaWYgKCBuZXdLZXkgPT0gTlVMTCApIHsKKysgICAgICAgICAgICBQUl9mcHJpbnRm KFBSX1NURE9VVCwiUEsxMVN5bW1ldHJpY0tleURlcml2ZXIubmF0aXZlRGVyaXZlU3ltS2V5OiBl cnJvciBtb3Zpbmcga2V5IHRvIG9yaWdpbmFsIHNsb3QsIHJldHVybiBhbnl3YXkuIFxuIik7Cisr ICAgICAgICAgICAgbmV3S2V5ID0gZGVyaXZlZEtleTsKKysgICAgICAgICAgICBkZXJpdmVkS2V5 ID0gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgCisrICAgIH0gIGVsc2UgeworKyAgICAgICAg bmV3S2V5ID0gZGVyaXZlZEtleTsKKysgICAgICAgIGRlcml2ZWRLZXkgPSBOVUxMOworKyAgICB9 CisrCisrICAgIGtleU9iaiA9IEpTU19QSzExX3dyYXBTeW1LZXkoZW52LCAmbmV3S2V5KTsKKysK Kytsb3NlcjoKKysKKysgICAgaWYgKCBiZXN0QmFzZUtleSAhPSBOVUxMICkgeworKyAgICAgICBQ SzExX0ZyZWVTeW1LZXkgKCBiZXN0QmFzZUtleSApOworKyAgICAgICBiZXN0QmFzZUtleSA9IE5V TEw7CisrICAgIH0KKysKKysgICAgaWYgKCBiZXN0U2Vjb25kYXJ5S2V5ICE9IE5VTEwgKSB7Cisr ICAgICAgIFBLMTFfRnJlZVN5bUtleSAoIGJlc3RTZWNvbmRhcnlLZXkgKTsKKysgICAgICAgYmVz dFNlY29uZGFyeUtleSA9IE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKCBkZXJpdmVkS2V5ICE9 IE5VTEwpIHsKKysgICAgICBQSzExX0ZyZWVTeW1LZXkgKCBkZXJpdmVkS2V5ICk7CisrICAgICAg ZGVyaXZlZEtleSA9IE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKGJlc3RTbG90ICE9IE5VTEwg KSB7CisrICAgICAgIFBLMTFfRnJlZVNsb3QoYmVzdFNsb3QpOworKyAgICAgICBiZXN0U2xvdCA9 IE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKCBzbG90Rm9yS2V5ICE9IE5VTEwgKSB7CisrICAg ICAgIFBLMTFfRnJlZVNsb3QoIHNsb3RGb3JLZXkgKTsKKysgICAgICAgc2xvdEZvcktleSA9IE5V TEw7CisrICAgIH0KKysKKysgICAgaWYgKCBmaW5hbFNsb3QgIT0gTlVMTCApIHsKKysgICAgICAg UEsxMV9GcmVlU2xvdCggZmluYWxTbG90ICk7CisrICAgICAgIGZpbmFsU2xvdCA9IE5VTEw7Cisr ICAgIH0KKysKKysgICAgaWYgKCBmaW5hbFNlY29uZGFyeVNsb3QgIT0gTlVMTCApIHsKKysgICAg ICAgUEsxMV9GcmVlU2xvdCggZmluYWxTZWNvbmRhcnlTbG90ICk7CisrICAgICAgIGZpbmFsU2Vj b25kYXJ5U2xvdCA9IE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKCBzbG90Rm9yU2Vjb25kYXJ5 S2V5ICE9IE5VTEwgKSB7CisrICAgICAgIFBLMTFfRnJlZVNsb3QoIHNsb3RGb3JTZWNvbmRhcnlL ZXkgKTsKKysgICAgICAgc2xvdEZvclNlY29uZGFyeUtleSA9IE5VTEw7CisrICAgIH0KKysKKysg ICAgaWYocGFyYW1WYWx1ZSkgeworKyAgICAgICAgKCplbnYpLT5SZWxlYXNlQnl0ZUFycmF5RWxl bWVudHMoZW52LCBwYXJhbSwgKGpieXRlKilwYXJhbVZhbHVlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSk5JX0FCT1JUKTsK KysgICAgfQorKyAgICBpZihpdlZhbHVlKSB7CisrICAgICAgICAoKmVudiktPlJlbGVhc2VCeXRl QXJyYXlFbGVtZW50cyhlbnYsIGl2LCAoamJ5dGUqKWl2VmFsdWUsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKTklfQUJPUlQpOworKyAg ICB9CisrCisrICAgIGlmKCBrZXlPYmogPT0gTlVMTCkgeworKyAgICAgICAgSlNTX3Rocm93TXNn UHJFcnIoZW52LCBUT0tFTl9FWENFUFRJT04sICJVbmFibGUgdG8gZGVyaXZlIHN5bW1ldHJpYyBr ZXkhICIKKysgICAgICAgICAgICAgICAgICJmYWlsdXJlISIpOworKyAgICB9CisrCisrICAgIHJl dHVybiBrZXlPYmo7IAorK30KK2RpZmYgLXVwIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3BrY3MxMS9QSzExU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhLmptYWduZSAuL21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVN5bW1ldHJpY0tl eURlcml2ZXIuamF2YQorLS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3BrY3MxMS9QSzExU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2 OjI4OjI5LjE3OTgyMzAxNyAtMDcwMAorKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21v emlsbGEvanNzL3BrY3MxMS9QSzExU3ltbWV0cmljS2V5RGVyaXZlci5qYXZhCTIwMTYtMDQtMTQg MTY6Mjg6MzYuMTg2Nzc0NjgwIC0wNzAwCitAQCAtMCwwICsxLDE1OCBAQAorKy8qICoqKioqIEJF R0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKysgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQ TCAyLjEKKysgKgorKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8g dGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorKyAqIDEuMSAodGhlICJMaWNlbnNl Iik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAor KyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK KysgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKysgKgorKyAqIFNvZnR3YXJlIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFz aXMsCisrICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisrICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn b3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKysgKiBMaWNlbnNlLgor KyAqCisrICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE5ldHNjYXBlIFNlY3VyaXR5IFNlcnZp Y2VzIGZvciBKYXZhLgorKyAqCisrICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln aW5hbCBDb2RlIGlzCisrICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisr ICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdo dCAoQykgMTk5OC0yMDAwCisrICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJl c2VydmVkLgorKyAqCisrICogQ29udHJpYnV0b3Iocyk6CisrICoKKysgKiBBbHRlcm5hdGl2ZWx5 LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv ZgorKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9y IGxhdGVyICh0aGUgIkdQTCIpLCBvcgorKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorKyAqIGluIHdoaWNo IGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJs ZSBpbnN0ZWFkCisrICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBv ZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKysgKiB1bmRlciB0aGUgdGVybXMgb2Yg ZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisr ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN UEwsIGluZGljYXRlIHlvdXIKKysgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9u cyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKyAqIGFuZCBvdGhlciBw cm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3Qg ZGVsZXRlCisrICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91 ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9m IHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisrICoKKysgKiAqKioqKiBFTkQgTElDRU5T RSBCTE9DSyAqKioqKiAqLworKworK3BhY2thZ2Ugb3JnLm1vemlsbGEuanNzLnBrY3MxMTsKKysK KytpbXBvcnQgb3JnLm1vemlsbGEuanNzLmNyeXB0by4qOworK2ltcG9ydCBvcmcubW96aWxsYS5q c3MudXRpbC5Bc3NlcnQ7CisraW1wb3J0IHN1bi5zZWN1cml0eS5wa2NzMTEud3JhcHBlci4qOwor K2ltcG9ydCBqYXZhLnNlY3VyaXR5LkludmFsaWRLZXlFeGNlcHRpb247CisrCisrCisrLypUaGlz IG9wZXJhdGlvbiBpcyBwa2NzMTEgYmFzZWQgb25seSAqLworKworK3B1YmxpYyBjbGFzcyBQSzEx U3ltbWV0cmljS2V5RGVyaXZlciBpbXBsZW1lbnRzIFN5bW1ldHJpY0tleURlcml2ZXIgeworKwor KyAgICBwcml2YXRlIFBLMTFUb2tlbiB0b2tlbiA9IG51bGw7CisrICAgIHByaXZhdGUgU3ltbWV0 cmljS2V5IGJhc2VLZXkgPSBudWxsOworKyAgICBwcml2YXRlIFN5bW1ldHJpY0tleSBzZWNvbmRh cnlLZXkgPSBudWxsOworKyAgICBwcml2YXRlIGxvbmcgZGVyaXZlTWVjaGFuaXNtID0gMDsKKysg ICAgcHJpdmF0ZSBsb25nIHRhcmdldE1lY2hhbmlzbSA9IDA7CisrICAgIHByaXZhdGUgbG9uZyBv cGVyYXRpb24gPSAwOworKyAgICBwcml2YXRlIGxvbmcga2V5U2l6ZSA9IDA7CisrICAgIHByaXZh dGUgYnl0ZVtdIHBhcmFtID0gbnVsbDsKKysgICAgcHJpdmF0ZSBieXRlW10gaXYgPSBudWxsOwor KworKyAgICBwdWJsaWMgUEsxMVN5bW1ldHJpY0tleURlcml2ZXIoUEsxMVRva2VuIHRva2VuKQor KyAgICB7CisrICAgICAgICB0aGlzLnRva2VuID0gdG9rZW47CisrICAgIH0KKysKKysgICAgLyog VXNlIHdpdGggdGhlIGVuY3J5cHQgdHlwZSBtZWNoYW5pc21zIAorKworKyAgICBFeGFtcGxlOiBp bml0RGVyaXZlKAorKyAgICAgICAgICAgICAgICAgICAgc3ltS2V5LCAoUEtDUzExQ29uc3RhbnRz LkNLTV9ERVMzX0VDQl9FTkNSWVBUX0RBVEEpIDQzNTRMLCBkZXJpdmF0aW9uRGF0YSwgbnVsbCwK KysgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5DS01fREVTM19FQ0IsIFBLQ1Mx MUNvbnN0YW50cy5DS0FfREVSSVZFLCAxNik7CisrCisrCisrICAgKi8KKysgICAgcHVibGljIHZv aWQgaW5pdERlcml2ZShTeW1tZXRyaWNLZXkgYmFzZUtleSwgbG9uZyBkZXJpdmVNZWNoLCBieXRl W10gcGFyYW0sIGJ5dGVbXSBpdiwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u ZyB0YXJnZXRNZWNoLCBsb25nIG9wZXJhdGlvbiwgbG9uZyBrZXlTaXplKSB0aHJvd3MgSW52YWxp ZEtleUV4Y2VwdGlvbgorKyAgICB7CisrICAgICAgICByZXNldCgpOworKworKyAgICAgICAgaWYo YmFzZUtleSA9PSBudWxsKSB7CisrICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRLZXlFeGNl cHRpb24oIktleSBpcyBudWxsIik7CisrICAgICAgICB9CisrCisrICAgICAgICB0aGlzLmJhc2VL ZXkgPSBiYXNlS2V5OworKyAgICAgICAgdGhpcy5kZXJpdmVNZWNoYW5pc20gPSBkZXJpdmVNZWNo OworKyAgICAgICAgdGhpcy50YXJnZXRNZWNoYW5pc20gPSB0YXJnZXRNZWNoOworKyAgICAgICAg dGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247CisrCisrICAgICAgICBpZiAoIHBhcmFtICE9IG51 bGwpIHsKKysgICAgICAgICAgICB0aGlzLnBhcmFtID0gbmV3IGJ5dGVbcGFyYW0ubGVuZ3RoXTsK KysgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHBhcmFtLDAsdGhpcy5wYXJhbSwwLHBhcmFt Lmxlbmd0aCk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIGl2ICE9IG51bGwpIHsKKysg ICAgICAgICAgICB0aGlzLml2ID0gbmV3IGJ5dGVbaXYubGVuZ3RoXTsKKysgICAgICAgICAgICBT eXN0ZW0uYXJyYXljb3B5KGl2LDAsdGhpcy5pdiwwLGl2Lmxlbmd0aCk7CisrICAgICAgICB9Cisr CisrICAgICAgICB0aGlzLmtleVNpemUgPSBrZXlTaXplOworKworKyAgICB9CisrCisrICAgIC8q IFVzZSB3aXRoIGtleSBleHRyYWN0aW9uIGFuZCBrZXkgY29uY2F0YW5hdGlvbiBtZWNoYW5pc21z CisrICAgICAgIAorKyAgICBFeGFtcGxlIEV4dHJhY3Rpb246CisrICAgICAgIHBhcmFtOiBieXRl IGFycmF5IHRoYXQgaGFzIHRoZSBiaXQgcG9zaXRpb24gb2Ygd2hlcmUgdG8gZXh0cmFjdAorKyAg ICAgaW5pdERlcml2ZSgKKysgICAgICAgICAgICAgICAgZGVyaXZlZEtleSwgUEtDUzExQ29uc3Rh bnRzLkNLTV9FWFRSQUNUX0tFWV9GUk9NX0tFWSxwYXJhbSxudWxsLAorKyAgICAgICAgICAgICAg ICBQS0NTMTFDb25zdGFudHMuQ0tBX0VOQ1JZUFQsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZF LDgpOworKworKyAgICBFeGFtcGxlIENvbmNhdDoKKysKKysgICAgaW5pdERlcml2ZSgKKysgICAg ICAgICAgICAgICBiYXNlU3ltS2V5LHNlY29uZGFyeVN5bUtleSwgUEtDUzExQ29uc3RhbnRzLkNL TV9DT05DQVRFTkFURV9CQVNFX0FORF9LRVksbnVsbCxudWxsLAorKyAgICAgICAgICAgICAgIFBL Q1MxMUNvbnN0YW50cy5DS01fREVTM19FQ0IsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLDAp OworKworKyAgICAqLyAKKysKKysgICAgcHVibGljIHZvaWQgaW5pdERlcml2ZShTeW1tZXRyaWNL ZXkgYmFzZUtleSwgU3ltbWV0cmljS2V5IHNlY29uZGFyeUtleSwgbG9uZyBkZXJpdmVNZWNoLCAK KysgICAgICAgIGJ5dGVbXSBwYXJhbSwgYnl0ZVtdIGl2LCBsb25nIHRhcmdldE1lY2gsIGxvbmcg b3BlcmF0aW9uLCBsb25nIGtleVNpemUpIHRocm93cyBJbnZhbGlkS2V5RXhjZXB0aW9uCisrICAg IHsKKysgICAgICAgIHJlc2V0KCk7CisrCisrICAgICAgICBpZiAoIGJhc2VLZXkgPT0gbnVsbCB8 fCBzZWNvbmRhcnlLZXkgPT0gbnVsbCkgeworKyAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlk S2V5RXhjZXB0aW9uKCJLZXkgaXMgbnVsbCIpOworKyAgICAgICAgfQorKworKyAgICAgICAgaW5p dERlcml2ZShiYXNlS2V5LCBkZXJpdmVNZWNoLCBwYXJhbSxpdix0YXJnZXRNZWNoLG9wZXJhdGlv bixrZXlTaXplKTsKKysgICAgICAgIHRoaXMuc2Vjb25kYXJ5S2V5ID0gc2Vjb25kYXJ5S2V5Owor KworKyAgICB9CisrCisrCisrICAgIHB1YmxpYyBTeW1tZXRyaWNLZXkgZGVyaXZlKCkKKysgICAg ICAgICB0aHJvd3MgVG9rZW5FeGNlcHRpb24KKysgICAgeworKyAgICAgICAgU3ltbWV0cmljS2V5 IHJlc3VsdCA9IGRlcml2ZVN5bUtleSh0aGlzLmJhc2VLZXksdGhpcy5zZWNvbmRhcnlLZXksdGhp cy5kZXJpdmVNZWNoYW5pc20sIHRoaXMucGFyYW0sIHRoaXMuaXYsIHRoaXMudGFyZ2V0TWVjaGFu aXNtLCB0aGlzLm9wZXJhdGlvbix0aGlzLmtleVNpemUpOworKyAgICAgICAgcmV0dXJuIHJlc3Vs dDsKKysgICAgfQorKworKyAgICBwcml2YXRlIFN5bW1ldHJpY0tleQorKyAgICBkZXJpdmVTeW1L ZXkoU3ltbWV0cmljS2V5IGJhc2VLZXksIFN5bW1ldHJpY0tleSBzZWNvbmRhcnlLZXksIGxvbmcg ZGVyaXZlTWVjaGFuaXNtLCBieXRlW10gcGFyYW0sIGJ5dGVbXSBpdiwgbG9uZyB0YXJnZXRNZWNo YW5pc20sIGxvbmcgb3BlcmF0aW9uLCBsb25nIGtleVNpemUpCisrICAgICAgICB0aHJvd3MgVG9r ZW5FeGNlcHRpb24sIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgorKyAgICB7CisrICAgICAgICByZXR1 cm4gbmF0aXZlRGVyaXZlU3ltS2V5KHRva2VuLCBiYXNlS2V5LCBzZWNvbmRhcnlLZXksZGVyaXZl TWVjaGFuaXNtLCBwYXJhbSwgaXYsIHRhcmdldE1lY2hhbmlzbSwgb3BlcmF0aW9uLCBrZXlTaXpl KTsKKysgICAgfQorKworKyAgICBwdWJsaWMgbmF0aXZlIFN5bW1ldHJpY0tleSBuYXRpdmVEZXJp dmVTeW1LZXkoUEsxMVRva2VuIHRva2VuLCBTeW1tZXRyaWNLZXkgYmFzZUtleSwgU3ltbWV0cmlj S2V5IHNlY29uZGFyeUtleSwgbG9uZyBkZXJpdmVNZWNoYW5pc20sIGJ5dGVbXSBwYXJhbSwgYnl0 ZVtdIGl2LAorKyAgICAgICAgbG9uZyB0YXJnZXRNZWNoYW5pc20sIGxvbmcgb3BlcmF0aW9uLCBs b25nIGtleVNpemUpOworKworKyAgICBwcml2YXRlIHZvaWQgcmVzZXQoKSB7CisrICAgICAgICBi YXNlS2V5ID0gbnVsbDsKKysgICAgICAgIHNlY29uZGFyeUtleSA9IG51bGw7CisrICAgICAgICBk ZXJpdmVNZWNoYW5pc20gPSAwOworKyAgICAgICAgdGFyZ2V0TWVjaGFuaXNtID0gMDsKKysgICAg ICAgIG9wZXJhdGlvbiA9IDA7CisrICAgICAgICBrZXlTaXplID0gMDsKKysgICAgICAgIHBhcmFt ID0gbnVsbDsKKysgICAgICAgIGl2ID0gbnVsbDsKKysgICB9CisrfQorZGlmZiAtdXAgLi9tb3pp bGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BLMTFUb2tlbi5qYXZhLmpt YWduZSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2NzMTEvUEsxMVRv a2VuLmphdmEKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy9wa2Nz MTEvUEsxMVRva2VuLmphdmEuam1hZ25lCTIwMTYtMDQtMTQgMTY6MzA6NDYuMDk4ODc4NDU5IC0w NzAwCisrKysgLi9tb3ppbGxhL3NlY3VyaXR5L2pzcy9vcmcvbW96aWxsYS9qc3MvcGtjczExL1BL MTFUb2tlbi5qYXZhCTIwMTYtMDQtMTQgMTc6Mjc6MzAuOTE4MzY3MzcyIC0wNzAwCitAQCAtMTMx LDYgKzEzMSwxMSBAQCBwdWJsaWMgZmluYWwgY2xhc3MgUEsxMVRva2VuIGltcGxlbWVudHMKKyAg ICAgICAgIHJldHVybiBQSzExS2V5R2VuZXJhdG9yLmNsb25lKGtleSwgdGhpcyk7CisgICAgIH0K KyAKKysgICAgcHVibGljIFBLMTFTeW1tZXRyaWNLZXlEZXJpdmVyIGdldFN5bW1ldHJpY0tleURl cml2ZXIoKQorKyAgICB7CisrICAgICAgICAgcmV0dXJuIG5ldyBQSzExU3ltbWV0cmljS2V5RGVy aXZlcih0aGlzKTsKKysgICAgfQorKworICAgICBwdWJsaWMgS2V5V3JhcHBlcgorICAgICBnZXRL ZXlXcmFwcGVyKEtleVdyYXBBbGdvcml0aG0gYWxnb3JpdGhtKQorICAgICAgICAgdGhyb3dzIE5v U3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwgVG9rZW5FeGNlcHRpb24KK2RpZmYgLXVwIC4vbW96aWxs YS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL1N5bUtleURlcml2aW5nLmphdmEu am1hZ25lIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3Rlc3RzL1N5bUtl eURlcml2aW5nLmphdmEKKy0tLSAuL21vemlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pz cy90ZXN0cy9TeW1LZXlEZXJpdmluZy5qYXZhLmptYWduZQkyMDE2LTA0LTE0IDE2OjMyOjU4LjUy OTk2NDg2MCAtMDcwMAorKysrIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNz L3Rlc3RzL1N5bUtleURlcml2aW5nLmphdmEJMjAxNi0wNS0xNyAxMTo0Mzo1MS44NTg4NjI1NTYg LTA3MDAKK0BAIC0wLDAgKzEsNTE2IEBACisrLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq KioqKgorKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorKyAqCisrICogVGhl IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg TGljZW5zZSBWZXJzaW9uCisrICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisrICogdGhlIExpY2Vuc2UuIFlv dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKyAqIGh0dHA6Ly93d3cubW96 aWxsYS5vcmcvTVBMLworKyAqCisrICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKysgKiBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp Y2Vuc2UKKysgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5k IGxpbWl0YXRpb25zIHVuZGVyIHRoZQorKyAqIExpY2Vuc2UuCisrICoKKysgKiBUaGUgT3JpZ2lu YWwgQ29kZSBpcyB0aGUgTmV0c2NhcGUgU2VjdXJpdHkgU2VydmljZXMgZm9yIEphdmEuCisrICoK KysgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKysgKiBO ZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKysgKiBQb3J0aW9ucyBjcmVhdGVk IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAKKysg KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBD b250cmlidXRvcihzKToKKysgKgorKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0 aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisrICogZWl0aGVyIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiks IG9yCisrICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu MSBvciBsYXRlciAodGhlICJMR1BMIiksCisrICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKysgKiBvZiB0 aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0 aGlzIGZpbGUgb25seQorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0 aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKysgKiB1c2UgeW91ciB2ZXJzaW9u IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgor KyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNl IHRoZW0gd2l0aCB0aGUgbm90aWNlCisrICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg YnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKysgKiB0aGUgcHJv dmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm aWxlIHVuZGVyCisrICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBv ciB0aGUgTEdQTC4KKysgKgorKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisr CisrcGFja2FnZSBvcmcubW96aWxsYS5qc3MudGVzdHM7CisrCisraW1wb3J0IG9yZy5tb3ppbGxh Lmpzcy5jcnlwdG8uKjsKKytpbXBvcnQgb3JnLm1vemlsbGEuanNzLkNyeXB0b01hbmFnZXI7Cisr aW1wb3J0IG9yZy5tb3ppbGxhLmpzcy51dGlsLkFzc2VydDsKKytpbXBvcnQgb3JnLm1vemlsbGEu anNzLnBrY3MxMS4qOworK2ltcG9ydCBzdW4uc2VjdXJpdHkucGtjczExLndyYXBwZXIuUEtDUzEx Q29uc3RhbnRzOworK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworK2ltcG9ydCBqYXZhLnV0 aWwuQXJyYXlzOworK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworK2ltcG9ydCBqYXZhLnV0aWwu RW51bWVyYXRpb247CisrCisrLyoqCisrICogU3ltIEtleSBkZXJpdmluZyB0ZXN0cy4uCisrICoK KysgKi8KKysKKytwdWJsaWMgY2xhc3MgU3ltS2V5RGVyaXZpbmcgeworKworKyAgICAgIHByaXZh dGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBpdjggPSBuZXcgYnl0ZSBbXSB7IDB4MSwgMHgyLCAweDMs IDB4NCwgMHg1LCAweDYsIDB4NywgMHg4IH07CisrICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg Ynl0ZVtdIGl2MTYgPSBuZXcgYnl0ZSBbXSB7IDB4MSwgMHgyLCAweDMsIDB4NCwgCisrICAgICAg ICAgICAgICAgICAgICAweDUsIDB4NiwgMHg3LCAweDgsICAKKysgICAgICAgICAgICAgICAgICAg IDB4OSwweGEsIDB4YiwgMHhjLDB4ZCwweGUsIDB4ZiwweDEwIH07CisrCisrICAgICAgcHJpdmF0 ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGRlcml2YXRpb25EYXRhMSA9IG5ldyBieXRlW10geyAweDEx LCAweDExLCAweDEzLAorKyAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4IH07 CisrCisrICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGRlcml2YXRpb25EYXRhMiA9 IG5ldyBieXRlIFtdIHsgMHg5LCAweGEsIDB4YiwgMHhjLCAweGQsCisrICAgICAgICAgIDB4ZSwg MHhmLCAweDEwIH07CisrCisrICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGRlcml2 YXRpb25EYXRhMTYgPSBuZXcgYnl0ZVtdIHsgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4Niww eDcsIDB4OCwKKysgICAgICAgICAgMHg5LCAweGEsIDB4YiwgMHhjLCAweGQsIDB4ZSwgMHhmLCAw eDEwIH07CisrCisrCisrICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10p IHsKKysKKysgICAgICBTeW1tZXRyaWNLZXkgbWFjS2V5RGV2ID0gbnVsbDsKKysgICAgICB0cnkg eworKworKyAgICAgICAgQ3J5cHRvTWFuYWdlci5Jbml0aWFsaXphdGlvblZhbHVlcyB2YWxzID0K KysgICAgICAgICAgICAgIG5ldyBDcnlwdG9NYW5hZ2VyLkluaXRpYWxpemF0aW9uVmFsdWVzKCIu LyIKKysgICAgICAgICAgICAgICk7CisrICAgICAgICBDcnlwdG9NYW5hZ2VyLmluaXRpYWxpemUo dmFscyk7CisrICAgICAgICBDcnlwdG9NYW5hZ2VyIGNtID0gQ3J5cHRvTWFuYWdlci5nZXRJbnN0 YW5jZSgpOworKyAgICAgICAgQ3J5cHRvVG9rZW4gdG9rZW4gPSBjbS5nZXRJbnRlcm5hbENyeXB0 b1Rva2VuKCk7CisrICAgICAgICBDcnlwdG9Ub2tlbiBrZXlUb2tlbiA9IGNtLmdldEludGVybmFs S2V5U3RvcmFnZVRva2VuKCk7CisrICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludGVyYWwg dG9rZW4gbmFtZTogIiArIGtleVRva2VuLmdldE5hbWUoKSk7CisrICAgICAgICBLZXlHZW5lcmF0 b3Iga2V5S2cgPSBrZXlUb2tlbi5nZXRLZXlHZW5lcmF0b3IoS2V5R2VuQWxnb3JpdGhtLkRFUzMp OworKyAgICAgICAgU3ltbWV0cmljS2V5IGJhc2VLZXkgPSBrZXlLZy5nZW5lcmF0ZSgpOworKwor KworKyAgICAgICAgS2V5R2VuZXJhdG9yIGtleUtnRGVzID0ga2V5VG9rZW4uZ2V0S2V5R2VuZXJh dG9yKEtleUdlbkFsZ29yaXRobS5ERVMpOworKyAgICAgICAgU3ltbWV0cmljS2V5IGJhc2VLZXlE ZXMgPSBrZXlLZ0Rlcy5nZW5lcmF0ZSgpOworKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJz dHJlbmd0aDogIiArIGJhc2VLZXlEZXMuZ2V0U3RyZW5ndGgoKSk7CisrCisrCisrICAgICAgICBL ZXlHZW5lcmF0b3Iga2V5S2dBRVMgPSBrZXlUb2tlbi5nZXRLZXlHZW5lcmF0b3IoS2V5R2VuQWxn b3JpdGhtLkFFUyk7CisrICAgICAgICBrZXlLZ0FFUy5pbml0aWFsaXplKDEyOCk7CisrICAgICAg ICBTeW1tZXRyaWNLZXkgYmFzZUtleUFFUyA9IGtleUtnQUVTLmdlbmVyYXRlKCk7CisrCisrCisr CisrICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJhc2VLZXkgYnl0ZXM6ICIpOworKyAgICAg ICAgYnl0ZVtdIGJhc2VCeXRlcyA9IGJhc2VLZXkuZ2V0RW5jb2RlZCgpOworKyAgICAgICAgZGlz cGxheUJ5dGVBcnJheShiYXNlQnl0ZXMsdHJ1ZSk7IAorKworKworKyAgICAgICAgLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyAgICAgICAgU3lzdGVt Lm91dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tNX0VYVFJBQ1RfS0VZX0ZST01fS0VZIHRlc3Qg MTYgYnl0ZXMuIFxuIik7CisrCisrCisrICAgICAgICBTeW1tZXRyaWNLZXlEZXJpdmVyIGRlcml2 ZXIgPSB0b2tlbi5nZXRTeW1tZXRyaWNLZXlEZXJpdmVyKCk7CisrICAgICAgICBTeXN0ZW0ub3V0 LnByaW50bG4oImRlcml2ZXI6ICIgKyBkZXJpdmVyKTsKKysgICAgICAgIFN5c3RlbS5vdXQucHJp bnRsbigiQ0tNX0VYVFJBQ1RfS0VZX0ZST01fS0VZIDogIiArIFBLQ1MxMUNvbnN0YW50cy5DS01f RVhUUkFDVF9LRVlfRlJPTV9LRVkpOworKworKyAgICAgICAgbG9uZyBiaXRQb3NpdGlvbiA9IDA7 CisrCisrICAgICAgICBieXRlW10gcGFyYW0gPSBsb25nVG9CeXRlcyhiaXRQb3NpdGlvbik7Cisr CisrICAgICAgICBkZXJpdmVyLmluaXREZXJpdmUoCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgYmFzZUtleSwgUEtDUzExQ29uc3RhbnRzLkNLTV9FWFRSQUNUX0tFWV9GUk9NX0tFWSxwYXJh bSxudWxsLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTMTFDb25zdGFudHMuQ0tB X0VOQ1JZUFQsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLChsb25nKSAxNik7CisrCisrCisr ICAgICAgICBTeW1tZXRyaWNLZXkgZXh0cmFjdGVkMTYgPSBkZXJpdmVyLmRlcml2ZSgpOworKwor KyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXJpdmVkIGtleTogIiArIGV4dHJhY3RlZDE2 KTsKKysKKysgICAgICAgIGlmKGV4dHJhY3RlZDE2ID09IG51bGwpIHsKKysgICAgICAgICAgICBT eXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBkZXJpdmUgMTYgYnl0ZSBrZXkgd2l0aCBtZWNo YW5pc206IENLTV9FWFRSQUNUX0tFWV9GUk9NX0tFWSBcbiIpOworKyAgICAgICAgfQorKworKyAg ICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXJpdmVkS2V5IDE2IGJ5dGVzOiAiKTsKKysgICAg ICAgIGJ5dGVbXSBkZXJpdmVkQnl0ZXMgPSBleHRyYWN0ZWQxNi5nZXRFbmNvZGVkKCk7CisrICAg ICAgICBkaXNwbGF5Qnl0ZUFycmF5KGRlcml2ZWRCeXRlcyx0cnVlKTsKKysKKysKKysgICAgICAg IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysgICAg ICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gTWVjaGFuaXNtIENLTV9FWFRSQUNUX0tFWV9GUk9N X0tFWSB0ZXN0IDggYnl0ZXMuIFxuIik7CisrCisrCisrICAgICAgICBTeW1tZXRyaWNLZXlEZXJp dmVyIGV4dHJhY3Q4ID0gdG9rZW4uZ2V0U3ltbWV0cmljS2V5RGVyaXZlcigpOworKyAgICAgICAg ZXh0cmFjdDguaW5pdERlcml2ZSgKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0 ZWQxNiwgUEtDUzExQ29uc3RhbnRzLkNLTV9FWFRSQUNUX0tFWV9GUk9NX0tFWSxwYXJhbSxudWxs LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLQ1MxMUNvbnN0YW50cy5DS0FfRU5DUllQ VCwgUEtDUzExQ29uc3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDgpOworKworKworKyAgICAgICBT eW1tZXRyaWNLZXkgZXh0cmFjdGVkOCA9IGV4dHJhY3Q4LmRlcml2ZSgpOworKyAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oIkRlcml2ZWQga2V5OiAiICsgZXh0cmFjdGVkOCk7CisrCisrICAgICAg ICBpZihleHRyYWN0ZWQ4ID09IG51bGwpIHsKKysgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50 bG4oIkZhaWxlZCB0byBkZXJpdmUga2V5IGV4dHJhY3RlZCA4IGJ5dGVzIHdpdGggbWVjaGFuaXNt OiBDS01fRVhUUkFDVF9LRVlfRlJPTV9LRVkgXG4iKTsKKysgICAgICAgIH0KKysKKysgICAgICAg IGJ5dGVbXSBleHRyYWN0ZWQ4Qnl0ZXMgPSBleHRyYWN0ZWQ4LmdldEVuY29kZWQoKTsKKysgICAg ICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVyaXZlZCBleHRyYWN0ZWQgOCBieXRlcyBvZiBrZXk6 ICIpOworKyAgICAgICAgZGlzcGxheUJ5dGVBcnJheShleHRyYWN0ZWQ4Qnl0ZXMsdHJ1ZSk7Cisr CisrCisrICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrCisrICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tN X0NPTkNBVEVOQVRFX0JBU0VfQU5EX0tFWSB0ZXN0IDE2ICsgOCA9IDI0IGJ5dGUga2V5LiBcbiIp OworKworKyAgICAgICAgU3ltbWV0cmljS2V5RGVyaXZlciBjb25jYXQgPSBrZXlUb2tlbi5nZXRT eW1tZXRyaWNLZXlEZXJpdmVyKCk7CisrICAgICAgICBjb25jYXQuaW5pdERlcml2ZSgKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQxNixleHRyYWN0ZWQ4LCBQS0NTMTFDb25z dGFudHMuQ0tNX0NPTkNBVEVOQVRFX0JBU0VfQU5EX0tFWSxudWxsLG51bGwsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEtDUzExQ29uc3RhbnRzLkNLTV9ERVMzX0VDQiwgUEtDUzExQ29u c3RhbnRzLkNLQV9ERVJJVkUsKGxvbmcpIDApOworKworKyAgICAgICAgU3ltbWV0cmljS2V5IGNv bmNhdGVkMjQgPSAgY29uY2F0LmRlcml2ZSgpOworKworKyAgICAgICAgaWYoIGNvbmNhdGVkMjQg PT0gbnVsbCkgeworKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIHRvIGRl cml2ZSBrZXkgY29uY2F0ZWQgOCBieXRlcyB0byAxNiBieXRlcyBrZXk6IENLTV9DT05DQVRFTkFU RV9CQVNFX0FORF9LRVkgXG4iKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGJ5dGVbXSBjb25j YXRlZDI0Qnl0ZXMgPSBjb25jYXRlZDI0LmdldEVuY29kZWQoKTsKKysgICAgICAgIFN5c3RlbS5v dXQucHJpbnRsbigiZGVyaXZlZCBjb25jYXRlZCAxNiArIDggPSAyNCBieXRlIGtleTogIik7Cisr ICAgICAgICBkaXNwbGF5Qnl0ZUFycmF5KGNvbmNhdGVkMjRCeXRlcyx0cnVlKTsKKysKKysgICAg ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysg ICAgICAgIC8vIE5vdyBsZXRzIHRyeSAgbW9yZSBjb21wbGV4IGRlcml2YXRpb24KKysKKysgICAg ICAgLy8gdG1wMiA9IFBLMTFfRGVyaXZlKCBtYXN0ZXIgLCBDS01fREVTX0VDQl9FTkNSWVBUX0RB VEEgLCAmcGFyYW0gLCBDS01fQ09OQ0FURU5BVEVfQkFTRV9BTkRfS0VZICwgQ0tBX0RFUklWRSAs IDApOworKworKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIE1lY2hhbmlzbSBDS01fREVT X0VDQl9FTkNSWVBUX0RBVEEgdGVzdC4gXG4iKTsKKysKKysgICAgICAgU3ltbWV0cmljS2V5RGVy aXZlciBlbmNyeXB0ID0gdG9rZW4uZ2V0U3ltbWV0cmljS2V5RGVyaXZlcigpOworKworKyAgICAg ICBlbmNyeXB0LmluaXREZXJpdmUoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUtl eURlcywgLyogUEtDUzExQ29uc3RhbnRzLkNLTV9ERVNfRUNCX0VOQ1JZUFRfREFUQSAqLyA0MzUy TCxkZXJpdmF0aW9uRGF0YTEgLG51bGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUEtD UzExQ29uc3RhbnRzLkNLTV9ERVNfRUNCLCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwobG9u ZykgOCk7CisrCisrICAgICAgIFN5bW1ldHJpY0tleSBlbmNyeXB0ZWQ4ID0gZW5jcnlwdC5kZXJp dmUoKTsKKysKKysgICAgICAgaWYoIGVuY3J5cHRlZDggPT0gbnVsbCkgeworKyAgICAgICAgICAg IFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIHRvIGRlcml2ZSAgOCBieXRlcyBmcm9tIGVuY3J5 cHRlZCBkZXJpdmF0aW9uIGRhdGEuIik7CisrICAgICAgICB9CisrCisrICAgICAgICBieXRlW10g ZW5jcnlwdGVkOEJ5dGVzID0gZW5jcnlwdGVkOC5nZXRFbmNvZGVkKCk7CisrICAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgZW5jcnlwdGVkIDggYnl0ZXM6ICIgKyBlbmNyeXB0ZWQ4 Qnl0ZXMubGVuZ3RoKTsKKysgICAgICAgIGRpc3BsYXlCeXRlQXJyYXkoZW5jcnlwdGVkOEJ5dGVz LHRydWUpOworKworKyAgICAgICAgQ2lwaGVyIGNpcGhlciA9IG51bGw7CisrICAgICAgICBjaXBo ZXIgPSAga2V5VG9rZW4uZ2V0Q2lwaGVyQ29udGV4dChFbmNyeXB0aW9uQWxnb3JpdGhtLkRFU19F Q0IpOworKworKyAgICAgICAgY2lwaGVyLmluaXRFbmNyeXB0KGJhc2VLZXlEZXMpOworKworKyAg ICAgICAgYnl0ZVtdIGNpcGhlcnRleHQgPSBjaXBoZXIuZG9GaW5hbChkZXJpdmF0aW9uRGF0YTEp OworKyAgICAgICAgZGlzcGxheUJ5dGVBcnJheShjaXBoZXJ0ZXh0LHRydWUpOworKworKyAgICAg ICAgaWYgKCBjaXBoZXJ0ZXh0Lmxlbmd0aCAhPSBlbmNyeXB0ZWQ4Qnl0ZXMubGVuZ3RoICkgewor KyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBlbmNyeXB0ZWQgZGF0YSBs ZW5ndGggbm90IGVxdWFsIHRvIGRlcml2ZWQga2V5IGxlbmd0aC4iKTsKKysgICAgICAgIH0gZWxz ZSB7CisrICAgICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgY2lwaGVydGV4dC5sZW5ndGgg OyBpICsrKSB7CisrICAgICAgICAgICAgICAgIGNpcGhlcnRleHRbaV0mPTB4ZmU7CisrICAgICAg ICAgICAgICAgIGVuY3J5cHRlZDhCeXRlc1tpXSY9MHhmZTsKKysgICAgICAgICAgICB9CisrICAg ICAgICAgICAgaWYgKCBBcnJheXMuZXF1YWxzKGNpcGhlcnRleHQsIGVuY3J5cHRlZDhCeXRlcykp IHsKKysgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQ6IGRlcml2ZWQg a2V5IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOworKyAgICAgICAgICAgIH0gZWxzZSB7 CisrCisrICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBkZXJpdmVk IGtleSBub3QgdGhlIHNhbWUgYXMgZW5jcnlwdGVkIGRhdGEuIik7CisrICAgICAgICAgICAgfQor KyAgICAgICAgfQorKworKworKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworKyAgICAgICAgLy8gVHJ5IGVjbnJ5cHRlZCBkZXMzIGRlcml2 YXRpb24KKysKKysgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tNX0RF UzNfRUNCX0VOQ1JZUFRfREFUQSB0ZXN0LiBcbiIpOworKworKyAgICAgICBTeW1tZXRyaWNLZXlE ZXJpdmVyIGVuY3J5cHREZXMzID0gdG9rZW4uZ2V0U3ltbWV0cmljS2V5RGVyaXZlcigpOworKwor KyAgICAgICBlbmNyeXB0RGVzMy5pbml0RGVyaXZlKAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJhc2VLZXksIC8qIFBLQ1MxMUNvbnN0YW50cy5DS01fREVTM19FQ0JfRU5DUllQVF9EQVRB ICovIDQzNTRMICAsZGVyaXZhdGlvbkRhdGExNiAsbnVsbCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICBQS0NTMTFDb25zdGFudHMuQ0tNX0RFUzNfRUNCLCBQS0NTMTFDb25zdGFudHMuQ0tB X0RFUklWRSwobG9uZykgMTYpOworKworKworKyAgICAgICBTeW1tZXRyaWNLZXkgZW5jcnlwdGVk MTYgPSBlbmNyeXB0RGVzMy5kZXJpdmUoKTsKKysKKysgICAgICAgaWYgKCBlbmNyeXB0ZWQxNiA9 PSBudWxsKSB7CisrICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCB0byBkZXJp dmUgMTYgYnl0ZXMgZnJvbSBlbmNyeXB0ZWQgZGVyaXZhdGlvbiBkYXRhLiIpOworKyAgICAgICB9 CisrCisrICAgICAgIGJ5dGVbXSBlbmNyeXB0ZWQxNkJ5dGVzID0gZW5jcnlwdGVkMTYuZ2V0RW5j b2RlZCgpOworKworKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgZW5jcnlwdGVk IDE2IGJ5dGVzOiAiICsgZW5jcnlwdGVkMTZCeXRlcy5sZW5ndGgpOworKyAgICAgICBkaXNwbGF5 Qnl0ZUFycmF5KGVuY3J5cHRlZDE2Qnl0ZXMsdHJ1ZSk7CisrCisrCisrICAgICAgIGNpcGhlciA9 ICBrZXlUb2tlbi5nZXRDaXBoZXJDb250ZXh0KEVuY3J5cHRpb25BbGdvcml0aG0uREVTM19FQ0Ip OworKyAgICAgICBjaXBoZXIuaW5pdEVuY3J5cHQoYmFzZUtleSk7CisrICAgICAgIGNpcGhlcnRl eHQgPSBjaXBoZXIuZG9GaW5hbChkZXJpdmF0aW9uRGF0YTE2KTsKKysgICAgICAgZGlzcGxheUJ5 dGVBcnJheShjaXBoZXJ0ZXh0LHRydWUpOworKworKyAgICAgICBpZiAoIGNpcGhlcnRleHQubGVu Z3RoICE9IGVuY3J5cHRlZDE2Qnl0ZXMubGVuZ3RoICkgeworKyAgICAgICAgICAgU3lzdGVtLm91 dC5wcmludGxuKCJGQUlMRUQ6IGVuY3J5cHRlZCBkYXRhIGxlbmd0aCBub3QgZXF1YWwgdG8gZGVy aXZlZCBrZXkgbGVuZ3RoLiIpOworKyAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgZm9yICgg aW50IGkgPSAwOyBpIDwgY2lwaGVydGV4dC5sZW5ndGggOyBpICsrKSB7CisrICAgICAgICAgICAg ICAgY2lwaGVydGV4dFtpXSY9MHhmZTsKKysgICAgICAgICAgICAgICBlbmNyeXB0ZWQxNkJ5dGVz W2ldJj0weGZlOworKyAgICAgICAgICAgfQorKyAgICAgICAgICAgaWYgKCBBcnJheXMuZXF1YWxz KGNpcGhlcnRleHQsIGVuY3J5cHRlZDE2Qnl0ZXMpKSB7CisrICAgICAgICAgICAgICAgU3lzdGVt Lm91dC5wcmludGxuKCJQQVNTRUQ6IGRlcml2ZWQga2V5IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBk YXRhLiIpOworKyAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICBTeXN0ZW0ub3V0 LnByaW50bG4oIkZBSUxFRDogZGVyaXZlZCBrZXkgbm90IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBk YXRhLiIpOworKyAgICAgICAgICAgfQorKyAgICAgICB9CisrCisrCisrICAgICAgIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysgICAgICAgU3lzdGVt Lm91dC5wcmludGxuKCJcbiBNZWNoYW5pc20gQ0tNX0RFU19DQkNfRU5DUllQVF9EQVRBIHRlc3Qu IFxuIik7CisrCisrICAgICAgIFN5bW1ldHJpY0tleURlcml2ZXIgZW5jcnlwdERlc0NCQyA9IHRv a2VuLmdldFN5bW1ldHJpY0tleURlcml2ZXIoKTsKKysKKysgICAgICAgZW5jcnlwdERlc0NCQy5p bml0RGVyaXZlKAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VLZXlEZXMsIC8qIFBL Q1MxMUNvbnN0YW50cy5DS01fREVTX0NCQ19FTkNSWVBUX0RBVEEgKi8gNDM1M0wgICxkZXJpdmF0 aW9uRGF0YTEgLGl2OCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTMTFDb25zdGFu dHMuQ0tNX0RFU19DQkMsIFBLQ1MxMUNvbnN0YW50cy5DS0FfREVSSVZFLChsb25nKSA4KTsKKysK KysKKysgICAgICAgU3ltbWV0cmljS2V5IGVuY3J5cHRlZERlc0NCQyA9IGVuY3J5cHREZXNDQkMu ZGVyaXZlKCk7CisrCisrICAgICAgIGlmICggZW5jcnlwdGVkRGVzQ0JDID09IG51bGwpIHsKKysg ICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIHRvIGRlcml2ZSA4IGJ5dGVzIGZy b20gZW5jcnlwdGVkIGRlcml2YXRpb24gZGF0YS4iKTsKKysgICAgICAgfQorKworKyAgICAgICBi eXRlW10gZW5jcnlwdGVkRGVzQ0JDQnl0ZXMgPSBlbmNyeXB0ZWREZXNDQkMuZ2V0RW5jb2RlZCgp OworKworKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQgZW5jcnlwdGVkIDggYnl0 ZXM6ICIgKyBlbmNyeXB0ZWREZXNDQkNCeXRlcy5sZW5ndGgpOworKyAgICAgICBkaXNwbGF5Qnl0 ZUFycmF5KGVuY3J5cHRlZERlc0NCQ0J5dGVzLHRydWUpOworKworKworKyAgICAgICBjaXBoZXIg PSAga2V5VG9rZW4uZ2V0Q2lwaGVyQ29udGV4dChFbmNyeXB0aW9uQWxnb3JpdGhtLkRFU19DQkMp OworKyAgICAgICBjaXBoZXIuaW5pdEVuY3J5cHQoYmFzZUtleURlcyxuZXcgSVZQYXJhbWV0ZXJT cGVjKGl2OCkpOworKyAgICAgICBjaXBoZXJ0ZXh0ID0gY2lwaGVyLmRvRmluYWwoZGVyaXZhdGlv bkRhdGExKTsKKysgICAgICAgZGlzcGxheUJ5dGVBcnJheShjaXBoZXJ0ZXh0LHRydWUpOworKwor KyAgICAgICAgaWYgKCBjaXBoZXJ0ZXh0Lmxlbmd0aCAhPSBlbmNyeXB0ZWREZXNDQkNCeXRlcy5s ZW5ndGggKSB7CisrICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQ6IGVuY3J5 cHRlZCBkYXRhIGxlbmd0aCBub3QgZXF1YWwgdG8gZGVyaXZlZCBrZXkgbGVuZ3RoLiIpOworKyAg ICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBjaXBoZXJ0 ZXh0Lmxlbmd0aCA7IGkgKyspIHsKKysgICAgICAgICAgICAgICAgY2lwaGVydGV4dFtpXSY9MHhm ZTsKKysgICAgICAgICAgICAgICAgZW5jcnlwdGVkRGVzQ0JDQnl0ZXNbaV0mPTB4ZmU7CisrICAg ICAgICAgICAgfQorKyAgICAgICAgICAgIGlmICggQXJyYXlzLmVxdWFscyhjaXBoZXJ0ZXh0LCBl bmNyeXB0ZWREZXNDQkNCeXRlcykpIHsKKysgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmlu dGxuKCJQQVNTRUQ6IGRlcml2ZWQga2V5IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOwor KyAgICAgICAgICAgIH0gZWxzZSB7CisrCisrICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJp bnRsbigiRkFJTEVEOiBkZXJpdmVkIGtleSBub3QgdGhlIHNhbWUgYXMgZW5jcnlwdGVkIGRhdGEu Iik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyAgICAgICBTeXN0ZW0ub3V0 LnByaW50bG4oIlxuIE1lY2hhbmlzbSBDS01fREVTM19DQkNfRU5DUllQVF9EQVRBIHRlc3QuIFxu Iik7CisrICAgICAgICAKKysgICAgICAgU3ltbWV0cmljS2V5RGVyaXZlciBlbmNyeXB0RGVzM0NC QyA9IHRva2VuLmdldFN5bW1ldHJpY0tleURlcml2ZXIoKTsKKysKKysgICAgICAgZW5jcnlwdERl czNDQkMuaW5pdERlcml2ZSgKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlS2V5LCAv KiBQS0NTMTFDb25zdGFudHMuQ0tNX0RFUzNfQ0JDX0VOQ1JZUFRfREFUQSAqLyA0MzU1TCAgLGRl cml2YXRpb25EYXRhMTYgLGl2OCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTMTFD b25zdGFudHMuQ0tNX0RFUzNfQ0JDLCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwobG9uZykg MTYpOworKyAgICAgICAgCisrCisrICAgICAgIFN5bW1ldHJpY0tleSBlbmNyeXB0ZWREZXMzQ0JD ID0gZW5jcnlwdERlczNDQkMuZGVyaXZlKCk7CisrICAgICAgICAKKysgICAgICAgaWYgKCBlbmNy eXB0ZWREZXMzQ0JDID09IG51bGwpIHsKKysgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi RmFpbGVkIHRvIGRlcml2ZSAxNiBieXRlcyBmcm9tIGVuY3J5cHRlZCBkZXJpdmF0aW9uIGRhdGEu Iik7CisrICAgICAgIH0KKysgICAgICAgIAorKyAgICAgICBieXRlW10gZW5jcnlwdGVkRGVzM0NC Q0J5dGVzID0gZW5jcnlwdGVkRGVzM0NCQy5nZXRFbmNvZGVkKCk7CisrCisrICAgICAgIFN5c3Rl bS5vdXQucHJpbnRsbigiZGVyaXZlZCBlbmNyeXB0ZWQgMTYgYnl0ZXM6ICIgKyBlbmNyeXB0ZWRE ZXMzQ0JDQnl0ZXMubGVuZ3RoKTsKKysgICAgICAgZGlzcGxheUJ5dGVBcnJheShlbmNyeXB0ZWRE ZXMzQ0JDQnl0ZXMsdHJ1ZSk7CisrCisrCisrICAgICAgIGNpcGhlciA9ICBrZXlUb2tlbi5nZXRD aXBoZXJDb250ZXh0KEVuY3J5cHRpb25BbGdvcml0aG0uREVTM19DQkMpOworKyAgICAgICBjaXBo ZXIuaW5pdEVuY3J5cHQoYmFzZUtleSxuZXcgSVZQYXJhbWV0ZXJTcGVjKGl2OCkpOworKyAgICAg ICBjaXBoZXJ0ZXh0ID0gY2lwaGVyLmRvRmluYWwoZGVyaXZhdGlvbkRhdGExNik7CisrICAgICAg IGRpc3BsYXlCeXRlQXJyYXkoY2lwaGVydGV4dCx0cnVlKTsKKysKKysgICAgICAgIGlmICggY2lw aGVydGV4dC5sZW5ndGggIT0gZW5jcnlwdGVkRGVzM0NCQ0J5dGVzLmxlbmd0aCApIHsKKysgICAg ICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRDogZW5jcnlwdGVkIGRhdGEgbGVuZ3Ro IG5vdCBlcXVhbCB0byBkZXJpdmVkIGtleSBsZW5ndGguIik7CisrICAgICAgICB9IGVsc2Ugewor KyAgICAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IGNpcGhlcnRleHQubGVuZ3RoIDsgaSAr KykgeworKyAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0W2ldJj0weGZlOworKyAgICAgICAgICAg ICAgICBlbmNyeXB0ZWREZXMzQ0JDQnl0ZXNbaV0mPTB4ZmU7CisrICAgICAgICAgICAgfQorKyAg ICAgICAgICAgIGlmICggQXJyYXlzLmVxdWFscyhjaXBoZXJ0ZXh0LCBlbmNyeXB0ZWREZXMzQ0JD Qnl0ZXMpKSB7CisrICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTU0VEOiBk ZXJpdmVkIGtleSB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0YS4iKTsKKysgICAgICAgICAgICB9 IGVsc2UgeworKworKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRDog ZGVyaXZlZCBrZXkgbm90IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOworKyAgICAgICAg ICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKysgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiBN ZWNoYW5pc20gQ0tNX0FFU19FQ0JfRU5DUllQVF9EQVRBIHRlc3QuIFxuIik7CisrCisrICAgICAg IFN5bW1ldHJpY0tleURlcml2ZXIgZW5jcnlwdEFFU0VDQiA9IHRva2VuLmdldFN5bW1ldHJpY0tl eURlcml2ZXIoKTsKKysKKysgICAgICAgLy9TeXN0ZW0uaW4ucmVhZCgpOworKyAgICAgICBlbmNy eXB0QUVTRUNCLmluaXREZXJpdmUoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUtl eUFFUywgLyogUEtDUzExQ29uc3RhbnRzLkNLTV9BRVNfRUNCX0VOQ1JZUFRfREFUQSAqLyA0MzU2 TCAgLGRlcml2YXRpb25EYXRhMTYgLG51bGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg UEtDUzExQ29uc3RhbnRzLkNLTV9BRVNfRUNCLCBQS0NTMTFDb25zdGFudHMuQ0tBX0RFUklWRSwo bG9uZykgMTYpOworKworKworKyAgICAgICBTeW1tZXRyaWNLZXkgZW5jcnlwdGVkQUVTRUNCID0g ZW5jcnlwdEFFU0VDQi5kZXJpdmUoKTsKKysKKysgICAgICAgaWYgKCBlbmNyeXB0ZWRBRVNFQ0Ig PT0gbnVsbCkgeworKyAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgdG8gZGVy aXZlIDE2IGJ5dGVzIGZyb20gZW5jcnlwdGVkIGRlcml2YXRpb24gZGF0YS4iKTsKKysgICAgICAg fQorKworKyAgICAgICBieXRlW10gZW5jcnlwdGVkQUVTRUNCQnl0ZXMgPSBlbmNyeXB0ZWRBRVNF Q0IuZ2V0RW5jb2RlZCgpOworKworKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcml2ZWQg ZW5jcnlwdGVkIDE2IGJ5dGVzOiAiICsgZW5jcnlwdGVkQUVTRUNCQnl0ZXMubGVuZ3RoKTsKKysg ICAgICAgZGlzcGxheUJ5dGVBcnJheShlbmNyeXB0ZWRBRVNFQ0JCeXRlcyx0cnVlKTsKKysKKysK KysgICAgICAgY2lwaGVyID0gIGtleVRva2VuLmdldENpcGhlckNvbnRleHQoRW5jcnlwdGlvbkFs Z29yaXRobS5BRVNfMTI4X0VDQik7CisrICAgICAgIGNpcGhlci5pbml0RW5jcnlwdChiYXNlS2V5 QUVTKTsKKysgICAgICAgY2lwaGVydGV4dCA9IGNpcGhlci5kb0ZpbmFsKGRlcml2YXRpb25EYXRh MTYpOworKyAgICAgICBkaXNwbGF5Qnl0ZUFycmF5KGNpcGhlcnRleHQsdHJ1ZSk7CisrCisrICAg ICAgICBpZiAoIGNpcGhlcnRleHQubGVuZ3RoICE9IGVuY3J5cHRlZEFFU0VDQkJ5dGVzLmxlbmd0 aCApIHsKKysgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRDogZW5jcnlwdGVk IGRhdGEgbGVuZ3RoIG5vdCBlcXVhbCB0byBkZXJpdmVkIGtleSBsZW5ndGguIik7CisrICAgICAg ICB9IGVsc2UgeworKyAgICAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IGNpcGhlcnRleHQu bGVuZ3RoIDsgaSArKykgeworKyAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0W2ldJj0weGZlOwor KyAgICAgICAgICAgICAgICBlbmNyeXB0ZWRBRVNFQ0JCeXRlc1tpXSY9MHhmZTsKKysgICAgICAg ICAgICB9CisrICAgICAgICAgICAgaWYgKCBBcnJheXMuZXF1YWxzKGNpcGhlcnRleHQsIGVuY3J5 cHRlZEFFU0VDQkJ5dGVzKSkgeworKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4o IlBBU1NFRDogZGVyaXZlZCBrZXkgdGhlIHNhbWUgYXMgZW5jcnlwdGVkIGRhdGEuIik7CisrICAg ICAgICAgICAgfSBlbHNlIHsKKysKKysgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxu KCJGQUlMRUQ6IGRlcml2ZWQga2V5IG5vdCB0aGUgc2FtZSBhcyBlbmNyeXB0ZWQgZGF0YS4iKTsK KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrCisrICAgICAgIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysgICAgICAgU3lzdGVtLm91dC5w cmludGxuKCJcbiBNZWNoYW5pc20gQ0tNX0FFU19DQkNfRU5DUllQVF9EQVRBIHRlc3QuIFxuIik7 CisrCisrICAgICAgIFN5bW1ldHJpY0tleURlcml2ZXIgZW5jcnlwdEFFU0NCQz0gdG9rZW4uZ2V0 U3ltbWV0cmljS2V5RGVyaXZlcigpOworKworKyAgICAgICAvL1N5c3RlbS5pbi5yZWFkKCk7Cisr ICAgICAgIGVuY3J5cHRBRVNDQkMuaW5pdERlcml2ZSgKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICBiYXNlS2V5QUVTLCAvKiBQS0NTMTFDb25zdGFudHMuQ0tNX0FFU19DQkNfRU5DUllQVF9E QVRBICovIDQzNTdMICAsZGVyaXZhdGlvbkRhdGExNiAsaXYxNiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICBQS0NTMTFDb25zdGFudHMuQ0tNX0FFU19DQkMsIFBLQ1MxMUNvbnN0YW50cy5D S0FfREVSSVZFLChsb25nKSAxNik7CisrCisrCisrICAgICAgIFN5bW1ldHJpY0tleSBlbmNyeXB0 ZWRBRVNDQkMgPSBlbmNyeXB0QUVTQ0JDLmRlcml2ZSgpOworKworKyAgICAgICBpZiAoIGVuY3J5 cHRlZEFFU0NCQyA9PSBudWxsKSB7CisrICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZh aWxlZCB0byBkZXJpdmUgMTYgYnl0ZXMgZnJvbSBlbmNyeXB0ZWQgZGVyaXZhdGlvbiBkYXRhLiIp OworKyAgICAgICB9CisrCisrICAgICAgIGJ5dGVbXSBlbmNyeXB0ZWRBRVNDQkNCeXRlcyA9IGVu Y3J5cHRlZEFFU0NCQy5nZXRFbmNvZGVkKCk7CisrCisrICAgICAgIFN5c3RlbS5vdXQucHJpbnRs bigiZGVyaXZlZCBlbmNyeXB0ZWQgMTYgYnl0ZXM6ICIgKyBlbmNyeXB0ZWRBRVNDQkNCeXRlcy5s ZW5ndGgpOworKyAgICAgICBkaXNwbGF5Qnl0ZUFycmF5KGVuY3J5cHRlZEFFU0NCQ0J5dGVzLHRy dWUpOworKworKworKyAgICAgICBjaXBoZXIgPSAga2V5VG9rZW4uZ2V0Q2lwaGVyQ29udGV4dChF bmNyeXB0aW9uQWxnb3JpdGhtLkFFU18xMjhfQ0JDKTsKKysgICAgICAgY2lwaGVyLmluaXRFbmNy eXB0KGJhc2VLZXlBRVMsbmV3IElWUGFyYW1ldGVyU3BlYyhpdjE2KSk7CisrICAgICAgIGNpcGhl cnRleHQgPSBjaXBoZXIuZG9GaW5hbChkZXJpdmF0aW9uRGF0YTE2KTsKKysgICAgICAgZGlzcGxh eUJ5dGVBcnJheShjaXBoZXJ0ZXh0LHRydWUpOworKworKyAgICAgICAgaWYgKCBjaXBoZXJ0ZXh0 Lmxlbmd0aCAhPSBlbmNyeXB0ZWRBRVNDQkNCeXRlcy5sZW5ndGggKSB7CisrICAgICAgICAgICAg U3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQ6IGVuY3J5cHRlZCBkYXRhIGxlbmd0aCBub3QgZXF1 YWwgdG8gZGVyaXZlZCBrZXkgbGVuZ3RoLiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBjaXBoZXJ0ZXh0Lmxlbmd0aCA7IGkgKyspIHsKKysg ICAgICAgICAgICAgICAgY2lwaGVydGV4dFtpXSY9MHhmZTsKKysgICAgICAgICAgICAgICAgZW5j cnlwdGVkQUVTQ0JDQnl0ZXNbaV0mPTB4ZmU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAg IGlmICggQXJyYXlzLmVxdWFscyhjaXBoZXJ0ZXh0LCBlbmNyeXB0ZWRBRVNDQkNCeXRlcykpIHsK KysgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQ6IGRlcml2ZWQga2V5 IHRoZSBzYW1lIGFzIGVuY3J5cHRlZCBkYXRhLiIpOworKyAgICAgICAgICAgIH0gZWxzZSB7Cisr CisrICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEOiBkZXJpdmVkIGtl eSBub3QgdGhlIHNhbWUgYXMgZW5jcnlwdGVkIGRhdGEuIik7CisrICAgICAgICAgICAgfQorKyAg ICAgICAgfQorKworKyAgICAgICAgLy8gZ2V0IHZlY3RvciBvZiBzeW1rZXlzCisrCisrICAgICAg ICBFbnVtZXJhdGlvbjxDcnlwdG9Ub2tlbj4gZWN0ID0gbnVsbDsgCisrICAgICAgICBlY3QgPSAo RW51bWVyYXRpb248Q3J5cHRvVG9rZW4+KSBjbS5nZXRBbGxUb2tlbnMoKTsgCisrICAgICAgICBD cnlwdG9Ub2tlbiBjdCA9IG51bGw7IC8vY3QgPSBjbS5nZXRUb2tlbkJ5TmFtZSgiZVBhc3MgVG9r ZW4iKTsgCisrICAgICAgICB3aGlsZSAoZWN0Lmhhc01vcmVFbGVtZW50cygpKSAKKysgICAgICAg IHsgCisrICAgICAgICAgIGN0ID0gZWN0Lm5leHRFbGVtZW50KCk7IAorKyAgICAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oIkNyeXB0b1Rva2VuLm5hbWU9ICIgKyBjdC5nZXROYW1lKCkpOyAKKysg ICAgICAgIH0gCisrCisrICAgICAgICBTeW1tZXRyaWNLZXlbXSBrZXlzID0ga2V5VG9rZW4uZ2V0 Q3J5cHRvU3RvcmUoKS5nZXRTeW1tZXRyaWNLZXlzKCk7CisrCisrICAgICAgICBTeW1tZXRyaWNL ZXkgbWFjS2V5ID0gZ2V0U3ltS2V5QnlOYW1lKGtleXMsICJkZWZLZXlTZXQtbWFjS2V5Iik7Cisr CisrICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hY0tleTogIiArIG1hY0tleSk7CisrCisr ICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2Uo KTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgcHVibGljIHN0YXRpYyB2b2lkCisrICAgIGRp c3BsYXlCeXRlQXJyYXkoYnl0ZVtdIGJhLCBib29sZWFuIGhhc19jaGVja19zdW0pIHsKKysgICAg ICAgIGNoYXIgbWFzayA9IDB4ZmY7CisrCisrICAgICAgICBpZiAoIGhhc19jaGVja19zdW0gPT0g dHJ1ZSApCisrICAgICAgICAgICAgbWFzayA9IDB4ZmU7CisrCisrICAgICAgICBmb3IoaW50IGk9 MDsgaSA8IGJhLmxlbmd0aDsgaSsrKSB7CisrIAorKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJp bnQoIEludGVnZXIudG9IZXhTdHJpbmcoYmFbaV0mbWFzaykgKyAiICIgKTsKKysgICAgICAgICAg ICBpZiggKGkgJSAyNikgPT0gMjUgKSB7CisrICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJp bnRsbigiIik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgU3lzdGVtLm91 dC5wcmludGxuKCIiKTsKKysgICAgfQorKworKyAgICBwdWJsaWMgc3RhdGljICBieXRlW10gbG9u Z1RvQnl0ZXMobG9uZyB4KSB7CisrICAgICAgICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZm ZXIuYWxsb2NhdGUoTG9uZy5CWVRFUyk7CisrICAgICAgICBidWZmZXIucHV0TG9uZyh4KTsKKysg ICAgICAgIHJldHVybiBidWZmZXIuYXJyYXkoKTsKKysgICAgfQorKworKyAgICBwdWJsaWMgc3Rh dGljIGJ5dGVbXSBjb25jYXRCeXRlQXJyYXlzKGJ5dGVbXSBhLCBieXRlW10gYikgeworKyAgICAg ICAgYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2EubGVuZ3RoICsgYi5sZW5ndGhdOyAKKysgICAg ICAgIFN5c3RlbS5hcnJheWNvcHkoYSwgMCwgcmVzdWx0LCAwLCBhLmxlbmd0aCk7IAorKyAgICAg ICAgU3lzdGVtLmFycmF5Y29weShiLCAwLCByZXN1bHQsIGEubGVuZ3RoLCBiLmxlbmd0aCk7IAor KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAgfQorKworKyAgICBwdWJsaWMgc3RhdGljIFN5 bW1ldHJpY0tleSBnZXRTeW1LZXlCeU5hbWUoIFN5bW1ldHJpY0tleVtdIGtleXMsIFN0cmluZyBu YW1lKSB7CisrICAgICAgICBpZiAoIGtleXMgPT0gbnVsbCB8fCBuYW1lID09IG51bGwgKSB7Cisr ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisrICAgICAgICB9CisrCisrICAgICAgICBpbnQgbGVu ID0ga2V5cy5sZW5ndGg7CisrICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IGxlbiA7IGkrKyAp IHsKKysgICAgICAgICAgICBTeW1tZXRyaWNLZXkgY3VyID0ga2V5c1tpXTsKKysgICAgICAgICAg ICBpZiAoIGN1ciAhPSBudWxsICkgeworKyAgICAgICAgICAgICAgICBpZiggbmFtZS5lcXVhbHMo Y3VyLmdldE5pY2tOYW1lKCkpKSB7CisrICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnBy aW50bG4oIkZvdW5kIGtleTogIiArIG5hbWUgKyAiXG4iKTsKKysgICAgICAgICAgICAgICAgICAg IHJldHVybiBjdXI7IAorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg ICAgfQorKworKyAgICAgICAgcmV0dXJuIG51bGw7CisrICAgIH0KKyt9CitkaWZmIC11cCAuL21v emlsbGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL2phdmFfaWRzLmguam1hZ25l IC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvamF2YV9pZHMuaAor LS0tIC4vbW96aWxsYS9zZWN1cml0eS9qc3Mvb3JnL21vemlsbGEvanNzL3V0aWwvamF2YV9pZHMu aC5qbWFnbmUJMjAxNi0wNC0xNCAxNjozNDozNi43MjkyODc0MTYgLTA3MDAKKysrKyAuL21vemls bGEvc2VjdXJpdHkvanNzL29yZy9tb3ppbGxhL2pzcy91dGlsL2phdmFfaWRzLmgJMjAxNi0wNC0x NCAxNjozNDo0NS42MDgyMjYxNjMgLTA3MDAKK0BAIC0yNDMsNiArMjQzLDcgQEAgUFJfQkVHSU5f RVhURVJOX0MKKyAgKi8KKyAjZGVmaW5lIFBLMTFTWU1LRVlfQ0xBU1NfTkFNRSAib3JnL21vemls bGEvanNzL3BrY3MxMS9QSzExU3ltS2V5IgorICNkZWZpbmUgUEsxMVNZTUtFWV9DT05TVFJVQ1RP Ul9TSUcgIihbQilWIgorKyNkZWZpbmUgUEsxMVNZTUtFWV9DT05TVFJVQ1RPUl8xX1NJRyAiKFtC TGphdmEvbGFuZy9TdHJpbmc7KVYiIAorIAorIC8qCisgICogUEsxMVRva2VuCgpkaWZmIC0tZ2l0 IGEvanNzLnNwZWMgYi9qc3Muc3BlYwppbmRleCBiNGFhMTllLi44NjllYWI0IDEwMDY0NAotLS0g YS9qc3Muc3BlYworKysgYi9qc3Muc3BlYwpAQCAtMSw2ICsxLDYgQEAKIE5hbWU6ICAgICAgICAg ICBqc3MKIFZlcnNpb246ICAgICAgICA0LjIuNgotUmVsZWFzZTogICAgICAgIDM4JXs/ZGlzdH0K K1JlbGVhc2U6ICAgICAgICAzOSV7P2Rpc3R9CiBTdW1tYXJ5OiAgICAgICAgSmF2YSBTZWN1cml0 eSBTZXJ2aWNlcyAoSlNTKQogCiBHcm91cDogICAgICAgICAgU3lzdGVtIEVudmlyb25tZW50L0xp YnJhcmllcwpAQCAtMTYsMTEgKzE2LDExIEBAIFNvdXJjZTI6ICAgICAgICBodHRwOi8vcGtpLmZl ZG9yYXByb2plY3Qub3JnL3BraS9zb3VyY2VzLyV7bmFtZX0vJXtuYW1lfS0le3ZlcnNpCiBTb3Vy Y2UzOiAgICAgICAgaHR0cDovL3BraS5mZWRvcmFwcm9qZWN0Lm9yZy9wa2kvc291cmNlcy8le25h bWV9LyV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9L2xncGwudHh0CiBCdWlsZFJvb3Q6ICAg ICAgJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19p ZF91fSAtbikKIAotQnVpbGRSZXF1aXJlczogIG5zcy1kZXZlbCA+PSAzLjE0LjMKLUJ1aWxkUmVx dWlyZXM6ICBuc3ByLWRldmVsID49IDQuOS41CitCdWlsZFJlcXVpcmVzOiAgbnNzLWRldmVsID49 IDMuMjEuMAorQnVpbGRSZXF1aXJlczogIG5zcHItZGV2ZWwgPj0gNC4xMS4wCiBCdWlsZFJlcXVp cmVzOiAgamF2YS1kZXZlbAogUmVxdWlyZXM6ICAgICAgIGphdmEtaGVhZGxlc3MKLVJlcXVpcmVz OiAgICAgICBuc3MgPj0gMy4xNC4zCitSZXF1aXJlczogICAgICAgbnNzID49IDMuMjEuMAogCiBQ YXRjaDE6ICAgICAgICAganNzLWtleV9wYWlyX3VzYWdlX3dpdGhfb3BfZmxhZ3MucGF0Y2gKIFBh dGNoMjogICAgICAgICBqc3MtamF2YWRvY3MtcGFyYW0ucGF0Y2gKQEAgLTQ5LDYgKzQ5LDkgQEAg UGF0Y2gyNDogICAgICAgIGpzcy1TSEEtT0lELWZpeC5wYXRjaAogUGF0Y2gyNTogICAgICAgIGpz cy1SQzQtc3RyZW5naC12ZXJpZnkucGF0Y2gKIFBhdGNoMjY6ICAgICAgICBqc3Mtc3VwcG9ydC1U TFMxXzEtVExTMV8yLnBhdGNoCiBQYXRjaDI3OiAgICAgICAganNzLUZpeGVkLWJ1aWxkLWZhaWx1 cmVzLnBhdGNoCitQYXRjaDI4OiAgICAgICAganNzLVZlcmlmeUNlcnRpZmljYXRlLWVuaGFuY2Vt ZW50LnBhdGNoCitQYXRjaDI5OiAgICAgICAganNzLWx1bmFzYVVud3JhcC5wYXRjaAorUGF0Y2gz MDogICAgICAgIGpzcy1zeW1rZXktZW5oYW5jZW1lbnRzLnBhdGNoCiAKIAogJWRlc2NyaXB0aW9u CkBAIC05Myw2ICs5Niw5IEBAIFRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgQVBJIGRvY3VtZW50 YXRpb24gZm9yIEpTUy4KICVwYXRjaDI1IC1wMQogJXBhdGNoMjYgLXAxCiAlcGF0Y2gyNyAtcDEK KyVwYXRjaDI4IC1wMQorJXBhdGNoMjkgLXAxCislcGF0Y2gzMCAtcDEKIAogJWJ1aWxkCiBbIC16 ICIkSkFWQV9IT01FIiBdICYmIGV4cG9ydCBKQVZBX0hPTUU9JXtfanZtZGlyfS9qYXZhCkBAIC0x OTcsNiArMjAzLDE0IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKIAogCiAlY2hhbmdlbG9nCisq IFRodSBNYXkgMTkgMjAxNiBDaHJpc3RpbmEgRnUgPGNmdUByZWRoYXQuY29tPiAtIDQuMi42LTM5 CistIEJ1Z3ppbGxhIDEwNzQyMDggLSBwYXNzIHVwIGV4YWN0IEpTUyBjZXJ0aWZpY2F0ZSB2YWxp ZGF0aW9uIGVycm9ycyBmcm9tIE5TUworICAoZWRld2F0YSkKKy0gQnVnemlsbGEgMTMzMTU5NiAt IEtleSBhcmNoaXZhbCBmYWlscyB3aGVuIEtSQSBpcyBjb25maWd1cmVkIHdpdGggbHVuYXNhLgor ICAoY2Z1KQorLSBQS0kgdGlja2V0IDgwMSAtIE1lcmdlIHBraS1zeW1rZXkgaW50byBqc3MgKHBo YXNlIDEpCisgIChqbWFnbmUpCisKICogV2VkIERlYyAwOSAyMDE1IEVuZGkgRGV3YXRhIDxlZGV3 YXRhQHJlZGhhdC5jb20+IC0gNC4yLjYtMzgKIC0gQnVnemlsbGEgQnVnICMxMjg5Nzk5IC0gSlNT IGJ1aWxkIGZhaWx1cmUgb24gRjIzIGFuZCBSYXdoaWRlIChlZGV3YXRhKQogCg==