From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 29976 invoked from network); 20 Jul 2022 08:42:47 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 20 Jul 2022 08:42:47 -0000 Content-Type: multipart/mixed; boundary="===============3957225427361766809==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_gnupg=3A_fix_new_yubikey_firmware_versions?= To: ml@inbox.vuxu.org From: jcgruenhage Reply-to: ml@inbox.vuxu.org Message-ID: Date: Wed, 20 Jul 2022 10:42:46 +0200 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============3957225427361766809== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IGpjZ3J1ZW5oYWdlIGFnYWluc3QgbWFzdGVy IG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9qY2dy dWVuaGFnZS92b2lkLXBhY2thZ2VzIGdudXBnLTIuMy43XzMKaHR0cHM6Ly9naXRodWIuY29tL3Zv aWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzM4MTUwCgpnbnVwZzogZml4IG5ldyB5dWJpa2V5 IGZpcm13YXJlIHZlcnNpb25zClBhdGNoIGhhcyBhbHJlYWR5IGJlZW4gc3VibWl0dGVkIHVwc3Ry ZWFtCihodHRwczovL2Rldi5nbnVwZy5vcmcvckdmMzRiOTE0N2ViMzA3MGJjZTgwZDUzZmViYWE1 NjQxNjRjZDZjOTc3KSwgYW5kCndhcyBjb25maXJtZWQgd29ya2luZyBvbiB0aGUgbGlua2VkIGlz c3VlCgpAdmlnb3V4IHdhbnRlZCB0byB0ZXN0IHRoaXMsIGFzIHRoZXkgd2VyZSBydW5uaW5nIGlu dG8gdGhpcyBpc3N1ZSBhbmQgcG9pbnRlZCBpdCBvdXQgb24gSVJDCgo8IS0tIFVuY29tbWVudCBy ZWxldmFudCBzZWN0aW9ucyBhbmQgZGVsZXRlIG9wdGlvbnMgd2hpY2ggYXJlIG5vdCBhcHBsaWNh YmxlIC0tPgoKIyMjIyBUZXN0aW5nIHRoZSBjaGFuZ2VzCi0gSSB0ZXN0ZWQgdGhlIGNoYW5nZXMg aW4gdGhpcyBQUjogKipZRVMqKgoKPCEtLQojIyMjIE5ldyBwYWNrYWdlCi0gVGhpcyBuZXcgcGFj a2FnZSBjb25mb3JtcyB0byB0aGUgW3F1YWxpdHkgcmVxdWlyZW1lbnRzXShodHRwczovL2dpdGh1 Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL01hbnVhbC5tZCNxdWFs aXR5LXJlcXVpcmVtZW50cyk6ICoqWUVTKip8KipOTyoqCi0tPgoKPCEtLSBOb3RlOiBJZiB0aGUg YnVpbGQgaXMgbGlrZWx5IHRvIHRha2UgbW9yZSB0aGFuIDIgaG91cnMsIHBsZWFzZSBhZGQgY2kg c2tpcCB0YWcgYXMgZGVzY3JpYmVkIGluCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3Zv aWQtcGFja2FnZXMvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kI2NvbnRpbnVvdXMtaW50ZWdy YXRpb24KYW5kIHRlc3QgYXQgbGVhc3Qgb25lIG5hdGl2ZSBidWlsZCBhbmQsIGlmIHN1cHBvcnRl ZCwgYXQgbGVhc3Qgb25lIGNyb3NzIGJ1aWxkLgpJZ25vcmUgdGhpcyBzZWN0aW9uIGlmIHRoaXMg UFIgaXMgbm90IHNraXBwaW5nIENJLgotLT4KPCEtLQojIyMjIExvY2FsIGJ1aWxkIHRlc3RpbmcK LSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgbXkgbmF0aXZlIGFyY2hpdGVjdHVyZSwgKEFS Q0gtTElCQykKLSBJIGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgdGhlc2UgYXJjaGl0ZWN0dXJl cyAoaWYgc3VwcG9ydGVkLiBtYXJrIGNyb3NzYnVpbGRzKToKICAtIGFhcmNoNjQtbXVzbAogIC0g YXJtdjdsCiAgLSBhcm12NmwtbXVzbAotLT4KCgpBIHBhdGNoIGZpbGUgZnJvbSBodHRwczovL2dp dGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMzgxNTAucGF0Y2ggaXMgYXR0 YWNoZWQ= --===============3957225427361766809== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-gnupg-2.3.7_3-38150.patch" RnJvbSA0NTA0NjQ4MjIxZTE3Yzc3MjE0NDU3OTg5ZDQ5MTM4MWFjN2M3YzFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/SmFuPTIwQ2hyaXN0aWFuPTIwR3I9QzM9QkNu aGFnZT89CiA8amFuLmNocmlzdGlhbkBncnVlbmhhZ2UueHl6PgpEYXRlOiBXZWQsIDIwIEp1bCAy MDIyIDEwOjM5OjUwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZ251cGc6IGZpeCBuZXcgeXViaWtl eSBmaXJtd2FyZSB2ZXJzaW9ucwoKUGF0Y2ggaGFzIGFscmVhZHkgYmVlbiBzdWJtaXR0ZWQgdXBz dHJlYW0KKGh0dHBzOi8vZGV2LmdudXBnLm9yZy9yR2YzNGI5MTQ3ZWIzMDcwYmNlODBkNTNmZWJh YTU2NDE2NGNkNmM5NzcpLCBhbmQKd2FzIGNvbmZpcm1lZCB3b3JraW5nIG9uIHRoZSBsaW5rZWQg aXNzdWUKLS0tCiAuLi4vcGF0Y2hlcy9maXgtbmV3LXl1YmlrZXktZmlybXdhcmUucGF0Y2ggICAg fCA2NTk4ICsrKysrKysrKysrKysrKysrCiBzcmNwa2dzL2dudXBnL3RlbXBsYXRlICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDY1OTkgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvZ251cGcvcGF0 Y2hlcy9maXgtbmV3LXl1YmlrZXktZmlybXdhcmUucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNwa2dz L2dudXBnL3BhdGNoZXMvZml4LW5ldy15dWJpa2V5LWZpcm13YXJlLnBhdGNoIGIvc3JjcGtncy9n bnVwZy9wYXRjaGVzL2ZpeC1uZXcteXViaWtleS1maXJtd2FyZS5wYXRjaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYyODNhOTkyOTEzOQotLS0gL2Rldi9udWxsCisr KyBiL3NyY3BrZ3MvZ251cGcvcGF0Y2hlcy9maXgtbmV3LXl1YmlrZXktZmlybXdhcmUucGF0Y2gK QEAgLTAsMCArMSw2NTk4IEBACitkaWZmIC0tZ2l0IGEvc2NkL2FwcC1vcGVucGdwLmMgYi9zY2Qv YXBwLW9wZW5wZ3AuYworaW5kZXggOGJiMzQ2YTg2Li40NjY3NDE2ZGYgMTAwNjQ0CistLS0gYS9z Y2QvYXBwLW9wZW5wZ3AuYworKysrIGIvc2NkL2FwcC1vcGVucGdwLmMKK0BAIC0xLDY1NzIgKzEs NjU4NSBAQAorIC8qIGFwcC1vcGVucGdwLmMgLSBUaGUgT3BlblBHUCBjYXJkIGFwcGxpY2F0aW9u LgorICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1LCAyMDA3LTIwMDksCisgICogICAgICAgICAg ICAgICAyMDEzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICogQ29weXJp Z2h0IChDKSAyMDAzLTIwMDUsIDIwMDctMjAwOSwgMjAxMy0yMDE1LCAyMDIwIGcxMCBDb2RlIEdt YkgKKyAgKgorICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdudVBHLgorICAqCisgICogR251UEcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICAqCisgICogR251UEcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAqCisgICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKyAKKyAvKiBTb21lIG5vdGVzOgorIAorICAgIENIViBt ZWFucyBDYXJkIEhvbGRlciBWZXJpZmljYXRpb24gYW5kIGlzIG5vdGhpbmcgZWxzZSB0aGFuIGEg UElOCisgICAgb3IgcGFzc3dvcmQuICBUaGF0IHRlcm0gc2VlbXMgdG8gaGF2ZSBiZWVuIHVzZWQg b3JpZ2luYWxseSB3aXRoIEdTTQorICAgIGNhcmRzLiAgVmVyc2lvbiB2MiBvZiB0aGUgc3BlY3Mg Y2hhbmdlcyB0aGUgdGVybSB0byB0aGUgY2xlYXJlcgorICAgIHRlcm0gUFcgZm9yIHBhc3N3b3Jk LiAgV2UgdXNlIHRoZSB0ZXJtcyBoZXJlIGludGVyY2hhbmdlYWJsZQorICAgIGJlY2F1c2Ugd2Ug ZG8gbm90IHdhbnQgdG8gY2hhbmdlIGV4aXN0aW5nIHN0cmluZ3MgaTE4biB3aXNlLgorIAorICAg IFZlcnNpb24gMiBvZiB0aGUgc3BlY3MgYWxzbyBkcm9wcyB0aGUgc2VwYXJhdGUgUFcyIHdoaWNo IHdhcworICAgIHJlcXVpcmVkIGluIHYxIGR1ZSB0byBJU08gcmVxdWlyZW1lbnRzLiAgSXQgaXMg bm93IHBvc3NpYmxlIHRvIGhhdmUKKyAgICBvbmUgcGh5c2ljYWwgUFcgYnV0IHR3byByZWZlcmVu Y2UgdG8gaXQgc28gdGhhdCB0aGV5IGNhbiBiZQorICAgIGluZGl2aWR1YWxseSBiZSB2ZXJpZmll ZCAoZS5nLiB0byBpbXBsZW1lbnQgYSBmb3JjZWQgdmVyaWZpY2F0aW9uCisgICAgZm9yIG9uZSBr ZXkpLiAgVGh1cyB5b3Ugd2lsbCBub3RpY2VkIHRoZSB1c2Ugb2YgUFcyIHdpdGggdGhlIHZlcmlm eQorICAgIGNvbW1hbmQgYnV0IG5vdCB3aXRoIGNoYW5nZV9yZWZlcmVuY2VfZGF0YSBiZWNhdXNl IHRoZSBsYXR0ZXIKKyAgICBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGUgcGh5c2ljYWwgUFcuCisg CisgICAgVGhlIFJlc2V0IENvZGUgKFJDKSBhcyBpbXBsZW1lbnRlZCBieSB2MiBjYXJkcyB1c2Vz IHRoZSBzYW1lIGVycm9yCisgICAgY291bnRlciBhcyB0aGUgUFcyIG9mIHYxIGNhcmRzLiAgQnkg ZGVmYXVsdCBubyBSQyBpcyBzZXQgYW5kIHRodXMKKyAgICB0aGF0IGVycm9yIGNvdW50ZXIgaXMg c2V0IHRvIDAuICBBZnRlciBzZXR0aW5nIHRoZSBSQyB0aGUgZXJyb3IKKyAgICBjb3VudGVyIHdp bGwgYmUgaW5pdGlhbGl6ZWQgdG8gMy4KKyAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+ CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0 ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2lu Y2x1ZGUgPHRpbWUuaD4KKyAKKyAjaW5jbHVkZSAic2NkYWVtb24uaCIKKyAjaW5jbHVkZSAiLi4v Y29tbW9uL3V0aWwuaCIKKyAjaW5jbHVkZSAiLi4vY29tbW9uL2kxOG4uaCIKKyAjaW5jbHVkZSAi aXNvNzgxNi5oIgorICNpbmNsdWRlICIuLi9jb21tb24vdGx2LmgiCisgI2luY2x1ZGUgIi4uL2Nv bW1vbi9ob3N0Mm5ldC5oIgorICNpbmNsdWRlICIuLi9jb21tb24vb3BlbnBncGRlZnMuaCIKKyAK KyAKKyAjZGVmaW5lIEtERl9EQVRBX0xFTkdUSF9NSU4gIDkwCisgI2RlZmluZSBLREZfREFUQV9M RU5HVEhfTUFYIDExMAorIAorIC8qIFRoZSBBSUQgb2YgdGhpcyBhcHBsaWNhdGlvbi4gICovCisg c3RhdGljIGNoYXIgY29uc3Qgb3BlbnBncF9haWRbXSA9IHsgMHhEMiwgMHg3NiwgMHgwMCwgMHgw MSwgMHgyNCwgMHgwMSB9OworIAorIAorIC8qIEEgdGFibGUgZGVzY3JpYmluZyB0aGUgRE9zIG9m IHRoZSBjYXJkLiAgKi8KKyBzdGF0aWMgc3RydWN0IHsKKyAgIGludCB0YWc7CisgICBpbnQgY29u c3RydWN0ZWQ7CisgICBpbnQgZ2V0X2Zyb207ICAvKiBDb25zdHJ1Y3RlZCBETyB3aXRoIHRoaXMg RE8gb3IgMCBmb3IgZGlyZWN0IGFjY2Vzcy4gKi8KKyAgIHVuc2lnbmVkIGludCBiaW5hcnk6MTsK KyAgIHVuc2lnbmVkIGludCBkb250X2NhY2hlOjE7CisgICB1bnNpZ25lZCBpbnQgZmx1c2hfb25f ZXJyb3I6MTsKKyAgIHVuc2lnbmVkIGludCBnZXRfaW1tZWRpYXRlX2luX3YxMToxOyAvKiBFbmFi bGUgYSBoYWNrIHRvIGJ5cGFzcyB0aGUgY2FjaGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGlzIGRhdGEgb2JqZWN0IGlmIGl0IGlzIHVzZWQgaW4gMS4xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxhdGVyIHZlcnNpb25zIG9mIHRoZSBjYXJk LiAgVGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IHdvcmsg d2l0aCBjb21wb3NpdGUgRE8gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aXMgY3VycmVudGx5IG9ubHkgdXNlZnVsIGZvciB0aGUgQ0hWCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzIGJ5dGVzLiAqLworICAgdW5zaWduZWQgaW50IHRyeV9leHRs ZW46MjsgICAgICAgICAgIC8qIExhcmdlIG9iamVjdDsgdHJ5IHRvIHVzZSBhbiBleHRlbmRlZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCBBUERVIHdoZW4gIT0wLiAg VGhlIHNpemUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVk IGJ5IGV4dGNhcC5tYXhfY2VydGxlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdoZW4gPT0gMSwgYW5kIGJ5IGV4dGNhcC5tYXhfc3BlY2lhbF9kbworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdoZW4gPT0gMi4gICovCisgICBjaGFyICpkZXNjOworIH0gZGF0 YV9vYmplY3RzW10gPSB7CisgICB7IDB4MDA1RSwgMCwgICAgMCwgMSwgMCwgMCwgMCwgMiwgIkxv Z2luIERhdGEiIH0sCisgICB7IDB4NUY1MCwgMCwgICAgMCwgMCwgMCwgMCwgMCwgMiwgIlVSTCIg fSwKKyAgIHsgMHg1RjUyLCAwLCAgICAwLCAxLCAwLCAwLCAwLCAwLCAiSGlzdG9yaWNhbCBCeXRl cyIgfSwKKyAgIHsgMHgwMDY1LCAxLCAgICAwLCAxLCAwLCAwLCAwLCAwLCAiQ2FyZGhvbGRlciBS ZWxhdGVkIERhdGEifSwKKyAgIHsgMHgwMDVCLCAwLCAweDY1LCAwLCAwLCAwLCAwLCAwLCAiTmFt ZSIgfSwKKyAgIHsgMHg1RjJELCAwLCAweDY1LCAwLCAwLCAwLCAwLCAwLCAiTGFuZ3VhZ2UgcHJl ZmVyZW5jZXMiIH0sCisgICB7IDB4NUYzNSwgMCwgMHg2NSwgMCwgMCwgMCwgMCwgMCwgIlNhbHV0 YXRpb24iIH0sCisgICB7IDB4MDA2RSwgMSwgICAgMCwgMSwgMCwgMCwgMCwgMCwgIkFwcGxpY2F0 aW9uIFJlbGF0ZWQgRGF0YSIgfSwKKyAgIHsgMHgwMDRGLCAwLCAweDZFLCAxLCAwLCAwLCAwLCAw LCAiQUlEIiB9LAorICAgeyAweDAwNzMsIDEsICAgIDAsIDEsIDAsIDAsIDAsIDAsICJEaXNjcmV0 aW9uYXJ5IERhdGEgT2JqZWN0cyIgfSwKKyAgIHsgMHgwMDQ3LCAwLCAweDZFLCAxLCAxLCAwLCAw LCAwLCAiQ2FyZCBDYXBhYmlsaXRpZXMiIH0sCisgICB7IDB4MDBDMCwgMCwgMHg2RSwgMSwgMSwg MCwgMCwgMCwgIkV4dGVuZGVkIENhcmQgQ2FwYWJpbGl0aWVzIiB9LAorICAgeyAweDAwQzEsIDAs IDB4NkUsIDEsIDEsIDAsIDAsIDAsICJBbGdvcml0aG0gQXR0cmlidXRlcyBTaWduYXR1cmUiIH0s CisgICB7IDB4MDBDMiwgMCwgMHg2RSwgMSwgMSwgMCwgMCwgMCwgIkFsZ29yaXRobSBBdHRyaWJ1 dGVzIERlY3J5cHRpb24iIH0sCisgICB7IDB4MDBDMywgMCwgMHg2RSwgMSwgMSwgMCwgMCwgMCwg IkFsZ29yaXRobSBBdHRyaWJ1dGVzIEF1dGhlbnRpY2F0aW9uIiB9LAorICAgeyAweDAwQzQsIDAs IDB4NkUsIDEsIDAsIDEsIDEsIDAsICJDSFYgU3RhdHVzIEJ5dGVzIiB9LAorICAgeyAweDAwQzUs IDAsIDB4NkUsIDEsIDAsIDAsIDAsIDAsICJGaW5nZXJwcmludHMiIH0sCisgICB7IDB4MDBDNiwg MCwgMHg2RSwgMSwgMCwgMCwgMCwgMCwgIkNBIEZpbmdlcnByaW50cyIgfSwKKyAgIHsgMHgwMENE LCAwLCAweDZFLCAxLCAwLCAwLCAwLCAwLCAiR2VuZXJhdGlvbiB0aW1lIiB9LAorICAgeyAweDAw N0EsIDEsICAgIDAsIDEsIDAsIDAsIDAsIDAsICJTZWN1cml0eSBTdXBwb3J0IFRlbXBsYXRlIiB9 LAorICAgeyAweDAwOTMsIDAsIDB4N0EsIDEsIDEsIDAsIDAsIDAsICJEaWdpdGFsIFNpZ25hdHVy ZSBDb3VudGVyIiB9LAorICAgeyAweDAxMDEsIDAsICAgIDAsIDAsIDAsIDAsIDAsIDIsICJQcml2 YXRlIERPIDEifSwKKyAgIHsgMHgwMTAyLCAwLCAgICAwLCAwLCAwLCAwLCAwLCAyLCAiUHJpdmF0 ZSBETyAyIn0sCisgICB7IDB4MDEwMywgMCwgICAgMCwgMCwgMCwgMCwgMCwgMiwgIlByaXZhdGUg RE8gMyJ9LAorICAgeyAweDAxMDQsIDAsICAgIDAsIDAsIDAsIDAsIDAsIDIsICJQcml2YXRlIERP IDQifSwKKyAgIHsgMHg3RjIxLCAxLCAgICAwLCAxLCAwLCAwLCAwLCAxLCAiQ2FyZGhvbGRlciBj ZXJ0aWZpY2F0ZSJ9LAorICAgLyogVjMuMCAqLworICAgeyAweDdGNzQsIDAsIDB4NkUsIDEsIDAs IDAsIDAsIDAsICJHZW5lcmFsIEZlYXR1cmUgTWFuYWdlbWVudCJ9LAorICAgeyAweDAwRDUsIDAs ICAgIDAsIDEsIDAsIDAsIDAsIDAsICJBRVMga2V5IGRhdGEifSwKKyAgIHsgMHgwMEQ2LCAwLCAw eDZFLCAxLCAwLCAwLCAwLCAwLCAiVUlGIGZvciBTaWduYXR1cmUifSwKKyAgIHsgMHgwMEQ3LCAw LCAweDZFLCAxLCAwLCAwLCAwLCAwLCAiVUlGIGZvciBEZWNyeXB0aW9uIn0sCisgICB7IDB4MDBE OCwgMCwgMHg2RSwgMSwgMCwgMCwgMCwgMCwgIlVJRiBmb3IgQXV0aGVudGljYXRpb24ifSwKKyAg IHsgMHgwMEY5LCAwLCAgICAwLCAxLCAwLCAwLCAwLCAwLCAiS0RGIGRhdGEgb2JqZWN0In0sCisg ICB7IDB4MDBGQSwgMCwgICAgMCwgMSwgMCwgMCwgMCwgMiwgIkFsZ29yaXRobSBJbmZvcm1hdGlv biJ9LAorICAgeyAwIH0KKyB9OworIAorIAorIC8qIFR5cGUgb2Yga2V5cy4gICovCisgdHlwZWRl ZiBlbnVtCisgICB7CisgICAgIEtFWV9UWVBFX0VDQywKKyAgICAgS0VZX1RZUEVfUlNBLAorICAg fQorIGtleV90eXBlX3Q7CisgCisgCisgLyogVGhlIGZvcm1hdCBvZiBSU0EgcHJpdmF0ZSBrZXlz LiAgKi8KKyB0eXBlZGVmIGVudW0KKyAgIHsKKyAgICAgUlNBX1VOS05PV05fRk1ULAorICAgICBS U0FfU1RELAorICAgICBSU0FfU1REX04sCisgICAgIFJTQV9DUlQsCisgICAgIFJTQV9DUlRfTgor ICAgfQorIHJzYV9rZXlfZm9ybWF0X3Q7CisgCisgCisgLyogT25lIGNhY2hlIGl0ZW0gZm9yIERP cy4gICovCisgc3RydWN0IGNhY2hlX3MgeworICAgc3RydWN0IGNhY2hlX3MgKm5leHQ7CisgICBp bnQgdGFnOworICAgc2l6ZV90IGxlbmd0aDsKKyAgIHVuc2lnbmVkIGNoYXIgZGF0YVsxXTsKKyB9 OworIAorIAorIC8qIE9iamVjdCB3aXRoIGFwcGxpY2F0aW9uIChpLmUuIE9wZW5QR1AgY2FyZCkg c3BlY2lmaWMgZGF0YS4gICovCisgc3RydWN0IGFwcF9sb2NhbF9zIHsKKyAgIC8qIEEgbGlua2Vk IGxpc3Qgd2l0aCBjYWNoZWQgRE9zLiAgKi8KKyAgIHN0cnVjdCBjYWNoZV9zICpjYWNoZTsKKyAK KyAgIC8qIEtlZXAgdHJhY2sgb2YgdGhlIHB1YmxpYyBrZXlzLiAgKi8KKyAgIHN0cnVjdAorICAg eworICAgICBpbnQgcmVhZF9kb25lOyAgIC8qIFRydWUgaWYgd2UgaGF2ZSBhdCBsZWFzdCB0cmll ZCB0byByZWFkIHRoZW0uICAqLworICAgICB1bnNpZ25lZCBjaGFyICprZXk7IC8qIFRoaXMgaXMg YSBtYWxsb2NlZCBidWZmZXIgd2l0aCBhIGNhbm9uaWNhbAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuY29kZWQgUy1leHByZXNzaW9uIGVuY29kaW5nIGEgcHVibGljCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAga2V5LiBNaWdodCBiZSBOVUxMIGlmIGtleSBpcyBub3QKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUuICAqLworICAgICBzaXplX3Qga2V5bGVu OyAgICAgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGFib3ZlIFMtZXhwcmVzc2lvbi4gIFRoaXMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c3VhbGx5IG9ubHkgcmVxdWlyZWQgZm9yIGNy b3NzIGNoZWNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIGxlbmd0 aCBvZiBhbiBTLWV4cHJlc3Npb24gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBs aWNpdGx5IGF2YWlsYWJsZS4gICovCisgICAgIHVuc2lnbmVkIGNoYXIga2V5Z3JpcF9zdHJbNDFd OyAvKiBUaGUga2V5Z3JpcCwgbnVsbCB0ZXJtaW5hdGVkICovCisgICB9IHBrWzNdOworIAorICAg dW5zaWduZWQgY2hhciBzdGF0dXNfaW5kaWNhdG9yOyAvKiBUaGUgY2FyZCBzdGF0dXMgaW5kaWNh dG9yLiAgKi8KKyAKKyAgIHVuc2lnbmVkIGludCBtYW51ZmFjdHVyZXI6MTY7ICAgLyogTWFudWZh Y3R1cmVyIElEIGZyb20gdGhlIHMvbi4gICovCisgCisgICAvKiBLZWVwIHRyYWNrIG9mIHRoZSBJ U08gY2FyZCBjYXBhYmlsaXRpZXMuICAqLworICAgc3RydWN0CisgICB7CisgICAgIHVuc2lnbmVk IGludCBjbWRfY2hhaW5pbmc6MTsgIC8qIENvbW1hbmQgY2hhaW5pbmcgaXMgc3VwcG9ydGVkLiAg Ki8KKyAgICAgdW5zaWduZWQgaW50IGV4dF9sY19sZToxOyAgICAgLyogRXh0ZW5kZWQgTGMgYW5k IExlIGFyZSBzdXBwb3J0ZWQuICAqLworICAgfSBjYXJkY2FwOworIAorICAgLyogS2VlcCB0cmFj ayBvZiBleHRlbmRlZCBjYXJkIGNhcGFiaWxpdGllcy4gICovCisgICBzdHJ1Y3QKKyAgIHsKKyAg ICAgdW5zaWduZWQgaW50IGlzX3YyOjE7ICAgICAgICAgICAgICAvKiBDb21wYXRpYmxlIHRvIHYy IG9yIGxhdGVyLiAgICAgICAgKi8KKyAgICAgdW5zaWduZWQgaW50IGlzX3YzOjE7ICAgICAgICAg ICAgICAvKiBDb21hdGlibGUgdG8gdjMgb3IgbGF0ZXIuICAgICAgICAgKi8KKyAgICAgdW5zaWdu ZWQgaW50IGhhc19idXR0b246MTsgICAgICAgICAvKiBIYXMgY29uZmlybWF0aW9uIGJ1dHRvbiBv ciBub3QuICAgKi8KKyAKKyAgICAgdW5zaWduZWQgaW50IHNtX3N1cHBvcnRlZDoxOyAgICAgICAv KiBTZWN1cmUgTWVzc2FnaW5nIGlzIHN1cHBvcnRlZC4gICAgKi8KKyAgICAgdW5zaWduZWQgaW50 IGdldF9jaGFsbGVuZ2U6MTsKKyAgICAgdW5zaWduZWQgaW50IGtleV9pbXBvcnQ6MTsKKyAgICAg dW5zaWduZWQgaW50IGNoYW5nZV9mb3JjZV9jaHY6MTsKKyAgICAgdW5zaWduZWQgaW50IHByaXZh dGVfZG9zOjE7CisgICAgIHVuc2lnbmVkIGludCBhbGdvX2F0dHJfY2hhbmdlOjE7ICAgLyogQWxn b3JpdGhtIGF0dHJpYnV0ZXMgY2hhbmdlYWJsZS4gICovCisgICAgIHVuc2lnbmVkIGludCBoYXNf ZGVjcnlwdDoxOyAgICAgICAgLyogU3VwcG9ydCBzeW1tZXRyaWMgZGVjcnlwdGlvbi4gICAgICov CisgICAgIHVuc2lnbmVkIGludCBrZGZfZG86MTsgICAgICAgICAgICAgLyogU3VwcG9ydCBLREYg RE8uICAgICAgICAgICAgICAgICAgICovCisgCisgICAgIHVuc2lnbmVkIGludCBzbV9hbGdvOjI7 ICAgICAgICAgICAgLyogU3ltbWV0cmljIGNyeXB0byBhbGdvIGZvciBTTS4gICAgICovCisgICAg IHVuc2lnbmVkIGludCBwaW5fYmxrMjoxOyAgICAgICAgICAgLyogUElOIGJsb2NrIDIgZm9ybWF0 IHN1cHBvcnRlZC4gICAgICovCisgICAgIHVuc2lnbmVkIGludCBtc2U6MTsgICAgICAgICAgICAg ICAgLyogTVNFIGNvbW1hbmQgc3VwcG9ydGVkLiAgICAgICAgICAgICovCisgICAgIHVuc2lnbmVk IGludCBtYXhfY2VydGxlbjoxNjsgICAgICAgLyogTWF4aW11bSBzaXplIG9mIERPIDdGMjEuICAg ICAgICAgICovCisgICAgIHVuc2lnbmVkIGludCBtYXhfZ2V0X2NoYWxsZW5nZToxNjsgLyogTWF4 aW11bSBzaXplIGZvciBnZXRfY2hhbGxlbmdlLiAgICovCisgICAgIHVuc2lnbmVkIGludCBtYXhf c3BlY2lhbF9kbzoxNjsgICAgLyogTWF4aW11bSBzaXplIGZvciBzcGVjaWFsIERPcy4gICAgICov CisgICB9IGV4dGNhcDsKKyAKKyAgIC8qIEZsYWdzIHVzZWQgdG8gY29udHJvbCB0aGUgYXBwbGlj YXRpb24uICAqLworICAgc3RydWN0CisgICB7CisgICAgIHVuc2lnbmVkIGludCBub19zeW5jOjE7 ICAgLyogRG8gbm90IHN5bmMgQ0hWMSBhbmQgQ0hWMiAqLworICAgICB1bnNpZ25lZCBpbnQgZGVm X2NodjI6MTsgIC8qIFVzZSAxMjM0NTYgZm9yIENIVjIuICAqLworICAgfSBmbGFnczsKKyAKKyAg IC8qIEZsYWdzIHVzZWQgdG8gb3ZlcnJpZGUgY2VydGFpbiBiZWhhdmlvci4gICovCisgICBzdHJ1 Y3QKKyAgIHsKKyAgICAgdW5zaWduZWQgaW50IGNhY2hlXzZlOjE7CisgICB9IG92ZXJyaWRlOwor IAorICAgLyogS2VlcCB0cmFjayBvbiB3aGV0aGVyIHdlIGNhY2hlIGEgY2VydGFpbiBQSU4gc28g dGhhdCB3ZSBnZXQgaXQKKyAgICAqIGZyb20gdGhlIGNhY2hlIG9ubHkgaWYgd2Uga25vdyB3ZSBj YWNoZWQgaXQuICBUaGlzIGluaGliaXRzIHRoZQorICAgICogdXNlIG9mIHRoZSBzYW1lIGNhY2hl IGVudHJ5IGZvciBhIGNhcmQgcGx1Z2dlZCBpbiBhbmQgb3V0IHdpdGhvdXQKKyAgICAqIGdwZy1h Z2VudCBoYXZpbmcgbm90aWNlZCB0aGF0IGR1ZSB0byBhIGJ1Zy4gICovCisgICBzdHJ1Y3QKKyAg IHsKKyAgICAgdW5zaWduZWQgaW50IG1heWJlX2NodjE6MTsKKyAgICAgdW5zaWduZWQgaW50IG1h eWJlX2NodjI6MTsKKyAgICAgdW5zaWduZWQgaW50IG1heWJlX2NodjM6MTsKKyAgIH0gcGluY2Fj aGU7CisgCisgICAvKiBQaW5wYWQgcmVxdWVzdCBzcGVjaWZpZWQgb24gY2FyZC4gICovCisgICBz dHJ1Y3QKKyAgIHsKKyAgICAgdW5zaWduZWQgaW50IGRpc2FibGVkOjE7ICAgIC8qIE5vIHBpbnBh ZCB1c2UgYmVjYXVzZSBvZiBLREYgRE8uICAqLworICAgICB1bnNpZ25lZCBpbnQgc3BlY2lmaWVk OjE7CisgICAgIGludCBmaXhlZGxlbl91c2VyOworICAgICBpbnQgZml4ZWRsZW5fYWRtaW47Cisg ICB9IHBpbnBhZDsKKyAKKyAgIHN0cnVjdAorICAgeworICAgICBrZXlfdHlwZV90IGtleV90eXBl OworICAgICBjb25zdCBjaGFyICprZXlhbGdvOyAgICAgICAgIC8qIEFsZ29yaXRobSBpbiBzdGFu ZGFyZCBzdHJpbmcgZm9ybWF0LiAgKi8KKyAgICAgdW5pb24geworICAgICAgIHN0cnVjdCB7Cisg ICAgICAgICB1bnNpZ25lZCBpbnQgbl9iaXRzOyAgICAgLyogU2l6ZSBvZiB0aGUgbW9kdWx1cyBp biBiaXRzLiAgVGhlIHJlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv ZiB0aGlzIHN0cnVjdWlyZSBpcyBvbmx5IHZhbGlkIGlmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcyBpcyBub3QgMC4gICovCisgICAgICAgICB1bnNpZ25lZCBpbnQg ZV9iaXRzOyAgICAgLyogU2l6ZSBvZiB0aGUgcHVibGljIGV4cG9uZW50IGluIGJpdHMuICAqLwor ICAgICAgICAgcnNhX2tleV9mb3JtYXRfdCBmb3JtYXQ7CisgICAgICAgfSByc2E7CisgICAgICAg c3RydWN0IHsKKyAgICAgICAgIGNvbnN0IGNoYXIgKmN1cnZlOyAgICAgICAvKiBDYW5vbmljYWwg bmFtZSBkZWZpbmVkIGluIG9wZW5wZ3Atb2lkLmMgKi8KKyAgICAgICAgIGludCBhbGdvOworICAg ICAgICAgdW5zaWduZWQgaW50IGZsYWdzOworICAgICAgIH0gZWNjOworICAgICB9OworICAgIH0g a2V5YXR0clszXTsKKyAKKyB9OworIAorICNkZWZpbmUgRUNDX0ZMQUdfREpCX1RXRUFLICgxIDw8 IDApCisgI2RlZmluZSBFQ0NfRkxBR19QVUJLRVkgICAgKDEgPDwgMSkKKyAKKyAKKyAvKioqKiog TG9jYWwgcHJvdG90eXBlcyAgKioqKiovCisgc3RhdGljIHVuc2lnbmVkIGxvbmcgY29udmVydF9z aWdfY291bnRlcl92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhbHVlbGVuKTsK KyBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2lnX2NvdW50ZXIgKGFwcF90IGFwcCk7Cisgc3Rh dGljIGdwZ19lcnJvcl90IGRvX2F1dGggKGFwcF90IGFwcCwgY3RybF90IGN0cmwsIGNvbnN0IGNo YXIgKmtleWlkc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncGdfZXJyb3JfdCAo KnBpbmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB2b2lkICppbmRhdGEsIHNpemVfdCBpbmRhdGFsZW4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRkYXRhLCBzaXplX3QgKm91dGRhdGFsZW4p OworIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfYWxnb3JpdGhtX2F0dHJpYnV0ZV9zdHJpbmcgKGNv bnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKTsKKyBzdGF0aWMgZ3BnX2Vycm9y X3QgcGFyc2VfYWxnb3JpdGhtX2F0dHJpYnV0ZSAoYXBwX3QgYXBwLCBpbnQga2V5bm8pOworIHN0 YXRpYyBncGdfZXJyb3JfdCBjaGFuZ2Vfa2V5YXR0cl9mcm9tX3N0cmluZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncGdfZXJyb3JfdCAoKnBpbmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBj aGFyICoqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXlyZWYsIGNvbnN0IGNo YXIgKmtleWFsZ28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZh bHVlLCBzaXplX3QgdmFsdWVsZW4pOworIAorIAwKKyAvKiBSZXR1cm4gdGhlIE9wZW5QR1AgY2Fy ZCBtYW51ZmFjdHVyZXIgbmFtZS4gKi8KKyBzdGF0aWMgY29uc3QgY2hhciAqCisgZ2V0X21hbnVm YWN0dXJlciAodW5zaWduZWQgaW50IG5vKQorIHsKKyAgIC8qIE5vdGU6ICBNYWtlIHN1cmUgdGhh dCB0aGVyZSBpcyBubyBjb2xvbiBvciBsaW5lZmVlZCBpbiB0aGUgc3RyaW5nLiAqLworICAgc3dp dGNoIChubykKKyAgICAgeworICAgICBjYXNlIDB4MDAwMTogcmV0dXJuICJQUEMgQ2FyZCBTeXN0 ZW1zIjsKKyAgICAgY2FzZSAweDAwMDI6IHJldHVybiAiUHJpc20iOworICAgICBjYXNlIDB4MDAw MzogcmV0dXJuICJPcGVuRm9ydHJlc3MiOworICAgICBjYXNlIDB4MDAwNDogcmV0dXJuICJXZXdp ZCI7CisgICAgIGNhc2UgMHgwMDA1OiByZXR1cm4gIlplaXRDb250cm9sIjsKKyAgICAgY2FzZSAw eDAwMDY6IHJldHVybiAiWXViaWNvIjsKKyAgICAgY2FzZSAweDAwMDc6IHJldHVybiAiT3BlbktN UyI7CisgICAgIGNhc2UgMHgwMDA4OiByZXR1cm4gIkxvZ29FbWFpbCI7CisgICAgIGNhc2UgMHgw MDA5OiByZXR1cm4gIkZpZGVzbW8iOworICAgICBjYXNlIDB4MDAwQTogcmV0dXJuICJWaXZvS2V5 IjsKKyAgICAgY2FzZSAweDAwMEI6IHJldHVybiAiRmVpdGlhbiBUZWNobm9sb2dpZXMiOworICAg ICBjYXNlIDB4MDAwRDogcmV0dXJuICJEYW5nZXJvdXMgVGhpbmdzIjsKKyAgICAgY2FzZSAweDAw MEU6IHJldHVybiAiRXhjZWxzZWN1IjsKKyAKKyAgICAgY2FzZSAweDAwMkE6IHJldHVybiAiTWFn cmF0aGVhIjsKKyAgICAgY2FzZSAweDAwNDI6IHJldHVybiAiR251UEcgZS5WLiI7CisgCisgICAg IGNhc2UgMHgxMzM3OiByZXR1cm4gIldhcnNhdyBIYWNrZXJzcGFjZSI7CisgICAgIGNhc2UgMHgy MzQyOiByZXR1cm4gIndhcnB6b25lIjsgLyogaGFja2Vyc3BhY2UgTXVlbnN0ZXIuICAqLworICAg ICBjYXNlIDB4NDM1NDogcmV0dXJuICJDb25maWRlbnRpYWwgVGVjaG5vbG9naWVzIjsgICAvKiBj b3RlY2guZGUgKi8KKyAgICAgY2FzZSAweDUzNDM6IHJldHVybiAiU1NFIENhcnRlIMOgIHB1Y2Ui OworICAgICBjYXNlIDB4NTQ0MzogcmV0dXJuICJUSUYtSVQgZS5WLiI7CisgICAgIGNhc2UgMHg2 M0FGOiByZXR1cm4gIlRydXN0aWNhIjsKKyAgICAgY2FzZSAweEJBNTM6IHJldHVybiAiYy1iYXNl IGUuVi4iOworICAgICBjYXNlIDB4QkQwRTogcmV0dXJuICJQYXJhbm9pZGxhYnMiOworICAgICBj YXNlIDB4Q0EwNTogcmV0dXJuICJBdG9zIENhcmRPUyI7CisgICAgIGNhc2UgMHhGMUQwOiByZXR1 cm4gIkNhbm9LZXlzIjsKKyAgICAgY2FzZSAweEY1MTc6IHJldHVybiAiRlNJSiI7CisgICAgIGNh c2UgMHhGNUVDOiByZXR1cm4gIkYtU2VjdXJlIjsKKyAKKyAgICAgICAvKiAweDAwMDAgYW5kIDB4 RkZGRiBhcmUgZGVmaW5lZCBhcyB0ZXN0IGNhcmRzIHBlciBzcGVjLAorICAgICAgICAqIDB4RkYw MCB0byAweEZGRkUgYXJlIGFzc2lnbmVkIGZvciB1c2Ugd2l0aCByYW5kb21seSBjcmVhdGVkCisg ICAgICAgICogc2VyaWFsIG51bWJlcnMuICAqLworICAgICBjYXNlIDB4MDAwMDoKKyAgICAgY2Fz ZSAweGZmZmY6IHJldHVybiAidGVzdCBjYXJkIjsKKyAgICAgZGVmYXVsdDogcmV0dXJuIChubyAm IDB4ZmYwMCkgPT0gMHhmZjAwPyAidW5tYW5hZ2VkIFMvTiByYW5nZSI6InVua25vd24iOworICAg ICB9CisgfQorIAorIAorIAorIAwKKyAvKiBEZWNvbnN0cnVjdG9yLiAqLworIHN0YXRpYyB2b2lk CisgZG9fZGVpbml0IChhcHBfdCBhcHApCisgeworICAgaWYgKGFwcCAmJiBhcHAtPmFwcF9sb2Nh bCkKKyAgICAgeworICAgICAgIHN0cnVjdCBjYWNoZV9zICpjLCAqYzI7CisgICAgICAgaW50IGk7 CisgCisgICAgICAgZm9yIChjID0gYXBwLT5hcHBfbG9jYWwtPmNhY2hlOyBjOyBjID0gYzIpCisg ICAgICAgICB7CisgICAgICAgICAgIGMyID0gYy0+bmV4dDsKKyAgICAgICAgICAgeGZyZWUgKGMp OworICAgICAgICAgfQorIAorICAgICAgIGZvciAoaT0wOyBpIDwgRElNIChhcHAtPmFwcF9sb2Nh bC0+cGspOyBpKyspCisgICAgICAgICB7CisgICAgICAgICAgIHhmcmVlIChhcHAtPmFwcF9sb2Nh bC0+cGtbaV0ua2V5KTsKKyAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPnBrW2ldLnJlYWRfZG9u ZSA9IDA7CisgICAgICAgICB9CisgICAgICAgeGZyZWUgKGFwcC0+YXBwX2xvY2FsKTsKKyAgICAg ICBhcHAtPmFwcF9sb2NhbCA9IE5VTEw7CisgICAgIH0KKyB9CisgCisgCisgLyogVGhpcyBpcyBh IGhlbHBlciB0byBkbyBhIHdpcGVtZW1vcnkgZm9sbG93ZWQgYnkgYSBmcmVlLiAgSW4gZ2VuZXJh bAorICAqIHdlIGRvIG5vdCBuZWVkIHRoaXMgaWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBhbGxvY2F0 ZWQgaW4gc2VjdXJlCisgICogbWVtb3J5LiAgSG93ZXZlciBhdCBzb21lIHBsYWNlcyB3ZSBjYW4n dCBtYWtlIHRoYXQgc3VyZSBhbmQgdGh1cyB3ZQorICAqIGJldHRlciB0byBhbiBleHRyYSB3aXBl IGhlcmUuICAqLworIHN0YXRpYyB2b2lkCisgd2lwZV9hbmRfZnJlZSAodm9pZCAqcCwgc2l6ZV90 IGxlbikKKyB7CisgICBpZiAocCkKKyAgICAgeworICAgICAgIGlmIChsZW4pCisgICAgICAgICB3 aXBlbWVtb3J5IChwLCBsZW4pOworICAgICAgIHhmcmVlIChwKTsKKyAgICAgfQorIH0KKyAKKyAK KyAvKiBTaW1pbGFyIHRvIHdpcGVfYW5kX2ZyZWUgYnV0IGFzc3VtZXMgUCBpcyBlaXRlaHIgTlVM TCBvciBhIHByb3BlcgorICAqIHN0cmluZy4gICovCisgc3RhdGljIHZvaWQKKyB3aXBlX2FuZF9m cmVlX3N0cmluZyAoY2hhciAqcCkKKyB7CisgICBpZiAocCkKKyAgICAgeworICAgICAgIHdpcGVt ZW1vcnkgKHAsIHN0cmxlbiAocCkpOworICAgICAgIHhmcmVlIChwKTsKKyAgICAgfQorIH0KKyAK KyAKKyAvKiBXcmFwcGVyIGFyb3VuZCBpc283ODE2X2dldF9kYXRhIHdoaWNoIGZpcnN0IHRyaWVz IHRvIGdldCB0aGUgZGF0YQorICAgIGZyb20gdGhlIGNhY2hlLiAgV2l0aCBHRVRfSU1NRURJQVRF IHBhc3NlZCBhcyB0cnVlLCB0aGUgY2FjaGUgaXMKKyAgICBieXBhc3NlZC4gIFdpdGggVFJZX0VY VExFTiBleHRlbmRlZCBsZW5ndGhzIEFQRFVzIGFyZSB1c2UgaWYKKyAgICBzdXBwb3J0ZWQgYnkg dGhlIGNhcmQuICAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGdldF9jYWNoZWRfZGF0YSAoYXBw X3QgYXBwLCBpbnQgdGFnLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnJlc3Vs dCwgc2l6ZV90ICpyZXN1bHRsZW4sCisgICAgICAgICAgICAgICAgICBpbnQgZ2V0X2ltbWVkaWF0 ZSwgaW50IHRyeV9leHRsZW4pCisgeworICAgZ3BnX2Vycm9yX3QgZXJyOworICAgaW50IGk7Cisg ICB1bnNpZ25lZCBjaGFyICpwOworICAgc2l6ZV90IGxlbjsKKyAgIHN0cnVjdCBjYWNoZV9zICpj OworICAgaW50IGV4bW9kZTsKKyAKKyAgICpyZXN1bHQgPSBOVUxMOworICAgKnJlc3VsdGxlbiA9 IDA7CisgCisgICBpZiAodGFnID09IDB4NkUgJiYgYXBwLT5hcHBfbG9jYWwtPm92ZXJyaWRlLmNh Y2hlXzZlKQorICAgICBnZXRfaW1tZWRpYXRlID0gMDsKKyAKKyAgIGlmICghZ2V0X2ltbWVkaWF0 ZSkKKyAgICAgeworICAgICAgIGZvciAoYz1hcHAtPmFwcF9sb2NhbC0+Y2FjaGU7IGM7IGMgPSBj LT5uZXh0KQorICAgICAgICAgaWYgKGMtPnRhZyA9PSB0YWcpCisgICAgICAgICAgIHsKKyAgICAg ICAgICAgICBpZihjLT5sZW5ndGgpCisgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg IHAgPSB4dHJ5bWFsbG9jIChjLT5sZW5ndGgpOworICAgICAgICAgICAgICAgICBpZiAoIXApCisg ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAg ICAgICAgICAgICAgICBtZW1jcHkgKHAsIGMtPmRhdGEsIGMtPmxlbmd0aCk7CisgICAgICAgICAg ICAgICAgICpyZXN1bHQgPSBwOworICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICpy ZXN1bHRsZW4gPSBjLT5sZW5ndGg7CisgCisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg ICAgIH0KKyAgICAgfQorIAorICAgaWYgKHRyeV9leHRsZW4gJiYgYXBwLT5hcHBfbG9jYWwtPmNh cmRjYXAuZXh0X2xjX2xlKQorICAgICB7CisgICAgICAgaWYgKHRyeV9leHRsZW4gPT0gMSkKKyAg ICAgICAgIGV4bW9kZSA9IGFwcC0+YXBwX2xvY2FsLT5leHRjYXAubWF4X2NlcnRsZW47CisgICAg ICAgZWxzZSBpZiAodHJ5X2V4dGxlbiA9PSAyICYmIGFwcC0+YXBwX2xvY2FsLT5leHRjYXAuaXNf djMpCisgICAgICAgICBleG1vZGUgPSBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLm1heF9zcGVjaWFs X2RvOworICAgICAgIGVsc2UKKyAgICAgICAgIGV4bW9kZSA9IDA7CisgICAgIH0KKyAgIGVsc2UK KyAgICAgZXhtb2RlID0gMDsKKyAKKyAgIGVyciA9IGlzbzc4MTZfZ2V0X2RhdGEgKGFwcF9nZXRf c2xvdCAoYXBwKSwgZXhtb2RlLCB0YWcsICZwLCAmbGVuKTsKKyAgIGlmIChlcnIpCisgICAgIHJl dHVybiBlcnI7CisgICBpZiAobGVuKQorICAgICAqcmVzdWx0ID0gcDsKKyAgICpyZXN1bHRsZW4g PSBsZW47CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBjYWNoZSB0aGlzIG9iamVj dC4gKi8KKyAgIGlmIChnZXRfaW1tZWRpYXRlKQorICAgICByZXR1cm4gMDsKKyAKKyAgIGZvciAo aT0wOyBkYXRhX29iamVjdHNbaV0udGFnOyBpKyspCisgICAgIGlmIChkYXRhX29iamVjdHNbaV0u dGFnID09IHRhZykKKyAgICAgICB7CisgICAgICAgICBpZiAoZGF0YV9vYmplY3RzW2ldLmRvbnRf Y2FjaGUpCisgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgYnJlYWs7CisgICAgICAgfQor IAorICAgLyogT2theSwgY2FjaGUgaXQuICovCisgICBmb3IgKGM9YXBwLT5hcHBfbG9jYWwtPmNh Y2hlOyBjOyBjID0gYy0+bmV4dCkKKyAgICAgbG9nX2Fzc2VydCAoYy0+dGFnICE9IHRhZyk7Cisg CisgICBjID0geHRyeW1hbGxvYyAoc2l6ZW9mICpjICsgbGVuKTsKKyAgIGlmIChjKQorICAgICB7 CisgICAgICAgaWYgKGxlbikKKyAgICAgICAgIG1lbWNweSAoYy0+ZGF0YSwgcCwgbGVuKTsKKyAg ICAgICBlbHNlCisgICAgICAgICB4ZnJlZSAocCk7CisgICAgICAgYy0+bGVuZ3RoID0gbGVuOwor ICAgICAgIGMtPnRhZyA9IHRhZzsKKyAgICAgICBjLT5uZXh0ID0gYXBwLT5hcHBfbG9jYWwtPmNh Y2hlOworICAgICAgIGFwcC0+YXBwX2xvY2FsLT5jYWNoZSA9IGM7CisgICAgIH0KKyAKKyAgIHJl dHVybiAwOworIH0KKyAKKyAvKiBSZW1vdmUgRE8gYXQgVEFHIGZyb20gdGhlIGNhY2hlLiAqLwor IHN0YXRpYyB2b2lkCisgZmx1c2hfY2FjaGVfaXRlbSAoYXBwX3QgYXBwLCBpbnQgdGFnKQorIHsK KyAgIHN0cnVjdCBjYWNoZV9zICpjLCAqY3ByZXY7CisgICBpbnQgaTsKKyAKKyAgIGlmICghYXBw LT5hcHBfbG9jYWwpCisgICAgIHJldHVybjsKKyAKKyAgIGZvciAoYz1hcHAtPmFwcF9sb2NhbC0+ Y2FjaGUsIGNwcmV2PU5VTEw7IGMgOyBjcHJldj1jLCBjID0gYy0+bmV4dCkKKyAgICAgaWYgKGMt PnRhZyA9PSB0YWcpCisgICAgICAgeworICAgICAgICAgaWYgKGNwcmV2KQorICAgICAgICAgICBj cHJldi0+bmV4dCA9IGMtPm5leHQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgIGFwcC0+YXBw X2xvY2FsLT5jYWNoZSA9IGMtPm5leHQ7CisgICAgICAgICB4ZnJlZSAoYyk7CisgCisgICAgICAg ICBmb3IgKGM9YXBwLT5hcHBfbG9jYWwtPmNhY2hlOyBjIDsgYyA9IGMtPm5leHQpCisgICAgICAg ICAgIHsKKyAgICAgICAgICAgICBsb2dfYXNzZXJ0IChjLT50YWcgIT0gdGFnKTsgLyogT29wczog ZHVwbGljYXRlZCBlbnRyeS4gKi8KKyAgICAgICAgICAgfQorICAgICAgICAgcmV0dXJuOworICAg ICAgIH0KKyAKKyAgIC8qIFRyeSBhZ2FpbiBpZiB3ZSBoYXZlIGFuIG91dGVyIHRhZy4gKi8KKyAg IGZvciAoaT0wOyBkYXRhX29iamVjdHNbaV0udGFnOyBpKyspCisgICAgIGlmIChkYXRhX29iamVj dHNbaV0udGFnID09IHRhZyAmJiBkYXRhX29iamVjdHNbaV0uZ2V0X2Zyb20KKyAgICAgICAgICYm IGRhdGFfb2JqZWN0c1tpXS5nZXRfZnJvbSAhPSB0YWcpCisgICAgICAgZmx1c2hfY2FjaGVfaXRl bSAoYXBwLCBkYXRhX29iamVjdHNbaV0uZ2V0X2Zyb20pOworIH0KKyAKKyAvKiBGbHVzaCBhbGwg ZW50cmllcyBmcm9tIHRoZSBjYWNoZSB3aGljaCBtaWdodCBiZSBvdXQgb2Ygc3luYyBhZnRlcgor ICAgIGFuIGVycm9yLiAqLworIHN0YXRpYyB2b2lkCisgZmx1c2hfY2FjaGVfYWZ0ZXJfZXJyb3Ig KGFwcF90IGFwcCkKKyB7CisgICBpbnQgaTsKKyAKKyAgIGZvciAoaT0wOyBkYXRhX29iamVjdHNb aV0udGFnOyBpKyspCisgICAgIGlmIChkYXRhX29iamVjdHNbaV0uZmx1c2hfb25fZXJyb3IpCisg ICAgICAgZmx1c2hfY2FjaGVfaXRlbSAoYXBwLCBkYXRhX29iamVjdHNbaV0udGFnKTsKKyB9Cisg CisgCisgLyogRmx1c2ggdGhlIGVudGlyZSBjYWNoZS4gKi8KKyBzdGF0aWMgdm9pZAorIGZsdXNo X2NhY2hlIChhcHBfdCBhcHApCisgeworICAgaWYgKGFwcCAmJiBhcHAtPmFwcF9sb2NhbCkKKyAg ICAgeworICAgICAgIHN0cnVjdCBjYWNoZV9zICpjLCAqYzI7CisgCisgICAgICAgZm9yIChjID0g YXBwLT5hcHBfbG9jYWwtPmNhY2hlOyBjOyBjID0gYzIpCisgICAgICAgICB7CisgICAgICAgICAg IGMyID0gYy0+bmV4dDsKKyAgICAgICAgICAgeGZyZWUgKGMpOworICAgICAgICAgfQorICAgICAg IGFwcC0+YXBwX2xvY2FsLT5jYWNoZSA9IE5VTEw7CisgICAgIH0KKyB9CisgCisgCisgLyogR2V0 IHRoZSBETyBpZGVudGlmaWVkIGJ5IFRBRyBmcm9tIHRoZSBjYXJkIGluIFNMT1QgYW5kIHJldHVy biBhCisgICAgYnVmZmVyIHdpdGggaXRzIGNvbnRlbnQgaW4gUkVTVUxUIGFuZCBOQllURVMuICBU aGUgcmV0dXJuIHZhbHVlIGlzCisgICAgTlVMTCBpZiBub3QgZm91bmQgb3IgYSBwb2ludGVyIHdo aWNoIG11c3QgYmUgdXNlZCB0byByZWxlYXNlIHRoZQorICAgIGJ1ZmZlciBob2xkaW5nIHZhbHVl LiAqLworIHN0YXRpYyB2b2lkICoKKyBnZXRfb25lX2RvIChhcHBfdCBhcHAsIGludCB0YWcsIHVu c2lnbmVkIGNoYXIgKipyZXN1bHQsIHNpemVfdCAqbmJ5dGVzLAorICAgICAgICAgICAgIGludCAq cl9yYykKKyB7CisgICBpbnQgcmMsIGk7CisgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisgICBz aXplX3QgYnVmbGVuOworICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CisgICBzaXplX3QgdmFsdWVs ZW47CisgICBpbnQgZHVtbXlyYzsKKyAgIGludCBleG1vZGU7CisgCisgICBpZiAoIXJfcmMpCisg ICAgIHJfcmMgPSAmZHVtbXlyYzsKKyAKKyAgICpyZXN1bHQgPSBOVUxMOworICAgKm5ieXRlcyA9 IDA7CisgICAqcl9yYyA9IDA7CisgICBmb3IgKGk9MDsgZGF0YV9vYmplY3RzW2ldLnRhZyAmJiBk YXRhX29iamVjdHNbaV0udGFnICE9IHRhZzsgaSsrKQorICAgICA7CisgCisgICBpZiAoYXBwLT5h cHB2ZXJzaW9uID4gMHgwMTAwICYmIGRhdGFfb2JqZWN0c1tpXS5nZXRfaW1tZWRpYXRlX2luX3Yx MSkKKyAgICAgeworICAgICAgIGV4bW9kZSA9IDA7CisgICAgICAgcmMgPSBpc283ODE2X2dldF9k YXRhIChhcHBfZ2V0X3Nsb3QgKGFwcCksIGV4bW9kZSwgdGFnLCAmYnVmZmVyLCAmYnVmbGVuKTsK KyAgICAgICBpZiAocmMpCisgICAgICAgICB7CisgICAgICAgICAgICpyX3JjID0gcmM7CisgICAg ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgfQorICAgICAgICpyZXN1bHQgPSBidWZmZXI7 CisgICAgICAgKm5ieXRlcyA9IGJ1ZmxlbjsKKyAgICAgICByZXR1cm4gYnVmZmVyOworICAgICB9 CisgCisgICB2YWx1ZSA9IE5VTEw7CisgICByYyA9IC0xOworICAgaWYgKGRhdGFfb2JqZWN0c1tp XS50YWcgJiYgZGF0YV9vYmplY3RzW2ldLmdldF9mcm9tKQorICAgICB7CisgICAgICAgcmMgPSBn ZXRfY2FjaGVkX2RhdGEgKGFwcCwgZGF0YV9vYmplY3RzW2ldLmdldF9mcm9tLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYnVmZmVyLCAmYnVmbGVuLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZGF0YV9vYmplY3RzW2ldLmRvbnRfY2FjaGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHx8IGRhdGFfb2JqZWN0c1tpXS5nZXRfaW1tZWRpYXRlX2luX3YxMSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb2JqZWN0c1tpXS50cnlfZXh0bGVuKTsK KyAgICAgICBpZiAoIXJjKQorICAgICAgICAgeworICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICpzOworIAorICAgICAgICAgICBzID0gZmluZF90bHZfdW5jaGVja2VkIChidWZmZXIsIGJ1 ZmxlbiwgdGFnLCAmdmFsdWVsZW4pOworICAgICAgICAgICBpZiAoIXMpCisgICAgICAgICAgICAg dmFsdWUgPSBOVUxMOyAvKiBub3QgZm91bmQgKi8KKyAgICAgICAgICAgZWxzZSBpZiAodmFsdWVs ZW4gPiBidWZsZW4gLSAocyAtIGJ1ZmZlcikpCisgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgbG9nX2Vycm9yICgid2FybmluZzogY29uc3RydWN0ZWQgRE8gdG9vIHNob3J0XG4iKTsKKyAg ICAgICAgICAgICAgIHZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgICAgIHhmcmVlIChidWZmZXIp OyBidWZmZXIgPSBOVUxMOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgIHZhbHVlID0gYnVmZmVyICsgKHMgLSBidWZmZXIpOworICAgICAgICAgfQorICAgICB9 CisgCisgICBpZiAoIXZhbHVlKSAvKiBOb3QgaW4gYSBjb25zdHJ1Y3RlZCBETywgdHJ5IHNpbXBs ZS4gKi8KKyAgICAgeworICAgICAgIHJjID0gZ2V0X2NhY2hlZF9kYXRhIChhcHAsIHRhZywgJmJ1 ZmZlciwgJmJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGFfb2JqZWN0 c1tpXS5kb250X2NhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkYXRhX29i amVjdHNbaV0uZ2V0X2ltbWVkaWF0ZV9pbl92MTEpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhX29iamVjdHNbaV0udHJ5X2V4dGxlbik7CisgICAgICAgaWYgKCFyYykKKyAgICAg ICAgIHsKKyAgICAgICAgICAgdmFsdWUgPSBidWZmZXI7CisgICAgICAgICAgIHZhbHVlbGVuID0g YnVmbGVuOworICAgICAgICAgfQorICAgICB9CisgCisgICBpZiAoIXJjKQorICAgICB7CisgICAg ICAgKm5ieXRlcyA9IHZhbHVlbGVuOworICAgICAgICpyZXN1bHQgPSB2YWx1ZTsKKyAgICAgICBy ZXR1cm4gYnVmZmVyOworICAgICB9CisgICAqcl9yYyA9IHJjOworICAgcmV0dXJuIE5VTEw7Cisg fQorIAorIAorIHN0YXRpYyB2b2lkCisgZHVtcF9hbGxfZG8gKGludCBzbG90KQorIHsKKyAgIGlu dCByYywgaSwgajsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgIHNpemVfdCBidWZsZW47 CisgCisgICBmb3IgKGk9MDsgZGF0YV9vYmplY3RzW2ldLnRhZzsgaSsrKQorICAgICB7CisgICAg ICAgaWYgKGRhdGFfb2JqZWN0c1tpXS5nZXRfZnJvbSkKKyAgICAgICAgIGNvbnRpbnVlOworIAor ICAgICAgIC8qIFdlIGRvbid0IHRyeSBleHRlbmRlZCBsZW5ndGggQVBEVSBiZWNhdXNlIHN1Y2gg bGFyZ2UgRE8gd291bGQKKyAgICAgICAgICBiZSBwcmV0dHkgdXNlbGVzcyBpbiBhIGxvZyBmaWxl LiAgKi8KKyAgICAgICByYyA9IGlzbzc4MTZfZ2V0X2RhdGEgKHNsb3QsIDAsIGRhdGFfb2JqZWN0 c1tpXS50YWcsICZidWZmZXIsICZidWZsZW4pOworICAgICAgIGlmIChncGdfZXJyX2NvZGUgKHJj KSA9PSBHUEdfRVJSX05PX09CSikKKyAgICAgICAgIDsKKyAgICAgICBlbHNlIGlmIChyYykKKyAg ICAgICAgIGxvZ19pbmZvICgiRE8gJyVzJyBub3QgYXZhaWxhYmxlOiAlc1xuIiwKKyAgICAgICAg ICAgICAgICAgICBkYXRhX29iamVjdHNbaV0uZGVzYywgZ3BnX3N0cmVycm9yIChyYykpOworICAg ICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKGRhdGFfb2JqZWN0c1tpXS5iaW5h cnkpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgbG9nX2luZm8gKCJETyAnJXMnOiAi LCBkYXRhX29iamVjdHNbaV0uZGVzYyk7CisgICAgICAgICAgICAgICBsb2dfcHJpbnRoZXggKGJ1 ZmZlciwgYnVmbGVuLCAiIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgbG9nX2luZm8gKCJETyAnJXMnOiAnJS4qcydcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgIGRhdGFfb2JqZWN0c1tpXS5kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAoaW50 KWJ1ZmxlbiwgYnVmZmVyKTsgLyogRklYTUU6IHNhbml0aXplICovCisgCisgICAgICAgICAgIGlm IChkYXRhX29iamVjdHNbaV0uY29uc3RydWN0ZWQpCisgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgZm9yIChqPTA7IGRhdGFfb2JqZWN0c1tqXS50YWc7IGorKykKKyAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbHVlOworICAg ICAgICAgICAgICAgICAgIHNpemVfdCB2YWx1ZWxlbjsKKyAKKyAgICAgICAgICAgICAgICAgICBp ZiAoaj09aSB8fCBkYXRhX29iamVjdHNbaV0udGFnICE9IGRhdGFfb2JqZWN0c1tqXS5nZXRfZnJv bSkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgIHZh bHVlID0gZmluZF90bHZfdW5jaGVja2VkIChidWZmZXIsIGJ1ZmxlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vYmplY3RzW2pdLnRhZywgJnZh bHVlbGVuKTsKKyAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg ICAgICAgOyAvKiBub3QgZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1 ZWxlbiA+IGJ1ZmxlbiAtICh2YWx1ZSAtIGJ1ZmZlcikpCisgICAgICAgICAgICAgICAgICAgICBs b2dfZXJyb3IgKCJ3YXJuaW5nOiBjb25zdHJ1Y3RlZCBETyB0b28gc2hvcnRcbiIpOworICAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGRhdGFfb2JqZWN0c1tqXS5iaW5hcnkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2luZm8gKCJETyAnJXMnOiAi LCBkYXRhX29iamVjdHNbal0uZGVzYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo dmFsdWVsZW4gPiAyMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19pbmZvICgi WyV1XVxuIiwgKHVuc2lnbmVkIGludCl2YWx1ZWxlbik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19wcmludGhleCAodmFs dWUsIHZhbHVlbGVuLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9nX2luZm8gKCJE TyAnJXMnOiAnJS4qcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGFfb2JqZWN0c1tqXS5kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aW50KXZhbHVlbGVuLCB2YWx1ZSk7IC8qIEZJWE1FOiBzYW5pdGl6ZSAqLworICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAg fQorICAgICAgIHhmcmVlIChidWZmZXIpOyBidWZmZXIgPSBOVUxMOworICAgICB9CisgfQorIAor IAorIC8qIENvdW50IHRoZSBudW1iZXIgb2YgYml0cywgYXNzdW1pbmcgdGhlIEEgcmVwcmVzZW50 cyBhbiB1bnNpZ25lZCBiaWcKKyAgICBpbnRlZ2VyIG9mIGxlbmd0aCBMRU4gYnl0ZXMuICovCisg c3RhdGljIHVuc2lnbmVkIGludAorIGNvdW50X2JpdHMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEs IHNpemVfdCBsZW4pCisgeworICAgdW5zaWduZWQgaW50IG4gPSBsZW4gKiA4OworICAgaW50IGk7 CisgCisgICBmb3IgKDsgbGVuICYmICEqYTsgbGVuLS0sIGErKywgbiAtPTgpCisgICAgIDsKKyAg IGlmIChsZW4pCisgICAgIHsKKyAgICAgICBmb3IgKGk9NzsgaSAmJiAhKCphICYgKDE8PGkpKTsg aS0tKQorICAgICAgICAgbi0tOworICAgICB9CisgICByZXR1cm4gbjsKKyB9CisgCisgc3RhdGlj IHVuc2lnbmVkIGludAorIGNvdW50X3Nvc19iaXRzIChjb25zdCB1bnNpZ25lZCBjaGFyICphLCBz aXplX3QgbGVuKQorIHsKKyAgIHVuc2lnbmVkIGludCBuID0gbGVuICogODsKKyAgIGludCBpOwor IAorICAgaWYgKGxlbiA9PSAwIHx8ICphID09IDApCisgICAgIHJldHVybiBuOworIAorICAgZm9y IChpPTc7IGkgJiYgISgqYSAmICgxPDxpKSk7IGktLSkKKyAgICAgbi0tOworIAorICAgcmV0dXJu IG47CisgfQorIAorIC8qIEdudVBHIG1ha2VzIHNwZWNpYWwgdXNlIG9mIHRoZSBsb2dpbi1kYXRh IERPLCB0aGlzIGZ1bmN0aW9uIHBhcnNlcworICAgIHRoZSBsb2dpbiBkYXRhIHRvIHN0b3JlIHRo ZSBmbGFncyBmb3IgbGF0ZXIgdXNlLiAgSXQgbWF5IGJlIGNhbGxlZAorICAgIGF0IGFueSB0aW1l IGFuZCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNoYW5naW5nIHRoZSBsb2dpbi1kYXRhIERPLgor IAorICAgIEV2ZXJ5dGhpbmcgdXAgdG8gYSBMRiBpcyBjb25zaWRlcmVkIGEgbWFpbGJveCBvciBh Y2NvdW50IG5hbWUuICBJZgorICAgIHRoZSBmaXJzdCBMRiBpcyBmb2xsb3dlZCBieSBEQzQgKDB4 MTQpIGNvbnRyb2wgc2VxdWVuY2UgYXJlCisgICAgZXhwZWN0ZWQgdXAgdG8gdGhlIG5leHQgTEYu ICBDb250cm9sIHNlcXVlbmNlcyBhcmUgc2VwYXJhdGVkIGJ5IEZTCisgICAgKDB4MTgpIGFuZCBj b25zaXN0IG9mIGtleT12YWx1ZSBwYWlycy4gIFRoZXJlIGFyZSB0d28ga2V5cyBkZWZpbmVkOgor IAorICAgICBGPTxmbGFncz4KKyAKKyAgICAgV2hlcmUgRkxBR1MgaXMgYSBwbGFpbiBoZXhhZGVj aW1hbCBudW1iZXIgcmVwcmVzZW50aW5nIGZsYWcgdmFsdWVzLgorICAgICBUaGUgbHNiIGlzIGhl cmUgdGhlIHJpZ2h0bW9zdCBiaXQuICBEZWZpbmVkIGZsYWdzIGJpdHMgYXJlOgorIAorICAgICAg IEJpdCAwID0gQ0hWMSBhbmQgQ0hWMiBhcmUgbm90IHN5bmNocm9uaXplZAorICAgICAgIEJpdCAx ID0gQ0hWMiBoYXMgYmVlbiBzZXQgdG8gdGhlIGRlZmF1bHQgUElOIG9mICIxMjM0NTYiCisgICAg ICAgICAgICAgICAodGhpcyBpbXBsaWVzIHRoYXQgYml0IDAgaXMgYWxzbyBzZXQpLgorIAorICAg ICBQPTxwaW5wYWQtcmVxdWVzdD4KKyAKKyAgICAgV2hlcmUgUElOUEFEX1JFUVVFU1QgaXMgaW4g dGhlIGZvcm1hdCBvZjogPG4+IG9yIDxuPiw8bT4uCisgICAgIE4gZm9yIHVzZXIgUElOLCBNIGZv ciBhZG1pbiBQSU4uICBJZiBNIGlzIG1pc3NpbmcgaXQgbWVhbnMgTT1OLgorICAgICAwIG1lYW5z IHRvIGZvcmNlIG5vdCB0byB1c2UgcGlucGFkLgorIAorICovCisgc3RhdGljIHZvaWQKKyBwYXJz ZV9sb2dpbl9kYXRhIChhcHBfdCBhcHApCisgeworICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCAq cDsKKyAgIHNpemVfdCBidWZsZW4sIGxlbjsKKyAgIHZvaWQgKnJlbHB0cjsKKyAKKyAgIC8qIFNl dCBkZWZhdWx0cy4gICovCisgICBhcHAtPmFwcF9sb2NhbC0+ZmxhZ3Mubm9fc3luYyA9IDA7Cisg ICBhcHAtPmFwcF9sb2NhbC0+ZmxhZ3MuZGVmX2NodjIgPSAwOworICAgYXBwLT5hcHBfbG9jYWwt PnBpbnBhZC5zcGVjaWZpZWQgPSAwOworICAgYXBwLT5hcHBfbG9jYWwtPnBpbnBhZC5maXhlZGxl bl91c2VyID0gLTE7CisgICBhcHAtPmFwcF9sb2NhbC0+cGlucGFkLmZpeGVkbGVuX2FkbWluID0g LTE7CisgCisgICAvKiBSZWFkIHRoZSBETy4gICovCisgICByZWxwdHIgPSBnZXRfb25lX2RvIChh cHAsIDB4MDA1RSwgJmJ1ZmZlciwgJmJ1ZmxlbiwgTlVMTCk7CisgICBpZiAoIXJlbHB0cikKKyAg ICAgcmV0dXJuOyAvKiBPb29wcy4gKi8KKyAgIGZvciAoOyBidWZsZW47IGJ1Zmxlbi0tLCBidWZm ZXIrKykKKyAgICAgaWYgKCpidWZmZXIgPT0gJ1xuJykKKyAgICAgICBicmVhazsKKyAgIGlmIChi dWZsZW4gPCAyIHx8IGJ1ZmZlclsxXSAhPSAnXHgxNCcpCisgICAgIHsKKyAgICAgICB4ZnJlZSAo cmVscHRyKTsKKyAgICAgICByZXR1cm47IC8qIE5vIGNvbnRyb2wgc2VxdWVuY2VzLiAgKi8KKyAg ICAgfQorIAorICAgYnVmbGVuLS07CisgICBidWZmZXIrKzsKKyAgIGRvCisgICAgIHsKKyAgICAg ICBidWZsZW4tLTsKKyAgICAgICBidWZmZXIrKzsKKyAgICAgICBpZiAoYnVmbGVuID4gMSAmJiAq YnVmZmVyID09ICdGJyAmJiBidWZmZXJbMV0gPT0gJz0nKQorICAgICAgICAgeworICAgICAgICAg ICAvKiBGbGFncyBjb250cm9sIHNlcXVlbmNlIGZvdW5kLiAgKi8KKyAgICAgICAgICAgaW50IGxh c3RkaWcgPSAwOworIAorICAgICAgICAgICAvKiBGb3Igbm93IHdlIGFyZSBvbmx5IGludGVyZXN0 ZWQgaW4gdGhlIGxhc3QgZGlnaXQsIHNvIHNraXAKKyAgICAgICAgICAgICAgYW55IGxlYWRpbmcg ZGlnaXRzIGJ1dCBiYWlsIG91dCBvbiBpbnZhbGlkIGNoYXJhY3RlcnMuICovCisgICAgICAgICAg IGZvciAocD1idWZmZXIrMiwgbGVuID0gYnVmbGVuLTI7IGxlbiAmJiBoZXhkaWdpdHAgKHApOyBw KyssIGxlbi0tKQorICAgICAgICAgICAgIGxhc3RkaWcgPSB4dG9pXzEgKHApOworICAgICAgICAg ICBidWZmZXIgPSBwOworICAgICAgICAgICBidWZsZW4gPSBsZW47CisgICAgICAgICAgIGlmIChs ZW4gJiYgISgqcCA9PSAnXG4nIHx8ICpwID09ICdceDE4JykpCisgICAgICAgICAgICAgZ290byBu ZXh0OyAgLyogSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpZWxkLiAgKi8KKyAgICAgICAgICAgYXBw LT5hcHBfbG9jYWwtPmZsYWdzLm5vX3N5bmMgPSAhIShsYXN0ZGlnICYgMSk7CisgICAgICAgICAg IGFwcC0+YXBwX2xvY2FsLT5mbGFncy5kZWZfY2h2MiA9IChsYXN0ZGlnICYgMykgPT0gMzsKKyAg ICAgICAgIH0KKyAgICAgICBlbHNlIGlmIChidWZsZW4gPiAxICYmICpidWZmZXIgPT0gJ1AnICYm IGJ1ZmZlclsxXSA9PSAnPScpCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFBpbnBhZCByZXF1 ZXN0IGNvbnRyb2wgc2VxdWVuY2UgZm91bmQuICAqLworICAgICAgICAgICBidWZmZXIgKz0gMjsK KyAgICAgICAgICAgYnVmbGVuIC09IDI7CisgCisgICAgICAgICAgIGlmIChidWZsZW4pCisgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgaWYgKGRpZ2l0cCAoYnVmZmVyKSkKKyAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIGNoYXIgKnE7CisgICAgICAgICAgICAgICAg ICAgaW50IG4sIG07CisgCisgICAgICAgICAgICAgICAgICAgbiA9IHN0cnRvbCAoYnVmZmVyLCAm cSwgMTApOworICAgICAgICAgICAgICAgICAgIGlmIChxID49IChjaGFyICopYnVmZmVyICsgYnVm bGVuCisgICAgICAgICAgICAgICAgICAgICAgIHx8ICpxID09ICdceDE4JyB8fCAqcSA9PSAnXG4n KQorICAgICAgICAgICAgICAgICAgICAgbSA9IG47CisgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnErKyAh PSAnLCcgfHwgIWRpZ2l0cCAocSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0 OworICAgICAgICAgICAgICAgICAgICAgICBtID0gc3RydG9sIChxLCAmcSwgMTApOworICAgICAg ICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgIGlmIChidWZsZW4gPCAoKHVu c2lnbmVkIGNoYXIgKilxIC0gYnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor IAorICAgICAgICAgICAgICAgICAgIGJ1ZmxlbiAtPSAoKHVuc2lnbmVkIGNoYXIgKilxIC0gYnVm ZmVyKTsKKyAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBxOworIAorICAgICAgICAgICAgICAg ICAgIGlmIChidWZsZW4gJiYgISgqYnVmZmVyID09ICdcbicgfHwgKmJ1ZmZlciA9PSAnXHgxOCcp KQorICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0OworICAgICAgICAgICAgICAgICAgIGFw cC0+YXBwX2xvY2FsLT5waW5wYWQuc3BlY2lmaWVkID0gMTsKKyAgICAgICAgICAgICAgICAgICBh cHAtPmFwcF9sb2NhbC0+cGlucGFkLmZpeGVkbGVuX3VzZXIgPSBuOworICAgICAgICAgICAgICAg ICAgIGFwcC0+YXBwX2xvY2FsLT5waW5wYWQuZml4ZWRsZW5fYWRtaW4gPSBtOworICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICBuZXh0OgorICAgICAg IC8qIFNraXAgdG8gRlMgKDB4MTgpIG9yIExGIChcbikuICAqLworICAgICAgIGZvciAoOyBidWZs ZW4gJiYgKmJ1ZmZlciAhPSAnXHgxOCcgJiYgKmJ1ZmZlciAhPSAnXG4nOyBidWZsZW4tLSkKKyAg ICAgICAgIGJ1ZmZlcisrOworICAgICB9CisgICB3aGlsZSAoYnVmbGVuICYmICpidWZmZXIgIT0g J1xuJyk7CisgCisgICB4ZnJlZSAocmVscHRyKTsKKyB9CisgCisgCisgI2RlZmluZSBNQVhfQVJH U19TVE9SRV9GUFIgMworIAorIC8qIE5vdGUsIHRoYXQgRlBSIG11c3QgYmUgYXQgbGVhc3QgMjAg Ynl0ZXMuICovCisgc3RhdGljIGdwZ19lcnJvcl90Cisgc3RvcmVfZnByIChhcHBfdCBhcHAsIGlu dCBrZXludW1iZXIsIHUzMiB0aW1lc3RhbXAsIHVuc2lnbmVkIGNoYXIgKmZwciwKKyAgICAgICAg ICAgIGludCBhbGdvLCAuLi4pCisgeworICAgdW5zaWduZWQgaW50IG4sIG5iaXRzOworICAgdW5z aWduZWQgY2hhciAqYnVmZmVyLCAqcDsKKyAgIGludCB0YWcsIHRhZzI7CisgICBpbnQgcmM7Cisg ICBjb25zdCB1bnNpZ25lZCBjaGFyICptW01BWF9BUkdTX1NUT1JFX0ZQUl07CisgICBzaXplX3Qg bWxlbltNQVhfQVJHU19TVE9SRV9GUFJdOworICAgdmFfbGlzdCBhcDsKKyAgIGludCBhcmdjOwor ICAgaW50IGk7CisgCisgICBuID0gNjsgICAgLyoga2V5IHBhY2tldCB2ZXJzaW9uLCA0LWJ5dGUg dGltZXN0YW1wcywgYW5kIGFsZ29yaXRobSAqLworICAgaWYgKGFsZ28gPT0gUFVCS0VZX0FMR09f RUNESCkKKyAgICAgYXJnYyA9IDM7CisgICBlbHNlCisgICAgIGFyZ2MgPSAyOworIAorICAgdmFf c3RhcnQgKGFwLCBhbGdvKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgIHsK KyAgICAgICBtW2ldID0gdmFfYXJnIChhcCwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKyAgICAg ICBtbGVuW2ldID0gdmFfYXJnIChhcCwgc2l6ZV90KTsKKyAgICAgICBpZiAoYWxnbyA9PSBQVUJL RVlfQUxHT19SU0EgfHwgaSA9PSAxKQorICAgICAgICAgbiArPSAyOworICAgICAgIG4gKz0gbWxl bltpXTsKKyAgICAgfQorICAgdmFfZW5kIChhcCk7CisgCisgICBwID0gYnVmZmVyID0geHRyeW1h bGxvYyAoMyArIG4pOworICAgaWYgKCFidWZmZXIpCisgICAgIHJldHVybiBncGdfZXJyb3JfZnJv bV9zeXNlcnJvciAoKTsKKyAKKyAgICpwKysgPSAweDk5OyAgICAgLyogY3RiICovCisgICAqcCsr ID0gbiA+PiA4OyAgIC8qIDIgYnl0ZSBsZW5ndGggaGVhZGVyICovCisgICAqcCsrID0gbjsKKyAg ICpwKysgPSA0OyAgICAgICAgLyoga2V5IHBhY2tldCB2ZXJzaW9uICovCisgICAqcCsrID0gdGlt ZXN0YW1wID4+IDI0OworICAgKnArKyA9IHRpbWVzdGFtcCA+PiAxNjsKKyAgICpwKysgPSB0aW1l c3RhbXAgPj4gIDg7CisgICAqcCsrID0gdGltZXN0YW1wOworICAgKnArKyA9IGFsZ287CisgCisg ICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgICB7CisgICAgICAgaWYgKGFsZ28gPT0g UFVCS0VZX0FMR09fUlNBKQorICAgICAgICAgeworICAgICAgICAgICBuYml0cyA9IGNvdW50X2Jp dHMgKG1baV0sIG1sZW5baV0pOworICAgICAgICAgICAqcCsrID0gbmJpdHMgPj4gODsKKyAgICAg ICAgICAgKnArKyA9IG5iaXRzOworICAgICAgICAgfQorICAgICAgIGVsc2UgaWYgKGkgPT0gMSkK KyAgICAgICAgIHsKKyAgICAgICAgICAgbmJpdHMgPSBjb3VudF9zb3NfYml0cyAobVtpXSwgbWxl bltpXSk7CisgICAgICAgICAgICpwKysgPSBuYml0cyA+PiA4OworICAgICAgICAgICAqcCsrID0g bmJpdHM7CisgICAgICAgICB9CisgICAgICAgbWVtY3B5IChwLCBtW2ldLCBtbGVuW2ldKTsKKyAg ICAgICBwICs9IG1sZW5baV07CisgICAgIH0KKyAKKyAgIGdjcnlfbWRfaGFzaF9idWZmZXIgKEdD UllfTURfU0hBMSwgZnByLCBidWZmZXIsIG4rMyk7CisgCisgICB4ZnJlZSAoYnVmZmVyKTsKKyAK KyAgIHRhZyA9IChhcHAtPmFwcHZlcnNpb24gPiAweDAwMDc/IDB4QzcgOiAweEM2KSArIGtleW51 bWJlcjsKKyAgIGZsdXNoX2NhY2hlX2l0ZW0gKGFwcCwgMHhDNSk7CisgICB0YWcyID0gMHhDRSAr IGtleW51bWJlcjsKKyAgIGZsdXNoX2NhY2hlX2l0ZW0gKGFwcCwgMHhDRCk7CisgCisgICByYyA9 IGlzbzc4MTZfcHV0X2RhdGEgKGFwcF9nZXRfc2xvdCAoYXBwKSwgMCwgdGFnLCBmcHIsIDIwKTsK KyAgIGlmIChyYykKKyAgICAgbG9nX2Vycm9yIChfKCJmYWlsZWQgdG8gc3RvcmUgdGhlIGZpbmdl cnByaW50OiAlc1xuIiksZ3BnX3N0cmVycm9yIChyYykpOworIAorICAgaWYgKCFyYyAmJiBhcHAt PmFwcHZlcnNpb24gPiAweDAxMDApCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0 XTsKKyAKKyAgICAgICBidWZbMF0gPSB0aW1lc3RhbXAgPj4gMjQ7CisgICAgICAgYnVmWzFdID0g dGltZXN0YW1wID4+IDE2OworICAgICAgIGJ1ZlsyXSA9IHRpbWVzdGFtcCA+PiAgODsKKyAgICAg ICBidWZbM10gPSB0aW1lc3RhbXA7CisgCisgICAgICAgcmMgPSBpc283ODE2X3B1dF9kYXRhIChh cHBfZ2V0X3Nsb3QgKGFwcCksIDAsIHRhZzIsIGJ1ZiwgNCk7CisgICAgICAgaWYgKHJjKQorICAg ICAgICAgbG9nX2Vycm9yIChfKCJmYWlsZWQgdG8gc3RvcmUgdGhlIGNyZWF0aW9uIGRhdGU6ICVz XG4iKSwKKyAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChyYykpOworICAgICB9Cisg CisgICByZXR1cm4gcmM7CisgfQorIAorIAorIHN0YXRpYyB2b2lkCisgc2VuZF9mcHJfaWZfbm90 X251bGwgKGN0cmxfdCBjdHJsLCBjb25zdCBjaGFyICprZXl3b3JkLAorICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtYmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcHIpCisgeworICAgaW50 IGk7CisgICBjaGFyIGJ1Zls0MV07CisgICBjaGFyIG51bWJ1ZlsyNV07CisgCisgICBmb3IgKGk9 MDsgaSA8IDIwICYmICFmcHJbaV07IGkrKykKKyAgICAgOworICAgaWYgKGk9PTIwKQorICAgICBy ZXR1cm47IC8qIEFsbCB6ZXJvLiAqLworICAgYmluMmhleCAoZnByLCAyMCwgYnVmKTsKKyAgIGlm IChudW1iZXIgPT0gLTEpCisgICAgICpudW1idWYgPSAwOyAvKiBEb24ndCBwcmludCB0aGUga2V5 IG51bWJlciAqLworICAgZWxzZQorICAgICBzcHJpbnRmIChudW1idWYsICIlZCIsIG51bWJlcik7 CisgICBzZW5kX3N0YXR1c19pbmZvIChjdHJsLCBrZXl3b3JkLAorICAgICAgICAgICAgICAgICAg ICAgbnVtYnVmLCAoc2l6ZV90KXN0cmxlbihudW1idWYpLAorICAgICAgICAgICAgICAgICAgICAg YnVmLCAoc2l6ZV90KXN0cmxlbiAoYnVmKSwgTlVMTCwgMCk7CisgfQorIAorIHN0YXRpYyB2b2lk Cisgc2VuZF9mcHJ0aW1lX2lmX25vdF9udWxsIChjdHJsX3QgY3RybCwgY29uc3QgY2hhciAqa2V5 d29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXIsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnN0YW1wKQorIHsKKyAgIGNoYXIgbnVtYnVmMVs1MF0sIG51bWJ1ZjJbNTBdOwor ICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyAKKyAgIHZhbHVlID0gYnVmMzJfdG9fdWxvbmcgKHN0 YW1wKTsKKyAgIGlmICghdmFsdWUpCisgICAgIHJldHVybjsKKyAgIHNwcmludGYgKG51bWJ1ZjEs ICIlZCIsIG51bWJlcik7CisgICBzcHJpbnRmIChudW1idWYyLCAiJWx1IiwgdmFsdWUpOworICAg c2VuZF9zdGF0dXNfaW5mbyAoY3RybCwga2V5d29yZCwKKyAgICAgICAgICAgICAgICAgICAgIG51 bWJ1ZjEsIChzaXplX3Qpc3RybGVuKG51bWJ1ZjEpLAorICAgICAgICAgICAgICAgICAgICAgbnVt YnVmMiwgKHNpemVfdClzdHJsZW4obnVtYnVmMiksIE5VTEwsIDApOworIH0KKyAKKyBzdGF0aWMg dm9pZAorIHNlbmRfa2V5X2RhdGEgKGN0cmxfdCBjdHJsLCBjb25zdCBjaGFyICpuYW1lLAorICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEsIHNpemVfdCBhbGVuKQorIHsKKyAg IGNoYXIgKmJ1ZmZlciwgKmJ1ZjsKKyAgIHNpemVfdCBidWZsZW47CisgCisgICBidWZmZXIgPSBi dWYgPSBiaW4yaGV4IChhLCBhbGVuLCBOVUxMKTsKKyAgIGlmICghYnVmZmVyKQorICAgICB7Cisg ICAgICAgbG9nX2Vycm9yICgibWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaW4gc2VuZF9rZXlfZGF0 YVxuIik7CisgICAgICAgcmV0dXJuOworICAgICB9CisgICBidWZsZW4gPSBzdHJsZW4gKGJ1ZmZl cik7CisgCisgICAvKiA3NjggaXMgdGhlIGhleGlmaWVkIHNpemUgZm9yIHRoZSBtb2R1bHVzIG9m IGFuIDMwNzIgYml0IGtleS4gIFdlCisgICAgICB1c2UgZXh0cmEgY2h1bmtzIHRvIHRyYW5zbWl0 IGxhcmdlciBkYXRhIChpLmUgZm9yIDQwOTYgYml0KS4gICovCisgICBmb3IgKCA7YnVmbGVuID4g NzY4OyBidWZsZW4gLT0gNzY4LCBidWYgKz0gNzY4KQorICAgICBzZW5kX3N0YXR1c19pbmZvIChj dHJsLCAiS0VZLURBVEEiLAorICAgICAgICAgICAgICAgICAgICAgICAiLSIsIDEsCisgICAgICAg ICAgICAgICAgICAgICAgIGJ1ZiwgNzY4LAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAw KTsKKyAgIHNlbmRfc3RhdHVzX2luZm8gKGN0cmwsICJLRVktREFUQSIsCisgICAgICAgICAgICAg ICAgICAgICBuYW1lLCAoc2l6ZV90KXN0cmxlbihuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg IGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICB4ZnJlZSAo YnVmZmVyKTsKKyB9CisgCisgCisgc3RhdGljIHZvaWQKKyBzZW5kX2tleV9hdHRyIChjdHJsX3Qg Y3RybCwgYXBwX3QgYXBwLCBjb25zdCBjaGFyICprZXl3b3JkLCBpbnQga2V5bm8pCisgeworICAg Y2hhciBidWZmZXJbMjAwXTsKKyAKKyAgIGxvZ19hc3NlcnQgKGtleW5vID49MCAmJiBrZXlubyA8 IERJTShhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cikpOworIAorICAgLyogTm90ZSB0aGF0IHRoZSBj b2RlIGluIGdwZy1jYXJkIHN1cHBvcnRzIHByZWZpeGluZyB0aGUga2V5IG51bWJlcgorICAgICog d2l0aCAiT1BFTlBHUC4iIGJ1dCBvbGRlciBjb2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IHRoaXMu ICBUaGVyZQorICAgICogaXMgYWxzbyBhIGRpc2NyZXBhbmN5IHdpdGggdGhlIGFsZ29yaXRobSBu dW1iZXJzOiBXZSBzaG91bGQgdXNlCisgICAgKiB0aGUgZ2NyeXB0IG51bWJlcnMgYnV0IHRoZSBj dXJyZW50IGNvZGUgYXNzdW1lcyBPcGVuUEdQIG51bWJlcnMuICAqLworICAgaWYgKGFwcC0+YXBw X2xvY2FsLT5rZXlhdHRyW2tleW5vXS5rZXlfdHlwZSA9PSBLRVlfVFlQRV9SU0EpCisgICAgIHNu cHJpbnRmIChidWZmZXIsIHNpemVvZiBidWZmZXIsICIlZCAxIHJzYSV1ICV1ICVkIiwKKyAgICAg ICAgICAgICAgIGtleW5vKzEsCisgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0 cltrZXlub10ucnNhLm5fYml0cywKKyAgICAgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5rZXlh dHRyW2tleW5vXS5yc2EuZV9iaXRzLAorICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtl eWF0dHJba2V5bm9dLnJzYS5mb3JtYXQpOworICAgZWxzZSBpZiAoYXBwLT5hcHBfbG9jYWwtPmtl eWF0dHJba2V5bm9dLmtleV90eXBlID09IEtFWV9UWVBFX0VDQykKKyAgICAgeworICAgICAgIHNu cHJpbnRmIChidWZmZXIsIHNpemVvZiBidWZmZXIsICIlZCAlZCAlcyIsCisgICAgICAgICAgICAg ICAgIGtleW5vKzEsCisgICAgICAgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tl eW5vXS5lY2MuYWxnbywKKyAgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJb a2V5bm9dLmVjYy5jdXJ2ZSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgc25wcmludGYgKGJ1ZmZl ciwgc2l6ZW9mIGJ1ZmZlciwgIiVkIDAgMCBVTktOT1dOIiwga2V5bm8rMSk7CisgCisgICBzZW5k X3N0YXR1c19kaXJlY3QgKGN0cmwsIGtleXdvcmQsIGJ1ZmZlcik7CisgfQorIAorIAorICNkZWZp bmUgUlNBX1NNQUxMX1NJWkVfS0VZIDE5NTIKKyAjZGVmaW5lIFJTQV9TTUFMTF9TSVpFX09QICAy MDQ4CisgCisgc3RhdGljIGludAorIGRldGVybWluZV9yc2FfcmVzcG9uc2UgKGFwcF90IGFwcCwg aW50IGtleW5vKQorIHsKKyAgIGludCBzaXplOworIAorICAgc2l6ZSA9IDIgKyAzIC8qIGhlYWRl ciAqLworICAgICArIDQgLyogdGFnK2xlbiAqLyArIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltr ZXlub10ucnNhLm5fYml0cys3KS84CisgICAgICsgMiAvKiB0YWcrbGVuICovICsgKGFwcC0+YXBw X2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2EuZV9iaXRzKzcpLzg7CisgCisgICByZXR1cm4gc2l6 ZTsKKyB9CisgCisgCisgLyogSW1wbGVtZW50IHRoZSBHRVRBVFRSIGNvbW1hbmQuICBUaGlzIGlz IHNpbWlsYXIgdG8gdGhlIExFQVJOCisgICAgY29tbWFuZCBidXQgcmV0dXJucyBqdXN0IG9uZSB2 YWx1ZSB2aWEgdGhlIHN0YXR1cyBpbnRlcmZhY2UuICovCisgc3RhdGljIGdwZ19lcnJvcl90Cisg ZG9fZ2V0YXR0ciAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgY29uc3QgY2hhciAqbmFtZSkKKyB7 CisgICBzdGF0aWMgc3RydWN0IHsKKyAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgaW50IHRh ZzsKKyAgICAgaW50IHNwZWNpYWw7CisgICB9IHRhYmxlW10gPSB7CisgICAgIHsgIkRJU1AtTkFN RSIsICAgIDB4MDA1QiB9LAorICAgICB7ICJMT0dJTi1EQVRBIiwgICAweDAwNUUgfSwKKyAgICAg eyAiRElTUC1MQU5HIiwgICAgMHg1RjJEIH0sCisgICAgIHsgIkRJU1AtU0VYIiwgICAgIDB4NUYz NSB9LAorICAgICB7ICJQVUJLRVktVVJMIiwgICAweDVGNTAgfSwKKyAgICAgeyAiS0VZLUZQUiIs ICAgICAgMHgwMEM1LCAzIH0sCisgICAgIHsgIktFWS1USU1FIiwgICAgIDB4MDBDRCwgNCB9LAor ICAgICB7ICJLRVktQVRUUiIsICAgICAweDAwMDAsIC01IH0sCisgICAgIHsgIkNBLUZQUiIsICAg ICAgIDB4MDBDNiwgMyB9LAorICAgICB7ICJDSFYtU1RBVFVTIiwgICAweDAwQzQsIDEgfSwKKyAg ICAgeyAiU0lHLUNPVU5URVIiLCAgMHgwMDkzLCAyIH0sCisgICAgIHsgIlNFUklBTE5PIiwgICAg IDB4MDA0RiwgLTEgfSwKKyAgICAgeyAiQUlEIiwgICAgICAgICAgMHgwMDRGIH0sCisgICAgIHsg IkVYVENBUCIsICAgICAgIDB4MDAwMCwgLTIgfSwKKyAgICAgeyAiUFJJVkFURS1ETy0xIiwgMHgw MTAxIH0sCisgICAgIHsgIlBSSVZBVEUtRE8tMiIsIDB4MDEwMiB9LAorICAgICB7ICJQUklWQVRF LURPLTMiLCAweDAxMDMgfSwKKyAgICAgeyAiUFJJVkFURS1ETy00IiwgMHgwMTA0IH0sCisgICAg IHsgIiRBVVRIS0VZSUQiLCAgIDB4MDAwMCwgLTMgfSwKKyAgICAgeyAiJEVOQ1JLRVlJRCIsICAg MHgwMDAwLCAtNiB9LAorICAgICB7ICIkU0lHTktFWUlEIiwgICAweDAwMDAsIC03IH0sCisgICAg IHsgIiRESVNQU0VSSUFMTk8iLDB4MDAwMCwgLTQgfSwKKyAgICAgeyAiVUlGLTEiLCAgICAgICAg MHgwMEQ2LCAwIH0sCisgICAgIHsgIlVJRi0yIiwgICAgICAgIDB4MDBENywgMCB9LAorICAgICB7 ICJVSUYtMyIsICAgICAgICAweDAwRDgsIDAgfSwKKyAgICAgeyAiS0RGIiwgICAgICAgICAgMHgw MEY5LCA1IH0sCisgICAgIHsgIk1BTlVGQUNUVVJFUiIsIDB4MDAwMCwgLTggfSwKKyAgICAgeyAi VUlGIiwgICAgICAgICAgMHgwMDAwLCAtOSB9LCAgLyogU2hvcnRjdXQgZm9yIGFsbCBVSUYgKi8K KyAgICAgeyAiS0VZLVNUQVRVUyIsICAgMHgwMERFLCAgNiB9LAorICAgICB7ICJLRVktQVRUUi1J TkZPIiwgMHgwMEZBLCAgNyB9LAorICAgICB7IE5VTEwsIDAgfQorICAgfTsKKyAgIGludCBpZHgs IGksIHJjOworICAgdm9pZCAqcmVscHRyOworICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CisgICBz aXplX3QgdmFsdWVsZW47CisgCisgICBmb3IgKGlkeD0wOyB0YWJsZVtpZHhdLm5hbWUgJiYgc3Ry Y21wICh0YWJsZVtpZHhdLm5hbWUsIG5hbWUpOyBpZHgrKykKKyAgICAgOworICAgaWYgKCF0YWJs ZVtpZHhdLm5hbWUpCisgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX05BTUUpOwor IAorICAgaWYgKHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAtMSkKKyAgICAgeworICAgICAgIC8qIFRo ZSBzZXJpYWwgbnVtYmVyIGlzIHZlcnkgc3BlY2lhbC4gIFdlIGNhbid0IHVzZSB0aGUgQUlECisg ICAgICAgICAgRE8gKDB4NGYpIGJlY2F1c2UgdGhpcyBpcyB0aGUgc2VyaWFsbm8gcGVyIHNwZWNz IHdpdGggdGhlCisgICAgICAgICAgY29ycmVjdCBhcHB2ZXJzaW9uLiAgV2UgbWlnaHQgaG93ZXZl ciB1c2UgYSBzZXJpYWxubyB3aXRoIHRoZQorICAgICAgICAgIHZlcnNpb24gc2V0IHRvIDAuMCBh bmQgdGhhdCBpcyB3aGF0IHdlIG5lZWQgdG8gcmV0dXJuLiAgKi8KKyAgICAgICBjaGFyICpzZXJp YWwgPSBhcHBfZ2V0X3NlcmlhbG5vIChhcHApOworIAorICAgICAgIGlmIChzZXJpYWwpCisgICAg ICAgICB7CisgICAgICAgICAgIHNlbmRfc3RhdHVzX2RpcmVjdCAoY3RybCwgIlNFUklBTE5PIiwg c2VyaWFsKTsKKyAgICAgICAgICAgeGZyZWUgKHNlcmlhbCk7CisgICAgICAgICB9CisgICAgICAg cmV0dXJuIDA7CisgICAgIH0KKyAgIGlmICh0YWJsZVtpZHhdLnNwZWNpYWwgPT0gLTIpCisgICAg IHsKKyAgICAgICBjaGFyIHRtcFsxMTBdOworIAorICAgICAgIC8qIE5vZXQgdGhhdCB3aXRoIHYz IGNhcmRzIG1jbDMgaXMgdXNlZCBmb3IgYWxsIGNlcnRpZmljYXRlcy4gICovCisgICAgICAgc25w cmludGYgKHRtcCwgc2l6ZW9mIHRtcCwKKyAgICAgICAgICAgICAgICAgImdjPSVkIGtpPSVkIGZj PSVkIHBkPSVkIG1jbDM9JXUgYWFjPSVkICIKKyAgICAgICAgICAgICAgICAgInNtPSVkIHNpPSV1 IGRlYz0lZCBidD0lZCBrZGY9JWQiLAorICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ ZXh0Y2FwLmdldF9jaGFsbGVuZ2UsCisgICAgICAgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5l eHRjYXAua2V5X2ltcG9ydCwKKyAgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNh cC5jaGFuZ2VfZm9yY2VfY2h2LAorICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0 Y2FwLnByaXZhdGVfZG9zLAorICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2Fw Lm1heF9jZXJ0bGVuLAorICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmFs Z29fYXR0cl9jaGFuZ2UsCisgICAgICAgICAgICAgICAgIChhcHAtPmFwcF9sb2NhbC0+ZXh0Y2Fw LnNtX3N1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgPyAoYXBwLT5hcHBfbG9jYWwtPmV4dGNh cC5zbV9hbGdvID09IDA/IENJUEhFUl9BTEdPXzNERVMgOgorICAgICAgICAgICAgICAgICAgICAg KGFwcC0+YXBwX2xvY2FsLT5leHRjYXAuc21fYWxnbyA9PSAxPworICAgICAgICAgICAgICAgICAg ICAgIENJUEhFUl9BTEdPX0FFUyA6IENJUEhFUl9BTEdPX0FFUzI1NikpCisgICAgICAgICAgICAg ICAgICA6IDApLAorICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+c3RhdHVzX2luZGlj YXRvciwKKyAgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5oYXNfZGVjcnlw dCwKKyAgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5oYXNfYnV0dG9uLAor ICAgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmtkZl9kbyk7CisgICAgICAg c2VuZF9zdGF0dXNfaW5mbyAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCB0bXAsIHN0cmxlbiAodG1w KSwgTlVMTCwgMCk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAgIGlmICh0YWJsZVtpZHhd LnNwZWNpYWwgPT0gLTMpCisgICAgIHsKKyAgICAgICBjaGFyIGNvbnN0IHRtcFtdID0gIk9QRU5Q R1AuMyI7CisgICAgICAgc2VuZF9zdGF0dXNfaW5mbyAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCB0 bXAsIHN0cmxlbiAodG1wKSwgTlVMTCwgMCk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAg IGlmICh0YWJsZVtpZHhdLnNwZWNpYWwgPT0gLTQpCisgICAgIHsKKyAgICAgICBjaGFyICpzZXJp YWw7CisgCisgICAgICAgaWYgKChzZXJpYWwgPSBhcHBfZ2V0X2Rpc3BzZXJpYWxubyAoYXBwLCAw KSkpCisgICAgICAgICB7CisgICAgICAgICAgIHNlbmRfc3RhdHVzX2luZm8gKGN0cmwsIHRhYmxl W2lkeF0ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsLCBzdHJsZW4g KHNlcmlhbCksIE5VTEwsIDApOworICAgICAgICAgICB4ZnJlZSAoc2VyaWFsKTsKKyAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VS Ul9JTlZfTkFNRSk7CisgICAgIH0KKyAgIGlmICh0YWJsZVtpZHhdLnNwZWNpYWwgPT0gLTUpCisg ICAgIHsKKyAgICAgICBmb3IgKGk9MDsgaSA8IDM7IGkrKykKKyAgICAgICAgIHNlbmRfa2V5X2F0 dHIgKGN0cmwsIGFwcCwgdGFibGVbaWR4XS5uYW1lLCBpKTsKKyAgICAgICByZXR1cm4gMDsKKyAg ICAgfQorICAgaWYgKHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAtNikKKyAgICAgeworICAgICAgIGNo YXIgY29uc3QgdG1wW10gPSAiT1BFTlBHUC4yIjsKKyAgICAgICBzZW5kX3N0YXR1c19pbmZvIChj dHJsLCB0YWJsZVtpZHhdLm5hbWUsIHRtcCwgc3RybGVuICh0bXApLCBOVUxMLCAwKTsKKyAgICAg ICByZXR1cm4gMDsKKyAgICAgfQorICAgaWYgKHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAtNykKKyAg ICAgeworICAgICAgIGNoYXIgY29uc3QgdG1wW10gPSAiT1BFTlBHUC4xIjsKKyAgICAgICBzZW5k X3N0YXR1c19pbmZvIChjdHJsLCB0YWJsZVtpZHhdLm5hbWUsIHRtcCwgc3RybGVuICh0bXApLCBO VUxMLCAwKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICAgaWYgKHRhYmxlW2lkeF0uc3Bl Y2lhbCA9PSAtOCkKKyAgICAgeworICAgICAgIHJldHVybiBzZW5kX3N0YXR1c19wcmludGYKKyAg ICAgICAgIChjdHJsLCB0YWJsZVtpZHhdLm5hbWUsICIldSAlcyIsCisgICAgICAgICAgYXBwLT5h cHBfbG9jYWwtPm1hbnVmYWN0dXJlciwKKyAgICAgICAgICBnZXRfbWFudWZhY3R1cmVyIChhcHAt PmFwcF9sb2NhbC0+bWFudWZhY3R1cmVyKSk7CisgICAgIH0KKyAgIGlmICh0YWJsZVtpZHhdLnNw ZWNpYWwgPT0gLTkpCisgICAgIHsKKyAgICAgICByYyA9IGRvX2dldGF0dHIgKGFwcCwgY3RybCwg IlVJRi0xIik7CisgICAgICAgaWYgKCFyYykKKyAgICAgICAgIHJjID0gZG9fZ2V0YXR0ciAoYXBw LCBjdHJsLCAiVUlGLTIiKTsKKyAgICAgICBpZiAoIXJjKQorICAgICAgICAgcmMgPSBkb19nZXRh dHRyIChhcHAsIGN0cmwsICJVSUYtMyIpOworICAgICAgIHJldHVybiByYzsKKyAgICAgfQorIAor ICAgcmVscHRyID0gZ2V0X29uZV9kbyAoYXBwLCB0YWJsZVtpZHhdLnRhZywgJnZhbHVlLCAmdmFs dWVsZW4sICZyYyk7CisgICBpZiAocmVscHRyKQorICAgICB7CisgICAgICAgaWYgKHRhYmxlW2lk eF0uc3BlY2lhbCA9PSAxKQorICAgICAgICAgeworICAgICAgICAgICBjaGFyIG51bWJ1Zls3KjIz XTsKKyAKKyAgICAgICAgICAgZm9yIChpPTAsKm51bWJ1Zj0wOyBpIDwgdmFsdWVsZW4gJiYgaSA8 IDc7IGkrKykKKyAgICAgICAgICAgICBzcHJpbnRmIChudW1idWYrc3RybGVuIChudW1idWYpLCAi ICVkIiwgdmFsdWVbaV0pOworICAgICAgICAgICBzZW5kX3N0YXR1c19pbmZvIChjdHJsLCB0YWJs ZVtpZHhdLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJ1Ziwgc3RybGVu IChudW1idWYpLCBOVUxMLCAwKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlIGlmICh0YWJsZVtp ZHhdLnNwZWNpYWwgPT0gMikKKyAgICAgICAgIHsKKyAgICAgICAgICAgY2hhciBudW1idWZbNTBd OworIAorICAgICAgICAgICBzcHJpbnRmIChudW1idWYsICIlbHUiLCBjb252ZXJ0X3NpZ19jb3Vu dGVyX3ZhbHVlICh2YWx1ZSwgdmFsdWVsZW4pKTsKKyAgICAgICAgICAgc2VuZF9zdGF0dXNfaW5m byAoY3RybCwgdGFibGVbaWR4XS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1idWYsIHN0cmxlbiAobnVtYnVmKSwgTlVMTCwgMCk7CisgICAgICAgICB9CisgICAgICAgZWxz ZSBpZiAodGFibGVbaWR4XS5zcGVjaWFsID09IDMpCisgICAgICAgICB7CisgICAgICAgICAgIGlm ICh2YWx1ZWxlbiA+PSA2MCkKKyAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IDM7IGkrKykKKyAg ICAgICAgICAgICAgIHNlbmRfZnByX2lmX25vdF9udWxsIChjdHJsLCB0YWJsZVtpZHhdLm5hbWUs IGkrMSwgdmFsdWUraSoyMCk7CisgICAgICAgICB9CisgICAgICAgZWxzZSBpZiAodGFibGVbaWR4 XS5zcGVjaWFsID09IDQpCisgICAgICAgICB7CisgICAgICAgICAgIGlmICh2YWx1ZWxlbiA+PSAx MikKKyAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgICAgIHNl bmRfZnBydGltZV9pZl9ub3RfbnVsbCAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCBpKzEsIHZhbHVl K2kqNCk7CisgICAgICAgICB9CisgICAgICAgZWxzZSBpZiAodGFibGVbaWR4XS5zcGVjaWFsID09 IDUpCisgICAgICAgICB7CisgICAgICAgICAgIGlmICgodmFsdWVsZW4gPT0gS0RGX0RBVEFfTEVO R1RIX01JTgorICAgICAgICAgICAgICAgIHx8IHZhbHVlbGVuID09IEtERl9EQVRBX0xFTkdUSF9N QVgpCisgICAgICAgICAgICAgICAmJiAodmFsdWVbMl0gPT0gMHgwMykpCisgICAgICAgICAgICAg YXBwLT5hcHBfbG9jYWwtPnBpbnBhZC5kaXNhYmxlZCA9IDE7CisgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+cGlucGFkLmRpc2FibGVkID0gMDsKKyAKKyAgICAg ICAgICAgc2VuZF9zdGF0dXNfaW5mbyAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCB2YWx1ZSwgdmFs dWVsZW4sIE5VTEwsIDApOworICAgICAgICAgfQorICAgICAgIGVsc2UgaWYgKHRhYmxlW2lkeF0u c3BlY2lhbCA9PSA2KQorICAgICAgICAgeworICAgICAgICAgICBmb3IgKGk9MCxyYz0wOyAhcmMg JiYgaSsxIDwgdmFsdWVsZW47IGkgKz0gMikKKyAgICAgICAgICAgICByYyA9IHNlbmRfc3RhdHVz X3ByaW50ZiAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCAiT1BFTlBHUC4ldSAldSIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2ldLCB2YWx1ZVtpKzFdKTsKKyAg ICAgICAgICAgaWYgKGdwZ19lcnJfY29kZSAocmMpID09IEdQR19FUlJfTk9fT0JKKQorICAgICAg ICAgICAgIHJjID0gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9TVVBQT1JURUQpOworICAgICAgICAg fQorICAgICAgIGVsc2UgaWYgKHRhYmxlW2lkeF0uc3BlY2lhbCA9PSA3KQorICAgICAgICAgewor ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gdmFsdWU7CisgICAgICAgICAgIGlu dCB0YWc7CisgICAgICAgICAgIHNpemVfdCBsZW47CisgCisgICAgICAgICAgIGlmICh2YWx1ZWxl biA8IDIpCisgICAgICAgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfT0JKKTsK KyAKKyAgICAgICAgICAgdGFnID0gcFswXTsKKyAgICAgICAgICAgbGVuID0gcFsxXTsKKyAKKyAg ICAgICAgICAgLyogRG9lcyBpdCBjb21lcyB0YWcrbGVuIGF0IHRoZSBoZWFkPyAgKi8KKyAgICAg ICAgICAgaWYgKHRhZyA9PSAweDAwRkEpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg cCArPSAyOworIAorICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAweDgxKQorICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlbGVuIDwgMykKKyAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX09CSik7CisgICAgICAgICAg ICAgICAgICAgbGVuID0gKnArKzsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ZWxzZSBpZiAobGVuID09IDB4ODIpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICBpZiAodmFsdWVsZW4gPCA0KQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdwZ19l cnJvciAoR1BHX0VSUl9JTlZfT0JKKTsKKyAgICAgICAgICAgICAgICAgICBsZW4gPSAqcCsrOwor ICAgICAgICAgICAgICAgICAgIGxlbiA9IChsZW4gPDwgOCkgfCAqcCsrOworICAgICAgICAgICAg ICAgICB9CisgCisgICAgICAgICAgICAgICB2YWx1ZWxlbiAtPSAocCAtIHZhbHVlKTsKKyAgICAg ICAgICAgICAgIHZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKilwOworIAorICAgICAgICAgICAgICAg aWYgKHZhbHVlbGVuICE9IGxlbikKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgIGlmIChvcHQudmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgIGxvZ19pbmZvICgiWXVi aWtleSBidWc6IGxlbmd0aCAlenUgIT0gJXp1IiwgdmFsdWVsZW4sIGxlbik7CisgCisgICAgICAg ICAgICAgICAgICAgaWYgKEFQUF9DQVJEKGFwcCktPmNhcmR0eXBlICE9IENBUkRUWVBFX1lVQklL RVkpCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9P QkopOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICBm b3IgKDsgcCA8IHZhbHVlICsgdmFsdWVsZW47IHAgKz0gbGVuKQorICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleV9hbGdvX3N0cjsKKyAgICAgICAgICAgICAgIGlu dCBrZXlyZWZubzsKKyAKKyAgICAgICAgICAgICAgIGlmIChwICsgMiA+IHZhbHVlICsgdmFsdWVs ZW4pCisgICAgICAgICAgICAgICAgIGJyZWFrOworIAorICAgICAgICAgICAgICAgdGFnID0gKnAr KzsKKyAgICAgICAgICAgICAgIGxlbiA9ICpwKys7CisgCisgICAgICAgICAgICAgICBpZiAodGFn IDwgMHhjMSkKKyAgICAgICAgICAgICAgICAgY29udGludWU7CisgCisgICAgICAgICAgICAgICBp ZiAodGFnID09IDB4ZGEpCisgICAgICAgICAgICAgICAgIGtleXJlZm5vID0gMHg4MTsKKyAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAga2V5cmVmbm8gPSB0YWcgLSAweGMxICsg MTsKKyAKKyAgICAgICAgICAgICAgIGlmIChwICsgbGVuID4gdmFsdWUgKyB2YWx1ZWxlbikKKyAg ICAgICAgICAgICAgICAgYnJlYWs7CisgCisgICAgICAgICAgICAgICBrZXlfYWxnb19zdHIgPSBn ZXRfYWxnb3JpdGhtX2F0dHJpYnV0ZV9zdHJpbmcgKHAsIGxlbik7CisgCisgICAgICAgICAgICAg ICBzZW5kX3N0YXR1c19wcmludGYgKGN0cmwsIHRhYmxlW2lkeF0ubmFtZSwgIk9QRU5QR1AuJXUg JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlyZWZubywga2V5X2Fs Z29fc3RyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAg ICAgc2VuZF9zdGF0dXNfaW5mbyAoY3RybCwgdGFibGVbaWR4XS5uYW1lLCB2YWx1ZSwgdmFsdWVs ZW4sIE5VTEwsIDApOworIAorICAgICAgIHhmcmVlIChyZWxwdHIpOworICAgICB9CisgICBlbHNl CisgICAgIHsKKyAgICAgICBpZiAodGFibGVbaWR4XS5zcGVjaWFsID09IDUpCisgICAgICAgICBh cHAtPmFwcF9sb2NhbC0+cGlucGFkLmRpc2FibGVkID0gMDsKKyAgICAgfQorICAgcmV0dXJuIHJj OworIH0KKyAKKyAKKyAvKiBSZXR1cm4gdGhlIERJU1AtTkFNRSB3aXRob3V0IGFueSBwYWRkaW5n IGNoYXJhY3RlcnMuICBDYWxsZXIgbXVzdAorICAqIGZyZWUgdGhlIHJlc3VsdC4gIElmIG5vdCBm b3VuZCBvciBlbXB0eSBOVUxMIGlzIHJldHVybmVkLiAgKi8KKyBzdGF0aWMgY2hhciAqCisgZ2V0 X2Rpc3BfbmFtZSAoYXBwX3QgYXBwKQorIHsKKyAgIGludCByYzsKKyAgIHZvaWQgKnJlbHB0cjsK KyAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworICAgc2l6ZV90IHZhbHVlbGVuOworICAgY2hhciAq c3RyaW5nOworICAgY2hhciAqcCwgKmdpdmVuOworICAgY2hhciAqcmVzdWx0OworIAorICAgcmVs cHRyID0gZ2V0X29uZV9kbyAoYXBwLCAweDAwNUIsICZ2YWx1ZSwgJnZhbHVlbGVuLCAmcmMpOwor ICAgaWYgKCFyZWxwdHIpCisgICAgIHJldHVybiBOVUxMOworIAorICAgc3RyaW5nID0geHRyeW1h bGxvYyAodmFsdWVsZW4gKyAxKTsKKyAgIGlmICghc3RyaW5nKQorICAgICB7CisgICAgICAgeGZy ZWUgKHJlbHB0cik7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKyAgIG1lbWNweSAoc3Ry aW5nLCB2YWx1ZSwgdmFsdWVsZW4pOworICAgc3RyaW5nW3ZhbHVlbGVuXSA9IDA7CisgICB4ZnJl ZSAocmVscHRyKTsKKyAKKyAgIC8qIFN3YXAgc3VybmFtZSBhbmQgZ2l2ZW4gbmFtZS4gICovCisg ICBnaXZlbiA9IHN0cnN0ciAoc3RyaW5nLCAiPDwiKTsKKyAgIGZvciAocCA9IHN0cmluZzsgKnA7 IHArKykKKyAgICAgaWYgKCpwID09ICc8JykKKyAgICAgICAqcCA9ICcgJzsKKyAKKyAgIGlmIChn aXZlbiAmJiBnaXZlblsyXSkKKyAgICAgeworICAgICAgICpnaXZlbiA9IDA7CisgICAgICAgZ2l2 ZW4gKz0gMjsKKyAgICAgICByZXN1bHQgPSBzdHJjb25jYXQgKGdpdmVuLCAiICIsIHN0cmluZywg TlVMTCk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHJlc3VsdCA9IHN0cmluZzsK KyAgICAgICBzdHJpbmcgPSBOVUxMOworICAgICB9CisgCisgICB4ZnJlZSAoc3RyaW5nKTsKKyAg IHJldHVybiByZXN1bHQ7CisgfQorIAorIAorIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHJlbWFp bmluZyB0cmllcyBmb3IgdGhlIHN0YW5kYXJkIG9yIHRoZSBhZG1pbgorICAqIHB3LiAgUmV0dXJu cyAtMSBvbiBjYXJkIGVycm9yLiAgKi8KKyBzdGF0aWMgaW50CisgZ2V0X3JlbWFpbmluZ190cmll cyAoYXBwX3QgYXBwLCBpbnQgYWRtaW5wdykKKyB7CisgICB2b2lkICpyZWxwdHI7CisgICB1bnNp Z25lZCBjaGFyICp2YWx1ZTsKKyAgIHNpemVfdCB2YWx1ZWxlbjsKKyAgIGludCByZW1haW5pbmc7 CisgCisgICByZWxwdHIgPSBnZXRfb25lX2RvIChhcHAsIDB4MDBDNCwgJnZhbHVlLCAmdmFsdWVs ZW4sIE5VTEwpOworICAgaWYgKCFyZWxwdHIgfHwgdmFsdWVsZW4gPCA3KQorICAgICB7CisgICAg ICAgbG9nX2Vycm9yIChfKCJlcnJvciByZXRyaWV2aW5nIENIViBzdGF0dXMgZnJvbSBjYXJkXG4i KSk7CisgICAgICAgeGZyZWUgKHJlbHB0cik7CisgICAgICAgcmV0dXJuIC0xOworICAgICB9Cisg ICByZW1haW5pbmcgPSB2YWx1ZVthZG1pbnB3PyA2IDogNF07CisgICB4ZnJlZSAocmVscHRyKTsK KyAgIHJldHVybiByZW1haW5pbmc7CisgfQorIAorIAorIC8qIFJldHJpZXZlIHRoZSBmaW5nZXJw cmludCBmcm9tIHRoZSBjYXJkIGluc2VydGVkIGluIFNMT1QgYW5kIHdyaXRlCisgICAgdGhlIGFj Y29yZGluZyBoZXggcmVwcmVzZW50YXRpb24gdG8gRlBSLiAgQ2FsbGVyIG11c3QgaGF2ZSBwcm92 aWRlCisgICAgYSBidWZmZXIgYXQgRlBSIG9mIGxlYXN0IDQxIGJ5dGVzLiAgUmV0dXJucyAwIG9u IHN1Y2Nlc3Mgb3IgYW4KKyAgICBlcnJvciBjb2RlLiAqLworIHN0YXRpYyBncGdfZXJyb3JfdAor IHJldHJpZXZlX2Zwcl9mcm9tX2NhcmQgKGFwcF90IGFwcCwgaW50IGtleW5vLCBjaGFyICpmcHIp CisgeworICAgZ3BnX2Vycm9yX3QgZXJyID0gMDsKKyAgIHZvaWQgKnJlbHB0cjsKKyAgIHVuc2ln bmVkIGNoYXIgKnZhbHVlOworICAgc2l6ZV90IHZhbHVlbGVuOworIAorICAgbG9nX2Fzc2VydCAo a2V5bm8gPj0wICYmIGtleW5vIDw9IDIpOworIAorICAgcmVscHRyID0gZ2V0X29uZV9kbyAoYXBw LCAweDAwQzUsICZ2YWx1ZSwgJnZhbHVlbGVuLCBOVUxMKTsKKyAgIGlmIChyZWxwdHIgJiYgdmFs dWVsZW4gPj0gNjApCisgICAgIGJpbjJoZXggKHZhbHVlK2tleW5vKjIwLCAyMCwgZnByKTsKKyAg IGVsc2UKKyAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9GT1VORCk7CisgICB4ZnJl ZSAocmVscHRyKTsKKyAgIHJldHVybiBlcnI7CisgfQorIAorIAorIC8qIFJldHJpZXZlIHRoZSBj cmVhdGlvbiB0aW1lIG9mIHRoZSBmaW5nZXJwcmludCBmb3Iga2V5IEtFWU5PIGZyb20KKyAgKiB0 aGUgY2FyZCBpbnNlcnRlZCBpbiB0aGUgc2xvdCBvZiBBUFAgYW5kIHN0b3JlIGl0IGF0IFJfRlBS VElNRS4KKyAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiAgKi8KKyBz dGF0aWMgZ3BnX2Vycm9yX3QKKyByZXRyaWV2ZV9mcHJ0aW1lX2Zyb21fY2FyZCAoYXBwX3QgYXBw LCBpbnQga2V5bm8sIHUzMiAqcl9mcHJ0aW1lKQorIHsKKyAgIGdwZ19lcnJvcl90IGVyciA9IDA7 CisgICB2b2lkICpyZWxwdHI7CisgICB1bnNpZ25lZCBjaGFyICp2YWx1ZTsKKyAgIHNpemVfdCB2 YWx1ZWxlbjsKKyAgIHUzMiBmcHJ0aW1lOworIAorICAgbG9nX2Fzc2VydCAoa2V5bm8gPj0wICYm IGtleW5vIDw9IDIpOworIAorICAgcmVscHRyID0gZ2V0X29uZV9kbyAoYXBwLCAweDAwQ0QsICZ2 YWx1ZSwgJnZhbHVlbGVuLCBOVUxMKTsKKyAgIGlmIChyZWxwdHIgJiYgdmFsdWVsZW4gPj0gNCoo a2V5bm8rMSkpCisgICAgIHsKKyAgICAgICBmcHJ0aW1lID0gYnVmMzJfdG9fdTMyICh2YWx1ZSAr IDQqa2V5bm8pOworICAgICAgIGlmICghZnBydGltZSkKKyAgICAgICAgIGVyciA9IGdwZ19lcnJv ciAoR1BHX0VSUl9OT1RfRk9VTkQpOworICAgICAgIGVsc2UKKyAgICAgICAgICpyX2ZwcnRpbWUg PSBmcHJ0aW1lOworICAgICB9CisgICBlbHNlCisgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VS Ul9OT1RfRk9VTkQpOworICAgeGZyZWUgKHJlbHB0cik7CisgICByZXR1cm4gZXJyOworIH0KKyAK KyAKKyAvKiBSZXRyaWV2ZSB0aGUgcHVibGljIGtleSBtYXRlcmlhbCBmb3IgdGhlIFJTQSBrZXks IHdob3NlIGZpbmdlcnByaW50CisgICAgaXMgRlBSLCBmcm9tIGdwZyBvdXRwdXQsIHdoaWNoIGNh biBiZSByZWFkIHRocm91Z2ggdGhlIHN0cmVhbSBGUC4KKyAgICBUaGUgUlNBIG1vZHVsdXMgd2ls bCBiZSBzdG9yZWQgYXQgdGhlIGFkZHJlc3Mgb2YgTSBhbmQgTUxFTiwgdGhlCisgICAgcHVibGlj IGV4cG9uZW50IGF0IEUgYW5kIEVMRU4uICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgYW4gZXJy b3IKKyAgICBjb2RlIG9uIGZhaWx1cmUuICBDYWxsZXIgbXVzdCByZWxlYXNlIHRoZSBhbGxvY2F0 ZWQgYnVmZmVycyBhdCBNCisgICAgYW5kIEUgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vz cy4gICovCisgc3RhdGljIGdwZ19lcnJvcl90CisgcmV0cmlldmVfa2V5X21hdGVyaWFsIChGSUxF ICpmcCwgY29uc3QgY2hhciAqaGV4a2V5aWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICoqbSwgc2l6ZV90ICptbGVuLAorICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmUsIHNpemVfdCAqZWxlbikKKyB7CisgICBnY3J5X2Vy cm9yX3QgZXJyID0gMDsKKyAgIGNoYXIgKmxpbmUgPSBOVUxMOyAgICAvKiByZWFkX2xpbmUoKSBi dWZmZXIuICovCisgICBzaXplX3QgbGluZV9zaXplID0gMDsgLyogSGVscGVyIGZvciBmb3IgcmVh ZF9saW5lLiAqLworICAgaW50IGZvdW5kX2tleSA9IDA7ICAgIC8qIEhlbHBlciB0byBmaW5kIGEg bWF0Y2hpbmcga2V5LiAqLworICAgdW5zaWduZWQgY2hhciAqbV9uZXcgPSBOVUxMOworICAgdW5z aWduZWQgY2hhciAqZV9uZXcgPSBOVUxMOworICAgc2l6ZV90IG1fbmV3X24gPSAwOworICAgc2l6 ZV90IGVfbmV3X24gPSAwOworIAorICAgLyogTG9vcCBvdmVyIGFsbCByZWNvcmRzIHVudGlsIHdl IGhhdmUgZm91bmQgdGhlIHN1YmtleQorICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZmluZ2Vy cHJpbnQuIElubSBnZW5lcmFsIHRoZSBmaXJzdCByZWNvcmQKKyAgICAgIHNob3VsZCBiZSB0aGUg cHViIHJlY29yZCwgYnV0IHdlIGRvbid0IHJlbHkgb24gdGhhdC4gIEdpdmVuIHRoYXQKKyAgICAg IHdlIG9ubHkgbmVlZCB0byBsb29rIGF0IG9uZSBrZXksIGl0IGlzIHN1ZmZpY2llbnQgdG8gY29t cGFyZSB0aGUKKyAgICAgIGtleWlkIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0ICJm cHIiIHJlY29yZHMuICovCisgICBmb3IgKDs7KQorICAgICB7CisgICAgICAgY2hhciAqcDsKKyAg ICAgICBjaGFyICpmaWVsZHNbNl0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwgfTsKKyAgICAgICBpbnQgbmZpZWxkczsKKyAgICAgICBzaXplX3QgbWF4X2xlbmd0aDsKKyAg ICAgICBnY3J5X21waV90IG1waTsKKyAgICAgICBpbnQgaTsKKyAKKyAgICAgICBtYXhfbGVuZ3Ro ID0gNDA5NjsKKyAgICAgICBpID0gcmVhZF9saW5lIChmcCwgJmxpbmUsICZsaW5lX3NpemUsICZt YXhfbGVuZ3RoKTsKKyAgICAgICBpZiAoIWkpCisgICAgICAgICBicmVhazsgLyogRU9GLiAqLwor ICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9y X2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7IC8qIEVycm9yLiAqLwor ICAgICAgICAgfQorICAgICAgIGlmICghbWF4X2xlbmd0aCkKKyAgICAgICAgIHsKKyAgICAgICAg ICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX1RSVU5DQVRFRCk7CisgICAgICAgICAgIGdvdG8g bGVhdmU7ICAvKiBMaW5lIHRydW5jYXRlZCAtIHdlIGJldHRlciBzdG9wIHByb2Nlc3NpbmcuICAq LworICAgICAgICAgfQorIAorICAgICAgIC8qIFBhcnNlIHRoZSBsaW5lIGludG8gZmllbGRzLiAq LworICAgICAgIGZvciAobmZpZWxkcz0wLCBwPWxpbmU7IHAgJiYgbmZpZWxkcyA8IERJTSAoZmll bGRzKTsgbmZpZWxkcysrKQorICAgICAgICAgeworICAgICAgICAgICBmaWVsZHNbbmZpZWxkc10g PSBwOworICAgICAgICAgICBwID0gc3RyY2hyIChwLCAnOicpOworICAgICAgICAgICBpZiAocCkK KyAgICAgICAgICAgICAqKHArKykgPSAwOworICAgICAgICAgfQorICAgICAgIGlmICghbmZpZWxk cykKKyAgICAgICAgIGNvbnRpbnVlOyAvKiBObyBmaWVsZHMgYXQgYWxsIC0gc2tpcCBsaW5lLiAg Ki8KKyAKKyAgICAgICBpZiAoIWZvdW5kX2tleSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgaWYg KCAoIXN0cmNtcCAoZmllbGRzWzBdLCAic3ViIikgfHwgIXN0cmNtcCAoZmllbGRzWzBdLCAicHVi IikgKQorICAgICAgICAgICAgICAgICYmIG5maWVsZHMgPiA0ICYmICFzdHJjbXAgKGZpZWxkc1s0 XSwgaGV4a2V5aWQpKQorICAgICAgICAgICAgIGZvdW5kX2tleSA9IDE7CisgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgfQorIAorICAgICAgIGlmICggIXN0cmNtcCAoZmllbGRzWzBdLCAi c3ViIikgfHwgIXN0cmNtcCAoZmllbGRzWzBdLCAicHViIikgKQorICAgICAgICAgYnJlYWs7IC8q IE5leHQga2V5IC0gc3RvcC4gICovCisgCisgICAgICAgaWYgKCBzdHJjbXAgKGZpZWxkc1swXSwg InBrZCIpICkKKyAgICAgICAgIGNvbnRpbnVlOyAvKiBOb3QgYSBrZXkgZGF0YSByZWNvcmQuICAq LworICAgICAgIGlmICggbmZpZWxkcyA8IDQgfHwgKGkgPSBhdG9pIChmaWVsZHNbMV0pKSA8IDAg fHwgaSA+IDEKKyAgICAgICAgICAgIHx8ICghaSAmJiBtX25ldykgfHwgKGkgJiYgZV9uZXcpKQor ICAgICAgICAgeworICAgICAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfR0VORVJBTCk7 CisgICAgICAgICAgIGdvdG8gbGVhdmU7IC8qIEVycm9yOiBJbnZhbGlkIGtleSBkYXRhIHJlY29y ZCBvciBub3QgYW4gUlNBIGtleS4gICovCisgICAgICAgICB9CisgCisgICAgICAgZXJyID0gZ2Ny eV9tcGlfc2NhbiAoJm1waSwgR0NSWU1QSV9GTVRfSEVYLCBmaWVsZHNbM10sIDAsIE5VTEwpOwor ICAgICAgIGlmIChlcnIpCisgICAgICAgICBtcGkgPSBOVUxMOworICAgICAgIGVsc2UgaWYgKCFp KQorICAgICAgICAgZXJyID0gZ2NyeV9tcGlfYXByaW50IChHQ1JZTVBJX0ZNVF9TVEQsICZtX25l dywgJm1fbmV3X24sIG1waSk7CisgICAgICAgZWxzZQorICAgICAgICAgZXJyID0gZ2NyeV9tcGlf YXByaW50IChHQ1JZTVBJX0ZNVF9TVEQsICZlX25ldywgJmVfbmV3X24sIG1waSk7CisgICAgICAg Z2NyeV9tcGlfcmVsZWFzZSAobXBpKTsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZ290byBs ZWF2ZTsKKyAgICAgfQorIAorICAgaWYgKG1fbmV3ICYmIGVfbmV3KQorICAgICB7CisgICAgICAg Km0gPSBtX25ldzsKKyAgICAgICAqbWxlbiA9IG1fbmV3X247CisgICAgICAgbV9uZXcgPSBOVUxM OworICAgICAgICplID0gZV9uZXc7CisgICAgICAgKmVsZW4gPSBlX25ld19uOworICAgICAgIGVf bmV3ID0gTlVMTDsKKyAgICAgfQorICAgZWxzZQorICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19F UlJfR0VORVJBTCk7CisgCisgIGxlYXZlOgorICAgeGZyZWUgKG1fbmV3KTsKKyAgIHhmcmVlIChl X25ldyk7CisgICB4ZnJlZSAobGluZSk7CisgICByZXR1cm4gZXJyOworIH0KKyAKKyAKKyBzdGF0 aWMgZ3BnX2Vycm9yX3QKKyByc2FfcmVhZF9wdWJrZXkgKGFwcF90IGFwcCwgY3RybF90IGN0cmws IHUzMiBjcmVhdGVkX2F0LCAgaW50IGtleW5vLAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFsZW4sIGdjcnlfc2V4cF90ICpyX3NleHApCisg eworICAgZ3BnX2Vycm9yX3QgZXJyOworICAgY29uc3QgdW5zaWduZWQgY2hhciAqbSwgKmU7Cisg ICBzaXplX3QgbWxlbiwgZWxlbjsKKyAgIHVuc2lnbmVkIGNoYXIgKm1idWYgPSBOVUxMLCAqZWJ1 ZiA9IE5VTEw7CisgCisgICBtID0gZmluZF90bHYgKGRhdGEsIGRhdGFsZW4sIDB4MDA4MSwgJm1s ZW4pOworICAgaWYgKCFtKQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJyZXNwb25zZSBk b2VzIG5vdCBjb250YWluIHRoZSBSU0EgbW9kdWx1c1xuIikpOworICAgICAgIHJldHVybiBncGdf ZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICAgIH0KKyAKKyAgIGUgPSBmaW5kX3RsdiAoZGF0YSwg ZGF0YWxlbiwgMHgwMDgyLCAmZWxlbik7CisgICBpZiAoIWUpCisgICAgIHsKKyAgICAgICBsb2df ZXJyb3IgKF8oInJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFJTQSBwdWJsaWMgZXhwb25l bnRcbiIpKTsKKyAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0NBUkQpOworICAgICB9 CisgCisgICBpZiAoY3RybCkKKyAgICAgeworICAgICAgIHNlbmRfa2V5X2RhdGEgKGN0cmwsICJu IiwgbSwgbWxlbik7CisgICAgICAgc2VuZF9rZXlfZGF0YSAoY3RybCwgImUiLCBlLCBlbGVuKTsK KyAgICAgfQorIAorICAgZm9yICg7IG1sZW4gJiYgISptOyBtbGVuLS0sIG0rKykgLyogc3RyaXAg bGVhZGluZyB6ZXJvZXMgKi8KKyAgICAgOworICAgZm9yICg7IGVsZW4gJiYgISplOyBlbGVuLS0s IGUrKykgLyogc3RyaXAgbGVhZGluZyB6ZXJvZXMgKi8KKyAgICAgOworIAorICAgaWYgKGN0cmwp CisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGZwcmJ1ZlsyMF07CisgCisgICAgICAgZXJy ID0gc3RvcmVfZnByIChhcHAsIGtleW5vLCBjcmVhdGVkX2F0LCBmcHJidWYsIFBVQktFWV9BTEdP X1JTQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG0sIG1sZW4sIGUsIGVsZW4pOworICAgICAg IGlmIChlcnIpCisgICAgICAgICByZXR1cm4gZXJyOworIAorICAgICAgIHNlbmRfZnByX2lmX25v dF9udWxsIChjdHJsLCAiS0VZLUZQUiIsIC0xLCBmcHJidWYpOworICAgICB9CisgCisgICBtYnVm ID0geHRyeW1hbGxvYyAobWxlbiArIDEpOworICAgaWYgKCFtYnVmKQorICAgICB7CisgICAgICAg ZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgZ290byBsZWF2ZTsKKyAg ICAgfQorICAgLyogUHJlcGVuZCBudW1iZXJzIHdpdGggYSAwIGlmIG5lZWRlZC4gICovCisgICBp ZiAobWxlbiAmJiAoKm0gJiAweDgwKSkKKyAgICAgeworICAgICAgICptYnVmID0gMDsKKyAgICAg ICBtZW1jcHkgKG1idWYrMSwgbSwgbWxlbik7CisgICAgICAgbWxlbisrOworICAgICB9CisgICBl bHNlCisgICAgIG1lbWNweSAobWJ1ZiwgbSwgbWxlbik7CisgCisgICBlYnVmID0geHRyeW1hbGxv YyAoZWxlbiArIDEpOworICAgaWYgKCFlYnVmKQorICAgICB7CisgICAgICAgZXJyID0gZ3BnX2Vy cm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgZ290byBsZWF2ZTsKKyAgICAgfQorICAgLyog UHJlcGVuZCBudW1iZXJzIHdpdGggYSAwIGlmIG5lZWRlZC4gICovCisgICBpZiAoZWxlbiAmJiAo KmUgJiAweDgwKSkKKyAgICAgeworICAgICAgICplYnVmID0gMDsKKyAgICAgICBtZW1jcHkgKGVi dWYrMSwgZSwgZWxlbik7CisgICAgICAgZWxlbisrOworICAgICB9CisgICBlbHNlCisgICAgIG1l bWNweSAoZWJ1ZiwgZSwgZWxlbik7CisgCisgICBlcnIgPSBnY3J5X3NleHBfYnVpbGQgKHJfc2V4 cCwgTlVMTCwgIihwdWJsaWMta2V5KHJzYShuJWIpKGUlYikpKSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIChpbnQpbWxlbiwgbWJ1ZiwgKGludCllbGVuLCBlYnVmKTsKKyAgbGVhdmU6Cisg ICB4ZnJlZSAobWJ1Zik7CisgICB4ZnJlZSAoZWJ1Zik7CisgICByZXR1cm4gZXJyOworIH0KKyAK KyAKKyAvKiBEZXRlcm1pbmUgS0RGIGhhc2ggYWxnb3JpdGhtIGFuZCBLRUsgZW5jcnlwdGlvbiBh bGdvcml0aG0gYnkgQ1VSVkUuICAqLworIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKgorIGVj ZGhfcGFyYW1zIChjb25zdCBjaGFyICpjdXJ2ZSkKKyB7CisgICB1bnNpZ25lZCBpbnQgbmJpdHM7 CisgCisgICBvcGVucGdwX2N1cnZlX3RvX29pZCAoY3VydmUsICZuYml0cywgTlVMTCk7CisgCisg ICAvKiBTZWUgUkZDLTY2MzcgZm9yIHRob3NlIGNvbnN0YW50cy4KKyAgICAgICAgICAweDAzOiBO dW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgICAweDAxOiBWZXJzaW9uIGZvciB0aGlzIHBhcmFtZXRl ciBmb3JtYXQKKyAgICAgICAgICBLRUsgZGlnZXN0IGFsZ29yaXRobQorICAgICAgICAgIEtFSyBj aXBoZXIgYWxnb3JpdGhtCisgICAqLworICAgaWYgKG5iaXRzIDw9IDI1NikKKyAgICAgcmV0dXJu IChjb25zdCB1bnNpZ25lZCBjaGFyKikiXHgwM1x4MDFceDA4XHgwNyI7CisgICBlbHNlIGlmIChu Yml0cyA8PSAzODQpCisgICAgIHJldHVybiAoY29uc3QgdW5zaWduZWQgY2hhciopIlx4MDNceDAx XHgwOVx4MDkiOworICAgZWxzZQorICAgICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSJc eDAzXHgwMVx4MGFceDA5IjsKKyB9CisgCisgc3RhdGljIGdwZ19lcnJvcl90CisgZWNjX3JlYWRf cHVia2V5IChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLCB1MzIgY3JlYXRlZF9hdCwgaW50IGtleW5v LAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRh dGFsZW4sIGdjcnlfc2V4cF90ICpyX3NleHApCisgeworICAgZ3BnX2Vycm9yX3QgZXJyOworICAg dW5zaWduZWQgY2hhciAqcWJ1ZiA9IE5VTEw7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICplY2Nf cTsKKyAgIHNpemVfdCBlY2NfcV9sZW47CisgICBnY3J5X21waV90IG9pZCA9IE5VTEw7CisgICBp bnQgbjsKKyAgIGNvbnN0IGNoYXIgKmN1cnZlOworICAgY29uc3QgY2hhciAqb2lkc3RyOworICAg Y29uc3QgdW5zaWduZWQgY2hhciAqb2lkYnVmOworICAgc2l6ZV90IG9pZF9sZW47CisgICBpbnQg YWxnbzsKKyAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKKyAKKyAgIGVjY19xID0gZmluZF90bHYgKGRh dGEsIGRhdGFsZW4sIDB4MDA4NiwgJmVjY19xX2xlbik7CisgICBpZiAoIWVjY19xKQorICAgICB7 CisgICAgICAgbG9nX2Vycm9yIChfKCJyZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBFQyBw dWJsaWMga2V5XG4iKSk7CisgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9DQVJEKTsK KyAgICAgfQorIAorICAgY3VydmUgPSBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10uZWNj LmN1cnZlOworICAgb2lkc3RyID0gb3BlbnBncF9jdXJ2ZV90b19vaWQgKGN1cnZlLCBOVUxMLCBO VUxMKTsKKyAgIGVyciA9IG9wZW5wZ3Bfb2lkX2Zyb21fc3RyIChvaWRzdHIsICZvaWQpOworICAg aWYgKGVycikKKyAgICAgcmV0dXJuIGVycjsKKyAgIG9pZGJ1ZiA9IGdjcnlfbXBpX2dldF9vcGFx dWUgKG9pZCwgJm4pOworICAgaWYgKCFvaWRidWYpCisgICAgIHsKKyAgICAgICBlcnIgPSBncGdf ZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICBnb3RvIGxlYXZlOworICAgICB9CisgICBv aWRfbGVuID0gKG4rNykvODsKKyAKKyAgIHFidWYgPSB4dHJ5bWFsbG9jIChlY2NfcV9sZW4gKyAx KTsKKyAgIGlmICghcWJ1ZikKKyAgICAgeworICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5 c2Vycm9yICgpOworICAgICAgIGdvdG8gbGVhdmU7CisgICAgIH0KKyAKKyAgIGlmICgoYXBwLT5h cHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5mbGFncyAmIEVDQ19GTEFHX0RKQl9UV0VBSykp CisgICAgIHsgICAgICAgICAgICAgICAvKiBQcmVwZW5kIDB4NDAgcHJlZml4LiAgKi8KKyAgICAg ICAqcWJ1ZiA9IDB4NDA7CisgICAgICAgbWVtY3B5IChxYnVmKzEsIGVjY19xLCBlY2NfcV9sZW4p OworICAgICAgIGVjY19xX2xlbisrOworICAgICB9CisgICBlbHNlCisgICAgIG1lbWNweSAocWJ1 ZiwgZWNjX3EsIGVjY19xX2xlbik7CisgCisgICBpZiAoY3RybCkKKyAgICAgeworICAgICAgIHNl bmRfa2V5X2RhdGEgKGN0cmwsICJxIiwgcWJ1ZiwgZWNjX3FfbGVuKTsKKyAgICAgICBzZW5kX2tl eV9kYXRhIChjdHJsLCAiY3VydmUiLCBvaWRidWYsIG9pZF9sZW4pOworICAgICB9CisgCisgICBh bGdvID0gYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5hbGdvOworICAgaWYgKGtl eW5vID09IDEpCisgICAgIHsKKyAgICAgICBpZiAoY3RybCkKKyAgICAgICAgIHNlbmRfa2V5X2Rh dGEgKGN0cmwsICJrZGYva2VrIiwgZWNkaF9wYXJhbXMgKGN1cnZlKSwgKHNpemVfdCk0KTsKKyAg ICAgfQorIAorICAgaWYgKGN0cmwpCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGZwcmJ1 ZlsyMF07CisgCisgICAgICAgZXJyID0gc3RvcmVfZnByIChhcHAsIGtleW5vLCBjcmVhdGVkX2F0 LCBmcHJidWYsIGFsZ28sIG9pZGJ1Ziwgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg IHFidWYsIGVjY19xX2xlbiwgZWNkaF9wYXJhbXMgKGN1cnZlKSwgKHNpemVfdCk0KTsKKyAgICAg ICBpZiAoZXJyKQorICAgICAgICAgZ290byBsZWF2ZTsKKyAKKyAgICAgICBzZW5kX2Zwcl9pZl9u b3RfbnVsbCAoY3RybCwgIktFWS1GUFIiLCAtMSwgZnByYnVmKTsKKyAgICAgfQorIAorICAgaWYg KCEoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5mbGFncyAmIEVDQ19GTEFHX0RK Ql9UV0VBSykpCisgICAgIGZvcm1hdCA9ICIocHVibGljLWtleShlY2MoY3VydmUlcykocSViKSkp IjsKKyAgIGVsc2UgaWYgKGtleW5vID09IDEpCisgICAgIGZvcm1hdCA9ICIocHVibGljLWtleShl Y2MoY3VydmUlcykoZmxhZ3MgZGpiLXR3ZWFrKShxJWIpKSkiOworICAgZWxzZQorICAgICBmb3Jt YXQgPSAiKHB1YmxpYy1rZXkoZWNjKGN1cnZlJXMpKGZsYWdzIGVkZHNhKShxJWIpKSkiOworIAor ICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkIChyX3NleHAsIE5VTEwsIGZvcm1hdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5jdXJ2 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCllY2NfcV9sZW4sIHFidWYpOworICBs ZWF2ZToKKyAgIGdjcnlfbXBpX3JlbGVhc2UgKG9pZCk7CisgICB4ZnJlZSAocWJ1Zik7CisgICBy ZXR1cm4gZXJyOworIH0KKyAKKyAKKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBzdG9yZV9rZXlncmlw IChhcHBfdCBhcHAsIGludCBrZXlubykKKyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgICB1bnNp Z25lZCBjaGFyIGdyaXBbMjBdOworIAorICAgZXJyID0ga2V5Z3JpcF9mcm9tX2Nhbm9uX3NleHAg KGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5bGVuLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdyaXApOworICAgaWYgKGVycikKKyAgICAgcmV0dXJuIGVy cjsKKyAKKyAgIGJpbjJoZXggKGdyaXAsIDIwLCBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtl eWdyaXBfc3RyKTsKKyAgIHJldHVybiAwOworIH0KKyAKKyAKKyAvKiBQYXJzZSB0YWctbGVuZ3Ro LXZhbHVlIGRhdGEgZm9yIHB1YmxpYyBrZXkgaW4gQlVGRkVSIG9mIEJVRkxFTgorICAgIGxlbmd0 aC4gIEtleSBvZiBLRVlOTyBpbiBBUFAgaXMgdXBkYXRlZCB3aXRoIGFuIFMtZXhwcmVzc2lvbiBv ZgorICAgIHB1YmxpYyBrZXkuICBXaGVuIENUUkwgaXMgbm90IE5VTEwsIGZpbmdlcnByaW50IGlz IGNvbXB1dGVkIHdpdGgKKyAgICBDUkVBVEVEX0FULCBhbmQgZmluZ2VycHJpbnQgaXMgd3JpdHRl biB0byB0aGUgY2FyZCwgYW5kIGtleSBkYXRhCisgICAgYW5kIGZpbmdlcnByaW50IGFyZSBzZW5k IGJhY2sgdG8gdGhlIGNsaWVudCBzaWRlLgorICAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIHJl YWRfcHVibGljX2tleSAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgdTMyIGNyZWF0ZWRfYXQsIGlu dCBrZXlubywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwg c2l6ZV90IGJ1ZmxlbikKKyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhOworICAgc2l6ZV90IGRhdGFsZW47CisgICBnY3J5X3NleHBfdCBzX3BrZXkg PSBOVUxMOworIAorICAgZGF0YSA9IGZpbmRfdGx2IChidWZmZXIsIGJ1ZmxlbiwgMHg3RjQ5LCAm ZGF0YWxlbik7CisgICBpZiAoIWRhdGEpCisgICAgIHsKKyAgICAgICBsb2dfZXJyb3IgKF8oInJl c3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIHB1YmxpYyBrZXkgZGF0YVxuIikpOworICAgICAg IHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICAgIH0KKyAKKyAgIGlmIChhcHAt PmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5X3R5cGUgPT0gS0VZX1RZUEVfUlNBKQorICAg ICBlcnIgPSByc2FfcmVhZF9wdWJrZXkgKGFwcCwgY3RybCwgY3JlYXRlZF9hdCwga2V5bm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgZGF0YWxlbiwgJnNfcGtleSk7CisgICBl bHNlIGlmIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5X3R5cGUgPT0gS0VZX1RZ UEVfRUNDKQorICAgICBlcnIgPSBlY2NfcmVhZF9wdWJrZXkgKGFwcCwgY3RybCwgY3JlYXRlZF9h dCwga2V5bm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgZGF0YWxlbiwgJnNf cGtleSk7CisgICBlbHNlCisgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT1RfSU1QTEVN RU5URUQpOworIAorICAgaWYgKCFlcnIpCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBjaGFyICpr ZXlidWY7CisgICAgICAgc2l6ZV90IGxlbjsKKyAKKyAgICAgICBsZW4gPSBnY3J5X3NleHBfc3By aW50IChzX3BrZXksIEdDUllTRVhQX0ZNVF9DQU5PTiwgTlVMTCwgMCk7CisgICAgICAga2V5YnVm ID0geHRyeW1hbGxvYyAobGVuKTsKKyAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICB7CisgICAg ICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgICBnY3J5 X3NleHBfcmVsZWFzZSAoc19wa2V5KTsKKyAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAg IH0KKyAKKyAgICAgICBnY3J5X3NleHBfc3ByaW50IChzX3BrZXksIEdDUllTRVhQX0ZNVF9DQU5P Tiwga2V5YnVmLCBsZW4pOworICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzX3BrZXkpOworIAor ICAgICAgIGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5ID0ga2V5YnVmOworICAgICAgIC8q IERlY3JlbWVudCBmb3IgdHJhaWxpbmcgJ1wwJyAqLworICAgICAgIGFwcC0+YXBwX2xvY2FsLT5w a1trZXlub10ua2V5bGVuID0gbGVuIC0gMTsKKyAKKyAgICAgICBlcnIgPSBzdG9yZV9rZXlncmlw IChhcHAsIGtleW5vKTsKKyAgICAgfQorIAorICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisgLyog R2V0IHRoZSBwdWJsaWMga2V5IGZvciBLRVlOTyBhbmQgc3RvcmUgaXQgYXMgYW4gUy1leHByZXNz aW9uIHdpdGgKKyAgICB0aGUgQVBQIGhhbmRsZS4gIE9uIGVycm9yIHRoYXQgZmllbGQgZ2V0cyBj bGVhcmVkLiAgSWYgd2UgYWxyZWFkeQorICAgIGtub3cgYWJvdXQgdGhlIHB1YmxpYyBrZXkgd2Ug d2lsbCBqdXN0IHJldHVybi4gIE5vdGUgdGhhdCB0aGlzIGRvZXMKKyAgICBub3QgbWVhbiBhIGtl eSBpcyBhdmFpbGFibGU7IHRoaXMgaXMgc29sZWx5IGluZGljYXRlZCBieSB0aGUKKyAgICBwcmVz ZW5jZSBvZiB0aGUgYXBwLT5hcHBfbG9jYWwtPnBrW0tFWU5PXS5rZXkgZmllbGQuCisgCisgICAg Tm90ZSB0aGF0IEdudVBHIDEueCBkb2VzIG5vdCBuZWVkIHRoaXMgYW5kIGl0IHdvdWxkIGJlIHRv byB0aW1lCisgICAgY29uc3VtaW5nIHRvIHNlbmQgaXQganVzdCBmb3IgdGhlIGZ1biBvZiBpdC4g SG93ZXZlciwgZ2l2ZW4gdGhhdCB3ZQorICAgIHVzZSB0aGUgc2FtZSBjb2RlIGluIGdwZyAxLjQs IHdlIGNhbid0IHVzZSB0aGUgZ2NyeSBTLWV4cHJlc3Npb24KKyAgICBoZXJlIGJ1dCBuZWVkIHRv IG9wZW4gZW5jb2RlIGl0LiAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGdldF9wdWJsaWNfa2V5 IChhcHBfdCBhcHAsIGludCBrZXlubykKKyB7CisgICBncGdfZXJyb3JfdCBlcnIgPSAwOworICAg dW5zaWduZWQgY2hhciAqYnVmZmVyOworICAgY29uc3QgdW5zaWduZWQgY2hhciAqbSwgKmU7Cisg ICBzaXplX3QgYnVmbGVuOworICAgc2l6ZV90IG1sZW4gPSAwOworICAgc2l6ZV90IGVsZW4gPSAw OworICAgY2hhciAqa2V5YnVmID0gTlVMTDsKKyAgIGdjcnlfc2V4cF90IHNfcGtleTsKKyAgIHNp emVfdCBsZW47CisgCisgICBpZiAoa2V5bm8gPCAwIHx8IGtleW5vID4gMikKKyAgICAgcmV0dXJu IGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworIAorICAgLyogQWxyZWFkeSBjYWNoZWQ/ICov CisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPnBrW2tleW5vXS5yZWFkX2RvbmUpCisgICAgIHJldHVy biAwOworIAorICAgeGZyZWUgKGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5KTsKKyAgIGFw cC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5ID0gTlVMTDsKKyAgIGFwcC0+YXBwX2xvY2FsLT5w a1trZXlub10ua2V5bGVuID0gMDsKKyAKKyAgIG0gPSBlID0gTlVMTDsgLyogKGF2b2lkIGNjIHdh cm5pbmcpICovCisgCisgICBpZiAoYXBwLT5hcHB2ZXJzaW9uID4gMHgwMTAwKQorICAgICB7Cisg ICAgICAgaW50IGV4bW9kZSwgbGVfdmFsdWU7CisgCisgICAgICAgLyogV2UgbWF5IHNpbXBseSBy ZWFkIHRoZSBwdWJsaWMga2V5IG91dCBvZiB0aGVzZSBjYXJkcy4gICovCisgICAgICAgaWYgKGFw cC0+YXBwX2xvY2FsLT5jYXJkY2FwLmV4dF9sY19sZQorICAgICAgICAgICAmJiBhcHAtPmFwcF9s b2NhbC0+a2V5YXR0cltrZXlub10ua2V5X3R5cGUgPT0gS0VZX1RZUEVfUlNBCisgICAgICAgICAg ICYmIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2Eubl9iaXRzID4gUlNBX1NNQUxM X1NJWkVfS0VZKQorICAgICAgICAgeworICAgICAgICAgICBleG1vZGUgPSAxOyAgICAvKiBVc2Ug ZXh0ZW5kZWQgbGVuZ3RoLiAgKi8KKyAgICAgICAgICAgbGVfdmFsdWUgPSBkZXRlcm1pbmVfcnNh X3Jlc3BvbnNlIChhcHAsIGtleW5vKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAg ICB7CisgICAgICAgICAgIGV4bW9kZSA9IDA7CisgICAgICAgICAgIGxlX3ZhbHVlID0gMjU2OyAv KiBVc2UgbGVnYWN5IHZhbHVlLiAqLworICAgICAgICAgfQorIAorICAgICAgIGVyciA9IGlzbzc4 MTZfcmVhZF9wdWJsaWNfa2V5IChhcHBfZ2V0X3Nsb3QgKGFwcCksIGV4bW9kZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleW5vID09IDA/ICJceEI2IiA6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlubyA9PSAxPyAiXHhCOCIgOiAi XHhBNCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCBsZV92YWx1 ZSwgJmJ1ZmZlciwgJmJ1Zmxlbik7CisgICAgICAgaWYgKGVycikKKyAgICAgICAgIHsKKyAgICAg ICAgICAgLyogWXViaWtleSByZXR1cm5zIHdyb25nIGNvZGUuICBGaXggaXQgdXAuICAqLworICAg ICAgICAgICBpZiAoQVBQX0NBUkQoYXBwKS0+Y2FyZHR5cGUgPT0gQ0FSRFRZUEVfWVVCSUtFWSkK KyAgICAgICAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfTk9fT0JKKTsKKyAJICAvKiBZ dWJpa2V5IE5FTyAoIUNBUkRUWVBFX1lVQklLRVkpIGFsc28gcmV0dXJucyB3cm9uZyBjb2RlLiAg Rml4IGl0IHVwLiAgKi8KKyAJICBlbHNlIGlmIChncGdfZXJyX2NvZGUgKGVycikgPT0gR1BHX0VS Ul9DQVJEKQorICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9OT19PQkopOwor ICAgICAgICAgICBsb2dfZXJyb3IgKF8oInJlYWRpbmcgcHVibGljIGtleSBmYWlsZWQ6ICVzXG4i KSwgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAg IH0KKyAKKyAgICAgICBlcnIgPSByZWFkX3B1YmxpY19rZXkgKGFwcCwgTlVMTCwgMFUsIGtleW5v LCBidWZmZXIsIGJ1Zmxlbik7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIC8qIER1 ZSB0byBhIGRlc2lnbiBwcm9ibGVtIGluIHYxLjAgY2FyZHMgd2UgY2FuJ3QgZ2V0IHRoZSBwdWJs aWMKKyAgICAgICAgICBrZXkgb3V0IG9mIHRoZXNlIGNhcmRzIHdpdGhvdXQgZG9pbmcgYSB2ZXJp Znkgb24gQ0hWMy4KKyAgICAgICAgICBDbGVhcmx5IHRoYXQgaXMgbm90IGFuIG9wdGlvbiBhbmQg dGh1cyB3ZSB0cnkgdG8gbG9jYXRlIHRoZQorICAgICAgICAgIGtleSB1c2luZyBhbiBleHRlcm5h bCBoZWxwZXIuCisgCisgICAgICAgICAgVGhlIGhlbHBlciB3ZSB1c2UgaGVyZSBpcyBncGcgaXRz ZWxmLCB3aGljaCBzaG91bGQga25vdyBhYm91dAorICAgICAgICAgIHRoZSBrZXkgaW4gYW55IGNh c2UuICAqLworIAorICAgICAgIGNoYXIgZnByWzQxXTsKKyAgICAgICBjaGFyICpoZXhrZXlpZDsK KyAgICAgICBjaGFyICpjb21tYW5kID0gTlVMTDsKKyAgICAgICBGSUxFICpmcDsKKyAgICAgICBp bnQgcmV0OworIAorICAgICAgIGJ1ZmZlciA9IE5VTEw7IC8qIFdlIGRvbid0IG5lZWQgYnVmZmVy LiAgKi8KKyAKKyAgICAgICBlcnIgPSByZXRyaWV2ZV9mcHJfZnJvbV9jYXJkIChhcHAsIGtleW5v LCBmcHIpOworICAgICAgIGlmIChlcnIpCisgICAgICAgICB7CisgICAgICAgICAgIGxvZ19lcnJv ciAoImVycm9yIHdoaWxlIHJldHJpZXZpbmcgZnByIGZyb20gY2FyZDogJXNcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChlcnIpKTsKKyAgICAgICAgICAgZ290byBsZWF2 ZTsKKyAgICAgICAgIH0KKyAgICAgICBoZXhrZXlpZCA9IGZwciArIDI0OworIAorICAgICAgIHJl dCA9IGdwZ3J0X2FzcHJpbnRmCisgICAgICAgICAoJmNvbW1hbmQsICIlcyAtLWxpc3Qta2V5cyAt LXdpdGgtY29sb25zIC0td2l0aC1rZXktZGF0YSAnJXMnIiwKKyAgICAgICAgICBnbnVwZ19tb2R1 bGVfbmFtZSAoR05VUEdfTU9EVUxFX05BTUVfR1BHKSwgZnByKTsKKyAgICAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3Ig KCk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgCisgICAgICAgZnAgPSBw b3BlbiAoY29tbWFuZCwgInIiKTsKKyAgICAgICB4ZnJlZSAoY29tbWFuZCk7CisgICAgICAgaWYg KCFmcCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJy b3IgKCk7CisgICAgICAgICAgIGxvZ19lcnJvciAoInJ1bm5pbmcgZ3BnIGZhaWxlZDogJXNcbiIs IGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9 CisgCisgICAgICAgZXJyID0gcmV0cmlldmVfa2V5X21hdGVyaWFsIChmcCwgaGV4a2V5aWQsICZt LCAmbWxlbiwgJmUsICZlbGVuKTsKKyAgICAgICBwY2xvc2UgKGZwKTsKKyAgICAgICBpZiAoZXJy KQorICAgICAgICAgeworICAgICAgICAgICBsb2dfZXJyb3IgKCJlcnJvciB3aGlsZSByZXRyaWV2 aW5nIGtleSBtYXRlcmlhbCB0aHJvdWdoIHBpcGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAg ICAgIGdwZ19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAg ICB9CisgCisgICAgICAgZXJyID0gZ2NyeV9zZXhwX2J1aWxkICgmc19wa2V5LCBOVUxMLCAiKHB1 YmxpYy1rZXkocnNhKG4lYikoZSViKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpbnQpbWxlbiwgbSwgKGludCllbGVuLCBlKTsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAg Z290byBsZWF2ZTsKKyAKKyAgICAgICBsZW4gPSBnY3J5X3NleHBfc3ByaW50IChzX3BrZXksIEdD UllTRVhQX0ZNVF9DQU5PTiwgTlVMTCwgMCk7CisgCisgICAgICAga2V5YnVmID0geHRyeW1hbGxv YyAobGVuKTsKKyAgICAgICBpZiAoIWtleWJ1ZikKKyAgICAgICAgIHsKKyAgICAgICAgICAgZXJy ID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgIGdjcnlfc2V4cF9yZWxl YXNlIChzX3BrZXkpOworICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgfQorIAorICAg ICAgIGdjcnlfc2V4cF9zcHJpbnQgKHNfcGtleSwgR0NSWVNFWFBfRk1UX0NBTk9OLCBrZXlidWYs IGxlbik7CisgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfcGtleSk7CisgCisgICAgICAgYXBw LT5hcHBfbG9jYWwtPnBrW2tleW5vXS5rZXkgPSAodW5zaWduZWQgY2hhciopa2V5YnVmOworICAg ICAgIC8qIERlY3JlbWVudCBmb3IgdHJhaWxpbmcgJ1wwJyAqLworICAgICAgIGFwcC0+YXBwX2xv Y2FsLT5wa1trZXlub10ua2V5bGVuID0gbGVuIC0gMTsKKyAgICAgICBlcnIgPSBzdG9yZV9rZXln cmlwIChhcHAsIGtleW5vKTsKKyAgICAgfQorIAorICBsZWF2ZToKKyAgIC8qIFNldCBhIGZsYWcg dG8gaW5kaWNhdGUgdGhhdCB3ZSB0cmllZCB0byByZWFkIHRoZSBrZXkuICAqLworICAgaWYgKCFl cnIpCisgICAgIGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ucmVhZF9kb25lID0gMTsKKyAKKyAg IHhmcmVlIChidWZmZXIpOworICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisgc3RhdGljIGNvbnN0 IGNoYXIgKgorIGdldF91c2FnZV9zdHJpbmcgKGludCBrZXlubykKKyB7CisgICBjb25zdCBjaGFy ICp1c2FnZTsKKyAgIHN3aXRjaCAoa2V5bm8pCisgICAgIHsKKyAgICAgY2FzZSAwOiB1c2FnZSA9 ICJzYyI7IGJyZWFrOworICAgICBjYXNlIDE6IHVzYWdlID0gImUiOyAgYnJlYWs7CisgICAgIGNh c2UgMjogdXNhZ2UgPSAic2EiOyBicmVhazsKKyAgICAgZGVmYXVsdDogdXNhZ2UgPSAiLSI7ICBi cmVhazsKKyAgICAgfQorICAgcmV0dXJuIHVzYWdlOworIH0KKyAKKyAKKyAvKiBTZW5kIHRoZSBL RVlQQUlSSU5GTyBiYWNrLiBLRVkgbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlIFsxLDNdLgorICAg IFRoaXMgaXMgdXNlZCBieSB0aGUgTEVBUk4gY29tbWFuZC4gKi8KKyBzdGF0aWMgZ3BnX2Vycm9y X3QKKyBzZW5kX2tleXBhaXJfaW5mbyAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgaW50IGtleSkK KyB7CisgICBpbnQga2V5bm8gPSBrZXkgLSAxOworICAgZ3BnX2Vycm9yX3QgZXJyID0gMDsKKyAg IGNvbnN0IGNoYXIgKnVzYWdlOworICAgdTMyIGZwcnRpbWU7CisgICBjaGFyICphbGdvc3RyID0g TlVMTDsKKyAKKyAgIGVyciA9IGdldF9wdWJsaWNfa2V5IChhcHAsIGtleW5vKTsKKyAgIGlmIChl cnIpCisgICAgIGdvdG8gbGVhdmU7CisgCisgICBsb2dfYXNzZXJ0IChrZXlubyA+PSAwICYmIGtl eW5vIDw9IDIpOworICAgaWYgKCFhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtleSkKKyAgICAg Z290byBsZWF2ZTsgLyogTm8gc3VjaCBrZXkgLSBpZ25vcmUuICovCisgCisgICB1c2FnZSA9IGdl dF91c2FnZV9zdHJpbmcgKGtleW5vKTsKKyAKKyAgIGlmIChyZXRyaWV2ZV9mcHJ0aW1lX2Zyb21f Y2FyZCAoYXBwLCBrZXlubywgJmZwcnRpbWUpKQorICAgICBmcHJ0aW1lID0gMDsKKyAKKyAgIHsK KyAgICAgZ2NyeV9zZXhwX3Qgc19wa2V5OworICAgICBpZiAoZ2NyeV9zZXhwX25ldyAoJnNfcGtl eSwgYXBwLT5hcHBfbG9jYWwtPnBrW2tleW5vXS5rZXksCisgICAgICAgICAgICAgICAgICAgICAg ICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtleWxlbiwgMCkpCisgICAgICAgYWxnb3N0ciA9 IHh0cnlzdHJkdXAgKCI/Iik7CisgICAgIGVsc2UKKyAgICAgICB7CisgICAgICAgICBhbGdvc3Ry ID0gcHVia2V5X2FsZ29fc3RyaW5nIChzX3BrZXksIE5VTEwpOworICAgICAgICAgZ2NyeV9zZXhw X3JlbGVhc2UgKHNfcGtleSk7CisgICAgICAgfQorICAgfQorICAgaWYgKCFhbGdvc3RyKQorICAg ICB7CisgICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgZ290 byBsZWF2ZTsKKyAgICAgfQorIAorICAgZXJyID0gc2VuZF9zdGF0dXNfcHJpbnRmIChjdHJsLCAi S0VZUEFJUklORk8iLCAiJXMgT1BFTlBHUC4lZCAlcyAlbHUgJXMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtleWdyaXBfc3RyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlubysxLCB1c2FnZSwgKHVuc2lnbmVkIGxvbmcp ZnBydGltZSwgYWxnb3N0cik7CisgCisgIGxlYXZlOgorICAgeGZyZWUgKGFsZ29zdHIpOworICAg cmV0dXJuIGVycjsKKyB9CisgCisgCisgLyogSGFuZGxlIHRoZSBMRUFSTiBjb21tYW5kIGZvciBP cGVuUEdQLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb19sZWFybl9zdGF0dXMgKGFwcF90 IGFwcCwgY3RybF90IGN0cmwsIHVuc2lnbmVkIGludCBmbGFncykKKyB7CisgICBncGdfZXJyb3Jf dCBlcnIgPSAwOworIAorICAgKHZvaWQpZmxhZ3M7CisgCisgICBlcnIgPSBkb19nZXRhdHRyIChh cHAsIGN0cmwsICJFWFRDQVAiKTsKKyAgIGlmICghZXJyKQorICAgICBlcnIgPSBkb19nZXRhdHRy IChhcHAsIGN0cmwsICJNQU5VRkFDVFVSRVIiKTsKKyAgIGlmICghZXJyKQorICAgICBlcnIgPSBk b19nZXRhdHRyIChhcHAsIGN0cmwsICJESVNQLU5BTUUiKTsKKyAgIGlmICghZXJyKQorICAgICBl cnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJESVNQLUxBTkciKTsKKyAgIGlmICghZXJyKQor ICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJESVNQLVNFWCIpOworICAgaWYgKCFl cnIpCisgICAgIGVyciA9IGRvX2dldGF0dHIgKGFwcCwgY3RybCwgIlBVQktFWS1VUkwiKTsKKyAg IGlmICghZXJyKQorICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJMT0dJTi1EQVRB Iik7CisgICBpZiAoIWVycikKKyAgICAgZXJyID0gZG9fZ2V0YXR0ciAoYXBwLCBjdHJsLCAiS0VZ LUZQUiIpOworICAgaWYgKCFlcnIgJiYgYXBwLT5hcHB2ZXJzaW9uID4gMHgwMTAwKQorICAgICBl cnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJLRVktVElNRSIpOworICAgaWYgKCFlcnIpCisg ICAgIGVyciA9IGRvX2dldGF0dHIgKGFwcCwgY3RybCwgIkNBLUZQUiIpOworICAgaWYgKCFlcnIp CisgICAgIGVyciA9IGRvX2dldGF0dHIgKGFwcCwgY3RybCwgIkNIVi1TVEFUVVMiKTsKKyAgIGlm ICghZXJyKQorICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJTSUctQ09VTlRFUiIp OworICAgaWYgKCFlcnIgJiYgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5rZGZfZG8pCisgICAgIHsK KyAgICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJLREYiKTsKKyAgICAgICBpZiAo Z3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfTk9fT0JKKQorICAgICAgICAgZXJyID0gMDsK KyAgICAgfQorICAgaWYgKCFlcnIgJiYgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5oYXNfYnV0dG9u KQorICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJVSUYiKTsKKyAgIGlmIChncGdf ZXJyX2NvZGUgKGVycikgPT0gR1BHX0VSUl9OT19PQkopCisgICAgIGVyciA9IDA7CisgICBpZiAo IWVyciAmJiBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLnByaXZhdGVfZG9zKQorICAgICB7CisgICAg ICAgaWYgKCFlcnIpCisgICAgICAgICBlcnIgPSBkb19nZXRhdHRyIChhcHAsIGN0cmwsICJQUklW QVRFLURPLTEiKTsKKyAgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfTk9f T0JKKQorICAgICAgICAgZXJyID0gMDsKKyAgICAgICBpZiAoIWVycikKKyAgICAgICAgIGVyciA9 IGRvX2dldGF0dHIgKGFwcCwgY3RybCwgIlBSSVZBVEUtRE8tMiIpOworICAgICAgIGlmIChncGdf ZXJyX2NvZGUgKGVycikgPT0gR1BHX0VSUl9OT19PQkopCisgICAgICAgICBlcnIgPSAwOworICAg ICAgIGlmICghZXJyICYmIGFwcC0+ZGlkX2NodjIpCisgICAgICAgICBlcnIgPSBkb19nZXRhdHRy IChhcHAsIGN0cmwsICJQUklWQVRFLURPLTMiKTsKKyAgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChl cnIpID09IEdQR19FUlJfTk9fT0JKKQorICAgICAgICAgZXJyID0gMDsKKyAgICAgICBpZiAoIWVy ciAmJiBhcHAtPmRpZF9jaHYzKQorICAgICAgICAgZXJyID0gZG9fZ2V0YXR0ciAoYXBwLCBjdHJs LCAiUFJJVkFURS1ETy00Iik7CisgICAgICAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSA9PSBHUEdf RVJSX05PX09CSikKKyAgICAgICAgIGVyciA9IDA7CisgICAgIH0KKyAgIGlmICghZXJyKQorICAg ICBlcnIgPSBzZW5kX2tleXBhaXJfaW5mbyAoYXBwLCBjdHJsLCAxKTsKKyAgIGlmIChncGdfZXJy X2NvZGUgKGVycikgPT0gR1BHX0VSUl9OT19PQkopCisgICAgIGVyciA9IDA7CisgICBpZiAoIWVy cikKKyAgICAgZXJyID0gc2VuZF9rZXlwYWlyX2luZm8gKGFwcCwgY3RybCwgMik7CisgICBpZiAo Z3BnX2Vycl9jb2RlIChlcnIpID09IEdQR19FUlJfTk9fT0JKKQorICAgICBlcnIgPSAwOworICAg aWYgKCFlcnIpCisgICAgIGVyciA9IHNlbmRfa2V5cGFpcl9pbmZvIChhcHAsIGN0cmwsIDMpOwor ICAgaWYgKGdwZ19lcnJfY29kZSAoZXJyKSA9PSBHUEdfRVJSX05PX09CSikKKyAgICAgZXJyID0g MDsKKyAgIC8qIE5vdGU6IFdlIGRvIG5vdCBzZW5kIHRoZSBDYXJkaG9sZGVyIENlcnRpZmljYXRl LCBiZWNhdXNlIHRoYXQgaXMKKyAgICAgIHJlbGF0aXZlbHkgbG9uZyBhbmQgZm9yIE9wZW5QR1Ag YXBwbGljYXRpb25zIG5vdCByZWFsbHkgbmVlZGVkLiAgKi8KKyAgIHJldHVybiBlcnI7CisgfQor IAorIAorIC8qIEhhbmRsZSB0aGUgUkVBREtFWSBjb21tYW5kIGZvciBPcGVuUEdQLiAgT24gc3Vj Y2VzcyBhIGNhbm9uaWNhbAorICAgIGVuY29kZWQgUy1leHByZXNzaW9uIHdpdGggdGhlIHB1Ymxp YyBrZXkgd2lsbCBnZXQgc3RvcmVkIGF0IFBLIGFuZAorICAgIGl0cyBsZW5ndGggKGZvciBhc3Nl cnRpb25zKSBhdCBQS0xFTjsgdGhlIGNhbGxlciBtdXN0IHJlbGVhc2UgdGhhdAorICAgIGJ1ZmZl ci4gT24gZXJyb3IgUEsgYW5kIFBLTEVOIGFyZSBub3QgY2hhbmdlZCBhbmQgYW4gZXJyb3IgY29k ZSBpcworICAgIHJldHVybmVkLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb19yZWFka2V5 IChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLCBjb25zdCBjaGFyICprZXlpZCwgdW5zaWduZWQgaW50 IGZsYWdzLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwaywgc2l6ZV90ICpwa2xlbikK KyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgICBpbnQga2V5bm87CisgICB1bnNpZ25lZCBjaGFy ICpidWY7CisgCisgICBpZiAoc3RybGVuIChrZXlpZCkgPT0gNDApCisgICAgIHsKKyAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICprZXlncmlwX3N0cjsKKyAKKyAgICAgICBmb3IgKGtleW5vID0g MDsga2V5bm8gPCAzOyBrZXlubysrKQorICAgICAgICAgeworICAgICAgICAgICBrZXlncmlwX3N0 ciA9IGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5Z3JpcF9zdHI7CisgICAgICAgICAgIGlm ICghc3RybmNtcCAoa2V5Z3JpcF9zdHIsIGtleWlkLCA0MCkpCisgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICB9CisgCisgICAgICAgaWYgKGtleW5vID49IDMpCisgICAgICAgICByZXR1cm4g Z3BnX2Vycm9yIChHUEdfRVJSX0lOVl9JRCk7CisgICAgIH0KKyAgIGVsc2UgaWYgKCFhc2NpaV9z dHJjYXNlY21wIChrZXlpZCwgIk9QRU5QR1AuMSIpKQorICAgICBrZXlubyA9IDA7CisgICBlbHNl IGlmICghYXNjaWlfc3RyY2FzZWNtcCAoa2V5aWQsICJPUEVOUEdQLjIiKSkKKyAgICAga2V5bm8g PSAxOworICAgZWxzZSBpZiAoIWFzY2lpX3N0cmNhc2VjbXAgKGtleWlkLCAiT1BFTlBHUC4zIikp CisgICAgIGtleW5vID0gMjsKKyAgIGVsc2UKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VS Ul9JTlZfSUQpOworIAorICAgZXJyID0gZ2V0X3B1YmxpY19rZXkgKGFwcCwga2V5bm8pOworICAg aWYgKGVycikKKyAgICAgcmV0dXJuIGVycjsKKyAKKyAgIGJ1ZiA9IGFwcC0+YXBwX2xvY2FsLT5w a1trZXlub10ua2V5OworICAgaWYgKCFidWYpCisgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19F UlJfTk9fUFVCS0VZKTsKKyAKKyAgIGlmICgoZmxhZ3MgJiBBUFBfUkVBREtFWV9GTEFHX0lORk8p KQorICAgICB7CisgICAgICAgZXJyID0gc2VuZF9rZXlwYWlyX2luZm8gKGFwcCwgY3RybCwga2V5 bm8rMSk7CisgICAgICAgaWYgKGVycikKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAK KyAgIGlmIChwayAmJiBwa2xlbikKKyAgICAgeworICAgICAgICpwa2xlbiA9IGFwcC0+YXBwX2xv Y2FsLT5wa1trZXlub10ua2V5bGVuOworICAgICAgICpwayA9IHh0cnltYWxsb2MgKCpwa2xlbik7 CisgICAgICAgaWYgKCEqcGspCisgICAgICAgICB7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJv cl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgICAqcGtsZW4gPSAwOworICAgICAgICAgICBy ZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgIG1lbWNweSAoKnBrLCBidWYsICpwa2xlbik7 CisgICAgIH0KKyAKKyAgIHJldHVybiAwOworIH0KKyAKKyAvKiBSZWFkIHRoZSBzdGFuZGFyZCBj ZXJ0aWZpY2F0ZSBvZiBhbiBPcGVuUEdQIHYyIGNhcmQuICBJdCBpcworICAgIHJldHVybmVkIGlu IGEgZnJlc2hseSBhbGxvY2F0ZWQgYnVmZmVyIHdpdGggdGhhdCBhZGRyZXNzIHN0b3JlZCBhdAor ICAgIENFUlQgYW5kIHRoZSBsZW5ndGggb2YgdGhlIGNlcnRpZmljYXRlIHN0b3JlZCBhdCBDRVJU TEVOLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb19yZWFkY2VydCAoYXBwX3QgYXBwLCBj b25zdCBjaGFyICpjZXJ0aWQsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipjZXJ0LCBz aXplX3QgKmNlcnRsZW4pCisgeworICAgZ3BnX2Vycm9yX3QgZXJyOworICAgaW50IG9jY3VycmVu Y2UgPSAwOworIAorICAgKmNlcnQgPSBOVUxMOworICAgKmNlcnRsZW4gPSAwOworICAgaWYgKHN0 cmxlbiAoY2VydGlkKSA9PSA0MCkKKyAgICAgeworICAgICAgIGludCBrZXlubzsKKyAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICprZXlncmlwX3N0cjsKKyAKKyAgICAgICBmb3IgKGtleW5vID0g MDsga2V5bm8gPCAzOyBrZXlubysrKQorICAgICAgICAgeworICAgICAgICAgICBrZXlncmlwX3N0 ciA9IGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5Z3JpcF9zdHI7CisgICAgICAgICAgIGlm ICghc3RybmNtcCAoa2V5Z3JpcF9zdHIsIGNlcnRpZCwgNDApKQorICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgfQorIAorICAgICAgIGlmIChrZXlubyA9PSAyKQorICAgICAgICAgOworICAg ICAgIGVsc2UgaWYgKGtleW5vID09IDEpCisgICAgICAgICBvY2N1cnJlbmNlID0gMTsKKyAgICAg ICBlbHNlIGlmIChrZXlubyA9PSAwKQorICAgICAgICAgb2NjdXJyZW5jZSA9IDI7CisgICAgICAg ZWxzZQorICAgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworICAgICB9 CisgICBlbHNlIGlmICghYXNjaWlfc3RyY2FzZWNtcCAoY2VydGlkLCAiT1BFTlBHUC4zIikpCisg ICAgIDsKKyAgIGVsc2UgaWYgKCFhc2NpaV9zdHJjYXNlY21wIChjZXJ0aWQsICJPUEVOUEdQLjIi KSkKKyAgICAgb2NjdXJyZW5jZSA9IDE7CisgICBlbHNlIGlmICghYXNjaWlfc3RyY2FzZWNtcCAo Y2VydGlkLCAiT1BFTlBHUC4xIikpCisgICAgIG9jY3VycmVuY2UgPSAyOworICAgZWxzZQorICAg ICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9JRCk7CisgICBpZiAoIWFwcC0+YXBwX2xv Y2FsLT5leHRjYXAuaXNfdjMgJiYgb2NjdXJyZW5jZSkKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAo R1BHX0VSUl9OT1RfU1VQUE9SVEVEKTsKKyAgIGlmICghYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5p c192MikKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9OT1RfRk9VTkQpOworIAorICAg aWYgKG9jY3VycmVuY2UpCisgICAgIHsKKyAgICAgICBpbnQgZXhtb2RlOworIAorICAgICAgIGVy ciA9IGlzbzc4MTZfc2VsZWN0X2RhdGEgKGFwcF9nZXRfc2xvdCAoYXBwKSwgb2NjdXJyZW5jZSwg MHg3RjIxKTsKKyAgICAgICBpZiAoIWVycikKKyAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKGFw cC0+YXBwX2xvY2FsLT5jYXJkY2FwLmV4dF9sY19sZSkKKyAgICAgICAgICAgICBleG1vZGUgPSBh cHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLm1heF9jZXJ0bGVuOworICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgZXhtb2RlID0gMDsKKyAKKyAgICAgICAgICAgZXJyID0gaXNvNzgxNl9nZXRfZGF0 YSAoYXBwX2dldF9zbG90IChhcHApLCBleG1vZGUsIDB4N0YyMSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2VydCwgY2VydGxlbik7CisgICAgICAgICAgIC8qIFdlIHJlc2V0 IHRoZSBjdXJETyBldmVuIGZvciBhbiBlcnJvci4gICovCisgICAgICAgICAgIGlzbzc4MTZfc2Vs ZWN0X2RhdGEgKGFwcF9nZXRfc2xvdCAoYXBwKSwgMCwgMHg3RjIxKTsKKyAgICAgICAgIH0KKyAK KyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9G T1VORCk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1 ZmZlcjsKKyAgICAgICBzaXplX3QgYnVmbGVuOworICAgICAgIHZvaWQgKnJlbHB0cjsKKyAKKyAg ICAgICByZWxwdHIgPSBnZXRfb25lX2RvIChhcHAsIDB4N0YyMSwgJmJ1ZmZlciwgJmJ1Zmxlbiwg TlVMTCk7CisgICAgICAgaWYgKCFyZWxwdHIpCisgICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChH UEdfRVJSX05PVF9GT1VORCk7CisgCisgICAgICAgaWYgKCFidWZsZW4pCisgICAgICAgICBlcnIg PSBncGdfZXJyb3IgKEdQR19FUlJfTk9UX0ZPVU5EKTsKKyAgICAgICBlbHNlIGlmICghKCpjZXJ0 ID0geHRyeW1hbGxvYyAoYnVmbGVuKSkpCisgICAgICAgICBlcnIgPSBncGdfZXJyb3JfZnJvbV9z eXNlcnJvciAoKTsKKyAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIG1lbWNweSAo KmNlcnQsIGJ1ZmZlciwgYnVmbGVuKTsKKyAgICAgICAgICAgKmNlcnRsZW4gPSBidWZsZW47Cisg ICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICB9CisgICAgICAgeGZyZWUgKHJlbHB0cik7Cisg ICAgIH0KKyAKKyAgIHJldHVybiBlcnI7CisgfQorIAorIAorIC8qIERlY2lkZSBpZiB3ZSB1c2Ug dGhlIHBpbnBhZCBvZiB0aGUgcmVhZGVyIGZvciBQSU4gaW5wdXQgYWNjb3JkaW5nCisgICAgdG8g dGhlIHVzZXIgcHJlZmVyZW5jZSBvbiB0aGUgY2FyZCwgYW5kIHRoZSBjYXBhYmlsaXR5IG9mIHRo ZQorICAgIHJlYWRlci4gIFRoaXMgcm91dGluZSBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSByZWFk ZXIgaGFzIHBpbnBhZC4KKyAgICBSZXR1cm5zIDAgaWYgd2UgdXNlIHBpbnBhZCwgMSBvdGhlcndp c2UuICAqLworIHN0YXRpYyBpbnQKKyBjaGVja19waW5wYWRfcmVxdWVzdCAoYXBwX3QgYXBwLCBw aW5pbmZvX3QgKnBpbmluZm8sIGludCBhZG1pbl9waW4pCisgeworICAgaWYgKGFwcC0+YXBwX2xv Y2FsLT5waW5wYWQuZGlzYWJsZWQpCisgICAgIHJldHVybiAxOworIAorICAgaWYgKGFwcC0+YXBw X2xvY2FsLT5waW5wYWQuc3BlY2lmaWVkID09IDApIC8qIE5vIHByZWZlcmVuY2Ugb24gY2FyZC4g ICovCisgICAgIHsKKyAgICAgICBpZiAocGluaW5mby0+Zml4ZWRsZW4gPT0gMCkgLyogUmVhZGVy IGhhcyB2YXJsZW4gY2FwYWJpbGl0eS4gICovCisgICAgICAgICByZXR1cm4gMDsgICAgICAgICAg ICAgICAgIC8qIFRoZW4sIHVzZSBwaW5wYWQuICAqLworICAgICAgIGVsc2UKKyAgICAgICAgIC8q CisgICAgICAgICAgKiBSZWFkZXIgaGFzIGxpbWl0ZWQgY2FwYWJpbGl0eSwgYW5kIGl0IG1heSBu b3QgbWF0Y2ggUElOIG9mCisgICAgICAgICAgKiB0aGUgY2FyZC4KKyAgICAgICAgICAqLworICAg ICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIGlmIChhZG1pbl9waW4pCisgICAgIHBpbmlu Zm8tPmZpeGVkbGVuID0gYXBwLT5hcHBfbG9jYWwtPnBpbnBhZC5maXhlZGxlbl9hZG1pbjsKKyAg IGVsc2UKKyAgICAgcGluaW5mby0+Zml4ZWRsZW4gPSBhcHAtPmFwcF9sb2NhbC0+cGlucGFkLmZp eGVkbGVuX3VzZXI7CisgCisgICBpZiAocGluaW5mby0+Zml4ZWRsZW4gPT0gMCAgICAvKiBVc2Vy IHJlcXVlc3RzIGRpc2FibGUgcGlucGFkLiAgKi8KKyAgICAgICB8fCBwaW5pbmZvLT5maXhlZGxl biA8IHBpbmluZm8tPm1pbmxlbgorICAgICAgIHx8IHBpbmluZm8tPmZpeGVkbGVuID4gcGluaW5m by0+bWF4bGVuCisgICAgICAgLyogUmVhZGVyIGRvZXNuJ3QgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0 byBpbnB1dCBhIFBJTiB3aGljaAorICAgICAgICAqIGxlbmd0aCBpcyBGSVhFRExFTi4gICovKQor ICAgICByZXR1cm4gMTsKKyAKKyAgIHJldHVybiAwOworIH0KKyAKKyAKKyAvKiBSZXR1cm4gYSBz dHJpbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FyZCBmb3IgdXNlIGluIGEKKyAgKiBw cm9tcHQuICBSZXR1cm5zIE5VTEwgb24gbWVtb3J5IGZhaWx1cmUuICAqLworIHN0YXRpYyBjaGFy ICoKKyBnZXRfcHJvbXB0X2luZm8gKGFwcF90IGFwcCwgaW50IGNodm5vLCB1bnNpZ25lZCBsb25n IHNpZ2NvdW50LCBpbnQgcmVtYWluaW5nKQorIHsKKyAgIGNoYXIgKnNlcmlhbCwgKmRpc3BfbmFt ZSwgKnJlbWJ1ZiwgKnRtcGJ1ZiwgKnJlc3VsdDsKKyAKKyAgIHNlcmlhbCA9IGFwcF9nZXRfZGlz cHNlcmlhbG5vIChhcHAsIDApOworICAgaWYgKCFzZXJpYWwpCisgICAgIHJldHVybiBOVUxMOwor IAorICAgZGlzcF9uYW1lID0gZ2V0X2Rpc3BfbmFtZSAoYXBwKTsKKyAgIGlmIChjaHZubyA9PSAx KQorICAgICB7CisgICAgICAgLyogVFJBTlNMQVRPUlM6IFB1dCBhIFx4MWYgcmlnaHQgYmVmb3Jl IGEgY29sb24uICBUaGlzIGNhbiBiZQorICAgICAgICAqIHVzZWQgYnkgcGluZW50cnkgdG8gbmlj ZWx5IGFsaWduIHRoZSBuYW1lcyBhbmQgdmFsdWVzLiAgS2VlcAorICAgICAgICAqIHRoZSAlcyBh dCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgICAgICByZXN1bHQgPSB4 dHJ5YXNwcmludGYgKF8oIiVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTnVt YmVyXHgxZjogJXMlJTBBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSG9sZGVy XHgxZjogJXMlJTBBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bnRlclx4 MWY6ICVsdSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiXHgxZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZXJpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwX25hbWU/IGRp c3BfbmFtZToiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2NvdW50LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOworICAgICB9CisgICBlbHNlCisgICAgIHsK KyAgICAgICByZXN1bHQgPSB4dHJ5YXNwcmludGYgKF8oIiVzIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiTnVtYmVyXHgxZjogJXMlJTBBIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiSG9sZGVyXHgxZjogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4MWUiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlzcF9uYW1lPyBkaXNwX25hbWU6IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIik7CisgICAgIH0KKyAgIHhmcmVlIChkaXNwX25hbWUpOworICAgeGZyZWUgKHNlcmlh bCk7CisgCisgICBpZiAocmVtYWluaW5nICE9IC0xKQorICAgICB7CisgICAgICAgLyogVFJBTlNM QVRPUlM6IFRoaXMgaXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgYXR0ZW1wdHMgdG8KKyAgICAg ICAgKiBlbnRlciBhIFBJTi4gIFVzZSAlJTBBIChkb3VibGUtcGVyY2VudCwwQSkgZm9yIGEgbGlu ZWZlZWQuICovCisgICAgICAgcmVtYnVmID0geHRyeWFzcHJpbnRmIChfKCJSZW1haW5pbmcgYXR0 ZW1wdHM6ICVkIiksIHJlbWFpbmluZyk7CisgICAgICAgaWYgKCFyZW1idWYpCisgICAgICAgICB7 CisgICAgICAgICAgIHhmcmVlIChyZXN1bHQpOworICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICAgICAgIH0KKyAgICAgICB0bXBidWYgPSBzdHJjb25jYXQgKHJlc3VsdCwgIiUwQSUwQSIsIHJl bWJ1ZiwgTlVMTCk7CisgICAgICAgeGZyZWUgKHJlbWJ1Zik7CisgICAgICAgaWYgKCF0bXBidWYp CisgICAgICAgICB7CisgICAgICAgICAgIHhmcmVlIChyZXN1bHQpOworICAgICAgICAgICByZXR1 cm4gTlVMTDsKKyAgICAgICAgIH0KKyAgICAgICB4ZnJlZSAocmVzdWx0KTsKKyAgICAgICByZXN1 bHQgPSB0bXBidWY7CisgICAgIH0KKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIAorIC8qIENv bXB1dGUgaGFzaCBpZiBLREYtRE8gaXMgYXZhaWxhYmxlLiAgQ0hWTk8gbXVzdCBiZSAwIGZvciBy ZXNldAorICAqIGNvZGUsIDEgb3IgMiBmb3IgdXNlciBwaW4gYW5kIDMgZm9yIGFkbWluIHBpbi4g IFBJTiBpcyB0aGUgb3JpZ2luYWwKKyAgKiBQSU4gYXMgZW50ZXJlZCBieSB0aGUgdXNlci4gIFJf UElOVkFMVUUgYW5kIHJfUElOTEVOIHdpbGwgcmVjZWl2ZSBhCisgICogbmV3bHkgYWxsb2NhdGVk IGJ1ZmZlciB3aXRoIGEgcG9zc2libGUgbW9kaWZpZWQgcGluLiAgKi8KKyBzdGF0aWMgZ3BnX2Vy cm9yX3QKKyBwaW4yaGFzaF9pZl9rZGYgKGFwcF90IGFwcCwgaW50IGNodm5vLCBjb25zdCBjaGFy ICpwaW4sCisgICAgICAgICAgICAgICAgICBjaGFyICoqcl9waW52YWx1ZSwgc2l6ZV90ICpyX3Bp bmxlbikKKyB7CisgICBncGdfZXJyb3JfdCBlcnIgPSAwOworICAgdm9pZCAqcmVscHRyID0gTlVM TDsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgIHNpemVfdCBwaW5sZW4sIGJ1ZmxlbjsK KyAgIGNoYXIgKmRlayA9IE5VTEw7CisgICBzaXplX3QgZGVrbGVuID0gMzI7CisgCisgICAqcl9w aW52YWx1ZSA9IE5VTEw7CisgICAqcl9waW5sZW4gPSAwOworIAorICAgcGlubGVuID0gc3RybGVu IChwaW4pOworICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5leHRjYXAua2RmX2RvCisgICAgICAgJiYg KHJlbHB0ciA9IGdldF9vbmVfZG8gKGFwcCwgMHgwMEY5LCAmYnVmZmVyLCAmYnVmbGVuLCBOVUxM KSkKKyAgICAgICAmJiBidWZsZW4gPj0gS0RGX0RBVEFfTEVOR1RIX01JTiAmJiAoYnVmZmVyWzJd ID09IDB4MDMpKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqc2FsdDsKKyAgICAgICB1bnNp Z25lZCBsb25nIHMya19jb3VudDsKKyAgICAgICBpbnQgc2FsdF9pbmRleDsKKyAKKyAgICAgICBk ZWsgPSB4dHJ5bWFsbG9jIChkZWtsZW4pOworICAgICAgIGlmICghZGVrKQorICAgICAgICAgewor ICAgICAgICAgICBlcnIgPSBncGdfZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICAg Z290byBsZWF2ZTsKKyAgICAgICAgIH0KKyAKKyAgICAgICBzMmtfY291bnQgPSAoKCh1bnNpZ25l ZCBpbnQpYnVmZmVyWzhdIDw8IDI0KQorICAgICAgICAgICAgICAgICAgICB8IChidWZmZXJbOV0g PDwgMTYpIHwgKGJ1ZmZlclsxMF0gPDwgOCkgfCBidWZmZXJbMTFdKTsKKyAKKyAgICAgICBpZiAo YnVmbGVuID09IEtERl9EQVRBX0xFTkdUSF9NSU4pCisgICAgICAgICBzYWx0X2luZGV4ID0xNDsK KyAgICAgICBlbHNlIGlmIChidWZsZW4gPT0gS0RGX0RBVEFfTEVOR1RIX01BWCkKKyAgICAgICAg IHNhbHRfaW5kZXggPSAoY2h2bm89PTMgPyAzNCA6IChjaHZubz09MCA/IDI0IDogMTQpKTsKKyAg ICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VS Ul9JTlZfREFUQSk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgCisgICAg ICAgc2FsdCA9ICZidWZmZXJbc2FsdF9pbmRleF07CisgICAgICAgZXJyID0gZ2NyeV9rZGZfZGVy aXZlIChwaW4sIHBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUllfS0RG X0lURVJTQUxURURfUzJLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHRVNUX0FM R09fU0hBMjU2LCBzYWx0LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczJrX2Nv dW50LCBkZWtsZW4sIGRlayk7CisgICAgICAgaWYgKCFlcnIpCisgICAgICAgICB7CisgICAgICAg ICAgICpyX3BpbmxlbiA9IGRla2xlbjsKKyAgICAgICAgICAgKnJfcGludmFsdWUgPSBkZWs7Cisg ICAgICAgICAgIGRlayA9IE5VTEw7CisgICAgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAg eworICAgICAgIC8qIEp1c3QgY29weSB0aGUgUElOIHRvIGEgbWFsbG9jZWQgYnVmZmVyLiAgKi8K KyAgICAgICAqcl9waW52YWx1ZSA9IHh0cnltYWxsb2Nfc2VjdXJlIChwaW5sZW4gKyAxKTsKKyAg ICAgICBpZiAoISpyX3BpbnZhbHVlKQorICAgICAgICAgeworICAgICAgICAgICBlcnIgPSBncGdf ZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsKKyAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAg IH0KKyAgICAgICBzdHJjcHkgKCpyX3BpbnZhbHVlLCBwaW4pOworICAgICAgICpyX3BpbmxlbiA9 IHBpbmxlbjsKKyAgICAgfQorIAorICBsZWF2ZToKKyAgIHhmcmVlIChkZWspOworICAgeGZyZWUg KHJlbHB0cik7CisgICByZXR1cm4gZXJyOworIH0KKyAKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAq CisgY2h2bm9fdG9fa2V5cmVmIChpbnQgY2h2bm8pCisgeworICAgY29uc3QgY2hhciAqa2V5cmVm OworICAgc3dpdGNoIChjaHZubykKKyAgICAgeworICAgICBjYXNlIDE6IGtleXJlZiA9ICIxIjsg YnJlYWs7CisgICAgIGNhc2UgMjoga2V5cmVmID0gIjIiOyBicmVhazsKKyAgICAgY2FzZSAzOiBr ZXlyZWYgPSAiMyI7IGJyZWFrOworICAgICBkZWZhdWx0OiBrZXlyZWYgPSBOVUxMOyBicmVhazsK KyAgICAgfQorICAgcmV0dXJuIGtleXJlZjsKKyB9CisgCisgCisgLyogSGVscGVyIHRvIGNhY2hl IGEgUElOLiAgSWYgUElOIGlzIE5VTEwgdGhlIGNhY2hlIGlzIGNsZWFyZWQuICovCisgc3RhdGlj IHZvaWQKKyBjYWNoZV9waW4gKGFwcF90IGFwcCwgY3RybF90IGN0cmwsIGludCBjaHZubywgY29u c3QgY2hhciAqcGluKQorIHsKKyAgIGNvbnN0IGNoYXIgKmtleXJlZjsKKyAKKyAgIGlmIChvcHQu cGNzY19zaGFyZWQpCisgICAgIHJldHVybjsKKyAKKyAgIGtleXJlZiA9IGNodm5vX3RvX2tleXJl ZiAoY2h2bm8pOworICAgaWYgKCFrZXlyZWYpCisgICAgIHJldHVybjsKKyAKKyAgIHN3aXRjaCAo QVBQX0NBUkQoYXBwKS0+Y2FyZHR5cGUpCisgICAgIHsKKyAgICAgY2FzZSBDQVJEVFlQRV9ZVUJJ S0VZOiBicmVhazsKKyAgICAgZGVmYXVsdDogcmV0dXJuOworICAgICB9CisgCisgICBwaW5jYWNo ZV9wdXQgKGN0cmwsIGFwcF9nZXRfc2xvdCAoYXBwKSwgIm9wZW5wZ3AiLCBrZXlyZWYsCisgICAg ICAgICAgICAgICAgIHBpbiwgcGluPyBzdHJsZW4gKHBpbik6MCk7CisgCisgICBzd2l0Y2ggKGNo dm5vKQorICAgICB7CisgICAgIGNhc2UgMTogYXBwLT5hcHBfbG9jYWwtPnBpbmNhY2hlLm1heWJl X2NodjEgPSAhIXBpbjsgYnJlYWs7CisgICAgIGNhc2UgMjogYXBwLT5hcHBfbG9jYWwtPnBpbmNh Y2hlLm1heWJlX2NodjIgPSAhIXBpbjsgYnJlYWs7CisgICAgIGNhc2UgMzogYXBwLT5hcHBfbG9j YWwtPnBpbmNhY2hlLm1heWJlX2NodjMgPSAhIXBpbjsgYnJlYWs7CisgICAgIH0KKyB9CisgCisg CisgLyogSWYgdGhlIFBJTiBjYWNoZSBpcyBleHBlY3RlZCBhbmQgcmVhbGx5IGhhcyBhIHZhbGlk IFBJTiByZXR1cm4gdGhhdAorICAqIHBpbiBhdCBSX1BJTi4gIFJldHVybnMgdHJ1ZSBpZiB0aGF0 IGlzIHRoZSBjYXNlOyBvdGhlcndpc2UKKyAgKiBmYWxzZS4gICovCisgc3RhdGljIGludAorIHBp bl9mcm9tX2NhY2hlIChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLCBpbnQgY2h2bm8sIGNoYXIgKipy X3BpbikKKyB7CisgICBjb25zdCBjaGFyICprZXlyZWYgPSBjaHZub190b19rZXlyZWYgKGNodm5v KTsKKyAgIGludCBtYXliZV9jYWNoZWQ7CisgCisgICAqcl9waW4gPSBOVUxMOworIAorICAgaWYg KCFrZXlyZWYpCisgICAgIHJldHVybiAwOworICAgc3dpdGNoIChBUFBfQ0FSRChhcHApLT5jYXJk dHlwZSkKKyAgICAgeworICAgICBjYXNlIENBUkRUWVBFX1lVQklLRVk6IGJyZWFrOworICAgICBk ZWZhdWx0OiByZXR1cm4gMDsKKyAgICAgfQorIAorICAgc3dpdGNoIChjaHZubykKKyAgICAgewor ICAgICBjYXNlIDE6IG1heWJlX2NhY2hlZCA9IGFwcC0+YXBwX2xvY2FsLT5waW5jYWNoZS5tYXli ZV9jaHYxOyBicmVhazsKKyAgICAgY2FzZSAyOiBtYXliZV9jYWNoZWQgPSBhcHAtPmFwcF9sb2Nh bC0+cGluY2FjaGUubWF5YmVfY2h2MjsgYnJlYWs7CisgICAgIGNhc2UgMzogbWF5YmVfY2FjaGVk ID0gYXBwLT5hcHBfbG9jYWwtPnBpbmNhY2hlLm1heWJlX2NodjM7IGJyZWFrOworICAgICBkZWZh dWx0OiBtYXliZV9jYWNoZWQgPSAwOyBicmVhazsKKyAgICAgfQorIAorICAgaWYgKCFtYXliZV9j YWNoZWQpCisgICAgIHJldHVybiAwOworIAorICAgaWYgKHBpbmNhY2hlX2dldCAoY3RybCwgYXBw X2dldF9zbG90IChhcHApLCAib3BlbnBncCIsIGtleXJlZiwgcl9waW4pKQorICAgICByZXR1cm4g MDsKKyAKKyAgIHJldHVybiAxOworIH0KKyAKKyAKKyAvKiBWZXJpZnkgYSBDSFYgZWl0aGVyIHVz aW5nIHRoZSBwaW5lbnRyeSBvciBpZiBwb3NzaWJsZSBieQorICAgIHVzaW5nIGEgcGlucGFkLiAg UElOQ0IgYW5kIFBJTkNCX0FSRyBkZXNjcmliZSB0aGUgdXN1YWwgY2FsbGJhY2sKKyAgICBmb3Ig dGhlIHBpbmVudHJ5LiAgQ0hWTk8gbXVzdCBiZSBlaXRoZXIgMSBvciAyLiBTSUdDT1VOVCBpcyBv bmx5CisgICAgdXNlZCB3aXRoIENIVjEuICBQSU5WQUxVRSBpcyB0aGUgYWRkcmVzcyBvZiBhIHBv aW50ZXIgd2hpY2ggd2lsbAorICAgIHJlY2VpdmUgYSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgd2l0 aCB0aGUgYWN0dWFsIFBJTiAodGhpcyBpcyB1c2VmdWwKKyAgICBpbiBjYXNlIHRoYXQgUElOIHNo YWxsIGJlIHVzZWQgZm9yIGFub3RoZXIgdmVyaWZ5IG9wZXJhdGlvbikuICBUaGUKKyAgICBjYWxs ZXIgbmVlZHMgdG8gZnJlZSB0aGlzIHZhbHVlLiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgd2l0 aAorICAgIHN1Y2Nlc3MgYW5kIE5VTEwgaXMgc3RvcmVkIGF0IFBJTlZBTFVFLCB0aGUgY2FsbGVy IHNob3VsZCB0YWtlIHRoaXMKKyAgICBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHBpbnBhZCBo YXMgYmVlbiB1c2VkLgorICAgICovCisgc3RhdGljIGdwZ19lcnJvcl90CisgdmVyaWZ5X2FfY2h2 IChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLAorICAgICAgICAgICAgICAgZ3BnX2Vycm9yX3QgKCpw aW5jYikodm9pZCosIGNvbnN0IGNoYXIgKiwgY2hhciAqKiksCisgICAgICAgICAgICAgICB2b2lk ICpwaW5jYl9hcmcsIGludCBjaHZubywgdW5zaWduZWQgbG9uZyBzaWdjb3VudCwKKyAgICAgICAg ICAgICAgIGNoYXIgKipyX3BpbnZhbHVlLCBzaXplX3QgKnJfcGlubGVuKQorIHsKKyAgIGludCBy YyA9IDA7CisgICBjaGFyICpwcm9tcHRfYnVmZmVyID0gTlVMTDsKKyAgIGNvbnN0IGNoYXIgKnBy b21wdDsKKyAgIHBpbmluZm9fdCBwaW5pbmZvOworICAgaW50IG1pbmxlbiA9IDY7CisgICBpbnQg cmVtYWluaW5nOworICAgY2hhciAqcGluID0gTlVMTDsKKyAKKyAgIGxvZ19hc3NlcnQgKGNodm5v ID09IDEgfHwgY2h2bm8gPT0gMik7CisgCisgICAqcl9waW52YWx1ZSA9IE5VTEw7CisgICAqcl9w aW5sZW4gPSAwOworIAorICAgcmVtYWluaW5nID0gZ2V0X3JlbWFpbmluZ190cmllcyAoYXBwLCAw KTsKKyAgIGlmIChyZW1haW5pbmcgPT0gLTEpCisgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19F UlJfQ0FSRCk7CisgCisgICBpZiAoY2h2bm8gPT0gMiAmJiBhcHAtPmFwcF9sb2NhbC0+ZmxhZ3Mu ZGVmX2NodjIpCisgICAgIHsKKyAgICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGRlZl9jaHYyIG1l Y2hhbmlzbS4gKi8KKyAgICAgICBpZiAob3B0LnZlcmJvc2UpCisgICAgICAgICBsb2dfaW5mbyAo XygidXNpbmcgZGVmYXVsdCBQSU4gYXMgJXNcbiIpLCAiQ0hWMiIpOworICAgICAgIHJjID0gaXNv NzgxNl92ZXJpZnkgKGFwcF9nZXRfc2xvdCAoYXBwKSwgMHg4MiwgIjEyMzQ1NiIsIDYpOworICAg ICAgIGlmIChyYykKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogVmVyaWZpY2F0aW9uIG9mIENI VjIgd2l0aCB0aGUgZGVmYXVsdCBQSU4gZmFpbGVkLAorICAgICAgICAgICAgICBhbHRob3VnaCB0 aGUgY2FyZCBwcmV0ZW5kcyB0byBoYXZlIHRoZSBkZWZhdWx0IFBJTiBzZXQgYXMKKyAgICAgICAg ICAgICAgQ0hWMi4gIFdlIGJldHRlciBkaXNhYmxlIHRoZSBkZWZfY2h2MiBmbGFnIG5vdy4gKi8K KyAgICAgICAgICAgbG9nX2luZm8gKF8oImZhaWxlZCB0byB1c2UgZGVmYXVsdCBQSU4gYXMgJXM6 ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAiIC0gZGlzYWJsaW5nIGZ1cnRoZXIgZGVmYXVs dCB1c2VcbiIpLAorICAgICAgICAgICAgICAgICAgICAgIkNIVjIiLCBncGdfc3RyZXJyb3IgKHJj KSk7CisgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5mbGFncy5kZWZfY2h2MiA9IDA7CisgICAg ICAgICB9CisgICAgICAgcmV0dXJuIHJjOworICAgICB9CisgCisgICBtZW1zZXQgKCZwaW5pbmZv LCAwLCBzaXplb2YgcGluaW5mbyk7CisgICBwaW5pbmZvLmZpeGVkbGVuID0gLTE7CisgICBwaW5p bmZvLm1pbmxlbiA9IG1pbmxlbjsKKyAKKyAgIHsKKyAgICAgY29uc3QgY2hhciAqZmlyc3RsaW5l ID0gXygifHxQbGVhc2UgdW5sb2NrIHRoZSBjYXJkIik7CisgICAgIGNoYXIgKmluZm9ibG9jayA9 IGdldF9wcm9tcHRfaW5mbyAoYXBwLCBjaHZubywgc2lnY291bnQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIDwgMz8gcmVtYWluaW5nIDogLTEpOwor IAorICAgICBwcm9tcHRfYnVmZmVyID0gc3RyY29uY2F0IChmaXJzdGxpbmUsICIlMEElMEEiLCBp bmZvYmxvY2ssIE5VTEwpOworICAgICBpZiAocHJvbXB0X2J1ZmZlcikKKyAgICAgICBwcm9tcHQg PSBwcm9tcHRfYnVmZmVyOworICAgICBlbHNlCisgICAgICAgcHJvbXB0ID0gZmlyc3RsaW5lOyAg LyogRU5PTUVNIGZhbGxiYWNrLiAgKi8KKyAKKyAgICAgeGZyZWUgKGluZm9ibG9jayk7CisgICB9 CisgCisgICBpZiAoIW9wdC5kaXNhYmxlX3BpbnBhZAorICAgICAgICYmICFpc283ODE2X2NoZWNr X3BpbnBhZCAoYXBwX2dldF9zbG90IChhcHApLCBJU083ODE2X1ZFUklGWSwgJnBpbmluZm8pCisg ICAgICAgJiYgIWNoZWNrX3BpbnBhZF9yZXF1ZXN0IChhcHAsICZwaW5pbmZvLCAwKSkKKyAgICAg eworICAgICAgIC8qIFRoZSByZWFkZXIgc3VwcG9ydHMgdGhlIHZlcmlmeSBjb21tYW5kIHRocm91 Z2ggdGhlIHBpbnBhZC4KKyAgICAgICAgKiBJbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHV0aWxpemUg dGhlIFBJTiBjYWNoZSBiZWNhdXNlIGJ5IHVzaW5nCisgICAgICAgICogYSBwaW5wYWQgdGhlIFBJ TiBjYW4ndCBoYXZlIGJlZW4gY2FjaGVkLgorICAgICAgICAqIE5vdGUgdGhhdCB0aGUgcGluY2Ig YXBwZW5kcyBhIHRleHQgdG8gdGhlIHByb21wdCB0ZWxsaW5nIHRoZQorICAgICAgICAqIHVzZXIg dG8gdXNlIHRoZSBwaW5wYWQuICovCisgICAgICAgcmMgPSBwaW5jYiAocGluY2JfYXJnLCBwcm9t cHQsIE5VTEwpOworICAgICAgIHByb21wdCA9IE5VTEw7CisgICAgICAgeGZyZWUgKHByb21wdF9i dWZmZXIpOworICAgICAgIHByb21wdF9idWZmZXIgPSBOVUxMOworICAgICAgIGlmIChyYykKKyAg ICAgICAgIHsKKyAgICAgICAgICAgbG9nX2luZm8gKF8oIlBJTiBjYWxsYmFjayByZXR1cm5lZCBl cnJvcjogJXNcbiIpLAorICAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChyYykpOwor ICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICB9CisgICAgICAgcmMgPSBpc283ODE2X3Zl cmlmeV9rcCAoYXBwX2dldF9zbG90IChhcHApLCAweDgwK2Nodm5vLCAmcGluaW5mbyk7CisgICAg ICAgLyogRGlzbWlzcyB0aGUgcHJvbXB0LiAqLworICAgICAgIHBpbmNiIChwaW5jYl9hcmcsIE5V TEwsIE5VTEwpOworICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBUaGUgcmVhZGVy IGhhcyBubyBwaW5wYWQgb3Igd2UgZG9uJ3Qgd2FudCB0byB1c2UgaXQuICBJZiB3ZQorICAgICAg ICAqIGhhdmUgYXQgbGVhc3QgdGhlIHN0YW5kYXJkIDMgcmVtYWluaW5nIHRyaWVzIHdlIGZpcnN0 IHRyeSB0bworICAgICAgICAqIGdldCB0aGUgUElOIGZyb20gdGhlIGNhY2hlLiAgV2l0aCBsZXNz IHJlbWFpbmluZyB0cmllcyBpdCBpcworICAgICAgICAqIGJldHRlciB0byBsZXQgdGhlIHVzZXIg a25vdyBhYm91dCBmYWlsZWQgYXR0ZW1wdHMgKHdoaWNoCisgICAgICAgICogbWlnaHQgYmUgZHVl IHRvIGEgYnVnIGluIHRoZSBQSU4gY2FjaGUgaGFuZGxpbmcpLiAqLworICAgICAgIGlmIChyZW1h aW5pbmcgPj0gMyAmJiBwaW5fZnJvbV9jYWNoZSAoYXBwLCBjdHJsLCBjaHZubywgJnBpbikpCisg ICAgICAgICByYyA9IDA7CisgICAgICAgZWxzZQorICAgICAgICAgcmMgPSBwaW5jYiAocGluY2Jf YXJnLCBwcm9tcHQsICZwaW4pOworICAgICAgIHByb21wdCA9IE5VTEw7CisgICAgICAgeGZyZWUg KHByb21wdF9idWZmZXIpOworICAgICAgIHByb21wdF9idWZmZXIgPSBOVUxMOworICAgICAgIGlm IChyYykKKyAgICAgICAgIHsKKyAgICAgICAgICAgbG9nX2luZm8gKF8oIlBJTiBjYWxsYmFjayBy ZXR1cm5lZCBlcnJvcjogJXNcbiIpLAorICAgICAgICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9y IChyYykpOworICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICB9CisgCisgICAgICAgaWYg KHN0cmxlbiAocGluKSA8IG1pbmxlbikKKyAgICAgICAgIHsKKyAgICAgICAgICAgbG9nX2Vycm9y IChfKCJQSU4gZm9yIENIViVkIGlzIHRvbyBzaG9ydDsiCisgICAgICAgICAgICAgICAgICAgICAg ICAiIG1pbmltdW0gbGVuZ3RoIGlzICVkXG4iKSwgY2h2bm8sIG1pbmxlbik7CisgICAgICAgICAg IHdpcGVfYW5kX2ZyZWVfc3RyaW5nIChwaW4pOworICAgICAgICAgICByZXR1cm4gZ3BnX2Vycm9y IChHUEdfRVJSX0JBRF9QSU4pOworICAgICAgICAgfQorIAorICAgICAgIHJjID0gcGluMmhhc2hf aWZfa2RmIChhcHAsIGNodm5vLCBwaW4sIHJfcGludmFsdWUsIHJfcGlubGVuKTsKKyAgICAgICBp ZiAoIXJjKQorICAgICAgICAgcmMgPSBpc283ODE2X3ZlcmlmeSAoYXBwX2dldF9zbG90IChhcHAp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCArIGNodm5vLCAqcl9waW52YWx1 ZSwgKnJfcGlubGVuKTsKKyAgICAgICBpZiAoIXJjKQorICAgICAgICAgY2FjaGVfcGluIChhcHAs IGN0cmwsIGNodm5vLCBwaW4pOworICAgICB9CisgCisgICB3aXBlX2FuZF9mcmVlX3N0cmluZyAo cGluKTsKKyAgIGlmIChyYykKKyAgICAgeworICAgICAgIGxvZ19lcnJvciAoXygidmVyaWZ5IENI ViVkIGZhaWxlZDogJXNcbiIpLCBjaHZubywgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgIHhm cmVlICgqcl9waW52YWx1ZSk7CisgICAgICAgKnJfcGludmFsdWUgPSBOVUxMOworICAgICAgICpy X3BpbmxlbiA9IDA7CisgICAgICAgZmx1c2hfY2FjaGVfYWZ0ZXJfZXJyb3IgKGFwcCk7CisgICAg IH0KKyAKKyAgIHJldHVybiByYzsKKyB9CisgCisgCisgLyogVmVyaWZ5IENIVjIgaWYgcmVxdWly ZWQuICBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlCisgICAgY2FyZCBDSFYx IHdpbGwgYWxzbyBiZSB2ZXJpZmllZC4gKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyB2ZXJpZnlf Y2h2MiAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwKKyAgICAgICAgICAgICAgZ3BnX2Vycm9yX3Qg KCpwaW5jYikodm9pZCosIGNvbnN0IGNoYXIgKiwgY2hhciAqKiksCisgICAgICAgICAgICAgIHZv aWQgKnBpbmNiX2FyZykKKyB7CisgICBpbnQgcmM7CisgICBjaGFyICpwaW52YWx1ZTsKKyAgIHNp emVfdCBwaW5sZW47CisgCisgICBpZiAoYXBwLT5kaWRfY2h2MikKKyAgICAgcmV0dXJuIDA7ICAv KiBXZSBhbHJlYWR5IHZlcmlmaWVkIENIVjIuICAqLworIAorICAgaWYgKGFwcC0+YXBwX2xvY2Fs LT5wa1sxXS5rZXkgfHwgYXBwLT5hcHBfbG9jYWwtPnBrWzJdLmtleSkKKyAgICAgeworICAgICAg IHJjID0gdmVyaWZ5X2FfY2h2IChhcHAsIGN0cmwsIHBpbmNiLCBwaW5jYl9hcmcsIDIsIDAsICZw aW52YWx1ZSwgJnBpbmxlbik7CisgICAgICAgaWYgKHJjKQorICAgICAgICAgcmV0dXJuIHJjOwor ICAgICAgIGFwcC0+ZGlkX2NodjIgPSAxOworIAorICAgICAgIGlmICghYXBwLT5kaWRfY2h2MSAm JiAhYXBwLT5mb3JjZV9jaHYxICYmIHBpbnZhbHVlICYmICFvcHQucGNzY19zaGFyZWQpCisgICAg ICAgICB7CisgICAgICAgICAgIC8qIEZvciBjb252ZW5pZW5jZSB3ZSB2ZXJpZnkgQ0hWMSBoZXJl IHRvby4gIFdlIGRvIHRoaXMgb25seSBpZgorICAgICAgICAgICAgICB0aGUgY2FyZCBpcyBub3Qg Y29uZmlndXJlZCB0byByZXF1aXJlIGEgdmVyaWZpY2F0aW9uIGJlZm9yZQorICAgICAgICAgICAg ICBlYWNoIENIVjEgY29udHJvbGxlZCBvcGVyYXRpb24gKGZvcmNlX2NodjEpIGFuZCBpZiB3ZSBh cmUgbm90CisgICAgICAgICAgICAgIHVzaW5nIHRoZSBwaW5wYWQgKFBJTlZBTFVFID09IE5VTEwp LiAqLworICAgICAgICAgICByYyA9IGlzbzc4MTZfdmVyaWZ5IChhcHBfZ2V0X3Nsb3QgKGFwcCks IDB4ODEsIHBpbnZhbHVlLCBwaW5sZW4pOworICAgICAgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChy YykgPT0gR1BHX0VSUl9CQURfUElOKQorICAgICAgICAgICAgIHJjID0gZ3BnX2Vycm9yIChHUEdf RVJSX1BJTl9OT1RfU1lOQ0VEKTsKKyAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgIGxvZ19lcnJvciAoXygidmVyaWZ5IENIViVkIGZhaWxlZDogJXNcbiIp LCAxLCBncGdfc3RyZXJyb3IgKHJjKSk7CisgICAgICAgICAgICAgICBmbHVzaF9jYWNoZV9hZnRl cl9lcnJvciAoYXBwKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICBhcHAtPmRpZF9jaHYxID0gMTsKKyAgICAgICAgICAgICAg IC8qIE5vdGUgdGhhdCB3ZSBhcmUgbm90IGFibGUgdG8gY2FjaGUgdGhlIENIViAxIGhlcmUgYmVj YXVzZQorICAgICAgICAgICAgICAgICogaXQgaXMgcG9zc2libGUgdGhhdCBkdWUgdG8gdGhlIHVz ZSBvZiBhIEtERi1ETyBQSU5WQUxVRQorICAgICAgICAgICAgICAgICogaGFzIHRoZSBoYXNoZWQg YmluYXJ5IFBJTiBvZiBsZW5ndGggUElOTEVOLiAgKi8KKyAgICAgICAgICAgICB9CisgICAgICAg ICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHJjID0gdmVyaWZ5X2FfY2h2IChh cHAsIGN0cmwsIHBpbmNiLCBwaW5jYl9hcmcsIDEsIDAsICZwaW52YWx1ZSwgJnBpbmxlbik7Cisg ICAgICAgaWYgKHJjKQorICAgICAgICAgcmV0dXJuIHJjOworICAgICB9CisgCisgICB3aXBlX2Fu ZF9mcmVlIChwaW52YWx1ZSwgcGlubGVuKTsKKyAKKyAgIHJldHVybiByYzsKKyB9CisgCisgCisg LyogQnVpbGQgdGhlIHByb21wdCB0byBlbnRlciB0aGUgQWRtaW4gUElOLiAgVGhlIHByb21wdCBk ZXBlbmRzIG9uIHRoZQorICAqIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGNhcmQuICBJZiBSX1JFTUFJ TklORyBpcyBub3QgTlVMTCB0aGUKKyAgKiByZW1haW5pbmcgdHJpZXMgYXJlIHN0b3JlZCB0aGVy ZS4gICovCisgc3RhdGljIGdwZ19lcnJvcl90CisgYnVpbGRfZW50ZXJfYWRtaW5fcGluX3Byb21w dCAoYXBwX3QgYXBwLCBjaGFyICoqcl9wcm9tcHQsIGludCAqcl9yZW1haW5pbmcpCisgeworICAg aW50IHJlbWFpbmluZzsKKyAgIGNoYXIgKnByb21wdDsKKyAgIGNoYXIgKmluZm9ibG9jazsKKyAK KyAgICpyX3Byb21wdCA9IE5VTEw7CisgICBpZiAocl9yZW1haW5pbmcpCisgICAgICpyX3JlbWFp bmluZyA9IDA7CisgCisgICByZW1haW5pbmcgPSBnZXRfcmVtYWluaW5nX3RyaWVzIChhcHAsIDEp OworICAgaWYgKHJlbWFpbmluZyA9PSAtMSkKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VS Ul9DQVJEKTsKKyAgIGlmICghcmVtYWluaW5nKQorICAgICB7CisgICAgICAgbG9nX2luZm8gKF8o ImNhcmQgaXMgcGVybWFuZW50bHkgbG9ja2VkIVxuIikpOworICAgICAgIHJldHVybiBncGdfZXJy b3IgKEdQR19FUlJfQkFEX1BJTik7CisgICAgIH0KKyAKKyAgIGxvZ19pbmZvIChuZ2V0dGV4dCgi JWQgQWRtaW4gUElOIGF0dGVtcHQgcmVtYWluaW5nIGJlZm9yZSBjYXJkIgorICAgICAgICAgICAg ICAgICAgICAgICIgaXMgcGVybWFuZW50bHkgbG9ja2VkXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICIlZCBBZG1pbiBQSU4gYXR0ZW1wdHMgcmVtYWluaW5nIGJlZm9yZSBjYXJkIgorICAgICAg ICAgICAgICAgICAgICAgICIgaXMgcGVybWFuZW50bHkgbG9ja2VkXG4iLAorICAgICAgICAgICAg ICAgICAgICAgIHJlbWFpbmluZyksIHJlbWFpbmluZyk7CisgCisgICBpbmZvYmxvY2sgPSBnZXRf cHJvbXB0X2luZm8gKGFwcCwgMywgMCwgcmVtYWluaW5nIDwgMz8gcmVtYWluaW5nIDogLTEpOwor IAorICAgLyogVFJBTlNMQVRPUlM6IERvIG5vdCB0cmFuc2xhdGUgdGhlICJ8QXwiIHByZWZpeCBi dXQga2VlcCBpdCBhdAorICAgICAgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuICBVc2UgJTBBIChz aW5nbGUgcGVyY2VudCkgZm9yIGEgbGluZWZlZWQuICAqLworICAgcHJvbXB0ID0gc3RyY29uY2F0 IChfKCJ8QXxQbGVhc2UgZW50ZXIgdGhlIEFkbWluIFBJTiIpLAorICAgICAgICAgICAgICAgICAg ICAgICAiJTBBJTBBIiwgaW5mb2Jsb2NrLCBOVUxMKTsKKyAgIHhmcmVlIChpbmZvYmxvY2spOwor ICAgaWYgKCFwcm9tcHQpCisgICAgIHJldHVybiBncGdfZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsK KyAKKyAgICpyX3Byb21wdCA9IHByb21wdDsKKyAgIGlmIChyX3JlbWFpbmluZykKKyAgICAgKnJf cmVtYWluaW5nID0gcmVtYWluaW5nOworICAgcmV0dXJuIDA7CisgfQorIAorIAorIC8qIFZlcmlm eSBDSFYzIGlmIHJlcXVpcmVkLiAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIHZlcmlmeV9jaHYz IChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLAorICAgICAgICAgICAgICBncGdfZXJyb3JfdCAoKnBp bmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKSwKKyAgICAgICAgICAgICAgdm9pZCAq cGluY2JfYXJnKQorIHsKKyAgIGludCByYyA9IDA7CisgCisgICBpZiAoIW9wdC5hbGxvd19hZG1p bikKKyAgICAgeworICAgICAgIGxvZ19pbmZvIChfKCJhY2Nlc3MgdG8gYWRtaW4gY29tbWFuZHMg aXMgbm90IGNvbmZpZ3VyZWRcbiIpKTsKKyAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJS X0VBQ0NFUyk7CisgICAgIH0KKyAKKyAgIGlmICghYXBwLT5kaWRfY2h2MykKKyAgICAgeworICAg ICAgIHBpbmluZm9fdCBwaW5pbmZvOworICAgICAgIGludCBtaW5sZW4gPSA4OworICAgICAgIGNo YXIgKnByb21wdDsKKyAgICAgICBpbnQgcmVtYWluaW5nOworIAorICAgICAgIG1lbXNldCAoJnBp bmluZm8sIDAsIHNpemVvZiBwaW5pbmZvKTsKKyAgICAgICBwaW5pbmZvLmZpeGVkbGVuID0gLTE7 CisgICAgICAgcGluaW5mby5taW5sZW4gPSBtaW5sZW47CisgCisgICAgICAgcmMgPSBidWlsZF9l bnRlcl9hZG1pbl9waW5fcHJvbXB0IChhcHAsICZwcm9tcHQsICZyZW1haW5pbmcpOworICAgICAg IGlmIChyYykKKyAgICAgICAgIHJldHVybiByYzsKKyAKKyAgICAgICBpZiAoIW9wdC5kaXNhYmxl X3BpbnBhZAorICAgICAgICAgICAmJiAhaXNvNzgxNl9jaGVja19waW5wYWQgKGFwcF9nZXRfc2xv dCAoYXBwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU083ODE2X1ZF UklGWSwgJnBpbmluZm8pCisgICAgICAgICAgICYmICFjaGVja19waW5wYWRfcmVxdWVzdCAoYXBw LCAmcGluaW5mbywgMSkpCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFRoZSByZWFkZXIgc3Vw cG9ydHMgdGhlIHZlcmlmeSBjb21tYW5kIHRocm91Z2ggdGhlIHBpbnBhZC4gKi8KKyAgICAgICAg ICAgcmMgPSBwaW5jYiAocGluY2JfYXJnLCBwcm9tcHQsIE5VTEwpOworICAgICAgICAgICB4ZnJl ZSAocHJvbXB0KTsKKyAgICAgICAgICAgcHJvbXB0ID0gTlVMTDsKKyAgICAgICAgICAgaWYgKHJj KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGxvZ19pbmZvIChfKCJQSU4gY2FsbGJh Y2sgcmV0dXJuZWQgZXJyb3I6ICVzXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBncGdf c3RyZXJyb3IgKHJjKSk7CisgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICAg fQorICAgICAgICAgICByYyA9IGlzbzc4MTZfdmVyaWZ5X2twIChhcHBfZ2V0X3Nsb3QgKGFwcCks IDB4ODMsICZwaW5pbmZvKTsKKyAgICAgICAgICAgLyogRGlzbWlzcyB0aGUgcHJvbXB0LiAqLwor ICAgICAgICAgICBwaW5jYiAocGluY2JfYXJnLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgIH0KKyAg ICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIGNoYXIgKnBpbjsKKyAgICAgICAgICAg Y2hhciAqcGludmFsdWU7CisgICAgICAgICAgIHNpemVfdCBwaW5sZW47CisgCisgICAgICAgICAg IGlmIChyZW1haW5pbmcgPj0gMyAmJiBwaW5fZnJvbV9jYWNoZSAoYXBwLCBjdHJsLCAzLCAmcGlu KSkKKyAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBy YyA9IHBpbmNiIChwaW5jYl9hcmcsIHByb21wdCwgJnBpbik7CisgICAgICAgICAgIHhmcmVlIChw cm9tcHQpOworICAgICAgICAgICBwcm9tcHQgPSBOVUxMOworICAgICAgICAgICBpZiAocmMpCisg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgbG9nX2luZm8gKF8oIlBJTiBjYWxsYmFjayBy ZXR1cm5lZCBlcnJvcjogJXNcbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJl cnJvciAocmMpKTsKKyAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAgICB9Cisg CisgICAgICAgICAgIGlmIChzdHJsZW4gKHBpbikgPCBtaW5sZW4pCisgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgbG9nX2Vycm9yIChfKCJQSU4gZm9yIENIViVkIGlzIHRvbyBzaG9ydDsi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtaW5pbXVtIGxlbmd0aCBpcyAlZFxuIiks IDMsIG1pbmxlbik7CisgICAgICAgICAgICAgICB3aXBlX2FuZF9mcmVlX3N0cmluZyAocGluKTsK KyAgICAgICAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfQkFEX1BJTik7CisgICAg ICAgICAgICAgfQorIAorICAgICAgICAgICByYyA9IHBpbjJoYXNoX2lmX2tkZiAoYXBwLCAzLCBw aW4sICZwaW52YWx1ZSwgJnBpbmxlbik7CisgICAgICAgICAgIGlmICghcmMpCisgICAgICAgICAg ICAgcmMgPSBpc283ODE2X3ZlcmlmeSAoYXBwX2dldF9zbG90IChhcHApLCAweDgzLCBwaW52YWx1 ZSwgcGlubGVuKTsKKyAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICBjYWNoZV9waW4g KGFwcCwgY3RybCwgMywgcGluKTsKKyAgICAgICAgICAgd2lwZV9hbmRfZnJlZV9zdHJpbmcgKHBp bik7CisgICAgICAgICAgIHdpcGVfYW5kX2ZyZWUgKHBpbnZhbHVlLCBwaW5sZW4pOworICAgICAg ICAgfQorIAorICAgICAgIGlmIChyYykKKyAgICAgICAgIHsKKyAgICAgICAgICAgbG9nX2Vycm9y IChfKCJ2ZXJpZnkgQ0hWJWQgZmFpbGVkOiAlc1xuIiksIDMsIGdwZ19zdHJlcnJvciAocmMpKTsK KyAgICAgICAgICAgZmx1c2hfY2FjaGVfYWZ0ZXJfZXJyb3IgKGFwcCk7CisgICAgICAgICAgIHJl dHVybiByYzsKKyAgICAgICAgIH0KKyAgICAgICBhcHAtPmRpZF9jaHYzID0gMTsKKyAgICAgfQor IAorICAgcmV0dXJuIHJjOworIH0KKyAKKyAKKyAvKiBIYW5kbGUgdGhlIFNFVEFUVFIgb3BlcmF0 aW9uLiBBbGwgYXJndW1lbnRzIGFyZSBhbHJlYWR5IGJhc2ljYWxseQorICAgIGNoZWNrZWQuICov Cisgc3RhdGljIGdwZ19lcnJvcl90CisgZG9fc2V0YXR0ciAoYXBwX3QgYXBwLCBjdHJsX3QgY3Ry bCwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICBncGdfZXJyb3JfdCAoKnBpbmNiKSh2 b2lkKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKSwKKyAgICAgICAgICAgICB2b2lkICpwaW5jYl9h cmcsCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1 ZWxlbikKKyB7CisgICBncGdfZXJyb3JfdCByYzsKKyAgIGludCBpZHg7CisgICBzdGF0aWMgc3Ry dWN0IHsKKyAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgaW50IHRhZzsKKyAgICAgaW50IGZs dXNoX3RhZzsgIC8qIFRoZSB0YWcgd2hpY2ggbmVlZHMgdG8gYmUgZmx1c2hlZCBvciAwLiAqLwor ICAgICBpbnQgbmVlZF9jaHY7CisgICAgIGludCBzcGVjaWFsOworICAgICB1bnNpZ25lZCBpbnQg bmVlZF92MjoxOworICAgICB1bnNpZ25lZCBpbnQgbmVlZF92MzoxOworICAgfSB0YWJsZVtdID0g eworICAgICB7ICJESVNQLU5BTUUiLCAgICAweDAwNUIsIDAsICAgICAgMyB9LAorICAgICB7ICJM T0dJTi1EQVRBIiwgICAweDAwNUUsIDAsICAgICAgMywgMiB9LAorICAgICB7ICJESVNQLUxBTkci LCAgICAweDVGMkQsIDAsICAgICAgMyB9LAorICAgICB7ICJESVNQLVNFWCIsICAgICAweDVGMzUs IDAsICAgICAgMyB9LAorICAgICB7ICJQVUJLRVktVVJMIiwgICAweDVGNTAsIDAsICAgICAgMyB9 LAorICAgICB7ICJDSFYtU1RBVFVTLTEiLCAweDAwQzQsIDAsICAgICAgMywgMSB9LAorICAgICB7 ICJDQS1GUFItMSIsICAgICAweDAwQ0EsIDB4MDBDNiwgMyB9LAorICAgICB7ICJDQS1GUFItMiIs ICAgICAweDAwQ0IsIDB4MDBDNiwgMyB9LAorICAgICB7ICJDQS1GUFItMyIsICAgICAweDAwQ0Ms IDB4MDBDNiwgMyB9LAorICAgICB7ICJQUklWQVRFLURPLTEiLCAweDAxMDEsIDAsICAgICAgMiB9 LAorICAgICB7ICJQUklWQVRFLURPLTIiLCAweDAxMDIsIDAsICAgICAgMyB9LAorICAgICB7ICJQ UklWQVRFLURPLTMiLCAweDAxMDMsIDAsICAgICAgMiB9LAorICAgICB7ICJQUklWQVRFLURPLTQi LCAweDAxMDQsIDAsICAgICAgMyB9LAorICAgICB7ICJDRVJULTEiLCAgICAgICAweDdGMjEsIDAs ICAgICAgMywxMSwgMSwgMSB9LAorICAgICB7ICJDRVJULTIiLCAgICAgICAweDdGMjEsIDAsICAg ICAgMywxMiwgMSwgMSB9LAorICAgICB7ICJDRVJULTMiLCAgICAgICAweDdGMjEsIDAsICAgICAg MywgMCwgMSB9LAorICAgICB7ICJTTS1LRVktRU5DIiwgICAweDAwRDEsIDAsICAgICAgMywgMCwg MSB9LAorICAgICB7ICJTTS1LRVktTUFDIiwgICAweDAwRDIsIDAsICAgICAgMywgMCwgMSB9LAor ICAgICB7ICJLRVktQVRUUiIsICAgICAwLCAgICAgIDAsICAgICAgMCwgMywgMSB9LAorICAgICB7 ICJBRVNLRVkiLCAgICAgICAweDAwRDUsIDAsICAgICAgMywgMCwgMSB9LAorICAgICB7ICJVSUYt MSIsICAgICAgICAweDAwRDYsIDAsICAgICAgMywgNSwgMSB9LAorICAgICB7ICJVSUYtMiIsICAg ICAgICAweDAwRDcsIDAsICAgICAgMywgNSwgMSB9LAorICAgICB7ICJVSUYtMyIsICAgICAgICAw eDAwRDgsIDAsICAgICAgMywgNSwgMSB9LAorICAgICB7ICJLREYiLCAgICAgICAgICAweDAwRjks IDAsICAgICAgMCwgNCwgMSB9LAorICAgICB7IE5VTEwsIDAgfQorICAgfTsKKyAgIGludCBleG1v ZGU7CisgCisgICBmb3IgKGlkeD0wOyB0YWJsZVtpZHhdLm5hbWUgJiYgc3RyY21wICh0YWJsZVtp ZHhdLm5hbWUsIG5hbWUpOyBpZHgrKykKKyAgICAgOworICAgaWYgKCF0YWJsZVtpZHhdLm5hbWUp CisgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX05BTUUpOworICAgaWYgKHRhYmxl W2lkeF0ubmVlZF92MiAmJiAhYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MikKKyAgICAgcmV0 dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9OT1RfU1VQUE9SVEVEKTsKKyAgIGlmICh0YWJsZVtpZHhd Lm5lZWRfdjMgJiYgIWFwcC0+YXBwX2xvY2FsLT5leHRjYXAuaXNfdjMpCisgICAgIHJldHVybiBn cGdfZXJyb3IgKEdQR19FUlJfTk9UX1NVUFBPUlRFRCk7CisgCisgICBpZiAodGFibGVbaWR4XS5z cGVjaWFsID09IDUgJiYgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5oYXNfYnV0dG9uID09IDApCisg ICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX09CSik7CisgCisgICBpZiAodGFibGVb aWR4XS5zcGVjaWFsID09IDMpCisgICAgIHJldHVybiBjaGFuZ2Vfa2V5YXR0cl9mcm9tX3N0cmlu ZyAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUsIHZhbHVlbGVuKTsKKyAKKyAgIHN3aXRjaCAodGFibGVbaWR4XS5u ZWVkX2NodikKKyAgICAgeworICAgICBjYXNlIDI6CisgICAgICAgcmMgPSB2ZXJpZnlfY2h2MiAo YXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSAz OgorICAgICAgIHJjID0gdmVyaWZ5X2NodjMgKGFwcCwgY3RybCwgcGluY2IsIHBpbmNiX2FyZyk7 CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgcmMgPSAwOworICAgICB9Cisg ICBpZiAocmMpCisgICAgIHJldHVybiByYzsKKyAKKyAgIC8qIEZsdXNoIHRoZSBjYWNoZSBiZWZv cmUgd3JpdGluZyBpdCwgc28gdGhhdCB0aGUgbmV4dCBnZXQgb3BlcmF0aW9uCisgICAgICB3aWxs IHJlcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIGFuZCB0aHVzIGdldCBzeW5jZWQgaW4gY2Fz ZSBvZgorICAgICAgZXJyb3JzIChlLmcuIGRhdGEgdHJ1bmNhdGVkIGJ5IHRoZSBjYXJkKS4gKi8K KyAgIGZsdXNoX2NhY2hlX2l0ZW0gKGFwcCwgdGFibGVbaWR4XS5mbHVzaF90YWc/IHRhYmxlW2lk eF0uZmx1c2hfdGFnCisgICAgICAgICAgICAgICAgICAgICAvKiAqLyAgICAgICAgICAgICAgICAg ICAgOiB0YWJsZVtpZHhdLnRhZyk7CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAu ZXh0X2xjX2xlICYmIHZhbHVlbGVuID4gMjU0KQorICAgICBleG1vZGUgPSAxOyAgICAvKiBVc2Ug ZXh0ZW5kZWQgbGVuZ3RoIHcvbyBhIGxpbWl0LiAgKi8KKyAgIGVsc2UgaWYgKGFwcC0+YXBwX2xv Y2FsLT5jYXJkY2FwLmNtZF9jaGFpbmluZyAmJiB2YWx1ZWxlbiA+IDI1NCkKKyAgICAgZXhtb2Rl ID0gLTI1NDsgLyogQ29tbWFuZCBjaGFpbmluZyB3aXRoIG1heC4gMjU0IGJ5dGVzLiAgKi8KKyAg IGVsc2UKKyAgICAgZXhtb2RlID0gMDsKKyAKKyAgIGlmICh0YWJsZVtpZHhdLnNwZWNpYWwgPT0g NCkKKyAgICAgeworICAgICAgIGlmIChBUFBfQ0FSRChhcHApLT5jYXJkdHlwZSA9PSBDQVJEVFlQ RV9ZVUJJS0VZCisgICAgICAgICAgIHx8IEFQUF9DQVJEKGFwcCktPmNhcmR0eXBlID09IENBUkRU WVBFX0dOVUspCisgICAgICAgICB7CisgICAgICAgICAgIHJjID0gdmVyaWZ5X2NodjMgKGFwcCwg Y3RybCwgcGluY2IsIHBpbmNiX2FyZyk7CisgICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAg ICByZXR1cm4gcmM7CisgCisgICAgICAgICAgIGlmICh2YWx1ZWxlbiA9PSAzCisgICAgICAgICAg ICAgICAmJiBBUFBfQ0FSRChhcHApLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9HTlVLKQorICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgIHZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgICAgIHZh bHVlbGVuID0gMDsKKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAgIGNhY2hlX3BpbiAoYXBw LCBjdHJsLCAxLCBOVUxMKTsKKyAgICAgICAgICAgY2FjaGVfcGluIChhcHAsIGN0cmwsIDIsIE5V TEwpOworICAgICAgICAgICBjYWNoZV9waW4gKGFwcCwgY3RybCwgMywgTlVMTCk7CisgICAgICAg ICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICBjaGFyICpvbGRwaW52YWx1 ZSA9IE5VTEw7CisgICAgICAgICAgIGNoYXIgKmJ1ZmZlcjEgPSBOVUxMOworICAgICAgICAgICBz aXplX3QgYnVmZmVybGVuMTsKKyAgICAgICAgICAgY29uc3QgY2hhciAqdSwgKmE7CisgICAgICAg ICAgIHNpemVfdCB1bGVuLCBhbGVuOworIAorICAgICAgICAgICBpZiAodmFsdWVsZW4gPT0gMykK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICB1ID0gIjEyMzQ1NiI7CisgICAgICAgICAg ICAgICBhID0gIjEyMzQ1Njc4IjsKKyAgICAgICAgICAgICAgIHVsZW4gPSA2OworICAgICAgICAg ICAgICAgYWxlbiA9IDg7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlIGlmICh2YWx1 ZWxlbiA9PSBLREZfREFUQV9MRU5HVEhfTUFYKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgIHUgPSAoY29uc3QgY2hhciAqKXZhbHVlICsgNDQ7CisgICAgICAgICAgICAgICBhID0gdSAr IDM0OworICAgICAgICAgICAgICAgdWxlbiA9IGFsZW4gPSAzMjsKKyAgICAgICAgICAgICB9Cisg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lO Vl9PQkopOworIAorICAgICAgICAgICBpZiAoIXBpbl9mcm9tX2NhY2hlIChhcHAsIGN0cmwsIDMs ICZvbGRwaW52YWx1ZSkpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY2hhciAqcHJv bXB0OworIAorICAgICAgICAgICAgICAgcmMgPSBidWlsZF9lbnRlcl9hZG1pbl9waW5fcHJvbXB0 IChhcHAsICZwcm9tcHQsIE5VTEwpOworICAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAg ICAgICAgICByZXR1cm4gcmM7CisgCisgICAgICAgICAgICAgICByYyA9IHBpbmNiIChwaW5jYl9h cmcsIHByb21wdCwgJm9sZHBpbnZhbHVlKTsKKyAgICAgICAgICAgICAgIGlmIChyYykKKyAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIGxvZ19pbmZvIChfKCJQSU4gY2FsbGJh Y2sgcmV0dXJuZWQgZXJyb3I6ICVzXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3BnX3N0cmVycm9yIChyYykpOworICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgcmMgPSBwaW4yaGFz aF9pZl9rZGYgKGFwcCwgMywgb2xkcGludmFsdWUsICZidWZmZXIxLCAmYnVmZmVybGVuMSk7Cisg ICAgICAgICAgIGlmICghcmMpCisgICAgICAgICAgICAgcmMgPSBpc283ODE2X2NoYW5nZV9yZWZl cmVuY2VfZGF0YSAoYXBwX2dldF9zbG90IChhcHApLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyMSwgYnVmZmVybGVuMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLCBhbGVuKTsKKyAgICAgICAg ICAgaWYgKCFyYykKKyAgICAgICAgICAgICByYyA9IGlzbzc4MTZfdmVyaWZ5IChhcHBfZ2V0X3Ns b3QgKGFwcCksIDB4ODMsIGEsIGFsZW4pOworICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAg ICAgIGNhY2hlX3BpbiAoYXBwLCBjdHJsLCAzLCAiMTIzNDU2NzgiKTsKKyAKKyAgICAgICAgICAg aWYgKCFyYykKKyAgICAgICAgICAgICByYyA9IGlzbzc4MTZfcmVzZXRfcmV0cnlfY291bnRlciAo YXBwX2dldF9zbG90IChhcHApLCAweDgxLCB1LCB1bGVuKTsKKyAgICAgICAgICAgaWYgKCFyYykK KyAgICAgICAgICAgICBjYWNoZV9waW4gKGFwcCwgY3RybCwgMSwgIjEyMzQ1NiIpOworIAorICAg ICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgIHJjID0gaXNvNzgxNl9wdXRfZGF0YSAoYXBw X2dldF9zbG90IChhcHApLCAwLCAweEQzLCBOVUxMLCAwKTsKKyAKKyAgICAgICAgICAgd2lwZV9h bmRfZnJlZSAoYnVmZmVyMSwgYnVmZmVybGVuMSk7CisgICAgICAgICAgIHdpcGVfYW5kX2ZyZWVf c3RyaW5nIChvbGRwaW52YWx1ZSk7CisgICAgICAgICB9CisgCisgICAgICAgLyogRmx1c2ggdGhl IGNhY2hlIGFnYWluLCBiZWNhdXNlIHBpbjJoYXNoX2lmX2tkZiB1c2VzIHRoZSBETy4gICovCisg ICAgICAgZmx1c2hfY2FjaGVfaXRlbSAoYXBwLCAweDAwRjkpOworICAgICB9CisgCisgCisgICBp ZiAodGFibGVbaWR4XS5zcGVjaWFsID09IDExIHx8IHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAxMikg LyogQ0VSVC0xIG9yIC0yICovCisgICAgIHsKKyAgICAgICByYyA9IGlzbzc4MTZfc2VsZWN0X2Rh dGEgKGFwcF9nZXRfc2xvdCAoYXBwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAxMT8gMiA6IDEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0YWJsZVtpZHhdLnRhZyk7CisgICAgICAgaWYgKCFyYykKKyAgICAgICAgIHsK KyAgICAgICAgICAgcmMgPSBpc283ODE2X3B1dF9kYXRhIChhcHBfZ2V0X3Nsb3QgKGFwcCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhtb2RlLCB0YWJsZVtpZHhdLnRhZywg dmFsdWUsIHZhbHVlbGVuKTsKKyAgICAgICAgICAgLyogV2UgYmV0dGVyIHJlc2V0IHRoZSBjdXJE Ty4gICovCisgICAgICAgICAgIGlzbzc4MTZfc2VsZWN0X2RhdGEgKGFwcF9nZXRfc2xvdCAoYXBw KSwgMCwgdGFibGVbaWR4XS50YWcpOworICAgICAgICAgfQorICAgICB9CisgICBlbHNlICAvKiBT dGFuZGFyZC4gICovCisgICAgIHJjID0gaXNvNzgxNl9wdXRfZGF0YSAoYXBwX2dldF9zbG90IChh cHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4bW9kZSwgdGFibGVbaWR4XS50YWcs IHZhbHVlLCB2YWx1ZWxlbik7CisgICBpZiAocmMpCisgICAgIGxvZ19lcnJvciAoImZhaWxlZCB0 byBzZXQgJyVzJzogJXNcbiIsIHRhYmxlW2lkeF0ubmFtZSwgZ3BnX3N0cmVycm9yIChyYykpOwor IAorICAgaWYgKHRhYmxlW2lkeF0uc3BlY2lhbCA9PSAxKQorICAgICBhcHAtPmZvcmNlX2NodjEg PSAodmFsdWVsZW4gJiYgKnZhbHVlID09IDApOworICAgZWxzZSBpZiAodGFibGVbaWR4XS5zcGVj aWFsID09IDIpCisgICAgIHBhcnNlX2xvZ2luX2RhdGEgKGFwcCk7CisgICBlbHNlIGlmICh0YWJs ZVtpZHhdLnNwZWNpYWwgPT0gNCkKKyAgICAgeworICAgICAgIGFwcC0+ZGlkX2NodjEgPSAwOwor ICAgICAgIGFwcC0+ZGlkX2NodjIgPSAwOworICAgICAgIGFwcC0+ZGlkX2NodjMgPSAwOworIAor ICAgICAgIGlmICgodmFsdWVsZW4gPT0gS0RGX0RBVEFfTEVOR1RIX01JTiB8fCB2YWx1ZWxlbiA9 PSBLREZfREFUQV9MRU5HVEhfTUFYKQorICAgICAgICAgICAmJiAodmFsdWVbMl0gPT0gMHgwMykp CisgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+cGlucGFkLmRpc2FibGVkID0gMTsKKyAgICAgICBl bHNlCisgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+cGlucGFkLmRpc2FibGVkID0gMDsKKyAgICAg fQorIAorICAgcmV0dXJuIHJjOworIH0KKyAKKyAKKyAvKiBIYW5kbGUgdGhlIFdSSVRFQ0VSVCBj b21tYW5kIGZvciBPcGVuUEdQLiAgVGhpcyB3cml0ZXMgdGhlIHN0YW5kYXJkCisgICogY2VydGlm aWNhdGUgdG8gdGhlIGNhcmQ7IENFUlRJRCBuZWVkcyB0byBiZSBzZXQgdG8gIk9QRU5QR1AuMyIu CisgICogUElOQ0IgYW5kIFBJTkNCX0FSRyBhcmUgdGhlIHVzdWFsIGFyZ3VtZW50cyBmb3IgdGhl IHBpbmVudHJ5CisgICogY2FsbGJhY2suICAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGRvX3dy aXRlY2VydCAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmNlcnRpZHN0ciwKKyAgICAgICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGluY2IpKHZvaWQq LCBjb25zdCBjaGFyICosIGNoYXIgKiopLAorICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJn LAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2VydGRhdGEsIHNpemVfdCBj ZXJ0ZGF0YWxlbikKKyB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgaWYgKCFhc2NpaV9zdHJj YXNlY21wIChjZXJ0aWRzdHIsICJPUEVOUEdQLjMiKSkKKyAgICAgbmFtZSA9ICJDRVJULTMiOwor ICAgZWxzZSBpZiAoIWFzY2lpX3N0cmNhc2VjbXAgKGNlcnRpZHN0ciwgIk9QRU5QR1AuMiIpKQor ICAgICBuYW1lID0gIkNFUlQtMiI7CisgICBlbHNlIGlmICghYXNjaWlfc3RyY2FzZWNtcCAoY2Vy dGlkc3RyLCAiT1BFTlBHUC4xIikpCisgICAgIG5hbWUgPSAiQ0VSVC0xIjsKKyAgIGVsc2UKKyAg ICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworIAorICAgaWYgKCFjZXJ0ZGF0 YSB8fCAhY2VydGRhdGFsZW4pCisgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0FS Ryk7CisgICBpZiAoIWFwcC0+YXBwX2xvY2FsLT5leHRjYXAuaXNfdjIpCisgICAgIHJldHVybiBn cGdfZXJyb3IgKEdQR19FUlJfTk9UX1NVUFBPUlRFRCk7CisgICAvKiBkb19zZXRhdHRyIGNoZWNr cyB0aGF0IENFUlQtMiBhbmQgQ0VSVC0xIHJlcXVpcmVzIGEgdjMgY2FyZC4gICovCisgCisgICBp ZiAoY2VydGRhdGFsZW4gPiBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLm1heF9jZXJ0bGVuKQorICAg ICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX1RPT19MQVJHRSk7CisgICByZXR1cm4gZG9fc2V0 YXR0ciAoYXBwLCBjdHJsLCBuYW1lLCBwaW5jYiwgcGluY2JfYXJnLAorICAgICAgICAgICAgICAg ICAgICAgIGNlcnRkYXRhLCBjZXJ0ZGF0YWxlbik7CisgfQorIAorIAorIHN0YXRpYyBncGdfZXJy b3JfdAorIGNsZWFyX2Nodl9zdGF0dXMgKGFwcF90IGFwcCwgY3RybF90IGN0cmwsIGludCBjaHZu bykKKyB7CisgICB1bnNpZ25lZCBjaGFyIGFwZHVbNF07CisgICBncGdfZXJyb3JfdCBlcnI7Cisg CisgICBjYWNoZV9waW4gKGFwcCwgY3RybCwgY2h2bm8sIE5VTEwpOworIAorICAgaWYgKCFhcHAt PmFwcF9sb2NhbC0+ZXh0Y2FwLmlzX3YyKQorICAgICByZXR1cm4gR1BHX0VSUl9VTlNVUFBPUlRF RF9PUEVSQVRJT047CisgCisgICBhcGR1WzBdID0gMHgwMDsKKyAgIGFwZHVbMV0gPSBJU083ODE2 X1ZFUklGWTsKKyAgIGFwZHVbMl0gPSAweGZmOworICAgYXBkdVszXSA9IDB4ODArY2h2bm87Cisg CisgICBlcnIgPSBpc283ODE2X2FwZHVfZGlyZWN0IChhcHBfZ2V0X3Nsb3QgKGFwcCksIGFwZHUs IDQsIDAsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgaWYgKGVycikKKyAgICAgeworICAgICAgIGlm IChncGdfZXJyX2NvZGUgKGVycikgPT0gR1BHX0VSUl9JTlZfVkFMVUUpCisgICAgICAgICBlcnIg PSBncGdfZXJyb3IgKEdQR19FUlJfVU5TVVBQT1JURURfT1BFUkFUSU9OKTsKKyAgICAgICByZXR1 cm4gZXJyOworICAgICB9CisgCisgICBpZiAoY2h2bm8gPT0gMSkKKyAgICAgeworICAgICAgIGFw ZHVbM10rKzsKKyAgICAgICBlcnIgPSBpc283ODE2X2FwZHVfZGlyZWN0IChhcHBfZ2V0X3Nsb3Qg KGFwcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBkdSwgNCwgMCwgTlVM TCwgTlVMTCwgTlVMTCk7CisgICAgICAgYXBwLT5kaWRfY2h2MSA9IGFwcC0+ZGlkX2NodjIgPSAw OworICAgICB9CisgICBlbHNlIGlmIChjaHZubyA9PSAyKQorICAgICBhcHAtPmRpZF9jaHYyID0g MDsKKyAgIGVsc2UgaWYgKGNodm5vID09IDMpCisgICAgIGFwcC0+ZGlkX2NodjMgPSAwOworIAor ICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisgLyogSGFuZGxlIHRoZSBQQVNTV0QgY29tbWFuZC4g IFRoZSBmb2xsb3dpbmcgY29tYmluYXRpb25zIGFyZQorICAgIHBvc3NpYmxlOgorIAorICAgICBG bGFncyAgQ0hWTk8gVmVycy4gIERlc2NyaXB0aW9uCisgICAgIFJFU0VUICAgIDEgICAxICAgICAg VmVyaWZ5IENIVjMgYW5kIHNldCBhIG5ldyBDSFYxIGFuZCBDSFYyCisgICAgIFJFU0VUICAgIDEg ICAyICAgICAgVmVyaWZ5IFBXMyBhbmQgc2V0IGEgbmV3IFBXMS4KKyAgICAgUkVTRVQgICAgMiAg IDEgICAgICBWZXJpZnkgQ0hWMyBhbmQgc2V0IGEgbmV3IENIVjEgYW5kIENIVjIuCisgICAgIFJF U0VUICAgIDIgICAyICAgICAgVmVyaWZ5IFBXMyBhbmQgc2V0IGEgbmV3IFJlc2V0IENvZGUuCisg ICAgIFJFU0VUICAgIDMgICBhbnkgICAgUmV0dXJucyBHUEdfRVJSX0lOVl9JRC4KKyAgICAgIC0g ICAgICAgMSAgIDEgICAgICBWZXJpZnkgQ0hWMiBhbmQgc2V0IGEgbmV3IENIVjEgYW5kIENIVjIu CisgICAgICAtICAgICAgIDEgICAyICAgICAgVmVyaWZ5IFBXMSBhbmQgc2V0IGEgbmV3IFBXMS4K KyAgICAgIC0gICAgICAgMiAgIDEgICAgICBWZXJpZnkgQ0hWMiBhbmQgc2V0IGEgbmV3IENIVjEg YW5kIENIVjIuCisgICAgICAtICAgICAgIDIgICAyICAgICAgVmVyaWZ5IFJlc2V0IENvZGUgYW5k IHNldCBhIG5ldyBQVzEuCisgICAgICAtICAgICAgIDMgICBhbnkgICAgVmVyaWZ5IENIVjMvUFcz IGFuZCBzZXQgYSBuZXcgQ0hWMy9QVzMuCisgCisgICAgVGhlIENIVk5PIGNhbiBiZSBwcmVmaXhl ZCB3aXRoICJPUEVOUEdQLiIuCisgICovCisgc3RhdGljIGdwZ19lcnJvcl90CisgZG9fY2hhbmdl X3BpbiAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgIGNvbnN0IGNoYXIgKmNodm5vc3RyLAorICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKyAgICAgICAgICAgICAgICBncGdfZXJy b3JfdCAoKnBpbmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKSwKKyAgICAgICAgICAg ICAgICB2b2lkICpwaW5jYl9hcmcpCisgeworICAgaW50IHJjID0gMDsKKyAgIGludCBjaHZubzsK KyAgIGNoYXIgKnJlc2V0Y29kZSA9IE5VTEw7CisgICBjaGFyICpvbGRwaW52YWx1ZSA9IE5VTEw7 CisgICBjaGFyICpwaW52YWx1ZSA9IE5VTEw7CisgICBpbnQgcmVzZXRfbW9kZSA9ICEhKGZsYWdz ICYgQVBQX0NIQU5HRV9GTEFHX1JFU0VUKTsKKyAgIGludCBzZXRfcmVzZXRjb2RlID0gMDsKKyAg IHBpbmluZm9fdCBwaW5pbmZvOworICAgaW50IHVzZV9waW5wYWQgPSAwOworICAgaW50IG1pbmxl biA9IDY7CisgCisgICBpZiAoZGlnaXRwIChjaHZub3N0cikpCisgICAgIGNodm5vID0gYXRvaSAo Y2h2bm9zdHIpOworICAgZWxzZSBpZiAoIWFzY2lpX3N0cmNhc2VjbXAgKGNodm5vc3RyLCAiT1BF TlBHUC4xIikpCisgICAgIGNodm5vID0gMTsKKyAgIGVsc2UgaWYgKCFhc2NpaV9zdHJjYXNlY21w IChjaHZub3N0ciwgIk9QRU5QR1AuMiIpKQorICAgICBjaHZubyA9IDI7CisgICBlbHNlIGlmICgh YXNjaWlfc3RyY2FzZWNtcCAoY2h2bm9zdHIsICJPUEVOUEdQLjMiKSkKKyAgICAgY2h2bm8gPSAz OworICAgZWxzZQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9JRCk7CisgCisg ICBtZW1zZXQgKCZwaW5pbmZvLCAwLCBzaXplb2YgcGluaW5mbyk7CisgICBwaW5pbmZvLmZpeGVk bGVuID0gLTE7CisgICBwaW5pbmZvLm1pbmxlbiA9IG1pbmxlbjsKKyAKKyAgIC8qIEJldHRlciBj bGVhciBhbGwgdGhlIFBJTiBjYWNoZXMgZmlyc3QuICAqLworICAgY2FjaGVfcGluIChhcHAsIGN0 cmwsIDEsIE5VTEwpOworICAgY2FjaGVfcGluIChhcHAsIGN0cmwsIDIsIE5VTEwpOworICAgY2Fj aGVfcGluIChhcHAsIGN0cmwsIDMsIE5VTEwpOworIAorICAgaWYgKChmbGFncyAmIEFQUF9DSEFO R0VfRkxBR19DTEVBUikpCisgICAgIHJldHVybiBjbGVhcl9jaHZfc3RhdHVzIChhcHAsIGN0cmws IGNodm5vKTsKKyAKKyAgIGlmIChyZXNldF9tb2RlICYmIGNodm5vID09IDMpCisgICAgIHsKKyAg ICAgICByYyA9IGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworICAgICAgIGdvdG8gbGVhdmU7 CisgICAgIH0KKyAKKyAgIGlmICghYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MikKKyAgICAg eworICAgICAgIC8qIFZlcnNpb24gMSBjYXJkcy4gICovCisgCisgICAgICAgaWYgKHJlc2V0X21v ZGUgfHwgY2h2bm8gPT0gMykKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogV2UgYWx3YXlzIHJl cXVpcmUgdGhhdCB0aGUgUElOIGlzIGVudGVyZWQuICovCisgICAgICAgICAgIGFwcC0+ZGlkX2No djMgPSAwOworICAgICAgICAgICByYyA9IHZlcmlmeV9jaHYzIChhcHAsIGN0cmwsIHBpbmNiLCBw aW5jYl9hcmcpOworICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgZ290byBsZWF2ZTsK KyAgICAgICAgIH0KKyAgICAgICBlbHNlIGlmIChjaHZubyA9PSAxIHx8IGNodm5vID09IDIpCisg ICAgICAgICB7CisgICAgICAgICAgIC8qIE9uIGEgdjEueCBjYXJkIENIVjEgYW5kIENWSDIgc2hv dWxkIGFsd2F5cyBoYXZlIHRoZSBzYW1lCisgICAgICAgICAgICAgIHZhbHVlLCB0aHVzIHdlIGVu Zm9yY2UgaXQgaGVyZS4gICovCisgICAgICAgICAgIGludCBzYXZlX2ZvcmNlID0gYXBwLT5mb3Jj ZV9jaHYxOworIAorICAgICAgICAgICBhcHAtPmZvcmNlX2NodjEgPSAwOworICAgICAgICAgICBh cHAtPmRpZF9jaHYxID0gMDsKKyAgICAgICAgICAgYXBwLT5kaWRfY2h2MiA9IDA7CisgICAgICAg ICAgIHJjID0gdmVyaWZ5X2NodjIgKGFwcCwgY3RybCwgcGluY2IsIHBpbmNiX2FyZyk7CisgICAg ICAgICAgIGFwcC0+Zm9yY2VfY2h2MSA9IHNhdmVfZm9yY2U7CisgICAgICAgICAgIGlmIChyYykK KyAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgfQorICAgICAgIGVsc2UKKyAgICAg ICAgIHsKKyAgICAgICAgICAgcmMgPSBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0lEKTsKKyAgICAg ICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgIH0KKyAgICAgfQorICAgZWxzZQorICAgICB7Cisg ICAgICAgLyogVmVyc2lvbiAyIGNhcmRzLiAgKi8KKyAKKyAgICAgICBpZiAoIW9wdC5kaXNhYmxl X3BpbnBhZAorICAgICAgICAgICAmJiAhaXNvNzgxNl9jaGVja19waW5wYWQgKGFwcF9nZXRfc2xv dCAoYXBwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU083ODE2X0NI QU5HRV9SRUZFUkVOQ0VfREFUQSwgJnBpbmluZm8pCisgICAgICAgICAgICYmICFjaGVja19waW5w YWRfcmVxdWVzdCAoYXBwLCAmcGluaW5mbywgY2h2bm8gPT0gMykpCisgICAgICAgICB1c2VfcGlu cGFkID0gMTsKKyAKKyAgICAgICBpZiAocmVzZXRfbW9kZSkKKyAgICAgICAgIHsKKyAgICAgICAg ICAgLyogVG8gcmVzZXQgYSBQSU4gdGhlIEFkbWluIFBJTiBpcyByZXF1aXJlZC4gKi8KKyAgICAg ICAgICAgdXNlX3BpbnBhZCA9IDA7CisgICAgICAgICAgIGFwcC0+ZGlkX2NodjMgPSAwOworICAg ICAgICAgICByYyA9IHZlcmlmeV9jaHYzIChhcHAsIGN0cmwsIHBpbmNiLCBwaW5jYl9hcmcpOwor ICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAKKyAgICAgICAg ICAgaWYgKGNodm5vID09IDIpCisgICAgICAgICAgICAgc2V0X3Jlc2V0Y29kZSA9IDE7CisgICAg ICAgICB9CisgICAgICAgZWxzZSBpZiAoY2h2bm8gPT0gMSB8fCBjaHZubyA9PSAzKQorICAgICAg ICAgeworICAgICAgICAgICBpZiAoIXVzZV9waW5wYWQpCisgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgY2hhciAqcHJvbXB0YnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKnByb21wdDsKKyAKKyAgICAgICAgICAgICAgIGlmIChjaHZubyA9PSAzKQorICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgbWlubGVuID0gODsKKyAgICAgICAgICAgICAg ICAgICByYyA9IGJ1aWxkX2VudGVyX2FkbWluX3Bpbl9wcm9tcHQgKGFwcCwgJnByb21wdGJ1Ziwg TlVMTCk7CisgICAgICAgICAgICAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgICAgICAgICAg Z290byBsZWF2ZTsKKyAgICAgICAgICAgICAgICAgICBwcm9tcHQgPSBwcm9tcHRidWY7CisgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgcHJv bXB0ID0gXygifHxQbGVhc2UgZW50ZXIgdGhlIFBJTiIpOworICAgICAgICAgICAgICAgcmMgPSBw aW5jYiAocGluY2JfYXJnLCBwcm9tcHQsICZvbGRwaW52YWx1ZSk7CisgICAgICAgICAgICAgICB4 ZnJlZSAocHJvbXB0YnVmKTsKKyAgICAgICAgICAgICAgIHByb21wdGJ1ZiA9IE5VTEw7CisgICAg ICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICBsb2dfaW5mbyAoXygiUElOIGNhbGxiYWNrIHJldHVybmVkIGVycm9yOiAlc1xuIiksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdwZ19zdHJlcnJvciAocmMpKTsKKyAgICAgICAgICAg ICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAg ICBpZiAoc3RybGVuIChvbGRwaW52YWx1ZSkgPCBtaW5sZW4pCisgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICBsb2dfaW5mbyAoXygiUElOIGZvciBDSFYlZCBpcyB0b28gc2hv cnQ7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbWluaW11bSBsZW5ndGggaXMg JWRcbiIpLCBjaHZubywgbWlubGVuKTsKKyAgICAgICAgICAgICAgICAgICByYyA9IGdwZ19lcnJv ciAoR1BHX0VSUl9CQURfUElOKTsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgIGVsc2Ug aWYgKGNodm5vID09IDIpCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFRoZXJlIGlzIG5vIFBX MiBmb3IgdjIgY2FyZHMuICBXZSB1c2UgdGhpcyBjb25kaXRpb24gdG8KKyAgICAgICAgICAgICAg YWxsb3cgYSBQVyByZXNldCB1c2luZyB0aGUgUmVzZXQgQ29kZS4gICovCisgICAgICAgICAgIHZv aWQgKnJlbHB0cjsKKyAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CisgICAgICAgICAg IHNpemVfdCB2YWx1ZWxlbjsKKyAgICAgICAgICAgaW50IHJlbWFpbmluZzsKKyAKKyAgICAgICAg ICAgdXNlX3BpbnBhZCA9IDA7CisgICAgICAgICAgIG1pbmxlbiA9IDg7CisgICAgICAgICAgIHJl bHB0ciA9IGdldF9vbmVfZG8gKGFwcCwgMHgwMEM0LCAmdmFsdWUsICZ2YWx1ZWxlbiwgTlVMTCk7 CisgICAgICAgICAgIGlmICghcmVscHRyIHx8IHZhbHVlbGVuIDwgNykKKyAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICBsb2dfZXJyb3IgKF8oImVycm9yIHJldHJpZXZpbmcgQ0hWIHN0YXR1 cyBmcm9tIGNhcmRcbiIpKTsKKyAgICAgICAgICAgICAgIHhmcmVlIChyZWxwdHIpOworICAgICAg ICAgICAgICAgcmMgPSBncGdfZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICAgICAgICAgICAgICBn b3RvIGxlYXZlOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgcmVtYWluaW5nID0gdmFsdWVb NV07CisgICAgICAgICAgIHhmcmVlIChyZWxwdHIpOworICAgICAgICAgICBpZiAoIXJlbWFpbmlu ZykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBsb2dfZXJyb3IgKF8oIlJlc2V0IENv ZGUgbm90IG9yIG5vdCBhbnltb3JlIGF2YWlsYWJsZVxuIikpOworICAgICAgICAgICAgICAgcmMg PSBncGdfZXJyb3IgKEdQR19FUlJfQkFEX1BJTik7CisgICAgICAgICAgICAgICBnb3RvIGxlYXZl OworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgcmMgPSBwaW5jYiAocGluY2JfYXJnLAor ICAgICAgICAgICAgICAgICAgICAgICBfKCJ8fFBsZWFzZSBlbnRlciB0aGUgUmVzZXQgQ29kZSBm b3IgdGhlIGNhcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJnJlc2V0Y29kZSk7CisgICAg ICAgICAgIGlmIChyYykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBsb2dfaW5mbyAo XygiUElOIGNhbGxiYWNrIHJldHVybmVkIGVycm9yOiAlc1xuIiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsK KyAgICAgICAgICAgICB9CisgICAgICAgICAgIGlmIChzdHJsZW4gKHJlc2V0Y29kZSkgPCBtaW5s ZW4pCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgbG9nX2luZm8gKF8oIlJlc2V0IENv ZGUgaXMgdG9vIHNob3J0OyBtaW5pbXVtIGxlbmd0aCBpcyAlZFxuIiksCisgICAgICAgICAgICAg ICAgICAgICAgICAgbWlubGVuKTsKKyAgICAgICAgICAgICAgIHJjID0gZ3BnX2Vycm9yIChHUEdf RVJSX0JBRF9QSU4pOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICB9 CisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICByYyA9IGdw Z19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAg ICAgfQorICAgICB9CisgCisgICBpZiAoY2h2bm8gPT0gMykKKyAgICAgYXBwLT5kaWRfY2h2MyA9 IDA7CisgICBlbHNlCisgICAgIGFwcC0+ZGlkX2NodjEgPSBhcHAtPmRpZF9jaHYyID0gMDsKKyAK KyAgIGlmICghdXNlX3BpbnBhZCkKKyAgICAgeworICAgICAgIC8qIFRSQU5TTEFUT1JTOiBEbyBu b3QgdHJhbnNsYXRlIHRoZSAifCp8IiBwcmVmaXhlcyBidXQKKyAgICAgICAgICBrZWVwIGl0IGF0 IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLiAgV2UgbmVlZCB0aGlzIGVsc2V3aGVyZQorICAgICAg ICAgIHRvIGdldCBzb21lIGluZm9zIG9uIHRoZSBzdHJpbmcuICovCisgICAgICAgcmMgPSBwaW5j YiAocGluY2JfYXJnLCBzZXRfcmVzZXRjb2RlPyBfKCJ8Uk58TmV3IFJlc2V0IENvZGUiKSA6Cisg ICAgICAgICAgICAgICAgICAgY2h2bm8gPT0gMz8gXygifEFOfE5ldyBBZG1pbiBQSU4iKSA6IF8o InxOfE5ldyBQSU4iKSwKKyAgICAgICAgICAgICAgICAgICAmcGludmFsdWUpOworICAgICAgIGlm IChyYyB8fCBwaW52YWx1ZSA9PSBOVUxMKQorICAgICAgICAgeworICAgICAgICAgICBsb2dfZXJy b3IgKF8oImVycm9yIGdldHRpbmcgbmV3IFBJTjogJXNcbiIpLCBncGdfc3RyZXJyb3IgKHJjKSk7 CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgICAgIH0KKyAKKyAKKyAgIGlm IChyZXNldGNvZGUpCisgICAgIHsKKyAgICAgICBjaGFyICpyZXN1bHQxID0gTlVMTDsKKyAgICAg ICBjaGFyICpyZXN1bHQyID0gTlVMTDsKKyAgICAgICBjaGFyICpidWZmZXIgPSBOVUxMOworICAg ICAgIHNpemVfdCByZXN1bHRsZW4xLCByZXN1bHRsZW4yPTAsIGJ1ZmZlcmxlbj0wOworIAorICAg ICAgIHJjID0gcGluMmhhc2hfaWZfa2RmIChhcHAsIDAsIHJlc2V0Y29kZSwgJnJlc3VsdDEsICZy ZXN1bHRsZW4xKTsKKyAgICAgICBpZiAoIXJjKQorICAgICAgICAgcmMgPSBwaW4yaGFzaF9pZl9r ZGYgKGFwcCwgMSwgcGludmFsdWUsICZyZXN1bHQyLCAmcmVzdWx0bGVuMik7CisgICAgICAgaWYg KCFyYykKKyAgICAgICAgIHsKKyAgICAgICAgICAgYnVmZmVybGVuID0gcmVzdWx0bGVuMSArIHJl c3VsdGxlbjI7CisgICAgICAgICAgIGJ1ZmZlciA9IHh0cnltYWxsb2MgKGJ1ZmZlcmxlbik7Cisg ICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgIHJjID0gZ3BnX2Vycm9yX2Zyb21f c3lzZXJyb3IgKCk7CisgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICBtZW1jcHkgKGJ1ZmZlciwgcmVzdWx0MSwgcmVzdWx0bGVuMSk7CisgICAgICAgICAgICAg ICBtZW1jcHkgKGJ1ZmZlcityZXN1bHRsZW4xLCByZXN1bHQyLCByZXN1bHRsZW4yKTsKKyAgICAg ICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgaWYgKCFyYykKKyAgICAgICAgIHJjID0gaXNv NzgxNl9yZXNldF9yZXRyeV9jb3VudGVyX3dpdGhfcmMgKGFwcF9nZXRfc2xvdCAoYXBwKSwgMHg4 MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 ZmZlciwgYnVmZmVybGVuKTsKKyAgICAgICB3aXBlX2FuZF9mcmVlIChyZXN1bHQxLCByZXN1bHRs ZW4xKTsKKyAgICAgICB3aXBlX2FuZF9mcmVlIChyZXN1bHQyLCByZXN1bHRsZW4yKTsKKyAgICAg ICB3aXBlX2FuZF9mcmVlIChidWZmZXIsIGJ1ZmZlcmxlbik7CisgICAgIH0KKyAgIGVsc2UgaWYg KHNldF9yZXNldGNvZGUpCisgICAgIHsKKyAgICAgICBzaXplX3QgYnVmZmVybGVuID0gc3RybGVu IChwaW52YWx1ZSk7CisgCisgICAgICAgaWYgKGJ1ZmZlcmxlbiAhPSAwICYmIGJ1ZmZlcmxlbiA8 IDgpCisgICAgICAgICB7CisgICAgICAgICAgIGxvZ19lcnJvciAoXygiUmVzZXQgQ29kZSBpcyB0 b28gc2hvcnQ7IG1pbmltdW0gbGVuZ3RoIGlzICVkXG4iKSwgOCk7CisgICAgICAgICAgIHJjID0g Z3BnX2Vycm9yIChHUEdfRVJSX0JBRF9QSU4pOworICAgICAgICAgfQorICAgICAgIGVsc2UKKyAg ICAgICAgIHsKKyAgICAgICAgICAgY2hhciAqYnVmZmVyID0gTlVMTDsKKyAKKyAgICAgICAgICAg cmMgPSBwaW4yaGFzaF9pZl9rZGYgKGFwcCwgMCwgcGludmFsdWUsICZidWZmZXIsICZidWZmZXJs ZW4pOworICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgIHJjID0gaXNvNzgxNl9wdXRf ZGF0YSAoYXBwX2dldF9zbG90IChhcHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgMHhEMywgYnVmZmVyLCBidWZmZXJsZW4pOworIAorICAgICAgICAgICB3aXBlX2Fu ZF9mcmVlIChidWZmZXIsIGJ1ZmZlcmxlbik7CisgICAgICAgICB9CisgICAgIH0KKyAgIGVsc2Ug aWYgKHJlc2V0X21vZGUpCisgICAgIHsKKyAgICAgICBjaGFyICpidWZmZXIgPSBOVUxMOworICAg ICAgIHNpemVfdCBidWZmZXJsZW47CisgCisgICAgICAgcmMgPSBwaW4yaGFzaF9pZl9rZGYgKGFw cCwgMSwgcGludmFsdWUsICZidWZmZXIsICZidWZmZXJsZW4pOworICAgICAgIGlmICghcmMpCisg ICAgICAgICByYyA9IGlzbzc4MTZfcmVzZXRfcmV0cnlfY291bnRlciAoYXBwX2dldF9zbG90IChh cHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODEsIGJ1 ZmZlciwgYnVmZmVybGVuKTsKKyAgICAgICBpZiAoIXJjICYmICFhcHAtPmFwcF9sb2NhbC0+ZXh0 Y2FwLmlzX3YyKQorICAgICAgICAgcmMgPSBpc283ODE2X3Jlc2V0X3JldHJ5X2NvdW50ZXIgKGFw cF9nZXRfc2xvdCAoYXBwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDgyLCBidWZmZXIsIGJ1ZmZlcmxlbik7CisgCisgICAgICAgd2lwZV9hbmRfZnJlZSAo YnVmZmVyLCBidWZmZXJsZW4pOworICAgICB9CisgICBlbHNlIGlmICghYXBwLT5hcHBfbG9jYWwt PmV4dGNhcC5pc192MikKKyAgICAgeworICAgICAgIC8qIFZlcnNpb24gMSBjYXJkcy4gICovCisg ICAgICAgaWYgKGNodm5vID09IDEgfHwgY2h2bm8gPT0gMikKKyAgICAgICAgIHsKKyAgICAgICAg ICAgcmMgPSBpc283ODE2X2NoYW5nZV9yZWZlcmVuY2VfZGF0YSAoYXBwX2dldF9zbG90IChhcHAp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxLCBO VUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw aW52YWx1ZSwgc3RybGVuIChwaW52YWx1ZSkpOworICAgICAgICAgICBpZiAoIXJjKQorICAgICAg ICAgICAgIHJjID0gaXNvNzgxNl9jaGFuZ2VfcmVmZXJlbmNlX2RhdGEgKGFwcF9nZXRfc2xvdCAo YXBwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw eDgyLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBpbnZhbHVlLCBzdHJsZW4gKHBpbnZhbHVlKSk7CisgICAgICAgICB9CisgICAgICAg ZWxzZSAvKiBDSFZOTyA9PSAzICovCisgICAgICAgICB7CisgICAgICAgICAgIHJjID0gaXNvNzgx Nl9jaGFuZ2VfcmVmZXJlbmNlX2RhdGEgKGFwcF9nZXRfc2xvdCAoYXBwKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCArIGNodm5vLCBOVUxMLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW52YWx1 ZSwgc3RybGVuIChwaW52YWx1ZSkpOworICAgICAgICAgfQorICAgICB9CisgICBlbHNlCisgICAg IHsKKyAgICAgICAvKiBWZXJzaW9uIDIgY2FyZHMuICAqLworICAgICAgIGxvZ19hc3NlcnQgKGNo dm5vID09IDEgfHwgY2h2bm8gPT0gMyk7CisgCisgICAgICAgaWYgKHVzZV9waW5wYWQpCisgICAg ICAgICB7CisgICAgICAgICAgIHJjID0gcGluY2IgKHBpbmNiX2FyZywKKyAgICAgICAgICAgICAg ICAgICAgICAgY2h2bm8gPT0gMyA/CisgICAgICAgICAgICAgICAgICAgICAgIF8oInx8UGxlYXNl IGVudGVyIHRoZSBBZG1pbiBQSU4gYW5kIE5ldyBBZG1pbiBQSU4iKSA6CisgICAgICAgICAgICAg ICAgICAgICAgIF8oInx8UGxlYXNlIGVudGVyIHRoZSBQSU4gYW5kIE5ldyBQSU4iKSwgTlVMTCk7 CisgICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBsb2df aW5mbyAoXygiUElOIGNhbGxiYWNrIHJldHVybmVkIGVycm9yOiAlc1xuIiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgZ3BnX3N0cmVycm9yIChyYykpOworICAgICAgICAgICAgICAgZ290byBs ZWF2ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIHJjID0gaXNvNzgxNl9jaGFuZ2VfcmVm ZXJlbmNlX2RhdGFfa3AgKGFwcF9nZXRfc2xvdCAoYXBwKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCArIGNodm5vLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGluaW5mbyk7CisgICAg ICAgICAgIHBpbmNiIChwaW5jYl9hcmcsIE5VTEwsIE5VTEwpOyAvKiBEaXNtaXNzIHRoZSBwcm9t cHQuICovCisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICBj aGFyICpidWZmZXIxID0gTlVMTDsKKyAgICAgICAgICAgY2hhciAqYnVmZmVyMiA9IE5VTEw7Cisg ICAgICAgICAgIHNpemVfdCBidWZmZXJsZW4xLCBidWZmZXJsZW4yID0gMDsKKyAKKyAgICAgICAg ICAgcmMgPSBwaW4yaGFzaF9pZl9rZGYgKGFwcCwgY2h2bm8sIG9sZHBpbnZhbHVlLCAmYnVmZmVy MSwgJmJ1ZmZlcmxlbjEpOworICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgIHJjID0g cGluMmhhc2hfaWZfa2RmIChhcHAsIGNodm5vLCBwaW52YWx1ZSwgJmJ1ZmZlcjIsICZidWZmZXJs ZW4yKTsKKyAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICByYyA9IGlzbzc4MTZfY2hh bmdlX3JlZmVyZW5jZV9kYXRhIChhcHBfZ2V0X3Nsb3QgKGFwcCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCArIGNodm5vLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjEsIGJ1ZmZlcmxl bjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm ZmVyMiwgYnVmZmVybGVuMik7CisgICAgICAgICAgIHdpcGVfYW5kX2ZyZWUgKGJ1ZmZlcjEsIGJ1 ZmZlcmxlbjEpOworICAgICAgICAgICB3aXBlX2FuZF9mcmVlIChidWZmZXIyLCBidWZmZXJsZW4y KTsKKyAgICAgICAgIH0KKyAgICAgfQorIAorICAgd2lwZV9hbmRfZnJlZV9zdHJpbmcgKHBpbnZh bHVlKTsKKyAgIGlmIChyYykKKyAgICAgZmx1c2hfY2FjaGVfYWZ0ZXJfZXJyb3IgKGFwcCk7Cisg CisgIGxlYXZlOgorICAgd2lwZV9hbmRfZnJlZV9zdHJpbmcgKHJlc2V0Y29kZSk7CisgICB3aXBl X2FuZF9mcmVlX3N0cmluZyAob2xkcGludmFsdWUpOworICAgcmV0dXJuIHJjOworIH0KKyAKKyAK KyAvKiBDaGVjayB3aGV0aGVyIGEga2V5IGFscmVhZHkgZXhpc3RzLiAgS0VZSURYIGlzIHRoZSBp bmRleCBvZiB0aGUga2V5CisgICAgKDAuLjIpLiAgSWYgRk9SQ0UgaXMgVFJVRSBhIGRpYWdub3Np dGljIHdpbGwgYmUgcHJpbnRlZCBidXQgbm8KKyAgICBlcnJvciByZXR1cm5lZCBpZiB0aGUga2V5 IGFscmVhZHkgZXhpc3RzLiAgVGhlIGZsYWcgR0VORVJBVElORyBpcworICAgIG9ubHkgdXNlZCB0 byBwcmludCBjb3JyZWN0IG1lc3NhZ2VzLiAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGRvZXNf a2V5X2V4aXN0IChhcHBfdCBhcHAsIGludCBrZXlpZHgsIGludCBnZW5lcmF0aW5nLCBpbnQgZm9y Y2UpCisgeworICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnByOworICAgdW5zaWduZWQgY2hhciAq YnVmZmVyOworICAgc2l6ZV90IGJ1ZmxlbiwgbjsKKyAgIGludCBpOworIAorICAgbG9nX2Fzc2Vy dCAoa2V5aWR4ID49MCAmJiBrZXlpZHggPD0gMik7CisgCisgICBpZiAoaXNvNzgxNl9nZXRfZGF0 YSAoYXBwX2dldF9zbG90IChhcHApLCAwLCAweDAwNkUsICZidWZmZXIsICZidWZsZW4pKQorICAg ICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJlcnJvciByZWFkaW5nIGFwcGxpY2F0aW9uIGRhdGFc biIpKTsKKyAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0dFTkVSQUwpOworICAgICB9 CisgICBmcHIgPSBmaW5kX3RsdiAoYnVmZmVyLCBidWZsZW4sIDB4MDBDNSwgJm4pOworICAgaWYg KCFmcHIgfHwgbiA8IDYwKQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJlcnJvciByZWFk aW5nIGZpbmdlcnByaW50IERPXG4iKSk7CisgICAgICAgeGZyZWUgKGJ1ZmZlcik7CisgICAgICAg cmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9HRU5FUkFMKTsKKyAgICAgfQorICAgZnByICs9IDIw KmtleWlkeDsKKyAgIGZvciAoaT0wOyBpIDwgMjAgJiYgIWZwcltpXTsgaSsrKQorICAgICA7Cisg ICB4ZnJlZSAoYnVmZmVyKTsKKyAgIGlmIChpIT0yMCAmJiAhZm9yY2UpCisgICAgIHsKKyAgICAg ICBsb2dfZXJyb3IgKF8oImtleSBhbHJlYWR5IGV4aXN0c1xuIikpOworICAgICAgIHJldHVybiBn cGdfZXJyb3IgKEdQR19FUlJfRUVYSVNUKTsKKyAgICAgfQorICAgZWxzZSBpZiAoaSE9MjApCisg ICAgIGxvZ19pbmZvIChfKCJleGlzdGluZyBrZXkgd2lsbCBiZSByZXBsYWNlZFxuIikpOworICAg ZWxzZSBpZiAoZ2VuZXJhdGluZykKKyAgICAgbG9nX2luZm8gKF8oImdlbmVyYXRpbmcgbmV3IGtl eVxuIikpOworICAgZWxzZQorICAgICBsb2dfaW5mbyAoXygid3JpdGluZyBuZXcga2V5XG4iKSk7 CisgICByZXR1cm4gMDsKKyB9CisgCisgCisgLyogQ3JlYXRlIGEgVExWIHRhZyBhbmQgdmFsdWUg YW5kIHN0b3JlIGl0IGF0IEJVRkZFUi4gIFJldHVybiB0aGUgbGVuZ3RoCisgICAgb2YgdGFnIGFu ZCBsZW5ndGguICBBIExFTkdUSCBncmVhdGVyIHRoYW4gNjU1MzUgaXMgdHJ1bmNhdGVkLiAqLwor IHN0YXRpYyBzaXplX3QKKyBhZGRfdGx2ICh1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVk IGludCB0YWcsIHNpemVfdCBsZW5ndGgpCisgeworICAgdW5zaWduZWQgY2hhciAqcCA9IGJ1ZmZl cjsKKyAKKyAgIGxvZ19hc3NlcnQgKHRhZyA8PSAweGZmZmYpOworICAgaWYgKCB0YWcgPiAweGZm ICkKKyAgICAgKnArKyA9IHRhZyA+PiA4OworICAgKnArKyA9IHRhZzsKKyAgIGlmIChsZW5ndGgg PCAxMjgpCisgICAgICpwKysgPSBsZW5ndGg7CisgICBlbHNlIGlmIChsZW5ndGggPCAyNTYpCisg ICAgIHsKKyAgICAgICAqcCsrID0gMHg4MTsKKyAgICAgICAqcCsrID0gbGVuZ3RoOworICAgICB9 CisgICBlbHNlCisgICAgIHsKKyAgICAgICBpZiAobGVuZ3RoID4gMHhmZmZmKQorICAgICAgICAg bGVuZ3RoID0gMHhmZmZmOworICAgICAgICpwKysgPSAweDgyOworICAgICAgICpwKysgPSBsZW5n dGggPj4gODsKKyAgICAgICAqcCsrID0gbGVuZ3RoOworICAgICB9CisgCisgICByZXR1cm4gcCAt IGJ1ZmZlcjsKKyB9CisgCisgCisgc3RhdGljIGdwZ19lcnJvcl90CisgYnVpbGRfcHJpdmtleV90 ZW1wbGF0ZSAoYXBwX3QgYXBwLCBpbnQga2V5bm8sCisgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqcnNhX24sIHNpemVfdCByc2Ffbl9sZW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnNhX2UsIHNpemVfdCByc2FfZV9s ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnNhX3As IHNpemVfdCByc2FfcF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqcnNhX3EsIHNpemVfdCByc2FfcV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnNhX3UsIHNpemVfdCByc2FfdV9sZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnNhX2RwLCBzaXplX3QgcnNh X2RwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpy c2FfZHEsIHNpemVfdCByc2FfZHFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKipyZXN1bHQsIHNpemVfdCAqcmVzdWx0bGVuKQorIHsKKyAgIHNpemVfdCByc2Ff ZV9yZXFsZW47CisgICB1bnNpZ25lZCBjaGFyIHByaXZrZXlbNyooMSszKzMpXTsKKyAgIHNpemVf dCBwcml2a2V5X2xlbjsKKyAgIHVuc2lnbmVkIGNoYXIgZXh0aGRyWzIrMiszXTsKKyAgIHNpemVf dCBleHRoZHJfbGVuOworICAgdW5zaWduZWQgY2hhciBzdWZmaXhbMiszXTsKKyAgIHNpemVfdCBz dWZmaXhfbGVuOworICAgdW5zaWduZWQgY2hhciAqdHA7CisgICBzaXplX3QgZGF0YWxlbjsKKyAg IHVuc2lnbmVkIGNoYXIgKnRlbXBsYXRlOworICAgc2l6ZV90IHRlbXBsYXRlX3NpemU7CisgCisg ICAqcmVzdWx0ID0gTlVMTDsKKyAgICpyZXN1bHRsZW4gPSAwOworIAorICAgc3dpdGNoIChhcHAt PmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ucnNhLmZvcm1hdCkKKyAgICAgeworICAgICBjYXNl IFJTQV9TVEQ6CisgICAgIGNhc2UgUlNBX1NURF9OOgorICAgICBjYXNlIFJTQV9DUlQ6CisgICAg IGNhc2UgUlNBX0NSVF9OOgorICAgICAgIGJyZWFrOworIAorICAgICBkZWZhdWx0OgorICAgICAg IHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX1ZBTFVFKTsKKyAgICAgfQorIAorICAgLyog R2V0IHRoZSByZXF1aXJlZCBsZW5ndGggZm9yIEUuIFJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qg Ynl0ZSAgKi8KKyAgIHJzYV9lX3JlcWxlbiA9IChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlu b10ucnNhLmVfYml0cyArIDcpIC8gODsKKyAgIGxvZ19hc3NlcnQgKHJzYV9lX2xlbiA8PSByc2Ff ZV9yZXFsZW4pOworIAorICAgLyogQnVpbGQgdGhlIDdmNDggY2FyZGhvbGRlciBwcml2YXRlIGtl eSB0ZW1wbGF0ZS4gICovCisgICBkYXRhbGVuID0gMDsKKyAgIHRwID0gcHJpdmtleTsKKyAKKyAg IHRwICs9IGFkZF90bHYgKHRwLCAweDkxLCByc2FfZV9yZXFsZW4pOworICAgZGF0YWxlbiArPSBy c2FfZV9yZXFsZW47CisgCisgICB0cCArPSBhZGRfdGx2ICh0cCwgMHg5MiwgcnNhX3BfbGVuKTsK KyAgIGRhdGFsZW4gKz0gcnNhX3BfbGVuOworIAorICAgdHAgKz0gYWRkX3RsdiAodHAsIDB4OTMs IHJzYV9xX2xlbik7CisgICBkYXRhbGVuICs9IHJzYV9xX2xlbjsKKyAKKyAgIGlmIChhcHAtPmFw cF9sb2NhbC0+a2V5YXR0cltrZXlub10ucnNhLmZvcm1hdCA9PSBSU0FfQ1JUCisgICAgICAgfHwg YXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLnJzYS5mb3JtYXQgPT0gUlNBX0NSVF9OKQor ICAgICB7CisgICAgICAgdHAgKz0gYWRkX3RsdiAodHAsIDB4OTQsIHJzYV91X2xlbik7CisgICAg ICAgZGF0YWxlbiArPSByc2FfdV9sZW47CisgICAgICAgdHAgKz0gYWRkX3RsdiAodHAsIDB4OTUs IHJzYV9kcF9sZW4pOworICAgICAgIGRhdGFsZW4gKz0gcnNhX2RwX2xlbjsKKyAgICAgICB0cCAr PSBhZGRfdGx2ICh0cCwgMHg5NiwgcnNhX2RxX2xlbik7CisgICAgICAgZGF0YWxlbiArPSByc2Ff ZHFfbGVuOworICAgICB9CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9d LnJzYS5mb3JtYXQgPT0gUlNBX1NURF9OCisgICAgICAgfHwgYXBwLT5hcHBfbG9jYWwtPmtleWF0 dHJba2V5bm9dLnJzYS5mb3JtYXQgPT0gUlNBX0NSVF9OKQorICAgICB7CisgICAgICAgdHAgKz0g YWRkX3RsdiAodHAsIDB4OTcsIHJzYV9uX2xlbik7CisgICAgICAgZGF0YWxlbiArPSByc2Ffbl9s ZW47CisgICAgIH0KKyAgIHByaXZrZXlfbGVuID0gdHAgLSBwcml2a2V5OworIAorICAgLyogQnVp bGQgdGhlIGV4dGVuZGVkIGhlYWRlciBsaXN0IHdpdGhvdXQgdGhlIHByaXZhdGUga2V5IHRlbXBs YXRlLiAgKi8KKyAgIHRwID0gZXh0aGRyOworICAgKnRwKysgPSBrZXlubyA9PTAgPyAweGI2IDog a2V5bm8gPT0gMT8gMHhiOCA6IDB4YTQ7CisgICAqdHArKyA9IDA7CisgICB0cCArPSBhZGRfdGx2 ICh0cCwgMHg3ZjQ4LCBwcml2a2V5X2xlbik7CisgICBleHRoZHJfbGVuID0gdHAgLSBleHRoZHI7 CisgCisgICAvKiBCdWlsZCB0aGUgNWY0OCBzdWZmaXggb2YgdGhlIGRhdGEuICAqLworICAgdHAg PSBzdWZmaXg7CisgICB0cCArPSBhZGRfdGx2ICh0cCwgMHg1ZjQ4LCBkYXRhbGVuKTsKKyAgIHN1 ZmZpeF9sZW4gPSB0cCAtIHN1ZmZpeDsKKyAKKyAgIC8qIE5vdyBjb25jYXRlbmF0ZSBldmVyeXRo aW5nLiAgKi8KKyAgIHRlbXBsYXRlX3NpemUgPSAoMSArIDMgICAvKiAweDRkIGFuZCBsZW4uICov CisgICAgICAgICAgICAgICAgICAgICsgZXh0aGRyX2xlbgorICAgICAgICAgICAgICAgICAgICAr IHByaXZrZXlfbGVuCisgICAgICAgICAgICAgICAgICAgICsgc3VmZml4X2xlbgorICAgICAgICAg ICAgICAgICAgICArIGRhdGFsZW4pOworICAgdHAgPSB0ZW1wbGF0ZSA9IHh0cnltYWxsb2Nfc2Vj dXJlICh0ZW1wbGF0ZV9zaXplKTsKKyAgIGlmICghdGVtcGxhdGUpCisgICAgIHJldHVybiBncGdf ZXJyb3JfZnJvbV9zeXNlcnJvciAoKTsKKyAKKyAgIHRwICs9IGFkZF90bHYgKHRwLCAweDRkLCBl eHRoZHJfbGVuICsgcHJpdmtleV9sZW4gKyBzdWZmaXhfbGVuICsgZGF0YWxlbik7CisgICBtZW1j cHkgKHRwLCBleHRoZHIsIGV4dGhkcl9sZW4pOworICAgdHAgKz0gZXh0aGRyX2xlbjsKKyAgIG1l bWNweSAodHAsIHByaXZrZXksIHByaXZrZXlfbGVuKTsKKyAgIHRwICs9IHByaXZrZXlfbGVuOwor ICAgbWVtY3B5ICh0cCwgc3VmZml4LCBzdWZmaXhfbGVuKTsKKyAgIHRwICs9IHN1ZmZpeF9sZW47 CisgCisgICBtZW1jcHkgKHRwLCByc2FfZSwgcnNhX2VfbGVuKTsKKyAgIGlmIChyc2FfZV9sZW4g PCByc2FfZV9yZXFsZW4pCisgICAgIHsKKyAgICAgICAvKiBSaWdodCBqdXN0aWZ5IEUuICovCisg ICAgICAgbWVtbW92ZSAodHAgKyByc2FfZV9yZXFsZW4gLSByc2FfZV9sZW4sIHRwLCByc2FfZV9s ZW4pOworICAgICAgIG1lbXNldCAodHAsIDAsIHJzYV9lX3JlcWxlbiAtIHJzYV9lX2xlbik7Cisg ICAgIH0KKyAgIHRwICs9IHJzYV9lX3JlcWxlbjsKKyAKKyAgIG1lbWNweSAodHAsIHJzYV9wLCBy c2FfcF9sZW4pOworICAgdHAgKz0gcnNhX3BfbGVuOworIAorICAgbWVtY3B5ICh0cCwgcnNhX3Es IHJzYV9xX2xlbik7CisgICB0cCArPSByc2FfcV9sZW47CisgCisgICBpZiAoYXBwLT5hcHBfbG9j YWwtPmtleWF0dHJba2V5bm9dLnJzYS5mb3JtYXQgPT0gUlNBX0NSVAorICAgICAgIHx8IGFwcC0+ YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2EuZm9ybWF0ID09IFJTQV9DUlRfTikKKyAgICAg eworICAgICAgIG1lbWNweSAodHAsIHJzYV91LCByc2FfdV9sZW4pOworICAgICAgIHRwICs9IHJz YV91X2xlbjsKKyAgICAgICBtZW1jcHkgKHRwLCByc2FfZHAsIHJzYV9kcF9sZW4pOworICAgICAg IHRwICs9IHJzYV9kcF9sZW47CisgICAgICAgbWVtY3B5ICh0cCwgcnNhX2RxLCByc2FfZHFfbGVu KTsKKyAgICAgICB0cCArPSByc2FfZHFfbGVuOworICAgICB9CisgCisgICBpZiAoYXBwLT5hcHBf bG9jYWwtPmtleWF0dHJba2V5bm9dLnJzYS5mb3JtYXQgPT0gUlNBX1NURF9OCisgICAgICAgfHwg YXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLnJzYS5mb3JtYXQgPT0gUlNBX0NSVF9OKQor ICAgICB7CisgICAgICAgbWVtY3B5ICh0cCwgcnNhX24sIHJzYV9uX2xlbik7CisgICAgICAgdHAg Kz0gcnNhX25fbGVuOworICAgICB9CisgCisgICAvKiBTYW5pdHkgY2hlY2suICBXZSBkb24ndCBr bm93IHRoZSBleGFjdCBsZW5ndGggYmVjYXVzZSB3ZQorICAgICAgYWxsb2NhdGVkIDMgYnl0ZXMg Zm9yIHRoZSBmaXJzdCBsZW5ndGggaGVhZGVyLiAgKi8KKyAgIGxvZ19hc3NlcnQgKHRwIC0gdGVt cGxhdGUgPD0gdGVtcGxhdGVfc2l6ZSk7CisgCisgICAqcmVzdWx0ID0gdGVtcGxhdGU7CisgICAq cmVzdWx0bGVuID0gdHAgLSB0ZW1wbGF0ZTsKKyAgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMg Z3BnX2Vycm9yX3QKKyBidWlsZF9lY2NfcHJpdmtleV90ZW1wbGF0ZSAoYXBwX3QgYXBwLCBpbnQg a2V5bm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmVjY19kLCBzaXplX3QgZWNjX2RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgZWNjX2RfZml4ZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICplY2NfcSwgc2l6ZV90IGVjY19xX2xlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnJlc3VsdCwgc2l6ZV90ICpyZXN1bHRsZW4p CisgeworICAgdW5zaWduZWQgY2hhciBwcml2a2V5WzIqKDErMyldOworICAgc2l6ZV90IHByaXZr ZXlfbGVuOworICAgdW5zaWduZWQgY2hhciBleHRoZHJbMisyKzNdOworICAgc2l6ZV90IGV4dGhk cl9sZW47CisgICB1bnNpZ25lZCBjaGFyIHN1ZmZpeFsyKzNdOworICAgc2l6ZV90IHN1ZmZpeF9s ZW47CisgICB1bnNpZ25lZCBjaGFyICp0cDsKKyAgIHNpemVfdCBkYXRhbGVuOworICAgdW5zaWdu ZWQgY2hhciAqdGVtcGxhdGU7CisgICBzaXplX3QgdGVtcGxhdGVfc2l6ZTsKKyAgIGludCBwdWJr ZXlfcmVxdWlyZWQ7CisgCisgICAvKiBUaGlzIGNhc2UgZG9lc24ndCBvY2N1ciBpbiBHbnVQRyAy LjMgb3IgbGF0ZXIsIGJlY2F1c2UKKyAgICAgIGFnZW50L3NleHAtc2VjcmV0LmMgZG9lcyB0aGUg Zml4dXAuICAqLworICAgaWYgKGVjY19kX2ZpeGVkX2xlbiA8IGVjY19kX2xlbikKKyAgICAgewor ICAgICAgIGlmIChlY2NfZF9maXhlZF9sZW4gIT0gZWNjX2RfbGVuIC0gMSB8fCAqZWNjX2QpCisg ICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9PQkopOworIAorICAgICAgIC8q IFJlbW92ZSB0aGUgYWRkaXRpb25hbCB6ZXJvLiAgKi8KKyAgICAgICBlY2NfZF9sZW4tLTsKKyAg ICAgICBlY2NfZCsrOworICAgICB9CisgCisgICBwdWJrZXlfcmVxdWlyZWQgPSAhIShhcHAtPmFw cF9sb2NhbC0+a2V5YXR0cltrZXlub10uZWNjLmZsYWdzCisgICAgICAgICAgICAgICAgICAgICAg ICAmIEVDQ19GTEFHX1BVQktFWSk7CisgCisgICAqcmVzdWx0ID0gTlVMTDsKKyAgICpyZXN1bHRs ZW4gPSAwOworIAorICAgLyogQnVpbGQgdGhlIDdmNDggY2FyZGhvbGRlciBwcml2YXRlIGtleSB0 ZW1wbGF0ZS4gICovCisgICBkYXRhbGVuID0gMDsKKyAgIHRwID0gcHJpdmtleTsKKyAKKyAgIHRw ICs9IGFkZF90bHYgKHRwLCAweDkyLCBlY2NfZF9maXhlZF9sZW4pOworICAgZGF0YWxlbiArPSBl Y2NfZF9maXhlZF9sZW47CisgCisgICBpZiAocHVia2V5X3JlcXVpcmVkKQorICAgICB7CisgICAg ICAgdHAgKz0gYWRkX3RsdiAodHAsIDB4OTksIGVjY19xX2xlbik7CisgICAgICAgZGF0YWxlbiAr PSBlY2NfcV9sZW47CisgICAgIH0KKyAKKyAgIHByaXZrZXlfbGVuID0gdHAgLSBwcml2a2V5Owor IAorIAorICAgLyogQnVpbGQgdGhlIGV4dGVuZGVkIGhlYWRlciBsaXN0IHdpdGhvdXQgdGhlIHBy aXZhdGUga2V5IHRlbXBsYXRlLiAgKi8KKyAgIHRwID0gZXh0aGRyOworICAgKnRwKysgPSBrZXlu byA9PTAgPyAweGI2IDoga2V5bm8gPT0gMT8gMHhiOCA6IDB4YTQ7CisgICAqdHArKyA9IDA7Cisg ICB0cCArPSBhZGRfdGx2ICh0cCwgMHg3ZjQ4LCBwcml2a2V5X2xlbik7CisgICBleHRoZHJfbGVu ID0gdHAgLSBleHRoZHI7CisgCisgICAvKiBCdWlsZCB0aGUgNWY0OCBzdWZmaXggb2YgdGhlIGRh dGEuICAqLworICAgdHAgPSBzdWZmaXg7CisgICB0cCArPSBhZGRfdGx2ICh0cCwgMHg1ZjQ4LCBk YXRhbGVuKTsKKyAgIHN1ZmZpeF9sZW4gPSB0cCAtIHN1ZmZpeDsKKyAKKyAgIC8qIE5vdyBjb25j YXRlbmF0ZSBldmVyeXRoaW5nLiAgKi8KKyAgIHRlbXBsYXRlX3NpemUgPSAoMSArIDEgICAvKiAw eDRkIGFuZCBsZW4uICovCisgICAgICAgICAgICAgICAgICAgICsgZXh0aGRyX2xlbgorICAgICAg ICAgICAgICAgICAgICArIHByaXZrZXlfbGVuCisgICAgICAgICAgICAgICAgICAgICsgc3VmZml4 X2xlbgorICAgICAgICAgICAgICAgICAgICArIGRhdGFsZW4pOworICAgaWYgKGV4dGhkcl9sZW4g KyBwcml2a2V5X2xlbiArIHN1ZmZpeF9sZW4gKyBkYXRhbGVuID49IDEyOCkKKyAgICAgdGVtcGxh dGVfc2l6ZSsrOworICAgdHAgPSB0ZW1wbGF0ZSA9IHh0cnltYWxsb2Nfc2VjdXJlICh0ZW1wbGF0 ZV9zaXplKTsKKyAgIGlmICghdGVtcGxhdGUpCisgICAgIHJldHVybiBncGdfZXJyb3JfZnJvbV9z eXNlcnJvciAoKTsKKyAKKyAgIHRwICs9IGFkZF90bHYgKHRwLCAweDRkLCBleHRoZHJfbGVuICsg cHJpdmtleV9sZW4gKyBzdWZmaXhfbGVuICsgZGF0YWxlbik7CisgICBtZW1jcHkgKHRwLCBleHRo ZHIsIGV4dGhkcl9sZW4pOworICAgdHAgKz0gZXh0aGRyX2xlbjsKKyAgIG1lbWNweSAodHAsIHBy aXZrZXksIHByaXZrZXlfbGVuKTsKKyAgIHRwICs9IHByaXZrZXlfbGVuOworICAgbWVtY3B5ICh0 cCwgc3VmZml4LCBzdWZmaXhfbGVuKTsKKyAgIHRwICs9IHN1ZmZpeF9sZW47CisgCisgICBpZiAo ZWNjX2RfZml4ZWRfbGVuID4gZWNjX2RfbGVuKQorICAgICB7CisgICAgICAgbWVtc2V0ICh0cCwg MCwgZWNjX2RfZml4ZWRfbGVuIC0gZWNjX2RfbGVuKTsKKyAgICAgICBtZW1jcHkgKHRwICsgZWNj X2RfZml4ZWRfbGVuIC0gZWNjX2RfbGVuLCBlY2NfZCwgZWNjX2RfbGVuKTsKKyAgICAgfQorICAg ZWxzZQorICAgICBtZW1jcHkgKHRwLCBlY2NfZCwgZWNjX2RfbGVuKTsKKyAgIHRwICs9IGVjY19k X2ZpeGVkX2xlbjsKKyAKKyAgIGlmIChwdWJrZXlfcmVxdWlyZWQpCisgICAgIHsKKyAgICAgICBt ZW1jcHkgKHRwLCBlY2NfcSwgZWNjX3FfbGVuKTsKKyAgICAgICB0cCArPSBlY2NfcV9sZW47Cisg ICAgIH0KKyAKKyAgIGxvZ19hc3NlcnQgKHRwIC0gdGVtcGxhdGUgPT0gdGVtcGxhdGVfc2l6ZSk7 CisgCisgICAqcmVzdWx0ID0gdGVtcGxhdGU7CisgICAqcmVzdWx0bGVuID0gdHAgLSB0ZW1wbGF0 ZTsKKyAgIHJldHVybiAwOworIH0KKyAKKyAKKyAvKiBIZWxwZXIgZm9yIGRvX3dyaXRla2V5IHRv IGNoYW5nZSB0aGUgc2l6ZSBvZiBhIGtleS4gIE5vdGUgdGhhdAorICAgIHRoaXMgZGVsZXRlcyB0 aGUgZW50aXJlIGtleSB3aXRob3V0IGFza2luZy4gICovCisgc3RhdGljIGdwZ19lcnJvcl90Cisg Y2hhbmdlX2tleWF0dHIgKGFwcF90IGFwcCwgY3RybF90IGN0cmwsCisgICAgICAgICAgICAgICAg IGludCBrZXlubywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAorICAg ICAgICAgICAgICAgICBncGdfZXJyb3JfdCAoKnBpbmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBj aGFyICoqKSwKKyAgICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnKQorIHsKKyAgIGdwZ19l cnJvcl90IGVycjsKKyAKKyAgIGxvZ19hc3NlcnQgKGtleW5vID49MCAmJiBrZXlubyA8PSAyKTsK KyAKKyAgIC8qIFByZXBhcmUgZm9yIHN0b3JpbmcgdGhlIGtleS4gICovCisgICBlcnIgPSB2ZXJp ZnlfY2h2MyAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgIGlmIChlcnIpCisgICAg IHJldHVybiBlcnI7CisgCisgICAvKiBDaGFuZ2UgdGhlIGF0dHJpYnV0ZS4gICovCisgICBlcnIg PSBpc283ODE2X3B1dF9kYXRhIChhcHBfZ2V0X3Nsb3QgKGFwcCksIDAsIDB4QzEra2V5bm8sIGJ1 ZiwgYnVmbGVuKTsKKyAgIGlmIChlcnIpCisgICAgIGxvZ19lcnJvciAoImVycm9yIGNoYW5naW5n IGtleSBhdHRyaWJ1dGUgb2YgT1BFTlBHUC4lZFxuIiwKKyAgICAgICAgICAgICAgICBrZXlubysx KTsKKyAgIGVsc2UKKyAgICAgbG9nX2luZm8gKCJrZXkgYXR0cmlidXRlIG9mIE9QRU5QR1AuJWQg Y2hhbmdlZFxuIiwga2V5bm8rMSk7CisgICBmbHVzaF9jYWNoZSAoYXBwKTsKKyAgIGVyciA9IHBh cnNlX2FsZ29yaXRobV9hdHRyaWJ1dGUgKGFwcCwga2V5bm8pOworICAgYXBwLT5kaWRfY2h2MSA9 IDA7CisgICBhcHAtPmRpZF9jaHYyID0gMDsKKyAgIGFwcC0+ZGlkX2NodjMgPSAwOworICAgY2Fj aGVfcGluIChhcHAsIGN0cmwsIDEsIE5VTEwpOworICAgY2FjaGVfcGluIChhcHAsIGN0cmwsIDIs IE5VTEwpOworICAgY2FjaGVfcGluIChhcHAsIGN0cmwsIDMsIE5VTEwpOworICAgcmV0dXJuIGVy cjsKKyB9CisgCisgCisgc3RhdGljIGdwZ19lcnJvcl90CisgY2hhbmdlX3JzYV9rZXlhdHRyIChh cHBfdCBhcHAsIGN0cmxfdCBjdHJsLCBpbnQga2V5bm8sIHVuc2lnbmVkIGludCBuYml0cywKKyAg ICAgICAgICAgICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGluY2IpKHZvaWQqLCBjb25zdCBjaGFy ICosIGNoYXIgKiopLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnKQorIHsK KyAgIGdwZ19lcnJvcl90IGVyciA9IDA7CisgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICBzaXpl X3QgYnVmbGVuOworICAgdm9pZCAqcmVscHRyOworIAorICAgLyogUmVhZCB0aGUgY3VycmVudCBh dHRyaWJ1dGVzIGludG8gYSBidWZmZXIuICAqLworICAgcmVscHRyID0gZ2V0X29uZV9kbyAoYXBw LCAweEMxK2tleW5vLCAmYnVmLCAmYnVmbGVuLCBOVUxMKTsKKyAgIGlmICghcmVscHRyKQorICAg ICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICBlbHNlIGlmIChidWZsZW4gPCA2 KQorICAgICB7CisgICAgICAgLyogQXR0cmlidXRlcyB0b28gc2hvcnQuICAqLworICAgICAgIHhm cmVlIChyZWxwdHIpOworICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9DQVJEKTsKKyAg ICAgfQorICAgZWxzZQorICAgICB7CisgICAgICAgLyogSWYga2V5IGF0dHJpYnV0ZSB3YXMgUlNB LCB3ZSBvbmx5IGNoYW5nZSBuX2JpdHMgYW5kIGRvbid0CisgICAgICAgICAgdG91Y2ggYW55dGhp bmcgZWxzZS4gIEJlZm9yZSB3ZSBkbyBzbywgd2Ugcm91bmQgdXAgTkJJVFMgdG8gYQorICAgICAg ICAgIHNlbnNpYmxlIHdheSBpbiB0aGUgc2FtZSB3YXkgYXMgZ3BnJ3Mga2V5IGdlbmVyYXRpb24g ZG9lcyBpdC4KKyAgICAgICAgICBUaGlzIG1heSBoZWxwIHRvIHNvcnQgb3V0IHByb2JsZW1zIHdp dGggYSBmZXcgYml0cyB0b28gc2hvcnQKKyAgICAgICAgICBrZXlzLiAgKi8KKyAgICAgICBuYml0 cyA9ICgobmJpdHMgKyAzMSkgLyAzMikgKiAzMjsKKyAgICAgICBidWZbMV0gPSAobmJpdHMgPj4g OCk7CisgICAgICAgYnVmWzJdID0gbmJpdHM7CisgCisgICAgICAgLyogSWYgaXQgd2FzIG5vdCBS U0EsIHdlIG5lZWQgdG8gZmlsbCBvdGhlciBwYXJ0cy4gICovCisgICAgICAgaWYgKGJ1ZlswXSAh PSBQVUJLRVlfQUxHT19SU0EpCisgICAgICAgICB7CisgICAgICAgICAgIGJ1ZlswXSA9IFBVQktF WV9BTEdPX1JTQTsKKyAgICAgICAgICAgYnVmWzNdID0gMDsKKyAgICAgICAgICAgYnVmWzRdID0g MzI7CisgICAgICAgICAgIGJ1Zls1XSA9IDA7CisgICAgICAgICAgIGJ1ZmxlbiA9IDY7CisgICAg ICAgICB9CisgCisgICAgICAgZXJyID0gY2hhbmdlX2tleWF0dHIgKGFwcCwgY3RybCwga2V5bm8s IGJ1ZiwgYnVmbGVuLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgICAgICB4ZnJlZSAocmVscHRyKTsK KyAgICAgfQorIAorICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisgLyogSGVscGVyIHRvIHByb2Nl c3MgYW4gc2V0YXR0ciBjb21tYW5kIGZvciBuYW1lIEtFWS1BVFRSLgorICAqCisgICogSWYgS0VZ UkVGIGFuZCBLRVlBTEdPIGFyZSBOVUxMIChWQUxVRSxWQUxVRUxFTikgYXJlIGV4cGVjdGVkIHRv CisgICogY29udGFpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorICAqICAgICAgIFJT QTogIi0tZm9yY2UgPGtleT4gPGFsZ28+IHJzYTxuYml0cz4iCisgICogICAgICAgRUNDOiAiLS1m b3JjZSA8a2V5PiA8YWxnbz4gPGN1cnZlbmFtZT4iCisgICoKKyAgKiBJZiBLRVlSRUYgYW5kIEtF WUFMR08gaXMgZ2l2ZW4gdGhlIGtleSBhdHRyaWJ1dGUgZm9yIEtFWVJFRiBhcmUKKyAgKiBjaGFu Z2VkIHRvIHdoYXQgaXMgZGVzY3JpYmVkIGJ5IEtFWUFMR08gKGUuZy4gInJzYTMwNzIiLCAicnNh MjA0OCIsCisgICogb3IgImVkMjU1MTkiKS4KKyAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBj aGFuZ2Vfa2V5YXR0cl9mcm9tX3N0cmluZyAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3BnX2Vycm9yX3QgKCpwaW5jYikodm9pZCosIGNvbnN0 IGNoYXIgKiwgY2hhciAqKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBp bmNiX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5cmVm LCBjb25zdCBjaGFyICprZXlhbGdvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlbGVuKQorIHsKKyAgIGdwZ19lcnJvcl90IGVyciA9 IDA7CisgICBjaGFyICpzdHJpbmcgPSBOVUxMOworICAgaW50IGtleSwga2V5bm8sIGFsZ287Cisg ICB1bnNpZ25lZCBpbnQgbmJpdHMgPSAwOworICAgY29uc3QgY2hhciAqb2lkc3RyID0gTlVMTDsg LyogT0lEIG9mIHRoZSBjdXJ2ZS4gICovCisgICBjaGFyICplbmRwOworIAorICAgaWYgKGtleXJl ZiAmJiBrZXlhbGdvICYmICprZXlyZWYgJiYgKmtleWFsZ28pCisgICAgIHsKKyAgICAgICBpZiAo IWFzY2lpX3N0cmNhc2VjbXAgKGtleXJlZiwgIk9QRU5QR1AuMSIpKQorICAgICAgICAga2V5bm8g PSAwOworICAgICAgIGVsc2UgaWYgKCFhc2NpaV9zdHJjYXNlY21wIChrZXlyZWYsICJPUEVOUEdQ LjIiKSkKKyAgICAgICAgIGtleW5vID0gMTsKKyAgICAgICBlbHNlIGlmICghYXNjaWlfc3RyY2Fz ZWNtcCAoa2V5cmVmLCAiT1BFTlBHUC4zIikpCisgICAgICAgICBrZXlubyA9IDI7CisgICAgICAg ZWxzZQorICAgICAgICAgeworICAgICAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfSU5W X0lEKTsKKyAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgIH0KKyAKKyAgICAgICBpZiAo IXN0cm5jbXAgKGtleWFsZ28sICJyc2EiLCAzKSAmJiBkaWdpdHAgKGtleWFsZ28rMykpCisgICAg ICAgICB7CisgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgbmJpdHMgPSBzdHJ0b3Vs IChrZXlhbGdvKzMsICZlbmRwLCAxMCk7CisgICAgICAgICAgIGlmIChlcnJubyB8fCAqZW5kcCkK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJf SU5WX0RBVEEpOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICB9Cisg ICAgICAgICAgIGFsZ28gPSBQVUJLRVlfQUxHT19SU0E7CisgICAgICAgICB9CisgICAgICAgZWxz ZSBpZiAoKCFzdHJuY21wIChrZXlhbGdvLCAiZHNhIiwgMykgfHwgIXN0cm5jbXAgKGtleWFsZ28s ICJlbGciLCAzKSkKKyAgICAgICAgICAgICAgICAmJiBkaWdpdHAgKGtleWFsZ28rMykpCisgICAg ICAgICB7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9QVUJLRVlfQUxHTyk7 CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAg ICAgeworICAgICAgICAgICBuYml0cyA9IDA7CisgICAgICAgICAgIG9pZHN0ciA9IG9wZW5wZ3Bf Y3VydmVfdG9fb2lkIChrZXlhbGdvLCBOVUxMLCAmYWxnbyk7CisgICAgICAgICAgIGlmICghb2lk c3RyKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BH X0VSUl9JTlZfREFUQSk7CisgICAgICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICAg IH0KKyAgICAgICAgICAgaWYgKCFhbGdvKQorICAgICAgICAgICAgIGFsZ28gPSBrZXlubyA9PSAx PyBQVUJLRVlfQUxHT19FQ0RIIDogUFVCS0VZX0FMR09fRUNEU0E7CisgICAgICAgICB9CisgCisg ICAgIH0KKyAgIGVsc2UgaWYgKCFrZXlyZWYgJiYgIWtleWFsZ28gJiYgdmFsdWUpCisgICAgIHsK KyAgICAgICBpbnQgbjsKKyAKKyAgICAgICAvKiBWQUxVRSBpcyBleHBlY3RlZCB0byBiZSBhIHN0 cmluZyBidXQgbm90IGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgICAgKiB0ZXJtaW5hdGVkLiAgVGh1 cyBjb3B5IGl0IHRvIGFuIGFsbG9jYXRlZCBidWZmZXIgZmlyc3QuICovCisgICAgICAgc3RyaW5n ID0geHRyeW1hbGxvYyAodmFsdWVsZW4rMSk7CisgICAgICAgaWYgKCFzdHJpbmcpCisgICAgICAg ICB7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAg ICAgICBnb3RvIGxlYXZlOworICAgICAgICAgfQorICAgICAgIG1lbWNweSAoc3RyaW5nLCB2YWx1 ZSwgdmFsdWVsZW4pOworICAgICAgIHN0cmluZ1t2YWx1ZWxlbl0gPSAwOworIAorICAgICAgIC8q IEJlY2F1c2UgdGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBrZXkgd2UgcmVxdWlyZSB0aGUgc3Ry aW5nCisgICAgICAgICogIi0tZm9yY2UiIGluIHRoZSBkYXRhIHRvIG1ha2UgY2xlYXIgdGhhdCBz b21ldGhpbmcgc2VyaW91cworICAgICAgICAqIG1pZ2h0IGhhcHBlbi4gICovCisgICAgICAgbiA9 IDA7CisgICAgICAgc3NjYW5mIChzdHJpbmcsICItLWZvcmNlICVkICVkICVuIiwgJmtleSwgJmFs Z28sICZuKTsKKyAgICAgICBpZiAobiA8IDEyKQorICAgICAgICAgeworICAgICAgICAgICBlcnIg PSBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0RBVEEpOworICAgICAgICAgICBnb3RvIGxlYXZlOwor ICAgICAgICAgfQorICAgICAgIGtleW5vID0ga2V5IC0gMTsKKyAgICAgICBpZiAoYWxnbyA9PSBQ VUJLRVlfQUxHT19SU0EpCisgICAgICAgICB7CisgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAg ICAgICAgbmJpdHMgPSBzdHJ0b3VsIChzdHJpbmcrbiszLCBOVUxMLCAxMCk7CisgICAgICAgICAg IGlmIChlcnJubykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBlcnIgPSBncGdfZXJy b3IgKEdQR19FUlJfSU5WX0RBVEEpOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAg ICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgZWxzZSBpZiAoYWxnbyA9PSBQVUJLRVlfQUxH T19FQ0RIIHx8IGFsZ28gPT0gUFVCS0VZX0FMR09fRUNEU0EKKyAgICAgICAgICAgICAgICB8fCBh bGdvID09IFBVQktFWV9BTEdPX0VERFNBKQorICAgICAgICAgeworICAgICAgICAgICBvaWRzdHIg PSBvcGVucGdwX2N1cnZlX3RvX29pZCAoc3RyaW5nK24sIE5VTEwsIE5VTEwpOworICAgICAgICAg ICBpZiAoIW9pZHN0cikKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBlcnIgPSBncGdf ZXJyb3IgKEdQR19FUlJfSU5WX0RBVEEpOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAg ICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAg ICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfUFVCS0VZX0FMR08pOworICAgICAgICAgICBn b3RvIGxlYXZlOworICAgICAgICAgfQorICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICBl cnIgPSBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0FSRyk7CisgICAgICAgZ290byBsZWF2ZTsKKyAg ICAgfQorIAorICAgaWYgKGtleW5vIDwgMCB8fCBrZXlubyA+IDIpCisgICAgIGVyciA9IGdwZ19l cnJvciAoR1BHX0VSUl9JTlZfSUQpOworICAgZWxzZSBpZiAoYWxnbyA9PSBQVUJLRVlfQUxHT19S U0EpCisgICAgIHsKKyAgICAgICBpZiAobmJpdHMgPCAxMDI0KQorICAgICAgICAgZXJyID0gZ3Bn X2Vycm9yIChHUEdfRVJSX1RPT19TSE9SVCk7CisgICAgICAgZWxzZSBpZiAobmJpdHMgPiA0MDk2 KQorICAgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX1RPT19MQVJHRSk7CisgICAgICAg ZWxzZQorICAgICAgICAgZXJyID0gY2hhbmdlX3JzYV9rZXlhdHRyIChhcHAsIGN0cmwsIGtleW5v LCBuYml0cywgcGluY2IsIHBpbmNiX2FyZyk7CisgICAgIH0KKyAgIGVsc2UgaWYgKGFsZ28gPT0g UFVCS0VZX0FMR09fRUNESCB8fCBhbGdvID09IFBVQktFWV9BTEdPX0VDRFNBCisgICAgICAgICAg ICB8fCBhbGdvID09IFBVQktFWV9BTEdPX0VERFNBKQorICAgICB7CisgICAgICAgZ2NyeV9tcGlf dCBvaWQ7CisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqb2lkYnVmOworICAgICAgIHNpemVf dCBvaWRfbGVuOworICAgICAgIHVuc2lnbmVkIGludCBuOworIAorICAgICAgIC8qIENoZWNrIHRo YXQgdGhlIHJlcXVlc3RlZCBhbGdvIG1hdGNoZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlCisgICAg ICAgICoga2V5IHNsb3QuICAqLworICAgICAgIGlmIChrZXlubyA9PSAxICYmIGFsZ28gIT0gUFVC S0VZX0FMR09fRUNESCkKKyAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9XUk9OR19Q VUJLRVlfQUxHTyk7CisgICAgICAgZWxzZSBpZiAoa2V5bm8gIT0gMSAmJiBhbGdvID09IFBVQktF WV9BTEdPX0VDREgpCisgICAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfV1JPTkdfUFVC S0VZX0FMR08pOworICAgICAgIGVsc2UKKyAgICAgICAgIGVyciA9IDA7CisgICAgICAgaWYgKGVy cikKKyAgICAgICAgIGdvdG8gbGVhdmU7CisgCisgICAgICAgLyogQ29udmVydCB0aGUgT0lEIHN0 cmluZyB0byBhbiBPcGVuUEdQIGZvcm1hdHRlZCBPSUQuICAqLworICAgICAgIGVyciA9IG9wZW5w Z3Bfb2lkX2Zyb21fc3RyIChvaWRzdHIsICZvaWQpOworICAgICAgIGlmIChlcnIpCisgICAgICAg ICBnb3RvIGxlYXZlOworIAorICAgICAgIG9pZGJ1ZiA9IGdjcnlfbXBpX2dldF9vcGFxdWUgKG9p ZCwgJm4pOworICAgICAgIG9pZF9sZW4gPSAobis3KS84OworIAorICAgICAgIC8qIENyZWF0ZSB0 aGUgdGVtcGxhdGUuICAqLworICAgICAgIHhmcmVlIChzdHJpbmcpOworICAgICAgIHN0cmluZyA9 IHh0cnltYWxsb2MgKDEgKyBvaWRfbGVuKTsKKyAgICAgICBpZiAoIXN0cmluZykKKyAgICAgICAg IHsKKyAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAg ICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgICAgICAgc3RyaW5nWzBdID0gYWxnbzsKKyAg ICAgICBtZW1jcHkgKHN0cmluZysxLCBvaWRidWYrMSwgb2lkX2xlbi0xKTsKKyAgICAgICBlcnIg PSBjaGFuZ2Vfa2V5YXR0ciAoYXBwLCBjdHJsLGtleW5vLCBzdHJpbmcsIG9pZF9sZW4sIHBpbmNi LCBwaW5jYl9hcmcpOworICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG9pZCk7CisgICAgIH0KKyAg IGVsc2UKKyAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX1BVQktFWV9BTEdPKTsKKyAKKyAg bGVhdmU6CisgICB4ZnJlZSAoc3RyaW5nKTsKKyAgIHJldHVybiBlcnI7CisgfQorIAorIAorIHN0 YXRpYyBncGdfZXJyb3JfdAorIHJzYV93cml0ZWtleSAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwK KyAgICAgICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGluY2IpKHZvaWQqLCBjb25zdCBjaGFyICos IGNoYXIgKiopLAorICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnLCBpbnQga2V5bm8sCisg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGlu dCBkZXB0aCkKKyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgICBjb25zdCB1bnNpZ25lZCBjaGFy ICp0b2s7CisgICBzaXplX3QgdG9rbGVuOworICAgaW50IGxhc3RfZGVwdGgxLCBsYXN0X2RlcHRo MjsKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJzYV9uID0gTlVMTDsKKyAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnJzYV9lID0gTlVMTDsKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJzYV9wID0g TlVMTDsKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJzYV9xID0gTlVMTDsKKyAgIHNpemVfdCBy c2Ffbl9sZW4sIHJzYV9lX2xlbiwgcnNhX3BfbGVuLCByc2FfcV9sZW47CisgICB1bnNpZ25lZCBp bnQgbmJpdHM7CisgICB1bnNpZ25lZCBpbnQgbWF4Yml0czsKKyAgIHVuc2lnbmVkIGNoYXIgKnRl bXBsYXRlID0gTlVMTDsKKyAgIHVuc2lnbmVkIGNoYXIgKnRwOworICAgc2l6ZV90IHRlbXBsYXRl X2xlbjsKKyAgIHVuc2lnbmVkIGNoYXIgZnByYnVmWzIwXTsKKyAgIHUzMiBjcmVhdGVkX2F0ID0g MDsKKyAKKyAgIGlmIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5X3R5cGUgIT0g S0VZX1RZUEVfUlNBKQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJ1bnN1cHBvcnRlZCBh bGdvcml0aG06ICVzIiksICJSU0EiKTsKKyAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJf SU5WX1ZBTFVFKTsKKyAgICAgICBnb3RvIGxlYXZlOworICAgICB9CisgCisgICBsYXN0X2RlcHRo MSA9IGRlcHRoOworICAgd2hpbGUgKCEoZXJyID0gcGFyc2Vfc2V4cCAoJmJ1ZiwgJmJ1Zmxlbiwg JmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkKKyAgICAgICAgICAmJiBkZXB0aCAmJiBkZXB0aCA+PSBs YXN0X2RlcHRoMSkKKyAgICAgeworICAgICAgIGlmICh0b2spCisgICAgICAgICB7CisgICAgICAg ICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9VTktOT1dOX1NFWFApOworICAgICAgICAgICBn b3RvIGxlYXZlOworICAgICAgICAgfQorICAgICAgIGlmICgoZXJyID0gcGFyc2Vfc2V4cCAoJmJ1 ZiwgJmJ1ZmxlbiwgJmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkpCisgICAgICAgICBnb3RvIGxlYXZl OworICAgICAgIGlmICh0b2sgJiYgdG9rbGVuID09IDEpCisgICAgICAgICB7CisgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKiptcGk7CisgICAgICAgICAgIHNpemVfdCAqbXBpX2xlbjsK KyAKKyAgICAgICAgICAgc3dpdGNoICgqdG9rKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICBjYXNlICduJzogbXBpID0gJnJzYV9uOyBtcGlfbGVuID0gJnJzYV9uX2xlbjsgYnJlYWs7Cisg ICAgICAgICAgICAgY2FzZSAnZSc6IG1waSA9ICZyc2FfZTsgbXBpX2xlbiA9ICZyc2FfZV9sZW47 IGJyZWFrOworICAgICAgICAgICAgIGNhc2UgJ3AnOiBtcGkgPSAmcnNhX3A7IG1waV9sZW4gPSAm cnNhX3BfbGVuOyBicmVhazsKKyAgICAgICAgICAgICBjYXNlICdxJzogbXBpID0gJnJzYV9xOyBt cGlfbGVuID0gJnJzYV9xX2xlbjticmVhazsKKyAgICAgICAgICAgICBkZWZhdWx0OiBtcGkgPSBO VUxMOyAgbXBpX2xlbiA9IE5VTEw7IGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAg aWYgKG1waSAmJiAqbXBpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGVyciA9IGdw Z19lcnJvciAoR1BHX0VSUl9EVVBfVkFMVUUpOworICAgICAgICAgICAgICAgZ290byBsZWF2ZTsK KyAgICAgICAgICAgICB9CisgICAgICAgICAgIGlmICgoZXJyID0gcGFyc2Vfc2V4cCAoJmJ1Ziwg JmJ1ZmxlbiwgJmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkpCisgICAgICAgICAgICAgZ290byBsZWF2 ZTsKKyAgICAgICAgICAgaWYgKHRvayAmJiBtcGkpCisgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgLyogU3RyaXAgb2ZmIGxlYWRpbmcgemVybyBieXRlcyBhbmQgc2F2ZS4gKi8KKyAgICAg ICAgICAgICAgIGZvciAoO3Rva2xlbiAmJiAhKnRvazsgdG9rbGVuLS0sIHRvaysrKQorICAgICAg ICAgICAgICAgICA7CisgICAgICAgICAgICAgICAqbXBpID0gdG9rOworICAgICAgICAgICAgICAg Km1waV9sZW4gPSB0b2tsZW47CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgIC8q IFNraXAgdW50aWwgZW5kIG9mIGxpc3QuICovCisgICAgICAgbGFzdF9kZXB0aDIgPSBkZXB0aDsK KyAgICAgICB3aGlsZSAoIShlcnIgPSBwYXJzZV9zZXhwICgmYnVmLCAmYnVmbGVuLCAmZGVwdGgs ICZ0b2ssICZ0b2tsZW4pKQorICAgICAgICAgICAgICAmJiBkZXB0aCAmJiBkZXB0aCA+PSBsYXN0 X2RlcHRoMikKKyAgICAgICAgIDsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZ290byBsZWF2 ZTsKKyAgICAgfQorICAgLyogUGFyc2Ugb3RoZXIgYXR0cmlidXRlcy4gKi8KKyAgIGxhc3RfZGVw dGgxID0gZGVwdGg7CisgICB3aGlsZSAoIShlcnIgPSBwYXJzZV9zZXhwICgmYnVmLCAmYnVmbGVu LCAmZGVwdGgsICZ0b2ssICZ0b2tsZW4pKQorICAgICAgICAgICYmIGRlcHRoICYmIGRlcHRoID49 IGxhc3RfZGVwdGgxKQorICAgICB7CisgICAgICAgaWYgKHRvaykKKyAgICAgICAgIHsKKyAgICAg ICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX1VOS05PV05fU0VYUCk7CisgICAgICAgICAg IGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBwYXJzZV9zZXhwICgm YnVmLCAmYnVmbGVuLCAmZGVwdGgsICZ0b2ssICZ0b2tsZW4pKSkKKyAgICAgICAgIGdvdG8gbGVh dmU7CisgICAgICAgaWYgKHRvayAmJiB0b2tsZW4gPT0gMTAgJiYgIW1lbWNtcCAoImNyZWF0ZWQt YXQiLCB0b2ssIHRva2xlbikpCisgICAgICAgICB7CisgICAgICAgICAgIGlmICgoZXJyID0gcGFy c2Vfc2V4cCAoJmJ1ZiwmYnVmbGVuLCZkZXB0aCwmdG9rLCZ0b2tsZW4pKSkKKyAgICAgICAgICAg ICBnb3RvIGxlYXZlOworICAgICAgICAgICBpZiAodG9rKQorICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgIGZvciAoY3JlYXRlZF9hdD0wOyB0b2tsZW4gJiYgKnRvayAmJiAqdG9rID49ICcw JyAmJiAqdG9rIDw9ICc5JzsKKyAgICAgICAgICAgICAgICAgICAgdG9rKyssIHRva2xlbi0tKQor ICAgICAgICAgICAgICAgICBjcmVhdGVkX2F0ID0gY3JlYXRlZF9hdCoxMCArICgqdG9rIC0gJzAn KTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgLyogU2tpcCB1bnRpbCBlbmQg b2YgbGlzdC4gKi8KKyAgICAgICBsYXN0X2RlcHRoMiA9IGRlcHRoOworICAgICAgIHdoaWxlICgh KGVyciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRvaywgJnRva2xlbikp CisgICAgICAgICAgICAgICYmIGRlcHRoICYmIGRlcHRoID49IGxhc3RfZGVwdGgyKQorICAgICAg ICAgOworICAgICAgIGlmIChlcnIpCisgICAgICAgICBnb3RvIGxlYXZlOworICAgICB9CisgCisg CisgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYWxsIHBhcmFtZXRlcnMgYW5kIHRoYXQgdGhleSBt YXRjaCB0aGUgY2FyZAorICAgICAgZGVzY3JpcHRpb24uICovCisgICBpZiAoIWNyZWF0ZWRfYXQp CisgICAgIHsKKyAgICAgICBsb2dfZXJyb3IgKF8oImNyZWF0aW9uIHRpbWVzdGFtcCBtaXNzaW5n XG4iKSk7CisgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9WQUxVRSk7CisgICAg ICAgZ290byBsZWF2ZTsKKyAgICAgfQorIAorICAgbWF4Yml0cyA9IGFwcC0+YXBwX2xvY2FsLT5r ZXlhdHRyW2tleW5vXS5yc2Eubl9iaXRzOworICAgbmJpdHMgPSByc2Ffbj8gY291bnRfYml0cyAo cnNhX24sIHJzYV9uX2xlbikgOiAwOworICAgaWYgKG9wdC52ZXJib3NlKQorICAgICBsb2dfaW5m byAoIlJTQSBtb2R1bHVzIHNpemUgaXMgJXUgYml0c1xuIiwgbmJpdHMpOworICAgaWYgKG5iaXRz ICYmIG5iaXRzICE9IG1heGJpdHMKKyAgICAgICAmJiBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmFs Z29fYXR0cl9jaGFuZ2UpCisgICAgIHsKKyAgICAgICAvKiBUcnkgdG8gc3dpdGNoIHRoZSBrZXkg dG8gYSBuZXcgbGVuZ3RoLiAgKi8KKyAgICAgICBlcnIgPSBjaGFuZ2VfcnNhX2tleWF0dHIgKGFw cCwgY3RybCwga2V5bm8sIG5iaXRzLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgICAgICBpZiAoIWVy cikKKyAgICAgICAgIG1heGJpdHMgPSBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ucnNh Lm5fYml0czsKKyAgICAgfQorICAgaWYgKG5iaXRzICE9IG1heGJpdHMpCisgICAgIHsKKyAgICAg ICBsb2dfZXJyb3IgKF8oIlJTQSBtb2R1bHVzIG1pc3Npbmcgb3Igbm90IG9mIHNpemUgJWQgYml0 c1xuIiksCisgICAgICAgICAgICAgICAgICAoaW50KW1heGJpdHMpOworICAgICAgIGVyciA9IGdw Z19lcnJvciAoR1BHX0VSUl9CQURfU0VDS0VZKTsKKyAgICAgICBnb3RvIGxlYXZlOworICAgICB9 CisgCisgICBtYXhiaXRzID0gYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLnJzYS5lX2Jp dHM7CisgICBpZiAobWF4Yml0cyA+IDMyICYmICFhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmlzX3Yy KQorICAgICBtYXhiaXRzID0gMzI7IC8qIE91ciBjb2RlIGZvciB2MSBkb2VzIG9ubHkgc3VwcG9y dCAzMiBiaXRzLiAgKi8KKyAgIG5iaXRzID0gcnNhX2U/IGNvdW50X2JpdHMgKHJzYV9lLCByc2Ff ZV9sZW4pIDogMDsKKyAgIGlmIChuYml0cyA8IDIgfHwgbmJpdHMgPiBtYXhiaXRzKQorICAgICB7 CisgICAgICAgbG9nX2Vycm9yIChfKCJSU0EgcHVibGljIGV4cG9uZW50IG1pc3Npbmcgb3IgbGFy Z2VyIHRoYW4gJWQgYml0c1xuIiksCisgICAgICAgICAgICAgICAgICAoaW50KW1heGJpdHMpOwor ICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9CQURfU0VDS0VZKTsKKyAgICAgICBnb3Rv IGxlYXZlOworICAgICB9CisgCisgICBtYXhiaXRzID0gYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJb a2V5bm9dLnJzYS5uX2JpdHMvMjsKKyAgIG5iaXRzID0gcnNhX3A/IGNvdW50X2JpdHMgKHJzYV9w LCByc2FfcF9sZW4pIDogMDsKKyAgIGlmIChuYml0cyAhPSBtYXhiaXRzKQorICAgICB7CisgICAg ICAgbG9nX2Vycm9yIChfKCJSU0EgcHJpbWUgJXMgbWlzc2luZyBvciBub3Qgb2Ygc2l6ZSAlZCBi aXRzXG4iKSwKKyAgICAgICAgICAgICAgICAgICJQIiwgKGludCltYXhiaXRzKTsKKyAgICAgICBl cnIgPSBncGdfZXJyb3IgKEdQR19FUlJfQkFEX1NFQ0tFWSk7CisgICAgICAgZ290byBsZWF2ZTsK KyAgICAgfQorICAgbmJpdHMgPSByc2FfcT8gY291bnRfYml0cyAocnNhX3EsIHJzYV9xX2xlbikg OiAwOworICAgaWYgKG5iaXRzICE9IG1heGJpdHMpCisgICAgIHsKKyAgICAgICBsb2dfZXJyb3Ig KF8oIlJTQSBwcmltZSAlcyBtaXNzaW5nIG9yIG5vdCBvZiBzaXplICVkIGJpdHNcbiIpLAorICAg ICAgICAgICAgICAgICAgIlEiLCAoaW50KW1heGJpdHMpOworICAgICAgIGVyciA9IGdwZ19lcnJv ciAoR1BHX0VSUl9CQURfU0VDS0VZKTsKKyAgICAgICBnb3RvIGxlYXZlOworICAgICB9CisgCisg ICAvKiBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGVkIHB1YmxpYyBrZXkuICAqLworICAgeGZy ZWUgKGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5KTsKKyAgIGFwcC0+YXBwX2xvY2FsLT5w a1trZXlub10ua2V5ID0gTlVMTDsKKyAgIGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ua2V5bGVu ID0gMDsKKyAgIGFwcC0+YXBwX2xvY2FsLT5wa1trZXlub10ucmVhZF9kb25lID0gMDsKKyAKKyAK KyAgIGlmIChhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmlzX3YyKQorICAgICB7CisgICAgICAgdW5z aWduZWQgY2hhciAqcnNhX3UsICpyc2FfZHAsICpyc2FfZHE7CisgICAgICAgc2l6ZV90IHJzYV91 X2xlbiwgcnNhX2RwX2xlbiwgcnNhX2RxX2xlbjsKKyAgICAgICBnY3J5X21waV90IG1waV9lLCBt cGlfcCwgbXBpX3E7CisgICAgICAgZ2NyeV9tcGlfdCBtcGlfdSA9IGdjcnlfbXBpX3NuZXcgKDAp OworICAgICAgIGdjcnlfbXBpX3QgbXBpX2RwID0gZ2NyeV9tcGlfc25ldyAoMCk7CisgICAgICAg Z2NyeV9tcGlfdCBtcGlfZHEgPSBnY3J5X21waV9zbmV3ICgwKTsKKyAgICAgICBnY3J5X21waV90 IG1waV90bXAgPSBnY3J5X21waV9zbmV3ICgwKTsKKyAgICAgICBpbnQgZXhtb2RlOworIAorICAg ICAgIC8qIENhbGN1bGF0ZSB0aGUgdSwgZHAgYW5kIGRxIGNvbXBvbmVudHMgbmVlZGVkIGJ5IFJT QV9DUlQgY2FyZHMgKi8KKyAgICAgICBnY3J5X21waV9zY2FuICgmbXBpX2UsIEdDUllNUElfRk1U X1VTRywgcnNhX2UsIHJzYV9lX2xlbiwgTlVMTCk7CisgICAgICAgZ2NyeV9tcGlfc2NhbiAoJm1w aV9wLCBHQ1JZTVBJX0ZNVF9VU0csIHJzYV9wLCByc2FfcF9sZW4sIE5VTEwpOworICAgICAgIGdj cnlfbXBpX3NjYW4gKCZtcGlfcSwgR0NSWU1QSV9GTVRfVVNHLCByc2FfcSwgcnNhX3FfbGVuLCBO VUxMKTsKKyAKKyAgICAgICBnY3J5X21waV9pbnZtIChtcGlfdSwgbXBpX3EsIG1waV9wKTsKKyAg ICAgICBnY3J5X21waV9zdWJfdWkgKG1waV90bXAsIG1waV9wLCAxKTsKKyAgICAgICBnY3J5X21w aV9pbnZtIChtcGlfZHAsIG1waV9lLCBtcGlfdG1wKTsKKyAgICAgICBnY3J5X21waV9zdWJfdWkg KG1waV90bXAsIG1waV9xLCAxKTsKKyAgICAgICBnY3J5X21waV9pbnZtIChtcGlfZHEsIG1waV9l LCBtcGlfdG1wKTsKKyAKKyAgICAgICBnY3J5X21waV9hcHJpbnQgKEdDUllNUElfRk1UX1VTRywg JnJzYV91LCAmcnNhX3VfbGVuLCBtcGlfdSk7CisgICAgICAgZ2NyeV9tcGlfYXByaW50IChHQ1JZ TVBJX0ZNVF9VU0csICZyc2FfZHAsICZyc2FfZHBfbGVuLCBtcGlfZHApOworICAgICAgIGdjcnlf bXBpX2FwcmludCAoR0NSWU1QSV9GTVRfVVNHLCAmcnNhX2RxLCAmcnNhX2RxX2xlbiwgbXBpX2Rx KTsKKyAKKyAgICAgICBnY3J5X21waV9yZWxlYXNlIChtcGlfZSk7CisgICAgICAgZ2NyeV9tcGlf cmVsZWFzZSAobXBpX3ApOworICAgICAgIGdjcnlfbXBpX3JlbGVhc2UgKG1waV9xKTsKKyAgICAg ICBnY3J5X21waV9yZWxlYXNlIChtcGlfdSk7CisgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAobXBp X2RwKTsKKyAgICAgICBnY3J5X21waV9yZWxlYXNlIChtcGlfZHEpOworICAgICAgIGdjcnlfbXBp X3JlbGVhc2UgKG1waV90bXApOworIAorICAgICAgIC8qIEJ1aWxkIHRoZSBwcml2YXRlIGtleSB0 ZW1wbGF0ZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbiA0LjMuMy43IG9mCisgICAgICAgICAgdGhl IE9wZW5QR1AgY2FyZCBzcGVjcyB2ZXJzaW9uIDIuMC4gICovCisgICAgICAgZXJyID0gYnVpbGRf cHJpdmtleV90ZW1wbGF0ZSAoYXBwLCBrZXlubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByc2FfbiwgcnNhX25fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJzYV9lLCByc2FfZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcnNhX3AsIHJzYV9wX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByc2FfcSwgcnNhX3FfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJzYV91LCByc2FfdV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcnNhX2RwLCByc2FfZHBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJzYV9kcSwgcnNhX2RxX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdGVtcGxhdGUsICZ0ZW1wbGF0ZV9sZW4pOworICAgICAgIHhmcmVlKHJzYV91KTsK KyAgICAgICB4ZnJlZShyc2FfZHApOworICAgICAgIHhmcmVlKHJzYV9kcSk7CisgCisgICAgICAg aWYgKGVycikKKyAgICAgICAgIGdvdG8gbGVhdmU7CisgCisgICAgICAgLyogUHJlcGFyZSBmb3Ig c3RvcmluZyB0aGUga2V5LiAgKi8KKyAgICAgICBlcnIgPSB2ZXJpZnlfY2h2MyAoYXBwLCBjdHJs LCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZ290byBsZWF2 ZTsKKyAKKyAgICAgICAvKiBTdG9yZSB0aGUga2V5LiAqLworICAgICAgIGlmIChhcHAtPmFwcF9s b2NhbC0+Y2FyZGNhcC5leHRfbGNfbGUgJiYgdGVtcGxhdGVfbGVuID4gMjU0KQorICAgICAgICAg ZXhtb2RlID0gMTsgICAgLyogVXNlIGV4dGVuZGVkIGxlbmd0aCB3L28gYSBsaW1pdC4gICovCisg ICAgICAgZWxzZSBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAuY21kX2NoYWluaW5nICYmIHRl bXBsYXRlX2xlbiA+IDI1NCkKKyAgICAgICAgIGV4bW9kZSA9IC0yNTQ7CisgICAgICAgZWxzZQor ICAgICAgICAgZXhtb2RlID0gMDsKKyAgICAgICBlcnIgPSBpc283ODE2X3B1dF9kYXRhX29kZCAo YXBwX2dldF9zbG90IChhcHApLCBleG1vZGUsIDB4M2ZmZiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGVtcGxhdGUsIHRlbXBsYXRlX2xlbik7CisgICAgIH0KKyAgIGVsc2UK KyAgICAgeworICAgICAgIC8qIEJ1aWxkIHRoZSBwcml2YXRlIGtleSB0ZW1wbGF0ZSBhcyBkZXNj cmliZWQgaW4gc2VjdGlvbiA0LjMuMy42IG9mCisgICAgICAgICAgdGhlIE9wZW5QR1AgY2FyZCBz cGVjcyB2ZXJzaW9uIDEuMToKKyAgICAgICAgICAweEMwICAgPGxlbmd0aD4gcHVibGljIGV4cG9u ZW50CisgICAgICAgICAgMHhDMSAgIDxsZW5ndGg+IHByaW1lIHAKKyAgICAgICAgICAweEMyICAg PGxlbmd0aD4gcHJpbWUgcQorICAgICAgICovCisgICAgICAgbG9nX2Fzc2VydCAocnNhX2VfbGVu IDw9IDQpOworICAgICAgIHRlbXBsYXRlX2xlbiA9ICgxICsgMSArIDQKKyAgICAgICAgICAgICAg ICAgICAgICAgKyAxICsgMSArIHJzYV9wX2xlbgorICAgICAgICAgICAgICAgICAgICAgICArIDEg KyAxICsgcnNhX3FfbGVuKTsKKyAgICAgICB0ZW1wbGF0ZSA9IHRwID0geHRyeW1hbGxvY19zZWN1 cmUgKHRlbXBsYXRlX2xlbik7CisgICAgICAgaWYgKCF0ZW1wbGF0ZSkKKyAgICAgICAgIHsKKyAg ICAgICAgICAgZXJyID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAgICAgIGdv dG8gbGVhdmU7CisgICAgICAgICB9CisgICAgICAgKnRwKysgPSAweEMwOworICAgICAgICp0cCsr ID0gNDsKKyAgICAgICBtZW1jcHkgKHRwLCByc2FfZSwgcnNhX2VfbGVuKTsKKyAgICAgICBpZiAo cnNhX2VfbGVuIDwgNCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogUmlnaHQganVzdGlmeSBF LiAqLworICAgICAgICAgICBtZW1tb3ZlICh0cCs0LXJzYV9lX2xlbiwgdHAsIHJzYV9lX2xlbik7 CisgICAgICAgICAgIG1lbXNldCAodHAsIDAsIDQtcnNhX2VfbGVuKTsKKyAgICAgICAgIH0KKyAg ICAgICB0cCArPSA0OworIAorICAgICAgICp0cCsrID0gMHhDMTsKKyAgICAgICAqdHArKyA9IHJz YV9wX2xlbjsKKyAgICAgICBtZW1jcHkgKHRwLCByc2FfcCwgcnNhX3BfbGVuKTsKKyAgICAgICB0 cCArPSByc2FfcF9sZW47CisgCisgICAgICAgKnRwKysgPSAweEMyOworICAgICAgICp0cCsrID0g cnNhX3FfbGVuOworICAgICAgIG1lbWNweSAodHAsIHJzYV9xLCByc2FfcV9sZW4pOworICAgICAg IHRwICs9IHJzYV9xX2xlbjsKKyAKKyAgICAgICBsb2dfYXNzZXJ0ICh0cCAtIHRlbXBsYXRlID09 IHRlbXBsYXRlX2xlbik7CisgCisgICAgICAgLyogUHJlcGFyZSBmb3Igc3RvcmluZyB0aGUga2V5 LiAgKi8KKyAgICAgICBlcnIgPSB2ZXJpZnlfY2h2MyAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2Jf YXJnKTsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZ290byBsZWF2ZTsKKyAKKyAgICAgICAv KiBTdG9yZSB0aGUga2V5LiAqLworICAgICAgIGVyciA9IGlzbzc4MTZfcHV0X2RhdGEgKGFwcF9n ZXRfc2xvdCAoYXBwKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwLT5h cHB2ZXJzaW9uID4gMHgwMDA3PyAweEUwOjB4RTkpK2tleW5vLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRlbXBsYXRlLCB0ZW1wbGF0ZV9sZW4pOworICAgICB9CisgICBpZiAoZXJy KQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJmYWlsZWQgdG8gc3RvcmUgdGhlIGtleTog JXNcbiIpLCBncGdfc3RyZXJyb3IgKGVycikpOworICAgICAgIGdvdG8gbGVhdmU7CisgICAgIH0K KyAKKyAgIGVyciA9IHN0b3JlX2ZwciAoYXBwLCBrZXlubywgY3JlYXRlZF9hdCwgZnByYnVmLCBQ VUJLRVlfQUxHT19SU0EsCisgICAgICAgICAgICAgICAgICAgIHJzYV9uLCByc2Ffbl9sZW4sIHJz YV9lLCByc2FfZV9sZW4pOworICAgaWYgKGVycikKKyAgICAgZ290byBsZWF2ZTsKKyAKKyAKKyAg bGVhdmU6CisgICB4ZnJlZSAodGVtcGxhdGUpOworICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisg c3RhdGljIGdwZ19lcnJvcl90CisgZWNjX3dyaXRla2V5IChhcHBfdCBhcHAsIGN0cmxfdCBjdHJs LAorICAgICAgICAgICAgICAgZ3BnX2Vycm9yX3QgKCpwaW5jYikodm9pZCosIGNvbnN0IGNoYXIg KiwgY2hhciAqKiksCisgICAgICAgICAgICAgICB2b2lkICpwaW5jYl9hcmcsIGludCBrZXlubywK KyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbiwg aW50IGRlcHRoKQorIHsKKyAgIGdwZ19lcnJvcl90IGVycjsKKyAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnRvazsKKyAgIHNpemVfdCB0b2tsZW47CisgICBpbnQgbGFzdF9kZXB0aDEsIGxhc3RfZGVw dGgyOworICAgY29uc3QgdW5zaWduZWQgY2hhciAqZWNjX3EgPSBOVUxMOworICAgY29uc3QgdW5z aWduZWQgY2hhciAqZWNjX2QgPSBOVUxMOworICAgc2l6ZV90IGVjY19xX2xlbiwgZWNjX2RfbGVu OworICAgY29uc3QgY2hhciAqY3VydmUgPSBOVUxMOworICAgdTMyIGNyZWF0ZWRfYXQgPSAwOwor ICAgY29uc3QgY2hhciAqb2lkc3RyOworICAgaW50IGZsYWdfZGpiX3R3ZWFrID0gMDsKKyAgIGlu dCBhbGdvOworICAgZ2NyeV9tcGlfdCBvaWQgPSBOVUxMOworICAgY29uc3QgdW5zaWduZWQgY2hh ciAqb2lkYnVmOworICAgdW5zaWduZWQgaW50IG47CisgICBzaXplX3Qgb2lkX2xlbjsKKyAgIHVu c2lnbmVkIGNoYXIgZnByYnVmWzIwXTsKKyAgIHNpemVfdCBlY2NfZF9maXhlZF9sZW47CisgCisg ICAvKiAocHJpdmF0ZS1rZXkoZWNjKGN1cnZlJXMpKHElbSkoZCVtKSkoY3JlYXRlZC1hdCVkKSk6 CisgICAgICBjdXJ2ZSA9ICJOSVNUIFAtMjU2IiAqLworICAgLyogKHByaXZhdGUta2V5KGVjYyhj dXJ2ZSVzKShxJW0pKGQlbSkpKGNyZWF0ZWQtYXQlZCkpOgorICAgICAgY3VydmUgPSAic2VjcDI1 NmsxIiAqLworICAgLyogKHByaXZhdGUta2V5KGVjYyhjdXJ2ZSVzKShmbGFncyBlZGRzYSkocSVt KShkJW0pKShjcmVhdGVkLWF0JWQpKToKKyAgICAgICBjdXJ2ZSA9ICJFZDI1NTE5IiAqLworICAg LyogKHByaXZhdGUta2V5KGVjYyhjdXJ2ZSVzKShxJW0pKGQlbSkpKGNyZWF0ZWQtYXQlZCkpOgor ICAgICAgIGN1cnZlID0gIkVkNDQ4IiAqLworICAgbGFzdF9kZXB0aDEgPSBkZXB0aDsKKyAgIHdo aWxlICghKGVyciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRvaywgJnRv a2xlbikpCisgICAgICAgICAgJiYgZGVwdGggJiYgZGVwdGggPj0gbGFzdF9kZXB0aDEpCisgICAg IHsKKyAgICAgICBpZiAodG9rKQorICAgICAgICAgeworICAgICAgICAgICBlcnIgPSBncGdfZXJy b3IgKEdQR19FUlJfVU5LTk9XTl9TRVhQKTsKKyAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAg ICAgIH0KKyAgICAgICBpZiAoKGVyciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0 aCwgJnRvaywgJnRva2xlbikpKQorICAgICAgICAgZ290byBsZWF2ZTsKKyAKKyAgICAgICBpZiAo dG9rICYmIHRva2xlbiA9PSA1ICYmICFtZW1jbXAgKHRvaywgImN1cnZlIiwgNSkpCisgICAgICAg ICB7CisgICAgICAgICAgIGNoYXIgKmN1cnZlX25hbWU7CisgCisgICAgICAgICAgIGlmICgoZXJy ID0gcGFyc2Vfc2V4cCAoJmJ1ZiwgJmJ1ZmxlbiwgJmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkpCisg ICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAKKyAgICAgICAgICAgY3VydmVfbmFtZSA9IHh0cnlt YWxsb2MgKHRva2xlbisxKTsKKyAgICAgICAgICAgaWYgKCFjdXJ2ZV9uYW1lKQorICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOwor ICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAg IG1lbWNweSAoY3VydmVfbmFtZSwgdG9rLCB0b2tsZW4pOworICAgICAgICAgICBjdXJ2ZV9uYW1l W3Rva2xlbl0gPSAwOworICAgICAgICAgICBjdXJ2ZSA9IG9wZW5wZ3BfaXNfY3VydmVfc3VwcG9y dGVkIChjdXJ2ZV9uYW1lLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgeGZyZWUgKGN1cnZlX25h bWUpOworICAgICAgICAgfQorICAgICAgIGVsc2UgaWYgKHRvayAmJiB0b2tsZW4gPT0gNSAmJiAh bWVtY21wICh0b2ssICJmbGFncyIsIDUpKQorICAgICAgICAgeworICAgICAgICAgICBpZiAoKGVy ciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRvaywgJnRva2xlbikpKQor ICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgCisgICAgICAgICAgIGlmICh0b2spCisgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgaWYgKCh0b2tsZW4gPT0gNSAmJiAhbWVtY21wICh0b2ss ICJlZGRzYSIsIDUpKQorICAgICAgICAgICAgICAgICAgIHx8ICh0b2tsZW4gPT0gOSAmJiAhbWVt Y21wICh0b2ssICJkamItdHdlYWsiLCA5KSkpCisgICAgICAgICAgICAgICAgIGZsYWdfZGpiX3R3 ZWFrID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgZWxzZSBpZiAodG9r ICYmIHRva2xlbiA9PSAxKQorICAgICAgICAgeworICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICoqYnVmMjsKKyAgICAgICAgICAgc2l6ZV90ICpidWYybGVuOworIAorICAgICAgICAgICBz d2l0Y2ggKCp0b2spCisgICAgICAgICAgICAgeworICAgICAgICAgICAgIGNhc2UgJ3EnOiBidWYy ID0gJmVjY19xOyBidWYybGVuID0gJmVjY19xX2xlbjsgYnJlYWs7CisgICAgICAgICAgICAgY2Fz ZSAnZCc6IGJ1ZjIgPSAmZWNjX2Q7IGJ1ZjJsZW4gPSAmZWNjX2RfbGVuOyBicmVhazsKKyAgICAg ICAgICAgICBkZWZhdWx0OiBidWYyID0gTlVMTDsgIGJ1ZjJsZW4gPSBOVUxMOyBicmVhazsKKyAg ICAgICAgICAgICB9CisgICAgICAgICAgIGlmIChidWYyICYmICpidWYyKQorICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9EVVBfVkFMVUUpOwor ICAgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIGlm ICgoZXJyID0gcGFyc2Vfc2V4cCAoJmJ1ZiwgJmJ1ZmxlbiwgJmRlcHRoLCAmdG9rLCAmdG9rbGVu KSkpCisgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgICAgaWYgKHRvayAmJiBidWYy KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICpidWYyID0gdG9rOworICAgICAgICAg ICAgICAgKmJ1ZjJsZW4gPSB0b2tsZW47CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAg ICAgIC8qIFNraXAgdW50aWwgZW5kIG9mIGxpc3QuICovCisgICAgICAgbGFzdF9kZXB0aDIgPSBk ZXB0aDsKKyAgICAgICB3aGlsZSAoIShlcnIgPSBwYXJzZV9zZXhwICgmYnVmLCAmYnVmbGVuLCAm ZGVwdGgsICZ0b2ssICZ0b2tsZW4pKQorICAgICAgICAgICAgICAmJiBkZXB0aCAmJiBkZXB0aCA+ PSBsYXN0X2RlcHRoMikKKyAgICAgICAgIDsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgZ290 byBsZWF2ZTsKKyAgICAgfQorICAgLyogUGFyc2Ugb3RoZXIgYXR0cmlidXRlcy4gKi8KKyAgIGxh c3RfZGVwdGgxID0gZGVwdGg7CisgICB3aGlsZSAoIShlcnIgPSBwYXJzZV9zZXhwICgmYnVmLCAm YnVmbGVuLCAmZGVwdGgsICZ0b2ssICZ0b2tsZW4pKQorICAgICAgICAgICYmIGRlcHRoICYmIGRl cHRoID49IGxhc3RfZGVwdGgxKQorICAgICB7CisgICAgICAgaWYgKHRvaykKKyAgICAgICAgIHsK KyAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX1VOS05PV05fU0VYUCk7CisgICAg ICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBwYXJzZV9z ZXhwICgmYnVmLCAmYnVmbGVuLCAmZGVwdGgsICZ0b2ssICZ0b2tsZW4pKSkKKyAgICAgICAgIGdv dG8gbGVhdmU7CisgICAgICAgaWYgKHRvayAmJiB0b2tsZW4gPT0gMTAgJiYgIW1lbWNtcCAoImNy ZWF0ZWQtYXQiLCB0b2ssIHRva2xlbikpCisgICAgICAgICB7CisgICAgICAgICAgIGlmICgoZXJy ID0gcGFyc2Vfc2V4cCAoJmJ1ZiwmYnVmbGVuLCZkZXB0aCwmdG9rLCZ0b2tsZW4pKSkKKyAgICAg ICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgICBpZiAodG9rKQorICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgIGZvciAoY3JlYXRlZF9hdD0wOyB0b2tsZW4gJiYgKnRvayAmJiAqdG9r ID49ICcwJyAmJiAqdG9rIDw9ICc5JzsKKyAgICAgICAgICAgICAgICAgICAgdG9rKyssIHRva2xl bi0tKQorICAgICAgICAgICAgICAgICBjcmVhdGVkX2F0ID0gY3JlYXRlZF9hdCoxMCArICgqdG9r IC0gJzAnKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgLyogU2tpcCB1bnRp bCBlbmQgb2YgbGlzdC4gKi8KKyAgICAgICBsYXN0X2RlcHRoMiA9IGRlcHRoOworICAgICAgIHdo aWxlICghKGVyciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRvaywgJnRv a2xlbikpCisgICAgICAgICAgICAgICYmIGRlcHRoICYmIGRlcHRoID49IGxhc3RfZGVwdGgyKQor ICAgICAgICAgOworICAgICAgIGlmIChlcnIpCisgICAgICAgICBnb3RvIGxlYXZlOworICAgICB9 CisgCisgCisgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYWxsIHBhcmFtZXRlcnMgYW5kIHRoYXQg dGhleSBtYXRjaCB0aGUgY2FyZAorICAgICAgZGVzY3JpcHRpb24uICovCisgICBpZiAoIWN1cnZl KQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJ1bnN1cHBvcnRlZCBjdXJ2ZVxuIikpOwor ICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfVkFMVUUpOworICAgICAgIGdvdG8g bGVhdmU7CisgICAgIH0KKyAgIGlmICghY3JlYXRlZF9hdCkKKyAgICAgeworICAgICAgIGxvZ19l cnJvciAoXygiY3JlYXRpb24gdGltZXN0YW1wIG1pc3NpbmdcbiIpKTsKKyAgICAgICBlcnIgPSBn cGdfZXJyb3IgKEdQR19FUlJfSU5WX1ZBTFVFKTsKKyAgICAgICBnb3RvIGxlYXZlOworICAgICB9 CisgICBpZiAoa2V5bm8gPT0gMSkKKyAgICAgYWxnbyA9IFBVQktFWV9BTEdPX0VDREg7CisgICBl bHNlIGlmICghc3RyY21wIChjdXJ2ZSwgIkVkMjU1MTkiKSB8fCAhc3RyY21wIChjdXJ2ZSwgIkVk NDQ4IikpCisgICAgIGFsZ28gPSBQVUJLRVlfQUxHT19FRERTQTsKKyAgIGVsc2UKKyAgICAgYWxn byA9IFBVQktFWV9BTEdPX0VDRFNBOworIAorICAgb2lkc3RyID0gb3BlbnBncF9jdXJ2ZV90b19v aWQgKGN1cnZlLCAmbiwgTlVMTCk7CisgICBlY2NfZF9maXhlZF9sZW4gPSAobis3KS84OworICAg ZXJyID0gb3BlbnBncF9vaWRfZnJvbV9zdHIgKG9pZHN0ciwgJm9pZCk7CisgICBpZiAoZXJyKQor ICAgICBnb3RvIGxlYXZlOworICAgb2lkYnVmID0gZ2NyeV9tcGlfZ2V0X29wYXF1ZSAob2lkLCAm bik7CisgICBpZiAoIW9pZGJ1ZikKKyAgICAgeworICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9t X3N5c2Vycm9yICgpOworICAgICAgIGdvdG8gbGVhdmU7CisgICAgIH0KKyAgIG9pZF9sZW4gPSAo bis3KS84OworIAorICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5rZXlfdHlw ZSAhPSBLRVlfVFlQRV9FQ0MKKyAgICAgICB8fCBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlu b10uZWNjLmN1cnZlICE9IGN1cnZlCisgICAgICAgfHwgKGZsYWdfZGpiX3R3ZWFrICE9CisgICAg ICAgICAgIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10uZWNjLmZsYWdzICYgRUNDX0ZM QUdfREpCX1RXRUFLKSkpCisgICAgIHsKKyAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmV4dGNh cC5hbGdvX2F0dHJfY2hhbmdlKQorICAgICAgICAgeworICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICprZXlhdHRyOworIAorICAgICAgICAgICBpZiAoIW9pZF9sZW4pCisgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVEVSTkFMKTsKKyAgICAg ICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBrZXlhdHRy ID0geHRyeW1hbGxvYyAob2lkX2xlbik7CisgICAgICAgICAgIGlmICgha2V5YXR0cikKKyAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICBlcnIgPSBncGdfZXJyb3JfZnJvbV9zeXNlcnJvciAo KTsKKyAgICAgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAgICAgICAgfQorICAgICAgICAg ICBrZXlhdHRyWzBdID0gYWxnbzsKKyAgICAgICAgICAgbWVtY3B5IChrZXlhdHRyKzEsIG9pZGJ1 ZisxLCBvaWRfbGVuLTEpOworICAgICAgICAgICBlcnIgPSBjaGFuZ2Vfa2V5YXR0ciAoYXBwLCBj dHJsLCBrZXlubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWF0dHIsIG9p ZF9sZW4sIHBpbmNiLCBwaW5jYl9hcmcpOworICAgICAgICAgICB4ZnJlZSAoa2V5YXR0cik7Cisg ICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICAgIH0K KyAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgIGxvZ19lcnJvciAoImtleSBhdHRy aWJ1dGUgb24gY2FyZCBkb2Vzbid0IG1hdGNoXG4iKTsKKyAgICAgICAgICAgZXJyID0gZ3BnX2Vy cm9yIChHUEdfRVJSX0lOVl9WQUxVRSk7CisgICAgICAgICAgIGdvdG8gbGVhdmU7CisgICAgICAg ICB9CisgICAgIH0KKyAKKyAgIGlmIChvcHQudmVyYm9zZSkKKyAgICAgbG9nX2luZm8gKCJFQ0Mg cHJpdmF0ZSBrZXkgc2l6ZSBpcyAldSBieXRlc1xuIiwgKHVuc2lnbmVkIGludCllY2NfZF9sZW4p OworIAorICAgLyogV2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlZCBwdWJsaWMga2V5LiAgKi8K KyAgIHhmcmVlIChhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtleSk7CisgICBhcHAtPmFwcF9s b2NhbC0+cGtba2V5bm9dLmtleSA9IE5VTEw7CisgICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9d LmtleWxlbiA9IDA7CisgICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLnJlYWRfZG9uZSA9IDA7 CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MikKKyAgICAgeworICAgICAg IC8qIEJ1aWxkIHRoZSBwcml2YXRlIGtleSB0ZW1wbGF0ZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlv biA0LjMuMy43IG9mCisgICAgICAgICAgdGhlIE9wZW5QR1AgY2FyZCBzcGVjcyB2ZXJzaW9uIDIu MC4gICovCisgICAgICAgdW5zaWduZWQgY2hhciAqdGVtcGxhdGU7CisgICAgICAgc2l6ZV90IHRl bXBsYXRlX2xlbjsKKyAgICAgICBpbnQgZXhtb2RlOworIAorICAgICAgIGVyciA9IGJ1aWxkX2Vj Y19wcml2a2V5X3RlbXBsYXRlIChhcHAsIGtleW5vLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlY2NfZCwgZWNjX2RfbGVuLCBlY2NfZF9maXhlZF9sZW4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19xLCBlY2NfcV9sZW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wbGF0ZSwgJnRlbXBs YXRlX2xlbik7CisgICAgICAgaWYgKGVycikKKyAgICAgICAgIGdvdG8gbGVhdmU7CisgCisgICAg ICAgLyogUHJlcGFyZSBmb3Igc3RvcmluZyB0aGUga2V5LiAgKi8KKyAgICAgICBlcnIgPSB2ZXJp ZnlfY2h2MyAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgICAgICBpZiAoZXJyKQor ICAgICAgICAgeworICAgICAgICAgICB4ZnJlZSAodGVtcGxhdGUpOworICAgICAgICAgICBnb3Rv IGxlYXZlOworICAgICAgICAgfQorIAorICAgICAgIC8qIFN0b3JlIHRoZSBrZXkuICovCisgICAg ICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5jYXJkY2FwLmV4dF9sY19sZSAmJiB0ZW1wbGF0ZV9sZW4g PiAyNTQpCisgICAgICAgICBleG1vZGUgPSAxOyAgICAvKiBVc2UgZXh0ZW5kZWQgbGVuZ3RoIHcv byBhIGxpbWl0LiAgKi8KKyAgICAgICBlbHNlIGlmIChhcHAtPmFwcF9sb2NhbC0+Y2FyZGNhcC5j bWRfY2hhaW5pbmcgJiYgdGVtcGxhdGVfbGVuID4gMjU0KQorICAgICAgICAgZXhtb2RlID0gLTI1 NDsKKyAgICAgICBlbHNlCisgICAgICAgICBleG1vZGUgPSAwOworICAgICAgIGVyciA9IGlzbzc4 MTZfcHV0X2RhdGFfb2RkIChhcHBfZ2V0X3Nsb3QgKGFwcCksIGV4bW9kZSwgMHgzZmZmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSwgdGVtcGxhdGVfbGVuKTsK KyAgICAgICB4ZnJlZSAodGVtcGxhdGUpOworICAgICB9CisgICBlbHNlCisgICAgIGVyciA9IGdw Z19lcnJvciAoR1BHX0VSUl9OT1RfU1VQUE9SVEVEKTsKKyAKKyAgIGlmIChlcnIpCisgICAgIHsK KyAgICAgICBsb2dfZXJyb3IgKF8oImZhaWxlZCB0byBzdG9yZSB0aGUga2V5OiAlc1xuIiksIGdw Z19zdHJlcnJvciAoZXJyKSk7CisgICAgICAgZ290byBsZWF2ZTsKKyAgICAgfQorIAorICAgZXJy ID0gc3RvcmVfZnByIChhcHAsIGtleW5vLCBjcmVhdGVkX2F0LCBmcHJidWYsIGFsZ28sIG9pZGJ1 Ziwgb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgZWNjX3EsIGVjY19xX2xlbiwgZWNkaF9w YXJhbXMgKGN1cnZlKSwgKHNpemVfdCk0KTsKKyAKKyAgbGVhdmU6CisgICBnY3J5X21waV9yZWxl YXNlIChvaWQpOworICAgcmV0dXJuIGVycjsKKyB9CisgCisgCisgLyogSGFuZGxlIHRoZSBXUklU RUtFWSBjb21tYW5kIGZvciBPcGVuUEdQLiAgVGhpcyBmdW5jdGlvbiBleHBlY3RzIGEKKyAgICBj YW5vbmljYWwgZW5jb2RlZCBTLWV4cHJlc3Npb24gd2l0aCB0aGUgc2VjcmV0IGtleSBpbiBLRVlE QVRBIGFuZAorICAgIGl0cyBsZW5ndGggKGZvciBhc3NlcnRpb25zKSBpbiBLRVlEQVRBTEVOLiAg S0VZSUQgbmVlZHMgdG8gYmUgdGhlCisgICAgdXN1YWwga2V5aWQgd2hpY2ggZm9yIE9wZW5QR1Ag aXMgdGhlIHN0cmluZyAiT1BFTlBHUC5uIiB3aXRoCisgICAgbj0xLDIsMy4gIEJpdCAwIG9mIEZM QUdTIGluZGljYXRlcyB3aGV0aGVyIGFuIGV4aXN0aW5nIGtleSBzaGFsbAorICAgIGdldCBvdmVy d3JpdHRlbi4gIFBJTkNCIGFuZCBQSU5DQl9BUkcgYXJlIHRoZSB1c3VhbCBhcmd1bWVudHMgZm9y CisgICAgdGhlIHBpbmVudHJ5IGNhbGxiYWNrLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBk b193cml0ZWtleSAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwKKyAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqa2V5aWQsIHVuc2lnbmVkIGludCBmbGFncywKKyAgICAgICAgICAgICAgZ3BnX2Vycm9y X3QgKCpwaW5jYikodm9pZCosIGNvbnN0IGNoYXIgKiwgY2hhciAqKiksCisgICAgICAgICAgICAg IHZvaWQgKnBpbmNiX2FyZywKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 ZGF0YSwgc2l6ZV90IGtleWRhdGFsZW4pCisgeworICAgZ3BnX2Vycm9yX3QgZXJyOworICAgaW50 IGZvcmNlID0gKGZsYWdzICYgMSk7CisgICBpbnQga2V5bm87CisgICBjb25zdCB1bnNpZ25lZCBj aGFyICpidWYsICp0b2s7CisgICBzaXplX3QgYnVmbGVuLCB0b2tsZW47CisgICBpbnQgZGVwdGg7 CisgCisgICAodm9pZCljdHJsOworIAorICAgaWYgKCFhc2NpaV9zdHJjYXNlY21wIChrZXlpZCwg Ik9QRU5QR1AuMSIpKQorICAgICBrZXlubyA9IDA7CisgICBlbHNlIGlmICghYXNjaWlfc3RyY2Fz ZWNtcCAoa2V5aWQsICJPUEVOUEdQLjIiKSkKKyAgICAga2V5bm8gPSAxOworICAgZWxzZSBpZiAo IWFzY2lpX3N0cmNhc2VjbXAgKGtleWlkLCAiT1BFTlBHUC4zIikpCisgICAgIGtleW5vID0gMjsK KyAgIGVsc2UKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworIAorICAg ZXJyID0gZG9lc19rZXlfZXhpc3QgKGFwcCwga2V5bm8sIDAsIGZvcmNlKTsKKyAgIGlmIChlcnIp CisgICAgIHJldHVybiBlcnI7CisgCisgCisgICAvKgorICAgICAgUGFyc2UgdGhlIFMtZXhwcmVz c2lvbgorICAgICovCisgICBidWYgPSBrZXlkYXRhOworICAgYnVmbGVuID0ga2V5ZGF0YWxlbjsK KyAgIGRlcHRoID0gMDsKKyAgIGlmICgoZXJyID0gcGFyc2Vfc2V4cCAoJmJ1ZiwgJmJ1Zmxlbiwg JmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkpCisgICAgIGdvdG8gbGVhdmU7CisgICBpZiAoKGVyciA9 IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRvaywgJnRva2xlbikpKQorICAg ICBnb3RvIGxlYXZlOworICAgaWYgKCF0b2sgfHwgdG9rbGVuICE9IDExIHx8IG1lbWNtcCAoInBy aXZhdGUta2V5IiwgdG9rLCB0b2tsZW4pKQorICAgICB7CisgICAgICAgaWYgKCF0b2spCisgICAg ICAgICA7CisgICAgICAgZWxzZSBpZiAodG9rbGVuID09IDIxICYmICFtZW1jbXAgKCJwcm90ZWN0 ZWQtcHJpdmF0ZS1rZXkiLCB0b2ssIHRva2xlbikpCisgICAgICAgICBsb2dfaW5mbyAoInByb3Rl Y3RlZC1wcml2YXRlLWtleSBwYXNzZWQgdG8gd3JpdGVrZXlcbiIpOworICAgICAgIGVsc2UgaWYg KHRva2xlbiA9PSAyMCAmJiAhbWVtY21wICgic2hhZG93ZWQtcHJpdmF0ZS1rZXkiLCB0b2ssIHRv a2xlbikpCisgICAgICAgICBsb2dfaW5mbyAoInNoYWRvd2VkLXByaXZhdGUta2V5IHBhc3NlZCB0 byB3cml0ZWtleVxuIik7CisgICAgICAgZXJyID0gZ3BnX2Vycm9yIChHUEdfRVJSX0JBRF9TRUNL RVkpOworICAgICAgIGdvdG8gbGVhdmU7CisgICAgIH0KKyAgIGlmICgoZXJyID0gcGFyc2Vfc2V4 cCAoJmJ1ZiwgJmJ1ZmxlbiwgJmRlcHRoLCAmdG9rLCAmdG9rbGVuKSkpCisgICAgIGdvdG8gbGVh dmU7CisgICBpZiAoKGVyciA9IHBhcnNlX3NleHAgKCZidWYsICZidWZsZW4sICZkZXB0aCwgJnRv aywgJnRva2xlbikpKQorICAgICBnb3RvIGxlYXZlOworICAgaWYgKHRvayAmJiB0b2tsZW4gPT0g MyAmJiBtZW1jbXAgKCJyc2EiLCB0b2ssIHRva2xlbikgPT0gMCkKKyAgICAgZXJyID0gcnNhX3dy aXRla2V5IChhcHAsIGN0cmwsIHBpbmNiLCBwaW5jYl9hcmcsIGtleW5vLCBidWYsIGJ1Zmxlbiwg ZGVwdGgpOworICAgZWxzZSBpZiAodG9rICYmIHRva2xlbiA9PSAzICYmIG1lbWNtcCAoImVjYyIs IHRvaywgdG9rbGVuKSA9PSAwKQorICAgICBlcnIgPSBlY2Nfd3JpdGVrZXkgKGFwcCwgY3RybCwg cGluY2IsIHBpbmNiX2FyZywga2V5bm8sIGJ1ZiwgYnVmbGVuLCBkZXB0aCk7CisgICBlbHNlCisg ICAgIHsKKyAgICAgICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfV1JPTkdfUFVCS0VZX0FMR08p OworICAgICAgIGdvdG8gbGVhdmU7CisgICAgIH0KKyAKKyAgbGVhdmU6CisgICByZXR1cm4gZXJy OworIH0KKyAKKyAKKyAKKyAvKiBIYW5kbGUgdGhlIEdFTktFWSBjb21tYW5kLiAqLworIHN0YXRp YyBncGdfZXJyb3JfdAorIGRvX2dlbmtleSAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgIGNvbnN0 IGNoYXIgKmtleXJlZiwgY29uc3QgY2hhciAqa2V5YWxnbywKKyAgICAgICAgICAgIHVuc2lnbmVk IGludCBmbGFncywgdGltZV90IGNyZWF0ZXRpbWUsCisgICAgICAgICAgICBncGdfZXJyb3JfdCAo KnBpbmNiKSh2b2lkKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKSwKKyAgICAgICAgICAgIHZvaWQg KnBpbmNiX2FyZykKKyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgICBjaGFyIG51bWJ1ZlszMF07 CisgICBjb25zdCBjaGFyICprZXlub3N0cjsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5V TEw7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXlkYXRhOworICAgc2l6ZV90IGJ1Zmxlbiwg a2V5ZGF0YWxlbjsKKyAgIHUzMiBjcmVhdGVkX2F0OworICAgaW50IGtleW5vOworICAgaW50IGZv cmNlID0gISEoZmxhZ3MgJiBBUFBfR0VOS0VZX0ZMQUdfRk9SQ0UpOworICAgdGltZV90IHN0YXJ0 X2F0OworICAgaW50IGV4bW9kZSA9IDA7CisgICBpbnQgbGVfdmFsdWUgPSAyNTY7IC8qIFVzZSBs ZWdhY3kgdmFsdWUuICovCisgCisgICAvKiBTdHJpcCB0aGUgT3BlblBHUCBwcmVmaXggd2hpY2gg aXMgZm9yIGhpc3RvcmljYWwgcmVhc29ucyBvcHRpb25hbC4gICovCisgICBrZXlub3N0ciA9IGtl eXJlZjsKKyAgIGlmICghYXNjaWlfc3RybmNhc2VjbXAgKGtleW5vc3RyLCAiT1BFTlBHUC4iLCA4 KSkKKyAgICAga2V5bm9zdHIgKz0gODsKKyAKKyAgIGtleW5vID0gYXRvaSAoa2V5bm9zdHIpIC0g MTsKKyAgIGlmICghZGlnaXRwIChrZXlub3N0cikgfHwga2V5bm8gPCAwIHx8IGtleW5vID4gMikK KyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworIAorICAgLyogV2UgZmx1 c2ggdGhlIGNhY2hlIHRvIGluY3JlYXNlIHRoZSB0cmFmZmljIGJlZm9yZSBhIGtleQorICAgICAg Z2VuZXJhdGlvbi4gIFRoaXMgX21pZ2h0XyBoZWxwIGEgY2FyZCB0byBnYXRoZXIgbW9yZSBlbnRy b3B5LiAqLworICAgZmx1c2hfY2FjaGUgKGFwcCk7CisgCisgICAvKiBPYnZpb3VzbHkgd2UgbmVl ZCB0byByZW1vdmUgdGhlIGNhY2hlZCBwdWJsaWMga2V5LiAgKi8KKyAgIHhmcmVlIChhcHAtPmFw cF9sb2NhbC0+cGtba2V5bm9dLmtleSk7CisgICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtl eSA9IE5VTEw7CisgICBhcHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLmtleWxlbiA9IDA7CisgICBh cHAtPmFwcF9sb2NhbC0+cGtba2V5bm9dLnJlYWRfZG9uZSA9IDA7CisgCisgICAvKiBDaGVjayB3 aGV0aGVyIGEga2V5IGFscmVhZHkgZXhpc3RzLiAgKi8KKyAgIGVyciA9IGRvZXNfa2V5X2V4aXN0 IChhcHAsIGtleW5vLCAxLCBmb3JjZSk7CisgICBpZiAoZXJyKQorICAgICByZXR1cm4gZXJyOwor IAorICAgaWYgKGtleWFsZ28gJiYgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmtleWFs Z28KKyAgICAgICAmJiBzdHJjbXAgKGtleWFsZ28sIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tl eW5vXS5rZXlhbGdvKSkKKyAgICAgeworICAgICAgIC8qIFNwZWNpZmljIGFsZ29yaXRobSByZXF1 ZXN0ZWQgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50bHkKKyAgICAgICAgKiBjb25maWd1cmVkIGFs Z29yaXRobS4gIENoYW5nZSBpdC4gICovCisgICAgICAgbG9nX2luZm8gKCJvcGVucGdwOiBjaGFu Z2luZyBrZXkgYXR0cmlidXRlIGZyb20gJXMgdG8gJXNcbiIsCisgICAgICAgICAgICAgICAgICBh cHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5YWxnbywga2V5YWxnbyk7CisgICAgICAg ZXJyID0gY2hhbmdlX2tleWF0dHJfZnJvbV9zdHJpbmcgKGFwcCwgY3RybCwgcGluY2IsIHBpbmNi X2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cmVmLCBr ZXlhbGdvLCBOVUxMLCAwKTsKKyAgICAgICBpZiAoZXJyKQorICAgICAgICAgcmV0dXJuIGVycjsK KyAgICAgfQorIAorICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5rZXlfdHlw ZSA9PSBLRVlfVFlQRV9SU0EpCisgICAgIHsKKyAgICAgICB1bnNpZ25lZCBpbnQga2V5Yml0cyA9 IGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2Eubl9iaXRzOworIAorICAgICAgIC8q IEJlY2F1c2Ugd2Ugc2VuZCB0aGUga2V5IHBhcmFtZXRlciBiYWNrIHZpYSBzdGF0dXMgbGluZXMg d2UgbmVlZAorICAgICAgICAgIHRvIHB1dCBhIGxpbWl0IG9uIHRoZSBtYXguIGFsbG93ZWQga2V5 c2l6ZS4gIDIwNDggYml0IHdpbGwKKyAgICAgICAgICBhbHJlYWR5IGxlYWQgdG8gYSA1MjcgYnl0 ZSBsb25nIHN0YXR1cyBsaW5lIGFuZCB0aHVzIGEgNDA5NiBiaXQKKyAgICAgICAgICBrZXkgd291 bGQgZXhjZWVkIHRoZSBBc3N1YW4gbGluZSBsZW5ndGggbGltaXQuICAqLworICAgICAgIGlmIChr ZXliaXRzID4gNDA5NikKKyAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfVE9PX0xB UkdFKTsKKyAKKyAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAuZXh0X2xjX2xlICYm IGtleWJpdHMgPiBSU0FfU01BTExfU0laRV9LRVkKKyAgICAgICAgICAgJiYgYXBwLT5hcHBfbG9j YWwtPmtleWF0dHJba2V5bm9dLmtleV90eXBlID09IEtFWV9UWVBFX1JTQSkKKyAgICAgICAgIHsK KyAgICAgICAgICAgZXhtb2RlID0gMTsgICAgLyogVXNlIGV4dGVuZGVkIGxlbmd0aCB3L28gYSBs aW1pdC4gICovCisgICAgICAgICAgIGxlX3ZhbHVlID0gZGV0ZXJtaW5lX3JzYV9yZXNwb25zZSAo YXBwLCBrZXlubyk7CisgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2hlY2sgbGVfdmFsdWUgYmVj YXVzZSBpdCBjb21lcyBmcm9tIGEgMTYgYml0CisgICAgICAgICAgICAgIHZhbHVlIGFuZCB0aHVz IGNhbid0IGNyZWF0ZSBhbiBvdmVyZmxvdyBvbiBhIDMyIGJpdAorICAgICAgICAgICAgICBzeXN0 ZW0uICAqLworICAgICAgICAgfQorICAgICB9CisgCisgICAvKiBQcmVwYXJlIGZvciBrZXkgZ2Vu ZXJhdGlvbiBieSB2ZXJpZnlpbmcgdGhlIEFkbWluIFBJTi4gICovCisgICBlcnIgPSB2ZXJpZnlf Y2h2MyAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnKTsKKyAgIGlmIChlcnIpCisgICAgIHJl dHVybiBlcnI7CisgCisgCisgICBsb2dfaW5mbyAoXygicGxlYXNlIHdhaXQgd2hpbGUga2V5IGlz IGJlaW5nIGdlbmVyYXRlZCAuLi5cbiIpKTsKKyAgIHN0YXJ0X2F0ID0gdGltZSAoTlVMTCk7Cisg ICBlcnIgPSBpc283ODE2X2dlbmVyYXRlX2tleXBhaXIgKGFwcF9nZXRfc2xvdCAoYXBwKSwgZXht b2RlLCAweDgwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5bm8g PT0gMD8gIlx4QjYiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5v ID09IDE/ICJceEI4IiA6ICJceEE0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDIsIGxlX3ZhbHVlLCAmYnVmZmVyLCAmYnVmbGVuKTsKKyAgIGlmIChlcnIpCisgICAgIHsK KyAgICAgICBsb2dfZXJyb3IgKF8oImdlbmVyYXRpbmcga2V5IGZhaWxlZFxuIikpOworICAgICAg IHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICAgIH0KKyAKKyAgIHsKKyAgICAg aW50IG5zZWNzID0gKGludCkodGltZSAoTlVMTCkgLSBzdGFydF9hdCk7CisgICAgIGxvZ19pbmZv IChuZ2V0dGV4dCgia2V5IGdlbmVyYXRpb24gY29tcGxldGVkICglZCBzZWNvbmQpXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgImtleSBnZW5lcmF0aW9uIGNvbXBsZXRlZCAoJWQgc2Vjb25k cylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBuc2VjcyksIG5zZWNzKTsKKyAgIH0KKyAK KyAgIGtleWRhdGEgPSBmaW5kX3RsdiAoYnVmZmVyLCBidWZsZW4sIDB4N0Y0OSwgJmtleWRhdGFs ZW4pOworICAgaWYgKCFrZXlkYXRhKQorICAgICB7CisgICAgICAgZXJyID0gZ3BnX2Vycm9yIChH UEdfRVJSX0NBUkQpOworICAgICAgIGxvZ19lcnJvciAoXygicmVzcG9uc2UgZG9lcyBub3QgY29u dGFpbiB0aGUgcHVibGljIGtleSBkYXRhXG4iKSk7CisgICAgICAgZ290byBsZWF2ZTsKKyAgICAg fQorIAorICAgY3JlYXRlZF9hdCA9ICh1MzIpKGNyZWF0ZXRpbWU/IGNyZWF0ZXRpbWUgOiBnbnVw Z19nZXRfdGltZSAoKSk7CisgICBzcHJpbnRmIChudW1idWYsICIldSIsIGNyZWF0ZWRfYXQpOwor ICAgc2VuZF9zdGF0dXNfaW5mbyAoY3RybCwgIktFWS1DUkVBVEVELUFUIiwKKyAgICAgICAgICAg ICAgICAgICAgIG51bWJ1ZiwgKHNpemVfdClzdHJsZW4obnVtYnVmKSwgTlVMTCwgMCk7CisgCisg ICBlcnIgPSByZWFkX3B1YmxpY19rZXkgKGFwcCwgY3RybCwgY3JlYXRlZF9hdCwga2V5bm8sIGJ1 ZmZlciwgYnVmbGVuKTsKKyAgbGVhdmU6CisgICB4ZnJlZSAoYnVmZmVyKTsKKyAgIHJldHVybiBl cnI7CisgfQorIAorIAorIHN0YXRpYyB1bnNpZ25lZCBsb25nCisgY29udmVydF9zaWdfY291bnRl cl92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZWxlbikKKyB7 CisgICB1bnNpZ25lZCBsb25nIHVsOworIAorICAgaWYgKHZhbHVlbGVuID09IDMgKQorICAgICB1 bCA9ICh2YWx1ZVswXSA8PCAxNikgfCAodmFsdWVbMV0gPDwgOCkgfCB2YWx1ZVsyXTsKKyAgIGVs c2UKKyAgICAgeworICAgICAgIGxvZ19lcnJvciAoXygiaW52YWxpZCBzdHJ1Y3R1cmUgb2YgT3Bl blBHUCBjYXJkIChETyAweDkzKVxuIikpOworICAgICAgIHVsID0gMDsKKyAgICAgfQorICAgcmV0 dXJuIHVsOworIH0KKyAKKyBzdGF0aWMgdW5zaWduZWQgbG9uZworIGdldF9zaWdfY291bnRlciAo YXBwX3QgYXBwKQorIHsKKyAgIHZvaWQgKnJlbHB0cjsKKyAgIHVuc2lnbmVkIGNoYXIgKnZhbHVl OworICAgc2l6ZV90IHZhbHVlbGVuOworICAgdW5zaWduZWQgbG9uZyB1bDsKKyAKKyAgIHJlbHB0 ciA9IGdldF9vbmVfZG8gKGFwcCwgMHgwMDkzLCAmdmFsdWUsICZ2YWx1ZWxlbiwgTlVMTCk7Cisg ICBpZiAoIXJlbHB0cikKKyAgICAgcmV0dXJuIDA7CisgICB1bCA9IGNvbnZlcnRfc2lnX2NvdW50 ZXJfdmFsdWUgKHZhbHVlLCB2YWx1ZWxlbik7CisgICB4ZnJlZSAocmVscHRyKTsKKyAgIHJldHVy biB1bDsKKyB9CisgCisgc3RhdGljIGdwZ19lcnJvcl90CisgY29tcGFyZV9maW5nZXJwcmludCAo YXBwX3QgYXBwLCBpbnQga2V5bm8sIHVuc2lnbmVkIGNoYXIgKnNoYTFmcHIpCisgeworICAgY29u c3QgdW5zaWduZWQgY2hhciAqZnByOworICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICAgc2l6 ZV90IGJ1ZmxlbiwgbjsKKyAgIGludCByYywgaTsKKyAKKyAgIGxvZ19hc3NlcnQgKGtleW5vID49 IDAgJiYga2V5bm8gPD0gMik7CisgCisgICByYyA9IGdldF9jYWNoZWRfZGF0YSAoYXBwLCAweDAw NkUsICZidWZmZXIsICZidWZsZW4sIDAsIDApOworICAgaWYgKHJjKQorICAgICB7CisgICAgICAg bG9nX2Vycm9yIChfKCJlcnJvciByZWFkaW5nIGFwcGxpY2F0aW9uIGRhdGFcbiIpKTsKKyAgICAg ICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0dFTkVSQUwpOworICAgICB9CisgICBmcHIgPSBm aW5kX3RsdiAoYnVmZmVyLCBidWZsZW4sIDB4MDBDNSwgJm4pOworICAgaWYgKCFmcHIgfHwgbiA8 IDYwKQorICAgICB7CisgICAgICAgeGZyZWUgKGJ1ZmZlcik7CisgICAgICAgbG9nX2Vycm9yIChf KCJlcnJvciByZWFkaW5nIGZpbmdlcnByaW50IERPXG4iKSk7CisgICAgICAgcmV0dXJuIGdwZ19l cnJvciAoR1BHX0VSUl9HRU5FUkFMKTsKKyAgICAgfQorICAgZnByICs9IGtleW5vKjIwOworICAg Zm9yIChpPTA7IGkgPCAyMDsgaSsrKQorICAgICBpZiAoc2hhMWZwcltpXSAhPSBmcHJbaV0pCisg ICAgICAgeworICAgICAgICAgeGZyZWUgKGJ1ZmZlcik7CisgICAgICAgICBsb2dfaW5mbyAoXygi ZmluZ2VycHJpbnQgb24gY2FyZCBkb2VzIG5vdCBtYXRjaCByZXF1ZXN0ZWQgb25lXG4iKSk7Cisg ICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX1dST05HX1NFQ0tFWSk7CisgICAgICAg fQorICAgeGZyZWUgKGJ1ZmZlcik7CisgICByZXR1cm4gMDsKKyB9CisgCisgCisgLyogSWYgYSBm aW5nZXJwcmludCBoYXMgYmVlbiBzcGVjaWZpZWQgY2hlY2sgaXQgYWdhaW5zdCB0aGUgb25lIG9u IHRoZQorICAgIGNhcmQuICBUaGlzIGFsbG93cyBmb3IgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3Nh Z2UgaW4gY2FzZSB0aGUga2V5CisgICAgb24gdGhlIGNhcmQgaGFzIGJlZW4gcmVwbGFjZWQgYnV0 IHRoZSBzaGFkb3cgaW5mb3JtYXRpb24ga25vd24gdG8KKyAgICBncGcgaGFzIG5vdCBiZWVuIHVw ZGF0ZWQuICBJZiB0aGVyZSBpcyBubyBmaW5nZXJwcmludCB3ZSBhc3N1bWUKKyAgICB0aGF0IHRo aXMgaXMgb2theS4gKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBjaGVja19hZ2FpbnN0X2dpdmVu X2ZpbmdlcnByaW50IChhcHBfdCBhcHAsIGNvbnN0IGNoYXIgKmZwciwgaW50IGtleSkKKyB7Cisg ICB1bnNpZ25lZCBjaGFyIHRtcFsyMF07CisgICBjb25zdCBjaGFyICpzOworICAgaW50IG47Cisg CisgICBmb3IgKHM9ZnByLCBuPTA7IGhleGRpZ2l0cCAocyk7IHMrKywgbisrKQorICAgICA7Cisg ICBpZiAobiAhPSA0MCkKKyAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOwor ICAgZWxzZSBpZiAoISpzKQorICAgICA7IC8qIG9rYXkgKi8KKyAgIGVsc2UKKyAgICAgcmV0dXJu IGdwZ19lcnJvciAoR1BHX0VSUl9JTlZfSUQpOworIAorICAgZm9yIChzPWZwciwgbj0wOyBuIDwg MjA7IHMgKz0gMiwgbisrKQorICAgICAgICAgdG1wW25dID0geHRvaV8yIChzKTsKKyAgIHJldHVy biBjb21wYXJlX2ZpbmdlcnByaW50IChhcHAsIGtleS0xLCB0bXApOworIH0KKyAKKyAKKyAvKiBD aGVjayBLRVlJRFNUUiwgaWYgaXQncyB2YWxpZC4KKyAgICBXaGVuIEtFWU5PIGlzIDAsIGl0IG1l YW5zIGl0J3MgZm9yIFBJTiBjaGVjay4KKyAgICBPdGhlcndpc2UsIEtFWU5PIGNvcnJlc3BvbmRz IHRvIHRoZSBzbG90IChzaWduaW5nLCBkZWNpcGhlciBhbmQgYXV0aCkuCisgICAgS0VZSURTVFIg aXMgZWl0aGVyOgorICAgICAoMSkgU2VyaWFsIG51bWJlcgorICAgICAoMikgU2VyaWFsIG51bWJl ciAiLyIgZmluZ2VycHJpbnQKKyAgICAgKDMpIFNlcmlhbCBudW1iZXIgIltDSFYzXSIKKyAgICAg KDQpIGtleWdyaXAKKyAKKyAgICBXaGVuIEtFWU5PIGlzIDAgYW5kIEtFWUlEU1RSIGlzIGZvciBh IGtleWdyaXAsIHRoZSBrZXlncmlwIHNob3VsZAorICAgIGJlIHRvIGJlIGNvbXBhcmVkIGlzIHRo ZSBmaXJzdCBvbmUgKGtleWdyaXAgZm9yIHNpZ25pbmcpLgorICAgIFdoZW4gS0VZTk8gaXMgMSwg S0VZSURTVFIgaXMgZm9yIGEga2V5Z3JpcCwgYW5kIFJfVVNFX0FVVEggaXMgbm90CisgICAgTlVM TCwgT3BlblBHUC4xIGlzIGZpcnN0IHRlc3RlZCBhbmQgdGhlbiBPcGVuUEdQLjMuICBJbiB0aGUg bGF0dGVyCisgICAgY2FzZSAxIGlzIHN0b3JlZCBhdCBSX1VTRV9BVVRICisgICovCisgc3RhdGlj IGludAorIGNoZWNrX2tleWlkc3RyIChhcHBfdCBhcHAsIGNvbnN0IGNoYXIgKmtleWlkc3RyLCBp bnQga2V5bm8sIGludCAqcl91c2VfYXV0aCkKKyB7CisgICBpbnQgcmM7CisgICBjb25zdCBjaGFy ICpzOworICAgaW50IG47CisgICBjb25zdCBjaGFyICpmcHIgPSBOVUxMOworIAorICAgaWYgKHJf dXNlX2F1dGgpCisgICAgICpyX3VzZV9hdXRoID0gMDsKKyAKKyAgIGlmIChzdHJsZW4gKGtleWlk c3RyKSA8IDMyKQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9JRCk7CisgICBl bHNlCisgICAgIHsKKyAgICAgICBjaGFyICpzZXJpYWw7CisgCisgICAgICAgZm9yIChzPWtleWlk c3RyLCBuPTA7IGhleGRpZ2l0cCAocyk7IHMrKywgbisrKQorICAgICAgICAgOworIAorICAgICAg IC8qIENoZWNrIGlmIGl0J3MgYSBrZXlncmlwICovCisgICAgICAgaWYgKG4gPT0gNDApCisgICAg ICAgICB7CisgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleWdyaXBfc3RyOworIAor ICAgICAgICAgICBrZXlncmlwX3N0ciA9IGFwcC0+YXBwX2xvY2FsLT5wa1trZXlubz9rZXluby0x OjBdLmtleWdyaXBfc3RyOworICAgICAgICAgICBpZiAoIXN0cm5jbXAgKGtleWdyaXBfc3RyLCBr ZXlpZHN0ciwgNDApKQorICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICBlbHNlIGlm IChrZXlubyA9PSAxICYmIHJfdXNlX2F1dGgKKyAgICAgICAgICAgICAgICAgICAgJiYgIXN0cm5j bXAgKGFwcC0+YXBwX2xvY2FsLT5wa1syXS5rZXlncmlwX3N0ciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGtleWlkc3RyLCA0MCkpCisgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgKnJfdXNlX2F1dGggPSAxOworICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg ICAgICAgfQorICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgcmV0dXJuIGdwZ19lcnJvciAo R1BHX0VSUl9JTlZfSUQpOworICAgICAgICAgfQorIAorICAgICAgIC8qIEZvciBhIGRlc2NyaXB0 aW9uIG9mIHRoZSBzZXJpYWxubyBjb21wYXJlIGZ1bmN0aW9uIHNlZQorICAgICAgICAqIGlzX3Nh bWVfc2VyaWFsbm8uICBXZSBkb24ndCB1c2UgdGhhdCBmdW5jdGlvbiBiZWNhdXNlIGhlcmUgd2UK KyAgICAgICAgKiBhcmUgd29ya2luZyBvbiBhIGhleCBzdHJpbmcuICAqLworICAgICAgIGlmIChu ICE9IDMyIHx8IGFzY2lpX3N0cm5jYXNlY21wIChrZXlpZHN0ciwgIkQyNzYwMDAxMjQwMSIsIDEy KSkKKyAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX0lEKTsKKyAgICAgICBl bHNlIGlmICghKnMpCisgICAgICAgICA7IC8qIG5vIGZpbmdlcnByaW50IGdpdmVuOiB3ZSBhbGxv dyB0aGlzIGZvciBub3cuICovCisgICAgICAgZWxzZSBpZiAoKnMgPT0gJy8nKQorICAgICAgICAg ZnByID0gcyArIDE7CisgCisgICAgICAgc2VyaWFsID0gYXBwX2dldF9zZXJpYWxubyAoYXBwKTsK KyAgICAgICBpZiAoIXNlcmlhbCB8fCBzdHJsZW4gKHNlcmlhbCkgIT0gMzIKKyAgICAgICAgICAg fHwgYXNjaWlfbWVtY2FzZWNtcCAoc2VyaWFsLCAiRDI3NjAwMDEyNDAxIiwgMTIpCisgICAgICAg ICAgIHx8IGFzY2lpX21lbWNhc2VjbXAgKHNlcmlhbCsxNiwga2V5aWRzdHIrMTYsIDE2KSkKKyAg ICAgICAgIHsKKyAgICAgICAgICAgeGZyZWUgKHNlcmlhbCk7CisgICAgICAgICAgIHJldHVybiBn cGdfZXJyb3IgKEdQR19FUlJfV1JPTkdfQ0FSRCk7CisgICAgICAgICB9CisgCisgICAgICAgeGZy ZWUgKHNlcmlhbCk7CisgICAgIH0KKyAKKyAgIC8qIElmIGEgZmluZ2VycHJpbnQgaGFzIGJlZW4g c3BlY2lmaWVkIGNoZWNrIGl0IGFnYWluc3QgdGhlIG9uZSBvbgorICAgICAgdGhlIGNhcmQuICBU aGlzIGlzIGFsbG93cyBmb3IgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UgaW4gY2FzZQorICAg ICAgdGhlIGtleSBvbiB0aGUgY2FyZCBoYXMgYmVlbiByZXBsYWNlZCBidXQgdGhlIHNoYWRvdyBp bmZvcm1hdGlvbgorICAgICAga25vd24gdG8gZ3BnIHdhcyBub3QgdXBkYXRlZC4gIElmIHRoZXJl IGlzIG5vIGZpbmdlcnByaW50LCBncGcKKyAgICAgIHdpbGwgZGV0ZWN0IGEgYm9ndXMgc2lnbmF0 dXJlIGFueXdheSBkdWUgdG8gdGhlCisgICAgICB2ZXJpZnktYWZ0ZXItc2lnbmluZyBmZWF0dXJl LiAqLworICAgcmMgPSAoZnByJiZrZXlubyk/IGNoZWNrX2FnYWluc3RfZ2l2ZW5fZmluZ2VycHJp bnQgKGFwcCwgZnByLCBrZXlubykgOiAwOworIAorICAgcmV0dXJuIHJjOworIH0KKyAKKyAKKyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBybWQxNjBfcHJlZml4WzE1XSA9IC8qIE9iamVjdCBJ RCBpcyAxLjMuMzYuMy4yLjEgKi8KKyAgIHsgMHgzMCwgMHgyMSwgMHgzMCwgMHgwOSwgMHgwNiwg MHgwNSwgMHgyYiwgMHgyNCwgMHgwMywKKyAgICAgMHgwMiwgMHgwMSwgMHgwNSwgMHgwMCwgMHgw NCwgMHgxNCAgfTsKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByZWZpeFsxNV0g PSAgIC8qICgxLjMuMTQuMy4yLjI2KSAqLworICAgeyAweDMwLCAweDIxLCAweDMwLCAweDA5LCAw eDA2LCAweDA1LCAweDJiLCAweDBlLCAweDAzLAorICAgICAweDAyLCAweDFhLCAweDA1LCAweDAw LCAweDA0LCAweDE0ICB9OworIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcmVm aXhbMTldID0gLyogKDIuMTYuODQwLjEuMTAxLjMuNC4yLjQpICovCisgICB7IDB4MzAsIDB4MkQs IDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsIDB4NDgsCisgICAgIDB4MDEsIDB4 NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDUsIDB4MDAsIDB4MDQsCisgICAgIDB4MUMg IH07Cisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByZWZpeFsxOV0gPSAvKiAo Mi4xNi44NDAuMS4xMDEuMy40LjIuMSkgKi8KKyAgIHsgMHgzMCwgMHgzMSwgMHgzMCwgMHgwZCwg MHgwNiwgMHgwOSwgMHg2MCwgMHg4NiwKKyAgICAgMHg0OCwgMHgwMSwgMHg2NSwgMHgwMywgMHgw NCwgMHgwMiwgMHgwMSwgMHgwNSwKKyAgICAgMHgwMCwgMHgwNCwgMHgyMCAgfTsKKyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJlZml4WzE5XSA9IC8qICgyLjE2Ljg0MC4xLjEw MS4zLjQuMi4yKSAqLworICAgeyAweDMwLCAweDQxLCAweDMwLCAweDBkLCAweDA2LCAweDA5LCAw eDYwLCAweDg2LAorICAgICAweDQ4LCAweDAxLCAweDY1LCAweDAzLCAweDA0LCAweDAyLCAweDAy LCAweDA1LAorICAgICAweDAwLCAweDA0LCAweDMwICB9OworIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTUxMl9wcmVmaXhbMTldID0gLyogKDIuMTYuODQwLjEuMTAxLjMuNC4yLjMpICov CisgICB7IDB4MzAsIDB4NTEsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4NjAsIDB4ODYsCisg ICAgIDB4NDgsIDB4MDEsIDB4NjUsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MDMsIDB4MDUsCisgICAg IDB4MDAsIDB4MDQsIDB4NDAgIH07CisgCisgLyogQ29tcHV0ZSBhIGRpZ2l0YWwgc2lnbmF0dXJl IG9uIElOREFUQSB3aGljaCBpcyBleHBlY3RlZCB0byBiZSB0aGUKKyAgICByYXcgbWVzc2FnZSBk aWdlc3QuIEZvciB0aGlzIGFwcGxpY2F0aW9uIHRoZSBLRVlJRFNUUiBjb25zaXN0cyBvZgorICAg IHRoZSBzZXJpYWxudW1iZXIgYW5kIHRoZSBmaW5nZXJwcmludCBkZWxpbWl0ZWQgYnkgYSBzbGFz aC4KKyAKKyAgICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIHRoZSBlcnJvciBj b2RlCisgICAgR1BHX0VSUl9XUk9OR19DQVJEIHRvIGluZGljYXRlIHRoYXQgdGhlIGNhcmQgY3Vy cmVudGx5IHByZXNlbnQgZG9lcworICAgIG5vdCBtYXRjaCB0aGUgb25lIHJlcXVpcmVkIGZvciB0 aGUgcmVxdWVzdGVkIGFjdGlvbiAoZS5nLiB0aGUKKyAgICBzZXJpYWwgbnVtYmVyIGRvZXMgbm90 IG1hdGNoKS4KKyAKKyAgICBBcyBhIHNwZWNpYWwgZmVhdHVyZSBhIEtFWUlEU1RSIG9mICJPUEVO UEdQLjMiIHJlZGlyZWN0cyB0aGUKKyAgICBvcGVyYXRpb24gdG8gdGhlIGF1dGggY29tbWFuZC4K KyAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGRvX3NpZ24gKGFwcF90IGFwcCwgY3RybF90IGN0 cmwsIGNvbnN0IGNoYXIgKmtleWlkc3RyLCBpbnQgaGFzaGFsZ28sCisgICAgICAgICAgZ3BnX2Vy cm9yX3QgKCpwaW5jYikodm9pZCosIGNvbnN0IGNoYXIgKiwgY2hhciAqKiksCisgICAgICAgICAg dm9pZCAqcGluY2JfYXJnLAorICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGF0YSwgc2l6ZV90IGlu ZGF0YWxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0ZGF0YSwgc2l6ZV90ICpvdXRk YXRhbGVuICkKKyB7CisgICBpbnQgcmM7CisgICB1bnNpZ25lZCBjaGFyIGRhdGFbMTkrNjRdOwor ICAgc2l6ZV90IGRhdGFsZW47CisgICB1bnNpZ25lZCBsb25nIHNpZ2NvdW50OworICAgaW50IHVz ZV9hdXRoID0gMDsKKyAgIGludCBleG1vZGUsIGxlX3ZhbHVlOworIAorICAgaWYgKCFrZXlpZHN0 ciB8fCAhKmtleWlkc3RyKQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9WQUxV RSk7CisgCisgICAvKiBTdHJpcCBvZmYga25vd24gcHJlZml4ZXMuICAqLworICNkZWZpbmUgWChh LGIsYyxkKSBcCisgICBpZiAoaGFzaGFsZ28gPT0gR0NSWV9NRF8gIyMgYSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgJiYgKGQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgJiYgaW5kYXRhbGVuID09IHNpemVv ZiBiICMjIF9wcmVmaXggKyAoYykgICAgICAgICAgICAgICBcCisgICAgICAgJiYgIW1lbWNtcCAo aW5kYXRhLCBiICMjIF9wcmVmaXgsIHNpemVvZiBiICMjIF9wcmVmaXgpKSBcCisgICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgaW5kYXRhID0gKGNvbnN0IGNoYXIqKWluZGF0YSArIHNpemVvZiBiICMjIF9wcmVmaXg7 ICAgICBcCisgICAgICAgaW5kYXRhbGVuIC09IHNpemVvZiBiICMjIF9wcmVmaXg7ICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgIH0KKyAKKyAgIGlmIChpbmRhdGFsZW4gPT0gMjApCisgICAg IDsgIC8qIEFzc3VtZSBhIHBsYWluIFNIQS0xIG9yIFJNRDE2MCBkaWdlc3QgaGFzIGJlZW4gZ2l2 ZW4uICAqLworICAgZWxzZSBYKFNIQTEsICAgc2hhMSwgICAyMCwgMSkKKyAgIGVsc2UgWChSTUQx NjAsIHJtZDE2MCwgMjAsIDEpCisgICBlbHNlIFgoU0hBMjI0LCBzaGEyMjQsIDI4LCBhcHAtPmFw cF9sb2NhbC0+ZXh0Y2FwLmlzX3YyKQorICAgZWxzZSBYKFNIQTI1Niwgc2hhMjU2LCAzMiwgYXBw LT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MikKKyAgIGVsc2UgWChTSEEzODQsIHNoYTM4NCwgNDgs IGFwcC0+YXBwX2xvY2FsLT5leHRjYXAuaXNfdjIpCisgICBlbHNlIFgoU0hBNTEyLCBzaGE1MTIs IDY0LCBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmlzX3YyKQorICAgZWxzZSBpZiAoKGluZGF0YWxl biA9PSAyOCB8fCBpbmRhdGFsZW4gPT0gMzIKKyAgICAgICAgICAgICB8fCBpbmRhdGFsZW4gPT0g NDggfHwgaW5kYXRhbGVuID09NjQpCisgICAgICAgICAgICAmJiBhcHAtPmFwcF9sb2NhbC0+ZXh0 Y2FwLmlzX3YyKQorICAgICA7ICAvKiBBc3N1bWUgYSBwbGFpbiBTSEEtMyBkaWdlc3QgaGFzIGJl ZW4gZ2l2ZW4uICAqLworICAgZWxzZQorICAgICB7CisgICAgICAgbG9nX2Vycm9yIChfKCJjYXJk IGRvZXMgbm90IHN1cHBvcnQgZGlnZXN0IGFsZ29yaXRobSAlc1xuIiksCisgICAgICAgICAgICAg ICAgICBnY3J5X21kX2FsZ29fbmFtZSAoaGFzaGFsZ28pKTsKKyAgICAgICAvKiBPciB0aGUgc3Vw cGxpZWQgZGlnZXN0IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBhbiBhbGdvcml0aG0uICAqLworICAg ICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfSU5WX1ZBTFVFKTsKKyAgICAgfQorICN1bmRl ZiBYCisgCisgICAvKiBDaGVjayB3aGV0aGVyIGFuIE9wZW5QR1AgY2FyZCBvZiBhbnkgdmVyc2lv biBoYXMgYmVlbiByZXF1ZXN0ZWQuICovCisgICBpZiAoIWFzY2lpX3N0cmNhc2VjbXAgKGtleWlk c3RyLCAiT1BFTlBHUC4xIikpCisgICAgIDsKKyAgIGVsc2UgaWYgKCFhc2NpaV9zdHJjYXNlY21w IChrZXlpZHN0ciwgIk9QRU5QR1AuMyIpKQorICAgICB1c2VfYXV0aCA9IDE7CisgICBlbHNlCisg ICAgIHsKKyAgICAgICByYyA9IGNoZWNrX2tleWlkc3RyIChhcHAsIGtleWlkc3RyLCAxLCAmdXNl X2F1dGgpOworICAgICAgIGlmIChyYykKKyAgICAgICAgIHJldHVybiByYzsKKyAgICAgfQorIAor ICAgLyogQ29uY2F0ZW5hdGUgcHJlZml4IGFuZCBkaWdlc3QuICAqLworICNkZWZpbmUgWChhLGIs ZCkgXAorICAgaWYgKGhhc2hhbGdvID09IEdDUllfTURfICMjIGEgJiYgKGQpICkgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGRhdGFsZW4gPSBzaXplb2YgYiAjIyBfcHJl Zml4ICsgaW5kYXRhbGVuOyAgICAgICAgICAgICAgXAorICAgICAgIGxvZ19hc3NlcnQgKGRhdGFs ZW4gPD0gc2l6ZW9mIGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBtZW1j cHkgKGRhdGEsIGIgIyMgX3ByZWZpeCwgc2l6ZW9mIGIgIyMgX3ByZWZpeCk7ICAgICAgIFwKKyAg ICAgICBtZW1jcHkgKGRhdGEgKyBzaXplb2YgYiAjIyBfcHJlZml4LCBpbmRhdGEsIGluZGF0YWxl bik7IFwKKyAgICAgfQorIAorICAgaWYgKHVzZV9hdXRoCisgICAgICAgfHwgYXBwLT5hcHBfbG9j YWwtPmtleWF0dHJbdXNlX2F1dGg/IDI6IDBdLmtleV90eXBlID09IEtFWV9UWVBFX1JTQSkKKyAg ICAgeworICAgICAgIFgoU0hBMSwgICBzaGExLCAgIDEpCisgICAgICAgZWxzZSBYKFJNRDE2MCwg cm1kMTYwLCAxKQorICAgICAgIGVsc2UgWChTSEEyMjQsIHNoYTIyNCwgYXBwLT5hcHBfbG9jYWwt PmV4dGNhcC5pc192MikKKyAgICAgICBlbHNlIFgoU0hBMjU2LCBzaGEyNTYsIGFwcC0+YXBwX2xv Y2FsLT5leHRjYXAuaXNfdjIpCisgICAgICAgZWxzZSBYKFNIQTM4NCwgc2hhMzg0LCBhcHAtPmFw cF9sb2NhbC0+ZXh0Y2FwLmlzX3YyKQorICAgICAgIGVsc2UgWChTSEE1MTIsIHNoYTUxMiwgYXBw LT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MikKKyAgICAgICBlbHNlCisgICAgICAgICByZXR1cm4g Z3BnX2Vycm9yIChHUEdfRVJSX1VOU1VQUE9SVEVEX0FMR09SSVRITSk7CisgICAgIH0KKyAgIGVs c2UKKyAgICAgeworICAgICAgIGRhdGFsZW4gPSBpbmRhdGFsZW47CisgICAgICAgbWVtY3B5IChk YXRhLCBpbmRhdGEsIGluZGF0YWxlbik7CisgICAgIH0KKyAjdW5kZWYgWAorIAorICAgLyogUmVk aXJlY3QgdG8gdGhlIEFVVEggY29tbWFuZCBpZiBhc2tlZCB0by4gKi8KKyAgIGlmICh1c2VfYXV0 aCkKKyAgICAgeworICAgICAgIHJldHVybiBkb19hdXRoIChhcHAsIGN0cmwsICJPUEVOUEdQLjMi LCBwaW5jYiwgcGluY2JfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBkYXRhbGVu LAorICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLCBvdXRkYXRhbGVuKTsKKyAgICAgfQor IAorICAgLyogU2hvdyB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZSBkb25lIHVzaW5nIHRoaXMga2V5 LiAgKi8KKyAgIHNpZ2NvdW50ID0gZ2V0X3NpZ19jb3VudGVyIChhcHApOworICAgbG9nX2luZm8g KF8oInNpZ25hdHVyZXMgY3JlYXRlZCBzbyBmYXI6ICVsdVxuIiksIHNpZ2NvdW50KTsKKyAKKyAg IC8qIENoZWNrIENIViBpZiBuZWVkZWQuICAqLworICAgaWYgKCFhcHAtPmRpZF9jaHYxIHx8IGFw cC0+Zm9yY2VfY2h2MSkKKyAgICAgeworICAgICAgIGNoYXIgKnBpbnZhbHVlOworICAgICAgIHNp emVfdCBwaW5sZW47CisgCisgICAgICAgcmMgPSB2ZXJpZnlfYV9jaHYgKGFwcCwgY3RybCwgcGlu Y2IsIHBpbmNiX2FyZywgMSwgc2lnY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZw aW52YWx1ZSwgJnBpbmxlbik7CisgICAgICAgaWYgKHJjKQorICAgICAgICAgcmV0dXJuIHJjOwor IAorICAgICAgIGFwcC0+ZGlkX2NodjEgPSAxOworIAorICAgICAgIC8qIEZvciBjYXJkcyB3aXRo IHZlcnNpb25zIDwgMiB3ZSB3YW50IHRvIGtlZXAgQ0hWMSBhbmQgQ0hWMiBpbgorICAgICAgICAg IHN5bmMsIHRodXMgd2UgdmVyaWZ5IENIVjIgaGVyZSB1c2luZyB0aGUgZ2l2ZW4gUElOLiAgQ2Fy ZHMKKyAgICAgICAgICB3aXRoIHZlcnNpb24yIHRvIG5vdCBoYXZlIHRoZSBuZWVkIGZvciBhIHNl cGFyYXRlIENIVjIgYW5kCisgICAgICAgICAgaW50ZXJuYWxseSB1c2UganVzdCBvbmUuICBPYnZp b3VzbHkgd2UgY2FuJ3QgZG8gdGhhdCBpZiB0aGUKKyAgICAgICAgICBwaW5wYWQgaGFzIGJlZW4g dXNlZC4gKi8KKyAgICAgICBpZiAoIWFwcC0+ZGlkX2NodjIgJiYgcGludmFsdWUgJiYgIWFwcC0+ YXBwX2xvY2FsLT5leHRjYXAuaXNfdjIpCisgICAgICAgICB7CisgICAgICAgICAgIHJjID0gaXNv NzgxNl92ZXJpZnkgKGFwcF9nZXRfc2xvdCAoYXBwKSwgMHg4MiwgcGludmFsdWUsIHBpbmxlbik7 CisgICAgICAgICAgIGlmIChncGdfZXJyX2NvZGUgKHJjKSA9PSBHUEdfRVJSX0JBRF9QSU4pCisg ICAgICAgICAgICAgcmMgPSBncGdfZXJyb3IgKEdQR19FUlJfUElOX05PVF9TWU5DRUQpOworICAg ICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgbG9nX2Vycm9y IChfKCJ2ZXJpZnkgQ0hWJWQgZmFpbGVkOiAlc1xuIiksIDIsIGdwZ19zdHJlcnJvciAocmMpKTsK KyAgICAgICAgICAgICAgIHdpcGVfYW5kX2ZyZWUgKHBpbnZhbHVlLCBwaW5sZW4pOworICAgICAg ICAgICAgICAgZmx1c2hfY2FjaGVfYWZ0ZXJfZXJyb3IgKGFwcCk7CisgICAgICAgICAgICAgICBy ZXR1cm4gcmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBhcHAtPmRpZF9jaHYyID0gMTsK KyAgICAgICAgICAgY2FjaGVfcGluIChhcHAsIGN0cmwsIDIsIHBpbnZhbHVlKTsKKyAgICAgICAg IH0KKyAgICAgICB3aXBlX2FuZF9mcmVlIChwaW52YWx1ZSwgcGlubGVuKTsKKyAgICAgfQorIAor IAorICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5jYXJkY2FwLmV4dF9sY19sZQorICAgICAgICYmIGFw cC0+YXBwX2xvY2FsLT5rZXlhdHRyWzBdLmtleV90eXBlID09IEtFWV9UWVBFX1JTQQorICAgICAg ICYmIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyWzBdLnJzYS5uX2JpdHMgPiBSU0FfU01BTExfU0la RV9PUCkKKyAgICAgeworICAgICAgIGV4bW9kZSA9IDE7ICAgIC8qIFVzZSBleHRlbmRlZCBsZW5n dGguICAqLworICAgICAgIGxlX3ZhbHVlID0gYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMF0ucnNh Lm5fYml0cyAvIDg7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIGV4bW9kZSA9IDA7 CisgICAgICAgbGVfdmFsdWUgPSAwOworICAgICB9CisgICByYyA9IGlzbzc4MTZfY29tcHV0ZV9k cyAoYXBwX2dldF9zbG90IChhcHApLCBleG1vZGUsIGRhdGEsIGRhdGFsZW4sIGxlX3ZhbHVlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEsIG91dGRhdGFsZW4pOworICAgaWYg KGdwZ19lcnJfY29kZSAocmMpID09IEdQR19FUlJfVElNRU9VVCkKKyAgICAgY2xlYXJfY2h2X3N0 YXR1cyAoYXBwLCBjdHJsLCAxKTsKKyAgIGVsc2UgaWYgKCFyYyAmJiBhcHAtPmZvcmNlX2NodjEp CisgICAgIHsKKyAgICAgICBhcHAtPmRpZF9jaHYxID0gMDsKKyAgICAgICBjYWNoZV9waW4gKGFw cCwgY3RybCwgMSwgTlVMTCk7CisgICAgIH0KKyAKKyAgIHJldHVybiByYzsKKyB9CisgCisgLyog R2VuZXJhdGUgZGF0YSB0byBiZSBzaWduZWQgZm9yIFBLQVVUSCB3aXRoIC0tY2hhbGxlbmdlLXJl c3BvbnNlLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBnZW5fY2hhbGxlbmdlIChhcHBfdCBh cHAsIGNvbnN0IHZvaWQgKipyX2RhdGEsIHNpemVfdCAqcl9kYXRhbGVuKQorIHsKKyAgIHZvaWQg KmRhdGE7CisgICBzaXplX3QgZGF0YWxlbjsKKyAgIGludCBoZWFkZXJfc2l6ZTsKKyAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmhhc2hfcHJlZml4ID0gTlVMTDsKKyAKKyAgIGlmIChhcHAtPmFwcF9s b2NhbC0+a2V5YXR0clsyXS5rZXlfdHlwZSA9PSBLRVlfVFlQRV9FQ0MpCisgICAgIHsKKyAgICAg ICB1bnNpZ25lZCBpbnQgbjsKKyAKKyAgICAgICBvcGVucGdwX2N1cnZlX3RvX29pZCAoYXBwLT5h cHBfbG9jYWwtPmtleWF0dHJbMl0uZWNjLmN1cnZlLCAmbiwgTlVMTCk7CisgICAgICAgLyogTm8g aGFzaCBhbGdvIGhlYWRlciwgYW5kIGFwcHJvcHJpYXRlIGxlbmd0aCBvZiByYW5kb20gb2N0ZXRz LAorICAgICAgICAgIGRldGVybWluZWQgYnkgZmllbGQgc2l6ZSBvZiB0aGUgY3VydmUuICAqLwor ICAgICAgIGRhdGFsZW4gPSAobis3KS84OworICAgICAgIGhlYWRlcl9zaXplID0gMDsKKyAgICAg fQorICAgZWxzZQorICAgICB7CisgICAgICAgLyogSGFzaCBhbGdvIGhlYWRlciwgYW5kIHJhbmRv bSBvY3RldHMgb2YgaGFzaCBzaXplLCB0aGUgaGFzaAorICAgICAgICAgYWxnbyBpcyBkZXRlcm1p bmVkIGJ5IHNpemUgb2Yga2V5LiAgKi8KKyAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0 dHJbMl0ucnNhLm5fYml0cyA8PSAyMDQ4KQorICAgICAgICAgeworICAgICAgICAgICBkYXRhbGVu ID0gMzI7CisgICAgICAgICAgIGhhc2hfcHJlZml4ID0gc2hhMjU2X3ByZWZpeDsKKyAgICAgICAg IH0KKyAgICAgICBlbHNlIGlmIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5yc2Eubl9iaXRz IDw9IDMwNzIpCisgICAgICAgICB7CisgICAgICAgICAgIGRhdGFsZW4gPSA0ODsKKyAgICAgICAg ICAgaGFzaF9wcmVmaXggPSBzaGEzODRfcHJlZml4OworICAgICAgICAgfQorICAgICAgIGVsc2UK KyAgICAgICAgIHsKKyAgICAgICAgICAgZGF0YWxlbiA9IDY0OworICAgICAgICAgICBoYXNoX3By ZWZpeCA9IHNoYTUxMl9wcmVmaXg7CisgICAgICAgICB9CisgICAgICAgaGVhZGVyX3NpemUgPSAx OTsKKyAgICAgfQorIAorICAgZGF0YSA9IHh0cnltYWxsb2MgKGRhdGFsZW4raGVhZGVyX3NpemUp OworICAgaWYgKCFkYXRhKQorICAgICByZXR1cm4gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7 CisgCisgICBpZiAoaGFzaF9wcmVmaXgpCisgICAgIG1lbWNweSAoZGF0YSwgaGFzaF9wcmVmaXgs IGhlYWRlcl9zaXplKTsKKyAKKyAgIGdjcnlfY3JlYXRlX25vbmNlICgoY2hhciAqKWRhdGEraGVh ZGVyX3NpemUsIGRhdGFsZW4pOworICAgKnJfZGF0YSA9IGRhdGE7CisgICAqcl9kYXRhbGVuID0g ZGF0YWxlbitoZWFkZXJfc2l6ZTsKKyAgIHJldHVybiAwOworIH0KKyAKKyAvKiBDb21wdXRlIGEg ZGlnaXRhbCBzaWduYXR1cmUgdXNpbmcgdGhlIElOVEVSTkFMIEFVVEhFTlRJQ0FURSBjb21tYW5k CisgICAgb24gSU5EQVRBIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIHRoZSByYXcgbWVzc2FnZSBk aWdlc3QuIEZvciB0aGlzCisgICAgYXBwbGljYXRpb24gdGhlIEtFWUlEU1RSIGNvbnNpc3RzIG9m IHRoZSBzZXJpYWxudW1iZXIgYW5kIHRoZQorICAgIGZpbmdlcnByaW50IGRlbGltaXRlZCBieSBh IHNsYXNoLiAgT3B0aW9uYWxseSB0aGUgaWQgT1BFTlBHUC4zIG1heQorICAgIGJlIGdpdmVuLgor IAorICAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gdGhlIGVycm9yIGNvZGUK KyAgICBHUEdfRVJSX1dST05HX0NBUkQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FyZCBjdXJyZW50 bHkgcHJlc2VudCBkb2VzCisgICAgbm90IG1hdGNoIHRoZSBvbmUgcmVxdWlyZWQgZm9yIHRoZSBy ZXF1ZXN0ZWQgYWN0aW9uIChlLmcuIHRoZQorICAgIHNlcmlhbCBudW1iZXIgZG9lcyBub3QgbWF0 Y2gpLiAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGRvX2F1dGggKGFwcF90IGFwcCwgY3RybF90 IGN0cmwsIGNvbnN0IGNoYXIgKmtleWlkc3RyLAorICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGlu Y2IpKHZvaWQqLCBjb25zdCBjaGFyICosIGNoYXIgKiopLAorICAgICAgICAgIHZvaWQgKnBpbmNi X2FyZywKKyAgICAgICAgICBjb25zdCB2b2lkICppbmRhdGEsIHNpemVfdCBpbmRhdGFsZW4sCisg ICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGRhdGEsIHNpemVfdCAqb3V0ZGF0YWxlbiApCisg eworICAgaW50IHJjOworICAgaW50IGNoYWxsZW5nZV9nZW5lcmF0ZWQgPSAwOworIAorICAgaWYg KCFrZXlpZHN0ciB8fCAhKmtleWlkc3RyKQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJS X0lOVl9WQUxVRSk7CisgCisgICBpZiAoaW5kYXRhbGVuID09IDApCisgICAgIHsKKyAgICAgICBy YyA9IGdldF9wdWJsaWNfa2V5IChhcHAsIDIpOworICAgICAgIGlmIChyYykKKyAgICAgICAgIHJl dHVybiByYzsKKyAKKyAgICAgICByYyA9IGdlbl9jaGFsbGVuZ2UgKGFwcCwgJmluZGF0YSwgJmlu ZGF0YWxlbik7CisgICAgICAgaWYgKHJjKQorICAgICAgICAgcmV0dXJuIHJjOworICAgICAgIGNo YWxsZW5nZV9nZW5lcmF0ZWQgPSAxOworICAgICAgIGdvdG8gaW5kYXRhX3JlYWR5OworICAgICB9 CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMl0ua2V5X3R5cGUgPT0gS0VZX1RZ UEVfUlNBKQorICAgICB7CisgICAgICAgaW50IHNpemVfNDBwZXJjZW50ID0gKGFwcC0+YXBwX2xv Y2FsLT5rZXlhdHRyWzJdLnJzYS5uX2JpdHMrNykvOCAqIDQ7CisgCisgICAgICAgLyogT3BlblBH UCBjYXJkIGRvZXMgUEtDUyMxIGZvciBSU0EsIGRhdGEgc2hvdWxkIG5vdCBiZSBsYXJnZXIKKyAg ICAgICAgICB0aGFuIDQwJSBvZiB0aGUgbW9kdWx1cyBsZW5ndGguICAqLworICAgICAgIGlmIChp bmRhdGFsZW4gKiAxMCA+IHNpemVfNDBwZXJjZW50KQorICAgICAgICAgcmV0dXJuIGdwZ19lcnJv ciAoR1BHX0VSUl9JTlZfVkFMVUUpOworICAgICB9CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwt PmtleWF0dHJbMl0ua2V5X3R5cGUgPT0gS0VZX1RZUEVfRUNDKQorICAgICB7CisgICAgICAgaWYg KCEoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMl0uZWNjLmZsYWdzICYgRUNDX0ZMQUdfREpCX1RX RUFLKQorICAgICAgICAgICAmJiAoaW5kYXRhbGVuID09IDUxIHx8IGluZGF0YWxlbiA9PSA2NyB8 fCBpbmRhdGFsZW4gPT0gODMpKQorICAgICAgICAgeworICAgICAgICAgICBjb25zdCBjaGFyICpw ID0gKGNvbnN0IGNoYXIgKilpbmRhdGEgKyAxOTsKKyAgICAgICAgICAgaW5kYXRhID0gcDsKKyAg ICAgICAgICAgaW5kYXRhbGVuIC09IDE5OworICAgICAgICAgfQorICAgICAgIGVsc2UKKyAgICAg ICAgIHsKKyAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IChjb25zdCBjaGFyICopaW5kYXRhICsg MTU7CisgICAgICAgICAgIGluZGF0YSA9IHA7CisgICAgICAgICAgIGluZGF0YWxlbiAtPSAxNTsK KyAgICAgICAgIH0KKyAgICAgfQorIAorICBpbmRhdGFfcmVhZHk6CisgCisgICAvKiBDaGVjayB3 aGV0aGVyIGFuIE9wZW5QR1AgY2FyZCBvZiBhbnkgdmVyc2lvbiBoYXMgYmVlbiByZXF1ZXN0ZWQu ICovCisgICBpZiAoIWFzY2lpX3N0cmNhc2VjbXAgKGtleWlkc3RyLCAiT1BFTlBHUC4zIikpCisg ICAgIDsKKyAgIGVsc2UKKyAgICAgeworICAgICAgIHJjID0gY2hlY2tfa2V5aWRzdHIgKGFwcCwg a2V5aWRzdHIsIDMsIE5VTEwpOworICAgICAgIGlmIChyYykKKyAgICAgICAgIHJldHVybiByYzsK KyAgICAgfQorIAorICAgcmMgPSB2ZXJpZnlfY2h2MiAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2Jf YXJnKTsKKyAgIGlmICghcmMpCisgICAgIHsKKyAgICAgICBpbnQgZXhtb2RlLCBsZV92YWx1ZTsK KyAKKyAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAuZXh0X2xjX2xlCisgICAgICAg ICAgICYmIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyWzJdLmtleV90eXBlID09IEtFWV9UWVBFX1JT QQorICAgICAgICAgICAmJiBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5yc2Eubl9iaXRzID4g UlNBX1NNQUxMX1NJWkVfT1ApCisgICAgICAgICB7CisgICAgICAgICAgIGV4bW9kZSA9IDE7ICAg IC8qIFVzZSBleHRlbmRlZCBsZW5ndGguICAqLworICAgICAgICAgICBsZV92YWx1ZSA9IGFwcC0+ YXBwX2xvY2FsLT5rZXlhdHRyWzJdLnJzYS5uX2JpdHMgLyA4OworICAgICAgICAgfQorICAgICAg IGVsc2UgaWYgKGFwcC0+YXBwX2xvY2FsLT5jYXJkY2FwLmNtZF9jaGFpbmluZyAmJiBpbmRhdGFs ZW4gPiAyNTQpCisgICAgICAgICB7CisgICAgICAgICAgIGV4bW9kZSA9IC0yNTQ7IC8qIENvbW1h bmQgY2hhaW5pbmcgd2l0aCBtYXguIDI1NCBieXRlcy4gICovCisgICAgICAgICAgIGxlX3ZhbHVl ID0gMDsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlIGlmIChpbmRhdGFsZW4gPiAyNTUpCisgICAg ICAgICB7CisgICAgICAgICAgIGlmICghYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAuZXh0X2xjX2xl KQorICAgICAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfVE9PX0xBUkdFKTsKKyAK KyAgICAgICAgICAgZXhtb2RlID0gMTsKKyAgICAgICAgICAgbGVfdmFsdWUgPSAwOworICAgICAg ICAgfQorICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgZXhtb2RlID0gMDsKKyAg ICAgICAgICAgbGVfdmFsdWUgPSAwOworICAgICAgICAgfQorICAgICAgIHJjID0gaXNvNzgxNl9p bnRlcm5hbF9hdXRoZW50aWNhdGUgKGFwcF9nZXRfc2xvdCAoYXBwKSwgZXhtb2RlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YSwgaW5kYXRhbGVuLCBs ZV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRk YXRhLCBvdXRkYXRhbGVuKTsKKyAgICAgICBpZiAoZ3BnX2Vycl9jb2RlIChyYykgPT0gR1BHX0VS Ul9USU1FT1VUKQorICAgICAgICAgY2xlYXJfY2h2X3N0YXR1cyAoYXBwLCBjdHJsLCAxKTsKKyAK KyAgICAgICAvKiBWZXJpZnkgdGhlIHJlc3VsdCwgd2hlbiBDSEFMTEVOR0VfR0VORVJBVEVEICov CisgICAgICAgaWYgKGNoYWxsZW5nZV9nZW5lcmF0ZWQpCisgICAgICAgICB7CisgICAgICAgICAg IGdjcnlfc2V4cF90IHNfcGtleSwgc19zaWcsIHNfaGFzaDsKKyAgICAgICAgICAgY29uc3QgY2hh ciAqZm10OworIAorICAgICAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMl0ua2V5 X3R5cGUgPT0gS0VZX1RZUEVfRUNDKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlm ICghc3RyY21wIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5lY2MuY3VydmUsICJFZDI1NTE5 IikpCisgICAgICAgICAgICAgICAgIGZtdCA9ICIoZGF0YShmbGFncyBlZGRzYSkoaGFzaC1hbGdv IHNoYTUxMikodmFsdWUgJWIpKSI7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgIGZtdCA9ICIoZGF0YSh2YWx1ZSAlYikpIjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICB2b2lkICpvbGRfaW5kYXRhID0g KHZvaWQgKilpbmRhdGE7CisgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpuZXdfaW5kYXRh OworICAgICAgICAgICAgICAgc2l6ZV90IG5ld19pbmRhdGFsZW47CisgCisgICAgICAgICAgICAg ICAvKiBGb3IgUlNBLCBpdCdzIFBLQ1MjMSBwYWRkaW5nLiAgKi8KKyAgICAgICAgICAgICAgIG5l d19pbmRhdGFsZW4gPSBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5yc2Eubl9iaXRzIC8gODsK KyAgICAgICAgICAgICAgIG5ld19pbmRhdGEgPSB4dHJ5bWFsbG9jIChuZXdfaW5kYXRhbGVuKTsK KyAgICAgICAgICAgICAgIGlmICghbmV3X2luZGF0YSkKKyAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgIHJjID0gZ3BnX2Vycm9yX2Zyb21fc3lzZXJyb3IgKCk7CisgICAgICAg ICAgICAgICAgICAgeGZyZWUgKG9sZF9pbmRhdGEpOworICAgICAgICAgICAgICAgICAgIHJldHVy biByYzsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgbWVtc2V0IChuZXdfaW5k YXRhLCAweGZmLCBuZXdfaW5kYXRhbGVuKTsKKyAgICAgICAgICAgICAgIG5ld19pbmRhdGFbMF0g PSAweDAwOworICAgICAgICAgICAgICAgbmV3X2luZGF0YVsxXSA9IDB4MDE7CisgICAgICAgICAg ICAgICBuZXdfaW5kYXRhW25ld19pbmRhdGFsZW4gLSBpbmRhdGFsZW4gLTFdID0gMHgwMDsKKyAg ICAgICAgICAgICAgIG1lbWNweSAobmV3X2luZGF0YSArIG5ld19pbmRhdGFsZW4gLSBpbmRhdGFs ZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YSwgaW5kYXRhbGVuKTsKKyAKKyAgICAg ICAgICAgICAgIHhmcmVlIChvbGRfaW5kYXRhKTsKKyAgICAgICAgICAgICAgIGluZGF0YSA9IG5l d19pbmRhdGE7CisgICAgICAgICAgICAgICBpbmRhdGFsZW4gPSBuZXdfaW5kYXRhbGVuOworICAg ICAgICAgICAgICAgZm10ID0gIiViIjsgICAgICAgICAgIC8qIE9sZCBzdHlsZSBkYXRhIGZvcm1h dC4gICovCisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICByYyA9IGdjcnlfc2V4cF9idWls ZCAoJnNfaGFzaCwgTlVMTCwgZm10LCAoaW50KWluZGF0YWxlbiwgaW5kYXRhKTsKKyAgICAgICAg ICAgaWYgKHJjKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIHhmcmVlICgodm9pZCAq KWluZGF0YSk7CisgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICAgfQorIAor ICAgICAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMl0ua2V5X3R5cGUgPT0gS0VZ X1RZUEVfRUNDKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmICghc3RyY21wIChh cHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5lY2MuY3VydmUsICJFZDI1NTE5IikKKyAgICAgICAg ICAgICAgICAgICB8fCAhc3RyY21wIChhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsyXS5lY2MuY3Vy dmUsICJFZDQ0OCIpKQorICAgICAgICAgICAgICAgICBmbXQgPSAiKHNpZy12YWwoZWRkc2EociAl YikocyAlYikpKSI7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGZtdCA9 ICIoc2lnLXZhbChlY2RzYShyICViKShzICViKSkpIjsKKyAgICAgICAgICAgICAgIHJjID0gZ2Ny eV9zZXhwX2J1aWxkICgmc19zaWcsIE5VTEwsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaW50KSpvdXRkYXRhbGVuLzIsICpvdXRkYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKm91dGRhdGFsZW4vMiwgKm91dGRhdGErKm91 dGRhdGFsZW4vMik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgZm10ID0gIihzaWctdmFsKHJzYShzICViKSkpIjsKKyAgICAg ICAgICAgICAgIHJjID0gZ2NyeV9zZXhwX2J1aWxkICgmc19zaWcsIE5VTEwsIGZtdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSpvdXRkYXRhbGVuLCAqb3V0ZGF0 YSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBpZiAocmMpCisgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfaGFzaCk7CisgICAgICAgICAgICAg ICB4ZnJlZSAoKHZvaWQgKilpbmRhdGEpOworICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAg ICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgcmMgPSBnY3J5X3NleHBfbmV3ICgmc19wa2V5LCBh cHAtPmFwcF9sb2NhbC0+cGtbMl0ua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFwcC0+YXBwX2xvY2FsLT5wa1syXS5rZXlsZW4sIDApOworICAgICAgICAgICBpZiAocmMpCisg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgZ2NyeV9zZXhwX3JlbGVhc2UgKHNfaGFzaCk7 CisgICAgICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICAgICAgICAgICAg ICAgeGZyZWUgKCh2b2lkICopaW5kYXRhKTsKKyAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAg ICAgICAgICAgICB9CisgCisgICAgICAgICAgIHJjID0gZ2NyeV9wa192ZXJpZnkgKHNfc2lnLCBz X2hhc2gsIHNfcGtleSk7CisgICAgICAgICAgIGdjcnlfc2V4cF9yZWxlYXNlIChzX2hhc2gpOwor ICAgICAgICAgICBnY3J5X3NleHBfcmVsZWFzZSAoc19zaWcpOworICAgICAgICAgICBnY3J5X3Nl eHBfcmVsZWFzZSAoc19wa2V5KTsKKyAgICAgICAgICAgeGZyZWUgKCh2b2lkICopaW5kYXRhKTsK KyAgICAgICAgIH0KKyAgICAgfQorICAgcmV0dXJuIHJjOworIH0KKyAKKyAKKyBzdGF0aWMgZ3Bn X2Vycm9yX3QKKyBkb19kZWNpcGhlciAoYXBwX3QgYXBwLCBjdHJsX3QgY3RybCwgY29uc3QgY2hh ciAqa2V5aWRzdHIsCisgICAgICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGluY2IpKHZvaWQqLCBj b25zdCBjaGFyICosIGNoYXIgKiopLAorICAgICAgICAgICAgICB2b2lkICpwaW5jYl9hcmcsCisg ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGF0YSwgc2l6ZV90IGluZGF0YWxlbiwKKyAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGRhdGEsIHNpemVfdCAqb3V0ZGF0YWxlbiwKKyAg ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpyX2luZm8pCisgeworICAgaW50IG47CisgICBpbnQg cmM7CisgICBpbnQgZXhtb2RlLCBsZV92YWx1ZTsKKyAgIHVuc2lnbmVkIGNoYXIgKmZpeGJ1ZiA9 IE5VTEw7CisgICBpbnQgcGFkaW5kID0gMDsKKyAgIGludCBmaXh1cGxlbiA9IDA7CisgCisgICBp ZiAoIWtleWlkc3RyIHx8ICEqa2V5aWRzdHIgfHwgIWluZGF0YWxlbikKKyAgICAgcmV0dXJuIGdw Z19lcnJvciAoR1BHX0VSUl9JTlZfVkFMVUUpOworIAorICAgLyogQ2hlY2sgd2hldGhlciBhbiBP cGVuUEdQIGNhcmQgb2YgYW55IHZlcnNpb24gaGFzIGJlZW4gcmVxdWVzdGVkLiAqLworICAgaWYg KCFhc2NpaV9zdHJjYXNlY21wIChrZXlpZHN0ciwgIk9QRU5QR1AuMiIpKQorICAgICA7CisgICBl bHNlCisgICAgIHsKKyAgICAgICByYyA9IGNoZWNrX2tleWlkc3RyIChhcHAsIGtleWlkc3RyLCAy LCBOVUxMKTsKKyAgICAgICBpZiAocmMpCisgICAgICAgICByZXR1cm4gcmM7CisgICAgIH0KKyAK KyAgIHJjID0gdmVyaWZ5X2NodjIgKGFwcCwgY3RybCwgcGluY2IsIHBpbmNiX2FyZyk7CisgICBp ZiAocmMpCisgICAgIHJldHVybiByYzsKKyAKKyAgIGlmICgoaW5kYXRhbGVuID09IDE2ICsgMSB8 fCBpbmRhdGFsZW4gPT0gMzIgKyAxKQorICAgICAgICYmICgoY2hhciAqKWluZGF0YSlbMF0gPT0g MHgwMikKKyAgICAgeworICAgICAgIC8qIFBTTzpERUNJUEhFUiB3aXRoIHN5bW1ldHJpYyBrZXku ICAqLworICAgICAgIHBhZGluZCA9IC0xOworICAgICB9CisgICBlbHNlIGlmIChhcHAtPmFwcF9s b2NhbC0+a2V5YXR0clsxXS5rZXlfdHlwZSA9PSBLRVlfVFlQRV9SU0EpCisgICAgIHsKKyAgICAg ICAvKiBXZSBtaWdodCBlbmNvdW50ZXIgYSBjb3VwbGUgb2YgbGVhZGluZyB6ZXJvZXMgaW4gdGhl CisgICAgICAgICAgY3J5cHRvZ3JhbS4gIER1ZSB0byBpbnRlcm5hbCB1c2Ugb2YgTVBJcyB0aGVz ZSBsZWFkaW5nIHplcm9lcworICAgICAgICAgIGFyZSBzdHJpcHBlZC4gIEhvd2V2ZXIgdGhlIE9w ZW5QR1AgY2FyZCBleHBlY3RzIGV4YWN0bHkgMTI4CisgICAgICAgICAgYnl0ZXMgZm9yIHRoZSBj cnlwdG9ncmFtIChmb3IgYSAxayBrZXkpLiAgVGh1cyB3ZSBuZWVkIHRvIGZpeAorICAgICAgICAg IGl0IHVwLiAgV2UgZG8gdGhpcyBmb3IgdXAgdG8gMTYgbGVhZGluZyB6ZXJvIGJ5dGVzOyBhCisg ICAgICAgICAgY3J5cHRvZ3JhbSB3aXRoIG1vcmUgdGhhbiB0aGlzIGlzIHdpdGggYSB2ZXJ5IGhp Z2gKKyAgICAgICAgICBwcm9iYWJpbGl0eSBhbnl3YXkgYnJva2VuLiAgSWYgYSBzaWduZWQgY29u dmVyc2lvbiB3YXMgdXNlZAorICAgICAgICAgIHdlIG1heSBhbHNvIGVuY291bnRlciBvbmUgbGVh ZGluZyB6ZXJvIGZvbGxvd2VkIGJ5IHRoZSBjb3JyZWN0CisgICAgICAgICAgbGVuZ3RoLiAgV2Ug Zml4IHRoYXQgYXMgd2VsbC4gICovCisgICAgICAgaWYgKGluZGF0YWxlbiA+PSAoMTI4LTE2KSAm JiBpbmRhdGFsZW4gPCAxMjgpICAgICAgLyogMTAyNCBiaXQga2V5LiAgKi8KKyAgICAgICAgIGZp eHVwbGVuID0gMTI4IC0gaW5kYXRhbGVuOworICAgICAgIGVsc2UgaWYgKGluZGF0YWxlbiA+PSAo MTkyLTE2KSAmJiBpbmRhdGFsZW4gPCAxOTIpIC8qIDE1MzYgYml0IGtleS4gICovCisgICAgICAg ICBmaXh1cGxlbiA9IDE5MiAtIGluZGF0YWxlbjsKKyAgICAgICBlbHNlIGlmIChpbmRhdGFsZW4g Pj0gKDI1Ni0xNikgJiYgaW5kYXRhbGVuIDwgMjU2KSAvKiAyMDQ4IGJpdCBrZXkuICAqLworICAg ICAgICAgZml4dXBsZW4gPSAyNTYgLSBpbmRhdGFsZW47CisgICAgICAgZWxzZSBpZiAoaW5kYXRh bGVuID49ICgzODQtMTYpICYmIGluZGF0YWxlbiA8IDM4NCkgLyogMzA3MiBiaXQga2V5LiAgKi8K KyAgICAgICAgIGZpeHVwbGVuID0gMzg0IC0gaW5kYXRhbGVuOworICAgICAgIGVsc2UgaWYgKGlu ZGF0YWxlbiA+PSAoNTEyLTE2KSAmJiBpbmRhdGFsZW4gPCA1MTIpIC8qIDQwOTYgYml0IGtleS4g ICovCisgICAgICAgICBmaXh1cGxlbiA9IDUxMiAtIGluZGF0YWxlbjsKKyAgICAgICBlbHNlIGlm ICghKihjb25zdCBjaGFyICopaW5kYXRhICYmIChpbmRhdGFsZW4gPT0gMTI5CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5kYXRhbGVuID09IDE5MworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGluZGF0YWxlbiA9PSAy NTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbmRhdGFs ZW4gPT0gMzg1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg aW5kYXRhbGVuID09IDUxMykpCisgICAgICAgICBmaXh1cGxlbiA9IC0xOworICAgICAgIGVsc2UK KyAgICAgICAgIGZpeHVwbGVuID0gMDsKKyAKKyAgICAgICBpZiAoZml4dXBsZW4gPiAwKQorICAg ICAgICAgeworICAgICAgICAgICAvKiBXaGlsZSB3ZSBoYXZlIHRvIHByZXBlbmQgc3R1ZmYgYW55 d2F5LCB3ZSBjYW4gYWxzbworICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBwYWRkaW5nIGJ5dGUg aGVyZSBzbyB0aGF0IGlzbzE4MTZfZGVjaXBoZXIKKyAgICAgICAgICAgICAgZG9lcyBub3QgbmVl ZCB0byBkbyBhbm90aGVyIGRhdGEgbWFuZ2xpbmcuICAqLworICAgICAgICAgICBmaXh1cGxlbisr OworIAorICAgICAgICAgICBmaXhidWYgPSB4dHJ5bWFsbG9jIChmaXh1cGxlbiArIGluZGF0YWxl bik7CisgICAgICAgICAgIGlmICghZml4YnVmKQorICAgICAgICAgICAgIHJldHVybiBncGdfZXJy b3JfZnJvbV9zeXNlcnJvciAoKTsKKyAKKyAgICAgICAgICAgbWVtc2V0IChmaXhidWYsIDAsIGZp eHVwbGVuKTsKKyAgICAgICAgICAgbWVtY3B5IChmaXhidWYrZml4dXBsZW4sIGluZGF0YSwgaW5k YXRhbGVuKTsKKyAgICAgICAgICAgaW5kYXRhID0gZml4YnVmOworICAgICAgICAgICBpbmRhdGFs ZW4gPSBmaXh1cGxlbiArIGluZGF0YWxlbjsKKyAgICAgICAgICAgcGFkaW5kID0gLTE7IC8qIEFs cmVhZHkgcGFkZGVkLiAgKi8KKyAgICAgICAgIH0KKyAgICAgICBlbHNlIGlmIChmaXh1cGxlbiA8 IDApCisgICAgICAgICB7CisgICAgICAgICAgIC8qIFdlIHVzZSB0aGUgZXh0cmEgbGVhZGluZyB6 ZXJvIGFzIHRoZSBwYWRkaW5nIGJ5dGUuICAqLworICAgICAgICAgICBwYWRpbmQgPSAtMTsKKyAg ICAgICAgIH0KKyAgICAgfQorICAgZWxzZSBpZiAoYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJbMV0u a2V5X3R5cGUgPT0gS0VZX1RZUEVfRUNDKQorICAgICB7CisgICAgICAgaW50IG9sZF9mb3JtYXRf bGVuID0gMDsKKyAKKyAgICAgICBpZiAoKGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyWzFdLmVjYy5m bGFncyAmIEVDQ19GTEFHX0RKQl9UV0VBSykpCisgICAgICAgICB7CisgICAgICAgICAgIGlmIChp bmRhdGFsZW4gPiAzMiAmJiAoaW5kYXRhbGVuICUgMikpCisgICAgICAgICAgICAgeyAvKgorICAg ICAgICAgICAgICAgICogU2tpcCB0aGUgcHJlZml4LiAgSXQgbWF5IGJlIDB4NDAgKGluIG5ldyBm b3JtYXQpLCBvciBNUEkKKyAgICAgICAgICAgICAgICAqIGhlYWQgb2YgMHgwMCAoaW4gb2xkIGZv cm1hdCkuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgIGluZGF0YSA9IChjb25z dCBjaGFyICopaW5kYXRhICsgMTsKKyAgICAgICAgICAgICAgIGluZGF0YWxlbi0tOworICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgZWxzZSBpZiAoaW5kYXRhbGVuIDwgMzIpCisgICAgICAgICAg ICAgeyAvKgorICAgICAgICAgICAgICAgICogT2xkIGZvcm1hdCB0cmFuY2F0ZWQgYnkgTVBJIGhh bmRsaW5nLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICBvbGRfZm9ybWF0X2xl biA9IGluZGF0YWxlbjsKKyAgICAgICAgICAgICAgIGluZGF0YWxlbiA9IDMyOworICAgICAgICAg ICAgIH0KKyAgICAgICAgIH0KKyAKKyAgICAgICBuID0gMDsKKyAgICAgICBpZiAoaW5kYXRhbGVu IDwgMTI4KQorICAgICAgICAgZml4dXBsZW4gPSA3OworICAgICAgIGVsc2UKKyAgICAgICAgIGZp eHVwbGVuID0gMTA7CisgCisgICAgICAgZml4YnVmID0geHRyeW1hbGxvYyAoZml4dXBsZW4gKyBp bmRhdGFsZW4pOworICAgICAgIGlmICghZml4YnVmKQorICAgICAgICAgcmV0dXJuIGdwZ19lcnJv cl9mcm9tX3N5c2Vycm9yICgpOworIAorICAgICAgIC8qIEJ1aWxkICdDaXBoZXIgRE8nICovCisg ICAgICAgZml4YnVmW24rK10gPSAnXHhhNic7CisgICAgICAgaWYgKGluZGF0YWxlbiA8IDEyOCkK KyAgICAgICAgIGZpeGJ1ZltuKytdID0gKGNoYXIpKGluZGF0YWxlbis1KTsKKyAgICAgICBlbHNl CisgICAgICAgICB7CisgICAgICAgICAgIGZpeGJ1ZltuKytdID0gMHg4MTsKKyAgICAgICAgICAg Zml4YnVmW24rK10gPSAoY2hhcikoaW5kYXRhbGVuKzcpOworICAgICAgICAgfQorICAgICAgIGZp eGJ1ZltuKytdID0gJ1x4N2YnOworICAgICAgIGZpeGJ1ZltuKytdID0gJ1x4NDknOworICAgICAg IGlmIChpbmRhdGFsZW4gPCAxMjgpCisgICAgICAgICBmaXhidWZbbisrXSA9IChjaGFyKShpbmRh dGFsZW4rMik7CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICBmaXhidWZbbisr XSA9IDB4ODE7CisgICAgICAgICAgIGZpeGJ1ZltuKytdID0gKGNoYXIpKGluZGF0YWxlbiszKTsK KyAgICAgICAgIH0KKyAgICAgICBmaXhidWZbbisrXSA9ICdceDg2JzsKKyAgICAgICBpZiAoaW5k YXRhbGVuIDwgMTI4KQorICAgICAgICAgZml4YnVmW24rK10gPSAoY2hhcilpbmRhdGFsZW47Cisg ICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICBmaXhidWZbbisrXSA9IDB4ODE7Cisg ICAgICAgICAgIGZpeGJ1ZltuKytdID0gKGNoYXIpaW5kYXRhbGVuOworICAgICAgICAgfQorIAor ICAgICAgIGlmIChvbGRfZm9ybWF0X2xlbikKKyAgICAgICAgIHsKKyAgICAgICAgICAgbWVtc2V0 IChmaXhidWYrZml4dXBsZW4sIDAsIDMyIC0gb2xkX2Zvcm1hdF9sZW4pOworICAgICAgICAgICBt ZW1jcHkgKGZpeGJ1ZitmaXh1cGxlbiArIDMyIC0gb2xkX2Zvcm1hdF9sZW4sCisgICAgICAgICAg ICAgICAgICAgaW5kYXRhLCBvbGRfZm9ybWF0X2xlbik7CisgICAgICAgICB9CisgICAgICAgZWxz ZQorICAgICAgICAgeworICAgICAgICAgICBtZW1jcHkgKGZpeGJ1ZitmaXh1cGxlbiwgaW5kYXRh LCBpbmRhdGFsZW4pOworICAgICAgICAgfQorICAgICAgIGluZGF0YSA9IGZpeGJ1ZjsKKyAgICAg ICBpbmRhdGFsZW4gPSBmaXh1cGxlbiArIGluZGF0YWxlbjsKKyAKKyAgICAgICBwYWRpbmQgPSAt MTsKKyAgICAgfQorICAgZWxzZQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9W QUxVRSk7CisgCisgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRjYXAuZXh0X2xjX2xlCisgICAg ICAgJiYgKGluZGF0YWxlbiA+IDI1NAorICAgICAgICAgICB8fCAoYXBwLT5hcHBfbG9jYWwtPmtl eWF0dHJbMV0ua2V5X3R5cGUgPT0gS0VZX1RZUEVfUlNBCisgICAgICAgICAgICAgICAmJiBhcHAt PmFwcF9sb2NhbC0+a2V5YXR0clsxXS5yc2Eubl9iaXRzID4gUlNBX1NNQUxMX1NJWkVfT1ApKSkK KyAgICAgeworICAgICAgIGV4bW9kZSA9IDE7ICAgIC8qIEV4dGVuZGVkIGxlbmd0aCB3L28gYSBs aW1pdC4gICovCisgICAgICAgbGVfdmFsdWUgPSBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0clsxXS5y c2Eubl9iaXRzIC8gODsKKyAgICAgfQorICAgZWxzZSBpZiAoYXBwLT5hcHBfbG9jYWwtPmNhcmRj YXAuY21kX2NoYWluaW5nICYmIGluZGF0YWxlbiA+IDI1NCkKKyAgICAgeworICAgICAgIGV4bW9k ZSA9IC0yNTQ7IC8qIENvbW1hbmQgY2hhaW5pbmcgd2l0aCBtYXguIDI1NCBieXRlcy4gICovCisg ICAgICAgbGVfdmFsdWUgPSAwOworICAgICB9CisgICBlbHNlCisgICAgIGV4bW9kZSA9IGxlX3Zh bHVlID0gMDsKKyAKKyAgIHJjID0gaXNvNzgxNl9kZWNpcGhlciAoYXBwX2dldF9zbG90IChhcHAp LCBleG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YSwgaW5kYXRhbGVuLCBs ZV92YWx1ZSwgcGFkaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLCBvdXRk YXRhbGVuKTsKKyAgIHhmcmVlIChmaXhidWYpOworICAgaWYgKCFyYyAmJiBhcHAtPmFwcF9sb2Nh bC0+a2V5YXR0clsxXS5rZXlfdHlwZSA9PSBLRVlfVFlQRV9FQ0MpCisgICAgIHsKKyAgICAgICB1 bnNpZ25lZCBjaGFyIHByZWZpeCA9IDA7CisgCisgICAgICAgaWYgKGFwcC0+YXBwX2xvY2FsLT5r ZXlhdHRyWzFdLmVjYy5mbGFncyAmIEVDQ19GTEFHX0RKQl9UV0VBSykKKyAgICAgICAgIHByZWZp eCA9IDB4NDA7CisgICAgICAgZWxzZSBpZiAoKm91dGRhdGFsZW4gPT0gNTYpIC8qIEl0J3MgWDQ0 OCB3aXRoIG5vIHByZWZpeC4gICovCisgICAgICAgICA7CisgICAgICAgZWxzZSBpZiAoKCpvdXRk YXRhbGVuICUgMikgPT0gMCkgLyogTm8gMHgwNCAtPiB4LWNvb3JkaW5hdGUgb25seSAqLworICAg ICAgICAgcHJlZml4ID0gMHg0MTsKKyAKKyAgICAgICBpZiAocHJlZml4KQorICAgICAgICAgeyAv KiBBZGQgdGhlIHByZWZpeCAqLworICAgICAgICAgICBmaXhidWYgPSB4dHJ5bWFsbG9jICgqb3V0 ZGF0YWxlbiArIDEpOworICAgICAgICAgICBpZiAoIWZpeGJ1ZikKKyAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICB4ZnJlZSAoKm91dGRhdGEpOworICAgICAgICAgICAgICAgcmV0dXJuIGdw Z19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgZml4 YnVmWzBdID0gcHJlZml4OworICAgICAgICAgICBtZW1jcHkgKGZpeGJ1ZisxLCAqb3V0ZGF0YSwg Km91dGRhdGFsZW4pOworICAgICAgICAgICB4ZnJlZSAoKm91dGRhdGEpOworICAgICAgICAgICAq b3V0ZGF0YSA9IGZpeGJ1ZjsKKyAgICAgICAgICAgKm91dGRhdGFsZW4gPSAqb3V0ZGF0YWxlbiAr IDE7CisgICAgICAgICB9CisgICAgIH0KKyAgIGlmIChncGdfZXJyX2NvZGUgKHJjKSA9PSBHUEdf RVJSX1RJTUVPVVQpCisgICAgIGNsZWFyX2Nodl9zdGF0dXMgKGFwcCwgY3RybCwgMSk7CisgCisg ICBpZiAoZ3BnX2Vycl9jb2RlIChyYykgPT0gR1BHX0VSUl9DQVJEIC8qIGFjdHVhbCBTVyBpcyAw eDY0MGEgKi8KKyAgICAgICAmJiBhcHAtPmFwcF9sb2NhbC0+bWFudWZhY3R1cmVyID09IDUKKyAg ICAgICAmJiBhcHAtPmFwcHZlcnNpb24gPT0gMHgwMjAwKQorICAgICBsb2dfaW5mbyAoIk5PVEU6 IENhcmRzIHdpdGggbWFudWZhY3R1cmVyIGlkIDUgYW5kIHMvbiA8PSAzNDYgKDB4MTVhKSIKKyAg ICAgICAgICAgICAgICIgZG8gbm90IHdvcmsgd2l0aCBlbmNyeXB0aW9uIGtleXMgPiAyMDQ4IGJp dHNcbiIpOworIAorICAgKnJfaW5mbyB8PSBBUFBfREVDSVBIRVJfSU5GT19OT1BBRDsKKyAKKyAg IHJldHVybiByYzsKKyB9CisgCisgCisgLyogUGVyZm9ybSBhIHNpbXBsZSB2ZXJpZnkgb3BlcmF0 aW9uIGZvciBDSFYxIGFuZCBDSFYyLCBzbyB0aGF0CisgICAgZnVydGhlciBvcGVyYXRpb25zIHdv bid0IGFzayBmb3IgQ0hWMiBhbmQgaXQgaXMgcG9zc2libGUgdG8gZG8gYQorICAgIGNoZWFwIGNo ZWNrIG9uIHRoZSBQSU46IElmIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBQSU4K KyAgICBlbnRyeSBzeXN0ZW0sIG9ubHkgdGhlIHJlZ3VsYXIgQ0hWIHdpbGwgZ2V0IGJsb2NrZWQg YW5kIG5vdCB0aGUKKyAgICBkYW5nZXJvdXMgQ0hWMy4gIEtFWUlEU1RSIGlzIHRoZSB1c3VhbCBj YXJkJ3Mgc2VyaWFsIG51bWJlcjsgYW4KKyAgICBvcHRpb25hbCBmaW5nZXJwcmludCBwYXJ0IHdp bGwgYmUgaWdub3JlZC4KKyAKKyAgICBUaGVyZSBpcyBhIHNwZWNpYWwgbW9kZSBpZiB0aGUga2V5 aWRzdHIgaXMgIjxzZXJpYWxubz5bQ0hWM10iIHdpdGgKKyAgICB0aGUgIltDSFYzXSIgYmVpbmcg YSBsaXRlcmFsIHN0cmluZzogIFRoZSBBZG1pbiBQaW4gaXMgY2hlY2tlZCBpZgorICAgIGFuZCBv bmx5IGlmIHRoZSByZXRyeSBjb3VudGVyIGlzIHN0aWxsIGF0IDMuICovCisgc3RhdGljIGdwZ19l cnJvcl90CisgZG9fY2hlY2tfcGluIChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLCBjb25zdCBjaGFy ICprZXlpZHN0ciwKKyAgICAgICAgICAgICAgIGdwZ19lcnJvcl90ICgqcGluY2IpKHZvaWQqLCBj b25zdCBjaGFyICosIGNoYXIgKiopLAorICAgICAgICAgICAgICAgdm9pZCAqcGluY2JfYXJnKQor IHsKKyAgIGludCBhZG1pbl9waW4gPSAwOworICAgaW50IHJjOworIAorICAgaWYgKCFrZXlpZHN0 ciB8fCAhKmtleWlkc3RyKQorICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX0lOVl9WQUxV RSk7CisgCisgICByYyA9IGNoZWNrX2tleWlkc3RyIChhcHAsIGtleWlkc3RyLCAwLCBOVUxMKTsK KyAgIGlmIChyYykKKyAgICAgcmV0dXJuIHJjOworIAorICAgaWYgKChzdHJsZW4gKGtleWlkc3Ry KSA+PSAzMis2ICYmICFzdHJjbXAgKGtleWlkc3RyKzMyLCAiW0NIVjNdIikpCisgICAgICAgfHwg KHN0cmxlbiAoa2V5aWRzdHIpID49IDQwKzYgJiYgIXN0cmNtcCAoa2V5aWRzdHIrNDAsICJbQ0hW M10iKSkpCisgICAgIGFkbWluX3BpbiA9IDE7CisgCisgICAvKiBZZXMsIHRoZXJlIGlzIGEgcmFj ZSBjb25kaXRpb25zOiBUaGUgdXNlciBtaWdodCBwdWxsIHRoZSBjYXJkCisgICAgICByaWdodCBo ZXJlIGFuZCB3ZSB3b24ndCBub3RpY2UgdGhhdC4gIEhvd2V2ZXIgdGhpcyBpcyBub3QgYQorICAg ICAgcHJvYmxlbSBhbmQgdGhlIGNoZWNrIGFib3ZlIGlzIG1lcmVseSBmb3IgYSBncmFjZWZ1bCBm YWlsdXJlCisgICAgICBiZXR3ZWVuIG9wZXJhdGlvbnMuICovCisgCisgICBpZiAoYWRtaW5fcGlu KQorICAgICB7CisgICAgICAgdm9pZCAqcmVscHRyOworICAgICAgIHVuc2lnbmVkIGNoYXIgKnZh bHVlOworICAgICAgIHNpemVfdCB2YWx1ZWxlbjsKKyAgICAgICBpbnQgY291bnQ7CisgCisgICAg ICAgcmVscHRyID0gZ2V0X29uZV9kbyAoYXBwLCAweDAwQzQsICZ2YWx1ZSwgJnZhbHVlbGVuLCBO VUxMKTsKKyAgICAgICBpZiAoIXJlbHB0ciB8fCB2YWx1ZWxlbiA8IDcpCisgICAgICAgICB7Cisg ICAgICAgICAgIGxvZ19lcnJvciAoXygiZXJyb3IgcmV0cmlldmluZyBDSFYgc3RhdHVzIGZyb20g Y2FyZFxuIikpOworICAgICAgICAgICB4ZnJlZSAocmVscHRyKTsKKyAgICAgICAgICAgcmV0dXJu IGdwZ19lcnJvciAoR1BHX0VSUl9DQVJEKTsKKyAgICAgICAgIH0KKyAgICAgICBjb3VudCA9IHZh bHVlWzZdOworICAgICAgIHhmcmVlIChyZWxwdHIpOworIAorICAgICAgIGlmICghY291bnQpCisg ICAgICAgICB7CisgICAgICAgICAgIGxvZ19pbmZvIChfKCJjYXJkIGlzIHBlcm1hbmVudGx5IGxv Y2tlZCFcbiIpKTsKKyAgICAgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9CQURfUElO KTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlIGlmIChjb3VudCA8IDMpCisgICAgICAgICB7Cisg ICAgICAgICAgIGxvZ19pbmZvIChfKCJ2ZXJpZmljYXRpb24gb2YgQWRtaW4gUElOIGlzIGN1cnJl bnRseSBwcm9oaWJpdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgInRocm91Z2ggdGhpcyBj b21tYW5kXG4iKSk7CisgICAgICAgICAgIHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfR0VORVJB TCk7CisgICAgICAgICB9CisgCisgICAgICAgYXBwLT5kaWRfY2h2MyA9IDA7IC8qIEZvcmNlIHZl cmlmaWNhdGlvbi4gICovCisgICAgICAgcmV0dXJuIHZlcmlmeV9jaHYzIChhcHAsIGN0cmwsIHBp bmNiLCBwaW5jYl9hcmcpOworICAgICB9CisgICBlbHNlCisgICAgIHJldHVybiB2ZXJpZnlfY2h2 MiAoYXBwLCBjdHJsLCBwaW5jYiwgcGluY2JfYXJnKTsKKyB9CisgCisgCisgc3RhdGljIHZvaWQK KyBzZW5kX2tleWluZm9faWZfYXZhaWxhYmxlIChhcHBfdCBhcHAsIGN0cmxfdCBjdHJsLCBjaGFy ICpzZXJpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRhdGEsIGludCBpKQor IHsKKyAgIGNoYXIgaWRidWZbNTBdOworICAgY29uc3QgY2hhciAqdXNhZ2UgPSBnZXRfdXNhZ2Vf c3RyaW5nIChpKTsKKyAKKyAgIGlmIChhcHAtPmFwcF9sb2NhbC0+cGtbaV0ucmVhZF9kb25lKQor ICAgICB7CisgICAgICAgc3ByaW50ZiAoaWRidWYsICJPUEVOUEdQLiVkIiwgaSsxKTsKKyAgICAg ICBzZW5kX2tleWluZm8gKGN0cmwsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICBhcHAtPmFw cF9sb2NhbC0+cGtbaV0ua2V5Z3JpcF9zdHIsIHNlcmlhbCwgaWRidWYsIHVzYWdlKTsKKyAgICAg fQorIH0KKyAKKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb193aXRoX2tleWdyaXAgKGFwcF90IGFw cCwgY3RybF90IGN0cmwsIGludCBhY3Rpb24sIGNvbnN0IGNoYXIgKmtleWdyaXBfc3RyLAorICAg ICAgICAgICAgICAgICAgaW50IGNhcGFiaWxpdHkpCisgeworICAgaW50IGk7CisgCisgICAvKiBN YWtlIHN1cmUgd2UgaGF2ZSBsb2FkIHRoZSBwdWJsaWMga2V5cy4gICovCisgICBmb3IgKGkgPSAw OyBpIDwgMzsgaSsrKQorICAgICBnZXRfcHVibGljX2tleSAoYXBwLCBpKTsKKyAKKyAgIGlmIChh Y3Rpb24gPT0gS0VZR1JJUF9BQ1RJT05fTE9PS1VQKQorICAgICB7CisgICAgICAgaWYgKGtleWdy aXBfc3RyID09IE5VTEwpCisgICAgICAgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9G T1VORCk7CisgCisgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgIGlmIChh cHAtPmFwcF9sb2NhbC0+cGtbaV0ucmVhZF9kb25lCisgICAgICAgICAgICAgJiYgIXN0cmNtcCAo a2V5Z3JpcF9zdHIsIGFwcC0+YXBwX2xvY2FsLT5wa1tpXS5rZXlncmlwX3N0cikpCisgICAgICAg ICAgIHJldHVybiAwOyAvKiBGb3VuZCAqLworICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAg ICBpbnQgZGF0YSA9IChhY3Rpb24gPT0gS0VZR1JJUF9BQ1RJT05fU0VORF9EQVRBKTsKKyAgICAg ICBjaGFyICpzZXJpYWwgPSBhcHBfZ2V0X3NlcmlhbG5vIChhcHApOworIAorICAgICAgIGlmIChr ZXlncmlwX3N0ciA9PSBOVUxMKQorICAgICAgICAgeworICAgICAgICAgICBpZiAoY2FwYWJpbGl0 eSA9PSAwKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAz OyBpKyspCisgICAgICAgICAgICAgICAgIHNlbmRfa2V5aW5mb19pZl9hdmFpbGFibGUgKGFwcCwg Y3RybCwgc2VyaWFsLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBpZiAoY2FwYWJpbGl0eSA9PSBHQ1JZX1BL X1VTQUdFX1NJR04pCisgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgZWxz ZSBpZiAoY2FwYWJpbGl0eSA9PSBHQ1JZX1BLX1VTQUdFX0VOQ1IpCisgICAgICAgICAgICAgICAg IGkgPSAxOworICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FwYWJpbGl0eSA9PSBHQ1JZX1BLX1VT QUdFX0FVVEgpCisgICAgICAgICAgICAgICAgIGkgPSAyOworICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICBpID0gLTE7CisgICAgICAgICAgICAgICBpZiAoaSA+PSAwKQorICAg ICAgICAgICAgICAgICBzZW5kX2tleWluZm9faWZfYXZhaWxhYmxlIChhcHAsIGN0cmwsIHNlcmlh bCwgZGF0YSwgaSk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICB4ZnJlZSAoc2VyaWFs KTsKKyAKKyAgICAgICAgICAgLyogUmV0dXJuIGFuIGVycm9yIHNvIHRoYXQgdGhlIGRpc3BhdGNo ZXIga2VlcHMgb24gbG9vcGluZworICAgICAgICAgICAgKiBvdmVyIHRoZSBvdGhlciBhcHBsaWNh dGlvbnMuICBPbmx5IGZvciBjbGFyaXR5IHdlIHVzZSBhCisgICAgICAgICAgICAqIGRpZmZlcmVu dCBlcnJvciBjb2RlIHRoYW4gZm9yIHRoZSBub3RfZm91bmQgY2FzZS4gICovCisgICAgICAgICAg IHJldHVybiBncGdfZXJyb3IgKEdQR19FUlJfVFJVRSk7CisgICAgICAgICB9CisgICAgICAgZWxz ZQorICAgICAgICAgeworICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAg ICAgICAgIGlmICghc3RyY21wIChrZXlncmlwX3N0ciwgYXBwLT5hcHBfbG9jYWwtPnBrW2ldLmtl eWdyaXBfc3RyKSkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgc2VuZF9rZXlp bmZvX2lmX2F2YWlsYWJsZSAoYXBwLCBjdHJsLCBzZXJpYWwsIGRhdGEsIGkpOworICAgICAgICAg ICAgICAgICB4ZnJlZSAoc2VyaWFsKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgICAgICAgICB9CisgICAgICAgICAgIHhmcmVlIChzZXJpYWwpOworICAgICAgICAgfQorICAg ICB9CisgCisgICByZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9GT1VORCk7CisgfQorIAor IAorIC8qIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgY2FyZCBjYXBhYmlsaXRpZXMuICAqLworIHN0 YXRpYyB2b2lkCisgc2hvd19jYXBzIChzdHJ1Y3QgYXBwX2xvY2FsX3MgKnMpCisgeworICAgbG9n X2luZm8gKCJWZXJzaW9uLTIrIC4uLi4uOiAlc1xuIiwgcy0+ZXh0Y2FwLmlzX3YyPyAieWVzIjoi bm8iKTsKKyAgIGxvZ19pbmZvICgiVmVyc2lvbi0zKyAuLi4uLjogJXNcbiIsIHMtPmV4dGNhcC5p c192Mz8gInllcyI6Im5vIik7CisgICBsb2dfaW5mbyAoIkJ1dHRvbiAuLi4uLi4uLi46ICVzXG4i LCBzLT5leHRjYXAuaGFzX2J1dHRvbj8gInllcyI6Im5vIik7CisgCisgICBsb2dfaW5mbyAoIlNN LVN1cHBvcnQgLi4uLi46ICVzIiwgcy0+ZXh0Y2FwLnNtX3N1cHBvcnRlZD8gInllcyI6Im5vIik7 CisgICBpZiAocy0+ZXh0Y2FwLnNtX3N1cHBvcnRlZCkKKyAgICAgbG9nX3ByaW50ZiAoIiAoJXMp Iiwgcy0+ZXh0Y2FwLnNtX2FsZ289PTI/ICIzREVTIjoKKyAgICAgICAgICAgICAgICAgKHMtPmV4 dGNhcC5zbV9hbGdvPT0yPyAiQUVTLTEyOCIgOiAiQUVTLTI1NiIpKTsKKyAgIGxvZ19pbmZvICgi R2V0LUNoYWxsZW5nZSAuLjogJXMiLCBzLT5leHRjYXAuZ2V0X2NoYWxsZW5nZT8gInllcyI6Im5v Iik7CisgICBpZiAocy0+ZXh0Y2FwLmdldF9jaGFsbGVuZ2UpCisgICAgIGxvZ19wcmludGYgKCIg KCV1IGJ5dGVzIG1heCkiLCBzLT5leHRjYXAubWF4X2dldF9jaGFsbGVuZ2UpOworICAgbG9nX2lu Zm8gKCJLZXktSW1wb3J0IC4uLi4uOiAlc1xuIiwgcy0+ZXh0Y2FwLmtleV9pbXBvcnQ/ICJ5ZXMi OiJubyIpOworICAgbG9nX2luZm8gKCJDaGFuZ2UtRm9yY2UtUFcxOiAlc1xuIiwgcy0+ZXh0Y2Fw LmNoYW5nZV9mb3JjZV9jaHY/ICJ5ZXMiOiJubyIpOworICAgbG9nX2luZm8gKCJQcml2YXRlLURP cyAuLi4uOiAlc1xuIiwgcy0+ZXh0Y2FwLnByaXZhdGVfZG9zPyAieWVzIjoibm8iKTsKKyAgIGxv Z19pbmZvICgiQWxnby1BdHRyLUNoYW5nZTogJXNcbiIsIHMtPmV4dGNhcC5hbGdvX2F0dHJfY2hh bmdlPyAieWVzIjoibm8iKTsKKyAgIGxvZ19pbmZvICgiU3ltbWV0cmljIENyeXB0bzogJXNcbiIs IHMtPmV4dGNhcC5oYXNfZGVjcnlwdD8gInllcyI6Im5vIik7CisgICBsb2dfaW5mbyAoIktERi1T dXBwb3J0IC4uLi46ICVzXG4iLCBzLT5leHRjYXAua2RmX2RvPyAieWVzIjoibm8iKTsKKyAgIGxv Z19pbmZvICgiTWF4LUNlcnQtTGVuIC4uLjogJXVcbiIsIHMtPmV4dGNhcC5tYXhfY2VydGxlbik7 CisgICBpZiAocy0+ZXh0Y2FwLmlzX3YzKQorICAgICB7CisgICAgICAgbG9nX2luZm8gKCJQSU4t QmxvY2stMiAuLi4uOiAlc1xuIiwgcy0+ZXh0Y2FwLnBpbl9ibGsyPyAieWVzIjoibm8iKTsKKyAg ICAgICBsb2dfaW5mbyAoIk1TRS1TdXBwb3J0IC4uLi46ICVzXG4iLCBzLT5leHRjYXAubXNlPyAi eWVzIjoibm8iKTsKKyAgICAgICBsb2dfaW5mbyAoIk1heC1TcGVjaWFsLURPcyA6ICV1XG4iLCBz LT5leHRjYXAubWF4X3NwZWNpYWxfZG8pOworICAgICB9CisgICBsb2dfaW5mbyAoIkNtZC1DaGFp bmluZyAuLi46ICVzXG4iLCBzLT5jYXJkY2FwLmNtZF9jaGFpbmluZz8ieWVzIjoibm8iKTsKKyAg IGxvZ19pbmZvICgiRXh0LUxjLUxlIC4uLi4uLjogJXNcbiIsIHMtPmNhcmRjYXAuZXh0X2xjX2xl PyJ5ZXMiOiJubyIpOworICAgbG9nX2luZm8gKCJTdGF0dXMtSW5kaWNhdG9yOiAlMDJYXG4iLCBz LT5zdGF0dXNfaW5kaWNhdG9yKTsKKyAKKyAgIGxvZ19pbmZvICgiR251UEctTm8tU3luYyAuLjog JXNcbiIsICBzLT5mbGFncy5ub19zeW5jPyAieWVzIjoibm8iKTsKKyAgIGxvZ19pbmZvICgiR251 UEctRGVmLVBXMiAuLjogJXNcbiIsICBzLT5mbGFncy5kZWZfY2h2Mj8gInllcyI6Im5vIik7Cisg fQorIAorIAorIC8qIFBhcnNlIHRoZSBoaXN0b3JpY2FsIGJ5dGVzIGluIEJVRkZFUiBvZiBCVUZM RU4gYW5kIHN0b3JlIHRoZW0gaW4KKyAgICBBUFBMT0MuICAqLworIHN0YXRpYyB2b2lkCisgcGFy c2VfaGlzdG9yaWNhbCAoc3RydWN0IGFwcF9sb2NhbF9zICphcHBsb2MsCisgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKKyB7Cisg ICAvKiBFeGFtcGxlIGJ1ZmZlcjogMDAgMzEgQzUgNzMgQzAgMDEgODAgMDAgOTAgMDAgICovCisg ICBpZiAoYnVmbGVuIDwgNCkKKyAgICAgeworICAgICAgIGxvZ19lcnJvciAoIndhcm5pbmc6IGhp c3RvcmljYWwgYnl0ZXMgYXJlIHRvbyBzaG9ydFxuIik7CisgICAgICAgcmV0dXJuOyAvKiBUb28g c2hvcnQuICAqLworICAgICB9CisgICBpZiAoKmJ1ZmZlcikKKyAgICAgeworICAgICAgIGxvZ19l cnJvciAoIndhcm5pbmc6IGJhZCBjYXRlZ29yeSBpbmRpY2F0b3IgaW4gaGlzdG9yaWNhbCBieXRl c1xuIik7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCisgICAvKiBTa2lwIGNhdGVnb3J5IGlu ZGljYXRvci4gICovCisgICBidWZmZXIrKzsKKyAgIGJ1Zmxlbi0tOworIAorICAgLyogR2V0IHRo ZSBzdGF0dXMgaW5kaWNhdG9yLiAgKi8KKyAgIGFwcGxvYy0+c3RhdHVzX2luZGljYXRvciA9IGJ1 ZmZlcltidWZsZW4tM107CisgICBidWZsZW4gLT0gMzsKKyAKKyAgIC8qIFBhcnNlIHRoZSBjb21w YWN0IFRMVi4gICovCisgICB3aGlsZSAoYnVmbGVuKQorICAgICB7CisgICAgICAgdW5zaWduZWQg aW50IHRhZyA9ICgqYnVmZmVyICYgMHhmMCkgPj4gNDsKKyAgICAgICB1bnNpZ25lZCBpbnQgbGVu ID0gKCpidWZmZXIgJiAweDBmKTsKKyAgICAgICBpZiAobGVuKzEgPiBidWZsZW4pCisgICAgICAg ICB7CisgICAgICAgICAgIGxvZ19lcnJvciAoIndhcm5pbmc6IGJhZCBDb21wYWN0LVRMViBpbiBo aXN0b3JpY2FsIGJ5dGVzXG4iKTsKKyAgICAgICAgICAgcmV0dXJuOyAvKiBFcnJvci4gICovCisg ICAgICAgICB9CisgICAgICAgYnVmZmVyKys7CisgICAgICAgYnVmbGVuLS07CisgICAgICAgaWYg KHRhZyA9PSA3ICYmIGxlbiA9PSAzKQorICAgICAgICAgeworICAgICAgICAgICAvKiBDYXJkIGNh cGFiaWxpdGllcy4gICovCisgICAgICAgICAgIGFwcGxvYy0+Y2FyZGNhcC5jbWRfY2hhaW5pbmcg PSAhIShidWZmZXJbMl0gJiAweDgwKTsKKyAgICAgICAgICAgYXBwbG9jLT5jYXJkY2FwLmV4dF9s Y19sZSAgICA9ICEhKGJ1ZmZlclsyXSAmIDB4NDApOworICAgICAgICAgfQorICAgICAgIGJ1ZmZl ciArPSBsZW47CisgICAgICAgYnVmbGVuIC09IGxlbjsKKyAgICAgfQorIH0KKyAKKyAKKyAvKgor ICAqIENoZWNrIGlmIHRoZSBPSUQgaW4gYW4gREVSIGVuY29kaW5nIGlzIGF2YWlsYWJsZSBieSBH bnVQRy9saWJnY3J5cHQsCisgICogYW5kIHJldHVybiB0aGUgY2Fub25pY2FsIGN1cnZlIG5hbWUu ICBSZXR1cm4gTlVMTCBpZiBub3QgYXZhaWxhYmxlLgorICAqIFRoZSBjb25zdGFudCBzdHJpbmcg aXMgbm90IGFsbG9jYXRlZCBkeW5hbWljYWxseSwgbmV2ZXIgZnJlZSBpdC4KKyAgKi8KKyBzdGF0 aWMgY29uc3QgY2hhciAqCisgZWNjX2N1cnZlIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNp emVfdCBidWZsZW4pCisgeworICAgZ2NyeV9tcGlfdCBvaWQ7CisgICBjaGFyICpvaWRzdHI7Cisg ICBjb25zdCBjaGFyICpyZXN1bHQ7CisgICB1bnNpZ25lZCBjaGFyICpvaWRidWY7CisgCisgICBv aWRidWYgPSB4dHJ5bWFsbG9jIChidWZsZW4gKyAxKTsKKyAgIGlmICghb2lkYnVmKQorICAgICBy ZXR1cm4gTlVMTDsKKyAKKyAgIG1lbWNweSAob2lkYnVmKzEsIGJ1ZiwgYnVmbGVuKTsKKyAgIG9p ZGJ1ZlswXSA9IGJ1ZmxlbjsKKyAgIG9pZCA9IGdjcnlfbXBpX3NldF9vcGFxdWUgKE5VTEwsIG9p ZGJ1ZiwgKGJ1ZmxlbisxKSAqIDgpOworICAgaWYgKCFvaWQpCisgICAgIHsKKyAgICAgICB4ZnJl ZSAob2lkYnVmKTsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgfQorIAorICAgb2lkc3RyID0g b3BlbnBncF9vaWRfdG9fc3RyIChvaWQpOworICAgZ2NyeV9tcGlfcmVsZWFzZSAob2lkKTsKKyAg IGlmICghb2lkc3RyKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIHJlc3VsdCA9IG9wZW5wZ3Bf b2lkX3RvX2N1cnZlIChvaWRzdHIsIDEpOworICAgeGZyZWUgKG9pZHN0cik7CisgICByZXR1cm4g cmVzdWx0OworIH0KKyAKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqCisgZ2V0X2FsZ29yaXRobV9h dHRyaWJ1dGVfc3RyaW5nIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmbGVuKQorIHsKKyAgIGVudW0gZ2NyeV9w a19hbGdvcyBnYWxnbzsKKyAgIGNvbnN0IGNoYXIgKmN1cnZlOworICAgdW5zaWduZWQgaW50IG5i aXRzID0gMDsKKyAKKyAgIGdhbGdvID0gbWFwX29wZW5wZ3BfcGtfdG9fZ2NyeSAoKmJ1ZmZlcik7 CisgICBuYml0cyA9IDA7CisgICBjdXJ2ZSA9IE5VTEw7CisgCisgICBpZiAoKmJ1ZmZlciA9PSBQ VUJLRVlfQUxHT19SU0EgJiYgKGJ1ZmxlbiA9PSA1IHx8IGJ1ZmxlbiA9PSA2KSkKKyAgICAgbmJp dHMgPSAoYnVmZmVyWzFdPDw4IHwgYnVmZmVyWzJdKTsKKyAgIGVsc2UgaWYgKCpidWZmZXIgPT0g UFVCS0VZX0FMR09fRUNESCB8fCAqYnVmZmVyID09IFBVQktFWV9BTEdPX0VDRFNBCisgICAgICAg ICAgICB8fCAqYnVmZmVyID09IFBVQktFWV9BTEdPX0VERFNBKQorICAgICB7CisgICAgICAgaW50 IG9pZGxlbiA9IGJ1ZmxlbiAtIDE7CisgCisgICAgICAgaWYgKGJ1ZmZlcltidWZsZW4tMV0gPT0g MHgwMCB8fCBidWZmZXJbYnVmbGVuLTFdID09IDB4ZmYpCisgICAgICAgICB7IC8qIEZvdW5kICJw dWJrZXkgcmVxdWlyZWQiLWJ5dGUgZm9yIHByaXZhdGUga2V5IHRlbXBsYXRlLiAgKi8KKyAgICAg ICAgICAgb2lkbGVuLS07CisgICAgICAgICB9CisgCisgICAgICAgY3VydmUgPSBlY2NfY3VydmUg KGJ1ZmZlciArIDEsIG9pZGxlbik7CisgICAgIH0KKyAgIGVsc2UgaWYgKG9wdC52ZXJib3NlKQor ICAgICBsb2dfcHJpbnRoZXggKGJ1ZmZlciwgYnVmbGVuLCAiIik7CisgCisgICByZXR1cm4gZ2V0 X2tleWFsZ29fc3RyaW5nIChnYWxnbywgbmJpdHMsIGN1cnZlKTsKKyB9CisgCisgCisgLyogUGFy c2UgYW5kIG9wdGlvbmFsbHkgc2hvdyB0aGUgYWxnb3JpdGhtIGF0dHJpYnV0ZXMgZm9yIEtFWU5P LgorICAgIEtFWU5PIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAuLjIuICAqLworIHN0YXRpYyBncGdf ZXJyb3JfdAorIHBhcnNlX2FsZ29yaXRobV9hdHRyaWJ1dGUgKGFwcF90IGFwcCwgaW50IGtleW5v KQorIHsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKyAgIHNpemVfdCBidWZsZW47CisgICB2 b2lkICpyZWxwdHI7CisgICBjb25zdCBjaGFyIGRlc2NbM11bNV0gPSB7InNpZ24iLCAiZW5jciIs ICJhdXRoIn07CisgICBlbnVtIGdjcnlfcGtfYWxnb3MgZ2FsZ287CisgICB1bnNpZ25lZCBpbnQg bmJpdHM7CisgICBjb25zdCBjaGFyICpjdXJ2ZTsKKyAgIGdwZ19lcnJvcl90IGVyciA9IDA7Cisg CisgICBsb2dfYXNzZXJ0IChrZXlubyA+PTAgJiYga2V5bm8gPD0gMik7CisgCisgICBhcHAtPmFw cF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5X3R5cGUgPSBLRVlfVFlQRV9SU0E7CisgICBhcHAt PmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ucnNhLm5fYml0cyA9IDA7CisgCisgICByZWxwdHIg PSBnZXRfb25lX2RvIChhcHAsIDB4QzEra2V5bm8sICZidWZmZXIsICZidWZsZW4sIE5VTEwpOwor ICAgaWYgKCFyZWxwdHIpCisgICAgIHsKKyAgICAgICBsb2dfZXJyb3IgKCJlcnJvciByZWFkaW5n IERPIDB4JTAyWFxuIiwgMHhjMStrZXlubyk7CisgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BH X0VSUl9DQVJEKTsKKyAgICAgfQorICAgaWYgKGJ1ZmxlbiA8IDEpCisgICAgIHsKKyAgICAgICBs b2dfZXJyb3IgKCJlcnJvciByZWFkaW5nIERPIDB4JTAyWFxuIiwgMHhjMStrZXlubyk7CisgICAg ICAgeGZyZWUgKHJlbHB0cik7CisgICAgICAgcmV0dXJuIGdwZ19lcnJvciAoR1BHX0VSUl9DQVJE KTsKKyAgICAgfQorIAorICAgaWYgKG9wdC52ZXJib3NlKQorICAgICBsb2dfaW5mbyAoIktleS1B dHRyLSVzIC4uOiAiLCBkZXNjW2tleW5vXSk7CisgCisgICBnYWxnbyA9IG1hcF9vcGVucGdwX3Br X3RvX2djcnkgKCpidWZmZXIpOworICAgbmJpdHMgPSAwOworICAgY3VydmUgPSBOVUxMOworIAor ICAgaWYgKCpidWZmZXIgPT0gUFVCS0VZX0FMR09fUlNBICYmIChidWZsZW4gPT0gNSB8fCBidWZs ZW4gPT0gNikpCisgICAgIHsKKyAgICAgICBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10u cnNhLm5fYml0cyA9IChidWZmZXJbMV08PDggfCBidWZmZXJbMl0pOworICAgICAgIGFwcC0+YXBw X2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2EuZV9iaXRzID0gKGJ1ZmZlclszXTw8OCB8IGJ1ZmZl cls0XSk7CisgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLnJzYS5mb3JtYXQg PSAwOworICAgICAgIGlmIChidWZsZW4gPCA2KQorICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtl eWF0dHJba2V5bm9dLnJzYS5mb3JtYXQgPSBSU0FfU1REOworICAgICAgIGVsc2UKKyAgICAgICAg IGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2EuZm9ybWF0ID0gKGJ1ZmZlcls1XSA9 PSAwPyBSU0FfU1REICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnVmZmVyWzVdID09IDE/IFJTQV9TVERfTiA6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbNV0gPT0gMj8g UlNBX0NSVCAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJ1ZmZlcls1XSA9PSAzPyBSU0FfQ1JUX04gOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1VOS05PV05fRk1UKTsKKyAK KyAgICAgICBuYml0cyA9IGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2Eubl9iaXRz OworICAgICAgIGlmIChvcHQudmVyYm9zZSkKKyAgICAgICAgIGxvZ19wcmludGYKKyAgICAgICAg ICAgKCJSU0EsIG49JXUsIGU9JXUsIGZtdD0lc1xuIiwKKyAgICAgICAgICAgIGFwcC0+YXBwX2xv Y2FsLT5rZXlhdHRyW2tleW5vXS5yc2Eubl9iaXRzLAorICAgICAgICAgICAgYXBwLT5hcHBfbG9j YWwtPmtleWF0dHJba2V5bm9dLnJzYS5lX2JpdHMsCisgICAgICAgICAgICBhcHAtPmFwcF9sb2Nh bC0+a2V5YXR0cltrZXlub10ucnNhLmZvcm1hdCA9PSBSU0FfU1REPyAgInN0ZCIgIDoKKyAgICAg ICAgICAgIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5yc2EuZm9ybWF0ID09IFJTQV9T VERfTj8ic3RkK24iOgorICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9d LnJzYS5mb3JtYXQgPT0gUlNBX0NSVD8gICJjcnQiICA6CisgICAgICAgICAgICBhcHAtPmFwcF9s b2NhbC0+a2V5YXR0cltrZXlub10ucnNhLmZvcm1hdCA9PSBSU0FfQ1JUX04/ImNydCtuIjoiPyIp OworICAgICB9CisgICBlbHNlIGlmICgqYnVmZmVyID09IFBVQktFWV9BTEdPX0VDREggfHwgKmJ1 ZmZlciA9PSBQVUJLRVlfQUxHT19FQ0RTQQorICAgICAgICAgICAgfHwgKmJ1ZmZlciA9PSBQVUJL RVlfQUxHT19FRERTQSkKKyAgICAgeworICAgICAgIGludCBvaWRsZW4gPSBidWZsZW4gLSAxOwor IAorICAgICAgIGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5lY2MuYWxnbyA9ICpidWZm ZXI7CisgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5mbGFncyA9IDA7 CisgCistICAgICAgaWYgKEFQUF9DQVJEKGFwcCktPmNhcmR0eXBlID09IENBUkRUWVBFX1lVQklL RVkKKy0JICB8fCBidWZmZXJbYnVmbGVuLTFdID09IDB4MDAgfHwgYnVmZmVyW2J1Zmxlbi0xXSA9 PSAweGZmKQorLSAgICAgICAgeyAvKiBGb3VuZCAicHVia2V5IHJlcXVpcmVkIi1ieXRlIGZvciBw cml2YXRlIGtleSB0ZW1wbGF0ZS4gICovCistICAgICAgICAgIG9pZGxlbi0tOworLSAgICAgICAg ICBpZiAoYnVmZmVyW2J1Zmxlbi0xXSA9PSAweGZmKQorLSAgICAgICAgICAgIGFwcC0+YXBwX2xv Y2FsLT5rZXlhdHRyW2tleW5vXS5lY2MuZmxhZ3MgfD0gRUNDX0ZMQUdfUFVCS0VZOworKyAgICAg IGlmIChBUFBfQ0FSRChhcHApLT5jYXJkdHlwZSA9PSBDQVJEVFlQRV9ZVUJJS0VZKQorKyAgICAg ICAgeworKyAgICAgICAgICAvKiBZdWJpa2V5IGltcGxlbWVudGF0aW9ucyB2YXJ5LgorKyAgICAg ICAgICAgKiBGaXJtd2FyZSB2ZXJzaW9uIDUuMiByZXR1cm5zICJwdWJrZXkgcmVxdWlyZWQiLWJ5 dGUgd2l0aAorKyAgICAgICAgICAgKiAweDAwLCBidXQgYWZ0ZXIgcmVtb3ZhbCBhbmQgc2Vjb25k IHRpbWUgaW5zZXJ0aW9uLCBpdAorKyAgICAgICAgICAgKiByZXR1cm5zIGJvZ3VzIHZhbHVlIHRo ZXJlLgorKyAgICAgICAgICAgKiBGaXJtd2FyZSB2ZXJzaW9uIDUuNCByZXR1cm5zIG5vbmUuCisr ICAgICAgICAgICAqLworKyAgICAgICAgICBjdXJ2ZSA9IGVjY19jdXJ2ZSAoYnVmZmVyICsgMSwg b2lkbGVuKTsKKysgICAgICAgICAgaWYgKCFjdXJ2ZSkKKysgICAgICAgICAgICBjdXJ2ZSA9IGVj Y19jdXJ2ZSAoYnVmZmVyICsgMSwgb2lkbGVuIC0gMSk7CisrICAgICAgICB9CisrICAgICAgZWxz ZQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAoYnVmZmVyW2J1Zmxlbi0xXSA9PSAweDAwIHx8 IGJ1ZmZlcltidWZsZW4tMV0gPT0gMHhmZikKKysgICAgICAgICAgICB7IC8qIEZvdW5kICJwdWJr ZXkgcmVxdWlyZWQiLWJ5dGUgZm9yIHByaXZhdGUga2V5IHRlbXBsYXRlLiAgKi8KKysgICAgICAg ICAgICAgIG9pZGxlbi0tOworKyAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltidWZsZW4tMV0gPT0g MHhmZikKKysgICAgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVj Yy5mbGFncyB8PSBFQ0NfRkxBR19QVUJLRVk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBj dXJ2ZSA9IGVjY19jdXJ2ZSAoYnVmZmVyICsgMSwgb2lkbGVuKTsKKyAgICAgICAgIH0KKy0KKy0g ICAgICBjdXJ2ZSA9IGVjY19jdXJ2ZSAoYnVmZmVyICsgMSwgb2lkbGVuKTsKKyAKKyAgICAgICBp ZiAoIWN1cnZlKQorICAgICAgICAgeworICAgICAgICAgICBsb2dfcHJpbnRoZXggKGJ1ZmZlcisx LCBidWZsZW4tMSwgIkN1cnZlIHdpdGggT0lEIG5vdCBzdXBwb3J0ZWQ6ICIpOworICAgICAgICAg ICBlcnIgPSBncGdfZXJyb3IgKEdQR19FUlJfQ0FSRCk7CisgICAgICAgICB9CisgICAgICAgZWxz ZQorICAgICAgICAgeworICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10u a2V5X3R5cGUgPSBLRVlfVFlQRV9FQ0M7CisgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5rZXlh dHRyW2tleW5vXS5lY2MuY3VydmUgPSBjdXJ2ZTsKKyAgICAgICAgICAgaWYgKCgqYnVmZmVyID09 IFBVQktFWV9BTEdPX0VERFNBCisgICAgICAgICAgICAgICAgJiYgIXN0cmNtcCAoYXBwLT5hcHBf bG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5jdXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiRWQyNTUxOSIpKQorICAgICAgICAgICAgICAgfHwgKCpidWZmZXIgPT0gUFVCS0VZX0FM R09fRUNESAorICAgICAgICAgICAgICAgICAgICYmICFzdHJjbXAgKGFwcC0+YXBwX2xvY2FsLT5r ZXlhdHRyW2tleW5vXS5lY2MuY3VydmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkN1cnZlMjU1MTkiKSkpCisgICAgICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5 bm9dLmVjYy5mbGFncyB8PSBFQ0NfRkxBR19ESkJfVFdFQUs7CisgICAgICAgICAgIGlmIChvcHQu dmVyYm9zZSkKKyAgICAgICAgICAgICBsb2dfcHJpbnRmCisgICAgICAgICAgICAgICAoIkVDQywg Y3VydmU9JXMlc1xuIiwgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmVjYy5jdXJ2ZSwK KyAgICAgICAgICAgICAgICAhKGFwcC0+YXBwX2xvY2FsLT5rZXlhdHRyW2tleW5vXS5lY2MuZmxh Z3MgJiBFQ0NfRkxBR19ESkJfVFdFQUspPworICAgICAgICAgICAgICAgICIiOiBrZXlubz09MT8g IiAoZGpiLXR3ZWFrKSI6ICIgKGVkZHNhKSIpOworICAgICAgICAgfQorICAgICB9CisgICBlbHNl IGlmIChvcHQudmVyYm9zZSkKKyAgICAgbG9nX3ByaW50aGV4IChidWZmZXIsIGJ1ZmxlbiwgIiIp OworIAorICAgYXBwLT5hcHBfbG9jYWwtPmtleWF0dHJba2V5bm9dLmtleWFsZ28KKyAgICAgPSBn ZXRfa2V5YWxnb19zdHJpbmcgKGdhbGdvLCBuYml0cywgY3VydmUpOworIAorICAgaWYgKG9wdC52 ZXJib3NlKQorICAgICBsb2dfaW5mbyAoIktleS1BbGdvLSVzIC4uOiAlc1xuIiwKKyAgICAgICAg ICAgICAgIGRlc2Nba2V5bm9dLCBhcHAtPmFwcF9sb2NhbC0+a2V5YXR0cltrZXlub10ua2V5YWxn byk7CisgCisgICB4ZnJlZSAocmVscHRyKTsKKyAgIHJldHVybiBlcnI7CisgfQorIAorIAorIC8q IFByZXBhcmUgYSByZXNlbGVjdCBvZiBhbm90aGVyIGFwcGxpY2F0aW9uLiAgVGhpcyBpcyB1c2Vk IGJ5IGNhcmRzCisgICogd2hpY2ggc3VwcG9ydCBvbi10aGUtZmx5IHN3aXRjaGluZyBiZXR3ZWVu IGFwcGxpY2F0aW9ucy4gIFRoZQorICAqIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBnaXZlIHVzIGEg Y2hhbmNlIHRvIHNhdmUgc3RhdGUgZm9yIGEgZnV0dXJlCisgICogcmVzZWxlY3Qgb2YgdXMgYWdh aW4uICAqLworIHN0YXRpYyBncGdfZXJyb3JfdAorIGRvX3ByZXBfcmVzZWxlY3QgKGFwcF90IGFw cCwgY3RybF90IGN0cmwpCisgeworICAgZ3BnX2Vycm9yX3QgZXJyOworIAorICAgKHZvaWQpYXBw OworICAgKHZvaWQpY3RybDsKKyAKKyAgIGVyciA9IDA7CisgICByZXR1cm4gZXJyOworIH0KKyAK KyAKKyAvKiBSZXNlbGVjdCB0aGUgYXBwbGljYXRpb24uICBUaGlzIGlzIHVzZWQgYnkgY2FyZHMg d2hpY2ggc3VwcG9ydAorICAqIG9uLXRoZS1mbHkgc3dpdGNoaW5nIGJldHdlZW4gYXBwbGljYXRp b25zLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb19yZXNlbGVjdCAoYXBwX3QgYXBwLCBj dHJsX3QgY3RybCkKKyB7CisgICBncGdfZXJyb3JfdCBlcnI7CisgCisgICAodm9pZCljdHJsOwor IAorICAgLyogQW4gZXh0cmEgY2hlY2sgd2hpY2ggc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVj YXVzZSB0aGUgY2FsbGVyCisgICAgKiBzaG91bGQgaGF2ZSBtYWRlIHN1cmUgdGhhdCBhIHJlLXNl bGVjdCBpcyBvbmx5IGNhbGxlZCBmb3IKKyAgICAqIGFwcHJvcHJpYXRlIGNhcmRzLiAgKi8KKyAg IGlmIChBUFBfQ0FSRChhcHApLT5jYXJkdHlwZSAhPSBDQVJEVFlQRV9ZVUJJS0VZKQorICAgICBy ZXR1cm4gZ3BnX2Vycm9yIChHUEdfRVJSX05PVF9TVVBQT1JURUQpOworIAorICAgLyogTm90ZSB0 aGF0IHRoZSBjYXJkIGNhbid0IGNvcGUgd2l0aCBQMj0weENPLCB0aHVzIHdlIG5lZWQgdG8gcGFz cworICAgICogYSBzcGVjaWFsIGZsYWcgdmFsdWUuICovCisgICBlcnIgPSBpc283ODE2X3NlbGVj dF9hcHBsaWNhdGlvbiAoYXBwX2dldF9zbG90IChhcHApLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wZW5wZ3BfYWlkLCBzaXplb2Ygb3BlbnBncF9haWQsIDB4MDAwMSk7 CisgICBpZiAoIWVycikKKyAgICAgeworICAgICAgIGFwcC0+ZGlkX2NodjEgPSAwOworICAgICAg IGFwcC0+ZGlkX2NodjIgPSAwOworICAgICAgIGFwcC0+ZGlkX2NodjMgPSAwOworICAgICB9Cisg ICByZXR1cm4gZXJyOworIH0KKyAKKyAKKyAvKiBDaGVjayBpZiBBSUQgaXMgdGhlIGNvcnJlY3Qg b25lLiAgKi8KKyBzdGF0aWMgZ3BnX2Vycm9yX3QKKyBkb19jaGVja19haWQgKGFwcF90IGFwcCwg Y3RybF90IGN0cmwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFpZCwgc2l6ZV90IGFpZGxlbikKKyB7 CisgICAodm9pZClhcHA7CisgICAodm9pZCljdHJsOworIAorICAgaWYgKGFpZGxlbiA+PSBzaXpl b2Ygb3BlbnBncF9haWQKKyAgICAgICAmJiBtZW1jbXAgKGFpZCwgb3BlbnBncF9haWQsIHNpemVv ZiBvcGVucGdwX2FpZCkgPT0gMCkKKyAgICAgcmV0dXJuIDA7CisgCisgICByZXR1cm4gZ3BnX2Vy cm9yIChHUEdfRVJSX1dST05HX0NBUkQpOworIH0KKyAKKyAKKyAvKiBTZWxlY3QgdGhlIE9wZW5Q R1AgYXBwbGljYXRpb24gb24gdGhlIGNhcmQgaW4gU0xPVC4gIFRoaXMgZnVuY3Rpb24KKyAgICBt dXN0IGJlIHVzZWQgYmVmb3JlIGFueSBvdGhlciBPcGVuUEdQIGFwcGxpY2F0aW9uIGZ1bmN0aW9u cy4gKi8KKyBncGdfZXJyb3JfdAorIGFwcF9zZWxlY3Rfb3BlbnBncCAoYXBwX3QgYXBwKQorIHsK KyAgIGludCBzbG90ID0gYXBwX2dldF9zbG90IChhcHApOworICAgZ3BnX2Vycm9yX3QgZXJyOwor ICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOworICAgc2l6ZV90IGJ1ZmxlbjsKKyAgIHZvaWQgKnJl bHB0cjsKKyAKKyAgIC8qIE5vdGUgdGhhdCB0aGUgY2FyZCBjYW4ndCBjb3BlIHdpdGggUDI9MHhD TywgdGh1cyB3ZSBuZWVkIHRvIHBhc3MgYQorICAgICAgc3BlY2lhbCBmbGFnIHZhbHVlLiAqLwor ICAgZXJyID0gaXNvNzgxNl9zZWxlY3RfYXBwbGljYXRpb24gKHNsb3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnBncF9haWQsIHNpemVvZiBvcGVucGdwX2FpZCwg MHgwMDAxKTsKKyAgIGlmICghZXJyKQorICAgICB7CisgICAgICAgdW5zaWduZWQgaW50IG1hbnVm YWN0dXJlcjsKKyAKKyAgICAgICBhcHAtPmFwcHR5cGUgPSBBUFBUWVBFX09QRU5QR1A7CisgCisg ICAgICAgYXBwLT5kaWRfY2h2MSA9IDA7CisgICAgICAgYXBwLT5kaWRfY2h2MiA9IDA7CisgICAg ICAgYXBwLT5kaWRfY2h2MyA9IDA7CisgICAgICAgYXBwLT5hcHBfbG9jYWwgPSBOVUxMOworIAor ICAgICAgIC8qIFRoZSBPcGVuUEdQIGNhcmQgcmV0dXJucyB0aGUgc2VyaWFsIG51bWJlciBhcyBw YXJ0IG9mIHRoZQorICAgICAgICAgIEFJRDsgYmVjYXVzZSB3ZSBwcmVmZXIgdG8gdXNlIE9wZW5Q R1Agc2VyaWFsIG51bWJlcnMsIHdlCisgICAgICAgICAgcmVwbGFjZSBhIHBvc3NpYmx5IGFscmVh ZHkgc2V0IG9uZSBmcm9tIGEgRUYuR0RPIHdpdGggdGhpcworICAgICAgICAgIG9uZS4gIE5vdGUs IHRoYXQgZm9yIGN1cnJlbnQgT3BlblBHUCBjYXJkcywgbm8gRUYuR0RPIGV4aXN0cworICAgICAg ICAgIGFuZCB0aHVzIGl0IHdvbid0IG1hdHRlciBhdCBhbGwuICovCisgICAgICAgZXJyID0gaXNv NzgxNl9nZXRfZGF0YSAoc2xvdCwgMCwgMHgwMDRGLCAmYnVmZmVyLCAmYnVmbGVuKTsKKyAgICAg ICBpZiAoZXJyKQorICAgICAgICAgZ290byBsZWF2ZTsKKyAgICAgICBpZiAob3B0LnZlcmJvc2Up CisgICAgICAgICB7CisgICAgICAgICAgIGxvZ19pbmZvICgiQUlEOiAiKTsKKyAgICAgICAgICAg bG9nX3ByaW50aGV4IChidWZmZXIsIGJ1ZmxlbiwgIiIpOworICAgICAgICAgfQorIAorICAgICAg IGFwcC0+YXBwdmVyc2lvbiA9IGJ1ZmZlcls2XSA8PCA4OworICAgICAgIGFwcC0+YXBwdmVyc2lv biB8PSBidWZmZXJbN107CisgICAgICAgbWFudWZhY3R1cmVyID0gKGJ1ZmZlcls4XTw8OCB8IGJ1 ZmZlcls5XSk7CisgCisgICAgICAgLyogRm9yIFl1YmlrZXksIHNlcmlhbG5vIGlzIHNldCBpbiBh cHAuYywgYWxyZWFkeS4gIFRoZSBwcm9ibGVtCisgICAgICAgICogaXMgdGhhdCB0aGUgT3BlblBH UCBhcHB2ZXJzaW9uIGhhcyBiZWVuIHNldCB0byAwLjAgYmVjYXVzZSB3ZQorICAgICAgICAqIGFy ZSBub3QgYWJsZSB0byBkZWR1Y2UgdGhpcyBpZiB0aGUgT3BlblBHUCBhcHAgaGFzIG5vdCBiZWVu CisgICAgICAgICogZW5hYmxlZC4gIFRodXMgd2UgaGVyZSB0byB0byB1c2UgdGhlIGFwcHZlcnNp b24gZnJvbSBETyAweDRmCisgICAgICAgICogYnV0IHJldHVybiBhIHNlcmlhbG5vIHdpdGggYSB2 ZXJzaW9uIDAuMCBhcyBzZXQgYnkgYXBwLmMuCisgICAgICAgICogVXNlcnMgb2Ygc2NkYWVtb24g dGFraW5nIHRoZSB2ZXJzaW9uIGZyb20gdGhlIHNlcmlhbG5vIHdvbid0CisgICAgICAgICogd29y ayBhbnltb3JlIGFuZCBuZWVkIHRvIGJlIG1vZGlmaWVkLiAgUmVjYWxsIHRoYXQgb3VyCisgICAg ICAgICogYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIGV4YWN0bHkgb25lIHNlcmlsYW5vIHBlciBjYXJk LgorICAgICAgICAqLworICAgICAgIGlmIChBUFBfQ0FSRChhcHApLT5jYXJkdHlwZSA9PSBDQVJE VFlQRV9ZVUJJS0VZKQorICAgICAgICAgeGZyZWUgKGJ1ZmZlcik7CisgICAgICAgZWxzZQorICAg ICAgICAgeworICAgICAgICAgICB4ZnJlZSAoQVBQX0NBUkQoYXBwKS0+c2VyaWFsbm8pOworICAg ICAgICAgICBBUFBfQ0FSRChhcHApLT5zZXJpYWxubyA9IGJ1ZmZlcjsKKyAgICAgICAgICAgQVBQ X0NBUkQoYXBwKS0+c2VyaWFsbm9sZW4gPSBidWZsZW47CisgICAgICAgICB9CisgCisgICAgICAg YnVmZmVyID0gTlVMTDsKKyAgICAgICBhcHAtPmFwcF9sb2NhbCA9IHh0cnljYWxsb2MgKDEsIHNp emVvZiAqYXBwLT5hcHBfbG9jYWwpOworICAgICAgIGlmICghYXBwLT5hcHBfbG9jYWwpCisgICAg ICAgICB7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJvcl9mcm9tX3N5c2Vycm9yICgpOworICAg ICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAgfQorIAorICAgICAgIC8qIFdlIHdhbnQgdG8g dGVtcG9yYXJ5IGNhY2hlIHRoZSBETyA2RS4gICovCisgICAgICAgYXBwLT5hcHBfbG9jYWwtPm92 ZXJyaWRlLmNhY2hlXzZlID0gMTsKKyAKKyAgICAgICBhcHAtPmFwcF9sb2NhbC0+bWFudWZhY3R1 cmVyID0gbWFudWZhY3R1cmVyOworIAorICAgICAgIGlmIChhcHAtPmFwcHZlcnNpb24gPj0gMHgw MjAwKQorICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MiA9IDE7CisgCisgICAg ICAgaWYgKGFwcC0+YXBwdmVyc2lvbiA+PSAweDAzMDApCisgICAgICAgICBhcHAtPmFwcF9sb2Nh bC0+ZXh0Y2FwLmlzX3YzID0gMTsKKyAKKyAgICAgICAvKiBSZWFkIHRoZSBoaXN0b3JpY2FsIGJ5 dGVzLiAgKi8KKyAgICAgICByZWxwdHIgPSBnZXRfb25lX2RvIChhcHAsIDB4NWY1MiwgJmJ1ZmZl ciwgJmJ1ZmxlbiwgTlVMTCk7CisgICAgICAgaWYgKHJlbHB0cikKKyAgICAgICAgIHsKKyAgICAg ICAgICAgaWYgKG9wdC52ZXJib3NlKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGxv Z19pbmZvICgiSGlzdG9yaWNhbCBCeXRlczogIik7CisgICAgICAgICAgICAgICBsb2dfcHJpbnRo ZXggKGJ1ZmZlciwgYnVmbGVuLCAiIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICBwYXJz ZV9oaXN0b3JpY2FsIChhcHAtPmFwcF9sb2NhbCwgYnVmZmVyLCBidWZsZW4pOworICAgICAgICAg ICB4ZnJlZSAocmVscHRyKTsKKyAgICAgICAgIH0KKyAKKyAgICAgICAvKiBSZWFkIHRoZSBmb3Jj ZS1jaHYxIGZsYWcuICAqLworICAgICAgIHJlbHB0ciA9IGdldF9vbmVfZG8gKGFwcCwgMHgwMEM0 LCAmYnVmZmVyLCAmYnVmbGVuLCBOVUxMKTsKKyAgICAgICBpZiAoIXJlbHB0cikKKyAgICAgICAg IHsKKyAgICAgICAgICAgbG9nX2Vycm9yIChfKCJjYW4ndCBhY2Nlc3MgJXMgLSBpbnZhbGlkIE9w ZW5QR1AgY2FyZD9cbiIpLAorICAgICAgICAgICAgICAgICAgICAgICJDSFYgU3RhdHVzIEJ5dGVz Iik7CisgICAgICAgICAgIGVyciA9IGdwZ19lcnJvciAoR1BHX0VSUl9DQVJEKTsKKyAgICAgICAg ICAgZ290byBsZWF2ZTsKKyAgICAgICAgIH0KKyAgICAgICBhcHAtPmZvcmNlX2NodjEgPSAoYnVm bGVuICYmICpidWZmZXIgPT0gMCk7CisgICAgICAgeGZyZWUgKHJlbHB0cik7CisgCisgICAgICAg LyogUmVhZCB0aGUgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzLiAgKi8KKyAgICAgICByZWxwdHIgPSBn ZXRfb25lX2RvIChhcHAsIDB4MDBDMCwgJmJ1ZmZlciwgJmJ1ZmxlbiwgTlVMTCk7CisgICAgICAg aWYgKCFyZWxwdHIpCisgICAgICAgICB7CisgICAgICAgICAgIGxvZ19lcnJvciAoXygiY2FuJ3Qg YWNjZXNzICVzIC0gaW52YWxpZCBPcGVuUEdQIGNhcmQ/XG4iKSwKKyAgICAgICAgICAgICAgICAg ICAgICAiRXh0ZW5kZWQgQ2FwYWJpbGl0eSBGbGFncyIgKTsKKyAgICAgICAgICAgZXJyID0gZ3Bn X2Vycm9yIChHUEdfRVJSX0NBUkQpOworICAgICAgICAgICBnb3RvIGxlYXZlOworICAgICAgICAg fQorICAgICAgIGlmIChidWZsZW4pCisgICAgICAgICB7CisgICAgICAgICAgIGFwcC0+YXBwX2xv Y2FsLT5leHRjYXAuc21fc3VwcG9ydGVkICAgICA9ICEhKCpidWZmZXIgJiAweDgwKTsKKyAgICAg ICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5nZXRfY2hhbGxlbmdlICAgID0gISEoKmJ1ZmZl ciAmIDB4NDApOworICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmtleV9pbXBvcnQg ICAgICAgPSAhISgqYnVmZmVyICYgMHgyMCk7CisgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5l eHRjYXAuY2hhbmdlX2ZvcmNlX2NodiA9ICEhKCpidWZmZXIgJiAweDEwKTsKKyAgICAgICAgICAg YXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5wcml2YXRlX2RvcyAgICAgID0gISEoKmJ1ZmZlciAmIDB4 MDgpOworICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmFsZ29fYXR0cl9jaGFuZ2Ug PSAhISgqYnVmZmVyICYgMHgwNCk7CisgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5leHRjYXAu aGFzX2RlY3J5cHQgICAgICA9ICEhKCpidWZmZXIgJiAweDAyKTsKKyAgICAgICAgICAgYXBwLT5h cHBfbG9jYWwtPmV4dGNhcC5rZGZfZG8gICAgICAgICAgID0gISEoKmJ1ZmZlciAmIDB4MDEpOwor ICAgICAgICAgfQorICAgICAgIGlmIChidWZsZW4gPj0gMTApCisgICAgICAgICB7CisgICAgICAg ICAgIC8qIEF2YWlsYWJsZSB3aXRoIGNhcmRzIG9mIHYyIG9yIGxhdGVyLiAgKi8KKyAgICAgICAg ICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5zbV9hbGdvID0gYnVmZmVyWzFdOworICAgICAgICAg ICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLm1heF9nZXRfY2hhbGxlbmdlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IChidWZmZXJbMl0gPDwgOCB8IGJ1 ZmZlclszXSk7CisgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5leHRjYXAubWF4X2NlcnRsZW4g PSAoYnVmZmVyWzRdIDw8IDggfCBidWZmZXJbNV0pOworIAorICAgICAgICAgICAvKiBJbnRlcnBy ZXRhdGlvbiBpcyBkaWZmZXJlbnQgYmV0d2VlbiB2MiBhbmQgdjMsIHVuZm9ydHVuYXRlbHkuICAq LworICAgICAgICAgICBpZiAoYXBwLT5hcHBfbG9jYWwtPmV4dGNhcC5pc192MykKKyAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLm1heF9zcGVjaWFs X2RvCisgICAgICAgICAgICAgICAgID0gKGJ1ZmZlcls2XSA8PCA4IHwgYnVmZmVyWzddKTsKKyAg ICAgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5leHRjYXAucGluX2JsazIgPSAhIShidWZmZXJb OF0gJiAweDAxKTsKKyAgICAgICAgICAgICAgIGFwcC0+YXBwX2xvY2FsLT5leHRjYXAubXNlPSAh IShidWZmZXJbOV0gJiAweDAxKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAg eGZyZWUgKHJlbHB0cik7CisgCisgICAgICAgLyogU29tZSBvZiB0aGUgZmlyc3QgY2FyZHMgYWNj aWRlbnRhbGx5IGRvbid0IHNldCB0aGUKKyAgICAgICAgICBDSEFOR0VfRk9SQ0VfQ0hWIGJpdCBi dXQgYWxsb3cgaXQgYW55d2F5LiAqLworICAgICAgIGlmIChhcHAtPmFwcHZlcnNpb24gPD0gMHgw MTAwICYmIG1hbnVmYWN0dXJlciA9PSAxKQorICAgICAgICAgYXBwLT5hcHBfbG9jYWwtPmV4dGNh cC5jaGFuZ2VfZm9yY2VfY2h2ID0gMTsKKyAKKyAgICAgICAvKiBDaGVjayBvcHRpb25hbCBETyBv ZiAiR2VuZXJhbCBGZWF0dXJlIE1hbmFnZW1lbnQiIGZvciBidXR0b24uICAqLworICAgICAgIHJl bHB0ciA9IGdldF9vbmVfZG8gKGFwcCwgMHg3Zjc0LCAmYnVmZmVyLCAmYnVmbGVuLCBOVUxMKTsK KyAgICAgICBpZiAocmVscHRyKQorICAgICAgICAgeworICAgICAgICAgICAvKiBJdCBtdXN0IGJl OiAwMyA4MSAwMSAyMCAqLworICAgICAgICAgICBhcHAtPmFwcF9sb2NhbC0+ZXh0Y2FwLmhhc19i dXR0b24gPSAxOworICAgICAgICAgfQorIAorICAgICAgIHBhcnNlX2xvZ2luX2RhdGEgKGFwcCk7 CisgCisgICAgICAgaWYgKG9wdC52ZXJib3NlKQorICAgICAgICAgc2hvd19jYXBzIChhcHAtPmFw cF9sb2NhbCk7CisgCisgICAgICAgZXJyID0gcGFyc2VfYWxnb3JpdGhtX2F0dHJpYnV0ZSAoYXBw LCAwKTsKKyAgICAgICBpZiAoIWVycikKKyAgICAgICAgIGVyciA9IHBhcnNlX2FsZ29yaXRobV9h dHRyaWJ1dGUgKGFwcCwgMSk7CisgICAgICAgaWYgKCFlcnIpCisgICAgICAgICBlcnIgPSBwYXJz ZV9hbGdvcml0aG1fYXR0cmlidXRlIChhcHAsIDIpOworICAgICAgIGlmIChlcnIpCisgICAgICAg ICBnb3RvIGxlYXZlOworIAorICAgICAgIGlmIChvcHQudmVyYm9zZSA+IDEpCisgICAgICAgICBk dW1wX2FsbF9kbyAoc2xvdCk7CisgCisgICAgICAgYXBwLT5hcHBfbG9jYWwtPm92ZXJyaWRlLmNh Y2hlXzZlID0gMDsKKyAgICAgICBmbHVzaF9jYWNoZV9pdGVtIChhcHAsIDB4NkUpOworIAorICAg ICAgIGFwcC0+Zm5jLmRlaW5pdCA9IGRvX2RlaW5pdDsKKyAgICAgICBhcHAtPmZuYy5wcmVwX3Jl c2VsZWN0ID0gZG9fcHJlcF9yZXNlbGVjdDsKKyAgICAgICBhcHAtPmZuYy5yZXNlbGVjdCA9IGRv X3Jlc2VsZWN0OworICAgICAgIGFwcC0+Zm5jLmxlYXJuX3N0YXR1cyA9IGRvX2xlYXJuX3N0YXR1 czsKKyAgICAgICBhcHAtPmZuYy5yZWFkY2VydCA9IGRvX3JlYWRjZXJ0OworICAgICAgIGFwcC0+ Zm5jLnJlYWRrZXkgPSBkb19yZWFka2V5OworICAgICAgIGFwcC0+Zm5jLmdldGF0dHIgPSBkb19n ZXRhdHRyOworICAgICAgIGFwcC0+Zm5jLnNldGF0dHIgPSBkb19zZXRhdHRyOworICAgICAgIGFw cC0+Zm5jLndyaXRlY2VydCA9IGRvX3dyaXRlY2VydDsKKyAgICAgICBhcHAtPmZuYy53cml0ZWtl eSA9IGRvX3dyaXRla2V5OworICAgICAgIGFwcC0+Zm5jLmdlbmtleSA9IGRvX2dlbmtleTsKKyAg ICAgICBhcHAtPmZuYy5zaWduID0gZG9fc2lnbjsKKyAgICAgICBhcHAtPmZuYy5hdXRoID0gZG9f YXV0aDsKKyAgICAgICBhcHAtPmZuYy5kZWNpcGhlciA9IGRvX2RlY2lwaGVyOworICAgICAgIGFw cC0+Zm5jLmNoYW5nZV9waW4gPSBkb19jaGFuZ2VfcGluOworICAgICAgIGFwcC0+Zm5jLmNoZWNr X3BpbiA9IGRvX2NoZWNrX3BpbjsKKyAgICAgICBhcHAtPmZuYy53aXRoX2tleWdyaXAgPSBkb193 aXRoX2tleWdyaXA7CisgICAgICAgYXBwLT5mbmMuY2hlY2tfYWlkID0gZG9fY2hlY2tfYWlkOwor ICAgIH0KKyAKKyBsZWF2ZToKKyAgIGlmIChlcnIpCisgICAgIGRvX2RlaW5pdCAoYXBwKTsKKyAg IHJldHVybiBlcnI7CisgfQpkaWZmIC0tZ2l0IGEvc3JjcGtncy9nbnVwZy90ZW1wbGF0ZSBiL3Ny Y3BrZ3MvZ251cGcvdGVtcGxhdGUKaW5kZXggNzlhMzcwMDAwMjFjLi5kNDM3ODc0NzBmZmYgMTAw NjQ0Ci0tLSBhL3NyY3BrZ3MvZ251cGcvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9nbnVwZy90ZW1w bGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ2dudXBnJwogcGtnbmFt ZT1nbnVwZwogdmVyc2lvbj0yLjMuNwotcmV2aXNpb249MgorcmV2aXNpb249MwogYnVpbGRfc3R5 bGU9Z251LWNvbmZpZ3VyZQogY29uZmlndXJlX2FyZ3M9IiQodm9wdF9lbmFibGUgbGRhcCkKICAt LXdpdGgtbGliZ2NyeXB0LXByZWZpeD0ke1hCUFNfQ1JPU1NfQkFTRX0vdXNyCg== --===============3957225427361766809==--