r27200 - trunk/freenet/test/freenet/crypt
[email protected] Wed, 22 Apr 2009 07:46:49 +0000
| Newsgroups | gmane.network.freenet.cvs |
|---|---|
| Message-ID | <[email protected]> |
QXV0aG9yOiBqMTZzZGl6CkRhdGU6IDIwMDktMDQtMjIgMDc6NDY6NDkgKzAwMDAgKFdlZCwgMjIg QXByIDIwMDkpCk5ldyBSZXZpc2lvbjogMjcyMDAKClJlbW92ZWQ6CiAgIHRydW5rL2ZyZWVuZXQv dGVzdC9mcmVlbmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yLmphdmEKICAgdHJ1bmsvZnJlZW5l dC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBHZW5lcmF0b3JUZXN0LmphdmEKTG9nOgpEb2hn aXQgcm0gdGVzdC9mcmVlbmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yLmphdmEgdGVzdC9mcmVl bmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yVGVzdC5qYXZhIFJlbW92ZSB0aGUgdW5pdCB0ZXN0 IHRvbwoKRGVsZXRlZDogdHJ1bmsvZnJlZW5ldC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBH ZW5lcmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9j cnlwdC9EU0FHcm91cEdlbmVyYXRvci5qYXZhCTIwMDktMDQtMjIgMDc6NDE6MjQgVVRDIChyZXYg MjcxOTkpCisrKyB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlwdC9EU0FHcm91cEdlbmVy YXRvci5qYXZhCTIwMDktMDQtMjIgMDc6NDY6NDkgVVRDIChyZXYgMjcyMDApCkBAIC0xLDIwMiAr MCwwIEBACi0vKiBUaGlzIGNvZGUgaXMgcGFydCBvZiBGcmVlbmV0LiBJdCBpcyBkaXN0cmlidXRl ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgKG9y IGF0IHlvdXIgb3B0aW9uIGFueSBsYXRlciB2ZXJzaW9uKS4gU2VlCi0gKiBodHRwOi8vd3d3Lmdu dS5vcmcvIGZvciBmdXJ0aGVyIGRldGFpbHMgb2YgdGhlIEdQTC4gKi8KLXBhY2thZ2UgZnJlZW5l dC5jcnlwdDsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEuc2Vj dXJpdHkuTWVzc2FnZURpZ2VzdDsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRo bUV4Y2VwdGlvbjsKLQotaW1wb3J0IG5ldC5pMnAudXRpbC5OYXRpdmVCaWdJbnRlZ2VyOwotCi1p bXBvcnQgZnJlZW5ldC5zdXBwb3J0LkhleFV0aWw7Ci0KLS8qKgotICogRFNBIEdyb3VwIEdlbmVy YXRvci4KLSAqIEFkYXB0ZWQgZnJvbSBGSVBTIDE4Ni0yLgotICogQ2FuIGdlbmVyYXRlIHZhbGlk IGdyb3VwcyBvZiBhbnkga2V5c2l6ZSBhbmQgYW55IGhhc2ggbGVuZ3RoLgotICovCi1wdWJsaWMg Y2xhc3MgRFNBR3JvdXBHZW5lcmF0b3IgewotCi0gICAgc3RhdGljIEJpZ0ludGVnZXIgc21hbGxQ cmltZXNbXSA9IG5ldyBCaWdJbnRlZ2VyW10geyBCaWdJbnRlZ2VyLnZhbHVlT2YoMyksCi0gICAg ICAgIEJpZ0ludGVnZXIudmFsdWVPZig1KSwgQmlnSW50ZWdlci52YWx1ZU9mKDcpLAotICAgICAg ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMTMpLAotICAgICAg ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMTcpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMTkpLAotICAgICAg ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMjMpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMjkpfTsKLQotCXB1 YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBOb1N1Y2hBbGdvcml0 aG1FeGNlcHRpb24gewotCQlZYXJyb3cgciA9IG5ldyBZYXJyb3coKTsKLQkJaW50IGtleUxlbmd0 aCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1swXSk7Ci0JCWludCBoYXNoTGVuZ3RoID0gSW50ZWdl ci5wYXJzZUludChhcmdzWzFdKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJLZXkgbGVuZ3RoOiAi K2tleUxlbmd0aCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSGFzaCBsZW5ndGg6ICIraGFzaExl bmd0aCk7Ci0JCWlmKGhhc2hMZW5ndGggPiBrZXlMZW5ndGgpCi0JCQl0aHJvdyBuZXcgSWxsZWdh bEFyZ3VtZW50RXhjZXB0aW9uKCJoYXNoTGVuZ3RoIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBr ZXlMZW5ndGgiKTsKLQkJTWVzc2FnZURpZ2VzdCBtZDsKLQkJaWYoaGFzaExlbmd0aCA9PSAyNTYp IHsKLQkJCW1kID0gU0hBMjU2LmdldE1lc3NhZ2VEaWdlc3QoKTsKLQkJfSBlbHNlIGlmKGhhc2hM ZW5ndGggPT0gMTYwKSB7Ci0JCQltZCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIlNIQS0x NjAiKTsKLQkJfSBlbHNlIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o IkludmFsaWQgaGFzaCBsZW5ndGggIitoYXNoTGVuZ3RoKTsKLQkJfQotCQlpZihrZXlMZW5ndGgg JSA2NCAhPSAwKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiS2V5IGxl bmd0aCBtdXN0IGJlIGRpdmlzaWJsZSBieSA2NCIpOwotCQlpZihrZXlMZW5ndGggJSBoYXNoTGVu Z3RoICE9IDApCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJLZXkgbGVu Z3RoIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGhhc2ggbGVuZ3RoIChzaG9ydCBjdXQgdGFrZW4gaGVy ZSkiKTsKLQkJd2hpbGUoIWdlbmVyYXRlKHIsIGtleUxlbmd0aCwgaGFzaExlbmd0aCwgbWQpKTsK LQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGdlbmVyYXRlKFJhbmRvbVNvdXJjZSByLCBp bnQga2V5TGVuZ3RoLCBpbnQgaGFzaExlbmd0aCwgTWVzc2FnZURpZ2VzdCBtZCkgewotCQkKLQkJ aW50IG4gPSBrZXlMZW5ndGggLyBoYXNoTGVuZ3RoOwotCQkKLQkJLy8gMTogU0VFRCA9IGFyYml0 cmFyeSBzZXF1ZW5jZSBvZiBhdCBsZWFzdCBoYXNoTGVuZ3RoIGJpdHMKLQkJLy8gZyA9IGxlbmd0 aCBvZiBTRUVEIGluIGJpdHMKLQkJaW50IGcgPSBoYXNoTGVuZ3RoICogMjsKLQkJYnl0ZVtdIHNl ZWQgPSBuZXcgYnl0ZVtnLzhdOwotCQlyLm5leHRCeXRlcyhzZWVkKTsKLQkJCi0JCS8vIDI6IFUg PSBTSEEtMjU2KFNFRUQpIFhPUiBTSEEtMjU2KFNFRUQrMSBtb2QgMl5nKQotCQlieXRlW10gc2Vl ZFBsdXMxID0gaW5jcmVtZW50KHNlZWQpOwotCQlieXRlW10gc2VlZEhhc2ggPSBtZC5kaWdlc3Qo c2VlZCk7Ci0JCWJ5dGVbXSBzZWVkUGx1czFIYXNoID0gbWQuZGlnZXN0KHNlZWRQbHVzMSk7Ci0J CWJ5dGVbXSBVID0gbmV3IGJ5dGVbaGFzaExlbmd0aC84XTsKLQkJZm9yKGludCBpPTA7aTxVLmxl bmd0aDtpKyspCi0JCQlVW2ldID0gKGJ5dGUpIChzZWVkSGFzaFtpXSBeIHNlZWRQbHVzMUhhc2hb aV0pOwotCQkKLQkJLy8gMzogU2V0IExTQiBhbmQgTVNCIG9uIFUgdG8gMSwgcSA9IFUKLQkJYnl0 ZVtdIHFCdWYgPSBuZXcgYnl0ZVtoYXNoTGVuZ3RoLzhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KFUs IDAsIHFCdWYsIDAsIGhhc2hMZW5ndGgvOCk7Ci0JCXFCdWZbMF0gPSAoYnl0ZSkgKHFCdWZbMF0g fCAxMjgpOwotCQlxQnVmW3FCdWYubGVuZ3RoLTFdID0gKGJ5dGUpIChxQnVmW3FCdWYubGVuZ3Ro LTFdIHwgMSk7Ci0JCUJpZ0ludGVnZXIgcSA9IG5ldyBCaWdJbnRlZ2VyKDEsIHFCdWYpOwotCQkK LQkJLy8gNDogQ2hlY2sgdGhhdCBxIGlzIHByaW1lLCBhbmQgMnErMSBpcyBwcmltZQotCQkvLyA1 OiBJZiBub3QsIHJlc3RhcnQgZnJvbSBzdGVwIDEKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigi TWF5YmUgZ290IHByaW1lOiAiK3EudG9TdHJpbmcoMTYpKyAiICgiK3EuYml0TGVuZ3RoKCkrICcp Jyk7Ci0JCQotCQlpZighaXNQcmltZShxKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJCi0JCVN5c3Rl bS5vdXQucHJpbnRsbigiR290IHByaW1lIHEiKTsKLQkJCi0JCUJpZ0ludGVnZXIgc29waGllR2Vy bWFpbkNoZWNrID0gcS5hZGQocSkuYWRkKEJpZ0ludGVnZXIuT05FKTsKLQkJaWYoIWlzUHJpbWUo c29waGllR2VybWFpbkNoZWNrKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTeXN0ZW0ub3V0LnBy aW50bG4oIkdvdCBTRy1wcmltZSBxIik7Ci0JCQotCQkvLyA2OiBMZXQgY291bnRlciA9IDAgYW5k IG9mZnNldCA9IDIKLQkJCi0JCWludCBjb3VudGVyID0gMDsKLQkJaW50IG9mZnNldCA9IDI7Ci0J CQotCQlieXRlW10gY3VyU2VlZCA9IHNlZWRQbHVzMTsKLQkJCi0JCXdoaWxlKHRydWUpIHsKLQkJ Ci0JCQkvLyA3OiBGb3IgayA9IDAuLi5uIGxldCBWX2sgPSBTSEEtMjU2KChTRUVEK29mZnNldCtr KSBtb2QgMl5nKQotCQkJCi0JCQlieXRlW11bXSBWID0gbmV3IGJ5dGVbbl1bXTsKLQkJCQotCQkJ Zm9yKGludCBpPTA7aTxuO2krKykgewotCQkJCWN1clNlZWQgPSBpbmNyZW1lbnQoY3VyU2VlZCk7 Ci0JCQkJVltpXSA9IG1kLmRpZ2VzdChjdXJTZWVkKTsKLQkJCX0KLQkJCQotCQkJLy8gODogUGFj ayBhbGwgdGhlIFYncyBpbnRvIFcgYml0LXdpc2UsIHNldCB0aGUgdG9wIGJpdCBzbyBpcyBiZXR3 ZWVuIDJeKEwtMSkgYW5kIDJeTAotCQkJYnl0ZVtdIFdidWYgPSBuZXcgYnl0ZVtrZXlMZW5ndGgv OF07Ci0JCQlmb3IoaW50IGk9MDtpPGtleUxlbmd0aDtpKz1oYXNoTGVuZ3RoKSB7Ci0JCQkJU3lz dGVtLmFycmF5Y29weShWW2kvaGFzaExlbmd0aF0sIDAsIFdidWYsIGkvOCwgaGFzaExlbmd0aC84 KTsKLQkJCX0KLQkJCVdidWZbMF0gPSAoYnl0ZSkgKFdidWZbMF0gfCAxMjgpOwotCQkJCi0JCQlC aWdJbnRlZ2VyIFggPSBuZXcgTmF0aXZlQmlnSW50ZWdlcigxLCBXYnVmKTsKLQkJCQotCQkJLy8g OTogTGV0IGMgPSBYIG1vZCAycS4gU2V0IHAgPSBYIC0gKCBjIC0gMSApLiBUaGVyZWZvcmUgcCBt b2QgMnEgPSAxLgotCQkJCi0JCQlCaWdJbnRlZ2VyIGMgPSBYLm1vZChxLmFkZChxKSk7Ci0JCQlC aWdJbnRlZ2VyIHAgPSBYLnN1YnRyYWN0KGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKTsKLQkJ CQotCQkJaWYocC5iaXRMZW5ndGgoKSA+PSBrZXlMZW5ndGgtMSkgewotCQkJCWlmKGlzUHJpbWUo cCkpIHsKLQkJCQkJZmluaXNoKHIsIGhhc2hMZW5ndGgsIG5ldyBOYXRpdmVCaWdJbnRlZ2VyKHAp LCBuZXcgTmF0aXZlQmlnSW50ZWdlcihxKSwgc2VlZCwgY291bnRlcik7Ci0JCQkJCXJldHVybiB0 cnVlOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJY291bnRlcisrOwotCQkJb2Zmc2V0ICs9IG47Ci0J CQlpZihjb3VudGVyID49IDQwOTYpIHJldHVybiBmYWxzZTsKLQkJfQkJCi0JfQotCi0gICAgcHJp dmF0ZSBzdGF0aWMgdm9pZCBmaW5pc2goUmFuZG9tU291cmNlIHIsIGludCBoYXNoTGVuZ3RoLCBO YXRpdmVCaWdJbnRlZ2VyIHAsIE5hdGl2ZUJpZ0ludGVnZXIgcSwgYnl0ZVtdIHNlZWQsIGludCBj b3VudGVyKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiU0VFRDogIitIZXhVdGlsLmJ5dGVz VG9IZXgoc2VlZCkpOwotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNPVU5URVI6ICIrY291bnRl cik7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigicDogIitwLnRvU3RyaW5nKDE2KSsiICgiK3Au Yml0TGVuZ3RoKCkrICcpJyk7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigicTogIitxLnRvU3Ry aW5nKDE2KSsiICgiK3EuYml0TGVuZ3RoKCkrICcpJyk7Ci0JCS8vIE5vdyBnZW5lcmF0ZSBnIChh bGdvcml0aG0gZnJvbSBhcHBlbmRpeCA0IG9mIEZJUFMgMTg2LTIpCi0gICAgCU5hdGl2ZUJpZ0lu dGVnZXIgZzsKLSAgICAJZG8gewotICAgIAkJQmlnSW50ZWdlciBlID0gcC5zdWJ0cmFjdChCaWdJ bnRlZ2VyLk9ORSkuZGl2aWRlKHEpOwotICAgIAkJTmF0aXZlQmlnSW50ZWdlciBoOwotICAgIAkJ ZG8gewotICAgIAkJCWggPSBuZXcgTmF0aXZlQmlnSW50ZWdlcihoYXNoTGVuZ3RoLCByKTsKLSAg ICAJCX0gd2hpbGUoaC5jb21wYXJlVG8ocC5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpID49IDAp OwotICAgIAkJZyA9IChOYXRpdmVCaWdJbnRlZ2VyKSBoLm1vZFBvdyhlLCBwKTsKLSAgICAJfSB3 aGlsZSAoZy5lcXVhbHMoQmlnSW50ZWdlci5PTkUpKTsKLSAgICAJRFNBR3JvdXAgZ3JvdXAgPSBu ZXcgRFNBR3JvdXAocCwgcSwgZyk7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiZzogIitnLnRv SGV4U3RyaW5nKCkrIiAoIitnLmJpdExlbmd0aCgpKyAnKScpOwotICAgIAlTeXN0ZW0ub3V0LnBy aW50bG4oIkdyb3VwOiAiK2dyb3VwLnZlcmJvc2VUb1N0cmluZygpKTsKLSAgICAJbG9uZyB0b3Rh bFNpZ1RpbWUgPSAwOwotICAgIAlsb25nIHRvdGFsVmVyaWZ5VGltZSA9IDA7Ci0gICAgCWZvcihp bnQgaT0wO2k8MTAwMDA7aSsrKSB7Ci0gICAgCWJ5dGVbXSB0ZXN0SGFzaCA9IG5ldyBieXRlW2hh c2hMZW5ndGgvOF07Ci0gICAgCXIubmV4dEJ5dGVzKHRlc3RIYXNoKTsKLSAgICAJTmF0aXZlQmln SW50ZWdlciBtID0gbmV3IE5hdGl2ZUJpZ0ludGVnZXIoMSwgdGVzdEhhc2gpOwotICAgIAlEU0FQ cml2YXRlS2V5IHByaXZLZXkgPSBuZXcgRFNBUHJpdmF0ZUtleShncm91cCwgcik7Ci0gICAgCURT QVB1YmxpY0tleSBwdWJLZXkgPSBuZXcgRFNBUHVibGljS2V5KGdyb3VwLCBwcml2S2V5KTsKLSAg ICAJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAJRFNBU2lnbmF0 dXJlIHNpZyA9IERTQS5zaWduKGdyb3VwLCBwcml2S2V5LCBtLCByKTsKLSAgICAJbG9uZyBtaWRk bGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAJYm9vbGVhbiBzdWNjZXNzID0g RFNBLnZlcmlmeShwdWJLZXksIHNpZywgbSwgZmFsc2UpOwotICAgIAlsb25nIGVuZCA9IFN5c3Rl bS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgIAlpZihzdWNjZXNzKSB7Ci0gICAgCQl0b3RhbFNp Z1RpbWUgKz0gKG1pZGRsZSAtIG5vdyk7Ci0gICAgCQl0b3RhbFZlcmlmeVRpbWUgKz0gKGVuZCAt IG1pZGRsZSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNJR05B VFVSRSBWRVJJRklDQVRJT04gRkFJTEVEISEhIik7Ci0gICAgCQlTeXN0ZW0uZXhpdCgxKTsKLSAg ICAJfQotICAgIAl9Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHNpZ25l ZCBhbmQgdmVyaWZpZWQgMTAsMDAwIHRpbWVzLCBhdmVyYWdlIHNpZyB0aW1lICIrdG90YWxTaWdU aW1lIC8gMTAwMDAuMCArIiwgYXZlcmFnZSB2ZXJpZnkgdGltZSAiK3RvdGFsVmVyaWZ5VGltZS8x MDAwMC4wKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBieXRlW10gaW5jcmVtZW50KGJ5dGVbXSBz ZWVkKSB7Ci0gICAgCWJ5dGVbXSBvYnVmID0gbmV3IGJ5dGVbc2VlZC5sZW5ndGhdOwotICAgIAlT eXN0ZW0uYXJyYXljb3B5KHNlZWQsIDAsIG9idWYsIDAsIHNlZWQubGVuZ3RoKTsKLSAgICAJaW50 IHBvcyA9IHNlZWQubGVuZ3RoLTE7Ci0gICAgCXdoaWxlKHBvcyA+PSAwKSB7Ci0gICAgCQlieXRl IGIgPSAoYnl0ZSkgKG9idWZbcG9zXSArIDEpOwotICAgIAkJb2J1Zltwb3NdID0gYjsKLSAgICAJ CWlmKGIgIT0gMCkgcmV0dXJuIG9idWY7Ci0gICAgCQlwb3MtLTsKLSAgICAJfQotICAgIAlyZXR1 cm4gb2J1ZjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltZShCaWdJbnRlZ2Vy IGIpIHsKLQkJaWYoQmlnSW50ZWdlci5PTkUuY29tcGFyZVRvKGIpID4gLTEpCi0JCQl0aHJvdyBu ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW4ndCBiZSBhIHByaW1lIG51bWJlciEiKTsK LQkJZm9yKGludCBpID0gMDsgaSA8IHNtYWxsUHJpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZihi Lm1vZChzbWFsbFByaW1lc1tpXSkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpCi0JCQkJcmV0dXJu IGZhbHNlOwotCQl9Ci0JCS8vIEZJUFMgMTg2LTIgcmVjb21tZW5kcyAyXjEwMDoxIGNvbmZpZGVu Y2UKLSAgICAgICAgcmV0dXJuIGIuaXNQcm9iYWJsZVByaW1lKDIwMCk7Ci0gICAgfQotCi19CgpE ZWxldGVkOiB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlwdC9EU0FHcm91cEdlbmVyYXRv clRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlw dC9EU0FHcm91cEdlbmVyYXRvclRlc3QuamF2YQkyMDA5LTA0LTIyIDA3OjQxOjI0IFVUQyAocmV2 IDI3MTk5KQorKysgdHJ1bmsvZnJlZW5ldC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBHZW5l cmF0b3JUZXN0LmphdmEJMjAwOS0wNC0yMiAwNzo0Njo0OSBVVEMgKHJldiAyNzIwMCkKQEAgLTEs MzkgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu Ci0gKi8KLQotcGFja2FnZSBmcmVlbmV0LmNyeXB0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0lu dGVnZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVz dCBjYXNlIGZvciB0aGUge0BsaW5rIGZyZWVuZXQuY3J5cHQuRFNBR3JvdXBHZW5lcmF0b3JUZXN0 fSBjbGFzcy4KLSAqIAotICogQGF1dGhvciBGbG9yZW50IERhaWduae+/vXJlICZsdDtuZXh0Z2Vu c0BmcmVlbmV0cHJvamVjdC5vcmcmZ3Q7Ci0gKi8KLXB1YmxpYyBjbGFzcyBEU0FHcm91cEdlbmVy YXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNQcmltZSgp IHsgLy8gTm8gbmVlZCB0byB0ZXN0IGJlbG93IDMwIGFzIGl0IHdvbid0IHdvcmsgYW55d2F5Ci0J CXRyeSB7IERTQUdyb3VwR2VuZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci5aRVJPKTsgZmFpbCgp OyB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkge30KLQkJdHJ5IHsgRFNBR3Jv dXBHZW5lcmF0b3IuaXNQcmltZShCaWdJbnRlZ2VyLk9ORSk7IGZhaWwoKTsgfSBjYXRjaCAoSWxs ZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHt9Ci0JCQotCQlhc3NlcnRUcnVlKERTQUdyb3VwR2Vu ZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci52YWx1ZU9mKDIpKSk7Ci0JCWFzc2VydFRydWUoRFNB R3JvdXBHZW5lcmF0b3IuaXNQcmltZShCaWdJbnRlZ2VyLnZhbHVlT2YoMTAyMSkpKTsKLQkJCi0J CWFzc2VydEZhbHNlKERTQUdyb3VwR2VuZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci52YWx1ZU9m KDU1KSkpOwotCX0KLX0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmN2cyBtYWlsaW5nIGxpc3QKY3ZzQGZyZWVuZXRwcm9qZWN0Lm9yZwpodHRwOi8vZW11 LmZyZWVuZXRwcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vY3Zz