From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 16EBB47A82 for ; Fri, 29 Sep 2023 21:46:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3BA0968CC95; Sat, 30 Sep 2023 00:46:16 +0300 (EEST) Received: from mail-ua1-f65.google.com (mail-ua1-f65.google.com [209.85.222.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B013F68CBAA for ; Sat, 30 Sep 2023 00:46:09 +0300 (EEST) Received: by mail-ua1-f65.google.com with SMTP id a1e0cc1a2514c-7aba99b610fso3860088241.1 for ; Fri, 29 Sep 2023 14:46:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696023968; x=1696628768; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Jcs3lbHjx82uWt/8P9I/DaNoYLLhz3kahA+tcs2r36k=; b=ceMpRP7vPD6ouGJ9Y64k96kX1/j8bYENuN95fVH/dkeh6kAj7sKS+k0I/8aUHiPF9b oNzL4MrAr0+fuhJHQN7aYDpfcUrK5BiS6cRL5xZokLfyL6jbFFt2eDmbYUpsdribpyrW xZmktRGpCkwzDmrknNHx810GYcmyWvhbd/OJYlpQg/EbL1jwhNVTmqSaNGtLx+0MgVmY AJFOGKyFQ3DoCsH9SioE03chYjfqTSi0sfy8bTsiCN4XbMu2goepQtVW0wfI89yPq7GE /bK0MuWfsRPog8lrCb2ZXpr2d3PD4HgQ2wfrRLdCGO3Y5yVfAgX+jtsnogShE5o6C9Wz XUIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696023968; x=1696628768; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Jcs3lbHjx82uWt/8P9I/DaNoYLLhz3kahA+tcs2r36k=; b=w3+DhlnaFa+XN2J+V565TMiQ50C9KcyS+fYSqpAmLKtyc/uiGTmH3kC4uMIH9HpJQ4 StZr8BDg+ptG6ssx8cgTYMAQ30qvzQzlXkD7ySUwkBwglXBlkv8D9fLXj9A9NVqIucH4 SCJu5Ionenr1rFvw4SiaCxgRjyvWbh3HTrjV/acVXbozNa7cvuY6JuvhVyisZvwh9A61 cPVWeE+537RV+e0doBuTqNbgxooTzh1Eu7HOBiazKiwS9+CF++Aun4Kl0HcQQpkCTim9 1VN454x4IT93XhdARNCO31BiMm5pcrLYHwjEi8G8QwUwvKiDGho26GPq9detTxtxoSxd rsXg== X-Gm-Message-State: AOJu0Yw2WE98cfkz8kwJxhAN2Yag726u+M2G3UrP9M2uH5wiM6K4B3rE AdgC/Ye0xEsSvbTvF7/dUcmu9Uecj4PuyaijumlTzUFTo4/waFeeZu4= X-Google-Smtp-Source: AGHT+IF4y08xopNdcVSZ1NS8diHa+TOfXrU11oPWLtGywAvLFQdMVnJtdSbdw2miqRjkzfB/jHICo/CmxWq7QM5U6DI= X-Received: by 2002:a05:6102:274c:b0:44e:93f4:3c85 with SMTP id p12-20020a056102274c00b0044e93f43c85mr4997333vsu.12.1696023967978; Fri, 29 Sep 2023 14:46:07 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a59:b34a:0:b0:405:b46f:a850 with HTTP; Fri, 29 Sep 2023 14:46:07 -0700 (PDT) From: Paul B Mahol Date: Fri, 29 Sep 2023 23:46:07 +0200 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="00000000000024711d0606865a00" Subject: [FFmpeg-devel] [PATCH] avfilter: merge loudnorm filter functionality into f_ebur128.c X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --00000000000024711d0606865a00 Content-Type: text/plain; charset="UTF-8" Attached. --00000000000024711d0606865a00 Content-Type: text/x-patch; charset="UTF-8"; name="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Disposition: attachment; filename="0001-avfilter-merge-loudnorm-filter-functionality-into-f_.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSA0ZjAwMjNiZGE4YjM0YTAwNWFhMzJhMWZmMDNlYmMzMmEyZDY1YmRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEIgTWFob2wgPG9uZW1kYUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjkgU2VwIDIwMjMgMjA6NTM6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBhdmZpbHRl cjogbWVyZ2UgbG91ZG5vcm0gZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW50bwogZl9lYnVyMTI4LmMK ClJlbW92ZXMgZWJ1cjEyOCAtIGFuIG9sZCB2ZXJzaW9uIG9mIGxpYnJhcnkgYW5kIHJlcGxhY2Vz IGl0IHdpdGggbmF0aXZlIGltcGxlbWVudGF0aW9uLgpOb3QgY29tcGxldGUsIGdvaW5nIHRvIGFk ZCBjdXJyZW50bHkgbWlzc2luZyBkeW5hbWljIGZpbHRlcmluZyBtb2RlLgoKU2lnbmVkLW9mZi1i eTogUGF1bCBCIE1haG9sIDxvbmVtZGFAZ21haWwuY29tPgotLS0KIGxpYmF2ZmlsdGVyL01ha2Vm aWxlICAgICAgfCAgIDEgLQogbGliYXZmaWx0ZXIvYWZfbG91ZG5vcm0uYyB8IDk0MSAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliYXZmaWx0ZXIvZWJ1cjEyOC5jICAg ICB8IDcyNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliYXZmaWx0ZXIvZWJ1cjEy OC5oICAgICB8IDIyOSAtLS0tLS0tLS0tCiBsaWJhdmZpbHRlci9mX2VidXIxMjguYyAgIHwgNzIw ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDU1OSBpbnNl cnRpb25zKCspLCAyMDU3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zmls dGVyL2FmX2xvdWRub3JtLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9lYnVyMTI4 LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9lYnVyMTI4LmgKCmRpZmYgLS1naXQg YS9saWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4IDQ1ZWY1 MGEzMGMuLmNlZmViZWE1OWYgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCisrKyBi L2xpYmF2ZmlsdGVyL01ha2VmaWxlCkBAIC0xNTAsNyArMTUwLDYgQEAgT0JKUy0kKENPTkZJR19I SUdIUEFTU19GSUxURVIpICAgICAgICAgICAgICAgKz0gYWZfYmlxdWFkcy5vCiBPQkpTLSQoQ09O RklHX0hJR0hTSEVMRl9GSUxURVIpICAgICAgICAgICAgICArPSBhZl9iaXF1YWRzLm8KIE9CSlMt JChDT05GSUdfSk9JTl9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IGFmX2pvaW4ubwogT0JK Uy0kKENPTkZJR19MQURTUEFfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gYWZfbGFkc3BhLm8K LU9CSlMtJChDT05GSUdfTE9VRE5PUk1fRklMVEVSKSAgICAgICAgICAgICAgICs9IGFmX2xvdWRu b3JtLm8gZWJ1cjEyOC5vCiBPQkpTLSQoQ09ORklHX0xPV1BBU1NfRklMVEVSKSAgICAgICAgICAg ICAgICArPSBhZl9iaXF1YWRzLm8KIE9CSlMtJChDT05GSUdfTE9XU0hFTEZfRklMVEVSKSAgICAg ICAgICAgICAgICs9IGFmX2JpcXVhZHMubwogT0JKUy0kKENPTkZJR19MVjJfRklMVEVSKSAgICAg ICAgICAgICAgICAgICAgKz0gYWZfbHYyLm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FmX2xv dWRub3JtLmMgYi9saWJhdmZpbHRlci9hZl9sb3Vkbm9ybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBkODMzOThhZTJhLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL2FmX2xv dWRub3JtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo dCAoYykgMjAxNiBLeWxlIFN3YW5zb24gPGtAeWxvLnBoPi4KLSAqCi0gKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCi0gKi8KLQotLyogaHR0cDovL2sueWxvLnBoLzIwMTYvMDQvMDQvbG91ZG5v cm0uaHRtbCAqLwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgotI2luY2x1ZGUgImF2Zmls dGVyLmgiCi0jaW5jbHVkZSAiZmlsdGVycy5oIgotI2luY2x1ZGUgImZvcm1hdHMuaCIKLSNpbmNs dWRlICJpbnRlcm5hbC5oIgotI2luY2x1ZGUgImF1ZGlvLmgiCi0jaW5jbHVkZSAiZWJ1cjEyOC5o IgotCi1lbnVtIEZyYW1lVHlwZSB7Ci0gICAgRklSU1RfRlJBTUUsCi0gICAgSU5ORVJfRlJBTUUs Ci0gICAgRklOQUxfRlJBTUUsCi0gICAgTElORUFSX01PREUsCi0gICAgRlJBTUVfTkIKLX07Ci0K LWVudW0gTGltaXRlclN0YXRlIHsKLSAgICBPVVQsCi0gICAgQVRUQUNLLAotICAgIFNVU1RBSU4s Ci0gICAgUkVMRUFTRSwKLSAgICBTVEFURV9OQgotfTsKLQotZW51bSBQcmludEZvcm1hdCB7Ci0g ICAgTk9ORSwKLSAgICBKU09OLAotICAgIFNVTU1BUlksCi0gICAgUEZfTkIKLX07Ci0KLXR5cGVk ZWYgc3RydWN0IExvdWROb3JtQ29udGV4dCB7Ci0gICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7Ci0g ICAgZG91YmxlIHRhcmdldF9pOwotICAgIGRvdWJsZSB0YXJnZXRfbHJhOwotICAgIGRvdWJsZSB0 YXJnZXRfdHA7Ci0gICAgZG91YmxlIG1lYXN1cmVkX2k7Ci0gICAgZG91YmxlIG1lYXN1cmVkX2xy YTsKLSAgICBkb3VibGUgbWVhc3VyZWRfdHA7Ci0gICAgZG91YmxlIG1lYXN1cmVkX3RocmVzaDsK LSAgICBkb3VibGUgb2Zmc2V0OwotICAgIGludCBsaW5lYXI7Ci0gICAgaW50IGR1YWxfbW9ubzsK LSAgICBlbnVtIFByaW50Rm9ybWF0IHByaW50X2Zvcm1hdDsKLQotICAgIGRvdWJsZSAqYnVmOwot ICAgIGludCBidWZfc2l6ZTsKLSAgICBpbnQgYnVmX2luZGV4OwotICAgIGludCBwcmV2X2J1Zl9p bmRleDsKLQotICAgIGRvdWJsZSBkZWx0YVszMF07Ci0gICAgZG91YmxlIHdlaWdodHNbMjFdOwot ICAgIGRvdWJsZSBwcmV2X2RlbHRhOwotICAgIGludCBpbmRleDsKLQotICAgIGRvdWJsZSBnYWlu X3JlZHVjdGlvblsyXTsKLSAgICBkb3VibGUgKmxpbWl0ZXJfYnVmOwotICAgIGRvdWJsZSAqcHJl dl9zbXA7Ci0gICAgaW50IGxpbWl0ZXJfYnVmX2luZGV4OwotICAgIGludCBsaW1pdGVyX2J1Zl9z aXplOwotICAgIGVudW0gTGltaXRlclN0YXRlIGxpbWl0ZXJfc3RhdGU7Ci0gICAgaW50IHBlYWtf aW5kZXg7Ci0gICAgaW50IGVudl9pbmRleDsKLSAgICBpbnQgZW52X2NudDsKLSAgICBpbnQgYXR0 YWNrX2xlbmd0aDsKLSAgICBpbnQgcmVsZWFzZV9sZW5ndGg7Ci0KLSAgICBpbnQ2NF90IHB0c1sz MF07Ci0gICAgZW51bSBGcmFtZVR5cGUgZnJhbWVfdHlwZTsKLSAgICBpbnQgYWJvdmVfdGhyZXNo b2xkOwotICAgIGludCBwcmV2X25iX3NhbXBsZXM7Ci0gICAgaW50IGNoYW5uZWxzOwotCi0gICAg RkZFQlVSMTI4U3RhdGUgKnIxMjhfaW47Ci0gICAgRkZFQlVSMTI4U3RhdGUgKnIxMjhfb3V0Owot fSBMb3VkTm9ybUNvbnRleHQ7Ci0KLSNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKExvdWROb3Jt Q29udGV4dCwgeCkKLSNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfQVVESU9fUEFSQU18QVZfT1BU X0ZMQUdfRklMVEVSSU5HX1BBUkFNCi0KLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBsb3Vkbm9ybV9v cHRpb25zW10gPSB7Ci0gICAgeyAiSSIsICAgICAgICAgICAgICAgICJzZXQgaW50ZWdyYXRlZCBs b3VkbmVzcyB0YXJnZXQiLCAgICBPRkZTRVQodGFyZ2V0X2kpLCAgICAgICAgIEFWX09QVF9UWVBF X0RPVUJMRSwgIHsuZGJsID0gLTI0Ln0sICAgLTcwLiwgICAgICAgLTUuLCAgRkxBR1MgfSwKLSAg ICB7ICJpIiwgICAgICAgICAgICAgICAgInNldCBpbnRlZ3JhdGVkIGxvdWRuZXNzIHRhcmdldCIs ICAgIE9GRlNFVCh0YXJnZXRfaSksICAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwg PSAtMjQufSwgICAtNzAuLCAgICAgICAtNS4sICBGTEFHUyB9LAotICAgIHsgIkxSQSIsICAgICAg ICAgICAgICAic2V0IGxvdWRuZXNzIHJhbmdlIHRhcmdldCIsICAgICAgICAgT0ZGU0VUKHRhcmdl dF9scmEpLCAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICA3Ln0sICAgICAxLiwg ICAgICAgIDUwLiwgIEZMQUdTIH0sCi0gICAgeyAibHJhIiwgICAgICAgICAgICAgICJzZXQgbG91 ZG5lc3MgcmFuZ2UgdGFyZ2V0IiwgICAgICAgICBPRkZTRVQodGFyZ2V0X2xyYSksICAgICAgIEFW X09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDcufSwgICAgIDEuLCAgICAgICAgNTAuLCAgRkxB R1MgfSwKLSAgICB7ICJUUCIsICAgICAgICAgICAgICAgInNldCBtYXhpbXVtIHRydWUgcGVhayIs ICAgICAgICAgICAgIE9GRlNFVCh0YXJnZXRfdHApLCAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxF LCAgey5kYmwgPSAtMi59LCAgICAtOS4sICAgICAgICAgMC4sICBGTEFHUyB9LAotICAgIHsgInRw IiwgICAgICAgICAgICAgICAic2V0IG1heGltdW0gdHJ1ZSBwZWFrIiwgICAgICAgICAgICAgT0ZG U0VUKHRhcmdldF90cCksICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0yLn0s ICAgIC05LiwgICAgICAgICAwLiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRfSSIsICAgICAg ICJtZWFzdXJlZCBJTCBvZiBpbnB1dCBmaWxlIiwgICAgICAgICBPRkZTRVQobWVhc3VyZWRfaSks ICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDAufSwgICAgLTk5LiwgICAgICAg IDAuLCAgRkxBR1MgfSwKLSAgICB7ICJtZWFzdXJlZF9pIiwgICAgICAgIm1lYXN1cmVkIElMIG9m IGlucHV0IGZpbGUiLCAgICAgICAgIE9GRlNFVChtZWFzdXJlZF9pKSwgICAgICAgQVZfT1BUX1RZ UEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAtOTkuLCAgICAgICAgMC4sICBGTEFHUyB9LAot ICAgIHsgIm1lYXN1cmVkX0xSQSIsICAgICAibWVhc3VyZWQgTFJBIG9mIGlucHV0IGZpbGUiLCAg ICAgICAgT0ZGU0VUKG1lYXN1cmVkX2xyYSksICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRi bCA9ICAwLn0sICAgICAwLiwgICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAibWVhc3VyZWRf bHJhIiwgICAgICJtZWFzdXJlZCBMUkEgb2YgaW5wdXQgZmlsZSIsICAgICAgICBPRkZTRVQobWVh c3VyZWRfbHJhKSwgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDAufSwgICAgIDAu LCAgICAgICAgOTkuLCAgRkxBR1MgfSwKLSAgICB7ICJtZWFzdXJlZF9UUCIsICAgICAgIm1lYXN1 cmVkIHRydWUgcGVhayBvZiBpbnB1dCBmaWxlIiwgIE9GRlNFVChtZWFzdXJlZF90cCksICAgICAg QVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgOTkufSwgICAtOTkuLCAgICAgICA5OS4sICBG TEFHUyB9LAotICAgIHsgIm1lYXN1cmVkX3RwIiwgICAgICAibWVhc3VyZWQgdHJ1ZSBwZWFrIG9m IGlucHV0IGZpbGUiLCAgT0ZGU0VUKG1lYXN1cmVkX3RwKSwgICAgICBBVl9PUFRfVFlQRV9ET1VC TEUsICB7LmRibCA9ICA5OS59LCAgIC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCi0gICAgeyAi bWVhc3VyZWRfdGhyZXNoIiwgICJtZWFzdXJlZCB0aHJlc2hvbGQgb2YgaW5wdXQgZmlsZSIsICBP RkZTRVQobWVhc3VyZWRfdGhyZXNoKSwgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gLTcw Ln0sICAgLTk5LiwgICAgICAgIDAuLCAgRkxBR1MgfSwKLSAgICB7ICJvZmZzZXQiLCAgICAgICAg ICAgInNldCBvZmZzZXQgZ2FpbiIsICAgICAgICAgICAgICAgICAgIE9GRlNFVChvZmZzZXQpLCAg ICAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAtOTkuLCAgICAg ICA5OS4sICBGTEFHUyB9LAotICAgIHsgImxpbmVhciIsICAgICAgICAgICAibm9ybWFsaXplIGxp bmVhcmx5IGlmIHBvc3NpYmxlIiwgICAgT0ZGU0VUKGxpbmVhciksICAgICAgICAgICBBVl9PUFRf VFlQRV9CT09MLCAgICB7Lmk2NCA9ICAxfSwgICAgICAgIDAsICAgICAgICAgMSwgIEZMQUdTIH0s Ci0gICAgeyAiZHVhbF9tb25vIiwgICAgICAgICJ0cmVhdCBtb25vIGlucHV0IGFzIGR1YWwtbW9u byIsICAgICBPRkZTRVQoZHVhbF9tb25vKSwgICAgICAgIEFWX09QVF9UWVBFX0JPT0wsICAgIHsu aTY0ID0gIDB9LCAgICAgICAgMCwgICAgICAgICAxLCAgRkxBR1MgfSwKLSAgICB7ICJwcmludF9m b3JtYXQiLCAgICAgInNldCBwcmludCBmb3JtYXQgZm9yIHN0YXRzIiwgICAgICAgIE9GRlNFVChw cmludF9mb3JtYXQpLCAgICAgQVZfT1BUX1RZUEVfSU5ULCAgICAgey5pNjQgPSAgTk9ORX0sICBO T05FLCAgUEZfTkIgLTEsICBGTEFHUywgInByaW50X2Zvcm1hdCIgfSwKLSAgICB7ICAgICAibm9u ZSIsICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAgTk9ORX0sICAg ICAwLCAgICAgICAgIDAsICBGTEFHUywgInByaW50X2Zvcm1hdCIgfSwKLSAgICB7ICAgICAianNv biIsICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAgSlNPTn0sICAg ICAwLCAgICAgICAgIDAsICBGTEFHUywgInByaW50X2Zvcm1hdCIgfSwKLSAgICB7ICAgICAic3Vt bWFyeSIsICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICAgey5pNjQgPSAgU1VNTUFSWX0s ICAwLCAgICAgICAgIDAsICBGTEFHUywgInByaW50X2Zvcm1hdCIgfSwKLSAgICB7IE5VTEwgfQot fTsKLQotQVZGSUxURVJfREVGSU5FX0NMQVNTKGxvdWRub3JtKTsKLQotc3RhdGljIGlubGluZSBp bnQgZnJhbWVfc2l6ZShpbnQgc2FtcGxlX3JhdGUsIGludCBmcmFtZV9sZW5fbXNlYykKLXsKLSAg ICBjb25zdCBpbnQgZnJhbWVfc2l6ZSA9IHJvdW5kKChkb3VibGUpc2FtcGxlX3JhdGUgKiAoZnJh bWVfbGVuX21zZWMgLyAxMDAwLjApKTsKLSAgICByZXR1cm4gZnJhbWVfc2l6ZSArIChmcmFtZV9z aXplICUgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfZ2F1c3NpYW5fZmlsdGVyKExvdWROb3Jt Q29udGV4dCAqcykKLXsKLSAgICBkb3VibGUgdG90YWxfd2VpZ2h0ID0gMC4wOwotICAgIGNvbnN0 IGRvdWJsZSBzaWdtYSA9IDMuNTsKLSAgICBkb3VibGUgYWRqdXN0OwotICAgIGludCBpOwotCi0g ICAgY29uc3QgaW50IG9mZnNldCA9IDIxIC8gMjsKLSAgICBjb25zdCBkb3VibGUgYzEgPSAxLjAg LyAoc2lnbWEgKiBzcXJ0KDIuMCAqIE1fUEkpKTsKLSAgICBjb25zdCBkb3VibGUgYzIgPSAyLjAg KiBwb3coc2lnbWEsIDIuMCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMjE7IGkrKykgewotICAg ICAgICBjb25zdCBpbnQgeCA9IGkgLSBvZmZzZXQ7Ci0gICAgICAgIHMtPndlaWdodHNbaV0gPSBj MSAqIGV4cCgtKHBvdyh4LCAyLjApIC8gYzIpKTsKLSAgICAgICAgdG90YWxfd2VpZ2h0ICs9IHMt PndlaWdodHNbaV07Ci0gICAgfQotCi0gICAgYWRqdXN0ID0gMS4wIC8gdG90YWxfd2VpZ2h0Owot ICAgIGZvciAoaSA9IDA7IGkgPCAyMTsgaSsrKQotICAgICAgICBzLT53ZWlnaHRzW2ldICo9IGFk anVzdDsKLX0KLQotc3RhdGljIGRvdWJsZSBnYXVzc2lhbl9maWx0ZXIoTG91ZE5vcm1Db250ZXh0 ICpzLCBpbnQgaW5kZXgpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IDAuOwotICAgIGludCBpOwot Ci0gICAgaW5kZXggPSBpbmRleCAtIDEwID4gMCA/IGluZGV4IC0gMTAgOiBpbmRleCArIDIwOwot ICAgIGZvciAoaSA9IDA7IGkgPCAyMTsgaSsrKQotICAgICAgICByZXN1bHQgKz0gcy0+ZGVsdGFb KChpbmRleCArIGkpIDwgMzApID8gKGluZGV4ICsgaSkgOiAoaW5kZXggKyBpIC0gMzApXSAqIHMt PndlaWdodHNbaV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBkZXRl Y3RfcGVhayhMb3VkTm9ybUNvbnRleHQgKnMsIGludCBvZmZzZXQsIGludCBuYl9zYW1wbGVzLCBp bnQgY2hhbm5lbHMsIGludCAqcGVha19kZWx0YSwgZG91YmxlICpwZWFrX3ZhbHVlKQotewotICAg IGludCBuLCBjLCBpLCBpbmRleDsKLSAgICBkb3VibGUgY2VpbGluZzsKLSAgICBkb3VibGUgKmJ1 ZjsKLQotICAgICpwZWFrX2RlbHRhID0gLTE7Ci0gICAgYnVmID0gcy0+bGltaXRlcl9idWY7Ci0g ICAgY2VpbGluZyA9IHMtPnRhcmdldF90cDsKLQotICAgIGluZGV4ID0gcy0+bGltaXRlcl9idWZf aW5kZXggKyAob2Zmc2V0ICogY2hhbm5lbHMpICsgKDE5MjAgKiBjaGFubmVscyk7Ci0gICAgaWYg KGluZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAgIGluZGV4IC09IHMtPmxpbWl0 ZXJfYnVmX3NpemU7Ci0KLSAgICBpZiAocy0+ZnJhbWVfdHlwZSA9PSBGSVJTVF9GUkFNRSkgewot ICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykKLSAgICAgICAgICAgIHMtPnBy ZXZfc21wW2NdID0gZmFicyhidWZbaW5kZXggKyBjIC0gY2hhbm5lbHNdKTsKLSAgICB9Ci0KLSAg ICBmb3IgKG4gPSAwOyBuIDwgbmJfc2FtcGxlczsgbisrKSB7Ci0gICAgICAgIGZvciAoYyA9IDA7 IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICBkb3VibGUgdGhpcywgbmV4dCwgbWF4 X3BlYWs7Ci0KLSAgICAgICAgICAgIHRoaXMgPSBmYWJzKGJ1ZlsoaW5kZXggKyBjKSA8IHMtPmxp bWl0ZXJfYnVmX3NpemUgPyAoaW5kZXggKyBjKSA6IChpbmRleCArIGMgLSBzLT5saW1pdGVyX2J1 Zl9zaXplKV0pOwotICAgICAgICAgICAgbmV4dCA9IGZhYnMoYnVmWyhpbmRleCArIGMgKyBjaGFu bmVscykgPCBzLT5saW1pdGVyX2J1Zl9zaXplID8gKGluZGV4ICsgYyArIGNoYW5uZWxzKSA6IChp bmRleCArIGMgKyBjaGFubmVscyAtIHMtPmxpbWl0ZXJfYnVmX3NpemUpXSk7Ci0KLSAgICAgICAg ICAgIGlmICgocy0+cHJldl9zbXBbY10gPD0gdGhpcykgJiYgKG5leHQgPD0gdGhpcykgJiYgKHRo aXMgPiBjZWlsaW5nKSAmJiAobiA+IDApKSB7Ci0gICAgICAgICAgICAgICAgaW50IGRldGVjdGVk OwotCi0gICAgICAgICAgICAgICAgZGV0ZWN0ZWQgPSAxOwotICAgICAgICAgICAgICAgIGZvciAo aSA9IDI7IGkgPCAxMjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHQgPSBmYWJzKGJ1 ZlsoaW5kZXggKyBjICsgKGkgKiBjaGFubmVscykpIDwgcy0+bGltaXRlcl9idWZfc2l6ZSA/IChp bmRleCArIGMgKyAoaSAqIGNoYW5uZWxzKSkgOiAoaW5kZXggKyBjICsgKGkgKiBjaGFubmVscykg LSBzLT5saW1pdGVyX2J1Zl9zaXplKV0pOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA+ IHRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkID0gMDsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFkZXRlY3RlZCkKLSAgICAgICAgICAgICAg ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbm5l bHM7IGMrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAwIHx8IGZhYnMoYnVmW2lu ZGV4ICsgY10pID4gbWF4X3BlYWspCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVhayA9 IGZhYnMoYnVmW2luZGV4ICsgY10pOwotCi0gICAgICAgICAgICAgICAgICAgIHMtPnByZXZfc21w W2NdID0gZmFicyhidWZbKGluZGV4ICsgYykgPCBzLT5saW1pdGVyX2J1Zl9zaXplID8gKGluZGV4 ICsgYykgOiAoaW5kZXggKyBjIC0gcy0+bGltaXRlcl9idWZfc2l6ZSldKTsKLSAgICAgICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAqcGVha19kZWx0YSA9IG47Ci0gICAgICAgICAgICAg ICAgcy0+cGVha19pbmRleCA9IGluZGV4OwotICAgICAgICAgICAgICAgICpwZWFrX3ZhbHVlID0g bWF4X3BlYWs7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBzLT5wcmV2X3NtcFtjXSA9IHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmRl eCArPSBjaGFubmVsczsKLSAgICAgICAgaWYgKGluZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUp Ci0gICAgICAgICAgICBpbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotICAgIH0KLX0KLQot c3RhdGljIHZvaWQgdHJ1ZV9wZWFrX2xpbWl0ZXIoTG91ZE5vcm1Db250ZXh0ICpzLCBkb3VibGUg Km91dCwgaW50IG5iX3NhbXBsZXMsIGludCBjaGFubmVscykKLXsKLSAgICBpbnQgbiwgYywgaW5k ZXgsIHBlYWtfZGVsdGEsIHNtcF9jbnQ7Ci0gICAgZG91YmxlIGNlaWxpbmcsIHBlYWtfdmFsdWU7 Ci0gICAgZG91YmxlICpidWY7Ci0KLSAgICBidWYgPSBzLT5saW1pdGVyX2J1ZjsKLSAgICBjZWls aW5nID0gcy0+dGFyZ2V0X3RwOwotICAgIGluZGV4ID0gcy0+bGltaXRlcl9idWZfaW5kZXg7Ci0g ICAgc21wX2NudCA9IDA7Ci0KLSAgICBpZiAocy0+ZnJhbWVfdHlwZSA9PSBGSVJTVF9GUkFNRSkg ewotICAgICAgICBkb3VibGUgbWF4OwotCi0gICAgICAgIG1heCA9IDAuOwotICAgICAgICBmb3Ig KG4gPSAwOyBuIDwgMTkyMDsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hh bm5lbHM7IGMrKykgewotICAgICAgICAgICAgICBtYXggPSBmYWJzKGJ1ZltjXSkgPiBtYXggPyBm YWJzKGJ1ZltjXSkgOiBtYXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBidWYgKz0gY2hh bm5lbHM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF4ID4gY2VpbGluZykgewotICAgICAg ICAgICAgcy0+Z2Fpbl9yZWR1Y3Rpb25bMV0gPSBjZWlsaW5nIC8gbWF4OwotICAgICAgICAgICAg cy0+bGltaXRlcl9zdGF0ZSA9IFNVU1RBSU47Ci0gICAgICAgICAgICBidWYgPSBzLT5saW1pdGVy X2J1ZjsKLQotICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IDE5MjA7IG4rKykgewotICAgICAg ICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAg ICAgICAgIGRvdWJsZSBlbnY7Ci0gICAgICAgICAgICAgICAgICAgIGVudiA9IHMtPmdhaW5fcmVk dWN0aW9uWzFdOwotICAgICAgICAgICAgICAgICAgICBidWZbY10gKj0gZW52OwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWYgKz0gY2hhbm5lbHM7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLQotICAgICAgICBidWYgPSBzLT5saW1pdGVyX2J1ZjsKLSAgICB9Ci0KLSAg ICBkbyB7Ci0KLSAgICAgICAgc3dpdGNoKHMtPmxpbWl0ZXJfc3RhdGUpIHsKLSAgICAgICAgY2Fz ZSBPVVQ6Ci0gICAgICAgICAgICBkZXRlY3RfcGVhayhzLCBzbXBfY250LCBuYl9zYW1wbGVzIC0g c21wX2NudCwgY2hhbm5lbHMsICZwZWFrX2RlbHRhLCAmcGVha192YWx1ZSk7Ci0gICAgICAgICAg ICBpZiAocGVha19kZWx0YSAhPSAtMSkgewotICAgICAgICAgICAgICAgIHMtPmVudl9jbnQgPSAw OwotICAgICAgICAgICAgICAgIHNtcF9jbnQgKz0gKHBlYWtfZGVsdGEgLSBzLT5hdHRhY2tfbGVu Z3RoKTsKLSAgICAgICAgICAgICAgICBzLT5nYWluX3JlZHVjdGlvblswXSA9IDEuOwotICAgICAg ICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzFdID0gY2VpbGluZyAvIHBlYWtfdmFsdWU7Ci0g ICAgICAgICAgICAgICAgcy0+bGltaXRlcl9zdGF0ZSA9IEFUVEFDSzsKLQotICAgICAgICAgICAg ICAgIHMtPmVudl9pbmRleCA9IHMtPnBlYWtfaW5kZXggLSAocy0+YXR0YWNrX2xlbmd0aCAqIGNo YW5uZWxzKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+ZW52X2luZGV4IDwgMCkKLSAgICAgICAg ICAgICAgICAgICAgcy0+ZW52X2luZGV4ICs9IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAg ICAgICAgICAgICBzLT5lbnZfaW5kZXggKz0gKHMtPmVudl9jbnQgKiBjaGFubmVscyk7Ci0gICAg ICAgICAgICAgICAgaWYgKHMtPmVudl9pbmRleCA+IHMtPmxpbWl0ZXJfYnVmX3NpemUpCi0gICAg ICAgICAgICAgICAgICAgIHMtPmVudl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwotCi0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNtcF9jbnQgPSBuYl9zYW1wbGVz OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBVFRB Q0s6Ci0gICAgICAgICAgICBmb3IgKDsgcy0+ZW52X2NudCA8IHMtPmF0dGFja19sZW5ndGg7IHMt PmVudl9jbnQrKykgewotICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsg YysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnY7Ci0gICAgICAgICAgICAgICAg ICAgIGVudiA9IHMtPmdhaW5fcmVkdWN0aW9uWzBdIC0gKChkb3VibGUpIHMtPmVudl9jbnQgLyAo cy0+YXR0YWNrX2xlbmd0aCAtIDEpICogKHMtPmdhaW5fcmVkdWN0aW9uWzBdIC0gcy0+Z2Fpbl9y ZWR1Y3Rpb25bMV0pKTsKLSAgICAgICAgICAgICAgICAgICAgYnVmW3MtPmVudl9pbmRleCArIGNd ICo9IGVudjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzLT5lbnZfaW5k ZXggKz0gY2hhbm5lbHM7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPmVudl9pbmRleCA+PSBzLT5s aW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgICAgICBzLT5lbnZfaW5kZXggLT0gcy0+ bGltaXRlcl9idWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgIHNtcF9jbnQrKzsKLSAgICAgICAg ICAgICAgICBpZiAoc21wX2NudCA+PSBuYl9zYW1wbGVzKSB7Ci0gICAgICAgICAgICAgICAgICAg IHMtPmVudl9jbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc21wX2NudCA8IG5iX3NhbXBs ZXMpIHsKLSAgICAgICAgICAgICAgICBzLT5lbnZfY250ID0gMDsKLSAgICAgICAgICAgICAgICBz LT5hdHRhY2tfbGVuZ3RoID0gMTkyMDsKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRl ID0gU1VTVEFJTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg IGNhc2UgU1VTVEFJTjoKLSAgICAgICAgICAgIGRldGVjdF9wZWFrKHMsIHNtcF9jbnQsIG5iX3Nh bXBsZXMsIGNoYW5uZWxzLCAmcGVha19kZWx0YSwgJnBlYWtfdmFsdWUpOwotICAgICAgICAgICAg aWYgKHBlYWtfZGVsdGEgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRl ID0gUkVMRUFTRTsKLSAgICAgICAgICAgICAgICBzLT5nYWluX3JlZHVjdGlvblswXSA9IHMtPmdh aW5fcmVkdWN0aW9uWzFdOwotICAgICAgICAgICAgICAgIHMtPmdhaW5fcmVkdWN0aW9uWzFdID0g MS47Ci0gICAgICAgICAgICAgICAgcy0+ZW52X2NudCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvdWJsZSBnYWluX3Jl ZHVjdGlvbjsKLSAgICAgICAgICAgICAgICBnYWluX3JlZHVjdGlvbiA9IGNlaWxpbmcgLyBwZWFr X3ZhbHVlOwotCi0gICAgICAgICAgICAgICAgaWYgKGdhaW5fcmVkdWN0aW9uIDwgcy0+Z2Fpbl9y ZWR1Y3Rpb25bMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcy0+bGltaXRlcl9zdGF0ZSA9IEFU VEFDSzsKLQotICAgICAgICAgICAgICAgICAgICBzLT5hdHRhY2tfbGVuZ3RoID0gcGVha19kZWx0 YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmF0dGFja19sZW5ndGggPD0gMSkKLSAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmF0dGFja19sZW5ndGggPSAgMjsKLQotICAgICAgICAgICAg ICAgICAgICBzLT5nYWluX3JlZHVjdGlvblswXSA9IHMtPmdhaW5fcmVkdWN0aW9uWzFdOwotICAg ICAgICAgICAgICAgICAgICBzLT5nYWluX3JlZHVjdGlvblsxXSA9IGdhaW5fcmVkdWN0aW9uOwot ICAgICAgICAgICAgICAgICAgICBzLT5lbnZfY250ID0gMDsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChzLT5lbnZf Y250ID0gMDsgcy0+ZW52X2NudCA8IHBlYWtfZGVsdGE7IHMtPmVudl9jbnQrKykgewotICAgICAg ICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykgewotICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlIGVudjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudiA9 IHMtPmdhaW5fcmVkdWN0aW9uWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmW3MtPmVu dl9pbmRleCArIGNdICo9IGVudjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICAgICAgICAgIHMtPmVudl9pbmRleCArPSBjaGFubmVsczsKLSAgICAgICAgICAgICAgICAgICAg aWYgKHMtPmVudl9pbmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAg ICAgICAgICAgcy0+ZW52X2luZGV4IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAg ICAgICAgICAgICAgc21wX2NudCsrOwotICAgICAgICAgICAgICAgICAgICBpZiAoc21wX2NudCA+ PSBuYl9zYW1wbGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLT5lbnZfY250Kys7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg ICAgIGNhc2UgUkVMRUFTRToKLSAgICAgICAgICAgIGZvciAoOyBzLT5lbnZfY250IDwgcy0+cmVs ZWFzZV9sZW5ndGg7IHMtPmVudl9jbnQrKykgewotICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7 IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnY7Ci0g ICAgICAgICAgICAgICAgICAgIGVudiA9IHMtPmdhaW5fcmVkdWN0aW9uWzBdICsgKCgoZG91Ymxl KSBzLT5lbnZfY250IC8gKHMtPnJlbGVhc2VfbGVuZ3RoIC0gMSkpICogKHMtPmdhaW5fcmVkdWN0 aW9uWzFdIC0gcy0+Z2Fpbl9yZWR1Y3Rpb25bMF0pKTsKLSAgICAgICAgICAgICAgICAgICAgYnVm W3MtPmVudl9pbmRleCArIGNdICo9IGVudjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgICAgICBzLT5lbnZfaW5kZXggKz0gY2hhbm5lbHM7Ci0gICAgICAgICAgICAgICAgaWYgKHMt PmVudl9pbmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgICAgICBz LT5lbnZfaW5kZXggLT0gcy0+bGltaXRlcl9idWZfc2l6ZTsKLQotICAgICAgICAgICAgICAgIHNt cF9jbnQrKzsKLSAgICAgICAgICAgICAgICBpZiAoc21wX2NudCA+PSBuYl9zYW1wbGVzKSB7Ci0g ICAgICAgICAgICAgICAgICAgIHMtPmVudl9jbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo c21wX2NudCA8IG5iX3NhbXBsZXMpIHsKLSAgICAgICAgICAgICAgICBzLT5lbnZfY250ID0gMDsK LSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX3N0YXRlID0gT1VUOwotICAgICAgICAgICAgfQot Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgfSB3aGlsZSAoc21wX2NudCA8 IG5iX3NhbXBsZXMpOwotCi0gICAgZm9yIChuID0gMDsgbiA8IG5iX3NhbXBsZXM7IG4rKykgewot ICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgb3V0 W2NdID0gYnVmW2luZGV4ICsgY107Ci0gICAgICAgICAgICBpZiAoZmFicyhvdXRbY10pID4gY2Vp bGluZykgewotICAgICAgICAgICAgICAgIG91dFtjXSA9IGNlaWxpbmcgKiAob3V0W2NdIDwgMCA/ IC0xIDogMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgb3V0ICs9IGNoYW5u ZWxzOwotICAgICAgICBpbmRleCArPSBjaGFubmVsczsKLSAgICAgICAgaWYgKGluZGV4ID49IHMt PmxpbWl0ZXJfYnVmX3NpemUpCi0gICAgICAgICAgICBpbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9z aXplOwotICAgIH0KLX0KLQotc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpp bmxpbmssIEFWRnJhbWUgKmluKQotewotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5r LT5kc3Q7Ci0gICAgTG91ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFWRmlsdGVy TGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKLSAgICBBVkZyYW1lICpvdXQ7Ci0gICAg Y29uc3QgZG91YmxlICpzcmM7Ci0gICAgZG91YmxlICpkc3Q7Ci0gICAgZG91YmxlICpidWY7Ci0g ICAgZG91YmxlICpsaW1pdGVyX2J1ZjsKLSAgICBpbnQgaSwgbiwgYywgc3ViZnJhbWVfbGVuZ3Ro LCBzcmNfaW5kZXg7Ci0gICAgZG91YmxlIGdhaW4sIGdhaW5fbmV4dCwgZW52X2dsb2JhbCwgZW52 X3Nob3J0dGVybSwKLSAgICBnbG9iYWwsIHNob3J0dGVybSwgbHJhLCByZWxhdGl2ZV90aHJlc2hv bGQ7Ci0KLSAgICBpZiAoYXZfZnJhbWVfaXNfd3JpdGFibGUoaW4pKSB7Ci0gICAgICAgIG91dCA9 IGluOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG91dCA9IGZmX2dldF9hdWRpb19idWZmZXIob3V0 bGluaywgaW4tPm5iX3NhbXBsZXMpOwotICAgICAgICBpZiAoIW91dCkgewotICAgICAgICAgICAg YXZfZnJhbWVfZnJlZSgmaW4pOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK LSAgICAgICAgfQotICAgICAgICBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4pOwotICAgIH0K LQotICAgIG91dC0+cHRzID0gcy0+cHRzWzBdOwotICAgIG1lbW1vdmUocy0+cHRzLCAmcy0+cHRz WzFdLCAoRkZfQVJSQVlfRUxFTVMocy0+cHRzKSAtIDEpICogc2l6ZW9mKHMtPnB0c1swXSkpOwot Ci0gICAgc3JjID0gKGNvbnN0IGRvdWJsZSAqKWluLT5kYXRhWzBdOwotICAgIGRzdCA9IChkb3Vi bGUgKilvdXQtPmRhdGFbMF07Ci0gICAgYnVmID0gcy0+YnVmOwotICAgIGxpbWl0ZXJfYnVmID0g cy0+bGltaXRlcl9idWY7Ci0KLSAgICBmZl9lYnVyMTI4X2FkZF9mcmFtZXNfZG91YmxlKHMtPnIx MjhfaW4sIHNyYywgaW4tPm5iX3NhbXBsZXMpOwotCi0gICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0g RklSU1RfRlJBTUUgJiYgaW4tPm5iX3NhbXBsZXMgPCBmcmFtZV9zaXplKGlubGluay0+c2FtcGxl X3JhdGUsIDMwMDApKSB7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXQsIG9mZnNldF90cCwgdHJ1ZV9w ZWFrOwotCi0gICAgICAgIGZmX2VidXIxMjhfbG91ZG5lc3NfZ2xvYmFsKHMtPnIxMjhfaW4sICZn bG9iYWwpOwotICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlvdXQubmJfY2hh bm5lbHM7IGMrKykgewotICAgICAgICAgICAgZG91YmxlIHRtcDsKLSAgICAgICAgICAgIGZmX2Vi dXIxMjhfc2FtcGxlX3BlYWsocy0+cjEyOF9pbiwgYywgJnRtcCk7Ci0gICAgICAgICAgICBpZiAo YyA9PSAwIHx8IHRtcCA+IHRydWVfcGVhaykKLSAgICAgICAgICAgICAgICB0cnVlX3BlYWsgPSB0 bXA7Ci0gICAgICAgIH0KLQotICAgICAgICBvZmZzZXQgICAgPSBwb3coMTAuLCAocy0+dGFyZ2V0 X2kgLSBnbG9iYWwpIC8gMjAuKTsKLSAgICAgICAgb2Zmc2V0X3RwID0gdHJ1ZV9wZWFrICogb2Zm c2V0OwotICAgICAgICBzLT5vZmZzZXQgPSBvZmZzZXRfdHAgPCBzLT50YXJnZXRfdHAgPyBvZmZz ZXQgOiBzLT50YXJnZXRfdHAgLyB0cnVlX3BlYWs7Ci0gICAgICAgIHMtPmZyYW1lX3R5cGUgPSBM SU5FQVJfTU9ERTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHMtPmZyYW1lX3R5cGUpIHsKLSAgICBj YXNlIEZJUlNUX0ZSQU1FOgotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgaW4tPm5iX3NhbXBsZXM7 IG4rKykgewotICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGlubGluay0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgICAgICAgICBidWZbcy0+YnVmX2luZGV4ICsgY10g PSBzcmNbY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzcmMgKz0gaW5saW5rLT5jaF9s YXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgICAgICBzLT5idWZfaW5kZXggKz0gaW5saW5rLT5j aF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0gICAgICAgIH0KLQotICAgICAgICBmZl9lYnVyMTI4X2xv dWRuZXNzX3Nob3J0dGVybShzLT5yMTI4X2luLCAmc2hvcnR0ZXJtKTsKLQotICAgICAgICBpZiAo c2hvcnR0ZXJtIDwgcy0+bWVhc3VyZWRfdGhyZXNoKSB7Ci0gICAgICAgICAgICBzLT5hYm92ZV90 aHJlc2hvbGQgPSAwOwotICAgICAgICAgICAgZW52X3Nob3J0dGVybSA9IHNob3J0dGVybSA8PSAt NzAuID8gMC4gOiBzLT50YXJnZXRfaSAtIHMtPm1lYXN1cmVkX2k7Ci0gICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICBzLT5hYm92ZV90aHJlc2hvbGQgPSAxOwotICAgICAgICAgICAgZW52X3No b3J0dGVybSA9IHNob3J0dGVybSA8PSAtNzAuID8gMC4gOiBzLT50YXJnZXRfaSAtIHNob3J0dGVy bTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAobiA9IDA7IG4gPCAzMDsgbisrKQotICAgICAg ICAgICAgcy0+ZGVsdGFbbl0gPSBwb3coMTAuLCBlbnZfc2hvcnR0ZXJtIC8gMjAuKTsKLSAgICAg ICAgcy0+cHJldl9kZWx0YSA9IHMtPmRlbHRhW3MtPmluZGV4XTsKLQotICAgICAgICBzLT5idWZf aW5kZXggPQotICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCA9IDA7Ci0KLSAgICAgICAgZm9y IChuID0gMDsgbiA8IChzLT5saW1pdGVyX2J1Zl9zaXplIC8gaW5saW5rLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHMpOyBuKyspIHsKLSAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgICAgICAgbGltaXRlcl9idWZb cy0+bGltaXRlcl9idWZfaW5kZXggKyBjXSA9IGJ1ZltzLT5idWZfaW5kZXggKyBjXSAqIHMtPmRl bHRhW3MtPmluZGV4XSAqIHMtPm9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMt PmxpbWl0ZXJfYnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAg ICAgICAgICAgaWYgKHMtPmxpbWl0ZXJfYnVmX2luZGV4ID49IHMtPmxpbWl0ZXJfYnVmX3NpemUp Ci0gICAgICAgICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggLT0gcy0+bGltaXRlcl9idWZf c2l6ZTsKLQotICAgICAgICAgICAgcy0+YnVmX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzOwotICAgICAgICB9Ci0KLSAgICAgICAgc3ViZnJhbWVfbGVuZ3RoID0gZnJhbWVf c2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDApOwotICAgICAgICB0cnVlX3BlYWtfbGltaXRl cihzLCBkc3QsIHN1YmZyYW1lX2xlbmd0aCwgaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMp OwotICAgICAgICBmZl9lYnVyMTI4X2FkZF9mcmFtZXNfZG91YmxlKHMtPnIxMjhfb3V0LCBkc3Qs IHN1YmZyYW1lX2xlbmd0aCk7Ci0KLSAgICAgICAgb3V0LT5uYl9zYW1wbGVzID0gc3ViZnJhbWVf bGVuZ3RoOwotCi0gICAgICAgIHMtPmZyYW1lX3R5cGUgPSBJTk5FUl9GUkFNRTsKLSAgICAgICAg YnJlYWs7Ci0KLSAgICBjYXNlIElOTkVSX0ZSQU1FOgotICAgICAgICBnYWluICAgICAgPSBnYXVz c2lhbl9maWx0ZXIocywgcy0+aW5kZXggKyAxMCA8IDMwID8gcy0+aW5kZXggKyAxMCA6IHMtPmlu ZGV4ICsgMTAgLSAzMCk7Ci0gICAgICAgIGdhaW5fbmV4dCA9IGdhdXNzaWFuX2ZpbHRlcihzLCBz LT5pbmRleCArIDExIDwgMzAgPyBzLT5pbmRleCArIDExIDogcy0+aW5kZXggKyAxMSAtIDMwKTsK LQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgaW4tPm5iX3NhbXBsZXM7IG4rKykgewotICAgICAg ICAgICAgZm9yIChjID0gMDsgYyA8IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjKysp IHsKLSAgICAgICAgICAgICAgICBidWZbcy0+cHJldl9idWZfaW5kZXggKyBjXSA9IHNyY1tjXTsK LSAgICAgICAgICAgICAgICBsaW1pdGVyX2J1ZltzLT5saW1pdGVyX2J1Zl9pbmRleCArIGNdID0g YnVmW3MtPmJ1Zl9pbmRleCArIGNdICogKGdhaW4gKyAoKChkb3VibGUpIG4gLyBpbi0+bmJfc2Ft cGxlcykgKiAoZ2Fpbl9uZXh0IC0gZ2FpbikpKSAqIHMtPm9mZnNldDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHNyYyArPSBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLQotICAg ICAgICAgICAgcy0+bGltaXRlcl9idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hh bm5lbHM7Ci0gICAgICAgICAgICBpZiAocy0+bGltaXRlcl9idWZfaW5kZXggPj0gcy0+bGltaXRl cl9idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCAtPSBzLT5s aW1pdGVyX2J1Zl9zaXplOwotCi0gICAgICAgICAgICBzLT5wcmV2X2J1Zl9pbmRleCArPSBpbmxp bmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5wcmV2X2J1Zl9p bmRleCA+PSBzLT5idWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBzLT5wcmV2X2J1Zl9pbmRleCAt PSBzLT5idWZfc2l6ZTsKLQotICAgICAgICAgICAgcy0+YnVmX2luZGV4ICs9IGlubGluay0+Y2hf bGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAgaWYgKHMtPmJ1Zl9pbmRleCA+PSBzLT5i dWZfc2l6ZSkKLSAgICAgICAgICAgICAgICBzLT5idWZfaW5kZXggLT0gcy0+YnVmX3NpemU7Ci0g ICAgICAgIH0KLQotICAgICAgICBzdWJmcmFtZV9sZW5ndGggPSAoZnJhbWVfc2l6ZShpbmxpbmst PnNhbXBsZV9yYXRlLCAxMDApIC0gaW4tPm5iX3NhbXBsZXMpICogaW5saW5rLT5jaF9sYXlvdXQu bmJfY2hhbm5lbHM7Ci0gICAgICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4ID0gcy0+bGltaXRlcl9i dWZfaW5kZXggKyBzdWJmcmFtZV9sZW5ndGggPCBzLT5saW1pdGVyX2J1Zl9zaXplID8gcy0+bGlt aXRlcl9idWZfaW5kZXggKyBzdWJmcmFtZV9sZW5ndGggOiBzLT5saW1pdGVyX2J1Zl9pbmRleCAr IHN1YmZyYW1lX2xlbmd0aCAtIHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0KLSAgICAgICAgdHJ1ZV9w ZWFrX2xpbWl0ZXIocywgZHN0LCBpbi0+bmJfc2FtcGxlcywgaW5saW5rLT5jaF9sYXlvdXQubmJf Y2hhbm5lbHMpOwotICAgICAgICBmZl9lYnVyMTI4X2FkZF9mcmFtZXNfZG91YmxlKHMtPnIxMjhf b3V0LCBkc3QsIGluLT5uYl9zYW1wbGVzKTsKLQotICAgICAgICBmZl9lYnVyMTI4X2xvdWRuZXNz X3JhbmdlKHMtPnIxMjhfaW4sICZscmEpOwotICAgICAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX2ds b2JhbChzLT5yMTI4X2luLCAmZ2xvYmFsKTsKLSAgICAgICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19z aG9ydHRlcm0ocy0+cjEyOF9pbiwgJnNob3J0dGVybSk7Ci0gICAgICAgIGZmX2VidXIxMjhfcmVs YXRpdmVfdGhyZXNob2xkKHMtPnIxMjhfaW4sICZyZWxhdGl2ZV90aHJlc2hvbGQpOwotCi0gICAg ICAgIGlmIChzLT5hYm92ZV90aHJlc2hvbGQgPT0gMCkgewotICAgICAgICAgICAgZG91YmxlIHNo b3J0dGVybV9vdXQ7Ci0KLSAgICAgICAgICAgIGlmIChzaG9ydHRlcm0gPiBzLT5tZWFzdXJlZF90 aHJlc2gpCi0gICAgICAgICAgICAgICAgcy0+cHJldl9kZWx0YSAqPSAxLjAwNTg7Ci0KLSAgICAg ICAgICAgIGZmX2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKHMtPnIxMjhfb3V0LCAmc2hvcnR0 ZXJtX291dCk7Ci0gICAgICAgICAgICBpZiAoc2hvcnR0ZXJtX291dCA+PSBzLT50YXJnZXRfaSkK LSAgICAgICAgICAgICAgICBzLT5hYm92ZV90aHJlc2hvbGQgPSAxOwotICAgICAgICB9Ci0KLSAg ICAgICAgaWYgKHNob3J0dGVybSA8IHJlbGF0aXZlX3RocmVzaG9sZCB8fCBzaG9ydHRlcm0gPD0g LTcwLiB8fCBzLT5hYm92ZV90aHJlc2hvbGQgPT0gMCkgewotICAgICAgICAgICAgcy0+ZGVsdGFb cy0+aW5kZXhdID0gcy0+cHJldl9kZWx0YTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg IGVudl9nbG9iYWwgPSBmYWJzKHNob3J0dGVybSAtIGdsb2JhbCkgPCAocy0+dGFyZ2V0X2xyYSAv IDIuKSA/IHNob3J0dGVybSAtIGdsb2JhbCA6IChzLT50YXJnZXRfbHJhIC8gMi4pICogKChzaG9y dHRlcm0gLSBnbG9iYWwpIDwgMCA/IC0xIDogMSk7Ci0gICAgICAgICAgICBlbnZfc2hvcnR0ZXJt ID0gcy0+dGFyZ2V0X2kgLSBzaG9ydHRlcm07Ci0gICAgICAgICAgICBzLT5kZWx0YVtzLT5pbmRl eF0gPSBwb3coMTAuLCAoZW52X2dsb2JhbCArIGVudl9zaG9ydHRlcm0pIC8gMjAuKTsKLSAgICAg ICAgfQotCi0gICAgICAgIHMtPnByZXZfZGVsdGEgPSBzLT5kZWx0YVtzLT5pbmRleF07Ci0gICAg ICAgIHMtPmluZGV4Kys7Ci0gICAgICAgIGlmIChzLT5pbmRleCA+PSAzMCkKLSAgICAgICAgICAg IHMtPmluZGV4IC09IDMwOwotICAgICAgICBzLT5wcmV2X25iX3NhbXBsZXMgPSBpbi0+bmJfc2Ft cGxlczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZJTkFMX0ZSQU1FOgotICAgICAgICBn YWluID0gZ2F1c3NpYW5fZmlsdGVyKHMsIHMtPmluZGV4ICsgMTAgPCAzMCA/IHMtPmluZGV4ICsg MTAgOiBzLT5pbmRleCArIDEwIC0gMzApOwotICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCA9 IDA7Ci0gICAgICAgIHNyY19pbmRleCA9IDA7Ci0KLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHMt PmxpbWl0ZXJfYnVmX3NpemUgLyBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsgbisrKSB7 Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5l bHM7IGMrKykgewotICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfYnVmW3MtPmxpbWl0ZXJfYnVm X2luZGV4ICsgY10gPSBzcmNbc3JjX2luZGV4ICsgY10gKiBnYWluICogcy0+b2Zmc2V0OwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgc3JjX2luZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5i X2NoYW5uZWxzOwotCi0gICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCArPSBpbmxpbmst PmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGlmIChzLT5saW1pdGVyX2J1Zl9p bmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJf YnVmX2luZGV4IC09IHMtPmxpbWl0ZXJfYnVmX3NpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBz dWJmcmFtZV9sZW5ndGggPSBmcmFtZV9zaXplKGlubGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0g ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbi0+bmJfc2FtcGxlcyAvIHN1YmZyYW1lX2xlbmd0aDsg aSsrKSB7Ci0gICAgICAgICAgICB0cnVlX3BlYWtfbGltaXRlcihzLCBkc3QsIHN1YmZyYW1lX2xl bmd0aCwgaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpOwotCi0gICAgICAgICAgICBmb3Ig KG4gPSAwOyBuIDwgc3ViZnJhbWVfbGVuZ3RoOyBuKyspIHsKLSAgICAgICAgICAgICAgICBmb3Ig KGMgPSAwOyBjIDwgaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAg ICAgICAgICAgICAgICBpZiAoc3JjX2luZGV4IDwgKGluLT5uYl9zYW1wbGVzICogaW5saW5rLT5j aF9sYXlvdXQubmJfY2hhbm5lbHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdGVy X2J1ZltzLT5saW1pdGVyX2J1Zl9pbmRleCArIGNdID0gc3JjW3NyY19pbmRleCArIGNdICogZ2Fp biAqIHMtPm9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGxpbWl0ZXJfYnVmW3MtPmxpbWl0ZXJfYnVmX2luZGV4ICsgY10gPSAwLjsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICAgIGlmIChzcmNfaW5kZXggPCAoaW4tPm5iX3NhbXBsZXMgKiBpbmxpbmstPmNoX2xheW91dC5u Yl9jaGFubmVscykpCi0gICAgICAgICAgICAgICAgICAgIHNyY19pbmRleCArPSBpbmxpbmstPmNo X2xheW91dC5uYl9jaGFubmVsczsKLQotICAgICAgICAgICAgICAgIHMtPmxpbWl0ZXJfYnVmX2lu ZGV4ICs9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgICAgICAgICAgICAgIGlm IChzLT5saW1pdGVyX2J1Zl9pbmRleCA+PSBzLT5saW1pdGVyX2J1Zl9zaXplKQotICAgICAgICAg ICAgICAgICAgICBzLT5saW1pdGVyX2J1Zl9pbmRleCAtPSBzLT5saW1pdGVyX2J1Zl9zaXplOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkc3QgKz0gKHN1YmZyYW1lX2xlbmd0aCAqIGlu bGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRzdCA9 IChkb3VibGUgKilvdXQtPmRhdGFbMF07Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2ZyYW1lc19k b3VibGUocy0+cjEyOF9vdXQsIGRzdCwgaW4tPm5iX3NhbXBsZXMpOwotICAgICAgICBicmVhazsK LQotICAgIGNhc2UgTElORUFSX01PREU6Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCBpbi0+bmJf c2FtcGxlczsgbisrKSB7Ci0gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgaW5saW5rLT5jaF9s YXlvdXQubmJfY2hhbm5lbHM7IGMrKykgewotICAgICAgICAgICAgICAgIGRzdFtjXSA9IHNyY1tj XSAqIHMtPm9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNyYyArPSBpbmxpbmst PmNoX2xheW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgICAgIGRzdCArPSBpbmxpbmstPmNoX2xh eW91dC5uYl9jaGFubmVsczsKLSAgICAgICAgfQotCi0gICAgICAgIGRzdCA9IChkb3VibGUgKilv dXQtPmRhdGFbMF07Ci0gICAgICAgIGZmX2VidXIxMjhfYWRkX2ZyYW1lc19kb3VibGUocy0+cjEy OF9vdXQsIGRzdCwgaW4tPm5iX3NhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICBpZiAoaW4gIT0gb3V0KQotICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0gICAgcmV0dXJu IGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXQpOwotfQotCi1zdGF0aWMgaW50IGZsdXNoX2Zy YW1lKEFWRmlsdGVyTGluayAqb3V0bGluaykKLXsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9 IG91dGxpbmstPnNyYzsKLSAgICBBVkZpbHRlckxpbmsgKmlubGluayA9IGN0eC0+aW5wdXRzWzBd OwotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBpbnQgcmV0ID0gMDsK LQotICAgIGlmIChzLT5mcmFtZV90eXBlID09IElOTkVSX0ZSQU1FKSB7Ci0gICAgICAgIGRvdWJs ZSAqc3JjOwotICAgICAgICBkb3VibGUgKmJ1ZjsKLSAgICAgICAgaW50IG5iX3NhbXBsZXMsIG4s IGMsIG9mZnNldDsKLSAgICAgICAgQVZGcmFtZSAqZnJhbWU7Ci0KLSAgICAgICAgbmJfc2FtcGxl cyAgPSAocy0+YnVmX3NpemUgLyBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscykgLSBzLT5w cmV2X25iX3NhbXBsZXM7Ci0gICAgICAgIG5iX3NhbXBsZXMgLT0gKGZyYW1lX3NpemUoaW5saW5r LT5zYW1wbGVfcmF0ZSwgMTAwKSAtIHMtPnByZXZfbmJfc2FtcGxlcyk7Ci0KLSAgICAgICAgZnJh bWUgPSBmZl9nZXRfYXVkaW9fYnVmZmVyKG91dGxpbmssIG5iX3NhbXBsZXMpOwotICAgICAgICBp ZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAg ZnJhbWUtPm5iX3NhbXBsZXMgPSBuYl9zYW1wbGVzOwotCi0gICAgICAgIGJ1ZiA9IHMtPmJ1ZjsK LSAgICAgICAgc3JjID0gKGRvdWJsZSAqKWZyYW1lLT5kYXRhWzBdOwotCi0gICAgICAgIG9mZnNl dCAgPSAoKHMtPmxpbWl0ZXJfYnVmX3NpemUgLyBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVs cykgLSBzLT5wcmV2X25iX3NhbXBsZXMpICogaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7 Ci0gICAgICAgIG9mZnNldCAtPSAoZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDAp IC0gcy0+cHJldl9uYl9zYW1wbGVzKSAqIGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwot ICAgICAgICBzLT5idWZfaW5kZXggPSBzLT5idWZfaW5kZXggLSBvZmZzZXQgPCAwID8gcy0+YnVm X2luZGV4IC0gb2Zmc2V0ICsgcy0+YnVmX3NpemUgOiBzLT5idWZfaW5kZXggLSBvZmZzZXQ7Ci0K LSAgICAgICAgZm9yIChuID0gMDsgbiA8IG5iX3NhbXBsZXM7IG4rKykgewotICAgICAgICAgICAg Zm9yIChjID0gMDsgYyA8IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOyBjKyspIHsKLSAg ICAgICAgICAgICAgICBzcmNbY10gPSBidWZbcy0+YnVmX2luZGV4ICsgY107Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBzcmMgKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7Ci0g ICAgICAgICAgICBzLT5idWZfaW5kZXggKz0gaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7 Ci0gICAgICAgICAgICBpZiAocy0+YnVmX2luZGV4ID49IHMtPmJ1Zl9zaXplKQotICAgICAgICAg ICAgICAgIHMtPmJ1Zl9pbmRleCAtPSBzLT5idWZfc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAg IHMtPmZyYW1lX3R5cGUgPSBGSU5BTF9GUkFNRTsKLSAgICAgICAgcmV0ID0gZmlsdGVyX2ZyYW1l KGlubGluaywgZnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50 IGFjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQotewotICAgIEFWRmlsdGVyTGluayAqaW5s aW5rID0gY3R4LT5pbnB1dHNbMF07Ci0gICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5v dXRwdXRzWzBdOwotICAgIExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBBVkZy YW1lICppbiA9IE5VTEw7Ci0gICAgaW50IHJldCA9IDAsIHN0YXR1czsKLSAgICBpbnQ2NF90IHB0 czsKLQotICAgIEZGX0ZJTFRFUl9GT1JXQVJEX1NUQVRVU19CQUNLKG91dGxpbmssIGlubGluayk7 Ci0KLSAgICBpZiAocy0+ZnJhbWVfdHlwZSAhPSBMSU5FQVJfTU9ERSkgewotICAgICAgICBpbnQg bmJfc2FtcGxlczsKLQotICAgICAgICBpZiAocy0+ZnJhbWVfdHlwZSA9PSBGSVJTVF9GUkFNRSkg ewotICAgICAgICAgICAgbmJfc2FtcGxlcyA9IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0 ZSwgMzAwMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuYl9zYW1wbGVzID0gZnJh bWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAxMDApOwotICAgICAgICB9Ci0KLSAgICAgICAg cmV0ID0gZmZfaW5saW5rX2NvbnN1bWVfc2FtcGxlcyhpbmxpbmssIG5iX3NhbXBsZXMsIG5iX3Nh bXBsZXMsICZpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gZmZfaW5saW5rX2NvbnN1 bWVfZnJhbWUoaW5saW5rLCAmaW4pOwotICAgIH0KLQotICAgIGlmIChyZXQgPCAwKQotICAgICAg ICByZXR1cm4gcmV0OwotICAgIGlmIChyZXQgPiAwKSB7Ci0gICAgICAgIGlmIChzLT5mcmFtZV90 eXBlID09IEZJUlNUX0ZSQU1FKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgbmJfc2FtcGxlcyA9 IGZyYW1lX3NpemUoaW5saW5rLT5zYW1wbGVfcmF0ZSwgMTAwKTsKLQotICAgICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzLT5wdHMpOyBpKyspCi0gICAgICAgICAg ICAgICAgcy0+cHRzW2ldID0gaW4tPnB0cyArIGkgKiBuYl9zYW1wbGVzOwotICAgICAgICB9IGVs c2UgaWYgKHMtPmZyYW1lX3R5cGUgPT0gTElORUFSX01PREUpIHsKLSAgICAgICAgICAgIHMtPnB0 c1swXSA9IGluLT5wdHM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzLT5wdHNbRkZf QVJSQVlfRUxFTVMocy0+cHRzKSAtIDFdID0gaW4tPnB0czsKLSAgICAgICAgfQotICAgICAgICBy ZXQgPSBmaWx0ZXJfZnJhbWUoaW5saW5rLCBpbik7Ci0gICAgfQotICAgIGlmIChyZXQgPCAwKQot ICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgaWYgKGZmX2lubGlua19hY2tub3dsZWRnZV9zdGF0 dXMoaW5saW5rLCAmc3RhdHVzLCAmcHRzKSkgewotICAgICAgICBmZl9vdXRsaW5rX3NldF9zdGF0 dXMob3V0bGluaywgc3RhdHVzLCBwdHMpOwotICAgICAgICByZXR1cm4gZmx1c2hfZnJhbWUob3V0 bGluayk7Ci0gICAgfQotCi0gICAgRkZfRklMVEVSX0ZPUldBUkRfV0FOVEVEKG91dGxpbmssIGlu bGluayk7Ci0KLSAgICByZXR1cm4gRkZFUlJPUl9OT1RfUkVBRFk7Ci19Ci0KLXN0YXRpYyBpbnQg cXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmN0eCkKLXsKLSAgICBMb3VkTm9ybUNvbnRl eHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBpbnB1dF9zcmF0ZVtdID0g ezE5MjAwMCwgLTF9OwotICAgIHN0YXRpYyBjb25zdCBlbnVtIEFWU2FtcGxlRm9ybWF0IHNhbXBs ZV9mbXRzW10gPSB7Ci0gICAgICAgICAgICBBVl9TQU1QTEVfRk1UX0RCTCwKLSAgICAgICAgICAg IEFWX1NBTVBMRV9GTVRfTk9ORQotICAgIH07Ci0gICAgaW50IHJldCA9IGZmX3NldF9jb21tb25f YWxsX2NoYW5uZWxfY291bnRzKGN0eCk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVy biByZXQ7Ci0KLSAgICByZXQgPSBmZl9zZXRfY29tbW9uX2Zvcm1hdHNfZnJvbV9saXN0KGN0eCwg c2FtcGxlX2ZtdHMpOwotICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcmV0OwotCi0g ICAgaWYgKHMtPmZyYW1lX3R5cGUgPT0gTElORUFSX01PREUpIHsKLSAgICAgICAgcmV0dXJuIGZm X3NldF9jb21tb25fYWxsX3NhbXBsZXJhdGVzKGN0eCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg cmV0dXJuIGZmX3NldF9jb21tb25fc2FtcGxlcmF0ZXNfZnJvbV9saXN0KGN0eCwgaW5wdXRfc3Jh dGUpOwotICAgIH0KLX0KLQotc3RhdGljIGludCBjb25maWdfaW5wdXQoQVZGaWx0ZXJMaW5rICpp bmxpbmspCi17Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKLSAgICBM b3VkTm9ybUNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0KLSAgICBzLT5yMTI4X2luID0gZmZfZWJ1 cjEyOF9pbml0KGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzLCBpbmxpbmstPnNhbXBsZV9y YXRlLCAwLCBGRl9FQlVSMTI4X01PREVfSSB8IEZGX0VCVVIxMjhfTU9ERV9TIHwgRkZfRUJVUjEy OF9NT0RFX0xSQSB8IEZGX0VCVVIxMjhfTU9ERV9TQU1QTEVfUEVBSyk7Ci0gICAgaWYgKCFzLT5y MTI4X2luKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgcy0+cjEyOF9v dXQgPSBmZl9lYnVyMTI4X2luaXQoaW5saW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMsIGlubGlu ay0+c2FtcGxlX3JhdGUsIDAsIEZGX0VCVVIxMjhfTU9ERV9JIHwgRkZfRUJVUjEyOF9NT0RFX1Mg fCBGRl9FQlVSMTI4X01PREVfTFJBIHwgRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9QRUFLKTsKLSAg ICBpZiAoIXMtPnIxMjhfb3V0KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0g ICAgaWYgKGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzID09IDEgJiYgcy0+ZHVhbF9tb25v KSB7Ci0gICAgICAgIGZmX2VidXIxMjhfc2V0X2NoYW5uZWwocy0+cjEyOF9pbiwgIDAsIEZGX0VC VVIxMjhfRFVBTF9NT05PKTsKLSAgICAgICAgZmZfZWJ1cjEyOF9zZXRfY2hhbm5lbChzLT5yMTI4 X291dCwgMCwgRkZfRUJVUjEyOF9EVUFMX01PTk8pOwotICAgIH0KLQotICAgIHMtPmJ1Zl9zaXpl ID0gZnJhbWVfc2l6ZShpbmxpbmstPnNhbXBsZV9yYXRlLCAzMDAwKSAqIGlubGluay0+Y2hfbGF5 b3V0Lm5iX2NoYW5uZWxzOwotICAgIHMtPmJ1ZiA9IGF2X21hbGxvY19hcnJheShzLT5idWZfc2l6 ZSwgc2l6ZW9mKCpzLT5idWYpKTsKLSAgICBpZiAoIXMtPmJ1ZikKLSAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKLQotICAgIHMtPmxpbWl0ZXJfYnVmX3NpemUgPSBmcmFtZV9zaXplKGlu bGluay0+c2FtcGxlX3JhdGUsIDIxMCkgKiBpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsK LSAgICBzLT5saW1pdGVyX2J1ZiA9IGF2X21hbGxvY19hcnJheShzLT5idWZfc2l6ZSwgc2l6ZW9m KCpzLT5saW1pdGVyX2J1ZikpOwotICAgIGlmICghcy0+bGltaXRlcl9idWYpCi0gICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBzLT5wcmV2X3NtcCA9IGF2X21hbGxvY19hcnJh eShpbmxpbmstPmNoX2xheW91dC5uYl9jaGFubmVscywgc2l6ZW9mKCpzLT5wcmV2X3NtcCkpOwot ICAgIGlmICghcy0+cHJldl9zbXApCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0K LSAgICBpbml0X2dhdXNzaWFuX2ZpbHRlcihzKTsKLQotICAgIHMtPmJ1Zl9pbmRleCA9Ci0gICAg cy0+cHJldl9idWZfaW5kZXggPQotICAgIHMtPmxpbWl0ZXJfYnVmX2luZGV4ID0gMDsKLSAgICBz LT5jaGFubmVscyA9IGlubGluay0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwotICAgIHMtPmluZGV4 ID0gMTsKLSAgICBzLT5saW1pdGVyX3N0YXRlID0gT1VUOwotICAgIHMtPm9mZnNldCA9IHBvdygx MC4sIHMtPm9mZnNldCAvIDIwLik7Ci0gICAgcy0+dGFyZ2V0X3RwID0gcG93KDEwLiwgcy0+dGFy Z2V0X3RwIC8gMjAuKTsKLSAgICBzLT5hdHRhY2tfbGVuZ3RoID0gZnJhbWVfc2l6ZShpbmxpbmst PnNhbXBsZV9yYXRlLCAxMCk7Ci0gICAgcy0+cmVsZWFzZV9sZW5ndGggPSBmcmFtZV9zaXplKGlu bGluay0+c2FtcGxlX3JhdGUsIDEwMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGF2 X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17Ci0gICAgTG91ZE5vcm1Db250 ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIHMtPmZyYW1lX3R5cGUgPSBGSVJTVF9GUkFNRTsKLQot ICAgIGlmIChzLT5saW5lYXIpIHsKLSAgICAgICAgZG91YmxlIG9mZnNldCwgb2Zmc2V0X3RwOwot ICAgICAgICBvZmZzZXQgICAgPSBzLT50YXJnZXRfaSAtIHMtPm1lYXN1cmVkX2k7Ci0gICAgICAg IG9mZnNldF90cCA9IHMtPm1lYXN1cmVkX3RwICsgb2Zmc2V0OwotCi0gICAgICAgIGlmIChzLT5t ZWFzdXJlZF90cCAhPSA5OSAmJiBzLT5tZWFzdXJlZF90aHJlc2ggIT0gLTcwICYmIHMtPm1lYXN1 cmVkX2xyYSAhPSAwICYmIHMtPm1lYXN1cmVkX2kgIT0gMCkgewotICAgICAgICAgICAgaWYgKChv ZmZzZXRfdHAgPD0gcy0+dGFyZ2V0X3RwKSAmJiAocy0+bWVhc3VyZWRfbHJhIDw9IHMtPnRhcmdl dF9scmEpKSB7Ci0gICAgICAgICAgICAgICAgcy0+ZnJhbWVfdHlwZSA9IExJTkVBUl9NT0RFOwot ICAgICAgICAgICAgICAgIHMtPm9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYXZfY29sZCB2b2lkIHVu aW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKLXsKLSAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBj dHgtPnByaXY7Ci0gICAgZG91YmxlIGlfaW4sIGlfb3V0LCBscmFfaW4sIGxyYV9vdXQsIHRocmVz aF9pbiwgdGhyZXNoX291dCwgdHBfaW4sIHRwX291dDsKLSAgICBpbnQgYzsKLQotICAgIGlmICgh cy0+cjEyOF9pbiB8fCAhcy0+cjEyOF9vdXQpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgZmZf ZWJ1cjEyOF9sb3VkbmVzc19yYW5nZShzLT5yMTI4X2luLCAmbHJhX2luKTsKLSAgICBmZl9lYnVy MTI4X2xvdWRuZXNzX2dsb2JhbChzLT5yMTI4X2luLCAmaV9pbik7Ci0gICAgZmZfZWJ1cjEyOF9y ZWxhdGl2ZV90aHJlc2hvbGQocy0+cjEyOF9pbiwgJnRocmVzaF9pbik7Ci0gICAgZm9yIChjID0g MDsgYyA8IHMtPmNoYW5uZWxzOyBjKyspIHsKLSAgICAgICAgZG91YmxlIHRtcDsKLSAgICAgICAg ZmZfZWJ1cjEyOF9zYW1wbGVfcGVhayhzLT5yMTI4X2luLCBjLCAmdG1wKTsKLSAgICAgICAgaWYg KChjID09IDApIHx8ICh0bXAgPiB0cF9pbikpCi0gICAgICAgICAgICB0cF9pbiA9IHRtcDsKLSAg ICB9Ci0KLSAgICBmZl9lYnVyMTI4X2xvdWRuZXNzX3JhbmdlKHMtPnIxMjhfb3V0LCAmbHJhX291 dCk7Ci0gICAgZmZfZWJ1cjEyOF9sb3VkbmVzc19nbG9iYWwocy0+cjEyOF9vdXQsICZpX291dCk7 Ci0gICAgZmZfZWJ1cjEyOF9yZWxhdGl2ZV90aHJlc2hvbGQocy0+cjEyOF9vdXQsICZ0aHJlc2hf b3V0KTsKLSAgICBmb3IgKGMgPSAwOyBjIDwgcy0+Y2hhbm5lbHM7IGMrKykgewotICAgICAgICBk b3VibGUgdG1wOwotICAgICAgICBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKHMtPnIxMjhfb3V0LCBj LCAmdG1wKTsKLSAgICAgICAgaWYgKChjID09IDApIHx8ICh0bXAgPiB0cF9vdXQpKQotICAgICAg ICAgICAgdHBfb3V0ID0gdG1wOwotICAgIH0KLQotICAgIHN3aXRjaChzLT5wcmludF9mb3JtYXQp IHsKLSAgICBjYXNlIE5PTkU6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKU09OOgotICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywKLSAgICAgICAgICAgICJcbntcbiIKLSAgICAg ICAgICAgICJcdFwiaW5wdXRfaVwiIDogXCIlLjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcImlu cHV0X3RwXCIgOiBcIiUuMmZcIixcbiIKLSAgICAgICAgICAgICJcdFwiaW5wdXRfbHJhXCIgOiBc IiUuMmZcIixcbiIKLSAgICAgICAgICAgICJcdFwiaW5wdXRfdGhyZXNoXCIgOiBcIiUuMmZcIixc biIKLSAgICAgICAgICAgICJcdFwib3V0cHV0X2lcIiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAg ICAgIlx0XCJvdXRwdXRfdHBcIiA6IFwiJSsuMmZcIixcbiIKLSAgICAgICAgICAgICJcdFwib3V0 cHV0X2xyYVwiIDogXCIlLjJmXCIsXG4iCi0gICAgICAgICAgICAiXHRcIm91dHB1dF90aHJlc2hc IiA6IFwiJS4yZlwiLFxuIgotICAgICAgICAgICAgIlx0XCJub3JtYWxpemF0aW9uX3R5cGVcIiA6 IFwiJXNcIixcbiIKLSAgICAgICAgICAgICJcdFwidGFyZ2V0X29mZnNldFwiIDogXCIlLjJmXCJc biIKLSAgICAgICAgICAgICJ9XG4iLAotICAgICAgICAgICAgaV9pbiwKLSAgICAgICAgICAgIDIw LiAqIGxvZzEwKHRwX2luKSwKLSAgICAgICAgICAgIGxyYV9pbiwKLSAgICAgICAgICAgIHRocmVz aF9pbiwKLSAgICAgICAgICAgIGlfb3V0LAotICAgICAgICAgICAgMjAuICogbG9nMTAodHBfb3V0 KSwKLSAgICAgICAgICAgIGxyYV9vdXQsCi0gICAgICAgICAgICB0aHJlc2hfb3V0LAotICAgICAg ICAgICAgcy0+ZnJhbWVfdHlwZSA9PSBMSU5FQVJfTU9ERSA/ICJsaW5lYXIiIDogImR5bmFtaWMi LAotICAgICAgICAgICAgcy0+dGFyZ2V0X2kgLSBpX291dAotICAgICAgICApOwotICAgICAgICBi cmVhazsKLQotICAgIGNhc2UgU1VNTUFSWToKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lO Rk8sCi0gICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAiSW5wdXQgSW50ZWdyYXRlZDogICAl KzYuMWYgTFVGU1xuIgotICAgICAgICAgICAgIklucHV0IFRydWUgUGVhazogICAgJSs2LjFmIGRC VFBcbiIKLSAgICAgICAgICAgICJJbnB1dCBMUkE6ICAgICAgICAgICU2LjFmIExVXG4iCi0gICAg ICAgICAgICAiSW5wdXQgVGhyZXNob2xkOiAgICAlKzYuMWYgTFVGU1xuIgotICAgICAgICAgICAg IlxuIgotICAgICAgICAgICAgIk91dHB1dCBJbnRlZ3JhdGVkOiAgJSs2LjFmIExVRlNcbiIKLSAg ICAgICAgICAgICJPdXRwdXQgVHJ1ZSBQZWFrOiAgICUrNi4xZiBkQlRQXG4iCi0gICAgICAgICAg ICAiT3V0cHV0IExSQTogICAgICAgICAlNi4xZiBMVVxuIgotICAgICAgICAgICAgIk91dHB1dCBU aHJlc2hvbGQ6ICAgJSs2LjFmIExVRlNcbiIKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg ICJOb3JtYWxpemF0aW9uIFR5cGU6ICAgJXNcbiIKLSAgICAgICAgICAgICJUYXJnZXQgT2Zmc2V0 OiAgICAgICUrNi4xZiBMVVxuIiwKLSAgICAgICAgICAgIGlfaW4sCi0gICAgICAgICAgICAyMC4g KiBsb2cxMCh0cF9pbiksCi0gICAgICAgICAgICBscmFfaW4sCi0gICAgICAgICAgICB0aHJlc2hf aW4sCi0gICAgICAgICAgICBpX291dCwKLSAgICAgICAgICAgIDIwLiAqIGxvZzEwKHRwX291dCks Ci0gICAgICAgICAgICBscmFfb3V0LAotICAgICAgICAgICAgdGhyZXNoX291dCwKLSAgICAgICAg ICAgIHMtPmZyYW1lX3R5cGUgPT0gTElORUFSX01PREUgPyAiTGluZWFyIiA6ICJEeW5hbWljIiwK LSAgICAgICAgICAgIHMtPnRhcmdldF9pIC0gaV9vdXQKLSAgICAgICAgKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotCi1lbmQ6Ci0gICAgaWYgKHMtPnIxMjhfaW4pCi0gICAgICAgIGZmX2VidXIx MjhfZGVzdHJveSgmcy0+cjEyOF9pbik7Ci0gICAgaWYgKHMtPnIxMjhfb3V0KQotICAgICAgICBm Zl9lYnVyMTI4X2Rlc3Ryb3koJnMtPnIxMjhfb3V0KTsKLSAgICBhdl9mcmVlcCgmcy0+bGltaXRl cl9idWYpOwotICAgIGF2X2ZyZWVwKCZzLT5wcmV2X3NtcCk7Ci0gICAgYXZfZnJlZXAoJnMtPmJ1 Zik7Ci19Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBhdmZpbHRlcl9hZl9sb3Vkbm9ybV9p bnB1dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0g ICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCi0gICAgICAgIC5jb25m aWdfcHJvcHMgPSBjb25maWdfaW5wdXQsCi0gICAgfSwKLX07Ci0KLWNvbnN0IEFWRmlsdGVyIGZm X2FmX2xvdWRub3JtID0gewotICAgIC5uYW1lICAgICAgICAgID0gImxvdWRub3JtIiwKLSAgICAu ZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJFQlUgUjEyOCBsb3VkbmVzcyBu b3JtYWxpemF0aW9uIiksCi0gICAgLnByaXZfc2l6ZSAgICAgPSBzaXplb2YoTG91ZE5vcm1Db250 ZXh0KSwKLSAgICAucHJpdl9jbGFzcyAgICA9ICZsb3Vkbm9ybV9jbGFzcywKLSAgICAuaW5pdCAg ICAgICAgICA9IGluaXQsCi0gICAgLmFjdGl2YXRlICAgICAgPSBhY3RpdmF0ZSwKLSAgICAudW5p bml0ICAgICAgICA9IHVuaW5pdCwKLSAgICBGSUxURVJfSU5QVVRTKGF2ZmlsdGVyX2FmX2xvdWRu b3JtX2lucHV0cyksCi0gICAgRklMVEVSX09VVFBVVFMoZmZfYXVkaW9fZGVmYXVsdF9maWx0ZXJw YWQpLAotICAgIEZJTFRFUl9RVUVSWV9GVU5DKHF1ZXJ5X2Zvcm1hdHMpLAotfTsKZGlmZiAtLWdp dCBhL2xpYmF2ZmlsdGVyL2VidXIxMjguYyBiL2xpYmF2ZmlsdGVyL2VidXIxMjguYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyMDk5ZTIwNi4uMDAwMDAwMDAwMAotLS0gYS9saWJh dmZpbHRlci9lYnVyMTI4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MjUgKzAsMCBAQAotLyoKLSAq IENvcHlyaWdodCAoYykgMjAxMSBKYW4gS29rZW3DvGxsZXIKLSAqCi0gKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCi0gKgotICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGxpYmVidXIxMjggd2hp Y2ggaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwczovL2dpdGh1Yi5jb20vamlpeHlqL2xpYmVidXIx MjgvCi0gKgotICogTGliZWJ1cjEyOCBoYXMgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6Ci0gKgot ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICog ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK LSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRX QVJFLgotKi8KLQotI2luY2x1ZGUgImVidXIxMjguaCIKLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0j aW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPiAgICAgICAgICAgICAgIC8qIFlv dSBtYXkgaGF2ZSB0byBkZWZpbmUgX1VTRV9NQVRIX0RFRklORVMgaWYgeW91IHVzZSBNU1ZDICov Ci0KLSNpbmNsdWRlICJsaWJhdnV0aWwvZXJyb3IuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbWFj cm9zLmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9t ZW1faW50ZXJuYWwuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdGhyZWFkLmgiCi0KLSNkZWZpbmUg Q0hFQ0tfRVJST1IoY29uZGl0aW9uLCBlcnJvcmNvZGUsIGdvdG9fcG9pbnQpICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgaWYgKChjb25kaXRpb24pKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlcnJjb2Rl ID0gKGVycm9yY29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgZ290byBnb3RvX3BvaW50OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIEFMTU9T VF9aRVJPIDAuMDAwMDAxCi0KLSNkZWZpbmUgUkVMQVRJVkVfR0FURSAgICAgICAgICgtMTAuMCkK LSNkZWZpbmUgUkVMQVRJVkVfR0FURV9GQUNUT1IgIHBvdygxMC4wLCBSRUxBVElWRV9HQVRFIC8g MTAuMCkKLSNkZWZpbmUgTUlOVVNfMjBEQiAgICAgICAgICAgIHBvdygxMC4wLCAtMjAuMCAvIDEw LjApCi0KLXN0cnVjdCBGRkVCVVIxMjhTdGF0ZUludGVybmFsIHsKLSAgICAvKiogRmlsdGVyZWQg YXVkaW8gZGF0YSAodXNlZCBhcyByaW5nIGJ1ZmZlcikuICovCi0gICAgZG91YmxlICphdWRpb19k YXRhOwotICAgIC8qKiBTaXplIG9mIGF1ZGlvX2RhdGEgYXJyYXkuICovCi0gICAgc2l6ZV90IGF1 ZGlvX2RhdGFfZnJhbWVzOwotICAgIC8qKiBDdXJyZW50IGluZGV4IGZvciBhdWRpb19kYXRhLiAq LwotICAgIHNpemVfdCBhdWRpb19kYXRhX2luZGV4OwotICAgIC8qKiBIb3cgbWFueSBmcmFtZXMg YXJlIG5lZWRlZCBmb3IgYSBnYXRpbmcgYmxvY2suIFdpbGwgY29ycmVzcG9uZCB0byA0MDBtcwot ICAgICAqICBvZiBhdWRpbyBhdCBpbml0aWFsaXphdGlvbiwgYW5kIDEwMG1zIGFmdGVyIHRoZSBm aXJzdCBibG9jayAoNzUlIG92ZXJsYXAKLSAgICAgKiAgYXMgc3BlY2lmaWVkIGluIHRoZSAyMDEx IHJldmlzaW9uIG9mIEJTMTc3MCkuICovCi0gICAgdW5zaWduZWQgbG9uZyBuZWVkZWRfZnJhbWVz OwotICAgIC8qKiBUaGUgY2hhbm5lbCBtYXAuIEhhcyBhcyBtYW55IGVsZW1lbnRzIGFzIHRoZXJl IGFyZSBjaGFubmVscy4gKi8KLSAgICBpbnQgKmNoYW5uZWxfbWFwOwotICAgIC8qKiBIb3cgbWFu eSBzYW1wbGVzIGZpdCBpbiAxMDBtcyAocm91bmRlZCkuICovCi0gICAgdW5zaWduZWQgbG9uZyBz YW1wbGVzX2luXzEwMG1zOwotICAgIC8qKiBCUy4xNzcwIGZpbHRlciBjb2VmZmljaWVudHMgKG5v bWluYXRvcikuICovCi0gICAgZG91YmxlIGJbNV07Ci0gICAgLyoqIEJTLjE3NzAgZmlsdGVyIGNv ZWZmaWNpZW50cyAoZGVub21pbmF0b3IpLiAqLwotICAgIGRvdWJsZSBhWzVdOwotICAgIC8qKiBC Uy4xNzcwIGZpbHRlciBzdGF0ZS4gKi8KLSAgICBkb3VibGUgdls1XVs1XTsKLSAgICAvKiogSGlz dG9ncmFtcywgdXNlZCB0byBjYWxjdWxhdGUgTFJBLiAqLwotICAgIHVuc2lnbmVkIGxvbmcgKmJs b2NrX2VuZXJneV9oaXN0b2dyYW07Ci0gICAgdW5zaWduZWQgbG9uZyAqc2hvcnRfdGVybV9ibG9j a19lbmVyZ3lfaGlzdG9ncmFtOwotICAgIC8qKiBLZWVwcyB0cmFjayBvZiB3aGVuIGEgbmV3IHNo b3J0IHRlcm0gYmxvY2sgaXMgbmVlZGVkLiAqLwotICAgIHNpemVfdCBzaG9ydF90ZXJtX2ZyYW1l X2NvdW50ZXI7Ci0gICAgLyoqIE1heGltdW0gc2FtcGxlIHBlYWssIG9uZSBwZXIgY2hhbm5lbCAq LwotICAgIGRvdWJsZSAqc2FtcGxlX3BlYWs7Ci0gICAgLyoqIFRoZSBtYXhpbXVtIHdpbmRvdyBk dXJhdGlvbiBpbiBtcy4gKi8KLSAgICB1bnNpZ25lZCBsb25nIHdpbmRvdzsKLSAgICAvKiogRGF0 YSBwb2ludGVyIGFycmF5IGZvciBpbnRlcmxlYXZlZCBkYXRhICovCi0gICAgdm9pZCAqKmRhdGFf cHRyczsKLX07Ci0KLXN0YXRpYyBBVk9uY2UgaGlzdG9ncmFtX2luaXQgPSBBVl9PTkNFX0lOSVQ7 Ci1zdGF0aWMgREVDTEFSRV9BTElHTkVEKDMyLCBkb3VibGUsIGhpc3RvZ3JhbV9lbmVyZ2llcylb MTAwMF07Ci1zdGF0aWMgREVDTEFSRV9BTElHTkVEKDMyLCBkb3VibGUsIGhpc3RvZ3JhbV9lbmVy Z3lfYm91bmRhcmllcylbMTAwMV07Ci0KLXN0YXRpYyB2b2lkIGVidXIxMjhfaW5pdF9maWx0ZXIo RkZFQlVSMTI4U3RhdGUgKiBzdCkKLXsKLSAgICBpbnQgaSwgajsKLQotICAgIGRvdWJsZSBmMCA9 IDE2ODEuOTc0NDUwOTU1NTMzOwotICAgIGRvdWJsZSBHID0gMy45OTk4NDM4NTM5NzMzNDc7Ci0g ICAgZG91YmxlIFEgPSAwLjcwNzE3NTIzNjk1NTQxOTY7Ci0KLSAgICBkb3VibGUgSyA9IHRhbihN X1BJICogZjAgLyAoZG91YmxlKSBzdC0+c2FtcGxlcmF0ZSk7Ci0gICAgZG91YmxlIFZoID0gcG93 KDEwLjAsIEcgLyAyMC4wKTsKLSAgICBkb3VibGUgVmIgPSBwb3coVmgsIDAuNDk5NjY2Nzc0MTU0 NTQxNik7Ci0KLSAgICBkb3VibGUgcGJbM10gPSB7IDAuMCwgMC4wLCAwLjAgfTsKLSAgICBkb3Vi bGUgcGFbM10gPSB7IDEuMCwgMC4wLCAwLjAgfTsKLSAgICBkb3VibGUgcmJbM10gPSB7IDEuMCwg LTIuMCwgMS4wIH07Ci0gICAgZG91YmxlIHJhWzNdID0geyAxLjAsIDAuMCwgMC4wIH07Ci0KLSAg ICBkb3VibGUgYTAgPSAxLjAgKyBLIC8gUSArIEsgKiBLOwotICAgIHBiWzBdID0gKFZoICsgVmIg KiBLIC8gUSArIEsgKiBLKSAvIGEwOwotICAgIHBiWzFdID0gMi4wICogKEsgKiBLIC0gVmgpIC8g YTA7Ci0gICAgcGJbMl0gPSAoVmggLSBWYiAqIEsgLyBRICsgSyAqIEspIC8gYTA7Ci0gICAgcGFb MV0gPSAyLjAgKiAoSyAqIEsgLSAxLjApIC8gYTA7Ci0gICAgcGFbMl0gPSAoMS4wIC0gSyAvIFEg KyBLICogSykgLyBhMDsKLQotICAgIGYwID0gMzguMTM1NDcwODc2MDI0NDQ7Ci0gICAgUSA9IDAu NTAwMzI3MDM3MzIzODc3MzsKLSAgICBLID0gdGFuKE1fUEkgKiBmMCAvIChkb3VibGUpIHN0LT5z YW1wbGVyYXRlKTsKLQotICAgIHJhWzFdID0gMi4wICogKEsgKiBLIC0gMS4wKSAvICgxLjAgKyBL IC8gUSArIEsgKiBLKTsKLSAgICByYVsyXSA9ICgxLjAgLSBLIC8gUSArIEsgKiBLKSAvICgxLjAg KyBLIC8gUSArIEsgKiBLKTsKLQotICAgIHN0LT5kLT5iWzBdID0gcGJbMF0gKiByYlswXTsKLSAg ICBzdC0+ZC0+YlsxXSA9IHBiWzBdICogcmJbMV0gKyBwYlsxXSAqIHJiWzBdOwotICAgIHN0LT5k LT5iWzJdID0gcGJbMF0gKiByYlsyXSArIHBiWzFdICogcmJbMV0gKyBwYlsyXSAqIHJiWzBdOwot ICAgIHN0LT5kLT5iWzNdID0gcGJbMV0gKiByYlsyXSArIHBiWzJdICogcmJbMV07Ci0gICAgc3Qt PmQtPmJbNF0gPSBwYlsyXSAqIHJiWzJdOwotCi0gICAgc3QtPmQtPmFbMF0gPSBwYVswXSAqIHJh WzBdOwotICAgIHN0LT5kLT5hWzFdID0gcGFbMF0gKiByYVsxXSArIHBhWzFdICogcmFbMF07Ci0g ICAgc3QtPmQtPmFbMl0gPSBwYVswXSAqIHJhWzJdICsgcGFbMV0gKiByYVsxXSArIHBhWzJdICog cmFbMF07Ci0gICAgc3QtPmQtPmFbM10gPSBwYVsxXSAqIHJhWzJdICsgcGFbMl0gKiByYVsxXTsK LSAgICBzdC0+ZC0+YVs0XSA9IHBhWzJdICogcmFbMl07Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwg NTsgKytpKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCA1OyArK2opIHsKLSAgICAgICAgICAg IHN0LT5kLT52W2ldW2pdID0gMC4wOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW50 IGVidXIxMjhfaW5pdF9jaGFubmVsX21hcChGRkVCVVIxMjhTdGF0ZSAqIHN0KQotewotICAgIHNp emVfdCBpOwotICAgIHN0LT5kLT5jaGFubmVsX21hcCA9Ci0gICAgICAgIChpbnQgKikgYXZfbWFs bG9jX2FycmF5KHN0LT5jaGFubmVscywgc2l6ZW9mKCpzdC0+ZC0+Y2hhbm5lbF9tYXApKTsKLSAg ICBpZiAoIXN0LT5kLT5jaGFubmVsX21hcCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKLSAgICBpZiAoc3QtPmNoYW5uZWxzID09IDQpIHsKLSAgICAgICAgc3QtPmQtPmNoYW5uZWxf bWFwWzBdID0gRkZfRUJVUjEyOF9MRUZUOwotICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbMV0g PSBGRl9FQlVSMTI4X1JJR0hUOwotICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbMl0gPSBGRl9F QlVSMTI4X0xFRlRfU1VSUk9VTkQ7Ci0gICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFszXSA9IEZG X0VCVVIxMjhfUklHSFRfU1VSUk9VTkQ7Ci0gICAgfSBlbHNlIGlmIChzdC0+Y2hhbm5lbHMgPT0g NSkgewotICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbMF0gPSBGRl9FQlVSMTI4X0xFRlQ7Ci0g ICAgICAgIHN0LT5kLT5jaGFubmVsX21hcFsxXSA9IEZGX0VCVVIxMjhfUklHSFQ7Ci0gICAgICAg IHN0LT5kLT5jaGFubmVsX21hcFsyXSA9IEZGX0VCVVIxMjhfQ0VOVEVSOwotICAgICAgICBzdC0+ ZC0+Y2hhbm5lbF9tYXBbM10gPSBGRl9FQlVSMTI4X0xFRlRfU1VSUk9VTkQ7Ci0gICAgICAgIHN0 LT5kLT5jaGFubmVsX21hcFs0XSA9IEZGX0VCVVIxMjhfUklHSFRfU1VSUk9VTkQ7Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0LT5jaGFubmVsczsgKytpKSB7Ci0gICAg ICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAg ICBzdC0+ZC0+Y2hhbm5lbF9tYXBbaV0gPSBGRl9FQlVSMTI4X0xFRlQ7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgc3QtPmQtPmNo YW5uZWxfbWFwW2ldID0gRkZfRUJVUjEyOF9SSUdIVDsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb aV0gPSBGRl9FQlVSMTI4X0NFTlRFUjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbaV0gPSBGRl9F QlVSMTI4X1VOVVNFRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug NDoKLSAgICAgICAgICAgICAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBbaV0gPSBGRl9FQlVSMTI4X0xF RlRfU1VSUk9VTkQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6 Ci0gICAgICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2ldID0gRkZfRUJVUjEyOF9SSUdI VF9TVVJST1VORDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6 Ci0gICAgICAgICAgICAgICAgc3QtPmQtPmNoYW5uZWxfbWFwW2ldID0gRkZfRUJVUjEyOF9VTlVT RUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2hpc3RvZ3Jh bSh2b2lkKQotewotICAgIGludCBpOwotICAgIC8qIGluaXRpYWxpemUgc3RhdGljIGNvbnN0YW50 cyAqLwotICAgIGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSA9IHBvdygxMC4wLCAoLTcw LjAgKyAwLjY5MSkgLyAxMC4wKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7Ci0g ICAgICAgIGhpc3RvZ3JhbV9lbmVyZ2llc1tpXSA9Ci0gICAgICAgICAgICBwb3coMTAuMCwgKChk b3VibGUpIGkgLyAxMC4wIC0gNjkuOTUgKyAwLjY5MSkgLyAxMC4wKTsKLSAgICB9Ci0gICAgZm9y IChpID0gMTsgaSA8IDEwMDE7ICsraSkgewotICAgICAgICBoaXN0b2dyYW1fZW5lcmd5X2JvdW5k YXJpZXNbaV0gPQotICAgICAgICAgICAgcG93KDEwLjAsICgoZG91YmxlKSBpIC8gMTAuMCAtIDcw LjAgKyAwLjY5MSkgLyAxMC4wKTsKLSAgICB9Ci19Ci0KLUZGRUJVUjEyOFN0YXRlICpmZl9lYnVy MTI4X2luaXQodW5zaWduZWQgaW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHNhbXBsZXJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2luZG93LCBpbnQgbW9kZSkKLXsKLSAgICBpbnQgZXJy Y29kZTsKLSAgICBGRkVCVVIxMjhTdGF0ZSAqc3Q7Ci0KLSAgICBzdCA9IChGRkVCVVIxMjhTdGF0 ZSAqKSBhdl9tYWxsb2Moc2l6ZW9mKCpzdCkpOwotICAgIENIRUNLX0VSUk9SKCFzdCwgMCwgZXhp dCkKLSAgICBzdC0+ZCA9IChzdHJ1Y3QgRkZFQlVSMTI4U3RhdGVJbnRlcm5hbCAqKQotICAgICAg ICBhdl9tYWxsb2Moc2l6ZW9mKCpzdC0+ZCkpOwotICAgIENIRUNLX0VSUk9SKCFzdC0+ZCwgMCwg ZnJlZV9zdGF0ZSkKLSAgICBzdC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICBlcnJjb2RlID0g ZWJ1cjEyOF9pbml0X2NoYW5uZWxfbWFwKHN0KTsKLSAgICBDSEVDS19FUlJPUihlcnJjb2RlLCAw LCBmcmVlX2ludGVybmFsKQotCi0gICAgc3QtPmQtPnNhbXBsZV9wZWFrID0KLSAgICAgICAgKGRv dWJsZSAqKSBhdl9jYWxsb2MoY2hhbm5lbHMsIHNpemVvZigqc3QtPmQtPnNhbXBsZV9wZWFrKSk7 Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5zYW1wbGVfcGVhaywgMCwgZnJlZV9jaGFubmVsX21h cCkKLQotICAgIHN0LT5zYW1wbGVyYXRlID0gc2FtcGxlcmF0ZTsKLSAgICBzdC0+ZC0+c2FtcGxl c19pbl8xMDBtcyA9IChzdC0+c2FtcGxlcmF0ZSArIDUpIC8gMTA7Ci0gICAgc3QtPm1vZGUgPSBt b2RlOwotICAgIGlmICgobW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9TKSA9PSBGRl9FQlVSMTI4X01P REVfUykgewotICAgICAgICBzdC0+ZC0+d2luZG93ID0gRkZNQVgod2luZG93LCAzMDAwKTsKLSAg ICB9IGVsc2UgaWYgKChtb2RlICYgRkZfRUJVUjEyOF9NT0RFX00pID09IEZGX0VCVVIxMjhfTU9E RV9NKSB7Ci0gICAgICAgIHN0LT5kLT53aW5kb3cgPSBGRk1BWCh3aW5kb3csIDQwMCk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZ290byBmcmVlX3NhbXBsZV9wZWFrOwotICAgIH0KLSAgICBzdC0+ ZC0+YXVkaW9fZGF0YV9mcmFtZXMgPSBzdC0+c2FtcGxlcmF0ZSAqIHN0LT5kLT53aW5kb3cgLyAx MDAwOwotICAgIGlmIChzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMgJSBzdC0+ZC0+c2FtcGxlc19p bl8xMDBtcykgewotICAgICAgICAvKiByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiBzYW1wbGVzX2lu XzEwMG1zICovCi0gICAgICAgIHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1lcyA9IHN0LT5kLT5hdWRp b19kYXRhX2ZyYW1lcwotICAgICAgICAgICAgKyBzdC0+ZC0+c2FtcGxlc19pbl8xMDBtcwotICAg ICAgICAgICAgLSAoc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVzICUgc3QtPmQtPnNhbXBsZXNfaW5f MTAwbXMpOwotICAgIH0KLSAgICBzdC0+ZC0+YXVkaW9fZGF0YSA9Ci0gICAgICAgIChkb3VibGUg KikgYXZfY2FsbG9jKHN0LT5kLT5hdWRpb19kYXRhX2ZyYW1lcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3QtPmNoYW5uZWxzICogc2l6ZW9mKCpzdC0+ZC0+YXVkaW9fZGF0YSkpOwot ICAgIENIRUNLX0VSUk9SKCFzdC0+ZC0+YXVkaW9fZGF0YSwgMCwgZnJlZV9zYW1wbGVfcGVhaykK LQotICAgIGVidXIxMjhfaW5pdF9maWx0ZXIoc3QpOwotCi0gICAgc3QtPmQtPmJsb2NrX2VuZXJn eV9oaXN0b2dyYW0gPQotICAgICAgICBhdl9tYWxsb2N6KDEwMDAgKiBzaXplb2YoKnN0LT5kLT5i bG9ja19lbmVyZ3lfaGlzdG9ncmFtKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5ibG9ja19l bmVyZ3lfaGlzdG9ncmFtLCAwLCBmcmVlX2F1ZGlvX2RhdGEpCi0gICAgc3QtPmQtPnNob3J0X3Rl cm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSA9Ci0gICAgICAgIGF2X21hbGxvY3ooMTAwMCAqIHNp emVvZigqc3QtPmQtPnNob3J0X3Rlcm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSkpOwotICAgIENI RUNLX0VSUk9SKCFzdC0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtLCAwLAot ICAgICAgICAgICAgICAgIGZyZWVfYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSkKLSAgICBzdC0+ZC0+ c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyID0gMDsKLQotICAgIC8qIHRoZSBmaXJzdCBibG9jayBu ZWVkcyA0MDBtcyBvZiBhdWRpbyBkYXRhICovCi0gICAgc3QtPmQtPm5lZWRlZF9mcmFtZXMgPSBz dC0+ZC0+c2FtcGxlc19pbl8xMDBtcyAqIDQ7Ci0gICAgLyogc3RhcnQgYXQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgYnVmZmVyICovCi0gICAgc3QtPmQtPmF1ZGlvX2RhdGFfaW5kZXggPSAwOwotCi0g ICAgaWYgKGZmX3RocmVhZF9vbmNlKCZoaXN0b2dyYW1faW5pdCwgJmluaXRfaGlzdG9ncmFtKSAh PSAwKQotICAgICAgICBnb3RvIGZyZWVfc2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFt OwotCi0gICAgc3QtPmQtPmRhdGFfcHRycyA9IGF2X21hbGxvY19hcnJheShjaGFubmVscywgc2l6 ZW9mKCpzdC0+ZC0+ZGF0YV9wdHJzKSk7Ci0gICAgQ0hFQ0tfRVJST1IoIXN0LT5kLT5kYXRhX3B0 cnMsIDAsCi0gICAgICAgICAgICAgICAgZnJlZV9zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9oaXN0 b2dyYW0pOwotCi0gICAgcmV0dXJuIHN0OwotCi1mcmVlX3Nob3J0X3Rlcm1fYmxvY2tfZW5lcmd5 X2hpc3RvZ3JhbToKLSAgICBhdl9mcmVlKHN0LT5kLT5zaG9ydF90ZXJtX2Jsb2NrX2VuZXJneV9o aXN0b2dyYW0pOwotZnJlZV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtOgotICAgIGF2X2ZyZWUoc3Qt PmQtPmJsb2NrX2VuZXJneV9oaXN0b2dyYW0pOwotZnJlZV9hdWRpb19kYXRhOgotICAgIGF2X2Zy ZWUoc3QtPmQtPmF1ZGlvX2RhdGEpOwotZnJlZV9zYW1wbGVfcGVhazoKLSAgICBhdl9mcmVlKHN0 LT5kLT5zYW1wbGVfcGVhayk7Ci1mcmVlX2NoYW5uZWxfbWFwOgotICAgIGF2X2ZyZWUoc3QtPmQt PmNoYW5uZWxfbWFwKTsKLWZyZWVfaW50ZXJuYWw6Ci0gICAgYXZfZnJlZShzdC0+ZCk7Ci1mcmVl X3N0YXRlOgotICAgIGF2X2ZyZWUoc3QpOwotZXhpdDoKLSAgICByZXR1cm4gTlVMTDsKLX0KLQot dm9pZCBmZl9lYnVyMTI4X2Rlc3Ryb3koRkZFQlVSMTI4U3RhdGUgKiogc3QpCi17Ci0gICAgYXZf ZnJlZSgoKnN0KS0+ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSk7Ci0gICAgYXZfZnJlZSgoKnN0 KS0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtKTsKLSAgICBhdl9mcmVlKCgq c3QpLT5kLT5hdWRpb19kYXRhKTsKLSAgICBhdl9mcmVlKCgqc3QpLT5kLT5jaGFubmVsX21hcCk7 Ci0gICAgYXZfZnJlZSgoKnN0KS0+ZC0+c2FtcGxlX3BlYWspOwotICAgIGF2X2ZyZWUoKCpzdCkt PmQtPmRhdGFfcHRycyk7Ci0gICAgYXZfZnJlZSgoKnN0KS0+ZCk7Ci0gICAgYXZfZnJlZSgqc3Qp OwotICAgICpzdCA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgRUJVUjEyOF9GSUxURVIodHlwZSwgc2Nh bGluZ19mYWN0b3IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3Rh dGljIHZvaWQgZWJ1cjEyOF9maWx0ZXJfIyN0eXBlKEZGRUJVUjEyOFN0YXRlKiBzdCwgY29uc3Qg dHlwZSoqIHNyY3MsICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHNyY19pbmRleCwgc2l6ZV90IGZyYW1lcywgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyaWRlKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvdWJsZSogYXVkaW9fZGF0YSA9IHN0LT5k LT5hdWRpb19kYXRhICsgc3QtPmQtPmF1ZGlvX2RhdGFfaW5kZXg7ICAgICAgICAgICAgICBcCi0g ICAgc2l6ZV90IGksIGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4X01PREVfU0FNUExFX1BFQUspID09IEZGX0VC VVIxMjhfTU9ERV9TQU1QTEVfUEVBSykgeyBcCi0gICAgICAgIGZvciAoYyA9IDA7IGMgPCBzdC0+ Y2hhbm5lbHM7ICsrYykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgICAgIGRvdWJsZSBtYXggPSAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGZyYW1lczsgKytpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgICAgICAgICAgdHlwZSB2ID0gc3Jjc1tjXVtzcmNfaW5kZXggKyBpICogc3RyaWRl XTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAodiA+IG1h eCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgICAgICAgICBtYXggPSAgICAgICAgdjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlm ICgtdiA+IG1heCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gLTEuMCAqIHY7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIG1heCAvPSBzY2Fs aW5nX2ZhY3RvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgaWYgKG1heCA+IHN0LT5kLT5zYW1wbGVfcGVha1tjXSkgc3QtPmQt PnNhbXBsZV9wZWFrW2NdID0gbWF4OyAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoYyA9IDA7IGMgPCBz dC0+Y2hhbm5lbHM7ICsrYykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIGludCBjaSA9IHN0LT5kLT5jaGFubmVsX21hcFtjXSAtIDE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGNpIDwgMCkg Y29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICBlbHNlIGlmIChjaSA9PSBGRl9FQlVSMTI4X0RVQUxfTU9OTyAtIDEp IGNpID0gMDsgLypkdWFsIG1vbm8gKi8gICAgICAgICAgICBcCi0gICAgICAgIGZvciAoaSA9IDA7 IGkgPCBmcmFtZXM7ICsraSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIHN0LT5kLT52W2NpXVswXSA9IChkb3VibGUpIChzcmNzW2Nd W3NyY19pbmRleCArIGkgKiBzdHJpZGVdIC8gc2NhbGluZ19mYWN0b3IpIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAtIHN0LT5kLT5hWzFdICogc3QtPmQtPnZbY2ldWzFdICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3QtPmQtPmFbMl0g KiBzdC0+ZC0+dltjaV1bMl0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg ICAgICAgICAgICAgICAgLSBzdC0+ZC0+YVszXSAqIHN0LT5kLT52W2NpXVszXSAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0LT5kLT5hWzRd ICogc3QtPmQtPnZbY2ldWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgYXVkaW9fZGF0YVtpICogc3QtPmNoYW5uZWxzICsgY10gPSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+ZC0+Ylsw XSAqIHN0LT5kLT52W2NpXVswXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICArIHN0LT5kLT5iWzFdICogc3QtPmQtPnZbY2ldWzFdICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICsgc3QtPmQtPmJb Ml0gKiBzdC0+ZC0+dltjaV1bMl0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKyBzdC0+ZC0+YlszXSAqIHN0LT5kLT52W2NpXVszXSAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICArIHN0LT5kLT5i WzRdICogc3QtPmQtPnZbY2ldWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgc3QtPmQtPnZbY2ldWzRdID0gc3QtPmQtPnZbY2ldWzNdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzdC0+ZC0+dltjaV1bM10gPSBzdC0+ ZC0+dltjaV1bMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgIHN0LT5kLT52W2NpXVsyXSA9IHN0LT5kLT52W2NpXVsxXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3QtPmQtPnZbY2ldWzFdID0gc3Qt PmQtPnZbY2ldWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3QtPmQtPnZbY2ldWzRdID0gZmFicyhz dC0+ZC0+dltjaV1bNF0pIDwgREJMX01JTiA/IDAuMCA6IHN0LT5kLT52W2NpXVs0XTsgXAotICAg ICAgICBzdC0+ZC0+dltjaV1bM10gPSBmYWJzKHN0LT5kLT52W2NpXVszXSkgPCBEQkxfTUlOID8g MC4wIDogc3QtPmQtPnZbY2ldWzNdOyBcCi0gICAgICAgIHN0LT5kLT52W2NpXVsyXSA9IGZhYnMo c3QtPmQtPnZbY2ldWzJdKSA8IERCTF9NSU4gPyAwLjAgOiBzdC0+ZC0+dltjaV1bMl07IFwKLSAg ICAgICAgc3QtPmQtPnZbY2ldWzFdID0gZmFicyhzdC0+ZC0+dltjaV1bMV0pIDwgREJMX01JTiA/ IDAuMCA6IHN0LT5kLT52W2NpXVsxXTsgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19 Ci1FQlVSMTI4X0ZJTFRFUihkb3VibGUsIDEuMCkKLQotc3RhdGljIGRvdWJsZSBlYnVyMTI4X2Vu ZXJneV90b19sb3VkbmVzcyhkb3VibGUgZW5lcmd5KQotewotICAgIHJldHVybiAxMCAqIGxvZzEw KGVuZXJneSkgLSAwLjY5MTsKLX0KLQotc3RhdGljIHNpemVfdCBmaW5kX2hpc3RvZ3JhbV9pbmRl eChkb3VibGUgZW5lcmd5KQotewotICAgIHNpemVfdCBpbmRleF9taW4gPSAwOwotICAgIHNpemVf dCBpbmRleF9tYXggPSAxMDAwOwotICAgIHNpemVfdCBpbmRleF9taWQ7Ci0KLSAgICBkbyB7Ci0g ICAgICAgIGluZGV4X21pZCA9IChpbmRleF9taW4gKyBpbmRleF9tYXgpIC8gMjsKLSAgICAgICAg aWYgKGVuZXJneSA+PSBoaXN0b2dyYW1fZW5lcmd5X2JvdW5kYXJpZXNbaW5kZXhfbWlkXSkgewot ICAgICAgICAgICAgaW5kZXhfbWluID0gaW5kZXhfbWlkOwotICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgaW5kZXhfbWF4ID0gaW5kZXhfbWlkOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAo aW5kZXhfbWF4IC0gaW5kZXhfbWluICE9IDEpOwotCi0gICAgcmV0dXJuIGluZGV4X21pbjsKLX0K LQotc3RhdGljIHZvaWQgZWJ1cjEyOF9jYWxjX2dhdGluZ19ibG9jayhGRkVCVVIxMjhTdGF0ZSAq IHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVz X3Blcl9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl ICpvcHRpb25hbF9vdXRwdXQpCi17Ci0gICAgc2l6ZV90IGksIGM7Ci0gICAgZG91YmxlIHN1bSA9 IDAuMDsKLSAgICBkb3VibGUgY2hhbm5lbF9zdW07Ci0gICAgZm9yIChjID0gMDsgYyA8IHN0LT5j aGFubmVsczsgKytjKSB7Ci0gICAgICAgIGlmIChzdC0+ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZf RUJVUjEyOF9VTlVTRUQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2hhbm5lbF9z dW0gPSAwLjA7Ci0gICAgICAgIGlmIChzdC0+ZC0+YXVkaW9fZGF0YV9pbmRleCA8IGZyYW1lc19w ZXJfYmxvY2sgKiBzdC0+Y2hhbm5lbHMpIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBz dC0+ZC0+YXVkaW9fZGF0YV9pbmRleCAvIHN0LT5jaGFubmVsczsgKytpKSB7Ci0gICAgICAgICAg ICAgICAgY2hhbm5lbF9zdW0gKz0gc3QtPmQtPmF1ZGlvX2RhdGFbaSAqIHN0LT5jaGFubmVscyAr IGNdICoKLSAgICAgICAgICAgICAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFbaSAqIHN0LT5jaGFu bmVscyArIGNdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpID0gc3QtPmQtPmF1 ZGlvX2RhdGFfZnJhbWVzIC0KLSAgICAgICAgICAgICAgICAgKGZyYW1lc19wZXJfYmxvY2sgLQot ICAgICAgICAgICAgICAgICAgc3QtPmQtPmF1ZGlvX2RhdGFfaW5kZXggLyBzdC0+Y2hhbm5lbHMp OwotICAgICAgICAgICAgICAgICBpIDwgc3QtPmQtPmF1ZGlvX2RhdGFfZnJhbWVzOyArK2kpIHsK LSAgICAgICAgICAgICAgICBjaGFubmVsX3N1bSArPSBzdC0+ZC0+YXVkaW9fZGF0YVtpICogc3Qt PmNoYW5uZWxzICsgY10gKgotICAgICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YVtp ICogc3QtPmNoYW5uZWxzICsgY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g ICAgICAgICAgICBmb3IgKGkgPQotICAgICAgICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0YV9p bmRleCAvIHN0LT5jaGFubmVscyAtIGZyYW1lc19wZXJfYmxvY2s7Ci0gICAgICAgICAgICAgICAg IGkgPCBzdC0+ZC0+YXVkaW9fZGF0YV9pbmRleCAvIHN0LT5jaGFubmVsczsgKytpKSB7Ci0gICAg ICAgICAgICAgICAgY2hhbm5lbF9zdW0gKz0KLSAgICAgICAgICAgICAgICAgICAgc3QtPmQtPmF1 ZGlvX2RhdGFbaSAqIHN0LT5jaGFubmVscyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNdICogc3QtPmQtPmF1ZGlvX2RhdGFbaSAqCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNoYW5uZWxzICsK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc3QtPmQtPmNo YW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTXAxMTAgfHwKLSAgICAgICAgICAgIHN0LT5kLT5j aGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01tMTEwIHx8Ci0gICAgICAgICAgICBzdC0+ZC0+ Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NcDA2MCB8fAotICAgICAgICAgICAgc3QtPmQt PmNoYW5uZWxfbWFwW2NdID09IEZGX0VCVVIxMjhfTW0wNjAgfHwKLSAgICAgICAgICAgIHN0LT5k LT5jaGFubmVsX21hcFtjXSA9PSBGRl9FQlVSMTI4X01wMDkwIHx8Ci0gICAgICAgICAgICBzdC0+ ZC0+Y2hhbm5lbF9tYXBbY10gPT0gRkZfRUJVUjEyOF9NbTA5MCkgewotICAgICAgICAgICAgY2hh bm5lbF9zdW0gKj0gMS40MTsKLSAgICAgICAgfSBlbHNlIGlmIChzdC0+ZC0+Y2hhbm5lbF9tYXBb Y10gPT0gRkZfRUJVUjEyOF9EVUFMX01PTk8pIHsKLSAgICAgICAgICAgIGNoYW5uZWxfc3VtICo9 IDIuMDsKLSAgICAgICAgfQotICAgICAgICBzdW0gKz0gY2hhbm5lbF9zdW07Ci0gICAgfQotICAg IHN1bSAvPSAoZG91YmxlKSBmcmFtZXNfcGVyX2Jsb2NrOwotICAgIGlmIChvcHRpb25hbF9vdXRw dXQpIHsKLSAgICAgICAgKm9wdGlvbmFsX291dHB1dCA9IHN1bTsKLSAgICB9IGVsc2UgaWYgKHN1 bSA+PSBoaXN0b2dyYW1fZW5lcmd5X2JvdW5kYXJpZXNbMF0pIHsKLSAgICAgICAgKytzdC0+ZC0+ YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVtmaW5kX2hpc3RvZ3JhbV9pbmRleChzdW0pXTsKLSAgICB9 Ci19Ci0KLWludCBmZl9lYnVyMTI4X3NldF9jaGFubmVsKEZGRUJVUjEyOFN0YXRlICogc3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbF9udW1iZXIsIGlu dCB2YWx1ZSkKLXsKLSAgICBpZiAoY2hhbm5lbF9udW1iZXIgPj0gc3QtPmNoYW5uZWxzKSB7Ci0g ICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBpZiAodmFsdWUgPT0gRkZfRUJVUjEyOF9EVUFM X01PTk8gJiYKLSAgICAgICAgKHN0LT5jaGFubmVscyAhPSAxIHx8IGNoYW5uZWxfbnVtYmVyICE9 IDApKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBzdC0+ZC0+Y2hhbm5lbF9tYXBb Y2hhbm5lbF9udW1iZXJdID0gdmFsdWU7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg ZWJ1cjEyOF9lbmVyZ3lfc2hvcnR0ZXJtKEZGRUJVUjEyOFN0YXRlICogc3QsIGRvdWJsZSAqb3V0 KTsKLSNkZWZpbmUgRUJVUjEyOF9BRERfRlJBTUVTX1BMQU5BUih0eXBlKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkIGVidXIxMjhf YWRkX2ZyYW1lc19wbGFuYXJfIyN0eXBlKEZGRUJVUjEyOFN0YXRlKiBzdCwgY29uc3QgdHlwZSoq IHNyY3MsICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBmcmFt ZXMsIGludCBzdHJpZGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzaXplX3Qg c3JjX2luZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoZnJhbWVzID4gMCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgaWYgKGZyYW1lcyA+PSBzdC0+ZC0+bmVlZGVkX2ZyYW1lcykgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGVidXIxMjhfZmlsdGVy XyMjdHlwZShzdCwgc3Jjcywgc3JjX2luZGV4LCBzdC0+ZC0+bmVlZGVkX2ZyYW1lcywgc3RyaWRl KTsgIFwKLSAgICAgICAgICAgIHNyY19pbmRleCArPSBzdC0+ZC0+bmVlZGVkX2ZyYW1lcyAqIHN0 cmlkZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZyYW1l cyAtPSBzdC0+ZC0+bmVlZGVkX2ZyYW1lczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0LT5kLT5hdWRpb19kYXRhX2luZGV4ICs9IHN0 LT5kLT5uZWVkZWRfZnJhbWVzICogc3QtPmNoYW5uZWxzOyAgICAgICAgICAgIFwKLSAgICAgICAg ICAgIC8qIGNhbGN1bGF0ZSB0aGUgbmV3IGdhdGluZyBibG9jayAqLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICgoc3QtPm1vZGUgJiBGRl9F QlVSMTI4X01PREVfSSkgPT0gRkZfRUJVUjEyOF9NT0RFX0kpIHsgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgICAgICAgICBlYnVyMTI4X2NhbGNfZ2F0aW5nX2Jsb2NrKHN0LCBzdC0+ZC0+c2Ft cGxlc19pbl8xMDBtcyAqIDQsIE5VTEwpOyAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4X01PREVfTFJB KSA9PSBGRl9FQlVSMTI4X01PREVfTFJBKSB7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg ICBzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyICs9IHN0LT5kLT5uZWVkZWRfZnJhbWVz OyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoc3QtPmQtPnNob3J0X3Rlcm1f ZnJhbWVfY291bnRlciA9PSBzdC0+ZC0+c2FtcGxlc19pbl8xMDBtcyAqIDMwKSB7IFwKLSAgICAg ICAgICAgICAgICAgICAgZG91YmxlIHN0X2VuZXJneTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZWJ1cjEyOF9l bmVyZ3lfc2hvcnR0ZXJtKHN0LCAmc3RfZW5lcmd5KTsgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0X2VuZXJneSA+PSBoaXN0b2dyYW1fZW5lcmd5 X2JvdW5kYXJpZXNbMF0pIHsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg ICAgICsrc3QtPmQtPnNob3J0X3Rlcm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVsgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaW5kX2hpc3RvZ3JhbV9pbmRleChzdF9lbmVyZ3kpXTsgIFwKLSAgICAgICAgICAg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgc3QtPmQtPnNob3J0X3Rl cm1fZnJhbWVfY291bnRlciA9IHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogMjA7ICAgIFwKLSAg ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICAgIC8qIDEwMG1zIGFyZSBuZWVkZWQgZm9yIGFsbCBibG9ja3MgYmVz aWRlcyB0aGUgZmlyc3Qgb25lICovICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0LT5k LT5uZWVkZWRfZnJhbWVzID0gc3QtPmQtPnNhbXBsZXNfaW5fMTAwbXM7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIC8qIHJlc2V0IGF1ZGlvX2RhdGFfaW5kZXggd2hl biBidWZmZXIgZnVsbCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgIGlmIChzdC0+ZC0+YXVkaW9fZGF0YV9pbmRleCA9PSBzdC0+ZC0+YXVkaW9fZGF0YV9mcmFt ZXMgKiBzdC0+Y2hhbm5lbHMpIHsgIFwKLSAgICAgICAgICAgICAgICBzdC0+ZC0+YXVkaW9fZGF0 YV9pbmRleCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIGVidXIxMjhfZmlsdGVyXyMjdHlwZShzdCwgc3Jjcywgc3Jj X2luZGV4LCBmcmFtZXMsIHN0cmlkZSk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN0 LT5kLT5hdWRpb19kYXRhX2luZGV4ICs9IGZyYW1lcyAqIHN0LT5jaGFubmVsczsgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4 X01PREVfTFJBKSA9PSBGRl9FQlVSMTI4X01PREVfTFJBKSB7ICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICAgICBzdC0+ZC0+c2hvcnRfdGVybV9mcmFtZV9jb3VudGVyICs9IGZyYW1lczsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgIHN0LT5kLT5uZWVkZWRfZnJhbWVzIC09IGZyYW1lczsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZyYW1lcyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLX0KLUVCVVIxMjhfQUREX0ZSQU1FU19QTEFOQVIoZG91Ymxl KQotI2RlZmluZSBGRl9FQlVSMTI4X0FERF9GUkFNRVModHlwZSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXZvaWQgZmZfZWJ1cjEyOF9hZGRfZnJhbWVzXyMj dHlwZShGRkVCVVIxMjhTdGF0ZSogc3QsIGNvbnN0IHR5cGUqIHNyYywgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVzKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICBpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY29uc3QgdHlw ZSAqKmJ1ZiA9IChjb25zdCB0eXBlKiopc3QtPmQtPmRhdGFfcHRyczsgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gIGZvciAoaSA9IDA7IGkgPCBzdC0+Y2hhbm5lbHM7IGkrKykgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGJ1ZltpXSA9IHNyYyAr IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgZWJ1cjEyOF9hZGRfZnJhbWVzX3BsYW5hcl8jI3R5cGUoc3QsIGJ1ZiwgZnJhbWVz LCBzdC0+Y2hhbm5lbHMpOyAgICAgICAgICAgICBcCi19Ci1GRl9FQlVSMTI4X0FERF9GUkFNRVMo ZG91YmxlKQotCi1zdGF0aWMgaW50IGVidXIxMjhfY2FsY19yZWxhdGl2ZV90aHJlc2hvbGQoRkZF QlVSMTI4U3RhdGUgKipzdHMsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqcmVsYXRpdmVfdGhyZXNob2xkKQotewotICAgIHNp emVfdCBpLCBqOwotICAgIGludCBhYm92ZV90aHJlc2hfY291bnRlciA9IDA7Ci0gICAgKnJlbGF0 aXZlX3RocmVzaG9sZCA9IDAuMDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsK LSAgICAgICAgdW5zaWduZWQgbG9uZyAqYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbSA9IHN0c1tpXS0+ ZC0+YmxvY2tfZW5lcmd5X2hpc3RvZ3JhbTsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IDEwMDA7 ICsraikgewotICAgICAgICAgICAgKnJlbGF0aXZlX3RocmVzaG9sZCArPSBibG9ja19lbmVyZ3lf aGlzdG9ncmFtW2pdICogaGlzdG9ncmFtX2VuZXJnaWVzW2pdOwotICAgICAgICAgICAgYWJvdmVf dGhyZXNoX2NvdW50ZXIgKz0gYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVtqXTsKLSAgICAgICAgfQot ICAgIH0KLQotICAgIGlmIChhYm92ZV90aHJlc2hfY291bnRlciAhPSAwKSB7Ci0gICAgICAgICpy ZWxhdGl2ZV90aHJlc2hvbGQgLz0gKGRvdWJsZSlhYm92ZV90aHJlc2hfY291bnRlcjsKLSAgICAg ICAgKnJlbGF0aXZlX3RocmVzaG9sZCAqPSBSRUxBVElWRV9HQVRFX0ZBQ1RPUjsKLSAgICB9Ci0K LSAgICByZXR1cm4gYWJvdmVfdGhyZXNoX2NvdW50ZXI7Ci19Ci0KLXN0YXRpYyBpbnQgZWJ1cjEy OF9nYXRlZF9sb3VkbmVzcyhGRkVCVVIxMjhTdGF0ZSAqKiBzdHMsIHNpemVfdCBzaXplLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqb3V0KQotewotICAgIGRvdWJs ZSBnYXRlZF9sb3VkbmVzcyA9IDAuMDsKLSAgICBkb3VibGUgcmVsYXRpdmVfdGhyZXNob2xkOwot ICAgIHNpemVfdCBhYm92ZV90aHJlc2hfY291bnRlcjsKLSAgICBzaXplX3QgaSwgaiwgc3RhcnRf aW5kZXg7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICBpZiAoKHN0 c1tpXS0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9JKSAhPSBGRl9FQlVSMTI4X01PREVfSSkKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICBpZiAoIWVidXIxMjhfY2Fs Y19yZWxhdGl2ZV90aHJlc2hvbGQoc3RzLCBzaXplLCAmcmVsYXRpdmVfdGhyZXNob2xkKSkgewot ICAgICAgICAqb3V0ID0gLUhVR0VfVkFMOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg ICBhYm92ZV90aHJlc2hfY291bnRlciA9IDA7Ci0gICAgaWYgKHJlbGF0aXZlX3RocmVzaG9sZCA8 IGhpc3RvZ3JhbV9lbmVyZ3lfYm91bmRhcmllc1swXSkgewotICAgICAgICBzdGFydF9pbmRleCA9 IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhcnRfaW5kZXggPSBmaW5kX2hpc3RvZ3JhbV9p bmRleChyZWxhdGl2ZV90aHJlc2hvbGQpOwotICAgICAgICBpZiAocmVsYXRpdmVfdGhyZXNob2xk ID4gaGlzdG9ncmFtX2VuZXJnaWVzW3N0YXJ0X2luZGV4XSkgewotICAgICAgICAgICAgKytzdGFy dF9pbmRleDsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSB7Ci0gICAgICAgIGZvciAoaiA9IHN0YXJ0X2luZGV4OyBqIDwgMTAwMDsgKytqKSB7Ci0gICAg ICAgICAgICBnYXRlZF9sb3VkbmVzcyArPSBzdHNbaV0tPmQtPmJsb2NrX2VuZXJneV9oaXN0b2dy YW1bal0gKgotICAgICAgICAgICAgICAgIGhpc3RvZ3JhbV9lbmVyZ2llc1tqXTsKLSAgICAgICAg ICAgIGFib3ZlX3RocmVzaF9jb3VudGVyICs9IHN0c1tpXS0+ZC0+YmxvY2tfZW5lcmd5X2hpc3Rv Z3JhbVtqXTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWFib3ZlX3RocmVzaF9jb3VudGVy KSB7Ci0gICAgICAgICpvdXQgPSAtSFVHRV9WQUw7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K LSAgICBnYXRlZF9sb3VkbmVzcyAvPSAoZG91YmxlKSBhYm92ZV90aHJlc2hfY291bnRlcjsKLSAg ICAqb3V0ID0gZWJ1cjEyOF9lbmVyZ3lfdG9fbG91ZG5lc3MoZ2F0ZWRfbG91ZG5lc3MpOwotICAg IHJldHVybiAwOwotfQotCi1pbnQgZmZfZWJ1cjEyOF9yZWxhdGl2ZV90aHJlc2hvbGQoRkZFQlVS MTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpCi17Ci0gICAgZG91YmxlIHJlbGF0aXZlX3RocmVz aG9sZDsKLQotICAgIGlmICgoc3QtPm1vZGUgJiBGRl9FQlVSMTI4X01PREVfSSkgIT0gRkZfRUJV UjEyOF9NT0RFX0kpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICBpZiAo IWVidXIxMjhfY2FsY19yZWxhdGl2ZV90aHJlc2hvbGQoJnN0LCAxLCAmcmVsYXRpdmVfdGhyZXNo b2xkKSkgewotICAgICAgICAqb3V0ID0gLTcwLjA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K LQotICAgICpvdXQgPSBlYnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhyZWxhdGl2ZV90aHJlc2hv bGQpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfZWJ1cjEyOF9sb3VkbmVzc19nbG9iYWwo RkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpCi17Ci0gICAgcmV0dXJuIGVidXIxMjhf Z2F0ZWRfbG91ZG5lc3MoJnN0LCAxLCBvdXQpOwotfQotCi1zdGF0aWMgaW50IGVidXIxMjhfZW5l cmd5X2luX2ludGVydmFsKEZGRUJVUjEyOFN0YXRlICogc3QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnRlcnZhbF9mcmFtZXMsIGRvdWJsZSAqb3V0KQot ewotICAgIGlmIChpbnRlcnZhbF9mcmFtZXMgPiBzdC0+ZC0+YXVkaW9fZGF0YV9mcmFtZXMpIHsK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0gICAgZWJ1cjEyOF9jYWxj X2dhdGluZ19ibG9jayhzdCwgaW50ZXJ2YWxfZnJhbWVzLCBvdXQpOwotICAgIHJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IGVidXIxMjhfZW5lcmd5X3Nob3J0dGVybShGRkVCVVIxMjhTdGF0ZSAq IHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICByZXR1cm4gZWJ1cjEyOF9lbmVyZ3lfaW5faW50ZXJ2 YWwoc3QsIHN0LT5kLT5zYW1wbGVzX2luXzEwMG1zICogMzAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dCk7Ci19Ci0KLWludCBmZl9lYnVyMTI4X2xvdWRuZXNzX3No b3J0dGVybShGRkVCVVIxMjhTdGF0ZSAqIHN0LCBkb3VibGUgKm91dCkKLXsKLSAgICBkb3VibGUg ZW5lcmd5OwotICAgIGludCBlcnJvciA9IGVidXIxMjhfZW5lcmd5X3Nob3J0dGVybShzdCwgJmVu ZXJneSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9IGVs c2UgaWYgKGVuZXJneSA8PSAwLjApIHsKLSAgICAgICAgKm91dCA9IC1IVUdFX1ZBTDsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgICpvdXQgPSBlYnVyMTI4X2VuZXJneV90b19sb3VkbmVz cyhlbmVyZ3kpOwotICAgIHJldHVybiAwOwotfQotCi0vKiBFQlUgLSBURUNIIDMzNDIgKi8KLWlu dCBmZl9lYnVyMTI4X2xvdWRuZXNzX3JhbmdlX211bHRpcGxlKEZGRUJVUjEyOFN0YXRlICoqIHN0 cywgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgKm91dCkKLXsKLSAgICBzaXplX3QgaSwgajsKLSAgICBzaXplX3Qgc3RsX3NpemU7Ci0g ICAgZG91YmxlIHN0bF9wb3dlciwgc3RsX2ludGVncmF0ZWQ7Ci0gICAgLyogSGlnaCBhbmQgbG93 IHBlcmNlbnRpbGUgZW5lcmd5ICovCi0gICAgZG91YmxlIGhfZW4sIGxfZW47Ci0gICAgdW5zaWdu ZWQgbG9uZyBoaXN0WzEwMDBdID0geyAwIH07Ci0gICAgc2l6ZV90IHBlcmNlbnRpbGVfbG93LCBw ZXJjZW50aWxlX2hpZ2g7Ci0gICAgc2l6ZV90IGluZGV4OwotCi0gICAgZm9yIChpID0gMDsgaSA8 IHNpemU7ICsraSkgewotICAgICAgICBpZiAoc3RzW2ldKSB7Ci0gICAgICAgICAgICBpZiAoKHN0 c1tpXS0+bW9kZSAmIEZGX0VCVVIxMjhfTU9ERV9MUkEpICE9Ci0gICAgICAgICAgICAgICAgRkZf RUJVUjEyOF9NT0RFX0xSQSkgewotICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGxfc2l6ZSA9IDA7 Ci0gICAgc3RsX3Bvd2VyID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK LSAgICAgICAgaWYgKCFzdHNbaV0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9y IChqID0gMDsgaiA8IDEwMDA7ICsraikgewotICAgICAgICAgICAgaGlzdFtqXSArPSBzdHNbaV0t PmQtPnNob3J0X3Rlcm1fYmxvY2tfZW5lcmd5X2hpc3RvZ3JhbVtqXTsKLSAgICAgICAgICAgIHN0 bF9zaXplICs9IHN0c1tpXS0+ZC0+c2hvcnRfdGVybV9ibG9ja19lbmVyZ3lfaGlzdG9ncmFtW2pd OwotICAgICAgICAgICAgc3RsX3Bvd2VyICs9IHN0c1tpXS0+ZC0+c2hvcnRfdGVybV9ibG9ja19l bmVyZ3lfaGlzdG9ncmFtW2pdCi0gICAgICAgICAgICAgICAgKiBoaXN0b2dyYW1fZW5lcmdpZXNb al07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFzdGxfc2l6ZSkgewotICAgICAgICAqb3V0 ID0gMC4wOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzdGxfcG93ZXIgLz0gc3Rs X3NpemU7Ci0gICAgc3RsX2ludGVncmF0ZWQgPSBNSU5VU18yMERCICogc3RsX3Bvd2VyOwotCi0g ICAgaWYgKHN0bF9pbnRlZ3JhdGVkIDwgaGlzdG9ncmFtX2VuZXJneV9ib3VuZGFyaWVzWzBdKSB7 Ci0gICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBpbmRleCA9IGZpbmRf aGlzdG9ncmFtX2luZGV4KHN0bF9pbnRlZ3JhdGVkKTsKLSAgICAgICAgaWYgKHN0bF9pbnRlZ3Jh dGVkID4gaGlzdG9ncmFtX2VuZXJnaWVzW2luZGV4XSkgewotICAgICAgICAgICAgKytpbmRleDsK LSAgICAgICAgfQotICAgIH0KLSAgICBzdGxfc2l6ZSA9IDA7Ci0gICAgZm9yIChqID0gaW5kZXg7 IGogPCAxMDAwOyArK2opIHsKLSAgICAgICAgc3RsX3NpemUgKz0gaGlzdFtqXTsKLSAgICB9Ci0g ICAgaWYgKCFzdGxfc2l6ZSkgewotICAgICAgICAqb3V0ID0gMC4wOwotICAgICAgICByZXR1cm4g MDsKLSAgICB9Ci0KLSAgICBwZXJjZW50aWxlX2xvdyA9IChzaXplX3QpICgoc3RsX3NpemUgLSAx KSAqIDAuMSArIDAuNSk7Ci0gICAgcGVyY2VudGlsZV9oaWdoID0gKHNpemVfdCkgKChzdGxfc2l6 ZSAtIDEpICogMC45NSArIDAuNSk7Ci0KLSAgICBzdGxfc2l6ZSA9IDA7Ci0gICAgaiA9IGluZGV4 OwotICAgIHdoaWxlIChzdGxfc2l6ZSA8PSBwZXJjZW50aWxlX2xvdykgewotICAgICAgICBzdGxf c2l6ZSArPSBoaXN0W2orK107Ci0gICAgfQotICAgIGxfZW4gPSBoaXN0b2dyYW1fZW5lcmdpZXNb aiAtIDFdOwotICAgIHdoaWxlIChzdGxfc2l6ZSA8PSBwZXJjZW50aWxlX2hpZ2gpIHsKLSAgICAg ICAgc3RsX3NpemUgKz0gaGlzdFtqKytdOwotICAgIH0KLSAgICBoX2VuID0gaGlzdG9ncmFtX2Vu ZXJnaWVzW2ogLSAxXTsKLSAgICAqb3V0ID0KLSAgICAgICAgZWJ1cjEyOF9lbmVyZ3lfdG9fbG91 ZG5lc3MoaF9lbikgLQotICAgICAgICBlYnVyMTI4X2VuZXJneV90b19sb3VkbmVzcyhsX2VuKTsK LSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX2VidXIxMjhfbG91ZG5lc3NfcmFuZ2UoRkZFQlVS MTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpCi17Ci0gICAgcmV0dXJuIGZmX2VidXIxMjhfbG91 ZG5lc3NfcmFuZ2VfbXVsdGlwbGUoJnN0LCAxLCBvdXQpOwotfQotCi1pbnQgZmZfZWJ1cjEyOF9z YW1wbGVfcGVhayhGRkVCVVIxMjhTdGF0ZSAqIHN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGNoYW5uZWxfbnVtYmVyLCBkb3VibGUgKm91dCkKLXsKLSAgICBpZiAo KHN0LT5tb2RlICYgRkZfRUJVUjEyOF9NT0RFX1NBTVBMRV9QRUFLKSAhPQotICAgICAgICBGRl9F QlVSMTI4X01PREVfU0FNUExFX1BFQUspIHsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKLSAgICB9IGVsc2UgaWYgKGNoYW5uZWxfbnVtYmVyID49IHN0LT5jaGFubmVscykgewotICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLSAgICAqb3V0ID0gc3QtPmQtPnNh bXBsZV9wZWFrW2NoYW5uZWxfbnVtYmVyXTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBh L2xpYmF2ZmlsdGVyL2VidXIxMjguaCBiL2xpYmF2ZmlsdGVyL2VidXIxMjguaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3Mzg1ZTA0NC4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmZp bHRlci9lYnVyMTI4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCAoYykgMjAxMSBKYW4gS29rZW3DvGxsZXIKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCi0gKgotICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGxpYmVidXIxMjggd2hpY2gg aXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwczovL2dpdGh1Yi5jb20vamlpeHlqL2xpYmVidXIxMjgv Ci0gKgotKi8KLQotI2lmbmRlZiBBVkZJTFRFUl9FQlVSMTI4X0gKLSNkZWZpbmUgQVZGSUxURVJf RUJVUjEyOF9ICi0KLS8qKiBcZmlsZSBlYnVyMTI4LmgKLSAqICBcYnJpZWYgbGliZWJ1cjEyOCAt IGEgbGlicmFyeSBmb3IgbG91ZG5lc3MgbWVhc3VyZW1lbnQgYWNjb3JkaW5nIHRvCi0gKiAgICAg ICAgIHRoZSBFQlUgUjEyOCBzdGFuZGFyZC4KLSAqLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+ICAg ICAgICAgICAgIC8qIGZvciBzaXplX3QgKi8KLQotLyoqIFxlbnVtIGNoYW5uZWwKLSAqICBVc2Ug dGhlc2UgdmFsdWVzIHdoZW4gc2V0dGluZyB0aGUgY2hhbm5lbCBtYXAgd2l0aCBlYnVyMTI4X3Nl dF9jaGFubmVsKCkuCi0gKiAgU2VlIGRlZmluaXRpb25zIGluIElUVSBSLVJFQy1CUyAxNzcwLTQK LSAqLwotZW51bSBjaGFubmVsIHsKLSAgICBGRl9FQlVSMTI4X1VOVVNFRCA9IDAsICAgLyoqPCB1 bnVzZWQgY2hhbm5lbCAoZm9yIGV4YW1wbGUgTEZFIGNoYW5uZWwpICovCi0gICAgRkZfRUJVUjEy OF9MRUZULAotICAgIEZGX0VCVVIxMjhfTXAwMzAgPSAxLCAgICAvKio8IGl0dSBNKzAzMCAqLwot ICAgIEZGX0VCVVIxMjhfUklHSFQsCi0gICAgRkZfRUJVUjEyOF9NbTAzMCA9IDIsICAgIC8qKjwg aXR1IE0tMDMwICovCi0gICAgRkZfRUJVUjEyOF9DRU5URVIsCi0gICAgRkZfRUJVUjEyOF9NcDAw MCA9IDMsICAgIC8qKjwgaXR1IE0rMDAwICovCi0gICAgRkZfRUJVUjEyOF9MRUZUX1NVUlJPVU5E LAotICAgIEZGX0VCVVIxMjhfTXAxMTAgPSA0LCAgICAvKio8IGl0dSBNKzExMCAqLwotICAgIEZG X0VCVVIxMjhfUklHSFRfU1VSUk9VTkQsCi0gICAgRkZfRUJVUjEyOF9NbTExMCA9IDUsICAgIC8q KjwgaXR1IE0tMTEwICovCi0gICAgRkZfRUJVUjEyOF9EVUFMX01PTk8sICAgIC8qKjwgYSBjaGFu bmVsIHRoYXQgaXMgY291bnRlZCB0d2ljZSAqLwotICAgIEZGX0VCVVIxMjhfTXBTQywgICAgICAg ICAvKio8IGl0dSBNK1NDICovCi0gICAgRkZfRUJVUjEyOF9NbVNDLCAgICAgICAgIC8qKjwgaXR1 IE0tU0MgKi8KLSAgICBGRl9FQlVSMTI4X01wMDYwLCAgICAgICAgLyoqPCBpdHUgTSswNjAgKi8K LSAgICBGRl9FQlVSMTI4X01tMDYwLCAgICAgICAgLyoqPCBpdHUgTS0wNjAgKi8KLSAgICBGRl9F QlVSMTI4X01wMDkwLCAgICAgICAgLyoqPCBpdHUgTSswOTAgKi8KLSAgICBGRl9FQlVSMTI4X01t MDkwLCAgICAgICAgLyoqPCBpdHUgTS0wOTAgKi8KLSAgICBGRl9FQlVSMTI4X01wMTM1LCAgICAg ICAgLyoqPCBpdHUgTSsxMzUgKi8KLSAgICBGRl9FQlVSMTI4X01tMTM1LCAgICAgICAgLyoqPCBp dHUgTS0xMzUgKi8KLSAgICBGRl9FQlVSMTI4X01wMTgwLCAgICAgICAgLyoqPCBpdHUgTSsxODAg Ki8KLSAgICBGRl9FQlVSMTI4X1VwMDAwLCAgICAgICAgLyoqPCBpdHUgVSswMDAgKi8KLSAgICBG Rl9FQlVSMTI4X1VwMDMwLCAgICAgICAgLyoqPCBpdHUgVSswMzAgKi8KLSAgICBGRl9FQlVSMTI4 X1VtMDMwLCAgICAgICAgLyoqPCBpdHUgVS0wMzAgKi8KLSAgICBGRl9FQlVSMTI4X1VwMDQ1LCAg ICAgICAgLyoqPCBpdHUgVSswNDUgKi8KLSAgICBGRl9FQlVSMTI4X1VtMDQ1LCAgICAgICAgLyoq PCBpdHUgVS0wMzAgKi8KLSAgICBGRl9FQlVSMTI4X1VwMDkwLCAgICAgICAgLyoqPCBpdHUgVSsw OTAgKi8KLSAgICBGRl9FQlVSMTI4X1VtMDkwLCAgICAgICAgLyoqPCBpdHUgVS0wOTAgKi8KLSAg ICBGRl9FQlVSMTI4X1VwMTEwLCAgICAgICAgLyoqPCBpdHUgVSsxMTAgKi8KLSAgICBGRl9FQlVS MTI4X1VtMTEwLCAgICAgICAgLyoqPCBpdHUgVS0xMTAgKi8KLSAgICBGRl9FQlVSMTI4X1VwMTM1 LCAgICAgICAgLyoqPCBpdHUgVSsxMzUgKi8KLSAgICBGRl9FQlVSMTI4X1VtMTM1LCAgICAgICAg LyoqPCBpdHUgVS0xMzUgKi8KLSAgICBGRl9FQlVSMTI4X1VwMTgwLCAgICAgICAgLyoqPCBpdHUg VSsxODAgKi8KLSAgICBGRl9FQlVSMTI4X1RwMDAwLCAgICAgICAgLyoqPCBpdHUgVCswMDAgKi8K LSAgICBGRl9FQlVSMTI4X0JwMDAwLCAgICAgICAgLyoqPCBpdHUgQiswMDAgKi8KLSAgICBGRl9F QlVSMTI4X0JwMDQ1LCAgICAgICAgLyoqPCBpdHUgQiswNDUgKi8KLSAgICBGRl9FQlVSMTI4X0Jt MDQ1ICAgICAgICAgLyoqPCBpdHUgQi0wNDUgKi8KLX07Ci0KLS8qKiBcZW51bSBtb2RlCi0gKiAg VXNlIHRoZXNlIHZhbHVlcyBpbiBlYnVyMTI4X2luaXQgKG9yJ2VkKS4gVHJ5IHRvIHVzZSB0aGUg bG93ZXN0IHBvc3NpYmxlCi0gKiAgbW9kZXMgdGhhdCBzdWl0IHlvdXIgbmVlZHMsIGFzIHBlcmZv cm1hbmNlIHdpbGwgYmUgYmV0dGVyLgotICovCi1lbnVtIG1vZGUgewotICAvKiogY2FuIHJlc3Vy cnJlY3QgYW5kIGNhbGwgZmZfZWJ1cjEyOF9sb3VkbmVzc19tb21lbnRhcnkgKi8KLSAgICBGRl9F QlVSMTI4X01PREVfTSA9ICgxIDw8IDApLAotICAvKiogY2FuIGNhbGwgZmZfZWJ1cjEyOF9sb3Vk bmVzc19zaG9ydHRlcm0gKi8KLSAgICBGRl9FQlVSMTI4X01PREVfUyA9ICgxIDw8IDEpIHwgRkZf RUJVUjEyOF9NT0RFX00sCi0gIC8qKiBjYW4gY2FsbCBmZl9lYnVyMTI4X2xvdWRuZXNzX2dsb2Jh bF8qIGFuZCBmZl9lYnVyMTI4X3JlbGF0aXZlX3RocmVzaG9sZCAqLwotICAgIEZGX0VCVVIxMjhf TU9ERV9JID0gKDEgPDwgMikgfCBGRl9FQlVSMTI4X01PREVfTSwKLSAgLyoqIGNhbiBjYWxsIGZm X2VidXIxMjhfbG91ZG5lc3NfcmFuZ2UgKi8KLSAgICBGRl9FQlVSMTI4X01PREVfTFJBID0gKDEg PDwgMykgfCBGRl9FQlVSMTI4X01PREVfUywKLSAgLyoqIGNhbiBjYWxsIGZmX2VidXIxMjhfc2Ft cGxlX3BlYWsgKi8KLSAgICBGRl9FQlVSMTI4X01PREVfU0FNUExFX1BFQUsgPSAoMSA8PCA0KSB8 IEZGX0VCVVIxMjhfTU9ERV9NLAotfTsKLQotLyoqIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgRkZF QlVSMTI4U3RhdGVJbnRlcm5hbCAqLwotc3RydWN0IEZGRUJVUjEyOFN0YXRlSW50ZXJuYWw7Ci0K LS8qKiBcYnJpZWYgQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIGEgbG91 ZG5lc3MgbWVhc3VyZW1lbnQuCi0gKgotICogIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gbW9kaWZ5 IHRoaXMgc3RydWN0IGRpcmVjdGx5LgotICovCi10eXBlZGVmIHN0cnVjdCBGRkVCVVIxMjhTdGF0 ZSB7Ci0gICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgVGhlIGN1cnJl bnQgbW9kZS4gKi8KLSAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbHM7ICAgICAgICAgICAgLyoqPCBU aGUgbnVtYmVyIG9mIGNoYW5uZWxzLiAqLwotICAgIHVuc2lnbmVkIGxvbmcgc2FtcGxlcmF0ZTsg ICAgICAgICAvKio8IFRoZSBzYW1wbGUgcmF0ZS4gKi8KLSAgICBzdHJ1Y3QgRkZFQlVSMTI4U3Rh dGVJbnRlcm5hbCAqZDsgLyoqPCBJbnRlcm5hbCBzdGF0ZS4gKi8KLX0gRkZFQlVSMTI4U3RhdGU7 Ci0KLS8qKiBcYnJpZWYgSW5pdGlhbGl6ZSBsaWJyYXJ5IHN0YXRlLgotICoKLSAqICBAcGFyYW0g Y2hhbm5lbHMgdGhlIG51bWJlciBvZiBjaGFubmVscy4KLSAqICBAcGFyYW0gc2FtcGxlcmF0ZSB0 aGUgc2FtcGxlIHJhdGUuCi0gKiAgQHBhcmFtIHdpbmRvdyBzZXQgdGhlIG1heGltdW0gd2luZG93 IHNpemUgaW4gbXMsIHNldCB0byAwIGZvciBhdXRvLgotICogIEBwYXJhbSBtb2RlIHNlZSB0aGUg bW9kZSBlbnVtIGZvciBwb3NzaWJsZSB2YWx1ZXMuCi0gKiAgQHJldHVybiBhbiBpbml0aWFsaXpl ZCBsaWJyYXJ5IHN0YXRlLgotICovCi1GRkVCVVIxMjhTdGF0ZSAqZmZfZWJ1cjEyOF9pbml0KHVu c2lnbmVkIGludCBjaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBzYW1wbGVyYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHdpbmRvdywgaW50IG1vZGUpOwotCi0vKiogXGJyaWVmIERlc3Ryb3kgbGli cmFyeSBzdGF0ZS4KLSAqCi0gKiAgQHBhcmFtIHN0IHBvaW50ZXIgdG8gYSBsaWJyYXJ5IHN0YXRl LgotICovCi12b2lkIGZmX2VidXIxMjhfZGVzdHJveShGRkVCVVIxMjhTdGF0ZSAqKiBzdCk7Ci0K LS8qKiBcYnJpZWYgU2V0IGNoYW5uZWwgdHlwZS4KLSAqCi0gKiAgVGhlIGRlZmF1bHQgaXM6Ci0g KiAgLSAwIC0+IEZGX0VCVVIxMjhfTEVGVAotICogIC0gMSAtPiBGRl9FQlVSMTI4X1JJR0hUCi0g KiAgLSAyIC0+IEZGX0VCVVIxMjhfQ0VOVEVSCi0gKiAgLSAzIC0+IEZGX0VCVVIxMjhfVU5VU0VE Ci0gKiAgLSA0IC0+IEZGX0VCVVIxMjhfTEVGVF9TVVJST1VORAotICogIC0gNSAtPiBGRl9FQlVS MTI4X1JJR0hUX1NVUlJPVU5ECi0gKgotICogIEBwYXJhbSBzdCBsaWJyYXJ5IHN0YXRlLgotICog IEBwYXJhbSBjaGFubmVsX251bWJlciB6ZXJvIGJhc2VkIGNoYW5uZWwgaW5kZXguCi0gKiAgQHBh cmFtIHZhbHVlIGNoYW5uZWwgdHlwZSBmcm9tIHRoZSAiY2hhbm5lbCIgZW51bS4KLSAqICBAcmV0 dXJuCi0gKiAgICAtIDAgb24gc3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIGlu dmFsaWQgY2hhbm5lbCBpbmRleC4KLSAqLwotaW50IGZmX2VidXIxMjhfc2V0X2NoYW5uZWwoRkZF QlVSMTI4U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBjaGFubmVsX251bWJlciwgaW50IHZhbHVlKTsKLQotLyoqIFxicmllZiBBZGQgZnJhbWVzIHRv IGJlIHByb2Nlc3NlZC4KLSAqCi0gKiAgQHBhcmFtIHN0IGxpYnJhcnkgc3RhdGUuCi0gKiAgQHBh cmFtIHNyYyBhcnJheSBvZiBzb3VyY2UgZnJhbWVzLiBDaGFubmVscyBtdXN0IGJlIGludGVybGVh dmVkLgotICogIEBwYXJhbSBmcmFtZXMgbnVtYmVyIG9mIGZyYW1lcy4gTm90IG51bWJlciBvZiBz YW1wbGVzIQotICovCi12b2lkIGZmX2VidXIxMjhfYWRkX2ZyYW1lc19kb3VibGUoRkZFQlVSMTI4 U3RhdGUgKiBzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3Vi bGUgKnNyYywgc2l6ZV90IGZyYW1lcyk7Ci0KLS8qKiBcYnJpZWYgR2V0IGdsb2JhbCBpbnRlZ3Jh dGVkIGxvdWRuZXNzIGluIExVRlMuCi0gKgotICogIEBwYXJhbSBzdCBsaWJyYXJ5IHN0YXRlLgot ICogIEBwYXJhbSBvdXQgaW50ZWdyYXRlZCBsb3VkbmVzcyBpbiBMVUZTLiAtSFVHRV9WQUwgaWYg cmVzdWx0IGlzIG5lZ2F0aXZlCi0gKiAgICAgICAgICAgICBpbmZpbml0eS4KLSAqICBAcmV0dXJu Ci0gKiAgICAtIDAgb24gc3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUg IkZGX0VCVVIxMjhfTU9ERV9JIiBoYXMgbm90IGJlZW4gc2V0LgotICovCi1pbnQgZmZfZWJ1cjEy OF9sb3VkbmVzc19nbG9iYWwoRkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpOwotCi0v KiogXGJyaWVmIEdldCBzaG9ydC10ZXJtIGxvdWRuZXNzIChsYXN0IDNzKSBpbiBMVUZTLgotICoK LSAqICBAcGFyYW0gc3QgbGlicmFyeSBzdGF0ZS4KLSAqICBAcGFyYW0gb3V0IHNob3J0LXRlcm0g bG91ZG5lc3MgaW4gTFVGUy4gLUhVR0VfVkFMIGlmIHJlc3VsdCBpcyBuZWdhdGl2ZQotICogICAg ICAgICAgICAgaW5maW5pdHkuCi0gKiAgQHJldHVybgotICogICAgLSAwIG9uIHN1Y2Nlc3MuCi0g KiAgICAtIEFWRVJST1IoRUlOVkFMKSBpZiBtb2RlICJGRl9FQlVSMTI4X01PREVfUyIgaGFzIG5v dCBiZWVuIHNldC4KLSAqLwotaW50IGZmX2VidXIxMjhfbG91ZG5lc3Nfc2hvcnR0ZXJtKEZGRUJV UjEyOFN0YXRlICogc3QsIGRvdWJsZSAqb3V0KTsKLQotLyoqIFxicmllZiBHZXQgbG91ZG5lc3Mg cmFuZ2UgKExSQSkgb2YgcHJvZ3JhbW1lIGluIExVLgotICoKLSAqICBDYWxjdWxhdGVzIGxvdWRu ZXNzIHJhbmdlIGFjY29yZGluZyB0byBFQlUgMzM0Mi4KLSAqCi0gKiAgQHBhcmFtIHN0IGxpYnJh cnkgc3RhdGUuCi0gKiAgQHBhcmFtIG91dCBsb3VkbmVzcyByYW5nZSAoTFJBKSBpbiBMVS4gV2ls bCBub3QgYmUgY2hhbmdlZCBpbiBjYXNlIG9mCi0gKiAgICAgICAgICAgICBlcnJvci4gQVZFUlJP UihFSU5WQUwpIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhpcyBjYXNlLgotICogIEByZXR1cm4KLSAq ICAgIC0gMCBvbiBzdWNjZXNzLgotICogICAgLSBBVkVSUk9SKEVJTlZBTCkgaWYgbW9kZSAiRkZf RUJVUjEyOF9NT0RFX0xSQSIgaGFzIG5vdCBiZWVuIHNldC4KLSAqLwotaW50IGZmX2VidXIxMjhf bG91ZG5lc3NfcmFuZ2UoRkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpOwotLyoqIFxi cmllZiBHZXQgbG91ZG5lc3MgcmFuZ2UgKExSQSkgaW4gTFUgYWNyb3NzIG11bHRpcGxlIGluc3Rh bmNlcy4KLSAqCi0gKiAgQ2FsY3VsYXRlcyBsb3VkbmVzcyByYW5nZSBhY2NvcmRpbmcgdG8gRUJV IDMzNDIuCi0gKgotICogIEBwYXJhbSBzdHMgYXJyYXkgb2YgbGlicmFyeSBzdGF0ZXMuCi0gKiAg QHBhcmFtIHNpemUgbGVuZ3RoIG9mIHN0cwotICogIEBwYXJhbSBvdXQgbG91ZG5lc3MgcmFuZ2Ug KExSQSkgaW4gTFUuIFdpbGwgbm90IGJlIGNoYW5nZWQgaW4gY2FzZSBvZgotICogICAgICAgICAg ICAgZXJyb3IuIEFWRVJST1IoRUlOVkFMKSB3aWxsIGJlIHJldHVybmVkIGluIHRoaXMgY2FzZS4K LSAqICBAcmV0dXJuCi0gKiAgICAtIDAgb24gc3VjY2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5W QUwpIGlmIG1vZGUgIkZGX0VCVVIxMjhfTU9ERV9MUkEiIGhhcyBub3QgYmVlbiBzZXQuCi0gKi8K LWludCBmZl9lYnVyMTI4X2xvdWRuZXNzX3JhbmdlX211bHRpcGxlKEZGRUJVUjEyOFN0YXRlICoq IHN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXpl LCBkb3VibGUgKm91dCk7Ci0KLS8qKiBcYnJpZWYgR2V0IG1heGltdW0gc2FtcGxlIHBlYWsgb2Yg c2VsZWN0ZWQgY2hhbm5lbCBpbiBmbG9hdCBmb3JtYXQuCi0gKgotICogIEBwYXJhbSBzdCBsaWJy YXJ5IHN0YXRlCi0gKiAgQHBhcmFtIGNoYW5uZWxfbnVtYmVyIGNoYW5uZWwgdG8gYW5hbHlzZQot ICogIEBwYXJhbSBvdXQgbWF4aW11bSBzYW1wbGUgcGVhayBpbiBmbG9hdCBmb3JtYXQgKDEuMCBp cyAwIGRCRlMpCi0gKiAgQHJldHVybgotICogICAgLSAwIG9uIHN1Y2Nlc3MuCi0gKiAgICAtIEFW RVJST1IoRUlOVkFMKSBpZiBtb2RlICJGRl9FQlVSMTI4X01PREVfU0FNUExFX1BFQUsiIGhhcyBu b3QgYmVlbiBzZXQuCi0gKiAgICAtIEFWRVJST1IoRUlOVkFMKSBpZiBpbnZhbGlkIGNoYW5uZWwg aW5kZXguCi0gKi8KLWludCBmZl9lYnVyMTI4X3NhbXBsZV9wZWFrKEZGRUJVUjEyOFN0YXRlICog c3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbF9udW1i ZXIsIGRvdWJsZSAqb3V0KTsKLQotLyoqIFxicmllZiBHZXQgcmVsYXRpdmUgdGhyZXNob2xkIGlu IExVRlMuCi0gKgotICogIEBwYXJhbSBzdCBsaWJyYXJ5IHN0YXRlCi0gKiAgQHBhcmFtIG91dCBy ZWxhdGl2ZSB0aHJlc2hvbGQgaW4gTFVGUy4KLSAqICBAcmV0dXJuCi0gKiAgICAtIDAgb24gc3Vj Y2Vzcy4KLSAqICAgIC0gQVZFUlJPUihFSU5WQUwpIGlmIG1vZGUgIkZGX0VCVVIxMjhfTU9ERV9J IiBoYXMgbm90IGJlZW4gc2V0LgotICovCi1pbnQgZmZfZWJ1cjEyOF9yZWxhdGl2ZV90aHJlc2hv bGQoRkZFQlVSMTI4U3RhdGUgKiBzdCwgZG91YmxlICpvdXQpOwotCi0jZW5kaWYgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFWRklMVEVSX0VCVVIxMjhfSCAqLwpkaWZmIC0tZ2l0IGEvbGli YXZmaWx0ZXIvZl9lYnVyMTI4LmMgYi9saWJhdmZpbHRlci9mX2VidXIxMjguYwppbmRleCBhOTIx NjAyYjQ0Li40NTA4ZDMwMzljIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9mX2VidXIxMjguYwor KysgYi9saWJhdmZpbHRlci9mX2VidXIxMjguYwpAQCAtNzUsNiArNzUsMTMgQEAgc3RydWN0IGlu dGVncmF0b3IgewogICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoaXN0b2dyYW07ICAgLy8vPCBoaXN0 b2dyYW0gb2YgdGhlIHBvd2VycywgdXNlZCB0byBjb21wdXRlIExSQSBhbmQgSQogfTsKIAorZW51 bSBQcmludEZvcm1hdCB7CisgICAgTk9ORSwKKyAgICBKU09OLAorICAgIFNVTU1BUlksCisgICAg UEZfTkIKK307CisKIHN0cnVjdCByZWN0IHsgaW50IHgsIHksIHcsIGg7IH07CiAKIHR5cGVkZWYg c3RydWN0IEVCVVIxMjhDb250ZXh0IHsKQEAgLTM4OSwxMSArMzk2LDggQEAgc3RhdGljIGludCBj b25maWdfdmlkZW9fb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKICAgICByZXR1cm4gMDsK IH0KIAotc3RhdGljIGludCBjb25maWdfYXVkaW9faW5wdXQoQVZGaWx0ZXJMaW5rICppbmxpbmsp CitzdGF0aWMgaW50IGNvbmZpZ19hdWRpb19pbihBVkZpbHRlckxpbmsgKmlubGluaywgRUJVUjEy OENvbnRleHQgKmVidXIxMjgpCiB7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmst PmRzdDsKLSAgICBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCA9IGN0eC0+cHJpdjsKLQogICAgIC8q IFVub2ZmaWNpYWwgcmV2ZXJzZWQgcGFyYW1ldHJpemF0aW9uIG9mIFBSRQogICAgICAqIGFuZCBS TEIgZnJvbSA0OGtIeiAqLwogCkBAIC00MzQsMTEgKzQzOCwxNiBAQCBzdGF0aWMgaW50IGNvbmZp Z19hdWRpb19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKICAgICByZXR1cm4gMDsKIH0KIAot c3RhdGljIGludCBjb25maWdfYXVkaW9fb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3N0 YXRpYyBpbnQgY29uZmlnX2F1ZGlvX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQogewotICAg IGludCBpOwotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gb3V0bGluay0+c3JjOworICAgIEFW RmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7CiAgICAgRUJVUjEyOENvbnRleHQgKmVi dXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJuIGNvbmZpZ19hdWRpb19pbihpbmxpbmssIGVi dXIxMjgpOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19hdWRpb19vdXQoQVZGaWx0ZXJMaW5rICpv dXRsaW5rLCBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCkKK3sKKyAgICBpbnQgaTsKICAgICBjb25z dCBpbnQgbmJfY2hhbm5lbHMgPSBvdXRsaW5rLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7CiAKICNk ZWZpbmUgQkFDS19NQVNLIChBVl9DSF9CQUNLX0xFRlQgICAgfEFWX0NIX0JBQ0tfQ0VOVEVSICAg IHxBVl9DSF9CQUNLX1JJR0hUfCBcCkBAIC01MjMsNiArNTMyLDEzIEBAIHN0YXRpYyBpbnQgY29u ZmlnX2F1ZGlvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCiAgICAgcmV0dXJuIDA7CiB9 CiAKK3N0YXRpYyBpbnQgY29uZmlnX2F1ZGlvX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmsp Cit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgRUJVUjEy OENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7CisgICAgcmV0dXJuIGNvbmZpZ19hdWRpb19v dXQob3V0bGluaywgZWJ1cjEyOCk7Cit9CisKICNkZWZpbmUgRU5FUkdZKGxvdWRuZXNzKSAoZmZf ZXhwMTAoKChsb3VkbmVzcykgKyAwLjY5MSkgLyAxMC4pKQogI2RlZmluZSBMT1VETkVTUyhlbmVy Z3kpICgtMC42OTEgKyAxMCAqIGxvZzEwKGVuZXJneSkpCiAjZGVmaW5lIERCRlMoZW5lcmd5KSAo MjAgKiBsb2cxMChlbmVyZ3kpKQpAQCAtNTQxLDkgKzU1Nyw4IEBAIHN0YXRpYyBzdHJ1Y3QgaGlz dF9lbnRyeSAqZ2V0X2hpc3RvZ3JhbSh2b2lkKQogICAgIHJldHVybiBoOwogfQogCi1zdGF0aWMg YXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKK3N0YXRpYyBhdl9jb2xkIGlu dCBpbml0X2VidXIxMjgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEVCVVIxMjhDb250ZXh0ICplYnVy MTI4KQogewotICAgIEVCVVIxMjhDb250ZXh0ICplYnVyMTI4ID0gY3R4LT5wcml2OwogICAgIEFW RmlsdGVyUGFkIHBhZDsKICAgICBpbnQgcmV0OwogCkBAIC01NzQsNiArNTg5LDkgQEAgc3RhdGlj IGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgZWJ1cjEyOC0+aW50 ZWdyYXRlZF9sb3VkbmVzcyA9IEFCU19USFJFUzsKICAgICBlYnVyMTI4LT5sb3VkbmVzc19yYW5n ZSA9IDA7CiAKKyAgICBpZiAoc3RyY21wKGN0eC0+ZmlsdGVyLT5uYW1lLCAiZWJ1cjEyOCIpKQor ICAgICAgICByZXR1cm4gMDsKKwogICAgIC8qIGluc2VydCBvdXRwdXQgcGFkcyAqLwogICAgIGlm IChlYnVyMTI4LT5kb192aWRlbykgewogICAgICAgICBwYWQgPSAoQVZGaWx0ZXJQYWQpewpAQCAt NjAwLDYgKzYxOCwxMiBAQCBzdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQg KmN0eCkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0 ZXJDb250ZXh0ICpjdHgpCit7CisgICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnBy aXY7CisgICAgcmV0dXJuIGluaXRfZWJ1cjEyOChjdHgsIGVidXIxMjgpOworfQorCiAjZGVmaW5l IEhJU1RfUE9TKHBvd2VyKSAoaW50KSgoKHBvd2VyKSAtIEFCU19USFJFUykgKiBISVNUX0dSQUlO KQogCiAvKiBsb3VkbmVzcyBhbmQgcG93ZXIgc2hvdWxkIGJlIHNldCBzdWNoIGFzIGxvdWRuZXNz ID0gLTAuNjkxICsKQEAgLTYyNywyNyArNjUxLDIxIEBAIHN0YXRpYyBpbnQgZ2F0ZV91cGRhdGUo c3RydWN0IGludGVncmF0b3IgKmludGVnLCBkb3VibGUgcG93ZXIsCiAgICAgcmV0dXJuIGdhdGVf aGlzdF9wb3M7CiB9CiAKLXN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5s aW5rLCBBVkZyYW1lICppbnNhbXBsZXMpCitzdGF0aWMgaW50IHRydWVfcGVha3NfZWJ1cjEyOChF QlVSMTI4Q29udGV4dCAqZWJ1cjEyOCwgY29uc3QgdWludDhfdCAqKnNhbXBsZXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfc2FtcGxlcykKIHsKLSAgICBpbnQgaSwgY2gs IGlkeF9pbnNhbXBsZSwgcmV0OwotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5k c3Q7Ci0gICAgRUJVUjEyOENvbnRleHQgKmVidXIxMjggPSBjdHgtPnByaXY7Ci0gICAgY29uc3Qg aW50IG5iX2NoYW5uZWxzID0gZWJ1cjEyOC0+bmJfY2hhbm5lbHM7Ci0gICAgY29uc3QgaW50IG5i X3NhbXBsZXMgID0gaW5zYW1wbGVzLT5uYl9zYW1wbGVzOwotICAgIGNvbnN0IGRvdWJsZSAqc2Ft cGxlcyA9IChkb3VibGUgKilpbnNhbXBsZXMtPmRhdGFbMF07Ci0gICAgQVZGcmFtZSAqcGljOwot CiAjaWYgQ09ORklHX1NXUkVTQU1QTEUKICAgICBpZiAoZWJ1cjEyOC0+cGVha19tb2RlICYgUEVB S19NT0RFX1RSVUVfUEVBS1MgJiYgZWJ1cjEyOC0+aWR4X2luc2FtcGxlID09IDApIHsKICAgICAg ICAgY29uc3QgZG91YmxlICpzd3Jfc2FtcGxlcyA9IGVidXIxMjgtPnN3cl9idWY7CisgICAgICAg IGNvbnN0IGludCBuYl9jaGFubmVscyA9IGVidXIxMjgtPm5iX2NoYW5uZWxzOwogICAgICAgICBp bnQgcmV0ID0gc3dyX2NvbnZlcnQoZWJ1cjEyOC0+c3dyX2N0eCwgKHVpbnQ4X3QqKikmZWJ1cjEy OC0+c3dyX2J1ZiwgMTkyMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg dWludDhfdCAqKilpbnNhbXBsZXMtPmRhdGEsIG5iX3NhbXBsZXMpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2FtcGxlcywgbmJfc2FtcGxlcyk7CiAgICAgICAgIGlmIChyZXQgPCAw KQogICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgZm9yIChjaCA9IDA7IGNoIDwgbmJf Y2hhbm5lbHM7IGNoKyspCisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVs czsgY2grKykKICAgICAgICAgICAgIGVidXIxMjgtPnRydWVfcGVha3NfcGVyX2ZyYW1lW2NoXSA9 IDAuMDsKLSAgICAgICAgZm9yIChpZHhfaW5zYW1wbGUgPSAwOyBpZHhfaW5zYW1wbGUgPCByZXQ7 IGlkeF9pbnNhbXBsZSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBuYl9jaGFu bmVsczsgY2grKykgeworICAgICAgICBmb3IgKGludCBpZHhfaW5zYW1wbGUgPSAwOyBpZHhfaW5z YW1wbGUgPCByZXQ7IGlkeF9pbnNhbXBsZSsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBjaCA9 IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKICAgICAgICAgICAgICAgICBlYnVyMTI4LT50 cnVlX3BlYWtzW2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3NbY2hdLCBmYWJzKCpzd3Jf c2FtcGxlcykpOwogICAgICAgICAgICAgICAgIGVidXIxMjgtPnRydWVfcGVha3NfcGVyX2ZyYW1l W2NoXSA9IEZGTUFYKGVidXIxMjgtPnRydWVfcGVha3NfcGVyX2ZyYW1lW2NoXSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWJzKCpz d3Jfc2FtcGxlcykpOwpAQCAtNjU2LDEwICs2NzQsMTQgQEAgc3RhdGljIGludCBmaWx0ZXJfZnJh bWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmluc2FtcGxlcykKICAgICAgICAgfQog ICAgIH0KICNlbmRpZgorICAgIHJldHVybiAwOworfQogCi0gICAgZm9yIChpZHhfaW5zYW1wbGUg PSBlYnVyMTI4LT5pZHhfaW5zYW1wbGU7IGlkeF9pbnNhbXBsZSA8IG5iX3NhbXBsZXM7IGlkeF9p bnNhbXBsZSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCBiaW5faWRfNDAwICA9IGVidXIxMjgtPmk0 MDAuY2FjaGVfcG9zOwotICAgICAgICBjb25zdCBpbnQgYmluX2lkXzMwMDAgPSBlYnVyMTI4LT5p MzAwMC5jYWNoZV9wb3M7CitzdGF0aWMgdm9pZCBwcm9jZXNzX2VidXIxMjgoRUJVUjEyOENvbnRl eHQgKmVidXIxMjgsIGNvbnN0IGRvdWJsZSAqc2FtcGxlcykKK3sKKyAgICBjb25zdCBpbnQgbmJf Y2hhbm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFubmVsczsKKyAgICBjb25zdCBpbnQgYmluX2lkXzQw MCAgPSBlYnVyMTI4LT5pNDAwLmNhY2hlX3BvczsKKyAgICBjb25zdCBpbnQgYmluX2lkXzMwMDAg PSBlYnVyMTI4LT5pMzAwMC5jYWNoZV9wb3M7CiAKICNkZWZpbmUgTU9WRV9UT19ORVhUX0NBQ0hF RF9FTlRSWSh0aW1lKSBkbyB7ICAgICAgICAgICAgICAgIFwKICAgICBlYnVyMTI4LT5pIyN0aW1l LmNhY2hlX3BvcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY3MCw0NyArNjky LDQ3IEBAIHN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZy YW1lICppbnNhbXBsZXMpCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCi0gICAgICAgIE1PVkVfVE9fTkVY VF9DQUNIRURfRU5UUlkoNDAwKTsKLSAgICAgICAgTU9WRV9UT19ORVhUX0NBQ0hFRF9FTlRSWSgz MDAwKTsKKyAgICBNT1ZFX1RPX05FWFRfQ0FDSEVEX0VOVFJZKDQwMCk7CisgICAgTU9WRV9UT19O RVhUX0NBQ0hFRF9FTlRSWSgzMDAwKTsKIAotICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBuYl9j aGFubmVsczsgY2grKykgewotICAgICAgICAgICAgZG91YmxlIGJpbjsKKyAgICBmb3IgKGludCBj aCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgZG91YmxlIGJpbjsKIAot ICAgICAgICAgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BF QUtTKQotICAgICAgICAgICAgICAgIGVidXIxMjgtPnNhbXBsZV9wZWFrc1tjaF0gPSBGRk1BWChl YnVyMTI4LT5zYW1wbGVfcGVha3NbY2hdLCBmYWJzKHNhbXBsZXNbaWR4X2luc2FtcGxlICogbmJf Y2hhbm5lbHMgKyBjaF0pKTsKKyAgICAgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtf TU9ERV9TQU1QTEVTX1BFQUtTKQorICAgICAgICAgICAgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2No XSA9IEZGTUFYKGVidXIxMjgtPnNhbXBsZV9wZWFrc1tjaF0sIGZhYnMoc2FtcGxlc1tjaF0pKTsK IAotICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDNdID0gc2FtcGxlc1tpZHhfaW5zYW1wbGUg KiBuYl9jaGFubmVscyArIGNoXTsgLy8gc2V0IFhbaV0KKyAgICAgICAgZWJ1cjEyOC0+eFtjaCAq IDNdID0gc2FtcGxlc1tjaF07IC8vIHNldCBYW2ldCiAKLSAgICAgICAgICAgIGlmICghZWJ1cjEy OC0+Y2hfd2VpZ2h0aW5nW2NoXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg aWYgKCFlYnVyMTI4LT5jaF93ZWlnaHRpbmdbY2hdKQorICAgICAgICAgICAgY29udGludWU7CiAK LSAgICAgICAgICAgIC8qIFlbaV0gPSBYW2ldKmIwICsgWFtpLTFdKmIxICsgWFtpLTJdKmIyIC0g WVtpLTFdKmExIC0gWVtpLTJdKmEyICovCi0jZGVmaW5lIEZJTFRFUihZLCBYLCBOVU0sIERFTikg ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgIGRvdWJsZSAqZHN0ID0gZWJ1cjEyOC0+WSArIGNoKjM7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG91YmxlICpzcmMgPSBlYnVyMTI4LT5Y ICsgY2gqMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg ICBkc3RbMl0gPSBkc3RbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRzdFsxXSA9IGRzdFswXTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZHN0 WzBdID0gc3JjWzBdKk5VTVswXSArIHNyY1sxXSpOVU1bMV0gKyBzcmNbMl0qTlVNWzJdICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZHN0WzFdKkRF TlsxXSAtIGRzdFsyXSpERU5bMl07ICAgICAgICAgICAgIFwKKyAgICAgICAgLyogWVtpXSA9IFhb aV0qYjAgKyBYW2ktMV0qYjEgKyBYW2ktMl0qYjIgLSBZW2ktMV0qYTEgLSBZW2ktMl0qYTIgKi8K KyNkZWZpbmUgRklMVEVSKFksIFgsIE5VTSwgREVOKSBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvdWJsZSAqZHN0ID0gZWJ1cjEyOC0+WSAr IGNoKjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkb3Vi bGUgKnNyYyA9IGVidXIxMjgtPlggKyBjaCozOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgZHN0WzJdID0gZHN0WzFdOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRzdFsxXSA9IGRzdFswXTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICBkc3RbMF0gPSBzcmNbMF0qTlVNWzBdICsgc3JjWzFdKk5VTVsxXSArIHNyY1syXSpOVU1b Ml0gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGRzdFsx XSpERU5bMV0gLSBkc3RbMl0qREVOWzJdOyAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCi0g ICAgICAgICAgICAvLyBUT0RPOiBtZXJnZSBib3RoIGZpbHRlcnMgaW4gb25lPwotICAgICAgICAg ICAgRklMVEVSKHksIHgsIGVidXIxMjgtPnByZV9iLCBlYnVyMTI4LT5wcmVfYSk7ICAvLyBhcHBs eSBwcmUtZmlsdGVyCi0gICAgICAgICAgICBlYnVyMTI4LT54W2NoICogMyArIDJdID0gZWJ1cjEy OC0+eFtjaCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGVidXIxMjgtPnhbY2ggKiAzICsgMV0gPSBl YnVyMTI4LT54W2NoICogMyAgICBdOwotICAgICAgICAgICAgRklMVEVSKHosIHksIGVidXIxMjgt PnJsYl9iLCBlYnVyMTI4LT5ybGJfYSk7ICAvLyBhcHBseSBSTEItZmlsdGVyCisgICAgICAgIC8v IFRPRE86IG1lcmdlIGJvdGggZmlsdGVycyBpbiBvbmU/CisgICAgICAgIEZJTFRFUih5LCB4LCBl YnVyMTI4LT5wcmVfYiwgZWJ1cjEyOC0+cHJlX2EpOyAgLy8gYXBwbHkgcHJlLWZpbHRlcgorICAg ICAgICBlYnVyMTI4LT54W2NoICogMyArIDJdID0gZWJ1cjEyOC0+eFtjaCAqIDMgKyAxXTsKKyAg ICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAxXSA9IGVidXIxMjgtPnhbY2ggKiAzICAgIF07Cisg ICAgICAgIEZJTFRFUih6LCB5LCBlYnVyMTI4LT5ybGJfYiwgZWJ1cjEyOC0+cmxiX2EpOyAgLy8g YXBwbHkgUkxCLWZpbHRlcgogCi0gICAgICAgICAgICBiaW4gPSBlYnVyMTI4LT56W2NoICogM10g KiBlYnVyMTI4LT56W2NoICogM107CisgICAgICAgIGJpbiA9IGVidXIxMjgtPnpbY2ggKiAzXSAq IGVidXIxMjgtPnpbY2ggKiAzXTsKIAotICAgICAgICAgICAgLyogYWRkIHRoZSBuZXcgdmFsdWUs IGFuZCBsaW1pdCB0aGUgc3VtIHRvIHRoZSBjYWNoZSBzaXplICg0MDBtcyBvciAzcykKLSAgICAg ICAgICAgICAqIGJ5IHJlbW92aW5nIHRoZSBvbGRlc3Qgb25lICovCi0gICAgICAgICAgICBlYnVy MTI4LT5pNDAwLnN1bSBbY2hdID0gZWJ1cjEyOC0+aTQwMC5zdW0gW2NoXSArIGJpbiAtIGVidXIx MjgtPmk0MDAuY2FjaGUgW2NoXVtiaW5faWRfNDAwXTsKLSAgICAgICAgICAgIGVidXIxMjgtPmkz MDAwLnN1bVtjaF0gPSBlYnVyMTI4LT5pMzAwMC5zdW1bY2hdICsgYmluIC0gZWJ1cjEyOC0+aTMw MDAuY2FjaGVbY2hdW2Jpbl9pZF8zMDAwXTsKKyAgICAgICAgLyogYWRkIHRoZSBuZXcgdmFsdWUs IGFuZCBsaW1pdCB0aGUgc3VtIHRvIHRoZSBjYWNoZSBzaXplICg0MDBtcyBvciAzcykKKyAgICAg ICAgICogYnkgcmVtb3ZpbmcgdGhlIG9sZGVzdCBvbmUgKi8KKyAgICAgICAgZWJ1cjEyOC0+aTQw MC5zdW0gW2NoXSA9IGVidXIxMjgtPmk0MDAuc3VtIFtjaF0gKyBiaW4gLSBlYnVyMTI4LT5pNDAw LmNhY2hlIFtjaF1bYmluX2lkXzQwMF07CisgICAgICAgIGVidXIxMjgtPmkzMDAwLnN1bVtjaF0g PSBlYnVyMTI4LT5pMzAwMC5zdW1bY2hdICsgYmluIC0gZWJ1cjEyOC0+aTMwMDAuY2FjaGVbY2hd W2Jpbl9pZF8zMDAwXTsKIAotICAgICAgICAgICAgLyogb3ZlcnJpZGUgb2xkIGNhY2hlIGVudHJ5 IHdpdGggdGhlIG5ldyB2YWx1ZSAqLwotICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBb Y2hdW2Jpbl9pZF80MDAgXSA9IGJpbjsKLSAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLmNhY2hl W2NoXVtiaW5faWRfMzAwMF0gPSBiaW47Ci0gICAgICAgIH0KKyAgICAgICAgLyogb3ZlcnJpZGUg b2xkIGNhY2hlIGVudHJ5IHdpdGggdGhlIG5ldyB2YWx1ZSAqLworICAgICAgICBlYnVyMTI4LT5p NDAwLmNhY2hlIFtjaF1bYmluX2lkXzQwMCBdID0gYmluOworICAgICAgICBlYnVyMTI4LT5pMzAw MC5jYWNoZVtjaF1bYmluX2lkXzMwMDBdID0gYmluOworICAgIH0KIAogI2RlZmluZSBGSU5EX1BF QUsoZ2xvYmFsLCBzcCwgcHR5cGUpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg aW50IGNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKQEAgLTcyMywxMTAgKzc0NSwxNDEgQEAgc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZG aWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmluc2FtcGxlcykKICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGls ZSAoMCkKIAotICAgICAgICBGSU5EX1BFQUsoZWJ1cjEyOC0+c2FtcGxlX3BlYWssIGVidXIxMjgt PnNhbXBsZV9wZWFrcywgU0FNUExFUyk7Ci0gICAgICAgIEZJTkRfUEVBSyhlYnVyMTI4LT50cnVl X3BlYWssICAgZWJ1cjEyOC0+dHJ1ZV9wZWFrcywgICBUUlVFKTsKKyAgICBGSU5EX1BFQUsoZWJ1 cjEyOC0+c2FtcGxlX3BlYWssIGVidXIxMjgtPnNhbXBsZV9wZWFrcywgU0FNUExFUyk7CisgICAg RklORF9QRUFLKGVidXIxMjgtPnRydWVfcGVhaywgICBlYnVyMTI4LT50cnVlX3BlYWtzLCAgIFRS VUUpOworfQogCi0gICAgICAgIC8qIEZvciBpbnRlZ3JhdGVkIGxvdWRuZXNzLCBnYXRpbmcgYmxv Y2tzIGFyZSA0MDBtcyBsb25nIHdpdGggNzUlCi0gICAgICAgICAqIG92ZXJsYXAgKHNlZSBCUy4x NzcwLTIgcDUpLCBzbyBhIHJlLWNvbXB1dGF0aW9uIGlzIG5lZWRlZCBlYWNoIDEwMG1zCi0gICAg ICAgICAqICg0ODAwIHNhbXBsZXMgYXQgNDhrSHopLiAqLwotICAgICAgICBpZiAoKytlYnVyMTI4 LT5zYW1wbGVfY291bnQgPT0gaW5saW5rLT5zYW1wbGVfcmF0ZSAvIDEwKSB7Ci0gICAgICAgICAg ICBkb3VibGUgbG91ZG5lc3NfNDAwLCBsb3VkbmVzc18zMDAwOwotICAgICAgICAgICAgZG91Ymxl IHBvd2VyXzQwMCA9IDFlLTEyLCBwb3dlcl8zMDAwID0gMWUtMTI7Ci0gICAgICAgICAgICBBVkZp bHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0gICAgICAgICAgICBjb25zdCBp bnQ2NF90IHB0cyA9IGluc2FtcGxlcy0+cHRzICsKLSAgICAgICAgICAgICAgICBhdl9yZXNjYWxl X3EoaWR4X2luc2FtcGxlLCAoQVZSYXRpb25hbCl7IDEsIGlubGluay0+c2FtcGxlX3JhdGUgfSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5vdXRwdXRzW2VidXIxMjgtPmRvX3Zp ZGVvXS0+dGltZV9iYXNlKTsKK3N0YXRpYyB2b2lkIGVidXIxMjhfbG91ZG5lc3MoQVZGaWx0ZXJM aW5rICppbmxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVCVVIxMjhDb250ZXh0 ICplYnVyMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKmw0MDAsIGRv dWJsZSAqbDMwMDApCit7CisgICAgY29uc3QgaW50IG5iX2NoYW5uZWxzID0gZWJ1cjEyOC0+bmJf Y2hhbm5lbHM7CisgICAgZG91YmxlIHBvd2VyXzQwMCA9IDFlLTEyLCBwb3dlcl8zMDAwID0gMWUt MTI7CisgICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91ZG5lc3NfMzAwMDsKIAotICAgICAgICAg ICAgZWJ1cjEyOC0+c2FtcGxlX2NvdW50ID0gMDsKKyAgICBlYnVyMTI4LT5zYW1wbGVfY291bnQg PSAwOwogCiAjZGVmaW5lIENPTVBVVEVfTE9VRE5FU1MobSwgdGltZSkgZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKGVidXIxMjgtPmkj I3RpbWUuZmlsbGVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAgICAgIC8qIHdlaWdodGluZyBzdW0gb2YgdGhlIGxhc3QgPHRpbWU+IG1z ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZvciAoY2gg PSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsg Y2grKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBw b3dlcl8jI3RpbWUgKz0gZWJ1cjEyOC0+Y2hfd2VpZ2h0aW5nW2NoXSAqIGVidXIxMjgtPmkjI3Rp bWUuc3VtW2NoXTsgICBcCiAgICAgICAgIHBvd2VyXyMjdGltZSAvPSBJIyN0aW1lIyNfQklOUyhp bmxpbmstPnNhbXBsZV9yYXRlKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCiAgICAgbG91ZG5lc3NfIyN0aW1lID0gTE9VRE5FU1MocG93ZXJf IyN0aW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxl ICgwKQogCi0gICAgICAgICAgICBDT01QVVRFX0xPVURORVNTKE0sICA0MDApOwotICAgICAgICAg ICAgQ09NUFVURV9MT1VETkVTUyhTLCAzMDAwKTsKKyAgICBDT01QVVRFX0xPVURORVNTKE0sICA0 MDApOworICAgIENPTVBVVEVfTE9VRE5FU1MoUywgMzAwMCk7CiAKLSAgICAgICAgICAgIC8qIElu dGVncmF0ZWQgbG91ZG5lc3MgKi8KKyAgICAvKiBJbnRlZ3JhdGVkIGxvdWRuZXNzICovCiAjZGVm aW5lIElfR0FURV9USFJFUyAtMTAgIC8vIGluaXRpYWxseSBkZWZpbmVkIHRvIC04IExVIGluIHRo ZSBmaXJzdCBFQlUgc3RhbmRhcmQKIAotICAgICAgICAgICAgaWYgKGxvdWRuZXNzXzQwMCA+PSBB QlNfVEhSRVMpIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgaW50ZWdyYXRlZF9zdW0gPSAwLjA7 Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgbmJfaW50ZWdyYXRlZCA9IDA7Ci0gICAgICAgICAg ICAgICAgaW50IGdhdGVfaGlzdF9wb3MgPSBnYXRlX3VwZGF0ZSgmZWJ1cjEyOC0+aTQwMCwgcG93 ZXJfNDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bG91ZG5lc3NfNDAwLCBJX0dBVEVfVEhSRVMpOwotCi0gICAgICAgICAgICAgICAgLyogY29tcHV0 ZSBpbnRlZ3JhdGVkIGxvdWRuZXNzIGJ5IHN1bW1pbmcgdGhlIGhpc3RvZ3JhbSB2YWx1ZXMKLSAg ICAgICAgICAgICAgICAgKiBhYm92ZSB0aGUgcmVsYXRpdmUgdGhyZXNob2xkICovCi0gICAgICAg ICAgICAgICAgZm9yIChpID0gZ2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0laRTsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG5iX3YgPSBlYnVyMTI4LT5pNDAwLmhp c3RvZ3JhbVtpXS5jb3VudDsKLSAgICAgICAgICAgICAgICAgICAgbmJfaW50ZWdyYXRlZCAgKz0g bmJfdjsKLSAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZF9zdW0gKz0gbmJfdiAqIGVidXIx MjgtPmk0MDAuaGlzdG9ncmFtW2ldLmVuZXJneTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgaWYgKG5iX2ludGVncmF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZWJ1cjEy OC0+aW50ZWdyYXRlZF9sb3VkbmVzcyA9IExPVURORVNTKGludGVncmF0ZWRfc3VtIC8gbmJfaW50 ZWdyYXRlZCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGR1YWwtbW9ubyBjb3JyZWN0aW9uICov Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuYl9jaGFubmVscyA9PSAxICYmIGVidXIxMjgtPmR1 YWxfbW9ubykgewotICAgICAgICAgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aW50ZWdyYXRlZF9s b3VkbmVzcyAtPSBlYnVyMTI4LT5wYW5fbGF3OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgfQorICAgIGlmIChsb3VkbmVzc180MDAgPj0gQUJTX1RIUkVTKSB7CisgICAg ICAgIGRvdWJsZSBpbnRlZ3JhdGVkX3N1bSA9IDAuMDsKKyAgICAgICAgdWludDY0X3QgbmJfaW50 ZWdyYXRlZCA9IDA7CisgICAgICAgIGludCBnYXRlX2hpc3RfcG9zID0gZ2F0ZV91cGRhdGUoJmVi dXIxMjgtPmk0MDAsIHBvd2VyXzQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb3VkbmVzc180MDAsIElfR0FURV9USFJFUyk7CisKKyAgICAgICAgLyogY29tcHV0 ZSBpbnRlZ3JhdGVkIGxvdWRuZXNzIGJ5IHN1bW1pbmcgdGhlIGhpc3RvZ3JhbSB2YWx1ZXMKKyAg ICAgICAgICogYWJvdmUgdGhlIHJlbGF0aXZlIHRocmVzaG9sZCAqLworICAgICAgICBmb3IgKGlu dCBpID0gZ2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0laRTsgaSsrKSB7CisgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBuYl92ID0gZWJ1cjEyOC0+aTQwMC5oaXN0b2dyYW1baV0uY291bnQ7Cisg ICAgICAgICAgICBuYl9pbnRlZ3JhdGVkICArPSBuYl92OworICAgICAgICAgICAgaW50ZWdyYXRl ZF9zdW0gKz0gbmJfdiAqIGVidXIxMjgtPmk0MDAuaGlzdG9ncmFtW2ldLmVuZXJneTsKKyAgICAg ICAgfQorICAgICAgICBpZiAobmJfaW50ZWdyYXRlZCkgeworICAgICAgICAgICAgZWJ1cjEyOC0+ aW50ZWdyYXRlZF9sb3VkbmVzcyA9IExPVURORVNTKGludGVncmF0ZWRfc3VtIC8gbmJfaW50ZWdy YXRlZCk7CisgICAgICAgICAgICAvKiBkdWFsLW1vbm8gY29ycmVjdGlvbiAqLworICAgICAgICAg ICAgaWYgKG5iX2NoYW5uZWxzID09IDEgJiYgZWJ1cjEyOC0+ZHVhbF9tb25vKSB7CisgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+aW50ZWdyYXRlZF9sb3VkbmVzcyAtPSBlYnVyMTI4LT5wYW5fbGF3 OwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICAvKiBMUkEg Ki8KKyAgICAvKiBMUkEgKi8KICNkZWZpbmUgTFJBX0dBVEVfVEhSRVMgLTIwCiAjZGVmaW5lIExS QV9MT1dFUl9QUkMgICAxMAogI2RlZmluZSBMUkFfSElHSEVSX1BSQyAgOTUKIAotICAgICAgICAg ICAgLyogWFhYOiBleGFtcGxlIGNvZGUgaW4gRUJVIDMzNDIgaXMgIj49IiBidXQgZm9ybXVsYSBp biBCUy4xNzcwCi0gICAgICAgICAgICAgKiBzcGVjcyBpcyAiPiIgKi8KLSAgICAgICAgICAgIGlm IChsb3VkbmVzc18zMDAwID49IEFCU19USFJFUykgewotICAgICAgICAgICAgICAgIHVpbnQ2NF90 IG5iX3Bvd2VycyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50IGdhdGVfaGlzdF9wb3MgPSBnYXRl X3VwZGF0ZSgmZWJ1cjEyOC0+aTMwMDAsIHBvd2VyXzMwMDAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3VkbmVzc18zMDAwLCBMUkFfR0FURV9USFJF Uyk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBnYXRlX2hpc3RfcG9zOyBpIDwgSElTVF9T SVpFOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIG5iX3Bvd2VycyArPSBlYnVyMTI4LT5pMzAw MC5oaXN0b2dyYW1baV0uY291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKG5iX3Bvd2Vycykgewot ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBuLCBuYl9wb3c7Ci0KLSAgICAgICAgICAgICAg ICAgICAgLyogZ2V0IGxvd2VyIGxvdWRuZXNzIHRvIGNvbnNpZGVyICovCi0gICAgICAgICAgICAg ICAgICAgIG4gPSAwOwotICAgICAgICAgICAgICAgICAgICBuYl9wb3cgPSBMUkFfTE9XRVJfUFJD ICogbmJfcG93ZXJzICogMC4wMSArIDAuNTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g Z2F0ZV9oaXN0X3BvczsgaSA8IEhJU1RfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBuICs9IGVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbVtpXS5jb3VudDsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChuID49IG5iX3BvdykgewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVidXIxMjgtPmxyYV9sb3cgPSBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1baV0ubG91ZG5l c3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv KiBnZXQgaGlnaGVyIGxvdWRuZXNzIHRvIGNvbnNpZGVyICovCi0gICAgICAgICAgICAgICAgICAg IG4gPSBuYl9wb3dlcnM7Ci0gICAgICAgICAgICAgICAgICAgIG5iX3BvdyA9IExSQV9ISUdIRVJf UFJDICogbmJfcG93ZXJzICogMC4wMSArIDAuNTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp ID0gSElTVF9TSVpFIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg IG4gLT0gRkZNSU4obiwgZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFtW2ldLmNvdW50KTsKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChuIDwgbmJfcG93KSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+bHJhX2hpZ2ggPSBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1baV0u bG91ZG5lc3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg ICAgICAvLyBYWFg6IHNob3cgbG93ICYgaGlnaCBvbiB0aGUgZ3JhcGg/Ci0gICAgICAgICAgICAg ICAgICAgIGVidXIxMjgtPmxvdWRuZXNzX3JhbmdlID0gZWJ1cjEyOC0+bHJhX2hpZ2ggLSBlYnVy MTI4LT5scmFfbG93OworICAgIC8qIFhYWDogZXhhbXBsZSBjb2RlIGluIEVCVSAzMzQyIGlzICI+ PSIgYnV0IGZvcm11bGEgaW4gQlMuMTc3MAorICAgICAqIHNwZWNzIGlzICI+IiAqLworICAgIGlm IChsb3VkbmVzc18zMDAwID49IEFCU19USFJFUykgeworICAgICAgICB1aW50NjRfdCBuYl9wb3dl cnMgPSAwOworICAgICAgICBpbnQgZ2F0ZV9oaXN0X3BvcyA9IGdhdGVfdXBkYXRlKCZlYnVyMTI4 LT5pMzAwMCwgcG93ZXJfMzAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb3VkbmVzc18zMDAwLCBMUkFfR0FURV9USFJFUyk7CisKKyAgICAgICAgZm9yIChpbnQg aSA9IGdhdGVfaGlzdF9wb3M7IGkgPCBISVNUX1NJWkU7IGkrKykKKyAgICAgICAgICAgIG5iX3Bv d2VycyArPSBlYnVyMTI4LT5pMzAwMC5oaXN0b2dyYW1baV0uY291bnQ7CisgICAgICAgIGlmIChu Yl9wb3dlcnMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG4sIG5iX3BvdzsKKworICAgICAgICAg ICAgLyogZ2V0IGxvd2VyIGxvdWRuZXNzIHRvIGNvbnNpZGVyICovCisgICAgICAgICAgICBuID0g MDsKKyAgICAgICAgICAgIG5iX3BvdyA9IExSQV9MT1dFUl9QUkMgKiBuYl9wb3dlcnMgKiAwLjAx ICsgMC41OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGdhdGVfaGlzdF9wb3M7IGkgPCBISVNU X1NJWkU7IGkrKykgeworICAgICAgICAgICAgICAgIG4gKz0gZWJ1cjEyOC0+aTMwMDAuaGlzdG9n cmFtW2ldLmNvdW50OworICAgICAgICAgICAgICAgIGlmIChuID49IG5iX3BvdykgeworICAgICAg ICAgICAgICAgICAgICBlYnVyMTI4LT5scmFfbG93ID0gZWJ1cjEyOC0+aTMwMDAuaGlzdG9ncmFt W2ldLmxvdWRuZXNzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8qIGR1YWwtbW9ubyBjb3JyZWN0aW9u ICovCi0gICAgICAgICAgICBpZiAobmJfY2hhbm5lbHMgPT0gMSAmJiBlYnVyMTI4LT5kdWFsX21v bm8pIHsKLSAgICAgICAgICAgICAgICBsb3VkbmVzc180MDAgLT0gZWJ1cjEyOC0+cGFuX2xhdzsK LSAgICAgICAgICAgICAgICBsb3VkbmVzc18zMDAwIC09IGVidXIxMjgtPnBhbl9sYXc7CisgICAg ICAgICAgICAvKiBnZXQgaGlnaGVyIGxvdWRuZXNzIHRvIGNvbnNpZGVyICovCisgICAgICAgICAg ICBuID0gbmJfcG93ZXJzOworICAgICAgICAgICAgbmJfcG93ID0gTFJBX0hJR0hFUl9QUkMgKiBu Yl9wb3dlcnMgKiAwLjAxICsgMC41OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IEhJU1RfU0la RSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgbiAtPSBGRk1JTihuLCBlYnVy MTI4LT5pMzAwMC5oaXN0b2dyYW1baV0uY291bnQpOworICAgICAgICAgICAgICAgIGlmIChuIDwg bmJfcG93KSB7CisgICAgICAgICAgICAgICAgICAgIGVidXIxMjgtPmxyYV9oaWdoID0gZWJ1cjEy OC0+aTMwMDAuaGlzdG9ncmFtW2ldLmxvdWRuZXNzOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFhY WDogc2hvdyBsb3cgJiBoaWdoIG9uIHRoZSBncmFwaD8KKyAgICAgICAgICAgIGVidXIxMjgtPmxv dWRuZXNzX3JhbmdlID0gZWJ1cjEyOC0+bHJhX2hpZ2ggLSBlYnVyMTI4LT5scmFfbG93OworICAg ICAgICB9CisgICAgfQorCisgICAgLyogZHVhbC1tb25vIGNvcnJlY3Rpb24gKi8KKyAgICBpZiAo bmJfY2hhbm5lbHMgPT0gMSAmJiBlYnVyMTI4LT5kdWFsX21vbm8pIHsKKyAgICAgICAgbG91ZG5l c3NfNDAwIC09IGVidXIxMjgtPnBhbl9sYXc7CisgICAgICAgIGxvdWRuZXNzXzMwMDAgLT0gZWJ1 cjEyOC0+cGFuX2xhdzsKKyAgICB9CisKKyAgICAqbDQwMCAgPSBsb3VkbmVzc180MDA7CisgICAg KmwzMDAwID0gbG91ZG5lc3NfMzAwMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZG aWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmluc2FtcGxlcykKK3sKKyAgICBpbnQgaWR4X2lu c2FtcGxlLCByZXQ7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKKyAg ICBFQlVSMTI4Q29udGV4dCAqZWJ1cjEyOCA9IGN0eC0+cHJpdjsKKyAgICBjb25zdCBpbnQgbmJf Y2hhbm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFubmVsczsKKyAgICBjb25zdCBpbnQgbmJfc2FtcGxl cyAgPSBpbnNhbXBsZXMtPm5iX3NhbXBsZXM7CisgICAgY29uc3QgZG91YmxlICpzYW1wbGVzID0g KGNvbnN0IGRvdWJsZSAqKWluc2FtcGxlcy0+ZGF0YVswXTsKKyAgICBBVkZyYW1lICpwaWM7CisK KyAgICByZXQgPSB0cnVlX3BlYWtzX2VidXIxMjgoZWJ1cjEyOCwgKGNvbnN0IHVpbnQ4X3QgKiop aW5zYW1wbGVzLT5kYXRhLCBuYl9zYW1wbGVzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIGZvciAoaWR4X2luc2FtcGxlID0gZWJ1cjEyOC0+aWR4X2luc2Ft cGxlOyBpZHhfaW5zYW1wbGUgPCBuYl9zYW1wbGVzOyBpZHhfaW5zYW1wbGUrKykgeworICAgICAg ICBwcm9jZXNzX2VidXIxMjgoZWJ1cjEyOCwgc2FtcGxlcyArIGlkeF9pbnNhbXBsZSAqIG5iX2No YW5uZWxzKTsKKworICAgICAgICAvKiBGb3IgaW50ZWdyYXRlZCBsb3VkbmVzcywgZ2F0aW5nIGJs b2NrcyBhcmUgNDAwbXMgbG9uZyB3aXRoIDc1JQorICAgICAgICAgKiBvdmVybGFwIChzZWUgQlMu MTc3MC0yIHA1KSwgc28gYSByZS1jb21wdXRhdGlvbiBpcyBuZWVkZWQgZWFjaCAxMDBtcworICAg ICAgICAgKiAoNDgwMCBzYW1wbGVzIGF0IDQ4a0h6KS4gKi8KKyAgICAgICAgaWYgKCsrZWJ1cjEy OC0+c2FtcGxlX2NvdW50ID09IGlubGluay0+c2FtcGxlX3JhdGUgLyAxMCkgeworICAgICAgICAg ICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91ZG5lc3NfMzAwMDsKKyAgICAgICAgICAgIEFWRmls dGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKyAgICAgICAgICAgIGNvbnN0IGlu dDY0X3QgcHRzID0gaW5zYW1wbGVzLT5wdHMgKworICAgICAgICAgICAgICAgIGF2X3Jlc2NhbGVf cShpZHhfaW5zYW1wbGUsIChBVlJhdGlvbmFsKXsgMSwgaW5saW5rLT5zYW1wbGVfcmF0ZSB9LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm91dHB1dHNbZWJ1cjEyOC0+ZG9fdmlk ZW9dLT50aW1lX2Jhc2UpOworCisgICAgICAgICAgICBlYnVyMTI4X2xvdWRuZXNzKGlubGluaywg ZWJ1cjEyOCwgJmxvdWRuZXNzXzQwMCwgJmxvdWRuZXNzXzMwMDApOworCiAjZGVmaW5lIExPR19G TVQgIlRBUkdFVDolZCBMVUZTICAgIE06JTYuMWYgUzolNi4xZiAgICAgSTolNi4xZiAlcyAgICAg ICBMUkE6JTYuMWYgTFUiCiAKICAgICAgICAgICAgIC8qIHB1c2ggb25lIHZpZGVvIGZyYW1lICov CkBAIC05MTAsNyArOTYzLDcgQEAgc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5r ICppbmxpbmssIEFWRnJhbWUgKmluc2FtcGxlcykKICAgICBpZiAoZWJ1cjEyOC0+cGVha19tb2Rl ICYgUEVBS19NT0RFXyAjIyBwdHlwZSAjIyBfUEVBS1MpIHsgICAgICAgICAgICAgICBcCiAgICAg ICAgIGRvdWJsZSBtYXhfcGVhayA9IDAuMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAogICAgICAgICBjaGFyIGtleVs2NF07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZm9yIChjaCA9 IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgc25wcmludGYoa2V5LCBzaXpl b2Yoa2V5KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg ICAgICAgICAgICAgIE1FVEFfUFJFRklYIEFWX1NUUklOR0lGWShuYW1lKSAiX3BlYWtzX2NoJWQi LCBjaCk7ICAgICBcCiAgICAgICAgICAgICBtYXhfcGVhayA9IGZtYXgobWF4X3BlYWssIGVidXIx MjgtPm5hbWUjI19wZWFrc1tjaF0pOyAgICAgICAgICAgXApAQCAtOTQ5LDcgKzEwMDIsNyBAQCBz dGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5z YW1wbGVzKQogI2RlZmluZSBQUklOVF9QRUFLUyhzdHIsIHNwLCBwdHlwZSkgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtf TU9ERV8gIyMgcHR5cGUgIyMgX1BFQUtTKSB7ICAgICAgIFwKICAgICAgICAgYXZfbG9nKGN0eCwg ZWJ1cjEyOC0+bG9nbGV2ZWwsICIgICIgc3RyICI6Iik7ICAgICAgICAgICAgICAgXAotICAgICAg ICBmb3IgKGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykg ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGF2X2xvZyhjdHgsIGVidXIxMjgtPmxv Z2xldmVsLCAiICU1LjFmIiwgREJGUyhzcFtjaF0pKTsgXAogICAgICAgICBhdl9sb2coY3R4LCBl YnVyMTI4LT5sb2dsZXZlbCwgIiBkQkZTIik7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKQEAgLTEwNDcsNiArMTEwMCwzNSBAQCBzdGF0aWMgaW50IHF1ZXJ5X2Zvcm1hdHMoQVZG aWx0ZXJDb250ZXh0ICpjdHgpCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBhdl9jb2xkIHZv aWQgdW5pbml0X2VidXIxMjgoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEVCVVIxMjhDb250ZXh0ICpl YnVyMTI4KQoreworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT55X2xpbmVfcmVmKTsKKyAgICBhdl9m cmVlcCgmZWJ1cjEyOC0+eCk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnkpOworICAgIGF2X2Zy ZWVwKCZlYnVyMTI4LT56KTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+Y2hfd2VpZ2h0aW5nKTsK KyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+dHJ1ZV9wZWFrcyk7CisgICAgYXZfZnJlZXAoJmVidXIx MjgtPnNhbXBsZV9wZWFrcyk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnRydWVfcGVha3NfcGVy X2ZyYW1lKTsKKyAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTQwMC5zdW0pOworICAgIGF2X2ZyZWVw KCZlYnVyMTI4LT5pMzAwMC5zdW0pOworICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLmhpc3Rv Z3JhbSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAwLmhpc3RvZ3JhbSk7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBlYnVyMTI4LT5uYl9jaGFubmVsczsgaSsrKSB7CisgICAgICAgIGlm IChlYnVyMTI4LT5pNDAwLmNhY2hlKQorICAgICAgICAgICAgYXZfZnJlZXAoJmVidXIxMjgtPmk0 MDAuY2FjaGVbaV0pOworICAgICAgICBpZiAoZWJ1cjEyOC0+aTMwMDAuY2FjaGUpCisgICAgICAg ICAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuY2FjaGVbaV0pOworICAgIH0KKyAgICBhdl9m cmVlcCgmZWJ1cjEyOC0+aTQwMC5jYWNoZSk7CisgICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAw LmNhY2hlKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZlYnVyMTI4LT5vdXRwaWNyZWYpOworI2lmIENP TkZJR19TV1JFU0FNUExFCisgICAgYXZfZnJlZXAoJmVidXIxMjgtPnN3cl9idWYpOworICAgIHN3 cl9mcmVlKCZlYnVyMTI4LT5zd3JfY3R4KTsKKyNlbmRpZgorfQorCiBzdGF0aWMgYXZfY29sZCB2 b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKIHsKICAgICBFQlVSMTI4Q29udGV4dCAq ZWJ1cjEyOCA9IGN0eC0+cHJpdjsKQEAgLTEwODUsMzEgKzExNjcsNyBAQCBzdGF0aWMgYXZfY29s ZCB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICBhdl9sb2coY3R4LCBBVl9M T0dfSU5GTywgIlxuIik7CiAgICAgfQogCi0gICAgYXZfZnJlZXAoJmVidXIxMjgtPnlfbGluZV9y ZWYpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT54KTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+ eSk7Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPnopOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5j aF93ZWlnaHRpbmcpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT50cnVlX3BlYWtzKTsKLSAgICBh dl9mcmVlcCgmZWJ1cjEyOC0+c2FtcGxlX3BlYWtzKTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+ dHJ1ZV9wZWFrc19wZXJfZnJhbWUpOwotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLnN1bSk7 Ci0gICAgYXZfZnJlZXAoJmVidXIxMjgtPmkzMDAwLnN1bSk7Ci0gICAgYXZfZnJlZXAoJmVidXIx MjgtPmk0MDAuaGlzdG9ncmFtKTsKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+aTMwMDAuaGlzdG9n cmFtKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGVidXIxMjgtPm5iX2NoYW5uZWxzOyBpKysp IHsKLSAgICAgICAgaWYgKGVidXIxMjgtPmk0MDAuY2FjaGUpCi0gICAgICAgICAgICBhdl9mcmVl cCgmZWJ1cjEyOC0+aTQwMC5jYWNoZVtpXSk7Ci0gICAgICAgIGlmIChlYnVyMTI4LT5pMzAwMC5j YWNoZSkKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pMzAwMC5jYWNoZVtpXSk7Ci0g ICAgfQotICAgIGF2X2ZyZWVwKCZlYnVyMTI4LT5pNDAwLmNhY2hlKTsKLSAgICBhdl9mcmVlcCgm ZWJ1cjEyOC0+aTMwMDAuY2FjaGUpOwotICAgIGF2X2ZyYW1lX2ZyZWUoJmVidXIxMjgtPm91dHBp Y3JlZik7Ci0jaWYgQ09ORklHX1NXUkVTQU1QTEUKLSAgICBhdl9mcmVlcCgmZWJ1cjEyOC0+c3dy X2J1Zik7Ci0gICAgc3dyX2ZyZWUoJmVidXIxMjgtPnN3cl9jdHgpOwotI2VuZGlmCisgICAgdW5p bml0X2VidXIxMjgoY3R4LCBlYnVyMTI4KTsKIH0KIAogc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFk IGVidXIxMjhfaW5wdXRzW10gPSB7CkBAIC0xMTMzLDMgKzExOTEsMzQzIEBAIGNvbnN0IEFWRmls dGVyIGZmX2FmX2VidXIxMjggPSB7CiAgICAgLnByaXZfY2xhc3MgICAgPSAmZWJ1cjEyOF9jbGFz cywKICAgICAuZmxhZ3MgICAgICAgICA9IEFWRklMVEVSX0ZMQUdfRFlOQU1JQ19PVVRQVVRTLAog fTsKKwordHlwZWRlZiBzdHJ1Y3QgTG91ZE5vcm1Db250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNz ICpjbGFzczsKKyAgICBkb3VibGUgdGFyZ2V0X2k7CisgICAgZG91YmxlIHRhcmdldF9scmE7Cisg ICAgZG91YmxlIHRhcmdldF90cDsKKyAgICBkb3VibGUgbWVhc3VyZWRfaTsKKyAgICBkb3VibGUg bWVhc3VyZWRfbHJhOworICAgIGRvdWJsZSBtZWFzdXJlZF90cDsKKyAgICBkb3VibGUgbWVhc3Vy ZWRfdGhyZXNoOworICAgIGRvdWJsZSBvZmZzZXQ7CisgICAgaW50IGxpbmVhcl9tb2RlOworICAg IGludCBkdWFsX21vbm87CisgICAgZW51bSBQcmludEZvcm1hdCBwcmludF9mb3JtYXQ7CisKKyAg ICBpbnQgbmJfY2hhbm5lbHM7CisgICAgaW50IG5iX3NhbXBsZXM7CisKKyAgICBBVkZyYW1lICpp bnNhbXBsZXM7CisKKyAgICBFQlVSMTI4Q29udGV4dCByMTI4X2luOworICAgIEVCVVIxMjhDb250 ZXh0IHIxMjhfb3V0OworfSBMb3VkTm9ybUNvbnRleHQ7CisKK3N0YXRpYyBhdl9jb2xkIGludCBs b3Vkbm9ybV9pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIExvdWROb3JtQ29udGV4 dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gaW5pdF9lYnVyMTI4 KGN0eCwgJnMtPnIxMjhfaW4pOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworICAgIHJldCA9IGluaXRfZWJ1cjEyOChjdHgsICZzLT5yMTI4X291dCk7CisgICAgaWYgKHJl dCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAocy0+bGluZWFyX21vZGUpIHsK KyAgICAgICAgZG91YmxlIG9mZnNldCwgb2Zmc2V0X3RwOworICAgICAgICBvZmZzZXQgICAgPSBz LT50YXJnZXRfaSAtIHMtPm1lYXN1cmVkX2k7CisgICAgICAgIG9mZnNldF90cCA9IHMtPm1lYXN1 cmVkX3RwICsgb2Zmc2V0OworCisgICAgICAgIGlmIChzLT5tZWFzdXJlZF90cCAhPSA5OSAmJiBz LT5tZWFzdXJlZF90aHJlc2ggIT0gLTcwICYmIHMtPm1lYXN1cmVkX2xyYSAhPSAwICYmIHMtPm1l YXN1cmVkX2kgIT0gMCkgeworICAgICAgICAgICAgaWYgKChvZmZzZXRfdHAgPD0gcy0+dGFyZ2V0 X3RwKSAmJiAocy0+bWVhc3VyZWRfbHJhIDw9IHMtPnRhcmdldF9scmEpKSB7CisgICAgICAgICAg ICAgICAgcy0+b2Zmc2V0ID0gcG93KDEwLiwgb2Zmc2V0IC8gMjAuKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHMtPmxpbmVhcl9tb2RlID0gMDsKKyAgICAg ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvdWRub3JtX3F1 ZXJ5X2Zvcm1hdHMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgTG91ZE5vcm1Db250ZXh0 ICpzID0gY3R4LT5wcml2OworICAgIHN0YXRpYyBjb25zdCBpbnQgaW5wdXRfc3JhdGVbXSA9IHsx OTIwMDAsIC0xfTsKKyAgICBzdGF0aWMgY29uc3QgZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVf Zm10c1tdID0geworICAgICAgICAgICAgQVZfU0FNUExFX0ZNVF9EQkwsCisgICAgICAgICAgICBB Vl9TQU1QTEVfRk1UX05PTkUKKyAgICB9OworICAgIGludCByZXQgPSBmZl9zZXRfY29tbW9uX2Fs bF9jaGFubmVsX2NvdW50cyhjdHgpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgcmV0ID0gZmZfc2V0X2NvbW1vbl9mb3JtYXRzX2Zyb21fbGlzdChjdHgsIHNh bXBsZV9mbXRzKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAg IGlmIChzLT5saW5lYXJfbW9kZSkgeworICAgICAgICByZXR1cm4gZmZfc2V0X2NvbW1vbl9hbGxf c2FtcGxlcmF0ZXMoY3R4KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmZfc2V0X2Nv bW1vbl9zYW1wbGVyYXRlc19mcm9tX2xpc3QoY3R4LCBpbnB1dF9zcmF0ZSk7CisgICAgfQorfQor CitzdGF0aWMgYXZfY29sZCB2b2lkIGxvdWRub3JtX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0 eCkKK3sKKyAgICBMb3VkTm9ybUNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgRUJVUjEyOENv bnRleHQgKnIxMjhfb3V0ID0gJnMtPnIxMjhfb3V0OworICAgIEVCVVIxMjhDb250ZXh0ICpyMTI4 X2luID0gJnMtPnIxMjhfaW47CisKKyAgICBpZiAocy0+bmJfY2hhbm5lbHMgPiAwKSB7CisgICAg c3dpdGNoIChzLT5wcmludF9mb3JtYXQpIHsKKyAgICBjYXNlIE5PTkU6CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBKU09OOgorICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywKKyAg ICAgICAgICAgICJcbntcbiIKKyAgICAgICAgICAgICJcdFwiaW5wdXRfaVwiIDogXCIlLjJmXCIs XG4iCisgICAgICAgICAgICAiXHRcImlucHV0X3RwXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAg ICAgICJcdFwiaW5wdXRfbHJhXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAgICAgICJcdFwiaW5w dXRfdGhyZXNoXCIgOiBcIiUuMmZcIixcbiIKKyAgICAgICAgICAgICJcdFwib3V0cHV0X2lcIiA6 IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0XCJvdXRwdXRfdHBcIiA6IFwiJSsuMmZcIixc biIKKyAgICAgICAgICAgICJcdFwib3V0cHV0X2xyYVwiIDogXCIlLjJmXCIsXG4iCisgICAgICAg ICAgICAiXHRcIm91dHB1dF90aHJlc2hcIiA6IFwiJS4yZlwiLFxuIgorICAgICAgICAgICAgIlx0 XCJub3JtYWxpemF0aW9uX3R5cGVcIiA6IFwiJXNcIixcbiIKKyAgICAgICAgICAgICJcdFwidGFy Z2V0X29mZnNldFwiIDogXCIlLjJmXCJcbiIKKyAgICAgICAgICAgICJ9XG4iLAorICAgICAgICAg ICAgcjEyOF9pbi0+aW50ZWdyYXRlZF9sb3VkbmVzcywKKyAgICAgICAgICAgIHIxMjhfaW4tPnRy dWVfcGVhaywKKyAgICAgICAgICAgIHIxMjhfaW4tPmxvdWRuZXNzX3JhbmdlLAorICAgICAgICAg ICAgcjEyOF9pbi0+aTMwMDAucmVsX3RocmVzaG9sZCwKKyAgICAgICAgICAgIHIxMjhfb3V0LT5p bnRlZ3JhdGVkX2xvdWRuZXNzLAorICAgICAgICAgICAgcjEyOF9vdXQtPnRydWVfcGVhaywKKyAg ICAgICAgICAgIHIxMjhfb3V0LT5sb3VkbmVzc19yYW5nZSwKKyAgICAgICAgICAgIHIxMjhfb3V0 LT5pMzAwMC5yZWxfdGhyZXNob2xkLAorICAgICAgICAgICAgcy0+bGluZWFyX21vZGUgPyAibGlu ZWFyIiA6ICJkeW5hbWljIiwKKyAgICAgICAgICAgIHMtPnRhcmdldF9pIC0gcjEyOF9vdXQtPmlu dGVncmF0ZWRfbG91ZG5lc3MKKyAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IFNVTU1BUlk6CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAorICAgICAgICAgICAg IlxuIgorICAgICAgICAgICAgIklucHV0IEludGVncmF0ZWQ6ICAgJSs2LjFmIExVRlNcbiIKKyAg ICAgICAgICAgICJJbnB1dCBUcnVlIFBlYWs6ICAgICUrNi4xZiBkQlRQXG4iCisgICAgICAgICAg ICAiSW5wdXQgTFJBOiAgICAgICAgICAlNi4xZiBMVVxuIgorICAgICAgICAgICAgIklucHV0IFRo cmVzaG9sZDogICAgJSs2LjFmIExVRlNcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg ICJPdXRwdXQgSW50ZWdyYXRlZDogICUrNi4xZiBMVUZTXG4iCisgICAgICAgICAgICAiT3V0cHV0 IFRydWUgUGVhazogICAlKzYuMWYgZEJUUFxuIgorICAgICAgICAgICAgIk91dHB1dCBMUkE6ICAg ICAgICAgJTYuMWYgTFVcbiIKKyAgICAgICAgICAgICJPdXRwdXQgVGhyZXNob2xkOiAgICUrNi4x ZiBMVUZTXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiTm9ybWFsaXphdGlvbiBU eXBlOiAgICVzXG4iCisgICAgICAgICAgICAiVGFyZ2V0IE9mZnNldDogICAgICAlKzYuMWYgTFVc biIsCisgICAgICAgICAgICByMTI4X2luLT5pbnRlZ3JhdGVkX2xvdWRuZXNzLAorICAgICAgICAg ICAgcjEyOF9pbi0+dHJ1ZV9wZWFrLAorICAgICAgICAgICAgcjEyOF9pbi0+bG91ZG5lc3NfcmFu Z2UsCisgICAgICAgICAgICByMTI4X2luLT5pMzAwMC5yZWxfdGhyZXNob2xkLAorICAgICAgICAg ICAgcjEyOF9vdXQtPmludGVncmF0ZWRfbG91ZG5lc3MsCisgICAgICAgICAgICByMTI4X291dC0+ dHJ1ZV9wZWFrLAorICAgICAgICAgICAgcjEyOF9vdXQtPmxvdWRuZXNzX3JhbmdlLAorICAgICAg ICAgICAgcjEyOF9vdXQtPmkzMDAwLnJlbF90aHJlc2hvbGQsCisgICAgICAgICAgICBzLT5saW5l YXJfbW9kZSA/ICJMaW5lYXIiIDogIkR5bmFtaWMiLAorICAgICAgICAgICAgcy0+dGFyZ2V0X2kg LSByMTI4X291dC0+aW50ZWdyYXRlZF9sb3VkbmVzcworICAgICAgICApOworICAgICAgICBicmVh azsKKyAgICB9CisgICAgfQorCisgICAgdW5pbml0X2VidXIxMjgoY3R4LCAmcy0+cjEyOF9pbik7 CisgICAgdW5pbml0X2VidXIxMjgoY3R4LCAmcy0+cjEyOF9vdXQpOworfQorCitzdGF0aWMgaW50 IGxvdWRub3JtX2NvbmZpZ19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKK3sKKyAgICBBVkZp bHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAgIExvdWROb3JtQ29udGV4dCAqcyA9 IGN0eC0+cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgcy0+bmJfc2FtcGxlcyA9IEZGTUFYKGlu bGluay0+c2FtcGxlX3JhdGUgLyAxMCwgMSk7CisKKyAgICByZXQgPSBjb25maWdfYXVkaW9faW4o aW5saW5rLCAmcy0+cjEyOF9pbik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiBy ZXQ7CisKKyAgICByZXQgPSBjb25maWdfYXVkaW9faW4oaW5saW5rLCAmcy0+cjEyOF9vdXQpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbG91ZG5vcm1fY29uZmlnX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxp bmspCit7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgTG91 ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQ7CisKKyAgICBzLT5uYl9j aGFubmVscyA9IG91dGxpbmstPmNoX2xheW91dC5uYl9jaGFubmVsczsKKyAgICBzLT5yMTI4X291 dC5wZWFrX21vZGUgPSBQRUFLX01PREVfVFJVRV9QRUFLUzsKKyAgICBzLT5yMTI4X2luLnBlYWtf bW9kZSA9IFBFQUtfTU9ERV9UUlVFX1BFQUtTOworCisgICAgcmV0ID0gY29uZmlnX2F1ZGlvX291 dChvdXRsaW5rLCAmcy0+cjEyOF9pbik7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biByZXQ7CisKKyAgICByZXQgPSBjb25maWdfYXVkaW9fb3V0KG91dGxpbmssICZzLT5yMTI4X291 dCk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCBsb3Vkbm9ybV9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpp bmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5r LT5kc3Q7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAg IExvdWROb3JtQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBFQlVSMTI4Q29udGV4dCAqcjEy OF9vdXQgPSAmcy0+cjEyOF9vdXQ7CisgICAgRUJVUjEyOENvbnRleHQgKnIxMjhfaW4gPSAmcy0+ cjEyOF9pbjsKKyAgICBjb25zdCBpbnQgbmJfY2hhbm5lbHMgPSBzLT5uYl9jaGFubmVsczsKKyAg ICBjb25zdCBpbnQgbmJfc2FtcGxlcyAgPSBpbi0+bmJfc2FtcGxlczsKKyAgICBjb25zdCBkb3Vi bGUgKnNhbXBsZXMgPSAoY29uc3QgZG91YmxlICopaW4tPmRhdGFbMF07CisgICAgQVZGcmFtZSAq b3V0OworICAgIGludCByZXQ7CisKKyAgICByZXQgPSB0cnVlX3BlYWtzX2VidXIxMjgocjEyOF9p biwgKGNvbnN0IHVpbnQ4X3QgKiopaW4tPmRhdGEsIG5iX3NhbXBsZXMpOworICAgIGlmIChyZXQg PCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgZm9yIChpbnQgaWR4X2luc2FtcGxlID0g cjEyOF9pbi0+aWR4X2luc2FtcGxlOyBpZHhfaW5zYW1wbGUgPCBuYl9zYW1wbGVzOyBpZHhfaW5z YW1wbGUrKykgeworICAgICAgICBwcm9jZXNzX2VidXIxMjgocjEyOF9pbiwgc2FtcGxlcyArIGlk eF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzKTsKKyAgICAgICAgaWYgKCsrcjEyOF9pbi0+c2FtcGxl X2NvdW50ID09IGlubGluay0+c2FtcGxlX3JhdGUgLyAxMCkgeworICAgICAgICAgICAgZG91Ymxl IGxvdWRuZXNzXzQwMCwgbG91ZG5lc3NfMzAwMDsKKyAgICAgICAgICAgIGVidXIxMjhfbG91ZG5l c3MoaW5saW5rLCByMTI4X2luLCAmbG91ZG5lc3NfNDAwLCAmbG91ZG5lc3NfMzAwMCk7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByMTI4X2luLT5pZHhfaW5zYW1wbGUgPSAwOworICAgIHMtPmlu c2FtcGxlcyA9IE5VTEw7CisKKyAgICBvdXQgPSBmZl9nZXRfYXVkaW9fYnVmZmVyKG91dGxpbmss IG5iX3NhbXBsZXMpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmlu KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBpZiAocy0+ bGluZWFyX21vZGUpIHsKKyAgICAgICAgY29uc3QgZG91YmxlICpzcmMgPSAoY29uc3QgZG91Ymxl ICopaW4tPmRhdGFbMF07CisgICAgICAgIGRvdWJsZSAqZHN0ID0gKGRvdWJsZSAqKW91dC0+ZGF0 YVswXTsKKyAgICAgICAgY29uc3QgZG91YmxlIG9mZnNldCA9IHMtPm9mZnNldDsKKworICAgICAg ICBmb3IgKGludCBuID0gMDsgbiA8IG5iX3NhbXBsZXMgKiBuYl9jaGFubmVsczsgbisrKQorICAg ICAgICAgICAgZHN0W25dID0gc3JjW25dICogb2Zmc2V0OworICAgIH0gZWxzZSB7CisgICAgfQor CisgICAgcmV0ID0gdHJ1ZV9wZWFrc19lYnVyMTI4KHIxMjhfb3V0LCAoY29uc3QgdWludDhfdCAq KilvdXQtPmRhdGEsIG5iX3NhbXBsZXMpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1 cm4gcmV0OworCisgICAgc2FtcGxlcyA9IChjb25zdCBkb3VibGUgKilvdXQtPmRhdGFbMF07Cisg ICAgZm9yIChpbnQgaWR4X2luc2FtcGxlID0gcjEyOF9vdXQtPmlkeF9pbnNhbXBsZTsgaWR4X2lu c2FtcGxlIDwgbmJfc2FtcGxlczsgaWR4X2luc2FtcGxlKyspIHsKKyAgICAgICAgcHJvY2Vzc19l YnVyMTI4KHIxMjhfb3V0LCBzYW1wbGVzICsgaWR4X2luc2FtcGxlICogbmJfY2hhbm5lbHMpOwor ICAgICAgICBpZiAoKytyMTI4X291dC0+c2FtcGxlX2NvdW50ID09IGlubGluay0+c2FtcGxlX3Jh dGUgLyAxMCkgeworICAgICAgICAgICAgZG91YmxlIGxvdWRuZXNzXzQwMCwgbG91ZG5lc3NfMzAw MDsKKyAgICAgICAgICAgIGVidXIxMjhfbG91ZG5lc3MoaW5saW5rLCByMTI4X291dCwgJmxvdWRu ZXNzXzQwMCwgJmxvdWRuZXNzXzMwMDApOworICAgICAgICB9CisgICAgfQorCisgICAgcjEyOF9v dXQtPmlkeF9pbnNhbXBsZSA9IDA7CisgICAgYXZfZnJhbWVfY29weV9wcm9wcyhvdXQsIGluKTsK KyAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91 dGxpbmssIG91dCk7Cit9CisKK3N0YXRpYyBpbnQgbG91ZG5vcm1fYWN0aXZhdGUoQVZGaWx0ZXJD b250ZXh0ICpjdHgpCit7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRz WzBdOworICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07CisgICAgTG91 ZE5vcm1Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGludCByZXQ7CisKKyAgICBGRl9GSUxU RVJfRk9SV0FSRF9TVEFUVVNfQkFDSyhvdXRsaW5rLCBpbmxpbmspOworCisgICAgaWYgKCFzLT5p bnNhbXBsZXMpIHsKKyAgICAgICAgQVZGcmFtZSAqaW47CisKKyAgICAgICAgcmV0ID0gZmZfaW5s aW5rX2NvbnN1bWVfc2FtcGxlcyhpbmxpbmssIHMtPm5iX3NhbXBsZXMsIHMtPm5iX3NhbXBsZXMs ICZpbik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg ICAgICAgaWYgKHJldCA+IDApCisgICAgICAgICAgICBzLT5pbnNhbXBsZXMgPSBpbjsKKyAgICB9 CisKKyAgICBpZiAocy0+aW5zYW1wbGVzKQorICAgICAgICByZXQgPSBsb3Vkbm9ybV9maWx0ZXJf ZnJhbWUoaW5saW5rLCBzLT5pbnNhbXBsZXMpOworCisgICAgRkZfRklMVEVSX0ZPUldBUkRfU1RB VFVTKGlubGluaywgb3V0bGluayk7CisgICAgRkZfRklMVEVSX0ZPUldBUkRfV0FOVEVEKG91dGxp bmssIGlubGluayk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisjdW5kZWYgT0ZGU0VUCisjdW5k ZWYgRkxBR1MKKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoTG91ZE5vcm1Db250ZXh0LCB4 KQorI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19BVURJT19QQVJBTXxBVl9PUFRfRkxBR19GSUxU RVJJTkdfUEFSQU0KKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIGxvdWRub3JtX29wdGlvbnNbXSA9 IHsKKyAgICB7ICJJIiwgICAgICAgICAgICAgICAgInNldCBpbnRlZ3JhdGVkIGxvdWRuZXNzIHRh cmdldCIsICAgIE9GRlNFVCh0YXJnZXRfaSksICAgICAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAg ey5kYmwgPSAtMjQufSwgICAtNzAuLCAgICAgICAtNS4sICBGTEFHUyB9LAorICAgIHsgImkiLCAg ICAgICAgICAgICAgICAic2V0IGludGVncmF0ZWQgbG91ZG5lc3MgdGFyZ2V0IiwgICAgT0ZGU0VU KHRhcmdldF9pKSwgICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9IC0yNC59LCAg IC03MC4sICAgICAgIC01LiwgIEZMQUdTIH0sCisgICAgeyAiTFJBIiwgICAgICAgICAgICAgICJz ZXQgbG91ZG5lc3MgcmFuZ2UgdGFyZ2V0IiwgICAgICAgICBPRkZTRVQodGFyZ2V0X2xyYSksICAg ICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDcufSwgICAgIDEuLCAgICAgICAgNTAu LCAgRkxBR1MgfSwKKyAgICB7ICJscmEiLCAgICAgICAgICAgICAgInNldCBsb3VkbmVzcyByYW5n ZSB0YXJnZXQiLCAgICAgICAgIE9GRlNFVCh0YXJnZXRfbHJhKSwgICAgICAgQVZfT1BUX1RZUEVf RE9VQkxFLCAgey5kYmwgPSAgNy59LCAgICAgMS4sICAgICAgICA1MC4sICBGTEFHUyB9LAorICAg IHsgIlRQIiwgICAgICAgICAgICAgICAic2V0IG1heGltdW0gdHJ1ZSBwZWFrIiwgICAgICAgICAg ICAgT0ZGU0VUKHRhcmdldF90cCksICAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9 IC0yLn0sICAgIC05LiwgICAgICAgICAwLiwgIEZMQUdTIH0sCisgICAgeyAidHAiLCAgICAgICAg ICAgICAgICJzZXQgbWF4aW11bSB0cnVlIHBlYWsiLCAgICAgICAgICAgICBPRkZTRVQodGFyZ2V0 X3RwKSwgICAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gLTIufSwgICAgLTkuLCAg ICAgICAgIDAuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF9JIiwgICAgICAgIm1lYXN1cmVk IElMIG9mIGlucHV0IGZpbGUiLCAgICAgICAgIE9GRlNFVChtZWFzdXJlZF9pKSwgICAgICAgQVZf T1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAtOTkuLCAgICAgICAgMC4sICBGTEFH UyB9LAorICAgIHsgIm1lYXN1cmVkX2kiLCAgICAgICAibWVhc3VyZWQgSUwgb2YgaW5wdXQgZmls ZSIsICAgICAgICAgT0ZGU0VUKG1lYXN1cmVkX2kpLCAgICAgICBBVl9PUFRfVFlQRV9ET1VCTEUs ICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAgICAgICAwLiwgIEZMQUdTIH0sCisgICAgeyAibWVh c3VyZWRfTFJBIiwgICAgICJtZWFzdXJlZCBMUkEgb2YgaW5wdXQgZmlsZSIsICAgICAgICBPRkZT RVQobWVhc3VyZWRfbHJhKSwgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJsID0gIDAufSwg ICAgIDAuLCAgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF9scmEiLCAgICAg Im1lYXN1cmVkIExSQSBvZiBpbnB1dCBmaWxlIiwgICAgICAgIE9GRlNFVChtZWFzdXJlZF9scmEp LCAgICAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAgMC59LCAgICAgMC4sICAgICAgICA5 OS4sICBGTEFHUyB9LAorICAgIHsgIm1lYXN1cmVkX1RQIiwgICAgICAibWVhc3VyZWQgdHJ1ZSBw ZWFrIG9mIGlucHV0IGZpbGUiLCAgT0ZGU0VUKG1lYXN1cmVkX3RwKSwgICAgICBBVl9PUFRfVFlQ RV9ET1VCTEUsICB7LmRibCA9ICA5OS59LCAgIC05OS4sICAgICAgIDk5LiwgIEZMQUdTIH0sCisg ICAgeyAibWVhc3VyZWRfdHAiLCAgICAgICJtZWFzdXJlZCB0cnVlIHBlYWsgb2YgaW5wdXQgZmls ZSIsICBPRkZTRVQobWVhc3VyZWRfdHApLCAgICAgIEFWX09QVF9UWVBFX0RPVUJMRSwgIHsuZGJs ID0gIDk5Ln0sICAgLTk5LiwgICAgICAgOTkuLCAgRkxBR1MgfSwKKyAgICB7ICJtZWFzdXJlZF90 aHJlc2giLCAgIm1lYXN1cmVkIHRocmVzaG9sZCBvZiBpbnB1dCBmaWxlIiwgIE9GRlNFVChtZWFz dXJlZF90aHJlc2gpLCAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgey5kYmwgPSAtNzAufSwgICAtOTku LCAgICAgICAgMC4sICBGTEFHUyB9LAorICAgIHsgIm9mZnNldCIsICAgICAgICAgICAic2V0IG9m ZnNldCBnYWluIiwgICAgICAgICAgICAgICAgICAgT0ZGU0VUKG9mZnNldCksICAgICAgICAgICBB Vl9PUFRfVFlQRV9ET1VCTEUsICB7LmRibCA9ICAwLn0sICAgIC05OS4sICAgICAgIDk5LiwgIEZM QUdTIH0sCisgICAgeyAibGluZWFyIiwgICAgICAgICAgICJub3JtYWxpemUgbGluZWFybHkgaWYg cG9zc2libGUiLCAgICBPRkZTRVQobGluZWFyX21vZGUpLCAgICAgIEFWX09QVF9UWVBFX0JPT0ws ICAgIHsuaTY0ID0gIDF9LCAgICAgICAgMCwgICAgICAgICAxLCAgRkxBR1MgfSwKKyAgICB7ICJk dWFsX21vbm8iLCAgICAgICAgInRyZWF0IG1vbm8gaW5wdXQgYXMgZHVhbC1tb25vIiwgICAgIE9G RlNFVChkdWFsX21vbm8pLCAgICAgICAgQVZfT1BUX1RZUEVfQk9PTCwgICAgey5pNjQgPSAgMH0s ICAgICAgICAwLCAgICAgICAgIDEsICBGTEFHUyB9LAorICAgIHsgInByaW50X2Zvcm1hdCIsICAg ICAic2V0IHByaW50IGZvcm1hdCBmb3Igc3RhdHMiLCAgICAgICAgT0ZGU0VUKHByaW50X2Zvcm1h dCksICAgICBBVl9PUFRfVFlQRV9JTlQsICAgICB7Lmk2NCA9ICBOT05FfSwgIE5PTkUsICBQRl9O QiAtMSwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJub25lIiwgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBOT05FfSwgICAgIDAsICAgICAg ICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJqc29uIiwgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBKU09OfSwgICAgIDAsICAgICAg ICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgICAgICJzdW1tYXJ5IiwgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgICB7Lmk2NCA9ICBTVU1NQVJZfSwgIDAsICAgICAg ICAgMCwgIEZMQUdTLCAicHJpbnRfZm9ybWF0IiB9LAorICAgIHsgTlVMTCB9Cit9OworCitBVkZJ TFRFUl9ERUZJTkVfQ0xBU1MobG91ZG5vcm0pOworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQg bG91ZG5vcm1faW5wdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRl ZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX0FVRElPLAorICAg ICAgICAuY29uZmlnX3Byb3BzID0gbG91ZG5vcm1fY29uZmlnX2lucHV0LAorICAgIH0sCit9Owor CitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgbG91ZG5vcm1fb3V0cHV0c1tdID0geworICAgIHsK KyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgICAgICAg ICA9IEFWTUVESUFfVFlQRV9BVURJTywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9IGxvdWRub3Jt X2NvbmZpZ19vdXRwdXQsCisgICAgfSwKK307CisKK2NvbnN0IEFWRmlsdGVyIGZmX2FmX2xvdWRu b3JtID0geworICAgIC5uYW1lICAgICAgICAgID0gImxvdWRub3JtIiwKKyAgICAuZGVzY3JpcHRp b24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJFQlUgUjEyOCBsb3VkbmVzcyBub3JtYWxpemF0 aW9uIiksCisgICAgLnByaXZfc2l6ZSAgICAgPSBzaXplb2YoTG91ZE5vcm1Db250ZXh0KSwKKyAg ICAucHJpdl9jbGFzcyAgICA9ICZsb3Vkbm9ybV9jbGFzcywKKyAgICAuaW5pdCAgICAgICAgICA9 IGxvdWRub3JtX2luaXQsCisgICAgLmFjdGl2YXRlICAgICAgPSBsb3Vkbm9ybV9hY3RpdmF0ZSwK KyAgICAudW5pbml0ICAgICAgICA9IGxvdWRub3JtX3VuaW5pdCwKKyAgICBGSUxURVJfSU5QVVRT KGxvdWRub3JtX2lucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMobG91ZG5vcm1fb3V0cHV0cyks CisgICAgRklMVEVSX1FVRVJZX0ZVTkMobG91ZG5vcm1fcXVlcnlfZm9ybWF0cyksCit9OwotLSAK Mi40Mi4wCgo= --00000000000024711d0606865a00 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --00000000000024711d0606865a00--