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 19F924038E for ; Mon, 20 Dec 2021 15:32:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 016E068AFB4; Mon, 20 Dec 2021 17:31:33 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6024368AEC8 for ; Mon, 20 Dec 2021 17:31:24 +0200 (EET) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 1ECCF49363; Mon, 20 Dec 2021 16:31:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1640014284; bh=Rpg883YHPQnYRPIFtnIzEGapYiVCBz2vgMb9FYbCjhk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xo0o86MAOsUu9dTmiLM2LG/DqDI5K2zMTS0m8MUJVblNRCd6fxawaFp35gBFKPHXr IrLWWjYLnERvaetxpG4ZIzLY2KatYcaEQaAmqCpfVjf93PIX+bU+MsodFk28J8FNz4 tMFSz9sZK6H9XH0hwZ1wbt4c27v/3ggWUTmUgdl0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Dec 2021 16:31:20 +0100 Message-Id: <20211220153122.54839-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211220153122.54839-1-ffmpeg@haasn.xyz> References: <20211220134420.69078-1-ffmpeg@haasn.xyz> <20211220153122.54839-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 4/6] lavc: Implement Dolby Vision RPU parsing 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 Cc: Niklas Haas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpCYXNlZCBvbiBhIG1peHR1cmUgb2Yg Z3Vlc3N3b3JrLCBwYXJ0aWFsIGRvY3VtZW50YXRpb24gaW4gcGF0ZW50cywgYW5kCnJldmVyc2Ug ZW5naW5lZXJpbmcgb2YgcmVhbC13b3JsZCBzYW1wbGVzLiBDb25maXJtZWQgd29ya2luZyBmb3Ig YWxsIHRoZQpzYW1wbGVzIEkndmUgdGhyb3duIGF0IGl0LgoKQ29udGFpbnMgc29tZSBhbm5veWlu ZyBtYWNoaW5lcnkgdG8gcGVyc2lzdCB0aGVzZSB2YWx1ZXMgaW4gYmV0d2VlbgpmcmFtZXMsIHdo aWNoIGlzIG5lZWRlZCBpbiB0aGVvcnkgZXZlbiB0aG91Z2ggSSd2ZSBuZXZlciBhY3R1YWxseSBz ZWVuIGEKc2FtcGxlIHRoYXQgcmVsaWVzIG9uIGl0IGluIHByYWN0aWNlLiBNYXkgb3IgbWF5IG5v dCB3b3JrLgoKU2luY2UgdGhlIGRpc3RpbmN0aW9uIG1hdHRlcnMgZ3JlYXRseSBmb3IgcGFyc2lu ZyB0aGUgY29sb3IgbWF0cml4CnZhbHVlcywgdGhpcyBpbmNsdWRlcyBhIHNtYWxsIGhlbHBlciBm dW5jdGlvbiB0byBndWVzcyB0aGUgcmlnaHQgcHJvZmlsZQpmcm9tIHRoZSBSUFUgaXRzZWxmIGlu IGNhc2UgdGhlIHVzZXIgaGFzIGZvcmdvdHRlbiB0byBmb3J3YXJkIHRoZSBkb3ZpCmNvbmZpZ3Vy YXRpb24gcmVjb3JkIHRvIHRoZSBkZWNvZGVyLiAoV2hpY2ggaW4gcHJhY3RpY2UsIG9ubHkgZmZt cGVnLmMKYW5kIGZmcGxheSBkby4uKQoKTm90YWJsZSBvbWlzc2lvbnMgLyBkZXZpYXRpb25zOgot IENSQzMyIHZlcmlmaWNhdGlvbi4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgTVBFRzIgQ1JDMzIgdHlw ZSwgd2hpY2ggZG9lcwogIG5vdCBzZWVtIHRvIGJlIGltcGxlbWVudGVkIGluIGxhdnUuIChBbmQg SSBkb24ndCBjYXJlIGVub3VnaCB0byBkbyBzbykKLSBMaW5lYXIgaW50ZXJwb2xhdGlvbiBzdXBw b3J0LiBOb3RoaW5nIGRvY3VtZW50cyB0aGlzIChiZXlvbmQgaXRzCiAgZXhpc3RlbmNlKSBhbmQg bm8gc2FtcGxlcyB1c2UgaXQsIHNvIGltcG9zc2libGUgdG8gaW1wbGVtZW50LgotIEFsbCBvZiB0 aGUgZXh0ZW5zaW9uIG1ldGFkYXRhIGJsb2NrcywgYnV0IHRoZXNlIGNvbnRhaW4gdmFsdWVzIHRo YXQKICBzZWVtIGxhcmdlbHkgY29uZ3J1ZW50IHdpdGggU1QyMDk0LCBIRFIxMCwgb3Igb3RoZXIg ZXhpc3RpbmcgZm9ybXMgb2YKICBzaWRlIGRhdGEsIHNvIEkgd2lsbCBkZWZlciBwYXJzaW5nL2F0 dGFjaGluZyB0aGVtIHRvIGEgZnV0dXJlIGNvbW1pdC4KLSBUaGUgcGF0ZW50IGRlc2NyaWJlcyBh IG1lY2hhbmlzbSBmb3IgcHJlZGljdGluZyBjb2VmZmljaWVudHMgZnJvbQogIHByZXZpb3VzIFJQ VXMsIGJ1dCB0aGUgYml0IGZvciB0aGUgZmxhZyB3aGV0aGVyIHRvIHVzZSB0aGUKICBwcmVkaWN0 aW9uIGRlbHRhcyBvciBzaWduYWwgZW50aXJlbHkgbmV3IGNvZWZmaWNpZW50cyBkb2VzIG5vdCBz ZWVtIHRvCiAgYmUgcHJlc2VudCBpbiBhY3R1YWwgUlBVcywgc28gd2UgaWdub3JlIHRoaXMgc3Vi c3lzdGVtIGVudGlyZWx5LgotIEluIHRoZSBwYXRlbnQncyBzcGVjLCB0aGUgTkxRIHN1YnN5c3Rl bSBhbHNvIGxvb3BzIG92ZXIKICBudW1fbmxxX3Bpdm90cywgYnV0IGV2ZW4gaW4gdGhlIHBhdGVu dCB0aGUgbnVtYmVyIGlzIGhhcmQtY29kZWQgdG8gb25lCiAgaXRlcmF0aW9uIHJhdGhlciB0aGFu IHNpZ25hbGxlZC4gU28gd2Ugb25seSBzdG9yZSBvbmUgc2V0IG9mIGNvZWZzLgoKSGVhdmlseSBp bmZsdWVuY2VkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9xdWlldHZvaWQvZG92aV90b29sCkRvY3Vt ZW50YXRpb24gZHJhd24gZnJvbSBVUyBQYXRlbnQgMTAsNzAxLDM5OSBCMiBhbmQgRVRTSSBHUyBD Q00gMDAxCgpTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBj b25maWd1cmUgICAgICAgICAgICAgfCAgIDIgKwogbGliYXZjb2RlYy9NYWtlZmlsZSAgIHwgICAx ICsKIGxpYmF2Y29kZWMvZG92aV9ycHUuYyB8IDQzMCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGxpYmF2Y29kZWMvZG92aV9ycHUuaCB8ICA3MSArKysrKysrCiA0 IGZpbGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9kb3ZpX3JwdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kb3ZpX3Jw dS5oCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGQ5ZDQxYjIyNzMu LjlhMjdmZjliYmMgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0 MzQsNiArMjQzNCw3IEBAIENPTkZJR19FWFRSQT0iCiAgICAgY2JzX3ZwOQogICAgIGRpcmFjX3Bh cnNlCiAgICAgZG5uCisgICAgZG92aV9ycHUKICAgICBkdnByb2ZpbGUKICAgICBleGlmCiAgICAg ZmFhbmRjdApAQCAtMjcwNiw2ICsyNzA3LDcgQEAgY2JzX21wZWcyX3NlbGVjdD0iY2JzIgogY2Jz X3ZwOV9zZWxlY3Q9ImNicyIKIGRjdF9zZWxlY3Q9InJkZnQiCiBkaXJhY19wYXJzZV9zZWxlY3Q9 ImdvbG9tYiIKK2RvdmlfcnB1X3NlbGVjdD0iZ29sb21iIgogZG5uX3N1Z2dlc3Q9ImxpYnRlbnNv cmZsb3cgbGlib3BlbnZpbm8iCiBkbm5fZGVwcz0iYXZmb3JtYXQgc3dzY2FsZSIKIGVycm9yX3Jl c2lsaWVuY2Vfc2VsZWN0PSJtZV9jbXAiCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxl IGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCBmYjkwZWNlYTg0Li43MzY0YzdhOTFmIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAg LTc3LDYgKzc3LDcgQEAgT0JKUy0kKENPTkZJR19DQlNfTVBFRzIpICAgICAgICAgICAgICAgKz0g Y2JzX21wZWcyLm8KIE9CSlMtJChDT05GSUdfQ0JTX1ZQOSkgICAgICAgICAgICAgICAgICs9IGNi c192cDkubwogT0JKUy0kKENPTkZJR19DUllTVEFMSEQpICAgICAgICAgICAgICAgKz0gY3J5c3Rh bGhkLm8KIE9CSlMtJChDT05GSUdfRENUKSAgICAgICAgICAgICAgICAgICAgICs9IGRjdC5vIGRj dDMyX2ZpeGVkLm8gZGN0MzJfZmxvYXQubworT0JKUy0kKENPTkZJR19ET1ZJX1JQVSkgICAgICAg ICAgICAgICAgKz0gZG92aV9ycHUubwogT0JKUy0kKENPTkZJR19FUlJPUl9SRVNJTElFTkNFKSAg ICAgICAgKz0gZXJyb3JfcmVzaWxpZW5jZS5vCiBPQkpTLSQoQ09ORklHX0VYSUYpICAgICAgICAg ICAgICAgICAgICArPSBleGlmLm8gdGlmZl9jb21tb24ubwogT0JKUy0kKENPTkZJR19GQUFORENU KSAgICAgICAgICAgICAgICAgKz0gZmFhbmRjdC5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Rv dmlfcnB1LmMgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMGZjNmU1Mjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMv ZG92aV9ycHUuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIERvbGJ5IFZpc2lvbiBSUFUgZGVj b2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBKYW4gRWtzdHLDtm0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBOaWtsYXMgSGFhcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgorCisjaW5jbHVkZSAiZG92aV9y cHUuaCIKKyNpbmNsdWRlICJnb2xvbWIuaCIKKyNpbmNsdWRlICJnZXRfYml0cy5oIgorCitlbnVt IHsKKyAgICBSUFVfQ09FRkZfRklYRUQgPSAwLAorICAgIFJQVV9DT0VGRl9GTE9BVCA9IDEsCit9 OworCisvKioKKyAqIFByaXZhdGUgY29udGVudHMgb2YgdmRyX3JlZi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgRE9WSVZkclJlZiB7CisgICAgQVZET1ZJRGF0YU1hcHBpbmcgbWFwcGluZzsKKyAgICBB VkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOworfSBET1ZJVmRyUmVmOworCit2b2lkIGZmX2Rvdmlf Y3R4X3VucmVmKERPVklDb250ZXh0ICpzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVMocy0+dmRyX3JlZik7IGkrKykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZz LT52ZHJfcmVmW2ldKTsKKworICAgIC8qIFByZXNlcnZlIHRoZSB1c2VyLXByb3ZpZGVkIGZpZWxk cyBleHBsaWNpdGx5LCByZXNldCBldmVyeXRoaW5nIGVsc2UgKi8KKyAgICAqcyA9IChET1ZJQ29u dGV4dCkgeworICAgICAgICAubG9nY3R4ID0gcy0+bG9nY3R4LAorICAgICAgICAuY29uZmlnID0g cy0+Y29uZmlnLAorICAgIH07Cit9CisKK2ludCBmZl9kb3ZpX2N0eF9yZXBsYWNlKERPVklDb250 ZXh0ICpzLCBjb25zdCBET1ZJQ29udGV4dCAqczApCit7CisgICAgaW50IHJldDsKKyAgICBzLT5s b2djdHggPSBzMC0+bG9nY3R4OworICAgIHMtPmNvbmZpZyA9IHMwLT5jb25maWc7CisgICAgcy0+ bWFwcGluZyA9IHMwLT5tYXBwaW5nOworICAgIHMtPmNvbG9yID0gczAtPmNvbG9yOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgRE9WSV9NQVhfRE1fSUQ7IGkrKykgeworICAgICAgICBpZiAoKHJl dCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZzLT52ZHJfcmVmW2ldLCBzMC0+dmRyX3JlZltpXSkpIDwg MCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworZmFp bDoKKyAgICBmZl9kb3ZpX2N0eF91bnJlZihzKTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQg ZmZfZG92aV9hdHRhY2hfc2lkZV9kYXRhKERPVklDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSkK K3sKKyAgICBBVkZyYW1lU2lkZURhdGEgKnNkOworICAgIEFWQnVmZmVyUmVmICpidWY7CisgICAg QVZET1ZJTWV0YWRhdGEgKmRvdmk7CisgICAgc2l6ZV90IGRvdmlfc2l6ZTsKKworICAgIGlmICgh cy0+bWFwcGluZyB8fCAhcy0+Y29sb3IpCisgICAgICAgIHJldHVybiAwOyAvKiBpbmNvbXBsZXRl IGRvdmkgbWV0YWRhdGEgKi8KKworICAgIGRvdmkgPSBhdl9kb3ZpX21ldGFkYXRhX2FsbG9jKCZk b3ZpX3NpemUpOworICAgIGlmICghZG92aSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKworICAgIGJ1ZiA9IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKikgZG92aSwgZG92aV9z aXplLCBOVUxMLCBOVUxMLCAwKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBhdl9mcmVlKGRv dmkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIHNkID0g YXZfZnJhbWVfbmV3X3NpZGVfZGF0YV9mcm9tX2J1ZihmcmFtZSwgQVZfRlJBTUVfREFUQV9ET1ZJ X01FVEFEQVRBLCBidWYpOworICAgIGlmICghc2QpIHsKKyAgICAgICAgYXZfYnVmZmVyX3VucmVm KCZidWYpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIG1l bWNweSgmZG92aS0+aGVhZGVyLCAmcy0+aGVhZGVyLCBzaXplb2YoZG92aS0+aGVhZGVyKSk7Cisg ICAgbWVtY3B5KCZkb3ZpLT5tYXBwaW5nLCBzLT5tYXBwaW5nLCBzaXplb2YoZG92aS0+bWFwcGlu ZykpOworICAgIG1lbWNweSgmZG92aS0+Y29sb3IsIHMtPmNvbG9yLCBzaXplb2YoZG92aS0+Y29s b3IpKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBndWVzc19wcm9maWxlKGNvbnN0 IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKK3sKKyAgICBzd2l0Y2ggKGhkci0+dmRyX3JwdV9w cm9maWxlKSB7CisgICAgY2FzZSAwOgorICAgICAgICBpZiAoaGRyLT5ibF92aWRlb19mdWxsX3Jh bmdlX2ZsYWcpCisgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAxOgorICAgICAgICBpZiAoaGRyLT5lbF9zcGF0aWFsX3Jlc2FtcGxpbmdfZmlsdGVyX2ZsYWcg JiYgIWhkci0+ZGlzYWJsZV9yZXNpZHVhbF9mbGFnKSB7CisgICAgICAgICAgICBpZiAoaGRyLT52 ZHJfYml0X2RlcHRoID09IDEyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDc7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByZXR1cm4gMDsgLyogdW5rbm93biAqLworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2 NF90IGdldF91ZV9jb2VmKEdldEJpdENvbnRleHQgKmdiLCBjb25zdCBBVkRPVklScHVEYXRhSGVh ZGVyICpoZHIpCit7CisgICAgdWludDY0X3QgaXBhcnQ7CisgICAgdW5pb24geyB1aW50MzJfdCB1 MzI7IGZsb2F0IGYzMjsgfSBmcGFydDsKKworICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFfdHlw ZSkgeworICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAgICBpcGFydCA9IGdldF91ZV9n b2xvbWJfbG9uZyhnYik7CisgICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRzX2xvbmcoZ2IsIGhk ci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICAgICAgcmV0dXJuIChpcGFydCA8PCBoZHItPmNvZWZf bG9nMl9kZW5vbSkgKyBmcGFydC51MzI7CisKKyAgICBjYXNlIFJQVV9DT0VGRl9GTE9BVDoKKyAg ICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICByZXR1cm4g ZnBhcnQuZjMyICogKDEgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAgIH0KKworICAgIHJl dHVybiAwOyAvKiB1bnJlYWNoYWJsZSAqLworfQorCitzdGF0aWMgaW5saW5lIGludDY0X3QgZ2V0 X3NlX2NvZWYoR2V0Qml0Q29udGV4dCAqZ2IsIGNvbnN0IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhk cikKK3sKKyAgICBpbnQ2NF90IGlwYXJ0OworICAgIHVuaW9uIHsgdWludDMyX3QgdTMyOyBmbG9h dCBmMzI7IH0gZnBhcnQ7CisKKyAgICBzd2l0Y2ggKGhkci0+Y29lZl9kYXRhX3R5cGUpIHsKKyAg ICBjYXNlIFJQVV9DT0VGRl9GSVhFRDoKKyAgICAgICAgaXBhcnQgPSBnZXRfc2VfZ29sb21iX2xv bmcoZ2IpOworICAgICAgICBmcGFydC51MzIgPSBnZXRfYml0c19sb25nKGdiLCBoZHItPmNvZWZf bG9nMl9kZW5vbSk7CisgICAgICAgIHJldHVybiAoaXBhcnQgPDwgaGRyLT5jb2VmX2xvZzJfZGVu b20pICsgZnBhcnQudTMyOworCisgICAgY2FzZSBSUFVfQ09FRkZfRkxPQVQ6CisgICAgICAgIGZw YXJ0LnUzMiA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgcmV0dXJuIGZwYXJ0LmYz MiAqICgxIDw8IGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsg LyogdW5yZWFjaGFibGUgKi8KK30KKworI2RlZmluZSBWQUxJREFURShWQVIsIE1JTiwgTUFYKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFZBUiA8IE1JTiB8fCBWQVIgPiBNQVgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg YXZfbG9nKHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiUlBVIHZhbGlkYXRpb24gZmFpbGVkOiAi ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgI01JTiIgPD0gIiNWQVIiID0gJWQgPD0g IiNNQVgiXG4iLCAoaW50KSBWQVIpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworaW50 IGZmX2RvdmlfcnB1X3BhcnNlKERPVklDb250ZXh0ICpzLCBjb25zdCB1aW50OF90ICpycHUsIHNp emVfdCBycHVfc2l6ZSkKK3sKKyAgICBBVkRPVklScHVEYXRhSGVhZGVyICpoZHIgPSAmcy0+aGVh ZGVyOworICAgIEdldEJpdENvbnRleHQgKmdiID0gJihHZXRCaXRDb250ZXh0KXswfTsKKyAgICBE T1ZJVmRyUmVmICp2ZHI7CisgICAgaW50IHJldDsKKworICAgIHVpbnQ4X3QgbmFsX3ByZWZpeDsK KyAgICB1aW50OF90IHJwdV90eXBlOworICAgIHVpbnQ4X3QgdmRyX3NlcV9pbmZvX3ByZXNlbnQ7 CisgICAgdWludDhfdCB2ZHJfZG1fbWV0YWRhdGFfcHJlc2VudDsKKyAgICB1aW50OF90IHVzZV9w cmV2X3Zkcl9ycHU7CisgICAgdWludDhfdCB1c2VfbmxxOworICAgIHVpbnQ4X3QgcHJvZmlsZTsK KyAgICBpZiAoKHJldCA9IGluaXRfZ2V0X2JpdHM4KGdiLCBycHUsIHJwdV9zaXplKSkgPCAwKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgLyogUlBVIGhlYWRlciwgY29tbW9uIHZhbHVlcyAq LworICAgIG5hbF9wcmVmaXggPSBnZXRfYml0cyhnYiwgOCk7CisgICAgVkFMSURBVEUobmFsX3By ZWZpeCwgMjUsIDI1KTsKKyAgICBycHVfdHlwZSA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICBpZiAo cnB1X3R5cGUgIT0gMikgeworICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfV0FSTklO RywgIlVucmVjb2duaXplZCBSUFUgdHlwZSAiCisgICAgICAgICAgICAgICAiJSJQUkl1OCIsIGln bm9yaW5nXG4iLCBycHVfdHlwZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGhk ci0+cnB1X3R5cGUgPSBycHVfdHlwZTsKKyAgICBoZHItPnJwdV9mb3JtYXQgPSBnZXRfYml0cyhn YiwgMTEpOworCisgICAgLyogVmFsdWVzIHNwZWNpZmljIHRvIFJQVSB0eXBlIDIgKi8KKyAgICBo ZHItPnZkcl9ycHVfcHJvZmlsZSA9IGdldF9iaXRzKGdiLCA0KTsKKyAgICBoZHItPnZkcl9ycHVf bGV2ZWwgPSBnZXRfYml0cyhnYiwgNCk7CisKKyAgICB2ZHJfc2VxX2luZm9fcHJlc2VudCA9IGdl dF9iaXRzMShnYik7CisgICAgaWYgKHZkcl9zZXFfaW5mb19wcmVzZW50KSB7CisgICAgICAgIGhk ci0+Y2hyb21hX3Jlc2FtcGxpbmdfZXhwbGljaXRfZmlsdGVyX2ZsYWcgPSBnZXRfYml0czEoZ2Ip OworICAgICAgICBoZHItPmNvZWZfZGF0YV90eXBlID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAg ICBWQUxJREFURShoZHItPmNvZWZfZGF0YV90eXBlLCBSUFVfQ09FRkZfRklYRUQsIFJQVV9DT0VG Rl9GTE9BVCk7CisgICAgICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFfdHlwZSkgeworICAgICAg ICBjYXNlIFJQVV9DT0VGRl9GSVhFRDoKKyAgICAgICAgICAgIGhkci0+Y29lZl9sb2cyX2Rlbm9t ID0gZ2V0X3VlX2dvbG9tYihnYik7CisgICAgICAgICAgICBWQUxJREFURShoZHItPmNvZWZfbG9n Ml9kZW5vbSwgMTMsIDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJQVV9D T0VGRl9GTE9BVDoKKyAgICAgICAgICAgIGhkci0+Y29lZl9sb2cyX2Rlbm9tID0gMzI7IC8qIGFy Yml0cmFyeSwgY2hvb3NlIG1heGltdW0gcHJlY2lzaW9uICovCisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGhkci0+dmRyX3JwdV9ub3JtYWxpemVkX2lkYyA9IGdldF9i aXRzKGdiLCAyKTsKKyAgICAgICAgaGRyLT5ibF92aWRlb19mdWxsX3JhbmdlX2ZsYWcgPSBnZXRf Yml0czEoZ2IpOworCisgICAgICAgIGlmICgoaGRyLT5ycHVfZm9ybWF0ICYgMHg3MDApID09IDAp IHsKKyAgICAgICAgICAgIGludCBibF9iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl8z MShnYik7CisgICAgICAgICAgICBpbnQgZWxfYml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xv bWJfMzEoZ2IpOworICAgICAgICAgICAgaW50IHZkcl9iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3Vl X2dvbG9tYl8zMShnYik7CisgICAgICAgICAgICBWQUxJREFURShibF9iaXRfZGVwdGhfbWludXM4 LCAwLCA4KTsKKyAgICAgICAgICAgIFZBTElEQVRFKGVsX2JpdF9kZXB0aF9taW51czgsIDAsIDgp OworICAgICAgICAgICAgVkFMSURBVEUodmRyX2JpdF9kZXB0aF9taW51czgsIDAsIDgpOworICAg ICAgICAgICAgaGRyLT5ibF9iaXRfZGVwdGggPSBibF9iaXRfZGVwdGhfbWludXM4ICsgODsKKyAg ICAgICAgICAgIGhkci0+ZWxfYml0X2RlcHRoID0gZWxfYml0X2RlcHRoX21pbnVzOCArIDg7Cisg ICAgICAgICAgICBoZHItPnZkcl9iaXRfZGVwdGggPSB2ZHJfYml0X2RlcHRoX21pbnVzOCArIDg7 CisgICAgICAgICAgICBoZHItPnNwYXRpYWxfcmVzYW1wbGluZ19maWx0ZXJfZmxhZyA9IGdldF9i aXRzMShnYik7CisgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDMpOyAvKiByZXNlcnZlZF96ZXJv XzNiaXRzICovCisgICAgICAgICAgICBoZHItPmVsX3NwYXRpYWxfcmVzYW1wbGluZ19maWx0ZXJf ZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgICAgICBoZHItPmRpc2FibGVfcmVzaWR1YWxf ZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhkci0+ YmxfYml0X2RlcHRoKSB7CisgICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19FUlJPUiwg Ik1pc3NpbmcgUlBVIFZEUiBzZXF1ZW5jZSBpbmZvP1xuIik7CisgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICB2ZHJfZG1fbWV0YWRhdGFfcHJlc2VudCA9IGdldF9iaXRzMShnYik7Cisg ICAgdXNlX3ByZXZfdmRyX3JwdSA9IGdldF9iaXRzMShnYik7CisgICAgdXNlX25scSA9IChoZHIt PnJwdV9mb3JtYXQgJiAweDcwMCkgPT0gMCAmJiAhaGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWc7 CisKKyAgICBwcm9maWxlID0gcy0+Y29uZmlnID8gcy0+Y29uZmlnLT5kdl9wcm9maWxlIDogZ3Vl c3NfcHJvZmlsZShoZHIpOworICAgIGlmIChwcm9maWxlID09IDUgJiYgdXNlX25scSkgeworICAg ICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJQcm9maWxlIDUgUlBVcyBzaG91 bGQgbm90IHVzZSBOTFFcbiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYg KHVzZV9wcmV2X3Zkcl9ycHUpIHsKKyAgICAgICAgaW50IHByZXZfdmRyX3JwdV9pZCA9IGdldF91 ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICBWQUxJREFURShwcmV2X3Zkcl9ycHVfaWQsIDAsIERP VklfTUFYX0RNX0lEKTsKKyAgICAgICAgaWYgKCFzLT52ZHJfcmVmW3ByZXZfdmRyX3JwdV9pZF0p IHsKKyAgICAgICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24g cHJldmlvdXMgUlBVIElEOiAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBwcmV2X3Zkcl9ycHVf aWQpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIHZkciA9IChE T1ZJVmRyUmVmICopIHMtPnZkcl9yZWZbcHJldl92ZHJfcnB1X2lkXS0+ZGF0YTsKKyAgICAgICAg cy0+bWFwcGluZyA9ICZ2ZHItPm1hcHBpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHZk cl9ycHVfaWQgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgVkFMSURBVEUodmRyX3Jw dV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOworICAgICAgICBpZiAoIXMtPnZkcl9yZWZbdmRyX3Jw dV9pZF0pIHsKKyAgICAgICAgICAgIHMtPnZkcl9yZWZbdmRyX3JwdV9pZF0gPSBhdl9idWZmZXJf YWxsb2N6KHNpemVvZihET1ZJVmRyUmVmKSk7CisgICAgICAgICAgICBpZiAoIXMtPnZkcl9yZWZb dmRyX3JwdV9pZF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgfQorCisgICAgICAgIHZkciA9IChET1ZJVmRyUmVmICopIHMtPnZkcl9yZWZbdmRyX3Jw dV9pZF0tPmRhdGE7CisgICAgICAgIHMtPm1hcHBpbmcgPSAmdmRyLT5tYXBwaW5nOworCisgICAg ICAgIHZkci0+bWFwcGluZy52ZHJfcnB1X2lkID0gdmRyX3JwdV9pZDsKKyAgICAgICAgdmRyLT5t YXBwaW5nLm1hcHBpbmdfY29sb3Jfc3BhY2UgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAg ICAgdmRyLT5tYXBwaW5nLm1hcHBpbmdfY2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfdWVfZ29sb21i XzMxKGdiKTsKKworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgeworICAgICAg ICAgICAgQVZET1ZJUmVzaGFwaW5nQ3VydmUgKmN1cnZlID0gJnZkci0+bWFwcGluZy5jdXJ2ZXNb Y107CisgICAgICAgICAgICBpbnQgbnVtX3Bpdm90c19taW51c18yID0gZ2V0X3VlX2dvbG9tYl8z MShnYik7CisgICAgICAgICAgICBpbnQgcGl2b3QgPSAwOworCisgICAgICAgICAgICBWQUxJREFU RShudW1fcGl2b3RzX21pbnVzXzIsIDAsIEFWX0RPVklfTUFYX1BJRUNFUyAtIDEpOworICAgICAg ICAgICAgY3VydmUtPm51bV9waXZvdHMgPSBudW1fcGl2b3RzX21pbnVzXzIgKyAyOworICAgICAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJ2ZS0+bnVtX3Bpdm90czsgaSsrKSB7CisgICAg ICAgICAgICAgICAgcGl2b3QgKz0gZ2V0X2JpdHMoZ2IsIGhkci0+YmxfYml0X2RlcHRoKTsKKyAg ICAgICAgICAgICAgICBjdXJ2ZS0+cGl2b3RzW2ldID0gYXZfY2xpcF91aW50MTYocGl2b3QpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZV9ubHEpIHsKKyAgICAg ICAgICAgIHZkci0+bWFwcGluZy5ubHFfbWV0aG9kX2lkYyA9IGdldF9iaXRzKGdiLCAzKTsKKyAg ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogVGhlIHBhdGVudCBtZW50aW9ucyBhbm90aGVy IGxlZ2FsIHZhbHVlLCBOTFFfTVVfTEFXLCBidXQgaXQncworICAgICAgICAgICAgICogbm90IGRv Y3VtZW50ZWQgYW55d2hlcmUgaG93IHRvIHBhcnNlIG9yIGFwcGx5IHRoYXQgdHlwZSBvZiBOTFEu CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFZBTElEQVRFKHZkci0+bWFwcGluZy5ubHFf bWV0aG9kX2lkYywgMCwgQVZfRE9WSV9OTFFfTElORUFSX0RaKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIHZkci0+bWFwcGluZy5ubHFfbWV0aG9kX2lkYyA9IEFWX0RPVklfTkxRX05P TkU7CisgICAgICAgIH0KKworICAgICAgICB2ZHItPm1hcHBpbmcubnVtX3hfcGFydGl0aW9ucyA9 IGdldF91ZV9nb2xvbWJfbG9uZyhnYikgKyAxOworICAgICAgICB2ZHItPm1hcHBpbmcubnVtX3lf cGFydGl0aW9ucyA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYikgKyAxOworICAgICAgICAvKiBFbmQg b2YgcnB1X2RhdGFfaGVhZGVyKCksIHN0YXJ0IG9mIHZkcl9ycHVfZGF0YV9wYXlsb2FkKCkgKi8K KworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgeworICAgICAgICAgICAgQVZE T1ZJUmVzaGFwaW5nQ3VydmUgKmN1cnZlID0gJnZkci0+bWFwcGluZy5jdXJ2ZXNbY107CisgICAg ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1cnZlLT5udW1fcGl2b3RzIC0gMTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgaW50IG1hcHBpbmdfaWRjID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7 CisgICAgICAgICAgICAgICAgVkFMSURBVEUobWFwcGluZ19pZGMsIDAsIDEpOworICAgICAgICAg ICAgICAgIGN1cnZlLT5tYXBwaW5nX2lkY1tpXSA9IG1hcHBpbmdfaWRjOworICAgICAgICAgICAg ICAgIHN3aXRjaCAobWFwcGluZ19pZGMpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFWX0RPVklf TUFQUElOR19QT0xZTk9NSUFMOiB7CisgICAgICAgICAgICAgICAgICAgIGludCBwb2x5X29yZGVy X21pbnVzMSA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgICAgICAgICBWQUxJ REFURShwb2x5X29yZGVyX21pbnVzMSwgMCwgMSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnZl LT5wb2x5X29yZGVyW2ldID0gcG9seV9vcmRlcl9taW51czEgKyAxOworICAgICAgICAgICAgICAg ICAgICBpZiAocG9seV9vcmRlcl9taW51czEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGxpbmVhcl9pbnRlcnBfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAobGluZWFyX2ludGVycF9mbGFnKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogbGFjayBvZiBkb2N1bWVudGF0aW9uL3NhbXBsZXMgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdnByaXZfcmVxdWVzdF9zYW1wbGUocy0+bG9nY3R4LCAiRG9sYnkg VmlzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImxpbmVhciBpbnRlcnBvbGF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmZfZG92aV9jdHhfdW5yZWYocyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9 IGN1cnZlLT5wb2x5X29yZGVyW2ldOyBrKyspCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2 ZS0+cG9seV9jb2VmW2ldW2tdID0gZ2V0X3NlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEFW X0RPVklfTUFQUElOR19NTVI6IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1tcl9vcmRlcl9t aW51czEgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKG1t cl9vcmRlcl9taW51czEsIDAsIDIpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+bW1yX29y ZGVyW2ldID0gbW1yX29yZGVyX21pbnVzMSArIDE7CisgICAgICAgICAgICAgICAgICAgIGN1cnZl LT5tbXJfY29uc3RhbnRbaV0gPSBnZXRfc2VfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjdXJ2ZS0+bW1yX29yZGVyW2ldOyBqKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgNzsgaysrKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN1cnZlLT5tbXJfY29lZltpXVtqXVtrXSA9IGdldF9zZV9j b2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlX25scSkgeworICAgICAgICAgICAgZm9y IChpbnQgYyA9IDA7IGMgPCAzOyBjKyspIHsKKyAgICAgICAgICAgICAgICBBVkRPVklOTFFQYXJh bXMgKm5scSA9ICZ2ZHItPm1hcHBpbmcubmxxW2NdOworICAgICAgICAgICAgICAgIG5scS0+bmxx X29mZnNldCA9IGdldF9iaXRzKGdiLCBoZHItPmVsX2JpdF9kZXB0aCk7CisgICAgICAgICAgICAg ICAgbmxxLT52ZHJfaW5fbWF4ID0gZ2V0X3VlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAg ICAgc3dpdGNoICh2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMpIHsKKyAgICAgICAgICAgICAg ICBjYXNlIEFWX0RPVklfTkxRX0xJTkVBUl9EWjoKKyAgICAgICAgICAgICAgICAgICAgbmxxLT5s aW5lYXJfZGVhZHpvbmVfc2xvcGUgPSBnZXRfdWVfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAg ICAgICAgICAgbmxxLT5saW5lYXJfZGVhZHpvbmVfdGhyZXNob2xkID0gZ2V0X3VlX2NvZWYoZ2Is IGhkcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2ZHJfZG1fbWV0YWRhdGFf cHJlc2VudCkgeworICAgICAgICBBVkRPVklDb2xvck1ldGFkYXRhICpjb2xvcjsKKyAgICAgICAg aW50IGFmZmVjdGVkX2RtX2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIGludCBj dXJyZW50X2RtX2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIFZBTElEQVRFKGFm ZmVjdGVkX2RtX2lkLCAwLCBET1ZJX01BWF9ETV9JRCk7CisgICAgICAgIFZBTElEQVRFKGN1cnJl bnRfZG1faWQsIDAsIERPVklfTUFYX0RNX0lEKTsKKyAgICAgICAgaWYgKCFzLT52ZHJfcmVmW2Fm ZmVjdGVkX2RtX2lkXSkgeworICAgICAgICAgICAgcy0+dmRyX3JlZlthZmZlY3RlZF9kbV9pZF0g PSBhdl9idWZmZXJfYWxsb2N6KHNpemVvZihET1ZJVmRyUmVmKSk7CisgICAgICAgICAgICBpZiAo IXMtPnZkcl9yZWZbYWZmZWN0ZWRfZG1faWRdKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXMtPnZkcl9yZWZbY3VycmVu dF9kbV9pZF0pIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19FUlJPUiwg IlVua25vd24gcHJldmlvdXMgUlBVIERNIElEOiAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBj dXJyZW50X2RtX2lkKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIFVwZGF0ZSBjdXJyZW50IHBvaW50ZXIgYmFzZWQgb24gY3VycmVudF9kbV9pZCAqLwor ICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBzLT52ZHJfcmVmW2N1cnJlbnRfZG1faWRdLT5k YXRhOworICAgICAgICBzLT5jb2xvciA9ICZ2ZHItPmNvbG9yOworCisgICAgICAgIC8qIFVwZGF0 ZSB2YWx1ZXMgb2YgYWZmZWN0ZWRfZG1faWQgKi8KKyAgICAgICAgdmRyID0gKERPVklWZHJSZWYg Kikgcy0+dmRyX3JlZlthZmZlY3RlZF9kbV9pZF0tPmRhdGE7CisgICAgICAgIGNvbG9yID0gJnZk ci0+Y29sb3I7CisgICAgICAgIGNvbG9yLT5kbV9tZXRhZGF0YV9pZCA9IGFmZmVjdGVkX2RtX2lk OworICAgICAgICBjb2xvci0+c2NlbmVfcmVmcmVzaF9mbGFnID0gZ2V0X3VlX2dvbG9tYl8zMShn Yik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQorICAgICAgICAgICAgY29s b3ItPnljY190b19yZ2JfbWF0cml4W2ldID0gYXZfbWFrZV9xKGdldF9zYml0cyhnYiwgMTYpLCAx IDw8IDEzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAg ICAgIGludCBkZW5vbSA9IHByb2ZpbGUgPT0gNCA/ICgxIDw8IDMwKSA6ICgxIDw8IDI4KTsKKyAg ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAg ICAgICAgIGlmIChvZmZzZXQgPiBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgLyogRW5zdXJl IHRoZSByZXN1bHQgZml0cyBpbnNpZGUgQVZSYXRpb25hbCAqLworICAgICAgICAgICAgICAgIG9m ZnNldCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBkZW5vbSA+Pj0gMTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNvbG9yLT55Y2NfdG9fcmdiX29mZnNldFtpXSA9IGF2X21ha2VfcShvZmZz ZXQsIGRlbm9tKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkr KykKKyAgICAgICAgICAgIGNvbG9yLT5yZ2JfdG9fbG1zX21hdHJpeFtpXSA9IGF2X21ha2VfcShn ZXRfc2JpdHMoZ2IsIDE2KSwgMSA8PCAxNCk7CisKKyAgICAgICAgY29sb3ItPnNpZ25hbF9lb3Rm ID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9lb3RmX3BhcmFtMCA9 IGdldF9iaXRzKGdiLCAxNik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfZW90Zl9wYXJhbTEgPSBn ZXRfYml0cyhnYiwgMTYpOworICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGZfcGFyYW0yID0gZ2V0 X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICBjb2xvci0+c2lnbmFsX2JpdF9kZXB0aCA9IGdl dF9iaXRzKGdiLCA1KTsKKyAgICAgICAgVkFMSURBVEUoY29sb3ItPnNpZ25hbF9iaXRfZGVwdGgs IDgsIDE2KTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9jb2xvcl9zcGFjZSA9IGdldF9iaXRzKGdi LCAyKTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9jaHJvbWFfZm9ybWF0ID0gZ2V0X2JpdHMoZ2Is IDIpOworICAgICAgICBjb2xvci0+c2lnbmFsX2Z1bGxfcmFuZ2VfZmxhZyA9IGdldF9iaXRzKGdi LCAyKTsKKyAgICAgICAgY29sb3ItPnNvdXJjZV9taW5fcHEgPSBnZXRfYml0cyhnYiwgMTIpOwor ICAgICAgICBjb2xvci0+c291cmNlX21heF9wcSA9IGdldF9iaXRzKGdiLCAxMik7CisgICAgICAg IGNvbG9yLT5zb3VyY2VfZGlhZ29uYWwgPSBnZXRfYml0cyhnYiwgMTApOworICAgIH0KKworICAg IC8qIEZJWE1FOiB2ZXJpZnkgQ1JDMzIsIHJlcXVpcmVzIGltcGxlbWVudGF0aW9uIG9mIEFWX0NS Q18zMl9NUEVHXzIgKi8KKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBmZl9kb3ZpX2N0eF91 bnJlZihzKTsgLyogZG9uJ3QgbGVhayBwb3RlbnRpYWxseSBpbnZhbGlkIHN0YXRlICovCisgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZG92aV9y cHUuaCBiL2xpYmF2Y29kZWMvZG92aV9ycHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi42OTI1OTQwZGQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy9kb3Zp X3JwdS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBEb2xieSBWaXNpb24gUlBVIGRlY29kZXIK KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSmFuIEVrc3Ryw7ZtCisgKiBDb3B5cmlnaHQgKEMp IDIwMjEgTmlrbGFzIEhhYXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisg KgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8K KworI2lmbmRlZiBBVkNPREVDX0RPVklfUlBVX0gKKyNkZWZpbmUgQVZDT0RFQ19ET1ZJX1JQVV9I CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvZG92aV9tZXRhLmgiCisjaW5jbHVkZSAibGliYXZ1dGls L2ZyYW1lLmgiCisKKyNkZWZpbmUgRE9WSV9NQVhfRE1fSUQgMTUKK3R5cGVkZWYgc3RydWN0IERP VklDb250ZXh0IHsKKyAgICB2b2lkICpsb2djdHg7CisgICAgY29uc3QgQVZET1ZJRGVjb2RlckNv bmZpZ3VyYXRpb25SZWNvcmQgKmNvbmZpZzsgLy8vPCBwcm92aWRlZCBieSBBUEkgdXNlcgorICAg IEFWQnVmZmVyUmVmICp2ZHJfcmVmW0RPVklfTUFYX0RNX0lEKzFdOyAvLy88IGRlY29kZWQgVkRS IGRhdGEgbWFwcGluZ3MKKworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBhY3RpdmUgUlBVIGRh dGEgaGVhZGVyLCB1cGRhdGVzIG9uIGV2ZXJ5IGRvdmlfcnB1X3BhcnNlKCkuCisgICAgICovCisg ICAgQVZET1ZJUnB1RGF0YUhlYWRlciBoZWFkZXI7CisKKyAgICAvKioKKyAgICAgKiBDdXJyZW50 bHkgYWN0aXZlIGRhdGEgbWFwcGluZ3MsIG9yIE5VTEwuIFBvaW50cyBpbnRvIG1lbW9yeSBvd25l ZCBieSB0aGUKKyAgICAgKiBjb3JyZXNwb25kaW5nIHJwdS92ZHJfcmVmLCB3aGljaCBiZWNvbWVz IGludmFsaWQgb24gdGhlIG5leHQgY2FsbCB0bworICAgICAqIGRvdmlfcnB1X3BhcnNlLgorICAg ICAqLworICAgIGNvbnN0IEFWRE9WSURhdGFNYXBwaW5nICptYXBwaW5nOworICAgIGNvbnN0IEFW RE9WSUNvbG9yTWV0YWRhdGEgKmNvbG9yOworfSBET1ZJQ29udGV4dDsKKworLyoqCisgKiBDb21w bGV0ZWx5IHJlc2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgYSBET1ZJQ29udGV4dCwgYnV0IGV4 cGxpY2l0bHkKKyAqIHByZXNlcnZlcyBhbnkgdXNlci1wcm92aWRlZCBmaWVsZHMuCisgKi8KK3Zv aWQgZmZfZG92aV9jdHhfdW5yZWYoRE9WSUNvbnRleHQgKnMpOworCitpbnQgZmZfZG92aV9jdHhf cmVwbGFjZShET1ZJQ29udGV4dCAqcywgY29uc3QgRE9WSUNvbnRleHQgKnMwKTsKKworLyoqCisg KiBQYXJzZSB0aGUgY29udGVudHMgb2YgYSBEb3ZpIFJQVSBOQUwgYW5kIHVwZGF0ZSB0aGUgcGFy c2VkIHZhbHVlcyBpbiB0aGUKKyAqIERPVklDb250ZXh0IHN0cnVjdC4KKyAqCisgKiBSZXR1cm5z IDAgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworaW50IGZmX2RvdmlfcnB1X3BhcnNlKERPVklDb250 ZXh0ICpzLCBjb25zdCB1aW50OF90ICpycHUsIHNpemVfdCBycHVfc2l6ZSk7CisKKy8qKgorICog QXR0YWNoIHRoZSBkZWNvZGVkIEFWRE9WSU1ldGFkYXRhIGFzIHNpZGUgZGF0YSB0byBhbiBBVkZy YW1lLgorICovCitpbnQgZmZfZG92aV9hdHRhY2hfc2lkZV9kYXRhKERPVklDb250ZXh0ICpzLCBB VkZyYW1lICpmcmFtZSk7CisKKyNlbmRpZiAvKiBBVkNPREVDX0RPVklfUlBVX0ggKi8KLS0gCjIu MzQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZt cGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2Zm bXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3Jn IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=