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 F2377494A7 for ; Fri, 12 Apr 2024 11:38:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1C9F68D2DF; Fri, 12 Apr 2024 14:36:40 +0300 (EEST) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5C7E368D282 for ; Fri, 12 Apr 2024 14:36:28 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712921784; bh=MR0qUHI+ceYsxGl/OpCylKxMypmAXFU8m/4glzWEC5M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TIvRnFZPIsLrHAJl1uM4/NyHxthDFn7VQdAklY2UfGSLY1QQIYcHa1AoKOsCWU1j7 omxegPJsJDrkgbcZL1pEEOReRIXLtAHPTNrZIHGo4V0LynNOO1oECBQIsoRaQnY0rG /UThxQGa58Wy6FWvq6G6Kdw6T2XropYQ6lQIgv6A= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 444E5433CD; Fri, 12 Apr 2024 13:36:24 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Apr 2024 13:35:20 +0200 Message-ID: <20240412113620.84013-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240412113620.84013-1-ffmpeg@haasn.xyz> References: <20240412113620.84013-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 06/13] avcodec/dovi_rpu: split into dovi_rpu.c and dovi_rpudec.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 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+CgpUbyBhbGxvdyBjb21waWxpbmcgdGhl IGRlY29kaW5nIG9iamVjdHMgd2l0aG91dCB0aGUgZW5jb2Rpbmcgb2JqZWN0cyBhbmQKdmljZSB2 ZXJzYS4gQ29tbW9uIGhlbHBlcnMgdGhhdCB1c2VycyBvZiBib3RoIEFQSXMgbmVlZCBhcmUgcHV0 IGludG8gdGhlCnNoYXJlZCBkb3ZpX3JwdS5jLgotLS0KIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAg ICB8ICAgMiArLQogbGliYXZjb2RlYy9kb3ZpX3JwdS5jICAgIHwgNjI0ICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWJhdmNvZGVjL2RvdmlfcnB1LmggICAgfCAgMTQg KwogbGliYXZjb2RlYy9kb3ZpX3JwdWRlYy5jIHwgNjM1ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA2NTEgaW5zZXJ0aW9ucygrKSwgNjI0 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZG92aV9ycHVkZWMu YwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxl CmluZGV4IDYxZDI2MWQ2MDYuLjQ1MDU4ZWI4ZDIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvTWFr ZWZpbGUKKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQpAQCAtODUsNyArODUsNyBAQCBPQkpTLSQo Q09ORklHX0NCU19NUEVHMikgICAgICAgICAgICAgICArPSBjYnNfbXBlZzIubwogT0JKUy0kKENP TkZJR19DQlNfVlA4KSAgICAgICAgICAgICAgICAgKz0gY2JzX3ZwOC5vIHZwOGRhdGEubwogT0JK Uy0kKENPTkZJR19DQlNfVlA5KSAgICAgICAgICAgICAgICAgKz0gY2JzX3ZwOS5vCiBPQkpTLSQo Q09ORklHX0RFRkxBVEVfV1JBUFBFUikgICAgICAgICArPSB6bGliX3dyYXBwZXIubwotT0JKUy0k KENPTkZJR19ET1ZJX1JQVURFQykgICAgICAgICAgICAgKz0gZG92aV9ycHUubworT0JKUy0kKENP TkZJR19ET1ZJX1JQVURFQykgICAgICAgICAgICAgKz0gZG92aV9ycHUubyBkb3ZpX3JwdWRlYy5v CiBPQkpTLSQoQ09ORklHX0VSUk9SX1JFU0lMSUVOQ0UpICAgICAgICArPSBlcnJvcl9yZXNpbGll bmNlLm8KIE9CSlMtJChDT05GSUdfRVZDUEFSU0UpICAgICAgICAgICAgICAgICs9IGV2Y19wYXJz ZS5vIGV2Y19wcy5vCiBPQkpTLSQoQ09ORklHX0VYSUYpICAgICAgICAgICAgICAgICAgICArPSBl eGlmLm8gdGlmZl9jb21tb24ubwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9kb3ZpX3JwdS5jIGIv bGliYXZjb2RlYy9kb3ZpX3JwdS5jCmluZGV4IDc3ZmVmOGM0OTYuLmIyNmMxOWRkNWUgMTAwNjQ0 Ci0tLSBhL2xpYmF2Y29kZWMvZG92aV9ycHUuYworKysgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmMK QEAgLTIsNyArMiw3IEBACiAgKiBEb2xieSBWaXNpb24gUlBVIGRlY29kZXIKICAqCiAgKiBDb3B5 cmlnaHQgKEMpIDIwMjEgSmFuIEVrc3Ryw7ZtCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgTmlrbGFz IEhhYXMKKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDI0IE5pa2xhcyBIYWFzCiAgKgogICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgogICoKQEAgLTIxLDI5ICsyMSwxMSBAQAogICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQogICovCiAKLSNpbmNsdWRlICJsaWJhdnV0aWwvYnVmZmVyLmgiCiAj aW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9jcmMuaCIKIAot I2luY2x1ZGUgImF2Y29kZWMuaCIKICNpbmNsdWRlICJkb3ZpX3JwdS5oIgotI2luY2x1ZGUgImdv bG9tYi5oIgotI2luY2x1ZGUgImdldF9iaXRzLmgiCiAjaW5jbHVkZSAicmVmc3RydWN0LmgiCiAK LWVudW0gewotICAgIFJQVV9DT0VGRl9GSVhFRCA9IDAsCi0gICAgUlBVX0NPRUZGX0ZMT0FUID0g MSwKLX07Ci0KLS8qKgotICogUHJpdmF0ZSBjb250ZW50cyBvZiB2ZHIuCi0gKi8KLXR5cGVkZWYg c3RydWN0IERPVklWZHIgewotICAgIEFWRE9WSURhdGFNYXBwaW5nIG1hcHBpbmc7Ci0gICAgQVZE T1ZJQ29sb3JNZXRhZGF0YSBjb2xvcjsKLX0gRE9WSVZkcjsKLQogdm9pZCBmZl9kb3ZpX2N0eF91 bnJlZihET1ZJQ29udGV4dCAqcykKIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZ X0VMRU1TKHMtPnZkcik7IGkrKykKQEAgLTgzLDQ0ICs2NSw2IEBAIHZvaWQgZmZfZG92aV9jdHhf cmVwbGFjZShET1ZJQ29udGV4dCAqcywgY29uc3QgRE9WSUNvbnRleHQgKnMwKQogICAgIGZmX3Jl ZnN0cnVjdF9yZXBsYWNlKCZzLT5leHRfYmxvY2tzLCBzMC0+ZXh0X2Jsb2Nrcyk7CiB9CiAKLWlu dCBmZl9kb3ZpX2F0dGFjaF9zaWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1l KQotewotICAgIEFWRnJhbWVTaWRlRGF0YSAqc2Q7Ci0gICAgQVZCdWZmZXJSZWYgKmJ1ZjsKLSAg ICBBVkRPVklNZXRhZGF0YSAqZG92aTsKLSAgICBzaXplX3QgZG92aV9zaXplLCBleHRfc3o7Ci0K LSAgICBpZiAoIXMtPm1hcHBpbmcgfHwgIXMtPmNvbG9yKQotICAgICAgICByZXR1cm4gMDsgLyog aW5jb21wbGV0ZSBkb3ZpIG1ldGFkYXRhICovCi0KLSAgICBkb3ZpID0gYXZfZG92aV9tZXRhZGF0 YV9hbGxvYygmZG92aV9zaXplKTsKLSAgICBpZiAoIWRvdmkpCi0gICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Ci0KLSAgICBidWYgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopIGRv dmksIGRvdmlfc2l6ZSwgTlVMTCwgTlVMTCwgMCk7Ci0gICAgaWYgKCFidWYpIHsKLSAgICAgICAg YXZfZnJlZShkb3ZpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9Ci0K LSAgICBzZCA9IGF2X2ZyYW1lX25ld19zaWRlX2RhdGFfZnJvbV9idWYoZnJhbWUsIEFWX0ZSQU1F X0RBVEFfRE9WSV9NRVRBREFUQSwgYnVmKTsKLSAgICBpZiAoIXNkKSB7Ci0gICAgICAgIGF2X2J1 ZmZlcl91bnJlZigmYnVmKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9 Ci0KLSAgICAvKiBDb3B5IG9ubHkgdGhlIHBhcnRzIG9mIHRoZXNlIHN0cnVjdHMga25vd24gdG8g dXMgYXQgY29tcGlsZXItdGltZS4gKi8KLSNkZWZpbmUgQ09QWSh0LCBhLCBiLCBsYXN0KSBtZW1j cHkoYSwgYiwgb2Zmc2V0b2YodCwgbGFzdCkgKyBzaXplb2YoKGIpLT5sYXN0KSkKLSAgICBDT1BZ KEFWRE9WSVJwdURhdGFIZWFkZXIsIGF2X2RvdmlfZ2V0X2hlYWRlcihkb3ZpKSwgJnMtPmhlYWRl ciwgZGlzYWJsZV9yZXNpZHVhbF9mbGFnKTsKLSAgICBDT1BZKEFWRE9WSURhdGFNYXBwaW5nLCBh dl9kb3ZpX2dldF9tYXBwaW5nKGRvdmkpLCBzLT5tYXBwaW5nLCBubHFfcGl2b3RzKTsKLSAgICBD T1BZKEFWRE9WSUNvbG9yTWV0YWRhdGEsIGF2X2RvdmlfZ2V0X2NvbG9yKGRvdmkpLCBzLT5jb2xv ciwgc291cmNlX2RpYWdvbmFsKTsKLSAgICBleHRfc3ogPSBGRk1JTihzaXplb2YoQVZET1ZJRG1E YXRhKSwgZG92aS0+ZXh0X2Jsb2NrX3NpemUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+ bnVtX2V4dF9ibG9ja3M7IGkrKykKLSAgICAgICAgbWVtY3B5KGF2X2RvdmlfZ2V0X2V4dChkb3Zp LCBpKSwgJnMtPmV4dF9ibG9ja3NbaV0sIGV4dF9zeik7Ci0gICAgZG92aS0+bnVtX2V4dF9ibG9j a3MgPSBzLT5udW1fZXh0X2Jsb2NrczsKLSAgICByZXR1cm4gMDsKLX0KLQogaW50IGZmX2Rvdmlf Z3Vlc3NfcHJvZmlsZV9oZXZjKGNvbnN0IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKIHsKICAg ICBzd2l0Y2ggKGhkci0+dmRyX3JwdV9wcm9maWxlKSB7CkBAIC0xNDIsNTY5ICs4NiwzIEBAIGlu dCBmZl9kb3ZpX2d1ZXNzX3Byb2ZpbGVfaGV2Yyhjb25zdCBBVkRPVklScHVEYXRhSGVhZGVyICpo ZHIpCiAKICAgICByZXR1cm4gMDsgLyogdW5rbm93biAqLwogfQotCi1zdGF0aWMgaW5saW5lIHVp bnQ2NF90IGdldF91ZV9jb2VmKEdldEJpdENvbnRleHQgKmdiLCBjb25zdCBBVkRPVklScHVEYXRh SGVhZGVyICpoZHIpCi17Ci0gICAgdWludDY0X3QgaXBhcnQ7Ci0gICAgdW5pb24geyB1aW50MzJf dCB1MzI7IGZsb2F0IGYzMjsgfSBmcGFydDsKLQotICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFf dHlwZSkgewotICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgotICAgICAgICBpcGFydCA9IGdldF91 ZV9nb2xvbWJfbG9uZyhnYik7Ci0gICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRzX2xvbmcoZ2Is IGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKLSAgICAgICAgcmV0dXJuIChpcGFydCA8PCBoZHItPmNv ZWZfbG9nMl9kZW5vbSkgfCBmcGFydC51MzI7Ci0KLSAgICBjYXNlIFJQVV9DT0VGRl9GTE9BVDoK LSAgICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOwotICAgICAgICByZXR1 cm4gZnBhcnQuZjMyICogKDFMTCA8PCBoZHItPmNvZWZfbG9nMl9kZW5vbSk7Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7IC8qIHVucmVhY2hhYmxlICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50NjRf dCBnZXRfc2VfY29lZihHZXRCaXRDb250ZXh0ICpnYiwgY29uc3QgQVZET1ZJUnB1RGF0YUhlYWRl ciAqaGRyKQotewotICAgIGludDY0X3QgaXBhcnQ7Ci0gICAgdW5pb24geyB1aW50MzJfdCB1MzI7 IGZsb2F0IGYzMjsgfSBmcGFydDsKLQotICAgIHN3aXRjaCAoaGRyLT5jb2VmX2RhdGFfdHlwZSkg ewotICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgotICAgICAgICBpcGFydCA9IGdldF9zZV9nb2xv bWJfbG9uZyhnYik7Ci0gICAgICAgIGZwYXJ0LnUzMiA9IGdldF9iaXRzX2xvbmcoZ2IsIGhkci0+ Y29lZl9sb2cyX2Rlbm9tKTsKLSAgICAgICAgcmV0dXJuIGlwYXJ0ICogKDFMTCA8PCBoZHItPmNv ZWZfbG9nMl9kZW5vbSkgfCBmcGFydC51MzI7Ci0KLSAgICBjYXNlIFJQVV9DT0VGRl9GTE9BVDoK LSAgICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOwotICAgICAgICByZXR1 cm4gZnBhcnQuZjMyICogKDFMTCA8PCBoZHItPmNvZWZfbG9nMl9kZW5vbSk7Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7IC8qIHVucmVhY2hhYmxlICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgZ2V0X3ZhcmlhYmxlX2JpdHMoR2V0Qml0Q29udGV4dCAqZ2IsIGludCBuKQotewotICAgIHVu c2lnbmVkIGludCB2YWx1ZSA9IGdldF9iaXRzKGdiLCBuKTsKLSAgICBpbnQgcmVhZF9tb3JlID0g Z2V0X2JpdHMxKGdiKTsKLSAgICB3aGlsZSAocmVhZF9tb3JlKSB7Ci0gICAgICAgIHZhbHVlID0g KHZhbHVlICsgMSkgPDwgbjsKLSAgICAgICAgdmFsdWUgfD0gZ2V0X2JpdHMoZ2IsIG4pOwotICAg ICAgICByZWFkX21vcmUgPSBnZXRfYml0czEoZ2IpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7 Ci19Ci0KLSNkZWZpbmUgVkFMSURBVEUoVkFSLCBNSU4sIE1BWCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgIGlmIChWQVIgPCBNSU4gfHwgVkFSID4gTUFYKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGF2X2xvZyhzLT5sb2djdHgs IEFWX0xPR19FUlJPUiwgIlJQVSB2YWxpZGF0aW9uIGZhaWxlZDogIiAgICAgICAgICAgXAotICAg ICAgICAgICAgICAgICAgICNNSU4iIDw9ICIjVkFSIiA9ICVkIDw9ICIjTUFYIlxuIiwgKGludCkg VkFSKTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIGZhaWw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLXN0YXRpYyB2b2lkIHBhcnNlX2V4 dF92MShET1ZJQ29udGV4dCAqcywgR2V0Qml0Q29udGV4dCAqZ2IsIEFWRE9WSURtRGF0YSAqZG0p Ci17Ci0gICAgc3dpdGNoIChkbS0+bGV2ZWwpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGRtLT5s MS5taW5fcHEgPSBnZXRfYml0cyhnYiwgMTIpOwotICAgICAgICBkbS0+bDEubWF4X3BxID0gZ2V0 X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgZG0tPmwxLmF2Z19wcSA9IGdldF9iaXRzKGdiLCAxMik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgZG0tPmwyLnRhcmdldF9tYXhf cHEgPSBnZXRfYml0cyhnYiwgMTIpOwotICAgICAgICBkbS0+bDIudHJpbV9zbG9wZSA9IGdldF9i aXRzKGdiLCAxMik7Ci0gICAgICAgIGRtLT5sMi50cmltX29mZnNldCA9IGdldF9iaXRzKGdiLCAx Mik7Ci0gICAgICAgIGRtLT5sMi50cmltX3Bvd2VyID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAg ICAgZG0tPmwyLnRyaW1fY2hyb21hX3dlaWdodCA9IGdldF9iaXRzKGdiLCAxMik7Ci0gICAgICAg IGRtLT5sMi50cmltX3NhdHVyYXRpb25fZ2FpbiA9IGdldF9iaXRzKGdiLCAxMik7Ci0gICAgICAg IGRtLT5sMi5tc193ZWlnaHQgPSBnZXRfYml0cyhnYiwgMTMpIC0gODE5MjsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBkbS0+bDQuYW5jaG9yX3BxID0gZ2V0X2JpdHMoZ2Is IDEyKTsKLSAgICAgICAgZG0tPmw0LmFuY2hvcl9wb3dlciA9IGdldF9iaXRzKGdiLCAxMik7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgNToKLSAgICAgICAgZG0tPmw1LmxlZnRfb2Zmc2V0ID0g Z2V0X2JpdHMoZ2IsIDEzKTsKLSAgICAgICAgZG0tPmw1LnJpZ2h0X29mZnNldCA9IGdldF9iaXRz KGdiLCAxMyk7Ci0gICAgICAgIGRtLT5sNS50b3Bfb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIDEzKTsK LSAgICAgICAgZG0tPmw1LmJvdHRvbV9vZmZzZXQgPSBnZXRfYml0cyhnYiwgMTMpOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlIDY6Ci0gICAgICAgIGRtLT5sNi5tYXhfbHVtaW5hbmNlID0gZ2V0 X2JpdHMoZ2IsIDE2KTsKLSAgICAgICAgZG0tPmw2Lm1pbl9sdW1pbmFuY2UgPSBnZXRfYml0cyhn YiwgMTYpOwotICAgICAgICBkbS0+bDYubWF4X2NsbCA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAg ICAgIGRtLT5sNi5tYXhfZmFsbCA9IGdldF9iaXRzKGdiLCAxNik7Ci0gICAgICAgIGJyZWFrOwot ICAgIGNhc2UgMjU1OgotICAgICAgICBkbS0+bDI1NS5kbV9ydW5fbW9kZSA9IGdldF9iaXRzKGdi LCA4KTsKLSAgICAgICAgZG0tPmwyNTUuZG1fcnVuX3ZlcnNpb24gPSBnZXRfYml0cyhnYiwgOCk7 Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgICAgICAgZG0tPmwy NTUuZG1fZGVidWdbaV0gPSBnZXRfYml0cyhnYiwgOCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19XQVJOSU5HLAotICAgICAg ICAgICAgICAgIlVua25vd24gRG9sYnkgVmlzaW9uIERNIHYxIGxldmVsOiAldVxuIiwgZG0tPmxl dmVsKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBBVkNJRXh5IGdldF9jaWVfeHkoR2V0Qml0Q29udGV4 dCAqZ2IpCi17Ci0gICAgQVZDSUV4eSB4eTsKLSAgICBjb25zdCBpbnQgZGVub20gPSAzMjc2NzsK LSAgICB4eS54ID0gYXZfbWFrZV9xKGdldF9zYml0cyhnYiwgMTYpLCBkZW5vbSk7Ci0gICAgeHku eSA9IGF2X21ha2VfcShnZXRfc2JpdHMoZ2IsIDE2KSwgZGVub20pOwotICAgIHJldHVybiB4eTsK LX0KLQotc3RhdGljIHZvaWQgcGFyc2VfZXh0X3YyKERPVklDb250ZXh0ICpzLCBHZXRCaXRDb250 ZXh0ICpnYiwgQVZET1ZJRG1EYXRhICpkbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZXh0X2Jsb2NrX2xlbmd0aCkKLXsKLSAgICBzd2l0Y2ggKGRtLT5sZXZlbCkgewotICAgIGNhc2Ug MzoKLSAgICAgICAgZG0tPmwzLm1pbl9wcV9vZmZzZXQgPSBnZXRfYml0cyhnYiwgMTIpOwotICAg ICAgICBkbS0+bDMubWF4X3BxX29mZnNldCA9IGdldF9iaXRzKGdiLCAxMik7Ci0gICAgICAgIGRt LT5sMy5hdmdfcHFfb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSA4OgotICAgICAgICBkbS0+bDgudGFyZ2V0X2Rpc3BsYXlfaW5kZXggPSBnZXRfYml0 cyhnYiwgOCk7Ci0gICAgICAgIGRtLT5sOC50cmltX3Nsb3BlID0gZ2V0X2JpdHMoZ2IsIDEyKTsK LSAgICAgICAgZG0tPmw4LnRyaW1fb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAg ZG0tPmw4LnRyaW1fcG93ZXIgPSBnZXRfYml0cyhnYiwgMTIpOwotICAgICAgICBkbS0+bDgudHJp bV9jaHJvbWFfd2VpZ2h0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgZG0tPmw4LnRyaW1f c2F0dXJhdGlvbl9nYWluID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgZG0tPmw4Lm1zX3dl aWdodCA9IGdldF9iaXRzKGdiLCAxMikgLSA4MTkyOwotICAgICAgICBpZiAoZXh0X2Jsb2NrX2xl bmd0aCA8IDEyKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRtLT5sOC50YXJnZXRfbWlk X2NvbnRyYXN0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgaWYgKGV4dF9ibG9ja19sZW5n dGggPCAxMykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkbS0+bDguY2xpcF90cmltID0g Z2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgaWYgKGV4dF9ibG9ja19sZW5ndGggPCAxOSkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAg ICAgICAgICAgIGRtLT5sOC5zYXR1cmF0aW9uX3ZlY3Rvcl9maWVsZFtpXSA9IGdldF9iaXRzKGdi LCA4KTsKLSAgICAgICAgaWYgKGV4dF9ibG9ja19sZW5ndGggPCAyNSkKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICAgICAgICAgIGRt LT5sOC5odWVfdmVjdG9yX2ZpZWxkW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOwotICAgICAgICBicmVh azsKLSAgICBjYXNlIDk6Ci0gICAgICAgIGRtLT5sOS5zb3VyY2VfcHJpbWFyeV9pbmRleCA9IGdl dF9iaXRzKGdiLCA4KTsKLSAgICAgICAgaWYgKGV4dF9ibG9ja19sZW5ndGggPCAxNykKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBkbS0+bDkuc291cmNlX2Rpc3BsYXlfcHJpbWFyaWVzLnBy aW0uciA9IGdldF9jaWVfeHkoZ2IpOwotICAgICAgICBkbS0+bDkuc291cmNlX2Rpc3BsYXlfcHJp bWFyaWVzLnByaW0uZyA9IGdldF9jaWVfeHkoZ2IpOwotICAgICAgICBkbS0+bDkuc291cmNlX2Rp c3BsYXlfcHJpbWFyaWVzLnByaW0uYiA9IGdldF9jaWVfeHkoZ2IpOwotICAgICAgICBkbS0+bDku c291cmNlX2Rpc3BsYXlfcHJpbWFyaWVzLndwID0gZ2V0X2NpZV94eShnYik7Ci0gICAgICAgIGJy ZWFrOwotICAgIGNhc2UgMTA6Ci0gICAgICAgIGRtLT5sMTAudGFyZ2V0X2Rpc3BsYXlfaW5kZXgg PSBnZXRfYml0cyhnYiwgOCk7Ci0gICAgICAgIGRtLT5sMTAudGFyZ2V0X21heF9wcSA9IGdldF9i aXRzKGdiLCAxMik7Ci0gICAgICAgIGRtLT5sMTAudGFyZ2V0X21pbl9wcSA9IGdldF9iaXRzKGdi LCAxMik7Ci0gICAgICAgIGRtLT5sMTAudGFyZ2V0X3ByaW1hcnlfaW5kZXggPSBnZXRfYml0cyhn YiwgOCk7Ci0gICAgICAgIGlmIChleHRfYmxvY2tfbGVuZ3RoIDwgMjEpCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgZG0tPmwxMC50YXJnZXRfZGlzcGxheV9wcmltYXJpZXMucHJpbS5yID0g Z2V0X2NpZV94eShnYik7Ci0gICAgICAgIGRtLT5sMTAudGFyZ2V0X2Rpc3BsYXlfcHJpbWFyaWVz LnByaW0uZyA9IGdldF9jaWVfeHkoZ2IpOwotICAgICAgICBkbS0+bDEwLnRhcmdldF9kaXNwbGF5 X3ByaW1hcmllcy5wcmltLmIgPSBnZXRfY2llX3h5KGdiKTsKLSAgICAgICAgZG0tPmwxMC50YXJn ZXRfZGlzcGxheV9wcmltYXJpZXMud3AgPSBnZXRfY2llX3h5KGdiKTsKLSAgICAgICAgYnJlYWs7 Ci0gICAgY2FzZSAxMToKLSAgICAgICAgZG0tPmwxMS5jb250ZW50X3R5cGUgPSBnZXRfYml0cyhn YiwgOCk7Ci0gICAgICAgIGRtLT5sMTEud2hpdGVwb2ludCA9IGdldF9iaXRzKGdiLCA0KTsKLSAg ICAgICAgZG0tPmwxMS5yZWZlcmVuY2VfbW9kZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKLSAgICAg ICAgc2tpcF9iaXRzKGdiLCAzKTsgLyogcmVzZXJ2ZWQgKi8KLSAgICAgICAgZG0tPmwxMS5zaGFy cG5lc3MgPSBnZXRfYml0cyhnYiwgMik7Ci0gICAgICAgIGRtLT5sMTEubm9pc2VfcmVkdWN0aW9u ID0gZ2V0X2JpdHMoZ2IsIDIpOwotICAgICAgICBkbS0+bDExLm1wZWdfbm9pc2VfcmVkdWN0aW9u ID0gZ2V0X2JpdHMoZ2IsIDIpOwotICAgICAgICBkbS0+bDExLmZyYW1lX3JhdGVfY29udmVyc2lv biA9IGdldF9iaXRzKGdiLCAyKTsKLSAgICAgICAgZG0tPmwxMS5icmlnaHRuZXNzID0gZ2V0X2Jp dHMoZ2IsIDIpOwotICAgICAgICBkbS0+bDExLmNvbG9yID0gZ2V0X2JpdHMoZ2IsIDIpOwotICAg ICAgICBicmVhazsKLSAgICBjYXNlIDI1NDoKLSAgICAgICAgZG0tPmwyNTQuZG1fbW9kZSA9IGdl dF9iaXRzKGdiLCA4KTsKLSAgICAgICAgZG0tPmwyNTQuZG1fdmVyc2lvbl9pbmRleCA9IGdldF9i aXRzKGdiLCA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXZfbG9n KHMtPmxvZ2N0eCwgQVZfTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAiVW5rbm93biBEb2xi eSBWaXNpb24gRE0gdjIgbGV2ZWw6ICV1XG4iLCBkbS0+bGV2ZWwpOwotICAgIH0KLX0KLQotc3Rh dGljIGludCBwYXJzZV9leHRfYmxvY2tzKERPVklDb250ZXh0ICpzLCBHZXRCaXRDb250ZXh0ICpn YiwgaW50IHZlcikKLXsKLSAgICBpbnQgbnVtX2V4dF9ibG9ja3MsIGV4dF9ibG9ja19sZW5ndGgs IHN0YXJ0X3BvcywgcGFyc2VkX2JpdHM7Ci0KLSAgICBudW1fZXh0X2Jsb2NrcyA9IGdldF91ZV9n b2xvbWJfMzEoZ2IpOwotICAgIGFsaWduX2dldF9iaXRzKGdiKTsKLSAgICBpZiAocy0+bnVtX2V4 dF9ibG9ja3MgKyBudW1fZXh0X2Jsb2NrcyA+IEFWX0RPVklfTUFYX0VYVF9CTE9DS1MpCi0gICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotCi0gICAgaWYgKCFzLT5leHRfYmxvY2tz KSB7Ci0gICAgICAgIHMtPmV4dF9ibG9ja3MgPSBmZl9yZWZzdHJ1Y3RfYWxsb2N6KHNpemVvZihB VkRPVklEbURhdGEpICogQVZfRE9WSV9NQVhfRVhUX0JMT0NLUyk7Ci0gICAgICAgIGlmICghcy0+ ZXh0X2Jsb2NrcykKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQot Ci0gICAgd2hpbGUgKG51bV9leHRfYmxvY2tzLS0pIHsKLSAgICAgICAgQVZET1ZJRG1EYXRhICpk bSA9ICZzLT5leHRfYmxvY2tzW3MtPm51bV9leHRfYmxvY2tzKytdOwotICAgICAgICBleHRfYmxv Y2tfbGVuZ3RoID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7Ci0gICAgICAgIGRtLT5sZXZlbCA9IGdl dF9iaXRzKGdiLCA4KTsKLSAgICAgICAgc3RhcnRfcG9zID0gZ2V0X2JpdHNfY291bnQoZ2IpOwot Ci0gICAgICAgIHN3aXRjaCAodmVyKSB7Ci0gICAgICAgIGNhc2UgMTogcGFyc2VfZXh0X3YxKHMs IGdiLCBkbSk7IGJyZWFrOwotICAgICAgICBjYXNlIDI6IHBhcnNlX2V4dF92MihzLCBnYiwgZG0s IGV4dF9ibG9ja19sZW5ndGgpOyBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcnNlZF9i aXRzID0gZ2V0X2JpdHNfY291bnQoZ2IpIC0gc3RhcnRfcG9zOwotICAgICAgICBpZiAocGFyc2Vk X2JpdHMgPiBleHRfYmxvY2tfbGVuZ3RoICogOCkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwotICAgICAgICBza2lwX2JpdHMoZ2IsIGV4dF9ibG9ja19sZW5ndGggKiA4 IC0gcGFyc2VkX2JpdHMpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfZG92 aV9ycHVfcGFyc2UoRE9WSUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKnJwdSwgc2l6ZV90IHJw dV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgIGludCBlcnJfcmVjb2duaXRpb24pCi17Ci0g ICAgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyID0gJnMtPmhlYWRlcjsKLSAgICBHZXRCaXRDb250 ZXh0ICpnYiA9ICYoR2V0Qml0Q29udGV4dCl7MH07Ci0gICAgRE9WSVZkciAqdmRyOwotICAgIGlu dCByZXQ7Ci0KLSAgICB1aW50OF90IHJwdV90eXBlOwotICAgIHVpbnQ4X3QgdmRyX3NlcV9pbmZv X3ByZXNlbnQ7Ci0gICAgdWludDhfdCB2ZHJfZG1fbWV0YWRhdGFfcHJlc2VudDsKLSAgICB1aW50 OF90IHVzZV9wcmV2X3Zkcl9ycHU7Ci0gICAgdWludDhfdCB1c2VfbmxxOwotICAgIHVpbnQ4X3Qg cHJvZmlsZTsKLQotICAgIGlmIChycHVfc2l6ZSA8IDUpCi0gICAgICAgIGdvdG8gZmFpbDsKLQot ICAgIC8qIENvbnRhaW5lciAqLwotICAgIGlmIChzLT5jZmcuZHZfcHJvZmlsZSA9PSAxMCAvKiBk YXYxLjEwICovKSB7Ci0gICAgICAgIC8qIERWIGluc2lkZSBBVjEgcmUtdXNlcyBhbiBFTURGIGNv bnRhaW5lciBza2VsZXRvbiwgYnV0IHdpdGggZml4ZWQKLSAgICAgICAgICogdmFsdWVzIC0gc28g d2UgY2FuIGVmZmVjdGl2ZWx5IHRyZWF0IHRoaXMgYXMgYSBtYWdpYyBieXRlIHNlcXVlbmNlLgot ICAgICAgICAgKgotICAgICAgICAgKiBUaGUgZXhhY3QgZmllbGRzIGFyZSwgYXMgZm9sbG93czoK LSAgICAgICAgICogICBlbWRmX3ZlcnNpb24gICAgICAgICAgICA6IGYoMikgPSAwCi0gICAgICAg ICAqICAga2V5X2lkICAgICAgICAgICAgICAgICAgOiBmKDMpID0gNgotICAgICAgICAgKiAgIGVt ZGZfcGF5bG9hZF9pZCAgICAgICAgIDogZig1KSA9IDMxCi0gICAgICAgICAqICAgZW1kZl9wYXls b2FkX2lkX2V4dCAgICAgOiB2YXIoNSkgPSAyMjUKLSAgICAgICAgICogICBzbXBsb2Zmc3RlICAg ICAgICAgICAgICA6IGYoMSkgPSAwCi0gICAgICAgICAqICAgZHVyYXRpb25lICAgICAgICAgICAg ICAgOiBmKDEpID0gMAotICAgICAgICAgKiAgIGdyb3VwaWRlICAgICAgICAgICAgICAgIDogZigx KSA9IDAKLSAgICAgICAgICogICBjb2RlY2RhdGFlICAgICAgICAgICAgICA6IGYoMSkgPSAwCi0g ICAgICAgICAqICAgZGlzY2FyZF91bmtub3duX3BheWxvYWQgOiBmKDEpID0gMQotICAgICAgICAg Ki8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaGVhZGVyX21hZ2ljID0gMHgwMWJlNjg0MXU7Ci0g ICAgICAgIHVuc2lnbmVkIGVtZGZfaGVhZGVyLCBlbWRmX3BheWxvYWRfc2l6ZSwgZW1kZl9wcm90 ZWN0aW9uOwotICAgICAgICBpZiAoKHJldCA9IGluaXRfZ2V0X2JpdHM4KGdiLCBycHUsIHJwdV9z aXplKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgZW1kZl9oZWFkZXIg PSBnZXRfYml0c19sb25nKGdiLCAyNyk7Ci0gICAgICAgIFZBTElEQVRFKGVtZGZfaGVhZGVyLCBo ZWFkZXJfbWFnaWMsIGhlYWRlcl9tYWdpYyk7Ci0gICAgICAgIGVtZGZfcGF5bG9hZF9zaXplID0g Z2V0X3ZhcmlhYmxlX2JpdHMoZ2IsIDgpOwotICAgICAgICBWQUxJREFURShlbWRmX3BheWxvYWRf c2l6ZSwgNiwgNTEyKTsKLSAgICAgICAgaWYgKGVtZGZfcGF5bG9hZF9zaXplICogOCA+IGdldF9i aXRzX2xlZnQoZ2IpKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Ci0K LSAgICAgICAgLyogVGhlIHBheWxvYWQgaXMgbm90IGJ5dGUtYWxpZ25lZCAob2ZmIGJ5ICpvbmUq IGJpdCwgY3Vyc2UgRG9sYnkpLAotICAgICAgICAgKiBzbyBjb3B5IGludG8gYSBmcmVzaCBidWZm ZXIgdG8gcHJlc2VydmUgYnl0ZSBhbGlnbm1lbnQgb2YgdGhlCi0gICAgICAgICAqIFJQVSBzdHJ1 Y3QgKi8KLSAgICAgICAgYXZfZmFzdF9wYWRkZWRfbWFsbG9jKCZzLT5ycHVfYnVmLCAmcy0+cnB1 X2J1Zl9zeiwgZW1kZl9wYXlsb2FkX3NpemUpOwotICAgICAgICBpZiAoIXMtPnJwdV9idWYpCi0g ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IGVtZGZfcGF5bG9hZF9zaXplOyBpKyspCi0gICAgICAgICAgICBzLT5ycHVfYnVmW2ld ID0gZ2V0X2JpdHMoZ2IsIDgpOwotICAgICAgICBycHUgPSBzLT5ycHVfYnVmOwotICAgICAgICBy cHVfc2l6ZSA9IGVtZGZfcGF5bG9hZF9zaXplOwotCi0gICAgICAgIC8qIFZhbGlkYXRlIEVNREYg Zm9vdGVyICovCi0gICAgICAgIGVtZGZfcHJvdGVjdGlvbiA9IGdldF9iaXRzKGdiLCA1ICsgMTIp OwotICAgICAgICBWQUxJREFURShlbWRmX3Byb3RlY3Rpb24sIDB4NDAwLCAweDQwMCk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgLyogTkFMIFJCU1Agd2l0aCBwcmVmaXggYW5kIHRyYWlsaW5nIHpl cm9lcyAqLwotICAgICAgICBWQUxJREFURShycHVbMF0sIDI1LCAyNSk7IC8qIE5BTCBwcmVmaXgg Ki8KLSAgICAgICAgcnB1Kys7Ci0gICAgICAgIHJwdV9zaXplLS07Ci0gICAgICAgIC8qIFN0cmlw IHRyYWlsaW5nIHBhZGRpbmcgYnl0ZXMgKi8KLSAgICAgICAgd2hpbGUgKHJwdV9zaXplICYmIHJw dVtycHVfc2l6ZSAtIDFdID09IDApCi0gICAgICAgICAgICBycHVfc2l6ZS0tOwotICAgIH0KLQot ICAgIGlmICghcnB1X3NpemUgfHwgcnB1W3JwdV9zaXplIC0gMV0gIT0gMHg4MCkKLSAgICAgICAg Z290byBmYWlsOwotCi0gICAgaWYgKGVycl9yZWNvZ25pdGlvbiAmIEFWX0VGX0NSQ0NIRUNLKSB7 Ci0gICAgICAgIHVpbnQzMl90IGNyYyA9IGF2X2Jzd2FwMzIoYXZfY3JjKGF2X2NyY19nZXRfdGFi bGUoQVZfQ1JDXzMyX0lFRUUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x LCBycHUsIHJwdV9zaXplIC0gMSkpOyAvKiBleGNsdWRlIDB4ODAgKi8KLSAgICAgICAgaWYgKGNy YykgewotICAgICAgICAgICAgYXZfbG9nKHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiUlBVIENS QyBtaXNtYXRjaDogJVhcbiIsIGNyYyk7Ci0gICAgICAgICAgICBpZiAoZXJyX3JlY29nbml0aW9u ICYgQVZfRUZfRVhQTE9ERSkKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0K LSAgICB9Ci0KLSAgICBpZiAoKHJldCA9IGluaXRfZ2V0X2JpdHM4KGdiLCBycHUsIHJwdV9zaXpl KSkgPCAwKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgLyogUlBVIGhlYWRlciAqLwotICAg IHJwdV90eXBlID0gZ2V0X2JpdHMoZ2IsIDYpOwotICAgIGlmIChycHVfdHlwZSAhPSAyKSB7Ci0g ICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5yZWNvZ25pemVkIFJQ VSB0eXBlICIKLSAgICAgICAgICAgICAgICIlIlBSSXU4IiwgaWdub3JpbmdcbiIsIHJwdV90eXBl KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaGRyLT5ycHVfdHlwZSA9IHJwdV90 eXBlOwotICAgIGhkci0+cnB1X2Zvcm1hdCA9IGdldF9iaXRzKGdiLCAxMSk7Ci0KLSAgICAvKiBW YWx1ZXMgc3BlY2lmaWMgdG8gUlBVIHR5cGUgMiAqLwotICAgIGhkci0+dmRyX3JwdV9wcm9maWxl ID0gZ2V0X2JpdHMoZ2IsIDQpOwotICAgIGhkci0+dmRyX3JwdV9sZXZlbCA9IGdldF9iaXRzKGdi LCA0KTsKLQotICAgIHZkcl9zZXFfaW5mb19wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKLSAgICBp ZiAodmRyX3NlcV9pbmZvX3ByZXNlbnQpIHsKLSAgICAgICAgaGRyLT5jaHJvbWFfcmVzYW1wbGlu Z19leHBsaWNpdF9maWx0ZXJfZmxhZyA9IGdldF9iaXRzMShnYik7Ci0gICAgICAgIGhkci0+Y29l Zl9kYXRhX3R5cGUgPSBnZXRfYml0cyhnYiwgMik7Ci0gICAgICAgIFZBTElEQVRFKGhkci0+Y29l Zl9kYXRhX3R5cGUsIFJQVV9DT0VGRl9GSVhFRCwgUlBVX0NPRUZGX0ZMT0FUKTsKLSAgICAgICAg c3dpdGNoIChoZHItPmNvZWZfZGF0YV90eXBlKSB7Ci0gICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZJ WEVEOgotICAgICAgICAgICAgaGRyLT5jb2VmX2xvZzJfZGVub20gPSBnZXRfdWVfZ29sb21iKGdi KTsKLSAgICAgICAgICAgIFZBTElEQVRFKGhkci0+Y29lZl9sb2cyX2Rlbm9tLCAxMywgMzIpOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgotICAgICAg ICAgICAgaGRyLT5jb2VmX2xvZzJfZGVub20gPSAzMjsgLyogYXJiaXRyYXJ5LCBjaG9vc2UgbWF4 aW11bSBwcmVjaXNpb24gKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg ICAgaGRyLT52ZHJfcnB1X25vcm1hbGl6ZWRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOwotICAgICAg ICBoZHItPmJsX3ZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9IGdldF9iaXRzMShnYik7Ci0KLSAgICAg ICAgaWYgKChoZHItPnJwdV9mb3JtYXQgJiAweDcwMCkgPT0gMCkgewotICAgICAgICAgICAgaW50 IGJsX2JpdF9kZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAgICAgICAgICAg IGludCBlbF9iaXRfZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7Ci0gICAgICAg ICAgICBpbnQgdmRyX2JpdF9kZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAg ICAgICAgICAgIFZBTElEQVRFKGJsX2JpdF9kZXB0aF9taW51czgsIDAsIDgpOwotICAgICAgICAg ICAgVkFMSURBVEUoZWxfYml0X2RlcHRoX21pbnVzOCwgMCwgOCk7Ci0gICAgICAgICAgICBWQUxJ REFURSh2ZHJfYml0X2RlcHRoX21pbnVzOCwgMCwgOCk7Ci0gICAgICAgICAgICBoZHItPmJsX2Jp dF9kZXB0aCA9IGJsX2JpdF9kZXB0aF9taW51czggKyA4OwotICAgICAgICAgICAgaGRyLT5lbF9i aXRfZGVwdGggPSBlbF9iaXRfZGVwdGhfbWludXM4ICsgODsKLSAgICAgICAgICAgIGhkci0+dmRy X2JpdF9kZXB0aCA9IHZkcl9iaXRfZGVwdGhfbWludXM4ICsgODsKLSAgICAgICAgICAgIGhkci0+ c3BhdGlhbF9yZXNhbXBsaW5nX2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKLSAgICAgICAg ICAgIHNraXBfYml0cyhnYiwgMyk7IC8qIHJlc2VydmVkX3plcm9fM2JpdHMgKi8KLSAgICAgICAg ICAgIGhkci0+ZWxfc3BhdGlhbF9yZXNhbXBsaW5nX2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKLSAgICAgICAgICAgIGhkci0+ZGlzYWJsZV9yZXNpZHVhbF9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGxhY2sgb2YgZG9jdW1lbnRh dGlvbi9zYW1wbGVzICovCi0gICAgICAgIGF2cHJpdl9yZXF1ZXN0X3NhbXBsZShzLT5sb2djdHgs ICJNaXNzaW5nIFJQVSBWRFIgc2VxdWVuY2UgaW5mb1xuIik7Ci0gICAgICAgIGZmX2RvdmlfY3R4 X3VucmVmKHMpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci0gICAgfQot Ci0gICAgdmRyX2RtX21ldGFkYXRhX3ByZXNlbnQgPSBnZXRfYml0czEoZ2IpOwotICAgIHVzZV9w cmV2X3Zkcl9ycHUgPSBnZXRfYml0czEoZ2IpOwotICAgIHVzZV9ubHEgPSAoaGRyLT5ycHVfZm9y bWF0ICYgMHg3MDApID09IDAgJiYgIWhkci0+ZGlzYWJsZV9yZXNpZHVhbF9mbGFnOwotCi0gICAg cHJvZmlsZSA9IHMtPmNmZy5kdl9wcm9maWxlID8gcy0+Y2ZnLmR2X3Byb2ZpbGUgOiBmZl9kb3Zp X2d1ZXNzX3Byb2ZpbGVfaGV2YyhoZHIpOwotICAgIGlmIChwcm9maWxlID09IDUgJiYgdXNlX25s cSkgewotICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJQcm9maWxlIDUg UlBVcyBzaG91bGQgbm90IHVzZSBOTFFcbiIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQot Ci0gICAgaWYgKHVzZV9wcmV2X3Zkcl9ycHUpIHsKLSAgICAgICAgaW50IHByZXZfdmRyX3JwdV9p ZCA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOwotICAgICAgICBWQUxJREFURShwcmV2X3Zkcl9ycHVf aWQsIDAsIERPVklfTUFYX0RNX0lEKTsKLSAgICAgICAgaWYgKCFzLT52ZHJbcHJldl92ZHJfcnB1 X2lkXSkgewotICAgICAgICAgICAgYXZfbG9nKHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiVW5r bm93biBwcmV2aW91cyBSUFUgSUQ6ICV1XG4iLAotICAgICAgICAgICAgICAgICAgIHByZXZfdmRy X3JwdV9pZCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdmRy ID0gcy0+dmRyW3ByZXZfdmRyX3JwdV9pZF07Ci0gICAgICAgIHMtPm1hcHBpbmcgPSAmdmRyLT5t YXBwaW5nOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCB2ZHJfcnB1X2lkID0gZ2V0X3VlX2dv bG9tYl8zMShnYik7Ci0gICAgICAgIFZBTElEQVRFKHZkcl9ycHVfaWQsIDAsIERPVklfTUFYX0RN X0lEKTsKLSAgICAgICAgaWYgKCFzLT52ZHJbdmRyX3JwdV9pZF0pIHsKLSAgICAgICAgICAgIHMt PnZkclt2ZHJfcnB1X2lkXSA9IGZmX3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKERPVklWZHIpKTsK LSAgICAgICAgICAgIGlmICghcy0+dmRyW3Zkcl9ycHVfaWRdKQotICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2ZHIgPSBzLT52ZHJb dmRyX3JwdV9pZF07Ci0gICAgICAgIHMtPm1hcHBpbmcgPSAmdmRyLT5tYXBwaW5nOwotCi0gICAg ICAgIHZkci0+bWFwcGluZy52ZHJfcnB1X2lkID0gdmRyX3JwdV9pZDsKLSAgICAgICAgdmRyLT5t YXBwaW5nLm1hcHBpbmdfY29sb3Jfc3BhY2UgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAgICAg ICAgdmRyLT5tYXBwaW5nLm1hcHBpbmdfY2hyb21hX2Zvcm1hdF9pZGMgPSBnZXRfdWVfZ29sb21i XzMxKGdiKTsKLQotICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgewotICAgICAg ICAgICAgQVZET1ZJUmVzaGFwaW5nQ3VydmUgKmN1cnZlID0gJnZkci0+bWFwcGluZy5jdXJ2ZXNb Y107Ci0gICAgICAgICAgICBpbnQgbnVtX3Bpdm90c19taW51c18yID0gZ2V0X3VlX2dvbG9tYl8z MShnYik7Ci0gICAgICAgICAgICBpbnQgcGl2b3QgPSAwOwotCi0gICAgICAgICAgICBWQUxJREFU RShudW1fcGl2b3RzX21pbnVzXzIsIDAsIEFWX0RPVklfTUFYX1BJRUNFUyAtIDEpOwotICAgICAg ICAgICAgY3VydmUtPm51bV9waXZvdHMgPSBudW1fcGl2b3RzX21pbnVzXzIgKyAyOwotICAgICAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJ2ZS0+bnVtX3Bpdm90czsgaSsrKSB7Ci0gICAg ICAgICAgICAgICAgcGl2b3QgKz0gZ2V0X2JpdHMoZ2IsIGhkci0+YmxfYml0X2RlcHRoKTsKLSAg ICAgICAgICAgICAgICBjdXJ2ZS0+cGl2b3RzW2ldID0gYXZfY2xpcF91aW50MTYocGl2b3QpOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZV9ubHEpIHsKLSAgICAg ICAgICAgIGludCBubHFfcGl2b3QgPSAwOwotICAgICAgICAgICAgdmRyLT5tYXBwaW5nLm5scV9t ZXRob2RfaWRjID0gZ2V0X2JpdHMoZ2IsIDMpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgewotICAgICAgICAgICAgICAgIG5scV9waXZvdCArPSBnZXRfYml0cyhn YiwgaGRyLT5ibF9iaXRfZGVwdGgpOwotICAgICAgICAgICAgICAgIHZkci0+bWFwcGluZy5ubHFf cGl2b3RzW2ldID0gYXZfY2xpcF91aW50MTYobmxxX3Bpdm90KTsKLSAgICAgICAgICAgIH0KLQot ICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUaGUgcGF0ZW50IG1lbnRpb25zIGFub3Ro ZXIgbGVnYWwgdmFsdWUsIE5MUV9NVV9MQVcsIGJ1dCBpdCdzCi0gICAgICAgICAgICAgKiBub3Qg ZG9jdW1lbnRlZCBhbnl3aGVyZSBob3cgdG8gcGFyc2Ugb3IgYXBwbHkgdGhhdCB0eXBlIG9mIE5M US4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgVkFMSURBVEUodmRyLT5tYXBwaW5nLm5s cV9tZXRob2RfaWRjLCAwLCBBVl9ET1ZJX05MUV9MSU5FQVJfRFopOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgdmRyLT5tYXBwaW5nLm5scV9tZXRob2RfaWRjID0gQVZfRE9WSV9OTFFf Tk9ORTsKLSAgICAgICAgfQotCi0gICAgICAgIHZkci0+bWFwcGluZy5udW1feF9wYXJ0aXRpb25z ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKSArIDE7Ci0gICAgICAgIHZkci0+bWFwcGluZy5udW1f eV9wYXJ0aXRpb25zID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKSArIDE7Ci0gICAgICAgIC8qIEVu ZCBvZiBycHVfZGF0YV9oZWFkZXIoKSwgc3RhcnQgb2YgdmRyX3JwdV9kYXRhX3BheWxvYWQoKSAq LwotCi0gICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMzsgYysrKSB7Ci0gICAgICAgICAgICBB VkRPVklSZXNoYXBpbmdDdXJ2ZSAqY3VydmUgPSAmdmRyLT5tYXBwaW5nLmN1cnZlc1tjXTsKLSAg ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VydmUtPm51bV9waXZvdHMgLSAxOyBpKysp IHsKLSAgICAgICAgICAgICAgICBpbnQgbWFwcGluZ19pZGMgPSBnZXRfdWVfZ29sb21iXzMxKGdi KTsKLSAgICAgICAgICAgICAgICBWQUxJREFURShtYXBwaW5nX2lkYywgMCwgMSk7Ci0gICAgICAg ICAgICAgICAgY3VydmUtPm1hcHBpbmdfaWRjW2ldID0gbWFwcGluZ19pZGM7Ci0gICAgICAgICAg ICAgICAgc3dpdGNoIChtYXBwaW5nX2lkYykgewotICAgICAgICAgICAgICAgIGNhc2UgQVZfRE9W SV9NQVBQSU5HX1BPTFlOT01JQUw6IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHBvbHlfb3Jk ZXJfbWludXMxID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7Ci0gICAgICAgICAgICAgICAgICAgIFZB TElEQVRFKHBvbHlfb3JkZXJfbWludXMxLCAwLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgY3Vy dmUtPnBvbHlfb3JkZXJbaV0gPSBwb2x5X29yZGVyX21pbnVzMSArIDE7Ci0gICAgICAgICAgICAg ICAgICAgIGlmIChwb2x5X29yZGVyX21pbnVzMSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbGluZWFyX2ludGVycF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChsaW5lYXJfaW50ZXJwX2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBsYWNrIG9mIGRvY3VtZW50YXRpb24vc2FtcGxlcyAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF2cHJpdl9yZXF1ZXN0X3NhbXBsZShzLT5sb2djdHgsICJEb2xi eSBWaXNpb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibGluZWFyIGludGVycG9sYXRpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmZl9kb3ZpX2N0eF91bnJlZihzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsg PD0gY3VydmUtPnBvbHlfb3JkZXJbaV07IGsrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1 cnZlLT5wb2x5X2NvZWZbaV1ba10gPSBnZXRfc2VfY29lZihnYiwgaGRyKTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2Ug QVZfRE9WSV9NQVBQSU5HX01NUjogewotICAgICAgICAgICAgICAgICAgICBpbnQgbW1yX29yZGVy X21pbnVzMSA9IGdldF9iaXRzKGdiLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo bW1yX29yZGVyX21pbnVzMSwgMCwgMik7Ci0gICAgICAgICAgICAgICAgICAgIGN1cnZlLT5tbXJf b3JkZXJbaV0gPSBtbXJfb3JkZXJfbWludXMxICsgMTsKLSAgICAgICAgICAgICAgICAgICAgY3Vy dmUtPm1tcl9jb25zdGFudFtpXSA9IGdldF9zZV9jb2VmKGdiLCBoZHIpOwotICAgICAgICAgICAg ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN1cnZlLT5tbXJfb3JkZXJbaV07IGorKykgewot ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA3OyBrKyspCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUtPm1tcl9jb2VmW2ldW2pdW2tdID0gZ2V0X3Nl X2NvZWYoZ2IsIGhkcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1c2VfbmxxKSB7Ci0gICAgICAgICAgICBm b3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgewotICAgICAgICAgICAgICAgIEFWRE9WSU5MUVBh cmFtcyAqbmxxID0gJnZkci0+bWFwcGluZy5ubHFbY107Ci0gICAgICAgICAgICAgICAgbmxxLT5u bHFfb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIGhkci0+ZWxfYml0X2RlcHRoKTsKLSAgICAgICAgICAg ICAgICBubHEtPnZkcl9pbl9tYXggPSBnZXRfdWVfY29lZihnYiwgaGRyKTsKLSAgICAgICAgICAg ICAgICBzd2l0Y2ggKHZkci0+bWFwcGluZy5ubHFfbWV0aG9kX2lkYykgewotICAgICAgICAgICAg ICAgIGNhc2UgQVZfRE9WSV9OTFFfTElORUFSX0RaOgotICAgICAgICAgICAgICAgICAgICBubHEt PmxpbmVhcl9kZWFkem9uZV9zbG9wZSA9IGdldF91ZV9jb2VmKGdiLCBoZHIpOwotICAgICAgICAg ICAgICAgICAgICBubHEtPmxpbmVhcl9kZWFkem9uZV90aHJlc2hvbGQgPSBnZXRfdWVfY29lZihn YiwgaGRyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHZkcl9kbV9tZXRhZGF0 YV9wcmVzZW50KSB7Ci0gICAgICAgIEFWRE9WSUNvbG9yTWV0YWRhdGEgKmNvbG9yOwotICAgICAg ICBpbnQgYWZmZWN0ZWRfZG1faWQgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAgICAgICAgaW50 IGN1cnJlbnRfZG1faWQgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAgICAgICAgVkFMSURBVEUo YWZmZWN0ZWRfZG1faWQsIDAsIERPVklfTUFYX0RNX0lEKTsKLSAgICAgICAgVkFMSURBVEUoY3Vy cmVudF9kbV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOwotICAgICAgICBpZiAoIXMtPnZkclthZmZl Y3RlZF9kbV9pZF0pIHsKLSAgICAgICAgICAgIHMtPnZkclthZmZlY3RlZF9kbV9pZF0gPSBmZl9y ZWZzdHJ1Y3RfYWxsb2N6KHNpemVvZihET1ZJVmRyKSk7Ci0gICAgICAgICAgICBpZiAoIXMtPnZk clthZmZlY3RlZF9kbV9pZF0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcy0+dmRyW2N1cnJlbnRfZG1faWRdKSB7Ci0g ICAgICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHByZXZp b3VzIFJQVSBETSBJRDogJXVcbiIsCi0gICAgICAgICAgICAgICAgICAgY3VycmVudF9kbV9pZCk7 Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBVcGRhdGUg Y3VycmVudCBwb2ludGVyIGJhc2VkIG9uIGN1cnJlbnRfZG1faWQgKi8KLSAgICAgICAgdmRyID0g cy0+dmRyW2N1cnJlbnRfZG1faWRdOwotICAgICAgICBzLT5jb2xvciA9ICZ2ZHItPmNvbG9yOwot Ci0gICAgICAgIC8qIFVwZGF0ZSB2YWx1ZXMgb2YgYWZmZWN0ZWRfZG1faWQgKi8KLSAgICAgICAg dmRyID0gcy0+dmRyW2FmZmVjdGVkX2RtX2lkXTsKLSAgICAgICAgY29sb3IgPSAmdmRyLT5jb2xv cjsKLSAgICAgICAgY29sb3ItPmRtX21ldGFkYXRhX2lkID0gYWZmZWN0ZWRfZG1faWQ7Ci0gICAg ICAgIGNvbG9yLT5zY2VuZV9yZWZyZXNoX2ZsYWcgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKLSAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCi0gICAgICAgICAgICBjb2xvci0+eWNj X3RvX3JnYl9tYXRyaXhbaV0gPSBhdl9tYWtlX3EoZ2V0X3NiaXRzKGdiLCAxNiksIDEgPDwgMTMp OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgaW50 IGRlbm9tID0gcHJvZmlsZSA9PSA0ID8gKDEgPDwgMzApIDogKDEgPDwgMjgpOwotICAgICAgICAg ICAgdW5zaWduZWQgb2Zmc2V0ID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIpOwotICAgICAgICAgICAg aWYgKG9mZnNldCA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhlIHJl c3VsdCBmaXRzIGluc2lkZSBBVlJhdGlvbmFsICovCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID4+ PSAxOwotICAgICAgICAgICAgICAgIGRlbm9tID4+PSAxOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgY29sb3ItPnljY190b19yZ2Jfb2Zmc2V0W2ldID0gYXZfbWFrZV9xKG9mZnNldCwgZGVu b20pOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQotICAg ICAgICAgICAgY29sb3ItPnJnYl90b19sbXNfbWF0cml4W2ldID0gYXZfbWFrZV9xKGdldF9zYml0 cyhnYiwgMTYpLCAxIDw8IDE0KTsKLQotICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGYgPSBnZXRf Yml0cyhnYiwgMTYpOwotICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGZfcGFyYW0wID0gZ2V0X2Jp dHMoZ2IsIDE2KTsKLSAgICAgICAgY29sb3ItPnNpZ25hbF9lb3RmX3BhcmFtMSA9IGdldF9iaXRz KGdiLCAxNik7Ci0gICAgICAgIGNvbG9yLT5zaWduYWxfZW90Zl9wYXJhbTIgPSBnZXRfYml0c19s b25nKGdiLCAzMik7Ci0gICAgICAgIGNvbG9yLT5zaWduYWxfYml0X2RlcHRoID0gZ2V0X2JpdHMo Z2IsIDUpOwotICAgICAgICBWQUxJREFURShjb2xvci0+c2lnbmFsX2JpdF9kZXB0aCwgOCwgMTYp OwotICAgICAgICBjb2xvci0+c2lnbmFsX2NvbG9yX3NwYWNlID0gZ2V0X2JpdHMoZ2IsIDIpOwot ICAgICAgICBjb2xvci0+c2lnbmFsX2Nocm9tYV9mb3JtYXQgPSBnZXRfYml0cyhnYiwgMik7Ci0g ICAgICAgIGNvbG9yLT5zaWduYWxfZnVsbF9yYW5nZV9mbGFnID0gZ2V0X2JpdHMoZ2IsIDIpOwot ICAgICAgICBjb2xvci0+c291cmNlX21pbl9wcSA9IGdldF9iaXRzKGdiLCAxMik7Ci0gICAgICAg IGNvbG9yLT5zb3VyY2VfbWF4X3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKLSAgICAgICAgY29sb3It PnNvdXJjZV9kaWFnb25hbCA9IGdldF9iaXRzKGdiLCAxMCk7Ci0gICAgfQotCi0gICAgLyogUGFy c2UgZXh0ZW5zaW9uIGJsb2NrcyAqLwotICAgIHMtPm51bV9leHRfYmxvY2tzID0gMDsKLSAgICBp ZiAoKHJldCA9IHBhcnNlX2V4dF9ibG9ja3MocywgZ2IsIDEpKSA8IDApIHsKLSAgICAgICAgZmZf ZG92aV9jdHhfdW5yZWYocyk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgaWYg KGdldF9iaXRzX2xlZnQoZ2IpID4gNDggLyogcGFkZGluZyArIENSQzMyICsgdGVybWluYXRvciAq LykgewotICAgICAgICBpZiAoKHJldCA9IHBhcnNlX2V4dF9ibG9ja3MocywgZ2IsIDIpKSA8IDAp IHsKLSAgICAgICAgICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOwotICAgICAgICAgICAgcmV0dXJu IHJldDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIGZm X2RvdmlfY3R4X3VucmVmKHMpOyAvKiBkb24ndCBsZWFrIHBvdGVudGlhbGx5IGludmFsaWQgc3Rh dGUgKi8KLSAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLX0KZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvZG92aV9ycHUuaCBiL2xpYmF2Y29kZWMvZG92aV9ycHUuaAppbmRleCBhODY2YmJm ZWJlLi4wYzEyYTNmZWUwIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2RvdmlfcnB1LmgKKysrIGIv bGliYXZjb2RlYy9kb3ZpX3JwdS5oCkBAIC0xMDAsNiArMTAwLDIwIEBAIGludCBmZl9kb3ZpX3Jw dV9wYXJzZShET1ZJQ29udGV4dCAqcywgY29uc3QgdWludDhfdCAqcnB1LCBzaXplX3QgcnB1X3Np emUsCiAgKi8KIGludCBmZl9kb3ZpX2F0dGFjaF9zaWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFW RnJhbWUgKmZyYW1lKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogVGhlIGZvbGxvd2luZyBzZWN0aW9uIGlzIGZvciBpbnRlcm5hbCB1 c2Ugb25seS4gKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgRE9WSVZkciB7CisgICAgQVZET1ZJRGF0YU1hcHBp bmcgbWFwcGluZzsKKyAgICBBVkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOworfSBET1ZJVmRyOwor CitlbnVtIHsKKyAgICBSUFVfQ09FRkZfRklYRUQgPSAwLAorICAgIFJQVV9DT0VGRl9GTE9BVCA9 IDEsCit9OworCiAvKioKICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBndWVzcyB0aGUg Y29ycmVjdCBEViBwcm9maWxlIGZvciBIRVZDLgogICoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv ZG92aV9ycHVkZWMuYyBiL2xpYmF2Y29kZWMvZG92aV9ycHVkZWMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi43YzdlZGE5ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZjb2RlYy9kb3ZpX3JwdWRlYy5jCkBAIC0wLDAgKzEsNjM1IEBACisvKgorICogRG9sYnkgVmlz aW9uIFJQVSBkZWNvZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEphbiBFa3N0csO2bQor ICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjQgTmlrbGFzIEhhYXMKKyAqCisgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvY3JjLmgiCisKKyNpbmNsdWRlICJhdmNvZGVjLmgiCisjaW5jbHVkZSAi ZG92aV9ycHUuaCIKKyNpbmNsdWRlICJnb2xvbWIuaCIKKyNpbmNsdWRlICJnZXRfYml0cy5oIgor I2luY2x1ZGUgInJlZnN0cnVjdC5oIgorCitpbnQgZmZfZG92aV9hdHRhY2hfc2lkZV9kYXRhKERP VklDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSkKK3sKKyAgICBBVkZyYW1lU2lkZURhdGEgKnNk OworICAgIEFWQnVmZmVyUmVmICpidWY7CisgICAgQVZET1ZJTWV0YWRhdGEgKmRvdmk7CisgICAg c2l6ZV90IGRvdmlfc2l6ZSwgZXh0X3N6OworCisgICAgaWYgKCFzLT5tYXBwaW5nIHx8ICFzLT5j b2xvcikKKyAgICAgICAgcmV0dXJuIDA7IC8qIGluY29tcGxldGUgZG92aSBtZXRhZGF0YSAqLwor CisgICAgZG92aSA9IGF2X2RvdmlfbWV0YWRhdGFfYWxsb2MoJmRvdmlfc2l6ZSk7CisgICAgaWYg KCFkb3ZpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgYnVmID0gYXZf YnVmZmVyX2NyZWF0ZSgodWludDhfdCAqKSBkb3ZpLCBkb3ZpX3NpemUsIE5VTEwsIE5VTEwsIDAp OworICAgIGlmICghYnVmKSB7CisgICAgICAgIGF2X2ZyZWUoZG92aSk7CisgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgc2QgPSBhdl9mcmFtZV9uZXdfc2lkZV9k YXRhX2Zyb21fYnVmKGZyYW1lLCBBVl9GUkFNRV9EQVRBX0RPVklfTUVUQURBVEEsIGJ1Zik7Cisg ICAgaWYgKCFzZCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgLyogQ29weSBvbmx5IHRoZSBwYXJ0 cyBvZiB0aGVzZSBzdHJ1Y3RzIGtub3duIHRvIHVzIGF0IGNvbXBpbGVyLXRpbWUuICovCisjZGVm aW5lIENPUFkodCwgYSwgYiwgbGFzdCkgbWVtY3B5KGEsIGIsIG9mZnNldG9mKHQsIGxhc3QpICsg c2l6ZW9mKChiKS0+bGFzdCkpCisgICAgQ09QWShBVkRPVklScHVEYXRhSGVhZGVyLCBhdl9kb3Zp X2dldF9oZWFkZXIoZG92aSksICZzLT5oZWFkZXIsIGRpc2FibGVfcmVzaWR1YWxfZmxhZyk7Cisg ICAgQ09QWShBVkRPVklEYXRhTWFwcGluZywgYXZfZG92aV9nZXRfbWFwcGluZyhkb3ZpKSwgcy0+ bWFwcGluZywgbmxxX3Bpdm90cyk7CisgICAgQ09QWShBVkRPVklDb2xvck1ldGFkYXRhLCBhdl9k b3ZpX2dldF9jb2xvcihkb3ZpKSwgcy0+Y29sb3IsIHNvdXJjZV9kaWFnb25hbCk7CisgICAgZXh0 X3N6ID0gRkZNSU4oc2l6ZW9mKEFWRE9WSURtRGF0YSksIGRvdmktPmV4dF9ibG9ja19zaXplKTsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm51bV9leHRfYmxvY2tzOyBpKyspCisgICAgICAg IG1lbWNweShhdl9kb3ZpX2dldF9leHQoZG92aSwgaSksICZzLT5leHRfYmxvY2tzW2ldLCBleHRf c3opOworICAgIGRvdmktPm51bV9leHRfYmxvY2tzID0gcy0+bnVtX2V4dF9ibG9ja3M7CisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3VlX2NvZWYoR2V0Qml0 Q29udGV4dCAqZ2IsIGNvbnN0IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKK3sKKyAgICB1aW50 NjRfdCBpcGFydDsKKyAgICB1bmlvbiB7IHVpbnQzMl90IHUzMjsgZmxvYXQgZjMyOyB9IGZwYXJ0 OworCisgICAgc3dpdGNoIChoZHItPmNvZWZfZGF0YV90eXBlKSB7CisgICAgY2FzZSBSUFVfQ09F RkZfRklYRUQ6CisgICAgICAgIGlwYXJ0ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICAg ICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgaGRyLT5jb2VmX2xvZzJfZGVub20pOwor ICAgICAgICByZXR1cm4gKGlwYXJ0IDw8IGhkci0+Y29lZl9sb2cyX2Rlbm9tKSB8IGZwYXJ0LnUz MjsKKworICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICBmcGFydC51MzIgPSBnZXRf Yml0c19sb25nKGdiLCAzMik7CisgICAgICAgIHJldHVybiBmcGFydC5mMzIgKiAoMUxMIDw8IGhk ci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsgLyogdW5yZWFjaGFi bGUgKi8KK30KKworc3RhdGljIGlubGluZSBpbnQ2NF90IGdldF9zZV9jb2VmKEdldEJpdENvbnRl eHQgKmdiLCBjb25zdCBBVkRPVklScHVEYXRhSGVhZGVyICpoZHIpCit7CisgICAgaW50NjRfdCBp cGFydDsKKyAgICB1bmlvbiB7IHVpbnQzMl90IHUzMjsgZmxvYXQgZjMyOyB9IGZwYXJ0OworCisg ICAgc3dpdGNoIChoZHItPmNvZWZfZGF0YV90eXBlKSB7CisgICAgY2FzZSBSUFVfQ09FRkZfRklY RUQ6CisgICAgICAgIGlwYXJ0ID0gZ2V0X3NlX2dvbG9tYl9sb25nKGdiKTsKKyAgICAgICAgZnBh cnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAgICAg ICByZXR1cm4gaXBhcnQgKiAoMUxMIDw8IGhkci0+Y29lZl9sb2cyX2Rlbm9tKSB8IGZwYXJ0LnUz MjsKKworICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICBmcGFydC51MzIgPSBnZXRf Yml0c19sb25nKGdiLCAzMik7CisgICAgICAgIHJldHVybiBmcGFydC5mMzIgKiAoMUxMIDw8IGhk ci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsgLyogdW5yZWFjaGFi bGUgKi8KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRfdmFyaWFibGVfYml0cyhHZXRC aXRDb250ZXh0ICpnYiwgaW50IG4pCit7CisgICAgdW5zaWduZWQgaW50IHZhbHVlID0gZ2V0X2Jp dHMoZ2IsIG4pOworICAgIGludCByZWFkX21vcmUgPSBnZXRfYml0czEoZ2IpOworICAgIHdoaWxl IChyZWFkX21vcmUpIHsKKyAgICAgICAgdmFsdWUgPSAodmFsdWUgKyAxKSA8PCBuOworICAgICAg ICB2YWx1ZSB8PSBnZXRfYml0cyhnYiwgbik7CisgICAgICAgIHJlYWRfbW9yZSA9IGdldF9iaXRz MShnYik7CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworI2RlZmluZSBWQUxJREFURShW QVIsIE1JTiwgTUFYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFZBUiA8IE1JTiB8 fCBWQVIgPiBNQVgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgYXZfbG9nKHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiUlBVIHZhbGlk YXRpb24gZmFpbGVkOiAiICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgI01JTiIgPD0g IiNWQVIiID0gJWQgPD0gIiNNQVgiXG4iLCAoaW50KSBWQVIpOyAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgIGdvdG8gZmFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3 aGlsZSAoMCkKKworc3RhdGljIHZvaWQgcGFyc2VfZXh0X3YxKERPVklDb250ZXh0ICpzLCBHZXRC aXRDb250ZXh0ICpnYiwgQVZET1ZJRG1EYXRhICpkbSkKK3sKKyAgICBzd2l0Y2ggKGRtLT5sZXZl bCkgeworICAgIGNhc2UgMToKKyAgICAgICAgZG0tPmwxLm1pbl9wcSA9IGdldF9iaXRzKGdiLCAx Mik7CisgICAgICAgIGRtLT5sMS5tYXhfcHEgPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAgICBk bS0+bDEuYXZnX3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAyOgorICAgICAgICBkbS0+bDIudGFyZ2V0X21heF9wcSA9IGdldF9iaXRzKGdiLCAxMik7Cisg ICAgICAgIGRtLT5sMi50cmltX3Nsb3BlID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0t PmwyLnRyaW1fb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0tPmwyLnRyaW1f cG93ZXIgPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAgICBkbS0+bDIudHJpbV9jaHJvbWFfd2Vp Z2h0ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0tPmwyLnRyaW1fc2F0dXJhdGlvbl9n YWluID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0tPmwyLm1zX3dlaWdodCA9IGdldF9i aXRzKGdiLCAxMykgLSA4MTkyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAg IGRtLT5sNC5hbmNob3JfcHEgPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAgICBkbS0+bDQuYW5j aG9yX3Bvd2VyID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1 OgorICAgICAgICBkbS0+bDUubGVmdF9vZmZzZXQgPSBnZXRfYml0cyhnYiwgMTMpOworICAgICAg ICBkbS0+bDUucmlnaHRfb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIDEzKTsKKyAgICAgICAgZG0tPmw1 LnRvcF9vZmZzZXQgPSBnZXRfYml0cyhnYiwgMTMpOworICAgICAgICBkbS0+bDUuYm90dG9tX29m ZnNldCA9IGdldF9iaXRzKGdiLCAxMyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAg ICAgICAgZG0tPmw2Lm1heF9sdW1pbmFuY2UgPSBnZXRfYml0cyhnYiwgMTYpOworICAgICAgICBk bS0+bDYubWluX2x1bWluYW5jZSA9IGdldF9iaXRzKGdiLCAxNik7CisgICAgICAgIGRtLT5sNi5t YXhfY2xsID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgZG0tPmw2Lm1heF9mYWxsID0gZ2V0 X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyNTU6CisgICAgICAgIGRt LT5sMjU1LmRtX3J1bl9tb2RlID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBkbS0+bDI1NS5k bV9ydW5fdmVyc2lvbiA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspCisgICAgICAgICAgICBkbS0+bDI1NS5kbV9kZWJ1Z1tpXSA9IGdldF9iaXRz KGdiLCA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXZfbG9nKHMt PmxvZ2N0eCwgQVZfTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAiVW5rbm93biBEb2xieSBW aXNpb24gRE0gdjEgbGV2ZWw6ICV1XG4iLCBkbS0+bGV2ZWwpOworICAgIH0KK30KKworc3RhdGlj IEFWQ0lFeHkgZ2V0X2NpZV94eShHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBBVkNJRXh5IHh5 OworICAgIGNvbnN0IGludCBkZW5vbSA9IDMyNzY3OworICAgIHh5LnggPSBhdl9tYWtlX3EoZ2V0 X3NiaXRzKGdiLCAxNiksIGRlbm9tKTsKKyAgICB4eS55ID0gYXZfbWFrZV9xKGdldF9zYml0cyhn YiwgMTYpLCBkZW5vbSk7CisgICAgcmV0dXJuIHh5OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9l eHRfdjIoRE9WSUNvbnRleHQgKnMsIEdldEJpdENvbnRleHQgKmdiLCBBVkRPVklEbURhdGEgKmRt LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHRfYmxvY2tfbGVuZ3RoKQoreworICAg IHN3aXRjaCAoZG0tPmxldmVsKSB7CisgICAgY2FzZSAzOgorICAgICAgICBkbS0+bDMubWluX3Bx X29mZnNldCA9IGdldF9iaXRzKGdiLCAxMik7CisgICAgICAgIGRtLT5sMy5tYXhfcHFfb2Zmc2V0 ID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0tPmwzLmF2Z19wcV9vZmZzZXQgPSBnZXRf Yml0cyhnYiwgMTIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6CisgICAgICAgIGRtLT5s OC50YXJnZXRfZGlzcGxheV9pbmRleCA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgZG0tPmw4 LnRyaW1fc2xvcGUgPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAgICBkbS0+bDgudHJpbV9vZmZz ZXQgPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAgICBkbS0+bDgudHJpbV9wb3dlciA9IGdldF9i aXRzKGdiLCAxMik7CisgICAgICAgIGRtLT5sOC50cmltX2Nocm9tYV93ZWlnaHQgPSBnZXRfYml0 cyhnYiwgMTIpOworICAgICAgICBkbS0+bDgudHJpbV9zYXR1cmF0aW9uX2dhaW4gPSBnZXRfYml0 cyhnYiwgMTIpOworICAgICAgICBkbS0+bDgubXNfd2VpZ2h0ID0gZ2V0X2JpdHMoZ2IsIDEyKSAt IDgxOTI7CisgICAgICAgIGlmIChleHRfYmxvY2tfbGVuZ3RoIDwgMTIpCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgZG0tPmw4LnRhcmdldF9taWRfY29udHJhc3QgPSBnZXRfYml0cyhnYiwg MTIpOworICAgICAgICBpZiAoZXh0X2Jsb2NrX2xlbmd0aCA8IDEzKQorICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGRtLT5sOC5jbGlwX3RyaW0gPSBnZXRfYml0cyhnYiwgMTIpOworICAgICAg ICBpZiAoZXh0X2Jsb2NrX2xlbmd0aCA8IDE5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgICAgICAgICAgZG0tPmw4LnNhdHVyYXRp b25fdmVjdG9yX2ZpZWxkW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBpZiAoZXh0X2Js b2NrX2xlbmd0aCA8IDI1KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgNjsgaSsrKQorICAgICAgICAgICAgZG0tPmw4Lmh1ZV92ZWN0b3JfZmllbGRbaV0g PSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgOToKKyAgICAgICAg ZG0tPmw5LnNvdXJjZV9wcmltYXJ5X2luZGV4ID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBp ZiAoZXh0X2Jsb2NrX2xlbmd0aCA8IDE3KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRt LT5sOS5zb3VyY2VfZGlzcGxheV9wcmltYXJpZXMucHJpbS5yID0gZ2V0X2NpZV94eShnYik7Cisg ICAgICAgIGRtLT5sOS5zb3VyY2VfZGlzcGxheV9wcmltYXJpZXMucHJpbS5nID0gZ2V0X2NpZV94 eShnYik7CisgICAgICAgIGRtLT5sOS5zb3VyY2VfZGlzcGxheV9wcmltYXJpZXMucHJpbS5iID0g Z2V0X2NpZV94eShnYik7CisgICAgICAgIGRtLT5sOS5zb3VyY2VfZGlzcGxheV9wcmltYXJpZXMu d3AgPSBnZXRfY2llX3h5KGdiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxMDoKKyAgICAg ICAgZG0tPmwxMC50YXJnZXRfZGlzcGxheV9pbmRleCA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAg ICAgZG0tPmwxMC50YXJnZXRfbWF4X3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0t PmwxMC50YXJnZXRfbWluX3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgZG0tPmwxMC50 YXJnZXRfcHJpbWFyeV9pbmRleCA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgaWYgKGV4dF9i bG9ja19sZW5ndGggPCAyMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkbS0+bDEwLnRh cmdldF9kaXNwbGF5X3ByaW1hcmllcy5wcmltLnIgPSBnZXRfY2llX3h5KGdiKTsKKyAgICAgICAg ZG0tPmwxMC50YXJnZXRfZGlzcGxheV9wcmltYXJpZXMucHJpbS5nID0gZ2V0X2NpZV94eShnYik7 CisgICAgICAgIGRtLT5sMTAudGFyZ2V0X2Rpc3BsYXlfcHJpbWFyaWVzLnByaW0uYiA9IGdldF9j aWVfeHkoZ2IpOworICAgICAgICBkbS0+bDEwLnRhcmdldF9kaXNwbGF5X3ByaW1hcmllcy53cCA9 IGdldF9jaWVfeHkoZ2IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDExOgorICAgICAgICBk bS0+bDExLmNvbnRlbnRfdHlwZSA9IGdldF9iaXRzKGdiLCA4KTsKKyAgICAgICAgZG0tPmwxMS53 aGl0ZXBvaW50ID0gZ2V0X2JpdHMoZ2IsIDQpOworICAgICAgICBkbS0+bDExLnJlZmVyZW5jZV9t b2RlX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICBza2lwX2JpdHMoZ2IsIDMpOyAvKiBy ZXNlcnZlZCAqLworICAgICAgICBkbS0+bDExLnNoYXJwbmVzcyA9IGdldF9iaXRzKGdiLCAyKTsK KyAgICAgICAgZG0tPmwxMS5ub2lzZV9yZWR1Y3Rpb24gPSBnZXRfYml0cyhnYiwgMik7CisgICAg ICAgIGRtLT5sMTEubXBlZ19ub2lzZV9yZWR1Y3Rpb24gPSBnZXRfYml0cyhnYiwgMik7CisgICAg ICAgIGRtLT5sMTEuZnJhbWVfcmF0ZV9jb252ZXJzaW9uID0gZ2V0X2JpdHMoZ2IsIDIpOworICAg ICAgICBkbS0+bDExLmJyaWdodG5lc3MgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGRtLT5s MTEuY29sb3IgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjU0 OgorICAgICAgICBkbS0+bDI1NC5kbV9tb2RlID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBk bS0+bDI1NC5kbV92ZXJzaW9uX2luZGV4ID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfV0FSTklO RywKKyAgICAgICAgICAgICAgICJVbmtub3duIERvbGJ5IFZpc2lvbiBETSB2MiBsZXZlbDogJXVc biIsIGRtLT5sZXZlbCk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHBhcnNlX2V4dF9ibG9ja3Mo RE9WSUNvbnRleHQgKnMsIEdldEJpdENvbnRleHQgKmdiLCBpbnQgdmVyKQoreworICAgIGludCBu dW1fZXh0X2Jsb2NrcywgZXh0X2Jsb2NrX2xlbmd0aCwgc3RhcnRfcG9zLCBwYXJzZWRfYml0czsK KworICAgIG51bV9leHRfYmxvY2tzID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgYWxpZ25f Z2V0X2JpdHMoZ2IpOworICAgIGlmIChzLT5udW1fZXh0X2Jsb2NrcyArIG51bV9leHRfYmxvY2tz ID4gQVZfRE9WSV9NQVhfRVhUX0JMT0NLUykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisKKyAgICBpZiAoIXMtPmV4dF9ibG9ja3MpIHsKKyAgICAgICAgcy0+ZXh0X2Jsb2Nr cyA9IGZmX3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKEFWRE9WSURtRGF0YSkgKiBBVl9ET1ZJX01B WF9FWFRfQkxPQ0tTKTsKKyAgICAgICAgaWYgKCFzLT5leHRfYmxvY2tzKQorICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICB3aGlsZSAobnVtX2V4dF9ibG9j a3MtLSkgeworICAgICAgICBBVkRPVklEbURhdGEgKmRtID0gJnMtPmV4dF9ibG9ja3Nbcy0+bnVt X2V4dF9ibG9ja3MrK107CisgICAgICAgIGV4dF9ibG9ja19sZW5ndGggPSBnZXRfdWVfZ29sb21i XzMxKGdiKTsKKyAgICAgICAgZG0tPmxldmVsID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICBz dGFydF9wb3MgPSBnZXRfYml0c19jb3VudChnYik7CisKKyAgICAgICAgc3dpdGNoICh2ZXIpIHsK KyAgICAgICAgY2FzZSAxOiBwYXJzZV9leHRfdjEocywgZ2IsIGRtKTsgYnJlYWs7CisgICAgICAg IGNhc2UgMjogcGFyc2VfZXh0X3YyKHMsIGdiLCBkbSwgZXh0X2Jsb2NrX2xlbmd0aCk7IGJyZWFr OworICAgICAgICB9CisKKyAgICAgICAgcGFyc2VkX2JpdHMgPSBnZXRfYml0c19jb3VudChnYikg LSBzdGFydF9wb3M7CisgICAgICAgIGlmIChwYXJzZWRfYml0cyA+IGV4dF9ibG9ja19sZW5ndGgg KiA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIHNr aXBfYml0cyhnYiwgZXh0X2Jsb2NrX2xlbmd0aCAqIDggLSBwYXJzZWRfYml0cyk7CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9kb3ZpX3JwdV9wYXJzZShET1ZJQ29udGV4dCAq cywgY29uc3QgdWludDhfdCAqcnB1LCBzaXplX3QgcnB1X3NpemUsCisgICAgICAgICAgICAgICAg ICAgICAgaW50IGVycl9yZWNvZ25pdGlvbikKK3sKKyAgICBBVkRPVklScHVEYXRhSGVhZGVyICpo ZHIgPSAmcy0+aGVhZGVyOworICAgIEdldEJpdENvbnRleHQgKmdiID0gJihHZXRCaXRDb250ZXh0 KXswfTsKKyAgICBET1ZJVmRyICp2ZHI7CisgICAgaW50IHJldDsKKworICAgIHVpbnQ4X3QgcnB1 X3R5cGU7CisgICAgdWludDhfdCB2ZHJfc2VxX2luZm9fcHJlc2VudDsKKyAgICB1aW50OF90IHZk cl9kbV9tZXRhZGF0YV9wcmVzZW50OworICAgIHVpbnQ4X3QgdXNlX3ByZXZfdmRyX3JwdTsKKyAg ICB1aW50OF90IHVzZV9ubHE7CisgICAgdWludDhfdCBwcm9maWxlOworCisgICAgaWYgKHJwdV9z aXplIDwgNSkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogQ29udGFpbmVyICovCisgICAg aWYgKHMtPmNmZy5kdl9wcm9maWxlID09IDEwIC8qIGRhdjEuMTAgKi8pIHsKKyAgICAgICAgLyog RFYgaW5zaWRlIEFWMSByZS11c2VzIGFuIEVNREYgY29udGFpbmVyIHNrZWxldG9uLCBidXQgd2l0 aCBmaXhlZAorICAgICAgICAgKiB2YWx1ZXMgLSBzbyB3ZSBjYW4gZWZmZWN0aXZlbHkgdHJlYXQg dGhpcyBhcyBhIG1hZ2ljIGJ5dGUgc2VxdWVuY2UuCisgICAgICAgICAqCisgICAgICAgICAqIFRo ZSBleGFjdCBmaWVsZHMgYXJlLCBhcyBmb2xsb3dzOgorICAgICAgICAgKiAgIGVtZGZfdmVyc2lv biAgICAgICAgICAgIDogZigyKSA9IDAKKyAgICAgICAgICogICBrZXlfaWQgICAgICAgICAgICAg ICAgICA6IGYoMykgPSA2CisgICAgICAgICAqICAgZW1kZl9wYXlsb2FkX2lkICAgICAgICAgOiBm KDUpID0gMzEKKyAgICAgICAgICogICBlbWRmX3BheWxvYWRfaWRfZXh0ICAgICA6IHZhcig1KSA9 IDIyNQorICAgICAgICAgKiAgIHNtcGxvZmZzdGUgICAgICAgICAgICAgIDogZigxKSA9IDAKKyAg ICAgICAgICogICBkdXJhdGlvbmUgICAgICAgICAgICAgICA6IGYoMSkgPSAwCisgICAgICAgICAq ICAgZ3JvdXBpZGUgICAgICAgICAgICAgICAgOiBmKDEpID0gMAorICAgICAgICAgKiAgIGNvZGVj ZGF0YWUgICAgICAgICAgICAgIDogZigxKSA9IDAKKyAgICAgICAgICogICBkaXNjYXJkX3Vua25v d25fcGF5bG9hZCA6IGYoMSkgPSAxCisgICAgICAgICAqLworICAgICAgICBjb25zdCB1bnNpZ25l ZCBoZWFkZXJfbWFnaWMgPSAweDAxYmU2ODQxdTsKKyAgICAgICAgdW5zaWduZWQgZW1kZl9oZWFk ZXIsIGVtZGZfcGF5bG9hZF9zaXplLCBlbWRmX3Byb3RlY3Rpb247CisgICAgICAgIGlmICgocmV0 ID0gaW5pdF9nZXRfYml0czgoZ2IsIHJwdSwgcnB1X3NpemUpKSA8IDApCisgICAgICAgICAgICBy ZXR1cm4gcmV0OworICAgICAgICBlbWRmX2hlYWRlciA9IGdldF9iaXRzX2xvbmcoZ2IsIDI3KTsK KyAgICAgICAgVkFMSURBVEUoZW1kZl9oZWFkZXIsIGhlYWRlcl9tYWdpYywgaGVhZGVyX21hZ2lj KTsKKyAgICAgICAgZW1kZl9wYXlsb2FkX3NpemUgPSBnZXRfdmFyaWFibGVfYml0cyhnYiwgOCk7 CisgICAgICAgIFZBTElEQVRFKGVtZGZfcGF5bG9hZF9zaXplLCA2LCA1MTIpOworICAgICAgICBp ZiAoZW1kZl9wYXlsb2FkX3NpemUgKiA4ID4gZ2V0X2JpdHNfbGVmdChnYikpCisgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICAvKiBUaGUgcGF5bG9hZCBp cyBub3QgYnl0ZS1hbGlnbmVkIChvZmYgYnkgKm9uZSogYml0LCBjdXJzZSBEb2xieSksCisgICAg ICAgICAqIHNvIGNvcHkgaW50byBhIGZyZXNoIGJ1ZmZlciB0byBwcmVzZXJ2ZSBieXRlIGFsaWdu bWVudCBvZiB0aGUKKyAgICAgICAgICogUlBVIHN0cnVjdCAqLworICAgICAgICBhdl9mYXN0X3Bh ZGRlZF9tYWxsb2MoJnMtPnJwdV9idWYsICZzLT5ycHVfYnVmX3N6LCBlbWRmX3BheWxvYWRfc2l6 ZSk7CisgICAgICAgIGlmICghcy0+cnB1X2J1ZikKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW1kZl9wYXlsb2FkX3NpemU7 IGkrKykKKyAgICAgICAgICAgIHMtPnJwdV9idWZbaV0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAg ICAgIHJwdSA9IHMtPnJwdV9idWY7CisgICAgICAgIHJwdV9zaXplID0gZW1kZl9wYXlsb2FkX3Np emU7CisKKyAgICAgICAgLyogVmFsaWRhdGUgRU1ERiBmb290ZXIgKi8KKyAgICAgICAgZW1kZl9w cm90ZWN0aW9uID0gZ2V0X2JpdHMoZ2IsIDUgKyAxMik7CisgICAgICAgIFZBTElEQVRFKGVtZGZf cHJvdGVjdGlvbiwgMHg0MDAsIDB4NDAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBOQUwg UkJTUCB3aXRoIHByZWZpeCBhbmQgdHJhaWxpbmcgemVyb2VzICovCisgICAgICAgIFZBTElEQVRF KHJwdVswXSwgMjUsIDI1KTsgLyogTkFMIHByZWZpeCAqLworICAgICAgICBycHUrKzsKKyAgICAg ICAgcnB1X3NpemUtLTsKKyAgICAgICAgLyogU3RyaXAgdHJhaWxpbmcgcGFkZGluZyBieXRlcyAq LworICAgICAgICB3aGlsZSAocnB1X3NpemUgJiYgcnB1W3JwdV9zaXplIC0gMV0gPT0gMCkKKyAg ICAgICAgICAgIHJwdV9zaXplLS07CisgICAgfQorCisgICAgaWYgKCFycHVfc2l6ZSB8fCBycHVb cnB1X3NpemUgLSAxXSAhPSAweDgwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoZXJy X3JlY29nbml0aW9uICYgQVZfRUZfQ1JDQ0hFQ0spIHsKKyAgICAgICAgdWludDMyX3QgY3JjID0g YXZfYnN3YXAzMihhdl9jcmMoYXZfY3JjX2dldF90YWJsZShBVl9DUkNfMzJfSUVFRSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJwdSwgcnB1X3NpemUgLSAxKSk7IC8q IGV4Y2x1ZGUgMHg4MCAqLworICAgICAgICBpZiAoY3JjKSB7CisgICAgICAgICAgICBhdl9sb2co cy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJSUFUgQ1JDIG1pc21hdGNoOiAlWFxuIiwgY3JjKTsK KyAgICAgICAgICAgIGlmIChlcnJfcmVjb2duaXRpb24gJiBBVl9FRl9FWFBMT0RFKQorICAgICAg ICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgocmV0ID0g aW5pdF9nZXRfYml0czgoZ2IsIHJwdSwgcnB1X3NpemUpKSA8IDApCisgICAgICAgIHJldHVybiBy ZXQ7CisKKyAgICAvKiBSUFUgaGVhZGVyICovCisgICAgcnB1X3R5cGUgPSBnZXRfYml0cyhnYiwg Nik7CisgICAgaWYgKHJwdV90eXBlICE9IDIpIHsKKyAgICAgICAgYXZfbG9nKHMtPmxvZ2N0eCwg QVZfTE9HX1dBUk5JTkcsICJVbnJlY29nbml6ZWQgUlBVIHR5cGUgIgorICAgICAgICAgICAgICAg IiUiUFJJdTgiLCBpZ25vcmluZ1xuIiwgcnB1X3R5cGUpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICBoZHItPnJwdV90eXBlID0gcnB1X3R5cGU7CisgICAgaGRyLT5ycHVfZm9ybWF0 ID0gZ2V0X2JpdHMoZ2IsIDExKTsKKworICAgIC8qIFZhbHVlcyBzcGVjaWZpYyB0byBSUFUgdHlw ZSAyICovCisgICAgaGRyLT52ZHJfcnB1X3Byb2ZpbGUgPSBnZXRfYml0cyhnYiwgNCk7CisgICAg aGRyLT52ZHJfcnB1X2xldmVsID0gZ2V0X2JpdHMoZ2IsIDQpOworCisgICAgdmRyX3NlcV9pbmZv X3ByZXNlbnQgPSBnZXRfYml0czEoZ2IpOworICAgIGlmICh2ZHJfc2VxX2luZm9fcHJlc2VudCkg eworICAgICAgICBoZHItPmNocm9tYV9yZXNhbXBsaW5nX2V4cGxpY2l0X2ZpbHRlcl9mbGFnID0g Z2V0X2JpdHMxKGdiKTsKKyAgICAgICAgaGRyLT5jb2VmX2RhdGFfdHlwZSA9IGdldF9iaXRzKGdi LCAyKTsKKyAgICAgICAgVkFMSURBVEUoaGRyLT5jb2VmX2RhdGFfdHlwZSwgUlBVX0NPRUZGX0ZJ WEVELCBSUFVfQ09FRkZfRkxPQVQpOworICAgICAgICBzd2l0Y2ggKGhkci0+Y29lZl9kYXRhX3R5 cGUpIHsKKyAgICAgICAgY2FzZSBSUFVfQ09FRkZfRklYRUQ6CisgICAgICAgICAgICBoZHItPmNv ZWZfbG9nMl9kZW5vbSA9IGdldF91ZV9nb2xvbWIoZ2IpOworICAgICAgICAgICAgVkFMSURBVEUo aGRyLT5jb2VmX2xvZzJfZGVub20sIDEzLCAzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBSUFVfQ09FRkZfRkxPQVQ6CisgICAgICAgICAgICBoZHItPmNvZWZfbG9nMl9kZW5v bSA9IDMyOyAvKiBhcmJpdHJhcnksIGNob29zZSBtYXhpbXVtIHByZWNpc2lvbiAqLworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBoZHItPnZkcl9ycHVfbm9ybWFsaXpl ZF9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGhkci0+YmxfdmlkZW9fZnVsbF9yYW5n ZV9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKworICAgICAgICBpZiAoKGhkci0+cnB1X2Zvcm1hdCAm IDB4NzAwKSA9PSAwKSB7CisgICAgICAgICAgICBpbnQgYmxfYml0X2RlcHRoX21pbnVzOCA9IGdl dF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgaW50IGVsX2JpdF9kZXB0aF9taW51czgg PSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIGludCB2ZHJfYml0X2RlcHRoX21p bnVzOCA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgVkFMSURBVEUoYmxfYml0 X2RlcHRoX21pbnVzOCwgMCwgOCk7CisgICAgICAgICAgICBWQUxJREFURShlbF9iaXRfZGVwdGhf bWludXM4LCAwLCA4KTsKKyAgICAgICAgICAgIFZBTElEQVRFKHZkcl9iaXRfZGVwdGhfbWludXM4 LCAwLCA4KTsKKyAgICAgICAgICAgIGhkci0+YmxfYml0X2RlcHRoID0gYmxfYml0X2RlcHRoX21p bnVzOCArIDg7CisgICAgICAgICAgICBoZHItPmVsX2JpdF9kZXB0aCA9IGVsX2JpdF9kZXB0aF9t aW51czggKyA4OworICAgICAgICAgICAgaGRyLT52ZHJfYml0X2RlcHRoID0gdmRyX2JpdF9kZXB0 aF9taW51czggKyA4OworICAgICAgICAgICAgaGRyLT5zcGF0aWFsX3Jlc2FtcGxpbmdfZmlsdGVy X2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAzKTsgLyog cmVzZXJ2ZWRfemVyb18zYml0cyAqLworICAgICAgICAgICAgaGRyLT5lbF9zcGF0aWFsX3Jlc2Ft cGxpbmdfZmlsdGVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgaGRyLT5kaXNh YmxlX3Jlc2lkdWFsX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAgfSBlbHNl IHsKKyAgICAgICAgLyogbGFjayBvZiBkb2N1bWVudGF0aW9uL3NhbXBsZXMgKi8KKyAgICAgICAg YXZwcml2X3JlcXVlc3Rfc2FtcGxlKHMtPmxvZ2N0eCwgIk1pc3NpbmcgUlBVIFZEUiBzZXF1ZW5j ZSBpbmZvXG4iKTsKKyAgICAgICAgZmZfZG92aV9jdHhfdW5yZWYocyk7CisgICAgICAgIHJldHVy biBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisKKyAgICB2ZHJfZG1fbWV0YWRhdGFfcHJl c2VudCA9IGdldF9iaXRzMShnYik7CisgICAgdXNlX3ByZXZfdmRyX3JwdSA9IGdldF9iaXRzMShn Yik7CisgICAgdXNlX25scSA9IChoZHItPnJwdV9mb3JtYXQgJiAweDcwMCkgPT0gMCAmJiAhaGRy LT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWc7CisKKyAgICBwcm9maWxlID0gcy0+Y2ZnLmR2X3Byb2Zp bGUgPyBzLT5jZmcuZHZfcHJvZmlsZSA6IGZmX2RvdmlfZ3Vlc3NfcHJvZmlsZV9oZXZjKGhkcik7 CisgICAgaWYgKHByb2ZpbGUgPT0gNSAmJiB1c2VfbmxxKSB7CisgICAgICAgIGF2X2xvZyhzLT5s b2djdHgsIEFWX0xPR19FUlJPUiwgIlByb2ZpbGUgNSBSUFVzIHNob3VsZCBub3QgdXNlIE5MUVxu Iik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAodXNlX3ByZXZfdmRyX3Jw dSkgeworICAgICAgICBpbnQgcHJldl92ZHJfcnB1X2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7 CisgICAgICAgIFZBTElEQVRFKHByZXZfdmRyX3JwdV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOwor ICAgICAgICBpZiAoIXMtPnZkcltwcmV2X3Zkcl9ycHVfaWRdKSB7CisgICAgICAgICAgICBhdl9s b2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHByZXZpb3VzIFJQVSBJRDogJXVc biIsCisgICAgICAgICAgICAgICAgICAgcHJldl92ZHJfcnB1X2lkKTsKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICB2ZHIgPSBzLT52ZHJbcHJldl92ZHJfcnB1X2lk XTsKKyAgICAgICAgcy0+bWFwcGluZyA9ICZ2ZHItPm1hcHBpbmc7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgaW50IHZkcl9ycHVfaWQgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgVkFM SURBVEUodmRyX3JwdV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOworICAgICAgICBpZiAoIXMtPnZk clt2ZHJfcnB1X2lkXSkgeworICAgICAgICAgICAgcy0+dmRyW3Zkcl9ycHVfaWRdID0gZmZfcmVm c3RydWN0X2FsbG9jeihzaXplb2YoRE9WSVZkcikpOworICAgICAgICAgICAgaWYgKCFzLT52ZHJb dmRyX3JwdV9pZF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgfQorCisgICAgICAgIHZkciA9IHMtPnZkclt2ZHJfcnB1X2lkXTsKKyAgICAgICAgcy0+ bWFwcGluZyA9ICZ2ZHItPm1hcHBpbmc7CisKKyAgICAgICAgdmRyLT5tYXBwaW5nLnZkcl9ycHVf aWQgPSB2ZHJfcnB1X2lkOworICAgICAgICB2ZHItPm1hcHBpbmcubWFwcGluZ19jb2xvcl9zcGFj ZSA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICB2ZHItPm1hcHBpbmcubWFwcGluZ19j aHJvbWFfZm9ybWF0X2lkYyA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworCisgICAgICAgIGZvciAo aW50IGMgPSAwOyBjIDwgMzsgYysrKSB7CisgICAgICAgICAgICBBVkRPVklSZXNoYXBpbmdDdXJ2 ZSAqY3VydmUgPSAmdmRyLT5tYXBwaW5nLmN1cnZlc1tjXTsKKyAgICAgICAgICAgIGludCBudW1f cGl2b3RzX21pbnVzXzIgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIGludCBw aXZvdCA9IDA7CisKKyAgICAgICAgICAgIFZBTElEQVRFKG51bV9waXZvdHNfbWludXNfMiwgMCwg QVZfRE9WSV9NQVhfUElFQ0VTIC0gMSk7CisgICAgICAgICAgICBjdXJ2ZS0+bnVtX3Bpdm90cyA9 IG51bV9waXZvdHNfbWludXNfMiArIDI7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGN1cnZlLT5udW1fcGl2b3RzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwaXZvdCArPSBnZXRf Yml0cyhnYiwgaGRyLT5ibF9iaXRfZGVwdGgpOworICAgICAgICAgICAgICAgIGN1cnZlLT5waXZv dHNbaV0gPSBhdl9jbGlwX3VpbnQxNihwaXZvdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICBpZiAodXNlX25scSkgeworICAgICAgICAgICAgaW50IG5scV9waXZvdCA9IDA7 CisgICAgICAgICAgICB2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMgPSBnZXRfYml0cyhnYiwg Myk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAg ICAgICAgICAgbmxxX3Bpdm90ICs9IGdldF9iaXRzKGdiLCBoZHItPmJsX2JpdF9kZXB0aCk7Cisg ICAgICAgICAgICAgICAgdmRyLT5tYXBwaW5nLm5scV9waXZvdHNbaV0gPSBhdl9jbGlwX3VpbnQx NihubHFfcGl2b3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKioKKyAgICAgICAg ICAgICAqIFRoZSBwYXRlbnQgbWVudGlvbnMgYW5vdGhlciBsZWdhbCB2YWx1ZSwgTkxRX01VX0xB VywgYnV0IGl0J3MKKyAgICAgICAgICAgICAqIG5vdCBkb2N1bWVudGVkIGFueXdoZXJlIGhvdyB0 byBwYXJzZSBvciBhcHBseSB0aGF0IHR5cGUgb2YgTkxRLgorICAgICAgICAgICAgICovCisgICAg ICAgICAgICBWQUxJREFURSh2ZHItPm1hcHBpbmcubmxxX21ldGhvZF9pZGMsIDAsIEFWX0RPVklf TkxRX0xJTkVBUl9EWik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2ZHItPm1hcHBp bmcubmxxX21ldGhvZF9pZGMgPSBBVl9ET1ZJX05MUV9OT05FOworICAgICAgICB9CisKKyAgICAg ICAgdmRyLT5tYXBwaW5nLm51bV94X3BhcnRpdGlvbnMgPSBnZXRfdWVfZ29sb21iX2xvbmcoZ2Ip ICsgMTsKKyAgICAgICAgdmRyLT5tYXBwaW5nLm51bV95X3BhcnRpdGlvbnMgPSBnZXRfdWVfZ29s b21iX2xvbmcoZ2IpICsgMTsKKyAgICAgICAgLyogRW5kIG9mIHJwdV9kYXRhX2hlYWRlcigpLCBz dGFydCBvZiB2ZHJfcnB1X2RhdGFfcGF5bG9hZCgpICovCisKKyAgICAgICAgZm9yIChpbnQgYyA9 IDA7IGMgPCAzOyBjKyspIHsKKyAgICAgICAgICAgIEFWRE9WSVJlc2hhcGluZ0N1cnZlICpjdXJ2 ZSA9ICZ2ZHItPm1hcHBpbmcuY3VydmVzW2NdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBjdXJ2ZS0+bnVtX3Bpdm90cyAtIDE7IGkrKykgeworICAgICAgICAgICAgICAgIGludCBt YXBwaW5nX2lkYyA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICAgICAgICAgIFZBTElE QVRFKG1hcHBpbmdfaWRjLCAwLCAxKTsKKyAgICAgICAgICAgICAgICBjdXJ2ZS0+bWFwcGluZ19p ZGNbaV0gPSBtYXBwaW5nX2lkYzsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hcHBpbmdfaWRj KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBVl9ET1ZJX01BUFBJTkdfUE9MWU5PTUlBTDogewor ICAgICAgICAgICAgICAgICAgICBpbnQgcG9seV9vcmRlcl9taW51czEgPSBnZXRfdWVfZ29sb21i XzMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUocG9seV9vcmRlcl9taW51czEs IDAsIDEpOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+cG9seV9vcmRlcltpXSA9IHBvbHlf b3JkZXJfbWludXMxICsgMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvbHlfb3JkZXJfbWlu dXMxID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lYXJfaW50ZXJwX2Zs YWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVhcl9p bnRlcnBfZmxhZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhY2sgb2YgZG9j dW1lbnRhdGlvbi9zYW1wbGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZwcml2 X3JlcXVlc3Rfc2FtcGxlKHMtPmxvZ2N0eCwgIkRvbGJ5IFZpc2lvbiAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lYXIgaW50ZXJwb2xhdGlv biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8PSBjdXJ2ZS0+cG9seV9vcmRlcltpXTsg aysrKQorICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUtPnBvbHlfY29lZltpXVtrXSA9IGdl dF9zZV9jb2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBBVl9ET1ZJX01BUFBJTkdfTU1SOiB7Cisg ICAgICAgICAgICAgICAgICAgIGludCBtbXJfb3JkZXJfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDIp OworICAgICAgICAgICAgICAgICAgICBWQUxJREFURShtbXJfb3JkZXJfbWludXMxLCAwLCAyKTsK KyAgICAgICAgICAgICAgICAgICAgY3VydmUtPm1tcl9vcmRlcltpXSA9IG1tcl9vcmRlcl9taW51 czEgKyAxOworICAgICAgICAgICAgICAgICAgICBjdXJ2ZS0+bW1yX2NvbnN0YW50W2ldID0gZ2V0 X3NlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgY3VydmUtPm1tcl9vcmRlcltpXTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGludCBrID0gMDsgayA8IDc7IGsrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dXJ2ZS0+bW1yX2NvZWZbaV1bal1ba10gPSBnZXRfc2VfY29lZihnYiwgaGRyKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg ICAgaWYgKHVzZV9ubHEpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgMzsgYysr KSB7CisgICAgICAgICAgICAgICAgQVZET1ZJTkxRUGFyYW1zICpubHEgPSAmdmRyLT5tYXBwaW5n Lm5scVtjXTsKKyAgICAgICAgICAgICAgICBubHEtPm5scV9vZmZzZXQgPSBnZXRfYml0cyhnYiwg aGRyLT5lbF9iaXRfZGVwdGgpOworICAgICAgICAgICAgICAgIG5scS0+dmRyX2luX21heCA9IGdl dF91ZV9jb2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodmRyLT5tYXBwaW5n Lm5scV9tZXRob2RfaWRjKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBVl9ET1ZJX05MUV9MSU5F QVJfRFo6CisgICAgICAgICAgICAgICAgICAgIG5scS0+bGluZWFyX2RlYWR6b25lX3Nsb3BlID0g Z2V0X3VlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAgICAgICAgIG5scS0+bGluZWFyX2Rl YWR6b25lX3RocmVzaG9sZCA9IGdldF91ZV9jb2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAodmRyX2RtX21ldGFkYXRhX3ByZXNlbnQpIHsKKyAgICAgICAgQVZE T1ZJQ29sb3JNZXRhZGF0YSAqY29sb3I7CisgICAgICAgIGludCBhZmZlY3RlZF9kbV9pZCA9IGdl dF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICBpbnQgY3VycmVudF9kbV9pZCA9IGdldF91ZV9n b2xvbWJfMzEoZ2IpOworICAgICAgICBWQUxJREFURShhZmZlY3RlZF9kbV9pZCwgMCwgRE9WSV9N QVhfRE1fSUQpOworICAgICAgICBWQUxJREFURShjdXJyZW50X2RtX2lkLCAwLCBET1ZJX01BWF9E TV9JRCk7CisgICAgICAgIGlmICghcy0+dmRyW2FmZmVjdGVkX2RtX2lkXSkgeworICAgICAgICAg ICAgcy0+dmRyW2FmZmVjdGVkX2RtX2lkXSA9IGZmX3JlZnN0cnVjdF9hbGxvY3ooc2l6ZW9mKERP VklWZHIpKTsKKyAgICAgICAgICAgIGlmICghcy0+dmRyW2FmZmVjdGVkX2RtX2lkXSkKKyAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisKKyAgICAgICAg aWYgKCFzLT52ZHJbY3VycmVudF9kbV9pZF0pIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLT5sb2dj dHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gcHJldmlvdXMgUlBVIERNIElEOiAldVxuIiwKKyAg ICAgICAgICAgICAgICAgICBjdXJyZW50X2RtX2lkKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KyAgICAgICAgfQorCisgICAgICAgIC8qIFVwZGF0ZSBjdXJyZW50IHBvaW50ZXIgYmFzZWQgb24g Y3VycmVudF9kbV9pZCAqLworICAgICAgICB2ZHIgPSBzLT52ZHJbY3VycmVudF9kbV9pZF07Cisg ICAgICAgIHMtPmNvbG9yID0gJnZkci0+Y29sb3I7CisKKyAgICAgICAgLyogVXBkYXRlIHZhbHVl cyBvZiBhZmZlY3RlZF9kbV9pZCAqLworICAgICAgICB2ZHIgPSBzLT52ZHJbYWZmZWN0ZWRfZG1f aWRdOworICAgICAgICBjb2xvciA9ICZ2ZHItPmNvbG9yOworICAgICAgICBjb2xvci0+ZG1fbWV0 YWRhdGFfaWQgPSBhZmZlY3RlZF9kbV9pZDsKKyAgICAgICAgY29sb3ItPnNjZW5lX3JlZnJlc2hf ZmxhZyA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDk7IGkrKykKKyAgICAgICAgICAgIGNvbG9yLT55Y2NfdG9fcmdiX21hdHJpeFtpXSA9IGF2X21h a2VfcShnZXRfc2JpdHMoZ2IsIDE2KSwgMSA8PCAxMyk7CisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBpbnQgZGVub20gPSBwcm9maWxlID09IDQgPyAo MSA8PCAzMCkgOiAoMSA8PCAyOCk7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRf Yml0c19sb25nKGdiLCAzMik7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gSU5UX01BWCkgewor ICAgICAgICAgICAgICAgIC8qIEVuc3VyZSB0aGUgcmVzdWx0IGZpdHMgaW5zaWRlIEFWUmF0aW9u YWwgKi8KKyAgICAgICAgICAgICAgICBvZmZzZXQgPj49IDE7CisgICAgICAgICAgICAgICAgZGVu b20gPj49IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb2xvci0+eWNjX3RvX3JnYl9v ZmZzZXRbaV0gPSBhdl9tYWtlX3Eob2Zmc2V0LCBkZW5vbSk7CisgICAgICAgIH0KKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgICAgICBjb2xvci0+cmdiX3RvX2xt c19tYXRyaXhbaV0gPSBhdl9tYWtlX3EoZ2V0X3NiaXRzKGdiLCAxNiksIDEgPDwgMTQpOworCisg ICAgICAgIGNvbG9yLT5zaWduYWxfZW90ZiA9IGdldF9iaXRzKGdiLCAxNik7CisgICAgICAgIGNv bG9yLT5zaWduYWxfZW90Zl9wYXJhbTAgPSBnZXRfYml0cyhnYiwgMTYpOworICAgICAgICBjb2xv ci0+c2lnbmFsX2VvdGZfcGFyYW0xID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgY29sb3It PnNpZ25hbF9lb3RmX3BhcmFtMiA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgY29s b3ItPnNpZ25hbF9iaXRfZGVwdGggPSBnZXRfYml0cyhnYiwgNSk7CisgICAgICAgIFZBTElEQVRF KGNvbG9yLT5zaWduYWxfYml0X2RlcHRoLCA4LCAxNik7CisgICAgICAgIGNvbG9yLT5zaWduYWxf Y29sb3Jfc3BhY2UgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfY2hy b21hX2Zvcm1hdCA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAgICAgY29sb3ItPnNpZ25hbF9mdWxs X3JhbmdlX2ZsYWcgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGNvbG9yLT5zb3VyY2VfbWlu X3BxID0gZ2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgY29sb3ItPnNvdXJjZV9tYXhfcHEgPSBn ZXRfYml0cyhnYiwgMTIpOworICAgICAgICBjb2xvci0+c291cmNlX2RpYWdvbmFsID0gZ2V0X2Jp dHMoZ2IsIDEwKTsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBleHRlbnNpb24gYmxvY2tzICovCisg ICAgcy0+bnVtX2V4dF9ibG9ja3MgPSAwOworICAgIGlmICgocmV0ID0gcGFyc2VfZXh0X2Jsb2Nr cyhzLCBnYiwgMSkpIDwgMCkgeworICAgICAgICBmZl9kb3ZpX2N0eF91bnJlZihzKTsKKyAgICAg ICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAoZ2V0X2JpdHNfbGVmdChnYikgPiA0OCAv KiBwYWRkaW5nICsgQ1JDMzIgKyB0ZXJtaW5hdG9yICovKSB7CisgICAgICAgIGlmICgocmV0ID0g cGFyc2VfZXh0X2Jsb2NrcyhzLCBnYiwgMikpIDwgMCkgeworICAgICAgICAgICAgZmZfZG92aV9j dHhfdW5yZWYocyk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgZmZfZG92aV9jdHhfdW5yZWYocyk7IC8qIGRv bid0IGxlYWsgcG90ZW50aWFsbHkgaW52YWxpZCBzdGF0ZSAqLworICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworfQotLSAKMi40NC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZl bEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1k ZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==