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 0CB9646529 for ; Sun, 21 May 2023 13:05:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D6D1568C17C; Sun, 21 May 2023 16:03:53 +0300 (EEST) Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A427C68C16A for ; Sun, 21 May 2023 16:03:50 +0300 (EEST) Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-64d2da69fdfso3185551b3a.0 for ; Sun, 21 May 2023 06:03:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684674228; x=1687266228; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Gj57g2p3cPRiLMrca4s+6eu53V1m67uJpbu52Jg0zhw=; b=OyNlJRhSHwOTzmodavdXDwtyIuTu8dkvu6nXmMvxTne2xkUgy8yvys/HYTrpR36T0J 09Bbybu0MqsSGEM0z26Kcs1S4/6abX3WrHtGcm8XdYVp5VtfNipdFIqfIRBTZYH94Jg0 3solVBJZ8NjD0FFUIxIgALj3Cgj5bjMLoDrAaOZ7IAhRYmBbuCNEANGtnZSre9EnQ/05 lobwltQmaMY6STNl4JE4aTTXJf28KUKtHE968hp2SZGUWtJXvX+B/fzoL58f/AobAwwt XFMhF+Ny1HOcio3e+FGuN8uCPo1Au/MKqqbW8CRgtHmAeA7L6UZqvaMbZGF1qqVp/45a L8bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684674228; x=1687266228; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Gj57g2p3cPRiLMrca4s+6eu53V1m67uJpbu52Jg0zhw=; b=HciUQAnuI6hFGq7XGScRgfDwPCjpWIkH87Xe6J2VwoIo7sWAJhZxWLFDg8HE8T5yc1 eUZQIrWDB4Py0JQl5V8OGoqxgHVujXUH9Kwhb/CzcGFFfeoa96Vm7pIZyHqSaeA4IHae z0yEWghckKwbLL89q+tut/TlkucqXvED8gZrIbF2qCB6CtAEY2THltcp2ZTb5Mi3MSQN dYl/t5ThdQHx9JE7NYMFQlV0PdzVzRVZkEwyYzaRMqBV/ikLaqwLCUdWNHiR/2gj5UX9 GSOlaB8DewbFOjlmIrMdr7+68qbA05HneFBCQDukjVP4XXBidD1WwqvanXfeBBqeG+6u KkWw== X-Gm-Message-State: AC+VfDxmHKhq3db4Wf3MoDpwDfuuILuRZy7XiVv7P14hje9bCjxuedQs +MxVX0fi5qlmaAOBUMSq2x7lz8cHw1bhYg== X-Google-Smtp-Source: ACHHUZ7DdVZKQOq5qAPQR2p/qxxzf1hfNw8ugXujbIdjmf7EkIrK3XLX0j8Q6IEA9IkBrjBm+NFQpQ== X-Received: by 2002:a05:6a00:14c4:b0:647:e45f:1a49 with SMTP id w4-20020a056a0014c400b00647e45f1a49mr10749893pfu.4.1684674226808; Sun, 21 May 2023 06:03:46 -0700 (PDT) Received: from NuoMi.localdomain ([112.64.8.97]) by smtp.gmail.com with ESMTPSA id t9-20020aa79389000000b0064d45eea573sm1671872pfe.41.2023.05.21.06.03.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 May 2023 06:03:46 -0700 (PDT) From: Nuo Mi To: ffmpeg-devel@ffmpeg.org Date: Sun, 21 May 2023 21:03:15 +0800 Message-Id: <20230521130319.13813-11-nuomi2021@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230521130319.13813-1-nuomi2021@gmail.com> References: <20230521130319.13813-1-nuomi2021@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/14] vvcdec: add LMCS, Deblocking, SAO, and ALF filters 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: Nuo Mi 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: LS0tCiBsaWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAzICstCiBsaWJh dmNvZGVjL3Z2Yy92dmNfY3R1LmggICAgICAgICAgICAgfCAgICAyICsKIGxpYmF2Y29kZWMvdnZj L3Z2Y19maWx0ZXIuYyAgICAgICAgICB8IDEzNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysK IGxpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuaCAgICAgICAgICB8ICAgNzAgKysKIGxpYmF2Y29k ZWMvdnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYyB8IDEyMTYgKysrKysrKysrKysrKysrKysrKysr KysKIDUgZmlsZXMgY2hhbmdlZCwgMjY0NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy92dmMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQppbmRleCA5ZDk1YTE1 NDI0Li5lNTk2NjU5YmE5IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQorKysg Yi9saWJhdmNvZGVjL3Z2Yy9NYWtlZmlsZQpAQCAtMTEsNCArMTEsNSBAQCBPQkpTLSQoQ09ORklH X1ZWQ19ERUNPREVSKSAgICAgICAgICArPSAgdnZjL3Z2Y2RlYy5vICAgICAgICAgICAgXAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2Yy92dmNfY3R1Lm8gICAgICAg ICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2lu dGVyLm8gICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dnZjL3Z2Y19pdHhfMWQubyAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2Yy92dmNfaW50cmEubworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2Yy92dmNfaW50cmEubyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2dmMvdnZjX2ZpbHRlci5vCmRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL3Z2Yy92dmNfY3R1LmggYi9saWJhdmNvZGVjL3Z2Yy92dmNfY3R1LmgKaW5kZXggOTJhNGZj ZDUzOS4uZTQ5MTkzM2Y4NSAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy92dmMvdnZjX2N0dS5oCisr KyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19jdHUuaApAQCAtMzkwLDQgKzM5MCw2IEBAIHN0cnVjdCBB TEZQYXJhbXMgewogdm9pZCBmZl92dmNfc2V0X25laWdoYm91cl9hdmFpbGFibGUoVlZDTG9jYWxD b250ZXh0ICpsYywgaW50IHgwLCBpbnQgeTAsIGludCB3LCBpbnQgaCk7CiB2b2lkIGZmX3Z2Y19k ZWNvZGVfbmVpZ2hib3VyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4X2N0YiwgaW50IHlfY3Ri LCBpbnQgcngsIGludCByeSwgaW50IHJzKTsKIHZvaWQgZmZfdnZjX2N0dV9mcmVlX2N1cyhDVFUg KmN0dSk7CitpbnQgZmZfdnZjX2dldF9xUHkoY29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYywgaW50 IHhjLCBpbnQgeWMpOworCiAjZW5kaWYgLy8gQVZDT0RFQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kODk4N2QyNmEzCi0tLSAv ZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlci5jCkBAIC0wLDAgKzEsMTM1 NiBAQAorLyoKKyAqIFZWQyBmaWx0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIE51byBN aQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAidnZj X2N0dS5oIgorI2luY2x1ZGUgInZ2Y19kYXRhLmgiCisjaW5jbHVkZSAidnZjX2ZpbHRlci5oIgor I2luY2x1ZGUgInZ2Y19yZWZzLmgiCisKKyNkZWZpbmUgTEVGVCAgICAgICAgMAorI2RlZmluZSBU T1AgICAgICAgICAxCisjZGVmaW5lIFJJR0hUICAgICAgIDIKKyNkZWZpbmUgQk9UVE9NICAgICAg MworI2RlZmluZSBNQVhfRURHRVMgICA0CisKKy8vVGFibGUgNDMgRGVyaXZhdGlvbiBvZiB0aHJl c2hvbGQgdmFyaWFibGVzIGJldGEnIGFuZCB0YycgZnJvbSBpbnB1dCBRCitzdGF0aWMgY29uc3Qg dWludDE2X3QgdGN0YWJsZVs2Nl0gPSB7CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAg ICAgMCwgICAwLCAgIDMsICAgNCwgICA0LCAgIDQsICAgNCwgICA1LCAgIDUsICAgNSwgICA1LCAg IDcsICAgNywgICA4LCAgIDksICAxMCwKKyAgICAgMTAsICAxMSwgIDEzLCAgMTQsICAxNSwgIDE3 LCAgMTksICAyMSwgIDI0LCAgMjUsICAyOSwgIDMzLCAgMzYsICA0MSwgIDQ1LCAgNTEsCisgICAg IDU3LCAgNjQsICA3MSwgIDgwLCAgODksIDEwMCwgMTEyLCAxMjUsIDE0MSwgMTU3LCAxNzcsIDE5 OCwgMjIyLCAyNTAsIDI4MCwgMzE0LAorICAgIDM1MiwgMzk1LAorCit9OworCisvL1RhYmxlIDQz IERlcml2YXRpb24gb2YgdGhyZXNob2xkIHZhcmlhYmxlcyBiZXRhJyBhbmQgdGMnIGZyb20gaW5w dXQgUQorc3RhdGljIGNvbnN0IHVpbnQ4X3QgYmV0YXRhYmxlWzY0XSA9IHsKKyAgICAgIDAsICAg MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs ICAgMCwgICAwLCAgIDAsCisgICAgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAg MTMsICAxNCwgIDE1LCAgMTYsICAxNywgIDE4LCAgMjAsICAyMiwgIDI0LAorICAgICAyNiwgIDI4 LCAgMzAsICAzMiwgIDM0LCAgMzYsICAzOCwgIDQwLCAgNDIsICA0NCwgIDQ2LCAgNDgsICA1MCwg IDUyLCAgNTQsICA1NiwKKyAgICAgNTgsICA2MCwgIDYyLCAgNjQsICA2NiwgIDY4LCAgNzAsICA3 MiwgIDc0LCAgNzYsICA3OCwgIDgwLCAgODIsICA4NCwgIDg2LCAgODgsCit9OworCisKK3N0YXRp YyBpbnQgZ2V0X3FQYyhjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeDAsIGNv bnN0IGludCB5MCwgY29uc3QgaW50IGNocm9tYSkKK3sKKyAgICBjb25zdCBpbnQgeCAgICAgICAg ICAgICA9IHgwID4+IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCB5ICAgICAgICAgICAgID0g eTAgPj4gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl90dV93aWR0aCAgPSBmYy0+cHMu cHBzLT5taW5fdHVfd2lkdGg7CisgICAgcmV0dXJuIGZjLT50YWIucXBbY2hyb21hXVt4ICsgeSAq IG1pbl90dV93aWR0aF07Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfQ1RCKHVpbnQ4X3QgKmRzdCwg Y29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisg ICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRl KQoreworICAgIGludCBpLCBqOworCisgICAgaWYgKCgoaW50cHRyX3QpZHN0IHwgKGludHB0cl90 KXNyYyB8IGRzdF9zdHJpZGUgfCBzcmNfc3RyaWRlKSAmIDE1KSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRo OyBqKz04KQorICAgICAgICAgICAgICAgIEFWX0NPUFk2NFUoZHN0K2osIHNyYytqKTsKKyAgICAg ICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAgICAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0 OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgais9MTYpCisgICAg ICAgICAgICAgICAgQVZfQ09QWTEyOChkc3Qraiwgc3JjK2opOworICAgICAgICAgICAgZHN0ICs9 IGRzdF9zdHJpZGU7CisgICAgICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgY29weV9waXhlbCh1aW50OF90ICpkc3QsIGNvbnN0IHVp bnQ4X3QgKnNyYywgY29uc3QgaW50IHBpeGVsX3NoaWZ0KQoreworICAgIGlmIChwaXhlbF9zaGlm dCkKKyAgICAgICAgKih1aW50MTZfdCAqKWRzdCA9ICoodWludDE2X3QgKilzcmM7CisgICAgZWxz ZQorICAgICAgICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGljIHZvaWQgY29weV92ZXJ0KHVpbnQ4 X3QgKmRzdCwgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQgcGl4ZWxfc2hpZnQsIGNvbnN0 IGludCBoZWlnaHQsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0cmRp ZmZfdCBzcmNfc3RyaWRlKQoreworICAgIGludCBpOworICAgIGlmIChwaXhlbF9zaGlmdCA9PSAw KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAg KmRzdCA9ICpzcmM7CisgICAgICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICAgICAgICAg IHNyYyArPSBzcmNfc3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgICAgICAqKHVpbnQxNl90ICopZHN0 ID0gKih1aW50MTZfdCAqKXNyYzsKKyAgICAgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOworICAg ICAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGNvcHlfQ1RCX3RvX2h2KFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IHVpbnQ4X3Qg KnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgY29uc3QgaW50IHgsIGNvbnN0 IGludCB5LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsCisgICAgY29uc3QgaW50 IGNfaWR4LCBjb25zdCBpbnQgeF9jdGIsIGNvbnN0IGludCB5X2N0YikKK3sKKyAgICBpbnQgcHMg PSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBpbnQgdyAgPSBmYy0+cHMuc3BzLT53aWR0 aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgIGludCBoICA9IGZjLT5wcy5zcHMt PmhlaWdodCA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworCisgICAgLyogY29weSBob3Jp em9udGFsIGVkZ2VzICovCisgICAgbWVtY3B5KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl9oW2Nf aWR4XSArICgoKDIgKiB5X2N0YikgKiB3ICsgeCkgPDwgcHMpLAorICAgICAgICBzcmMsIHdpZHRo IDw8IHBzKTsKKyAgICBtZW1jcHkoZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdICsg KCgoMiAqIHlfY3RiICsgMSkgKiB3ICsgeCkgPDwgcHMpLAorICAgICAgICBzcmMgKyBzcmNfc3Ry aWRlICogKGhlaWdodCAtIDEpLCB3aWR0aCA8PCBwcyk7CisKKyAgICAvKiBjb3B5IHZlcnRpY2Fs IGVkZ2VzICovCisgICAgY29weV92ZXJ0KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZlcl92W2NfaWR4 XSArICgoKDIgKiB4X2N0YikgKiBoICsgeSkgPDwgcHMpLCBzcmMsIHBzLCBoZWlnaHQsIDEgPDwg cHMsIHNyY19zdHJpZGUpOworCisgICAgY29weV92ZXJ0KGZjLT50YWIuc2FvX3BpeGVsX2J1ZmZl cl92W2NfaWR4XSArICgoKDIgKiB4X2N0YiArIDEpICogaCArIHkpIDw8IHBzKSwgc3JjICsgKCh3 aWR0aCAtIDEpIDw8IHBzKSwgcHMsIGhlaWdodCwgMSA8PCBwcywgc3JjX3N0cmlkZSk7Cit9CisK K3ZvaWQgZmZfdnZjX3Nhb19maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgsIGludCB5 KQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOworICAgIGNvbnN0IGludCBj dGJfc2l6ZV95ID0gZmMtPnBzLnNwcy0+Y3RiX3NpemVfeTsKKyAgICBzdGF0aWMgY29uc3QgdWlu dDhfdCBzYW9fdGFiWzE2XSA9IHsgMCwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwg NywgNywgOCwgOCB9OworICAgIGludCBjX2lkeDsKKyAgICBpbnQgZWRnZXNbNF07ICAvLyAwIGxl ZnQgMSB0b3AgMiByaWdodCAzIGJvdHRvbQorICAgIGludCB4X2N0YiAgICAgICAgICAgICAgICA9 IHggPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIGludCB5X2N0YiAgICAgICAg ICAgICAgICA9IHkgPj4gZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95OworICAgIFNBT1BhcmFt cyAqc2FvICAgICAgICAgICA9ICZDVEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yik7CisgICAg Ly8gZmxhZ3MgaW5kaWNhdGluZyB1bmZpbHRlcmFibGUgZWRnZXMKKyAgICB1aW50OF90IHZlcnRf ZWRnZVtdICAgICAgPSB7IDAsIDAgfTsKKyAgICB1aW50OF90IGhvcml6X2VkZ2VbXSAgICAgPSB7 IDAsIDAgfTsKKyAgICB1aW50OF90IGRpYWdfZWRnZVtdICAgICAgPSB7IDAsIDAsIDAsIDAgfTsK KyAgICB1aW50OF90IGxmYXNlICAgICAgICAgICAgPSBmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9h Y3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZzsKKyAgICB1aW50OF90IG5vX3RpbGVfZmlsdGVyICAg PSBmYy0+cHMucHBzLT5udW1fdGlsZXNfaW5fcGljID4gMSAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxl ZF9mbGFnOworICAgIHVpbnQ4X3QgcmVzdG9yZSAgICAgICAgICA9IG5vX3RpbGVfZmlsdGVyIHx8 ICFsZmFzZTsKKyAgICB1aW50OF90IGxlZnRfdGlsZV9lZGdlICAgPSAwOworICAgIHVpbnQ4X3Qg cmlnaHRfdGlsZV9lZGdlICA9IDA7CisgICAgdWludDhfdCB1cF90aWxlX2VkZ2UgICAgID0gMDsK KyAgICB1aW50OF90IGJvdHRvbV90aWxlX2VkZ2UgPSAwOworCisgICAgZWRnZXNbTEVGVF0gICA9 IHhfY3RiID09IDA7CisgICAgZWRnZXNbVE9QXSAgICA9IHlfY3RiID09IDA7CisgICAgZWRnZXNb UklHSFRdICA9IHhfY3RiID09IGZjLT5wcy5wcHMtPmN0Yl93aWR0aCAgLSAxOworICAgIGVkZ2Vz W0JPVFRPTV0gPSB5X2N0YiA9PSBmYy0+cHMucHBzLT5jdGJfaGVpZ2h0IC0gMTsKKworICAgIGlm IChyZXN0b3JlKSB7CisgICAgICAgIGlmICghZWRnZXNbTEVGVF0pIHsKKyAgICAgICAgICAgIGxl ZnRfdGlsZV9lZGdlICA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xf YmRbeF9jdGJdID09IHhfY3RiOworICAgICAgICAgICAgdmVydF9lZGdlWzBdICAgID0gKCFsZmFz ZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIu c2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiKSkgfHwgbGVmdF90aWxlX2VkZ2U7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0pIHsKKyAgICAgICAgICAgIHJpZ2h0X3RpbGVf ZWRnZSA9IG5vX3RpbGVfZmlsdGVyICYmIGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGJd ICE9IGZjLT5wcy5wcHMtPmN0Yl90b19jb2xfYmRbeF9jdGIgKyAxXTsKKyAgICAgICAgICAgIHZl cnRfZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0Yiwg eV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0YikpIHx8IHJp Z2h0X3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0pIHsKKyAg ICAgICAgICAgIHVwX3RpbGVfZWRnZSAgICAgPSBub190aWxlX2ZpbHRlciAmJiBmYy0+cHMucHBz LT5jdGJfdG9fcm93X2JkW3lfY3RiXSA9PSB5X2N0YjsKKyAgICAgICAgICAgIGhvcml6X2VkZ2Vb MF0gICAgPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAh PSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiAtIDEpKSB8fCB1cF90aWxlX2Vk Z2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tCT1RUT01dKSB7CisgICAgICAgICAg ICBib3R0b21fdGlsZV9lZGdlID0gbm9fdGlsZV9maWx0ZXIgJiYgZmMtPnBzLnBwcy0+Y3RiX3Rv X3Jvd19iZFt5X2N0Yl0gIT0gZmMtPnBzLnBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0YiArIDFdOwor ICAgICAgICAgICAgaG9yaXpfZWRnZVsxXSAgICA9ICghbGZhc2UgJiYgQ1RCKGZjLT50YWIuc2xp Y2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIsIHlf Y3RiICsgMSkpIHx8IGJvdHRvbV90aWxlX2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFl ZGdlc1tMRUZUXSAmJiAhZWRnZXNbVE9QXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzBdID0g KCFsZmFzZSAmJiBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZj LT50YWIuc2xpY2VfaWR4LCB4X2N0YiAtIDEsIHlfY3RiIC0gMSkpIHx8IGxlZnRfdGlsZV9lZGdl IHx8IHVwX3RpbGVfZWRnZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW1RPUF0gJiYg IWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgZGlhZ19lZGdlWzFdID0gKCFsZmFzZSAmJiBD VEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YikgIT0gQ1RCKGZjLT50YWIuc2xpY2Vf aWR4LCB4X2N0YiArIDEsIHlfY3RiIC0gMSkpIHx8IHJpZ2h0X3RpbGVfZWRnZSB8fCB1cF90aWxl X2VkZ2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFlZGdlc1tSSUdIVF0gJiYgIWVkZ2VzW0JP VFRPTV0pIHsKKyAgICAgICAgICAgIGRpYWdfZWRnZVsyXSA9ICghbGZhc2UgJiYgQ1RCKGZjLT50 YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9j dGIgKyAxLCB5X2N0YiArIDEpKSB8fCByaWdodF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRn ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWVkZ2VzW0xFRlRdICYmICFlZGdlc1tCT1RUT01d KSB7CisgICAgICAgICAgICBkaWFnX2VkZ2VbM10gPSAoIWxmYXNlICYmIENUQihmYy0+dGFiLnNs aWNlX2lkeCwgeF9jdGIsIHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiIC0g MSwgeV9jdGIgKyAxKSkgfHwgbGVmdF90aWxlX2VkZ2UgfHwgYm90dG9tX3RpbGVfZWRnZTsKKyAg ICAgICAgfQorICAgIH0KKworICAgIGZvciAoY19pZHggPSAwOyBjX2lkeCA8IChmYy0+cHMuc3Bz LT5jaHJvbWFfZm9ybWF0X2lkYyA/IDMgOiAxKTsgY19pZHgrKykgeworICAgICAgICBpbnQgeDAg ICAgICAgPSB4ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAgICAgIGludCB5MCAg ICAgICA9IHkgPj4gZmMtPnBzLnNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgcHRyZGlmZl90 IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAgICAgICAgaW50IGN0 Yl9zaXplX2ggPSBjdGJfc2l6ZV95ID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF07CisgICAg ICAgIGludCBjdGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiBmYy0+cHMuc3BzLT52c2hpZnRbY19p ZHhdOworICAgICAgICBpbnQgd2lkdGggICAgPSBGRk1JTihjdGJfc2l6ZV9oLCAoZmMtPnBzLnNw cy0+d2lkdGggID4+IGZjLT5wcy5zcHMtPmhzaGlmdFtjX2lkeF0pIC0geDApOworICAgICAgICBp bnQgaGVpZ2h0ICAgPSBGRk1JTihjdGJfc2l6ZV92LCAoZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZj LT5wcy5zcHMtPnZzaGlmdFtjX2lkeF0pIC0geTApOworICAgICAgICBpbnQgdGFiICAgICAgPSBz YW9fdGFiWyhGRkFMSUdOKHdpZHRoLCA4KSA+PiAzKSAtIDFdOworICAgICAgICB1aW50OF90ICpz cmMgPSAmZmMtPmZyYW1lLT5kYXRhW2NfaWR4XVt5MCAqIHNyY19zdHJpZGUgKyAoeDAgPDwgZmMt PnBzLnNwcy0+cGl4ZWxfc2hpZnQpXTsKKyAgICAgICAgcHRyZGlmZl90IGRzdF9zdHJpZGU7Cisg ICAgICAgIHVpbnQ4X3QgKmRzdDsKKworICAgICAgICBzd2l0Y2ggKHNhby0+dHlwZV9pZHhbY19p ZHhdKSB7CisgICAgICAgIGNhc2UgU0FPX0JBTkQ6CisgICAgICAgICAgICBjb3B5X0NUQl90b19o dihmYywgc3JjLCBzcmNfc3RyaWRlLCB4MCwgeTAsIHdpZHRoLCBoZWlnaHQsIGNfaWR4LCB4X2N0 YiwgeV9jdGIpOworICAgICAgICAgICAgZmMtPnZ2Y2RzcC5zYW8uYmFuZF9maWx0ZXJbdGFiXShz cmMsIHNyYywgc3JjX3N0cmlkZSwgc3JjX3N0cmlkZSwKKyAgICAgICAgICAgICAgICBzYW8tPm9m ZnNldF92YWxbY19pZHhdLCBzYW8tPmJhbmRfcG9zaXRpb25bY19pZHhdLCB3aWR0aCwgaGVpZ2h0 KTsKKyAgICAgICAgICAgIHNhby0+dHlwZV9pZHhbY19pZHhdID0gU0FPX0FQUExJRUQ7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTQU9fRURHRToKKyAgICAgICAgeworICAgICAg ICAgICAgaW50IHcgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19p ZHhdOworICAgICAgICAgICAgaW50IGggPSBmYy0+cHMuc3BzLT5oZWlnaHQgPj4gZmMtPnBzLnNw cy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgICAgIGludCBzaCA9IGZjLT5wcy5zcHMtPnBpeGVs X3NoaWZ0OworICAgICAgICAgICAgaW50IGxlZnRfcGl4ZWxzLCByaWdodF9waXhlbHM7CisKKyAg ICAgICAgICAgIGRzdF9zdHJpZGUgPSAyKk1BWF9QQl9TSVpFICsgQVZfSU5QVVRfQlVGRkVSX1BB RERJTkdfU0laRTsKKyAgICAgICAgICAgIGRzdCA9IGxjLT5zYW9fYnVmZmVyICsgZHN0X3N0cmlk ZSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkU7CisKKyAgICAgICAgICAgIGlmICghZWRn ZXNbVE9QXSkgeworICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gMSAtIGVkZ2VzW0xFRlRdOwor ICAgICAgICAgICAgICAgIGludCByaWdodCA9IDEgLSBlZGdlc1tSSUdIVF07CisgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCAqc3JjMVsyXTsKKyAgICAgICAgICAgICAgICB1aW50OF90ICpk c3QxOworICAgICAgICAgICAgICAgIGludCBzcmNfaWR4LCBwb3M7CisKKyAgICAgICAgICAgICAg ICBkc3QxID0gZHN0IC0gZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNoKTsKKyAgICAgICAgICAgICAg ICBzcmMxWzBdID0gc3JjIC0gc3JjX3N0cmlkZSAtIChsZWZ0IDw8IHNoKTsKKyAgICAgICAgICAg ICAgICBzcmMxWzFdID0gZmMtPnRhYi5zYW9fcGl4ZWxfYnVmZmVyX2hbY19pZHhdICsgKCgoMiAq IHlfY3RiIC0gMSkgKiB3ICsgeDAgLSBsZWZ0KSA8PCBzaCk7CisgICAgICAgICAgICAgICAgcG9z ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCkgeworICAgICAgICAgICAgICAgICAgICBz cmNfaWR4ID0gKENUQihmYy0+dGFiLnNhbywgeF9jdGItMSwgeV9jdGItMSkudHlwZV9pZHhbY19p ZHhdID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FPX0FQUExJRUQpOworICAg ICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRzdDEsIHNyYzFbc3JjX2lkeF0sIHNoKTsKKyAg ICAgICAgICAgICAgICAgICAgcG9zICs9ICgxIDw8IHNoKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgc3JjX2lkeCA9IChDVEIoZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0Yi0x KS50eXBlX2lkeFtjX2lkeF0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBT19BUFBM SUVEKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0MSArIHBvcywgc3JjMVtzcmNfaWR4XSAr IHBvcywgd2lkdGggPDwgc2gpOworICAgICAgICAgICAgICAgIGlmIChyaWdodCkgeworICAgICAg ICAgICAgICAgICAgICBwb3MgKz0gd2lkdGggPDwgc2g7CisgICAgICAgICAgICAgICAgICAgIHNy Y19pZHggPSAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0YisxLCB5X2N0Yi0xKS50eXBlX2lkeFtjX2lk eF0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQU9fQVBQTElFRCk7CisgICAg ICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0MSArIHBvcywgc3JjMVtzcmNfaWR4XSArIHBv cywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICghZWRnZXNbQk9UVE9NXSkgeworICAgICAgICAgICAgICAgIGludCBsZWZ0ID0gMSAtIGVkZ2Vz W0xFRlRdOworICAgICAgICAgICAgICAgIGludCByaWdodCA9IDEgLSBlZGdlc1tSSUdIVF07Cisg ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjMVsyXTsKKyAgICAgICAgICAgICAgICB1 aW50OF90ICpkc3QxOworICAgICAgICAgICAgICAgIGludCBzcmNfaWR4LCBwb3M7CisKKyAgICAg ICAgICAgICAgICBkc3QxID0gZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZSAtIChsZWZ0IDw8IHNo KTsKKyAgICAgICAgICAgICAgICBzcmMxWzBdID0gc3JjICsgaGVpZ2h0ICogc3JjX3N0cmlkZSAt IChsZWZ0IDw8IHNoKTsKKyAgICAgICAgICAgICAgICBzcmMxWzFdID0gZmMtPnRhYi5zYW9fcGl4 ZWxfYnVmZmVyX2hbY19pZHhdICsgKCgoMiAqIHlfY3RiICsgMikgKiB3ICsgeDAgLSBsZWZ0KSA8 PCBzaCk7CisgICAgICAgICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobGVm dCkgeworICAgICAgICAgICAgICAgICAgICBzcmNfaWR4ID0gKENUQihmYy0+dGFiLnNhbywgeF9j dGItMSwgeV9jdGIrMSkudHlwZV9pZHhbY19pZHhdID09CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU0FPX0FQUExJRUQpOworICAgICAgICAgICAgICAgICAgICBjb3B5X3BpeGVsKGRz dDEsIHNyYzFbc3JjX2lkeF0sIHNoKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9ICgxIDw8 IHNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjX2lkeCA9IChDVEIo ZmMtPnRhYi5zYW8sIHhfY3RiLCB5X2N0YisxKS50eXBlX2lkeFtjX2lkeF0gPT0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNBT19BUFBMSUVEKTsKKyAgICAgICAgICAgICAgICBtZW1jcHko ZHN0MSArIHBvcywgc3JjMVtzcmNfaWR4XSArIHBvcywgd2lkdGggPDwgc2gpOworICAgICAgICAg ICAgICAgIGlmIChyaWdodCkgeworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gd2lkdGggPDwg c2g7CisgICAgICAgICAgICAgICAgICAgIHNyY19pZHggPSAoQ1RCKGZjLT50YWIuc2FvLCB4X2N0 YisxLCB5X2N0YisxKS50eXBlX2lkeFtjX2lkeF0gPT0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTQU9fQVBQTElFRCk7CisgICAgICAgICAgICAgICAgICAgIGNvcHlfcGl4ZWwoZHN0 MSArIHBvcywgc3JjMVtzcmNfaWR4XSArIHBvcywgc2gpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlZnRfcGl4ZWxzID0gMDsKKyAgICAgICAgICAgIGlm ICghZWRnZXNbTEVGVF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ1RCKGZjLT50YWIuc2FvLCB4 X2N0Yi0xLCB5X2N0YikudHlwZV9pZHhbY19pZHhdID09IFNBT19BUFBMSUVEKSB7CisgICAgICAg ICAgICAgICAgICAgIGNvcHlfdmVydChkc3QgLSAoMSA8PCBzaCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfdltjX2lkeF0gKyAoKCgyICog eF9jdGIgLSAxKSAqIGggKyB5MCkgPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdF9waXhlbHMgPSAxOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJpZ2h0X3BpeGVscyA9IDA7CisgICAg ICAgICAgICBpZiAoIWVkZ2VzW1JJR0hUXSkgeworICAgICAgICAgICAgICAgIGlmIChDVEIoZmMt PnRhYi5zYW8sIHhfY3RiKzEsIHlfY3RiKS50eXBlX2lkeFtjX2lkeF0gPT0gU0FPX0FQUExJRUQp IHsKKyAgICAgICAgICAgICAgICAgICAgY29weV92ZXJ0KGRzdCArICh3aWR0aCA8PCBzaCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnNhb19waXhlbF9idWZmZXJfdltj X2lkeF0gKyAoKCgyICogeF9jdGIgKyAyKSAqIGggKyB5MCkgPDwgc2gpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2gsIGhlaWdodCwgZHN0X3N0cmlkZSwgMSA8PCBzaCk7CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRfcGl4ZWxzID0g MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvcHlf Q1RCKGRzdCAtIChsZWZ0X3BpeGVscyA8PCBzaCksCisgICAgICAgICAgICAgICAgICAgICBzcmMg LSAobGVmdF9waXhlbHMgPDwgc2gpLAorICAgICAgICAgICAgICAgICAgICAgKHdpZHRoICsgbGVm dF9waXhlbHMgKyByaWdodF9waXhlbHMpIDw8IHNoLAorICAgICAgICAgICAgICAgICAgICAgaGVp Z2h0LCBkc3Rfc3RyaWRlLCBzcmNfc3RyaWRlKTsKKworICAgICAgICAgICAgY29weV9DVEJfdG9f aHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeDAsIHkwLCB3aWR0aCwgaGVpZ2h0LCBjX2lkeCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHhfY3RiLCB5X2N0Yik7CisgICAgICAgICAgICBmYy0+ dnZjZHNwLnNhby5lZGdlX2ZpbHRlclt0YWJdKHNyYywgZHN0LCBzcmNfc3RyaWRlLCBzYW8tPm9m ZnNldF92YWxbY19pZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzYW8tPmVvX2NsYXNzW2NfaWR4XSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBm Yy0+dnZjZHNwLnNhby5lZGdlX3Jlc3RvcmVbcmVzdG9yZV0oc3JjLCBkc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyaWRlLCBkc3Rfc3Ry aWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXMs IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGVpZ2h0LCBjX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZlcnRfZWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhvcml6X2VkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWFnX2VkZ2UpOworICAgICAgICAgICAgc2FvLT50eXBlX2lkeFtjX2lk eF0gPSBTQU9fQVBQTElFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IH0KKyAgICB9Cit9CisKKyNkZWZpbmUgVEFCX0JTKHQsIHgsIHkpICAgICAodClbKCh5KSA+PiAy KSAqIChmYy0+dGFiLmJzX3dpZHRoKSArICgoeCkgPj4gMildCisjZGVmaW5lIFRBQl9NQVhfTEVO KHQsIHgsIHkpICAodClbKCh5KSA+PiAyKSAqIChmYy0+dGFiLmJzX3dpZHRoKSArICgoeCkgPj4g MildCisjZGVmaW5lIERFQkxPQ0tfU1RFUCAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX0ZJTFRF Ul9MRU4gICAgICAgICAgOAorI2RlZmluZSBMVU1BX0dSSUQgICAgICAgICAgICAgICA0CisjZGVm aW5lIENIUk9NQV9HUklEICAgICAgICAgICAgIDgKKworc3RhdGljIGludCBib3VuZGFyeV9zdHJl bmd0aChjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjLCBNdkZpZWxkICpjdXJyLCBNdkZpZWxkICpu ZWlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVmUGljTGlzdCAqbmVp Z2hfcmVmUGljTGlzdCkKK3sKKyAgICBpZiAoY3Vyci0+cHJlZF9mbGFnID09IFBGX0JJICYmICBu ZWlnaC0+cHJlZF9mbGFnID09IFBGX0JJKSB7CisgICAgICAgIC8vIHNhbWUgTDAgYW5kIEwxCisg ICAgICAgIGlmIChmYy0+cmVmLT5yZWZQaWNMaXN0WzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0g PT0gbmVpZ2hfcmVmUGljTGlzdFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSAgJiYKKyAgICAg ICAgICAgIGZjLT5yZWYtPnJlZlBpY0xpc3RbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXSA9PSBm Yy0+cmVmLT5yZWZQaWNMaXN0WzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0gJiYKKyAgICAgICAg ICAgIG5laWdoX3JlZlBpY0xpc3RbMF0ubGlzdFtuZWlnaC0+cmVmX2lkeFswXV0gPT0gbmVpZ2hf cmVmUGljTGlzdFsxXS5saXN0W25laWdoLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAgaWYg KChGRkFCUyhuZWlnaC0+bXZbMF0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwgRkZBQlMobmVp Z2gtPm12WzBdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAgICAgICAgIEZG QUJTKG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMV0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+ bXZbMV0ueSAtIGN1cnItPm12WzFdLnkpID49IDgpICYmCisgICAgICAgICAgICAgICAgKEZGQUJT KG5laWdoLT5tdlsxXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhuZWlnaC0+bXZb MV0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICAgRkZBQlMobmVp Z2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJTKG5laWdoLT5tdlswXS55 IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSBp ZiAobmVpZ2hfcmVmUGljTGlzdFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSA9PSBmYy0+cmVm LT5yZWZQaWNMaXN0WzBdLmxpc3RbY3Vyci0+cmVmX2lkeFswXV0gJiYKKyAgICAgICAgICAgICAg ICAgICBuZWlnaF9yZWZQaWNMaXN0WzFdLmxpc3RbbmVpZ2gtPnJlZl9pZHhbMV1dID09IGZjLT5y ZWYtPnJlZlBpY0xpc3RbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXSkgeworICAgICAgICAgICAg aWYgKEZGQUJTKG5laWdoLT5tdlswXS54IC0gY3Vyci0+bXZbMF0ueCkgPj0gOCB8fCBGRkFCUyhu ZWlnaC0+bXZbMF0ueSAtIGN1cnItPm12WzBdLnkpID49IDggfHwKKyAgICAgICAgICAgICAgICBG RkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzFdLngpID49IDggfHwgRkZBQlMobmVpZ2gt Pm12WzFdLnkgLSBjdXJyLT5tdlsxXS55KSA+PSA4KQorICAgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9 IGVsc2UgaWYgKG5laWdoX3JlZlBpY0xpc3RbMV0ubGlzdFtuZWlnaC0+cmVmX2lkeFsxXV0gPT0g ZmMtPnJlZi0+cmVmUGljTGlzdFswXS5saXN0W2N1cnItPnJlZl9pZHhbMF1dICYmCisgICAgICAg ICAgICAgICAgICAgbmVpZ2hfcmVmUGljTGlzdFswXS5saXN0W25laWdoLT5yZWZfaWR4WzBdXSA9 PSBmYy0+cmVmLT5yZWZQaWNMaXN0WzFdLmxpc3RbY3Vyci0+cmVmX2lkeFsxXV0pIHsKKyAgICAg ICAgICAgIGlmIChGRkFCUyhuZWlnaC0+bXZbMV0ueCAtIGN1cnItPm12WzBdLngpID49IDggfHwg RkZBQlMobmVpZ2gtPm12WzFdLnkgLSBjdXJyLT5tdlswXS55KSA+PSA4IHx8CisgICAgICAgICAg ICAgICAgRkZBQlMobmVpZ2gtPm12WzBdLnggLSBjdXJyLT5tdlsxXS54KSA+PSA4IHx8IEZGQUJT KG5laWdoLT5tdlswXS55IC0gY3Vyci0+bXZbMV0ueSkgPj0gOCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBl bHNlIGlmICgoY3Vyci0+cHJlZF9mbGFnICE9IFBGX0JJKSAmJiAobmVpZ2gtPnByZWRfZmxhZyAh PSBQRl9CSSkpeyAvLyAxIE1WCisgICAgICAgIE12IEEsIEI7CisgICAgICAgIGludCByZWZfQSwg cmVmX0I7CisKKyAgICAgICAgaWYgKGN1cnItPnByZWRfZmxhZyAmIDEpIHsKKyAgICAgICAgICAg IEEgICAgID0gY3Vyci0+bXZbMF07CisgICAgICAgICAgICByZWZfQSA9IGZjLT5yZWYtPnJlZlBp Y0xpc3RbMF0ubGlzdFtjdXJyLT5yZWZfaWR4WzBdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIEEgICAgID0gY3Vyci0+bXZbMV07CisgICAgICAgICAgICByZWZfQSA9IGZjLT5yZWYt PnJlZlBpY0xpc3RbMV0ubGlzdFtjdXJyLT5yZWZfaWR4WzFdXTsKKyAgICAgICAgfQorCisgICAg ICAgIGlmIChuZWlnaC0+cHJlZF9mbGFnICYgMSkgeworICAgICAgICAgICAgQiAgICAgPSBuZWln aC0+bXZbMF07CisgICAgICAgICAgICByZWZfQiA9IG5laWdoX3JlZlBpY0xpc3RbMF0ubGlzdFtu ZWlnaC0+cmVmX2lkeFswXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBCICAgICA9 IG5laWdoLT5tdlsxXTsKKyAgICAgICAgICAgIHJlZl9CID0gbmVpZ2hfcmVmUGljTGlzdFsxXS5s aXN0W25laWdoLT5yZWZfaWR4WzFdXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWZfQSA9 PSByZWZfQikgeworICAgICAgICAgICAgaWYgKEZGQUJTKEEueCAtIEIueCkgPj0gOCB8fCBGRkFC UyhBLnkgLSBCLnkpID49IDgpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZQorICAgICAg ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8vcGFydCBvZiA4 LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0gYmxvY2sgYm91bmRhcnkKK3N0 YXRpYyB2b2lkIGRlcml2ZV9tYXhfZmlsdGVyX2xlbmd0aF9sdW1hKGNvbnN0IFZWQ0ZyYW1lQ29u dGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX2ludHJhLCBjb25zdCBpbnQgaGFz X3N1YmJsb2NrLCBjb25zdCBpbnQgdmVydGljYWwsIHVpbnQ4X3QgKm1heF9sZW5fcCwgdWludDhf dCAqbWF4X2xlbl9xKQoreworICAgIGNvbnN0IGludCBweCA9ICB2ZXJ0aWNhbCA/IHF4IC0gMSA6 IHF4OworICAgIGNvbnN0IGludCBweSA9ICF2ZXJ0aWNhbCA/IHF5IC0gMSA6IHF5OworICAgIGNv bnN0IHVpbnQ4X3QgKnRiX3NpemUgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudGJfd2lkdGhbTFVNQV0g OiBmYy0+dGFiLnRiX2hlaWdodFtMVU1BXTsKKyAgICBjb25zdCBpbnQgc2l6ZV9wID0gdGJfc2l6 ZVsocHkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsgKHB4ID4+ IE1JTl9UVV9MT0cyKV07CisgICAgY29uc3QgaW50IHNpemVfcSA9IHRiX3NpemVbKHF5ID4+IE1J Tl9UVV9MT0cyKSAqIGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aCArIChxeCA+PiBNSU5fVFVfTE9H MildOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiA9IGZjLT5wcy5zcHMtPm1pbl9jYl9sb2cy X3NpemVfeTsKKyAgICBjb25zdCBpbnQgb2ZmX3AgPSAocHkgPj4gbWluX2NiX2xvZzIpICogZmMt PnBzLnBwcy0+bWluX2NiX3dpZHRoICsgKHB4ID4+IG1pbl9jYl9sb2cyKTsKKyAgICBpZiAoc2l6 ZV9wIDw9IDQgfHwgc2l6ZV9xIDw9IDQpIHsKKyAgICAgICAgKm1heF9sZW5fcCA9ICptYXhfbGVu X3EgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgICptYXhfbGVuX3AgPSAqbWF4X2xlbl9xID0g MzsKKyAgICAgICAgaWYgKHNpemVfcCA+PSAzMikKKyAgICAgICAgICAgICptYXhfbGVuX3AgPSA3 OworICAgICAgICBpZiAoc2l6ZV9xID49IDMyKQorICAgICAgICAgICAgKm1heF9sZW5fcSA9IDc7 CisgICAgfQorICAgIGlmIChoYXNfc3ViYmxvY2spCisgICAgICAgICptYXhfbGVuX3EgPSBGRk1J Tig1LCAqbWF4X2xlbl9xKTsKKyAgICBpZiAoZmMtPnRhYi5tc2Zbb2ZmX3BdIHx8IGZjLT50YWIu aWFmW29mZl9wXSkKKyAgICAgICAgKm1heF9sZW5fcCA9IEZGTUlOKDUsICptYXhfbGVuX3ApOwor fQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19zdWJibG9ja19ic192ZXJ0aWNhbChjb25zdCBW VkNGcmFtZUNvbnRleHQgICpmYywKKyAgICBjb25zdCBpbnQgY2JfeCwgY29uc3QgaW50IGNiX3ks IGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQpCit7CisgICAgTXZGaWVsZCogdGFiX212ZiAgICAgICAgICAgID0gZmMtPnJlZi0+dGFi X212ZjsKKyAgICBSZWZQaWNMaXN0KiBycGwgICAgICAgICAgICAgPSBmYy0+cmVmLT5yZWZQaWNM aXN0OworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgICA9IGZjLT5wcy5wcHMtPm1pbl9w dV93aWR0aDsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSAgPSBNSU5fUFVfTE9HMjsK KyAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOworICAgIGludCBicywgaSwgajsKKwor ICAgIC8vIGJzIGZvciBUVSBpbnRlcm5hbCB2ZXJ0aWNhbCBQVSBib3VuZGFyaWVzCisgICAgZm9y IChqID0gMDsgaiA8IGhlaWdodDsgaiArPSA0KSB7CisgICAgICAgIGludCB5X3B1ID0gKHkwICsg aikgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSA4IC0gKCh4MCAtIGNi X3gpICUgOCk7IGkgPCB3aWR0aDsgaSArPSA4KSB7CisgICAgICAgICAgICBpbnQgeHBfcHUgPSAo eDAgKyBpIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB4cV9wdSA9 ICh4MCArIGkpICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworICAgICAgICAgICAgTXZGaWVsZCAq bGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAgICAgICAg ICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhxX3B1XTsK KyAgICAgICAgICAgIGNvbnN0IGludCB4ID0geDAgKyBpOworICAgICAgICAgICAgY29uc3QgaW50 IHkgPSB5MCArIGo7CisKKyAgICAgICAgICAgIGJzID0gYm91bmRhcnlfc3RyZW5ndGgoZmMsIGN1 cnIsIGxlZnQsIHJwbCk7CisgICAgICAgICAgICBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9ic1tM VU1BXSwgeCwgeSkgPSBiczsKKworCisgICAgICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3Eg PSAwOworICAgICAgICAgICAgaWYgKGkgPT0gNCB8fCBpID09IHdpZHRoIC0gNCkKKyAgICAgICAg ICAgICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAo aSA9PSA4IHx8IGkgPT0gd2lkdGggLSA4KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1h eF9sZW5fcSA9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWF4X2xlbl9w ID0gbWF4X2xlbl9xID0gMzsKKworICAgICAgICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0 aWNhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50 YWIudmVydGljYWxfcSwgeCwgeSkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX3N1YmJsb2NrX2JzX2hvcml6b250YWwoY29uc3QgVlZD RnJhbWVDb250ZXh0ICAqZmMsCisgICAgY29uc3QgaW50IGNiX3gsIGNvbnN0IGludCBjYl95LCBj b25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVp Z2h0KQoreworICAgIE12RmllbGQqIHRhYl9tdmYgICAgICAgICAgICA9IGZjLT5yZWYtPnRhYl9t dmY7CisgICAgUmVmUGljTGlzdCogcnBsICAgICAgICAgICAgID0gZmMtPnJlZi0+cmVmUGljTGlz dDsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVf d2lkdGg7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgID0gTUlOX1BVX0xPRzI7Cisg ICAgdWludDhfdCBtYXhfbGVuX3AsIG1heF9sZW5fcTsKKyAgICBpbnQgYnMsIGksIGo7CisKKyAg ICAvLyBicyBmb3IgVFUgaW50ZXJuYWwgaG9yaXpvbnRhbCBQVSBib3VuZGFyaWVzCisgICAgZm9y IChqID0gOCAtICgoeTAgLSBjYl95KSAlIDgpOyBqIDwgaGVpZ2h0OyBqICs9IDgpIHsKKyAgICAg ICAgaW50IHlwX3B1ID0gKHkwICsgaiAtIDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAg IGludCB5cV9wdSA9ICh5MCArIGopICAgICA+PiBsb2cyX21pbl9wdV9zaXplOworCisgICAgICAg IGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBpbnQgeF9wdSA9 ICh4MCArIGkpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICp0b3Ag ID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIE12 RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAg ICAgICAgICAgY29uc3QgaW50IHggPSB4MCArIGk7CisgICAgICAgICAgICBjb25zdCBpbnQgeSA9 IHkwICsgajsKKworICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChmYywgY3Vyciwg dG9wLCBycGwpOworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tMVU1B XSwgeCwgeSkgPSBiczsKKworICAgICAgICAgICAgLy9maXhtZToKKyAgICAgICAgICAgIC8vZWRn ZVRiRmxhZ3NbIHgg4oiSIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAgICAgICAgLy9l ZGdlVGJGbGFnc1sgeCArIHNiVyBdWyB5IF0gaXMgZXF1YWwgdG8gMQorICAgICAgICAgICAgbWF4 X2xlbl9wID0gbWF4X2xlbl9xID0gMDsKKyAgICAgICAgICAgIGlmIChqID09IDQgfHwgaiA9PSBo ZWlnaHQgLSA0KQorICAgICAgICAgICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7Cisg ICAgICAgICAgICBlbHNlIGlmIChqID09IDggfHwgaiA9PSBoZWlnaHQgLSA4KQorICAgICAgICAg ICAgICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDI7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgbWF4X2xlbl9wID0gbWF4X2xlbl9xID0gMzsKKyAgICAgICAgICAgIFRBQl9N QVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9wLCB4LCB5KSA9IG1heF9sZW5fcDsKKyAgICAgICAg ICAgIFRBQl9NQVhfTEVOKGZjLT50YWIuaG9yaXpvbnRhbF9xLCB4LCB5KSA9IG1heF9sZW5fcTsK KyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0aWMgdm9pZCB2dmNfZGVibG9ja19ic19sdW1h X3ZlcnRpY2FsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsCisgICAgY29uc3QgaW50IHgwLCBj b25zdCBpbnQgeTAsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBj b25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgICAgICA9IGxjLT5mYzsKKyAgICBNdkZpZWxkICp0 YWJfbXZmICAgICAgICAgICA9IGZjLT5yZWYtPnRhYl9tdmY7CisgICAgY29uc3QgaW50IGxvZzJf bWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbG9nMl9taW5fdHVfc2l6 ZSA9IE1JTl9UVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVfd2lkdGggICAgID0gZmMtPnBz LnBwcy0+bWluX3B1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fdHVfd2lkdGggICAgID0gZmMt PnBzLnBwcy0+bWluX3R1X3dpZHRoOworICAgIGNvbnN0IGludCBtaW5fY2JfbG9nMiAgICAgID0g ZmMtPnBzLnNwcy0+bWluX2NiX2xvZzJfc2l6ZV95OworICAgIGNvbnN0IGludCBtaW5fY2Jfd2lk dGggICAgID0gZmMtPnBzLnBwcy0+bWluX2NiX3dpZHRoOworICAgIGludCBpc19pbnRyYSA9IHRh Yl9tdmZbKHkwID4+IGxvZzJfbWluX3B1X3NpemUpICogbWluX3B1X3dpZHRoICsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICh4MCA+PiBsb2cyX21pbl9wdV9zaXplKV0ucHJlZF9mbGFnID09 IFBGX0lOVFJBOworICAgIGludCBib3VuZGFyeV9sZWZ0OworICAgIGludCBpLCBicywgaGFzX3Zl cnRpY2FsX3NiID0gMDsKKyAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOworCisgICAg Y29uc3QgaW50IG9mZl9xICAgICAgICAgICAgPSAoeTAgPj4gbWluX2NiX2xvZzIpICogbWluX2Ni X3dpZHRoICsgKHgwID4+IG1pbl9jYl9sb2cyKTsKKyAgICBjb25zdCBpbnQgY2JfeCAgICAgICAg ICAgICA9IGZjLT50YWIuY2JfcG9zX3hbTFVNQV1bb2ZmX3FdOworICAgIGNvbnN0IGludCBjYl95 ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeVtMVU1BXVtvZmZfcV07CisgICAgY29uc3Qg aW50IGNiX3dpZHRoICAgICAgICAgPSBmYy0+dGFiLmNiX3dpZHRoW0xVTUFdW29mZl9xXTsKKwor ICAgIGlmICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50YWIubXNmW29mZl9xXSB8fCBm Yy0+dGFiLmlhZltvZmZfcV0pCisgICAgICAgICAgICBoYXNfdmVydGljYWxfc2IgICA9IGNiX3dp ZHRoICA+IDg7CisgICAgfQorCisgICAgLy8gYnMgZm9yIHZlcnRpY2FsIFRVIGJvdW5kYXJpZXMK KyAgICBib3VuZGFyeV9sZWZ0ID0geDAgPiAwICYmICEoeDAgJiAzKTsKKyAgICBpZiAoYm91bmRh cnlfbGVmdCAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xp Y2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9V TkRBUllfTEVGVF9TTElDRSAmJgorICAgICAgICAgICAgKHgwICUgKDEgPDwgZmMtPnBzLnNwcy0+ Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkgfHwKKyAgICAgICAgICAgICghZmMtPnBzLnBwcy0+bG9v cF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJv dW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFICYmCisgICAgICAgICAgICAoeDAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5k YXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X2xlZnQpIHsKKyAgICAgICAgY29uc3Qg UmVmUGljTGlzdCAqcnBsX2xlZnQgPSAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVG VF9TTElDRSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZl92dmNfZ2V0X3Jl Zl9saXN0KGZjLCBmYy0+cmVmLCB4MCAtIDEsIHkwKSA6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZjLT5yZWYtPnJlZlBpY0xpc3Q7CisgICAgICAgIGludCB4cF9wdSA9ICh4MCAt IDEpID4+IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cV9wdSA9ICB4MCAgICAgID4+ IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgIGludCB4cF90dSA9ICh4MCAtIDEpID4+IGxvZzJf bWluX3R1X3NpemU7CisgICAgICAgIGludCB4cV90dSA9ICB4MCAgICAgID4+IGxvZzJfbWluX3R1 X3NpemU7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSArPSA0KSB7CisgICAg ICAgICAgICBjb25zdCBpbnQgb2ZmX3ggPSBjYl94IC0geDA7CisgICAgICAgICAgICBpbnQgeV9w dSAgICAgID0gKHkwICsgaSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgICAgIGludCB5 X3R1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXplOworICAgICAgICAgICAgTXZG aWVsZCAqbGVmdCA9ICZ0YWJfbXZmW3lfcHUgKiBtaW5fcHVfd2lkdGggKyB4cF9wdV07CisgICAg ICAgICAgICBNdkZpZWxkICpjdXJyID0gJnRhYl9tdmZbeV9wdSAqIG1pbl9wdV93aWR0aCArIHhx X3B1XTsKKyAgICAgICAgICAgIHVpbnQ4X3QgbGVmdF9jYmZfbHVtYSA9IGZjLT50YWIudHVfY29k ZWRfZmxhZ1tMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsgeHBfdHVdOworICAgICAgICAgICAg dWludDhfdCBjdXJyX2NiZl9sdW1hID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lfdHUg KiBtaW5fdHVfd2lkdGggKyB4cV90dV07CisgICAgICAgICAgICB1aW50OF90IHBjbWYgICAgICAg ICAgPSBmYy0+dGFiLnBjbWZbTFVNQV1beV90dSAqIG1pbl90dV93aWR0aCArIHhwX3R1XSAmJgor ICAgICAgICAgICAgICAgIGZjLT50YWIucGNtZltMVU1BXVt5X3R1ICogbWluX3R1X3dpZHRoICsg eHFfdHVdOworCisgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICBicyA9IDA7 CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwgbGVm dC0+cHJlZF9mbGFnID09IFBGX0lOVFJBIHx8IGN1cnItPmNpaXBfZmxhZyB8fCBsZWZ0LT5jaWlw X2ZsYWcpCisgICAgICAgICAgICAgICAgYnMgPSAyOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vy cl9jYmZfbHVtYSB8fCBsZWZ0X2NiZl9sdW1hKQorICAgICAgICAgICAgICAgIGJzID0gMTsKKyAg ICAgICAgICAgIGVsc2UgaWYgKG9mZl94ICYmICgob2ZmX3ggJSA4KSB8fCAhaGFzX3ZlcnRpY2Fs X3NiKSkKKyAgICAgICAgICAgICAgICBicyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLy9pbnNpZGUgYSBjdSwgbm90IGFsaWduZWQgdG8gOCBvciB3aXRoIG5vIHN1 YmJsb2NrcworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJzID0gYm91bmRhcnlf c3RyZW5ndGgoZmMsIGN1cnIsIGxlZnQsIHJwbF9sZWZ0KTsKKworICAgICAgICAgICAgVEFCX0JT KGZjLT50YWIudmVydGljYWxfYnNbTFVNQV0sIHgwLCAoeTAgKyBpKSkgPSBiczsKKworICAgICAg ICAgICAgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3RoX2x1bWEoZmMsIHgwLCB5MCArIGksIGlzX2lu dHJhLCBoYXNfdmVydGljYWxfc2IsIDEsICZtYXhfbGVuX3AsICZtYXhfbGVuX3EpOworICAgICAg ICAgICAgVEFCX01BWF9MRU4oZmMtPnRhYi52ZXJ0aWNhbF9wLCB4MCwgeTAgKyBpKSA9IG1heF9s ZW5fcDsKKyAgICAgICAgICAgIFRBQl9NQVhfTEVOKGZjLT50YWIudmVydGljYWxfcSwgeDAsIHkw ICsgaSkgPSBtYXhfbGVuX3E7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJh KSB7CisgICAgICAgIGlmIChmYy0+dGFiLm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3Fd KQorICAgICAgICAgICAgdnZjX2RlYmxvY2tfc3ViYmxvY2tfYnNfdmVydGljYWwoZmMsIGNiX3gs IGNiX3ksIHgwLCB5MCwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCit9CitzdGF0aWMgdm9pZCB2 dmNfZGVibG9ja19ic19sdW1hX2hvcml6b250YWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywK KyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp bnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgID0gbGMtPmZjOwor ICAgIE12RmllbGQgKnRhYl9tdmYgICAgICAgICAgID0gZmMtPnJlZi0+dGFiX212ZjsKKyAgICBj b25zdCBpbnQgbG9nMl9taW5fcHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBs b2cyX21pbl90dV9zaXplID0gTUlOX1RVX0xPRzI7CisgICAgY29uc3QgaW50IG1pbl9wdV93aWR0 aCAgICAgPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90dV93 aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fdHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl9j Yl9sb2cyICAgICAgPSBmYy0+cHMuc3BzLT5taW5fY2JfbG9nMl9zaXplX3k7CisgICAgY29uc3Qg aW50IG1pbl9jYl93aWR0aCAgICAgPSBmYy0+cHMucHBzLT5taW5fY2Jfd2lkdGg7CisgICAgaW50 IGlzX2ludHJhID0gdGFiX212ZlsoeTAgPj4gbG9nMl9taW5fcHVfc2l6ZSkgKiBtaW5fcHVfd2lk dGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgwID4+IGxvZzJfbWluX3B1X3NpemUp XS5wcmVkX2ZsYWcgPT0gUEZfSU5UUkE7CisgICAgaW50IGJvdW5kYXJ5X3VwcGVyOworICAgIGlu dCBpLCBicywgaGFzX2hvcml6b250YWxfc2IgPSAwOworICAgIHVpbnQ4X3QgbWF4X2xlbl9wLCBt YXhfbGVuX3E7CisKKyAgICBjb25zdCBpbnQgb2ZmX3EgICAgICAgICAgICA9ICh5MCA+PiBtaW5f Y2JfbG9nMikgKiBtaW5fY2Jfd2lkdGggKyAoeDAgPj4gbWluX2NiX2xvZzIpOworICAgIGNvbnN0 IGludCBjYl94ICAgICAgICAgICAgID0gZmMtPnRhYi5jYl9wb3NfeFtMVU1BXVtvZmZfcV07Cisg ICAgY29uc3QgaW50IGNiX3kgICAgICAgICAgICAgPSBmYy0+dGFiLmNiX3Bvc195W0xVTUFdW29m Zl9xXTsKKyAgICBjb25zdCBpbnQgY2JfaGVpZ2h0ICAgICAgICA9IGZjLT50YWIuY2JfaGVpZ2h0 W0xVTUFdW29mZl9xXTsKKworICAgIGlmICghaXNfaW50cmEpIHsKKyAgICAgICAgaWYgKGZjLT50 YWIubXNmW29mZl9xXSB8fCBmYy0+dGFiLmlhZltvZmZfcV0pCisgICAgICAgICAgICBoYXNfaG9y aXpvbnRhbF9zYiA9IGNiX2hlaWdodCA+IDg7CisgICAgfQorCisgICAgYm91bmRhcnlfdXBwZXIg PSB5MCA+IDAgJiYgISh5MCAmIDMpOworICAgIGlmIChib3VuZGFyeV91cHBlciAmJgorICAgICAg ICAoKCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyAm JgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0Ug JiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkp ID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMtPmxvb3BfZmlsdGVyX2Fjcm9zc190 aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgIGxjLT5ib3VuZGFyeV9mbGFncyAmIEJP VU5EQVJZX1VQUEVSX1RJTEUgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5zcHMt PmN0Yl9sb2cyX3NpemVfeSkpID09IDApKSkKKyAgICAgICAgYm91bmRhcnlfdXBwZXIgPSAwOwor CisgICAgaWYgKGJvdW5kYXJ5X3VwcGVyKSB7CisgICAgICAgIGNvbnN0IFJlZlBpY0xpc3QgKnJw bF90b3AgPSAobGMtPmJvdW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpID8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfdnZjX2dldF9yZWZfbGlzdChmYywgZmMt PnJlZiwgeDAsIHkwIC0gMSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYy0+ cmVmLT5yZWZQaWNMaXN0OworICAgICAgICBpbnQgeXBfcHUgPSAoeTAgLSAxKSA+PiBsb2cyX21p bl9wdV9zaXplOworICAgICAgICBpbnQgeXFfcHUgPSAgeTAgICAgICA+PiBsb2cyX21pbl9wdV9z aXplOworICAgICAgICBpbnQgeXBfdHUgPSAoeTAgLSAxKSA+PiBsb2cyX21pbl90dV9zaXplOwor ICAgICAgICBpbnQgeXFfdHUgPSAgeTAgICAgICA+PiBsb2cyX21pbl90dV9zaXplOworCisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSArPSA0KSB7CisgICAgICAgICAgICBjb25zdCBp bnQgb2ZmX3kgPSB5MCAtIGNiX3k7CisgICAgICAgICAgICBpbnQgeF9wdSA9ICh4MCArIGkpID4+ IGxvZzJfbWluX3B1X3NpemU7CisgICAgICAgICAgICBpbnQgeF90dSA9ICh4MCArIGkpID4+IGxv ZzJfbWluX3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICp0b3AgID0gJnRhYl9tdmZbeXBf cHUgKiBtaW5fcHVfd2lkdGggKyB4X3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAm dGFiX212Zlt5cV9wdSAqIG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgdWludDhf dCB0b3BfY2JmX2x1bWEgID0gZmMtPnRhYi50dV9jb2RlZF9mbGFnW0xVTUFdW3lwX3R1ICogbWlu X3R1X3dpZHRoICsgeF90dV07CisgICAgICAgICAgICB1aW50OF90IGN1cnJfY2JmX2x1bWEgPSBm Yy0+dGFiLnR1X2NvZGVkX2ZsYWdbTFVNQV1beXFfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1XTsK KyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgcGNtZiAgICA9IGZjLT50YWIucGNtZltMVU1BXVt5 cF90dSAqIG1pbl90dV93aWR0aCArIHhfdHVdICYmCisgICAgICAgICAgICAgICAgZmMtPnRhYi5w Y21mW0xVTUFdW3lxX3R1ICogbWluX3R1X3dpZHRoICsgeF90dV07CisKKyAgICAgICAgICAgIGlm IChwY21mKQorICAgICAgICAgICAgICAgIGJzID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1 cnItPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCB0b3AtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8 fCBjdXJyLT5jaWlwX2ZsYWcgfHwgdG9wLT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgYnMg PSAyOworICAgICAgICAgICAgZWxzZSBpZiAoY3Vycl9jYmZfbHVtYSB8fCB0b3BfY2JmX2x1bWEp CisgICAgICAgICAgICAgICAgYnMgPSAxOworICAgICAgICAgICAgZWxzZSBpZiAob2ZmX3kgJiYg KChvZmZfeSAlIDgpIHx8ICFoYXNfaG9yaXpvbnRhbF9zYikpCisgICAgICAgICAgICAgICAgYnMg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2luc2lkZSBhIGN1LCBu b3QgYWxpZ25lZCB0byA4IG9yIHdpdGggbm8gc3ViYmxvY2tzCisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgYnMgPSBib3VuZGFyeV9zdHJlbmd0aChmYywgY3VyciwgdG9wLCBycGxf dG9wKTsKKworICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIuaG9yaXpvbnRhbF9ic1tMVU1BXSwg eDAgKyBpLCB5MCkgPSBiczsKKworICAgICAgICAgICAgZGVyaXZlX21heF9maWx0ZXJfbGVuZ3Ro X2x1bWEoZmMsIHgwICsgaSwgeTAsIGlzX2ludHJhLCBoYXNfaG9yaXpvbnRhbF9zYiwgMCwgJm1h eF9sZW5fcCwgJm1heF9sZW5fcSk7CisgICAgICAgICAgICBUQUJfTUFYX0xFTihmYy0+dGFiLmhv cml6b250YWxfcCwgeDAgKyBpLCB5MCkgPSBtYXhfbGVuX3A7CisgICAgICAgICAgICBUQUJfTUFY X0xFTihmYy0+dGFiLmhvcml6b250YWxfcSwgeDAgKyBpLCB5MCkgPSBtYXhfbGVuX3E7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzX2ludHJhKSB7CisgICAgICAgIGlmIChmYy0+dGFi Lm1zZltvZmZfcV0gfHwgZmMtPnRhYi5pYWZbb2ZmX3FdKQorICAgICAgICAgICAgdnZjX2RlYmxv Y2tfc3ViYmxvY2tfYnNfaG9yaXpvbnRhbChmYywgY2JfeCwgY2JfeSwgeDAsIHkwLCB3aWR0aCwg aGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y19kZWJsb2NrX2JzX2Nocm9tYV92 ZXJ0aWNhbChjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLAorICAgIGNvbnN0IGludCB4MCwgY29u c3QgaW50IHkwLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29u c3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiAg ICAgICAgICAgPSBmYy0+cmVmLT50YWJfbXZmOworICAgIGNvbnN0IGludCBsb2cyX21pbl9wdV9z aXplID0gTUlOX1BVX0xPRzI7CisgICAgY29uc3QgaW50IGxvZzJfbWluX3R1X3NpemUgPSBNSU5f UFVfTE9HMjsKKyAgICBjb25zdCBpbnQgbWluX3B1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMtPm1p bl9wdV93aWR0aDsKKyAgICBjb25zdCBpbnQgbWluX3R1X3dpZHRoICAgICA9IGZjLT5wcy5wcHMt Pm1pbl90dV93aWR0aDsKKyAgICBpbnQgYm91bmRhcnlfbGVmdCwgaTsKKworICAgIC8vIGJzIGZv ciB2ZXJ0aWNhbCBUVSBib3VuZGFyaWVzCisgICAgYm91bmRhcnlfbGVmdCA9IHgwID4gMCAmJiAh KHgwICYgKChDSFJPTUFfR1JJRCA8PCBmYy0+cHMuc3BzLT5oc2hpZnRbMV0pIC0gMSkpOworICAg IGlmIChib3VuZGFyeV9sZWZ0ICYmCisgICAgICAgICgoIWZjLT5wcy5wcHMtPmxvb3BfZmlsdGVy X2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnICYmCisgICAgICAgICAgbGMtPmJvdW5kYXJ5X2Zs YWdzICYgQk9VTkRBUllfTEVGVF9TTElDRSAmJgorICAgICAgICAgICh4MCAlICgxIDw8IGZjLT5w cy5zcHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAoIWZjLT5wcy5wcHMt Pmxvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICBsYy0+ Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9MRUZUX1RJTEUgJiYKKyAgICAgICAgICAoeDAgJSAo MSA8PCBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3kpKSA9PSAwKSkpCisgICAgICAgIGJvdW5k YXJ5X2xlZnQgPSAwOworCisgICAgaWYgKGJvdW5kYXJ5X2xlZnQpIHsKKyAgICAgICAgaW50IHhw X3B1ID0gKHgwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3B1ID0g IHgwICAgICAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHhwX3R1ID0gKHgwIC0g MSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHhxX3R1ID0gIHgwICAgICAgPj4g bG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpICs9 IDIpIHsKKyAgICAgICAgICAgIGludCB5X3B1ICAgICAgPSAoeTAgKyBpKSA+PiBsb2cyX21pbl9w dV9zaXplOworICAgICAgICAgICAgaW50IHlfdHUgICAgICA9ICh5MCArIGkpID4+IGxvZzJfbWlu X3R1X3NpemU7CisgICAgICAgICAgICBNdkZpZWxkICpsZWZ0ID0gJnRhYl9tdmZbeV9wdSAqIG1p bl9wdV93aWR0aCArIHhwX3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212 Zlt5X3B1ICogbWluX3B1X3dpZHRoICsgeHFfcHVdOworICAgICAgICAgICAgY29uc3QgaW50IGxl ZnRfdHUgPSB5X3R1ICogbWluX3R1X3dpZHRoICsgeHBfdHU7CisgICAgICAgICAgICBjb25zdCBp bnQgY3Vycl90dSA9IHlfdHUgKiBtaW5fdHVfd2lkdGggKyB4cV90dTsKKyAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QgcGNtZiA9IGZjLT50YWIucGNtZltDSFJPTUFdW2xlZnRfdHVdICYmIGZjLT50 YWIucGNtZltDSFJPTUFdW2N1cnJfdHVdOworCisgICAgICAgICAgICBmb3IgKGludCBjID0gQ0I7 IGMgPD0gQ1I7IGMrKykgeworICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2JmICA9IGZjLT50YWIu dHVfY29kZWRfZmxhZ1tjXVtsZWZ0X3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIu dHVfY29kZWRfZmxhZ1tjXVtjdXJyX3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIu dHVfam9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFnW2xlZnRfdHVdIHwKKyAgICAgICAgICAgICAgICAg ICAgZmMtPnRhYi50dV9qb2ludF9jYmNyX3Jlc2lkdWFsX2ZsYWdbY3Vycl90dV07CisgICAgICAg ICAgICAgICAgaW50IGJzID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChwY21mKQorICAgICAg ICAgICAgICAgICAgICBicyA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+cHJl ZF9mbGFnID09IFBGX0lOVFJBIHx8IGxlZnQtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJy LT5jaWlwX2ZsYWcgfHwgbGVmdC0+Y2lpcF9mbGFnKQorICAgICAgICAgICAgICAgICAgICBicyA9 IDI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2JmKQorICAgICAgICAgICAgICAgICAgICBi cyA9IDE7CisgICAgICAgICAgICAgICAgVEFCX0JTKGZjLT50YWIudmVydGljYWxfYnNbY10sIHgw LCAoeTAgKyBpKSkgPSBiczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor c3RhdGljIHZvaWQgdnZjX2RlYmxvY2tfYnNfY2hyb21hX2hvcml6b250YWwoY29uc3QgVlZDTG9j YWxDb250ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50 IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAq ZmMgPSBsYy0+ZmM7CisgICAgTXZGaWVsZCAqdGFiX212ZiA9IGZjLT5yZWYtPnRhYl9tdmY7Cisg ICAgY29uc3QgaW50IGxvZzJfbWluX3B1X3NpemUgPSBNSU5fUFVfTE9HMjsKKyAgICBjb25zdCBp bnQgbG9nMl9taW5fdHVfc2l6ZSA9IE1JTl9QVV9MT0cyOworICAgIGNvbnN0IGludCBtaW5fcHVf d2lkdGggPSBmYy0+cHMucHBzLT5taW5fcHVfd2lkdGg7CisgICAgY29uc3QgaW50IG1pbl90dV93 aWR0aCA9IGZjLT5wcy5wcHMtPm1pbl90dV93aWR0aDsKKyAgICBpbnQgYm91bmRhcnlfdXBwZXI7 CisgICAgaW50IGk7CisKKyAgICBib3VuZGFyeV91cHBlciA9IHkwID4gMCAmJiAhKHkwICYgKChD SFJPTUFfR1JJRCA8PCBmYy0+cHMuc3BzLT52c2hpZnRbMV0pIC0gMSkpOworICAgIGlmIChib3Vu ZGFyeV91cHBlciAmJgorICAgICAgICAoKCFmYy0+cHMucHBzLT5sb29wX2ZpbHRlcl9hY3Jvc3Nf c2xpY2VzX2VuYWJsZWRfZmxhZyAmJgorICAgICAgICAgICAgbGMtPmJvdW5kYXJ5X2ZsYWdzICYg Qk9VTkRBUllfVVBQRVJfU0xJQ0UgJiYKKyAgICAgICAgICAgICh5MCAlICgxIDw8IGZjLT5wcy5z cHMtPmN0Yl9sb2cyX3NpemVfeSkpID09IDApIHx8CisgICAgICAgICAgICAoIWZjLT5wcy5wcHMt Pmxvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgJiYKKyAgICAgICAgICAgICAg ICBsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxFICYmCisgICAgICAgICAg ICAgICAgKHkwICUgKDEgPDwgZmMtPnBzLnNwcy0+Y3RiX2xvZzJfc2l6ZV95KSkgPT0gMCkpKQor ICAgICAgICBib3VuZGFyeV91cHBlciA9IDA7CisKKyAgICBpZiAoYm91bmRhcnlfdXBwZXIpIHsK KyAgICAgICAgaW50IHlwX3B1ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAg ICAgaW50IHlxX3B1ID0geTAgPj4gbG9nMl9taW5fcHVfc2l6ZTsKKyAgICAgICAgaW50IHlwX3R1 ID0gKHkwIC0gMSkgPj4gbG9nMl9taW5fdHVfc2l6ZTsKKyAgICAgICAgaW50IHlxX3R1ID0geTAg Pj4gbG9nMl9taW5fdHVfc2l6ZTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkg Kz0gMikgeworICAgICAgICAgICAgaW50IHhfcHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl9wdV9z aXplOworICAgICAgICAgICAgaW50IHhfdHUgPSAoeDAgKyBpKSA+PiBsb2cyX21pbl90dV9zaXpl OworICAgICAgICAgICAgTXZGaWVsZCAqdG9wID0gJnRhYl9tdmZbeXBfcHUgKiBtaW5fcHVfd2lk dGggKyB4X3B1XTsKKyAgICAgICAgICAgIE12RmllbGQgKmN1cnIgPSAmdGFiX212Zlt5cV9wdSAq IG1pbl9wdV93aWR0aCArIHhfcHVdOworICAgICAgICAgICAgY29uc3QgaW50IHRvcF90dSA9IHlw X3R1ICogbWluX3R1X3dpZHRoICsgeF90dTsKKyAgICAgICAgICAgIGNvbnN0IGludCBjdXJyX3R1 ID0geXFfdHUgKiBtaW5fdHVfd2lkdGggKyB4X3R1OworICAgICAgICAgICAgY29uc3QgdWludDhf dCBwY21mID0gZmMtPnRhYi5wY21mW0NIUk9NQV1bdG9wX3R1XSAmJiBmYy0+dGFiLnBjbWZbQ0hS T01BXVtjdXJyX3R1XTsKKworICAgICAgICAgICAgZm9yIChpbnQgYyA9IENCOyBjIDw9IENSOyBj KyspIHsKKyAgICAgICAgICAgICAgICB1aW50OF90IGNiZiA9IGZjLT50YWIudHVfY29kZWRfZmxh Z1tjXVt0b3BfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9jb2RlZF9mbGFn W2NdW2N1cnJfdHVdIHwKKyAgICAgICAgICAgICAgICAgICAgZmMtPnRhYi50dV9qb2ludF9jYmNy X3Jlc2lkdWFsX2ZsYWdbdG9wX3R1XSB8CisgICAgICAgICAgICAgICAgICAgIGZjLT50YWIudHVf am9pbnRfY2Jjcl9yZXNpZHVhbF9mbGFnW2N1cnJfdHVdOworICAgICAgICAgICAgICAgIGludCBi cyA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAocGNtZikKKyAgICAgICAgICAgICAgICAgICAg YnMgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPnByZWRfZmxhZyA9PSBQRl9J TlRSQSB8fCB0b3AtPnByZWRfZmxhZyA9PSBQRl9JTlRSQSB8fCBjdXJyLT5jaWlwX2ZsYWcgfHwg dG9wLT5jaWlwX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMjsKKyAgICAgICAgICAg ICAgICBlbHNlIGlmIChjYmYpCisgICAgICAgICAgICAgICAgICAgIGJzID0gMTsKKyAgICAgICAg ICAgICAgICBUQUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW2NdLCB4MCArIGksIHkwKSA9IGJz OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit0eXBlZGVmIHZvaWQgKCpk ZWJsb2NrX2JzX2ZuKShjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNv bnN0IGludCB5MCwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpOworCitz dGF0aWMgdm9pZCB2dmNfZGVibG9ja19icyhjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25z dCBpbnQgeDAsIGNvbnN0IGludCB5MCwgY29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGNvbnN0 IFZWQ0ZyYW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9 IGZjLT5wcy5zcHM7CisgICAgY29uc3QgVlZDUFBTICpwcHMgICA9IGZjLT5wcy5wcHM7CisgICAg Y29uc3QgaW50IGN0Yl9zaXplICA9IHNwcy0+Y3RiX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeF9l bmQgICAgID0gRkZNSU4oeDAgKyBjdGJfc2l6ZSwgcHBzLT53aWR0aCkgPj4gTUlOX1RVX0xPRzI7 CisgICAgY29uc3QgaW50IHlfZW5kICAgICA9IEZGTUlOKHkwICsgY3RiX3NpemUsIHBwcy0+aGVp Z2h0KSA+PiBNSU5fVFVfTE9HMjsKKyAgICBkZWJsb2NrX2JzX2ZuIGRlYmxvY2tfYnNbMl1bMl0g PSB7CisgICAgICAgIHsgdnZjX2RlYmxvY2tfYnNfbHVtYV9ob3Jpem9udGFsLCB2dmNfZGVibG9j a19ic19jaHJvbWFfaG9yaXpvbnRhbCB9LAorICAgICAgICB7IHZ2Y19kZWJsb2NrX2JzX2x1bWFf dmVydGljYWwsICAgdnZjX2RlYmxvY2tfYnNfY2hyb21hX3ZlcnRpY2FsICAgfQorICAgIH07CisK KyAgICBmb3IgKGludCBpc19jaHJvbWEgPSAwOyBpc19jaHJvbWEgPD0gMTsgaXNfY2hyb21hKysp IHsKKyAgICAgICAgY29uc3QgaW50IGhzID0gc3BzLT5oc2hpZnRbaXNfY2hyb21hXTsKKyAgICAg ICAgY29uc3QgaW50IHZzID0gc3BzLT52c2hpZnRbaXNfY2hyb21hXTsKKyAgICAgICAgZm9yIChp bnQgeSA9IHkwID4+IE1JTl9UVV9MT0cyOyB5IDwgeV9lbmQ7IHkrKykgeworICAgICAgICAgICAg Zm9yIChpbnQgeCA9IHgwID4+IE1JTl9UVV9MT0cyOyB4IDwgeF9lbmQ7IHgrKykgeworICAgICAg ICAgICAgICAgIGNvbnN0IGludCBvZmYgPSB5ICogZmMtPnBzLnBwcy0+bWluX3R1X3dpZHRoICsg eDsKKyAgICAgICAgICAgICAgICBpZiAoKGZjLT50YWIudGJfcG9zX3gwW2lzX2Nocm9tYV1bb2Zm XSA+PiBNSU5fVFVfTE9HMikgPT0geCAmJiAoZmMtPnRhYi50Yl9wb3NfeTBbaXNfY2hyb21hXVtv ZmZdID4+IE1JTl9UVV9MT0cyKSA9PSB5KSB7CisgICAgICAgICAgICAgICAgICAgIGRlYmxvY2tf YnNbdmVydGljYWxdW2lzX2Nocm9tYV0obGMsIHggPDwgTUlOX1RVX0xPRzIsIHkgPDwgTUlOX1RV X0xPRzIsCisgICAgICAgICAgICAgICAgICAgICAgICBmYy0+dGFiLnRiX3dpZHRoW2lzX2Nocm9t YV1bb2ZmXSA8PCBocywgZmMtPnRhYi50Yl9oZWlnaHRbaXNfY2hyb21hXVtvZmZdIDw8IHZzKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK Ky8vcGFydCBvZiA4LjguMy4zIERlcml2YXRpb24gcHJvY2VzcyBvZiB0cmFuc2Zvcm0gYmxvY2sg Ym91bmRhcnkKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVuZ3RoX2x1bWEoY29uc3QgVlZDRnJh bWVDb250ZXh0ICpmYywgY29uc3QgaW50IHF4LCBjb25zdCBpbnQgcXksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ZXJ0aWNhbCwgdWludDhfdCAqbWF4X2xl bl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgdWludDhfdCAqdGFiX2xlbl9w ID0gdmVydGljYWwgPyBmYy0+dGFiLnZlcnRpY2FsX3AgOiBmYy0+dGFiLmhvcml6b250YWxfcDsK KyAgICBjb25zdCB1aW50OF90ICp0YWJfbGVuX3EgPSB2ZXJ0aWNhbCA/IGZjLT50YWIudmVydGlj YWxfcSA6IGZjLT50YWIuaG9yaXpvbnRhbF9xOworICAgICptYXhfbGVuX3AgPSBUQUJfTUFYX0xF Tih0YWJfbGVuX3AsIHF4LCBxeSk7CisgICAgKm1heF9sZW5fcSA9IFRBQl9NQVhfTEVOKHRhYl9s ZW5fcSwgcXgsIHF5KTsKK30KKworLy9wYXJ0IG9mIDguOC4zLjMgRGVyaXZhdGlvbiBwcm9jZXNz IG9mIHRyYW5zZm9ybSBibG9jayBib3VuZGFyeQorc3RhdGljIHZvaWQgbWF4X2ZpbHRlcl9sZW5n dGhfY2hyb21hKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3Qg aW50IHF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2 ZXJ0aWNhbCwgY29uc3QgaW50IGhvcml6b250YWxfY3R1X2VkZ2UsIGNvbnN0IGludCBicywgdWlu dDhfdCAqbWF4X2xlbl9wLCB1aW50OF90ICptYXhfbGVuX3EpCit7CisgICAgY29uc3QgaW50IHB4 ID0gIHZlcnRpY2FsID8gcXggLSAxIDogcXg7CisgICAgY29uc3QgaW50IHB5ID0gIXZlcnRpY2Fs ID8gcXkgLSAxIDogcXk7CisgICAgY29uc3QgdWludDhfdCAqdGJfc2l6ZSA9IHZlcnRpY2FsID8g ZmMtPnRhYi50Yl93aWR0aFtDSFJPTUFdIDogZmMtPnRhYi50Yl9oZWlnaHRbQ0hST01BXTsKKwor ICAgIGNvbnN0IGludCBzaXplX3AgPSB0Yl9zaXplWyhweSA+PiBNSU5fVFVfTE9HMikgKiBmYy0+ cHMucHBzLT5taW5fdHVfd2lkdGggKyAocHggPj4gTUlOX1RVX0xPRzIpXTsKKyAgICBjb25zdCBp bnQgc2l6ZV9xID0gdGJfc2l6ZVsocXkgPj4gTUlOX1RVX0xPRzIpICogZmMtPnBzLnBwcy0+bWlu X3R1X3dpZHRoICsgKHF4ID4+IE1JTl9UVV9MT0cyKV07CisgICAgaWYgKHNpemVfcCA+PSA4ICYm IHNpemVfcSA+PSA4KSB7CisgICAgICAgICptYXhfbGVuX3AgPSAqbWF4X2xlbl9xID0gMzsKKyAg ICAgICAgaWYgKGhvcml6b250YWxfY3R1X2VkZ2UpCisgICAgICAgICAgICAqbWF4X2xlbl9wID0g MTsKKyAgICB9IGVsc2UgeworICAgICAgICAvL3BhcnQgb2YgOC44LjMuNi40IERlY2lzaW9uIHBy b2Nlc3MgZm9yIGNocm9tYSBibG9jayBlZGdlcworICAgICAgICAqbWF4X2xlbl9wID0gKm1heF9s ZW5fcSA9IChicyA9PSAyKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1heF9maWx0ZXJfbGVu Z3RoKGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBxeCwgY29uc3QgaW50IHF5 LAorICAgIGNvbnN0IGludCBjX2lkeCwgY29uc3QgaW50IHZlcnRpY2FsLCBjb25zdCBpbnQgaG9y aXpvbnRhbF9jdHVfZWRnZSwgY29uc3QgaW50IGJzLCB1aW50OF90ICptYXhfbGVuX3AsIHVpbnQ4 X3QgKm1heF9sZW5fcSkKK3sKKyAgICBpZiAoIWNfaWR4KQorICAgICAgICBtYXhfZmlsdGVyX2xl bmd0aF9sdW1hKGZjLCBxeCwgcXksIHZlcnRpY2FsLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7Cisg ICAgZWxzZQorICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aF9jaHJvbWEoZmMsIHF4LCBxeSwgdmVy dGljYWwsIGhvcml6b250YWxfY3R1X2VkZ2UsIGJzLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7Cit9 CisKKyNkZWZpbmUgVENfQ0FMQyhxcCwgYnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Y3RhYmxlW2F2X2NsaXAoKHFwKSArIERFRkFVTFRf SU5UUkFfVENfT0ZGU0VUICogKChicykgLSAxKSArICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAgKHRjX29mZnNldCAmIC0yKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgICAgICAgICAgMCwgTUFYX1FQICsgREVGQVVMVF9JTlRSQV9UQ19PRkZTRVQp XQorCisvLyBwYXJ0IG9mIDguOC4zLjYuMiBEZWNpc2lvbiBwcm9jZXNzIGZvciBsdW1hIGJsb2Nr IGVkZ2VzCitzdGF0aWMgaW50IGdldF9xcF95KGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNv bnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5LCBjb25zdCBpbnQgdmVy dGljYWwpCit7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29u c3QgaW50IHFwICAgICAgICA9IChmZl92dmNfZ2V0X3FQeShmYywgeCAtIHZlcnRpY2FsLCB5IC0g IXZlcnRpY2FsKSArIGZmX3Z2Y19nZXRfcVB5KGZjLCB4LCB5KSArIDEpID4+IDE7CisgICAgaW50 IHFwX29mZnNldCAgICAgICA9IDA7CisgICAgaW50IGxldmVsOworCisgICAgaWYgKCFzcHMtPmxh ZGZfZW5hYmxlZF9mbGFnKQorICAgICAgICByZXR1cm4gcXA7CisKKyAgICBsZXZlbCA9IGZjLT52 dmNkc3AubGYubGFkZl9sZXZlbFt2ZXJ0aWNhbF0oc3JjLCBmYy0+ZnJhbWUtPmxpbmVzaXplW0xV TUFdKTsKKyAgICBxcF9vZmZzZXQgPSBzcHMtPmxhZGZfbG93ZXN0X2ludGVydmFsX3FwX29mZnNl dDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwcy0+bnVtX2xhZGZfaW50ZXJ2YWxzIC0gMSAm JiBsZXZlbCA+IHNwcy0+bGFkZl9pbnRlcnZhbF9sb3dlcl9ib3VuZFtpICsgMV07IGkrKykKKyAg ICAgICAgcXBfb2Zmc2V0ID0gc3BzLT5sYWRmX3FwX29mZnNldFtpXTsKKworICAgIHJldHVybiBx cCArIHFwX29mZnNldDsKK30KKworLy8gcGFydCBvZiA4LjguMy42LjIgRGVjaXNpb24gcHJvY2Vz cyBmb3IgbHVtYSBibG9jayBlZGdlcworc3RhdGljIGludCBnZXRfcXBfYyhjb25zdCBWVkNGcmFt ZUNvbnRleHQgKmZjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHksIGNvbnN0IGludCBjX2lkeCwg Y29uc3QgaW50IHZlcnRpY2FsKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMu c3BzOworICAgIHJldHVybiAoZ2V0X3FQYyhmYywgeCAtIHZlcnRpY2FsLCB5IC0gIXZlcnRpY2Fs LCBjX2lkeCkgKyBnZXRfcVBjKGZjLCB4LCB5LCBjX2lkeCkgLSAyICogc3BzLT5xcF9iZF9vZmZz ZXQgKyAxKSA+PiAxOworfQorCitzdGF0aWMgaW50IGdldF9xcChjb25zdCBWVkNGcmFtZUNvbnRl eHQgKmZjLCBjb25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCB4LCBjb25zdCBpbnQgeSwgY29u c3QgaW50IGNfaWR4LCBjb25zdCBpbnQgdmVydGljYWwpCit7CisgICAgaWYgKCFjX2lkeCkKKyAg ICAgICAgcmV0dXJuIGdldF9xcF95KGZjLCBzcmMsIHgsIHksIHZlcnRpY2FsKTsKKyAgICByZXR1 cm4gZ2V0X3FwX2MoZmMsIHgsIHksIGNfaWR4LCB2ZXJ0aWNhbCk7Cit9CisKK3ZvaWQgZmZfdnZj X2RlYmxvY2tfdmVydGljYWwoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgwLCBpbnQg eTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0ICpmYyA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNT UFMgKnNwcyAgID0gZmMtPnBzLnNwczsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgID0gZmMtPnBz LnNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMgPyBWVkNfTUFYX1NBTVBMRV9BUlJBWVMgOiAxOworICAg IHVpbnQ4X3QgKnNyYzsKKyAgICBpbnQgeCwgeSwgYmV0YSwgdGMsIHFwOworICAgIHVpbnQ4X3Qg bm9fcCA9IDA7CisgICAgdWludDhfdCBub19xID0gMDsKKworICAgIGludCBjdGJfbG9nMl9zaXpl X3kgPSBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgaW50IHhfZW5kLCB5X2VuZDsK KyAgICBpbnQgY3RiX3NpemUgPSAxIDw8IGN0Yl9sb2cyX3NpemVfeTsKKyAgICBpbnQgY3RiID0g KHgwID4+IGN0Yl9sb2cyX3NpemVfeSkgKworICAgICAgICAoeTAgPj4gY3RiX2xvZzJfc2l6ZV95 KSAqIGZjLT5wcy5wcHMtPmN0Yl93aWR0aDsKKyAgICBEQlBhcmFtcyAgKnBhcmFtcyA9IGZjLT50 YWIuZGVibG9jayArIGN0YjsKKworICAgIHZ2Y19kZWJsb2NrX2JzKGxjLCB4MCwgeTAsIDEpOwor CisgICAgeF9lbmQgPSB4MCArIGN0Yl9zaXplOworICAgIGlmICh4X2VuZCA+IGZjLT5wcy5zcHMt PndpZHRoKQorICAgICAgICB4X2VuZCA9IGZjLT5wcy5zcHMtPndpZHRoOworICAgIHlfZW5kID0g eTAgKyBjdGJfc2l6ZTsKKyAgICBpZiAoeV9lbmQgPiBmYy0+cHMuc3BzLT5oZWlnaHQpCisgICAg ICAgIHlfZW5kID0gZmMtPnBzLnNwcy0+aGVpZ2h0OworCisgICAgZm9yIChpbnQgY19pZHggPSAw OyBjX2lkeCA8IGNfZW5kOyBjX2lkeCsrKSB7CisgICAgICAgIGNvbnN0IGludCBocyAgICAgICAg ICAgID0gc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAgICBjb25zdCBpbnQgdnMgICAgICAgICAg ICA9IHNwcy0+dnNoaWZ0W2NfaWR4XTsKKyAgICAgICAgY29uc3QgaW50IGdyaWQgICAgICAgICAg PSBjX2lkeCA/IChDSFJPTUFfR1JJRCA8PCBocykgOiBMVU1BX0dSSUQ7CisgICAgICAgIGNvbnN0 IGludCB0Y19vZmZzZXQgICAgID0gcGFyYW1zLT50Y19vZmZzZXRbY19pZHhdOworICAgICAgICBj b25zdCBpbnQgYmV0YV9vZmZzZXQgICA9IHBhcmFtcy0+YmV0YV9vZmZzZXRbY19pZHhdOworCisg ICAgICAgIGZvciAoeSA9IHkwOyB5IDwgeV9lbmQ7IHkgKz0gREVCTE9DS19TVEVQKSB7CisgICAg ICAgICAgICBmb3IgKHggPSB4MCA/IHgwIDogZ3JpZDsgeCA8IHhfZW5kOyB4ICs9IGdyaWQpIHsK KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgYnMgPSBUQUJfQlMoZmMtPnRhYi52ZXJ0aWNhbF9i c1tjX2lkeF0sIHgsIHkpOworICAgICAgICAgICAgICAgIGlmIChicykgeworICAgICAgICAgICAg ICAgICAgICB1aW50OF90IG1heF9sZW5fcCwgbWF4X2xlbl9xOworCisgICAgICAgICAgICAgICAg ICAgIHNyYyA9ICZmYy0+ZnJhbWUtPmRhdGFbY19pZHhdWyh5ID4+IHZzKSAqIGZjLT5mcmFtZS0+ bGluZXNpemVbY19pZHhdICsgKCh4ID4+IGhzKSA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCld OworICAgICAgICAgICAgICAgICAgICBxcCA9IGdldF9xcChmYywgc3JjLCB4LCB5LCBjX2lkeCwg MSk7CisKKyAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGF0YWJsZVthdl9jbGlwKHFwICsg YmV0YV9vZmZzZXQsIDAsIE1BWF9RUCldOworCisgICAgICAgICAgICAgICAgICAgIHRjID0gVENf Q0FMQyhxcCwgYnMpOworCisgICAgICAgICAgICAgICAgICAgIG1heF9maWx0ZXJfbGVuZ3RoKGZj LCB4LCB5LCBjX2lkeCwgMSwgMCwgYnMsICZtYXhfbGVuX3AsICZtYXhfbGVuX3EpOworCisgICAg ICAgICAgICAgICAgICAgIGlmICghY19pZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZj LT52dmNkc3AubGYuZmlsdGVyX2x1bWFbMV0oc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLCBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgbWF4 X2xlbl9wLCBtYXhfbGVuX3EsIDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAgICAgZmMtPnZ2Y2RzcC5sZi5maWx0ZXJfY2hyb21hWzFdKHNyYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XSwg YmV0YSwgdGMsIG5vX3AsIG5vX3EsIHZzLCBtYXhfbGVuX3AsIG1heF9sZW5fcSk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9Cit9CisKK3ZvaWQgZmZfdnZjX2RlYmxvY2tfaG9yaXpvbnRhbChjb25zdCBWVkNM b2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCkKK3sKKyAgICBWVkNGcmFtZUNvbnRleHQg KmZjID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgPSBmYy0+cHMuc3BzOworICAg IGNvbnN0IGludCBjX2VuZCAgICAgPSBmYy0+cHMuc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA/IFZW Q19NQVhfU0FNUExFX0FSUkFZUyA6IDE7CisgICAgdWludDhfdCogc3JjOworICAgIGludCB4LCB5 LCBiZXRhLCB0YywgcXA7CisgICAgdWludDhfdCBub19wID0gMDsKKyAgICB1aW50OF90IG5vX3Eg PSAwOworCisgICAgaW50IGN0Yl9sb2cyX3NpemVfeSA9IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3Np emVfeTsKKyAgICBpbnQgeF9lbmQsIHhfZW5kMiwgeV9lbmQ7CisgICAgaW50IGN0Yl9zaXplID0g MSA8PCBjdGJfbG9nMl9zaXplX3k7CisgICAgaW50IGN0YiA9ICh4MCA+PiBjdGJfbG9nMl9zaXpl X3kpICsKKyAgICAgICAgKHkwID4+IGN0Yl9sb2cyX3NpemVfeSkgKiBmYy0+cHMucHBzLT5jdGJf d2lkdGg7CisgICAgaW50IHRjX29mZnNldCwgYmV0YV9vZmZzZXQ7CisKKyAgICB2dmNfZGVibG9j a19icyhsYywgeDAsIHkwLCAwKTsKKworICAgIHhfZW5kID0geDAgKyBjdGJfc2l6ZTsKKyAgICBp ZiAoeF9lbmQgPiBmYy0+cHMuc3BzLT53aWR0aCkKKyAgICAgICAgeF9lbmQgPSBmYy0+cHMuc3Bz LT53aWR0aDsKKyAgICB5X2VuZCA9IHkwICsgY3RiX3NpemU7CisgICAgaWYgKHlfZW5kID4gZmMt PnBzLnNwcy0+aGVpZ2h0KQorICAgICAgICB5X2VuZCA9IGZjLT5wcy5zcHMtPmhlaWdodDsKKwor ICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgeworICAgICAg ICBjb25zdCBpbnQgaHMgICAgICAgICAgICA9IHNwcy0+aHNoaWZ0W2NfaWR4XTsKKyAgICAgICAg Y29uc3QgaW50IHZzICAgICAgICAgICAgPSBzcHMtPnZzaGlmdFtjX2lkeF07CisgICAgICAgIGNv bnN0IGludCBncmlkICAgICAgICAgID0gY19pZHggPyAoQ0hST01BX0dSSUQgPDwgdnMpIDogTFVN QV9HUklEOworCisgICAgICAgIHhfZW5kMiA9IHhfZW5kID09IGZjLT5wcy5zcHMtPndpZHRoID8g eF9lbmQgOiB4X2VuZCAtIChNQVhfRklMVEVSX0xFTiA8PCBocyk7CisKKyAgICAgICAgZm9yICh5 ID0geTA7IHkgPCB5X2VuZDsgeSArPSBncmlkKSB7CisgICAgICAgICAgICBpZiAoIXkpCisgICAg ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIGhvcml6b250YWwgZmlsdGVy aW5nIGx1bWEKKyAgICAgICAgICAgIGZvciAoeCA9IHgwID8geDAgLSAoTUFYX0ZJTFRFUl9MRU4g PDwgaHMpIDogMDsgeCA8IHhfZW5kMjsgeCArPSBERUJMT0NLX1NURVApIHsKKyAgICAgICAgICAg ICAgICBjb25zdCBpbnQgYnMgPSBUQUJfQlMoZmMtPnRhYi5ob3Jpem9udGFsX2JzW2NfaWR4XSwg eCwgeSk7CisgICAgICAgICAgICAgICAgaWYgKGJzKSB7CisgICAgICAgICAgICAgICAgICAgIGNv bnN0IERCUGFyYW1zICAqcGFyYW1zID0gZmMtPnRhYi5kZWJsb2NrICsgY3RiIC0gKHggPCB4MCk7 CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBob3Jpem9udGFsX2N0dV9lZGdlID0gISh5 ICUgZmMtPnBzLnNwcy0+Y3RiX3NpemVfeSk7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg bWF4X2xlbl9wLCBtYXhfbGVuX3E7CisKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gJmZjLT5m cmFtZS0+ZGF0YVtjX2lkeF1bKHkgPj4gdnMpICogZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF0g KyAoKHggPj4gaHMpIDw8IGZjLT5wcy5zcHMtPnBpeGVsX3NoaWZ0KV07CisgICAgICAgICAgICAg ICAgICAgIHFwID0gZ2V0X3FwKGZjLCBzcmMsIHgsIHksIGNfaWR4LCAwKTsKKworICAgICAgICAg ICAgICAgICAgICB0Y19vZmZzZXQgPSBwYXJhbXMtPnRjX29mZnNldFtjX2lkeF07CisgICAgICAg ICAgICAgICAgICAgIGJldGFfb2Zmc2V0ID0gcGFyYW1zLT5iZXRhX29mZnNldFtjX2lkeF07CisK KyAgICAgICAgICAgICAgICAgICAgYmV0YSA9IGJldGF0YWJsZVthdl9jbGlwKHFwICsgYmV0YV9v ZmZzZXQsIDAsIE1BWF9RUCldOworICAgICAgICAgICAgICAgICAgICB0YyA9IFRDX0NBTEMocXAs IGJzKTsKKworICAgICAgICAgICAgICAgICAgICBtYXhfZmlsdGVyX2xlbmd0aChmYywgeCwgeSwg Y19pZHgsIDAsIGhvcml6b250YWxfY3R1X2VkZ2UsIGJzLCAmbWF4X2xlbl9wLCAmbWF4X2xlbl9x KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWNfaWR4KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBmYy0+dnZjZHNwLmxmLmZpbHRlcl9sdW1hWzBdKHNyYywgZmMtPmZyYW1lLT5saW5l c2l6ZVtjX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0YSwgdGMsIG5vX3As IG5vX3EsIG1heF9sZW5fcCwgbWF4X2xlbl9xLCBob3Jpem9udGFsX2N0dV9lZGdlKTsKKyAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjLT52dmNk c3AubGYuZmlsdGVyX2Nocm9tYVswXShzcmMsIGZjLT5mcmFtZS0+bGluZXNpemVbY19pZHhdLCBi ZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjLCBub19wLCBub19xLCBocywgbWF4 X2xlbl9wLCBtYXhfbGVuX3EpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBh bGZfY29weV9ib3JkZXIodWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29u c3QgaW50IHBpeGVsX3NoaWZ0LCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0 cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSkKK3sKKyAgICB3 aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkr KykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IGRz dF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRlOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgYWxmX2V4dGVuZF92ZXJ0KHVpbnQ4X3QgKl9kc3QsIGNvbnN0IHVpbnQ4X3QgKl9zcmMs CisgICAgY29uc3QgaW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQsIHB0cmRpZmZfdCBzdHJpZGUpCit7CisgICAgaWYgKHBpeGVsX3NoaWZ0ID09IDApIHsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICAgICAg bWVtc2V0KF9kc3QsICpfc3JjLCB3aWR0aCk7CisgICAgICAgICAgICBfc3JjICs9IHN0cmlkZTsK KyAgICAgICAgICAgIF9kc3QgKz0gc3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg ICAgICAgY29uc3QgdWludDE2X3QgKnNyYyA9IChjb25zdCB1aW50MTZfdCAqKV9zcmM7CisgICAg ICAgIHVpbnQxNl90ICpkc3QgPSAodWludDE2X3QgKilfZHN0OworICAgICAgICBzdHJpZGUgPj49 IHBpeGVsX3NoaWZ0OworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKysp IHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lkdGg7IGorKykKKyAgICAgICAg ICAgICAgICBkc3Rbal0gPSAqc3JjOworICAgICAgICAgICAgc3JjICs9IHN0cmlkZTsKKyAgICAg ICAgICAgIGRzdCArPSBzdHJpZGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9leHRlbmRfaG9yeih1aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBj b25zdCBpbnQgcGl4ZWxfc2hpZnQsIGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwgY29uc3Qg cHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICB3aWR0aCA8PD0gcGl4ZWxfc2hpZnQ7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMs IHdpZHRoKTsKKyAgICAgICAgZHN0ICs9IHN0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IGFsZl9jb3B5X2N0Yl90b19odihWVkNGcmFtZUNvbnRleHQgKmZjLCBjb25zdCB1aW50OF90ICpz cmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB4LCBjb25zdCBp bnQgeSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgeF9jdGIs IGNvbnN0IGludCB5X2N0YiwgY29uc3QgaW50IGNfaWR4KQoreworICAgIGNvbnN0IGludCBwcyAg ICAgICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IHcgICAg ICAgICAgICAgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhd OworICAgIGNvbnN0IGludCBoICAgICAgICAgICAgID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZj LT5wcy5zcHMtPnZzaGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJvcmRlcl9waXhlbHMgPSAo Y19pZHggPT0gMCkgPyBBTEZfQk9SREVSX0xVTUEgOiBBTEZfQk9SREVSX0NIUk9NQTsKKyAgICBj b25zdCBpbnQgb2Zmc2V0X2hbXSAgICA9IHsgMCwgaGVpZ2h0IC0gYm9yZGVyX3BpeGVscyB9Owor ICAgIGNvbnN0IGludCBvZmZzZXRfdltdICAgID0geyAwLCB3aWR0aCAgLSBib3JkZXJfcGl4ZWxz IH07CisKKyAgICAvKiBjb3B5IGhvcml6b250YWwgZWRnZXMgKi8KKyAgICBmb3IgKGludCBpID0g MDsgaSA8IEZGX0FSUkFZX0VMRU1TKG9mZnNldF9oKTsgaSsrKSB7CisgICAgICAgIGFsZl9jb3B5 X2JvcmRlcihmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfaFtjX2lkeF1baV0gKyAoKGJvcmRlcl9w aXhlbHMgKiB5X2N0YiAqIHcgKyB4KTw8IHBzKSwKKyAgICAgICAgICAgIHNyYyArIG9mZnNldF9o W2ldICogc3JjX3N0cmlkZSwgcHMsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCB3IDw8IHBzLCBzcmNf c3RyaWRlKTsKKyAgICB9CisgICAgLyogY29weSB2ZXJ0aWNhbCBlZGdlcyAqLworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMob2Zmc2V0X3YpOyBpKyspIHsKKyAgICAgICAg YWxmX2NvcHlfYm9yZGVyKGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl92W2NfaWR4XVtpXSArICgo aCAqIHhfY3RiICsgeSkgKiAoYm9yZGVyX3BpeGVscyA8PCBwcykpLAorICAgICAgICAgICAgc3Jj ICsgKG9mZnNldF92W2ldIDw8IHBzKSwgcHMsIGJvcmRlcl9waXhlbHMsIGhlaWdodCwgYm9yZGVy X3BpeGVscyA8PCBwcywgc3JjX3N0cmlkZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhbGZf ZmlsbF9ib3JkZXJfaCh1aW50OF90ICpkc3QsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBj b25zdCB1aW50OF90ICpzcmMsIGNvbnN0IHB0cmRpZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0 IHVpbnQ4X3QgKmJvcmRlciwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVs cywgY29uc3QgaW50IHBzLCBjb25zdCBpbnQgZWRnZSkKK3sKKyAgICBpZiAoZWRnZSkKKyAgICAg ICAgYWxmX2V4dGVuZF9ob3J6KGRzdCwgYm9yZGVyLCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMs IGRzdF9zdHJpZGUpOworICAgIGVsc2UKKyAgICAgICAgYWxmX2NvcHlfYm9yZGVyKGRzdCwgc3Jj LCBwcywgd2lkdGgsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUsIHNyY19zdHJpZGUpOworfQor CitzdGF0aWMgdm9pZCBhbGZfZmlsbF9ib3JkZXJfdih1aW50OF90ICpkc3QsIGNvbnN0IHB0cmRp ZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgdWludDhfdCAq Ym9yZGVyLCBjb25zdCBpbnQgYm9yZGVyX3BpeGVscywgY29uc3QgaW50IGhlaWdodCwgY29uc3Qg aW50IHBpeGVsX3NoaWZ0LCBjb25zdCBpbnQgKmVkZ2VzLCBjb25zdCBpbnQgZWRnZSkKK3sKKyAg ICBjb25zdCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSA9IChib3JkZXJfcGl4ZWxzIDw8IHBpeGVsX3No aWZ0KTsKKworICAgIGlmIChlZGdlKSB7CisgICAgICAgIGFsZl9leHRlbmRfdmVydChkc3QsIGJv cmRlciwgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGhlaWdodCArIDIgKiBib3JkZXJfcGl4 ZWxzLCBkc3Rfc3RyaWRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vbGVmdC9y aWdodAorICAgIGFsZl9jb3B5X2JvcmRlcihkc3QgKyBkc3Rfc3RyaWRlICogYm9yZGVyX3BpeGVs cyAqIGVkZ2VzW1RPUF0sIHNyYyArIHNyY19zdHJpZGUgKiBib3JkZXJfcGl4ZWxzICogZWRnZXNb VE9QXSwKKyAgICAgICAgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGhlaWdodCArICghZWRn ZXNbVE9QXSArICFlZGdlc1tCT1RUT01dKSAqIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJpZGUsIHNy Y19zdHJpZGUpOworCisgICAgLy90b3AgbGVmdC9yaWdodAorICAgIGlmIChlZGdlc1tUT1BdKQor ICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBkc3QgKyBkc3Rfc3RyaWRlICogYm9yZGVyX3Bp eGVscywgcGl4ZWxfc2hpZnQsIGJvcmRlcl9waXhlbHMsIGJvcmRlcl9waXhlbHMsIGRzdF9zdHJp ZGUpOworCisgICAgLy9ib3R0b20gbGVmdC9yaWdodAorICAgIGlmIChlZGdlc1tCT1RUT01dKSB7 CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlICogKGJvcmRlcl9waXhlbHMgKyBoZWlnaHQpOwor ICAgICAgICBhbGZfZXh0ZW5kX2hvcnooZHN0LCBkc3QgLSBkc3Rfc3RyaWRlLCBwaXhlbF9zaGlm dCwgYm9yZGVyX3BpeGVscywgYm9yZGVyX3BpeGVscywgZHN0X3N0cmlkZSk7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBhbGZfcHJlcGFyZV9idWZmZXIoVlZDRnJhbWVDb250ZXh0ICpmYywgdWlu dDhfdCAqX2RzdCwgY29uc3QgdWludDhfdCAqX3NyYywgY29uc3QgaW50IHgsIGNvbnN0IGludCB5 LAorICAgIGNvbnN0IGludCB4X2N0YiwgY29uc3QgaW50IHlfY3RiLCBjb25zdCBpbnQgd2lkdGgs IGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCBwdHJk aWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgY19pZHgsIGNvbnN0IGludCAqZWRnZXMp Cit7CisgICAgY29uc3QgaW50IHBzID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29u c3QgaW50IHcgPSBmYy0+cHMuc3BzLT53aWR0aCA+PiBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhd OworICAgIGNvbnN0IGludCBoID0gZmMtPnBzLnNwcy0+aGVpZ2h0ID4+IGZjLT5wcy5zcHMtPnZz aGlmdFtjX2lkeF07CisgICAgY29uc3QgaW50IGJvcmRlcl9waXhlbHMgPSBjX2lkeCA9PSAwID8g QUxGX0JPUkRFUl9MVU1BIDogQUxGX0JPUkRFUl9DSFJPTUE7CisgICAgdWludDhfdCAqZHN0LCAq c3JjOworCisgICAgY29weV9DVEIoX2RzdCwgX3NyYywgd2lkdGggPDwgcHMsIGhlaWdodCwgZHN0 X3N0cmlkZSwgc3JjX3N0cmlkZSk7CisKKyAgICAvL3RvcAorICAgIHNyYyA9IGZjLT50YWIuYWxm X3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVsxXSArICgoKGJvcmRlcl9waXhlbHMgKiAoeV9jdGIgLSAx KSkgKiB3ICsgeCkgPDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSBib3JkZXJfcGl4ZWxzICogZHN0 X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfaChkc3QsIGRzdF9zdHJpZGUsIHNyYywgdyAg PDwgcHMsIF9kc3QsIHdpZHRoLCBib3JkZXJfcGl4ZWxzLCBwcywgZWRnZXNbVE9QXSk7CisKKyAg ICAvL2JvdHRvbQorICAgIHNyYyA9IGZjLT50YWIuYWxmX3BpeGVsX2J1ZmZlcl9oW2NfaWR4XVsw XSArICgoYm9yZGVyX3BpeGVscyAqICh5X2N0YiArIDEpICogdyArIHgpIDw8IHBzKTsKKyAgICBk c3QgPSBfZHN0ICsgaGVpZ2h0ICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfaChk c3QsIGRzdF9zdHJpZGUsIHNyYywgdyAgPDwgcHMsIF9kc3QgKyAoaGVpZ2h0IC0gMSkgKiBkc3Rf c3RyaWRlLCB3aWR0aCwgYm9yZGVyX3BpeGVscywgcHMsIGVkZ2VzW0JPVFRPTV0pOworCisKKyAg ICAvL2xlZnQKKyAgICBzcmMgPSBmYy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lkeF1bMV0g KyAoaCAqICh4X2N0YiAtIDEpICsgeSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9waXhlbHMg PDwgcHMpOworICAgIGRzdCA9IF9kc3QgLSAoYm9yZGVyX3BpeGVscyA8PCBwcykgLSBib3JkZXJf cGl4ZWxzICogZHN0X3N0cmlkZTsKKyAgICBhbGZfZmlsbF9ib3JkZXJfdihkc3QsIGRzdF9zdHJp ZGUsIHNyYywgIGRzdCArIChib3JkZXJfcGl4ZWxzIDw8IHBzKSwgYm9yZGVyX3BpeGVscywgaGVp Z2h0LCBwcywgZWRnZXMsIGVkZ2VzW0xFRlRdKTsKKworICAgIC8vcmlnaHQKKyAgICBzcmMgPSBm Yy0+dGFiLmFsZl9waXhlbF9idWZmZXJfdltjX2lkeF1bMF0gKyAoaCAqICh4X2N0YiArIDEpICsg eSAtIGJvcmRlcl9waXhlbHMpICogKGJvcmRlcl9waXhlbHMgPDwgcHMpOworICAgIGRzdCA9IF9k c3QgKyAod2lkdGggPDwgcHMpIC0gYm9yZGVyX3BpeGVscyAqIGRzdF9zdHJpZGU7CisgICAgYWxm X2ZpbGxfYm9yZGVyX3YoZHN0LCBkc3Rfc3RyaWRlLCBzcmMsICBkc3QgLSAoMSA8PCBwcyksIGJv cmRlcl9waXhlbHMsIGhlaWdodCwgcHMsIGVkZ2VzLCBlZGdlc1tSSUdIVF0pOworfQorCisjZGVm aW5lIEFMRl9NQVhfQkxPQ0tTX0lOX0NUVSAgIChNQVhfQ1RVX1NJWkUgKiBNQVhfQ1RVX1NJWkUg LyBBTEZfQkxPQ0tfU0laRSAvIEFMRl9CTE9DS19TSVpFKQorI2RlZmluZSBBTEZfTUFYX0ZJTFRF Ul9TSVpFICAgICAoQUxGX01BWF9CTE9DS1NfSU5fQ1RVICogQUxGX05VTV9DT0VGRl9MVU1BKQor CitzdGF0aWMgdm9pZCBhbGZfZ2V0X2NvZWZmX2FuZF9jbGlwKFZWQ0xvY2FsQ29udGV4dCAqbGMs IGludDhfdCAqY29lZmYsIGludDE2X3QgKmNsaXAsCisgICAgY29uc3QgdWludDhfdCAqc3JjLCBw dHJkaWZmX3Qgc3JjX3N0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdmJfcG9zLCBB TEZQYXJhbXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ ZmM7CisgICAgY29uc3QgVlZDU0ggKnNoICAgICAgICAgICAgID0gJmxjLT5zYy0+c2g7CisgICAg dWludDhfdCBmaXhlZF9jbGlwX3NldFtBTEZfTlVNX0ZJTFRFUlNfTFVNQSAqIEFMRl9OVU1fQ09F RkZfTFVNQV0gPSB7IDAgfTsKKyAgICBjb25zdCBpbnQ4X3QgICpjb2VmZl9zZXQ7CisgICAgY29u c3QgdWludDhfdCAqY2xpcF9pZHhfc2V0OworICAgIGNvbnN0IHVpbnQ4X3QgKmNsYXNzX3RvX2Zp bHQ7CisgICAgY29uc3QgaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodCAvIEFMRl9CTE9DS19TSVpF IC8gQUxGX0JMT0NLX1NJWkU7CisgICAgaW50IGNsYXNzX2lkeFtBTEZfTUFYX0JMT0NLU19JTl9D VFVdOworICAgIGludCB0cmFuc3Bvc2VfaWR4W0FMRl9NQVhfQkxPQ0tTX0lOX0NUVV07CisKKyAg ICBpZiAoYWxmLT5jdGJfZmlsdF9zZXRfaWR4X3kgPCAxNikgeworICAgICAgICBjb2VmZl9zZXQg PSAmZmZfdnZjX2FsZl9maXhfZmlsdF9jb2VmZlswXVswXTsKKyAgICAgICAgY2xpcF9pZHhfc2V0 ID0gZml4ZWRfY2xpcF9zZXQ7CisgICAgICAgIGNsYXNzX3RvX2ZpbHQgPSBmZl92dmNfYWxmX2Ns YXNzX3RvX2ZpbHRfbWFwW2FsZi0+Y3RiX2ZpbHRfc2V0X2lkeF95XTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBjb25zdCBpbnQgaWQgPSBzaC0+YWxmLmFwc19pZF9sdW1hW2FsZi0+Y3RiX2ZpbHRf c2V0X2lkeF95IC0gMTZdOworICAgICAgICBjb25zdCBWVkNBTEYgKmFwcyA9IChWVkNBTEYgKilm Yy0+cHMuYWxmX2xpc3RbaWRdLT5kYXRhOworICAgICAgICBjb2VmZl9zZXQgICAgPSBhcHMtPmx1 bWFfY29lZmY7CisgICAgICAgIGNsaXBfaWR4X3NldCA9IGFwcy0+bHVtYV9jbGlwX2lkeDsKKyAg ICAgICAgY2xhc3NfdG9fZmlsdCA9IGZmX3Z2Y19hbGZfYXBzX2NsYXNzX3RvX2ZpbHRfbWFwOwor ICAgIH0KKyAgICBmYy0+dnZjZHNwLmFsZi5jbGFzc2lmeShjbGFzc19pZHgsIHRyYW5zcG9zZV9p ZHgsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgdmJfcG9zLCBsYy0+ YWxmX2dyYWRpZW50X3RtcCk7CisgICAgZmMtPnZ2Y2RzcC5hbGYucmVjb25fY29lZmZfYW5kX2Ns aXAoY29lZmYsIGNsaXAsIGNsYXNzX2lkeCwgdHJhbnNwb3NlX2lkeCwgc2l6ZSwKKyAgICAgICAg Y29lZmZfc2V0LCBjbGlwX2lkeF9zZXQsIGNsYXNzX3RvX2ZpbHQpOworfQorCitzdGF0aWMgdm9p ZCBhbGZfZmlsdGVyX2x1bWEoVlZDTG9jYWxDb250ZXh0ICpsYywgdWludDhfdCAqZHN0LCBjb25z dCB1aW50OF90ICpzcmMsCisgICAgY29uc3QgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHB0 cmRpZmZfdCBzcmNfc3RyaWRlLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCwKKyAgICBjb25z dCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBfdmJfcG9zLCBBTEZQYXJh bXMgKmFsZikKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgPSBsYy0+ZmM7Cisg ICAgaW50IHZiX3BvcyAgICAgICAgICAgICAgICAgID0gX3ZiX3BvcyAtIHkwOworICAgIGNvbnN0 IGludCBub192Yl9oZWlnaHQgICAgICA9IGhlaWdodCA+IHZiX3BvcyA/IHZiX3BvcyAtIEFMRl9W Ql9QT1NfQUJPVkVfTFVNQSA6IGhlaWdodDsKKyAgICBjb25zdCBpbnQgaCAgICAgICAgICAgICAg ICAgPSBoZWlnaHQgLSBub192Yl9oZWlnaHQ7CisgICAgaW50OF90ICpjb2VmZiAgICAgICAgICAg ICAgID0gKGludDhfdCopbGMtPnRtcDsKKyAgICBpbnQxNl90ICpjbGlwICAgICAgICAgICAgICAg PSAoaW50MTZfdCAqKWxjLT50bXAxOworCisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9T SVpFIDw9IHNpemVvZihsYy0+dG1wKSk7CisgICAgYXZfYXNzZXJ0MChBTEZfTUFYX0ZJTFRFUl9T SVpFICogc2l6ZW9mKGludDE2X3QpIDw9IHNpemVvZihsYy0+dG1wMSkpOworCisgICAgYWxmX2dl dF9jb2VmZl9hbmRfY2xpcChsYywgY29lZmYsIGNsaXAsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgs IG5vX3ZiX2hlaWdodCwgdmJfcG9zLCBhbGYpOworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltM VU1BXShkc3QsIGRzdF9zdHJpZGUsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgsIG5vX3ZiX2hlaWdo dCwgY29lZmYsIGNsaXApOworCisgICAgaWYgKGggPiAwKSB7CisgICAgICAgIHZiX3BvcyAtPSBu b192Yl9oZWlnaHQ7CisgICAgICAgIGRzdCArPSBkc3Rfc3RyaWRlICogbm9fdmJfaGVpZ2h0Owor ICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZSAqIG5vX3ZiX2hlaWdodDsKKyAgICAgICAgYWxmX2dl dF9jb2VmZl9hbmRfY2xpcChsYywgY29lZmYsIGNsaXAsIHNyYywgc3JjX3N0cmlkZSwgd2lkdGgs IGgsIHZiX3BvcywgYWxmKTsKKyAgICAgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyX3ZiW0xVTUFd KGRzdCwgZHN0X3N0cmlkZSwgc3JjLCBzcmNfc3RyaWRlLCB3aWR0aCwgaCwgY29lZmYsIGNsaXAs IHZiX3Bvcyk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGFsZl9jbGlwX2Zyb21faWR4KGNvbnN0 IFZWQ0ZyYW1lQ29udGV4dCAqZmMsIGNvbnN0IGludCBpZHgpCit7CisgICAgY29uc3QgVlZDU1BT ICpzcHMgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgaW50IG9mZnNldFtdID0gezAsIDMsIDUs IDd9OworCisgICAgcmV0dXJuIDEgPDwgKHNwcy0+Yml0X2RlcHRoIC0gb2Zmc2V0W2lkeF0pOwor fQorCitzdGF0aWMgdm9pZCBhbGZfZmlsdGVyX2Nocm9tYShWVkNMb2NhbENvbnRleHQgKmxjLCB1 aW50OF90ICpkc3QsIGNvbnN0IHVpbnQ4X3QgKnNyYywKKyAgICBjb25zdCBwdHJkaWZmX3QgZHN0 X3N0cmlkZSwgY29uc3QgcHRyZGlmZl90IHNyY19zdHJpZGUsIGNvbnN0IGludCBjX2lkeCwKKyAg ICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCB2Yl9wb3MsIEFM RlBhcmFtcyAqYWxmKQoreworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOwor ICAgIGNvbnN0IFZWQ1NIICpzaCAgICAgICAgID0gJmxjLT5zYy0+c2g7CisgICAgY29uc3QgVlZD QUxGICphcHMgICAgICAgPSAoVlZDQUxGICopZmMtPnBzLmFsZl9saXN0W3NoLT5hbGYuYXBzX2lk X2Nocm9tYV0tPmRhdGE7CisgICAgY29uc3QgaW50IG9mZiAgICAgICAgICAgPSBhbGYtPmFsZl9j dGJfZmlsdGVyX2FsdF9pZHhbY19pZHggLSAxXSAqIEFMRl9OVU1fQ09FRkZfQ0hST01BOworICAg IGNvbnN0IGludDhfdCAqY29lZmYgICAgID0gYXBzLT5jaHJvbWFfY29lZmYgKyBvZmY7CisgICAg Y29uc3QgaW50IG5vX3ZiX2hlaWdodCAgPSBoZWlnaHQgPiB2Yl9wb3MgPyB2Yl9wb3MgLSBBTEZf VkJfUE9TX0FCT1ZFX0NIUk9NQSA6IGhlaWdodDsKKyAgICBpbnQxNl90IGNsaXBbQUxGX05VTV9D T0VGRl9DSFJPTUFdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfTlVNX0NPRUZGX0NI Uk9NQTsgaSsrKQorICAgICAgICBjbGlwW2ldID0gYWxmX2NsaXBfZnJvbV9pZHgoZmMsIGFwcy0+ Y2hyb21hX2NsaXBfaWR4W29mZiArIGldKTsKKworICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcltD SFJPTUFdKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCBzcmNfc3RyaWRlLCB3aWR0aCwgbm9fdmJfaGVp Z2h0LCBjb2VmZiwgY2xpcCk7CisgICAgaWYgKG5vX3ZiX2hlaWdodCA8IGhlaWdodCkgeworICAg ICAgICBkc3QgKz0gZHN0X3N0cmlkZSAqIG5vX3ZiX2hlaWdodDsKKyAgICAgICAgc3JjICs9IHNy Y19zdHJpZGUgKiBub192Yl9oZWlnaHQ7CisgICAgICAgIGZjLT52dmNkc3AuYWxmLmZpbHRlcl92 YltDSFJPTUFdKGRzdCwgZHN0X3N0cmlkZSwgc3JjLCBzcmNfc3RyaWRlLCB3aWR0aCwgaGVpZ2h0 IC0gbm9fdmJfaGVpZ2h0LCBjb2VmZiwgY2xpcCwgdmJfcG9zIC0gbm9fdmJfaGVpZ2h0KTsKKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIGFsZl9maWx0ZXJfY2MoVlZDTG9jYWxDb250ZXh0ICpsYywg dWludDhfdCAqZHN0LCBjb25zdCB1aW50OF90ICpsdW1hLAorICAgIGNvbnN0IHB0cmRpZmZfdCBk c3Rfc3RyaWRlLCBjb25zdCBwdHJkaWZmX3QgbHVtYV9zdHJpZGUsIGNvbnN0IGludCBjX2lkeCwK KyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludCBocywgY29u c3QgaW50IHZzLCBjb25zdCBpbnQgdmJfcG9zLCBBTEZQYXJhbXMgKmFsZikKK3sKKyAgICBWVkNG cmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNTSCAqc2ggICAgICAg ICA9ICZsYy0+c2MtPnNoOworICAgIGNvbnN0IGludCBpZHggICAgICAgICAgID0gY19pZHggLSAx OworICAgIEFWQnVmZmVyUmVmICphcHNfYnVmICAgID0gZmMtPnBzLmFsZl9saXN0W3NoLT5hbGYu Y2NfYXBzX2lkW2lkeF1dOworCisgICAgaWYgKGFwc19idWYpIHsKKyAgICAgICAgY29uc3QgVlZD QUxGICphcHMgICA9IChWVkNBTEYgKilhcHNfYnVmLT5kYXRhOworICAgICAgICBjb25zdCBpbnQg b2ZmICAgICAgID0gKGFsZi0+Y3RiX2NjX2lkY1tpZHhdIC0gMSkqIEFMRl9OVU1fQ09FRkZfQ0M7 CisgICAgICAgIGNvbnN0IGludDhfdCAqY29lZmYgPSBhcHMtPmNjX2NvZWZmW2lkeF0gKyBvZmY7 CisKKyAgICAgICAgZmMtPnZ2Y2RzcC5hbGYuZmlsdGVyX2NjKGRzdCwgZHN0X3N0cmlkZSwgbHVt YSwgbHVtYV9zdHJpZGUsIHdpZHRoLCBoZWlnaHQsIGhzLCB2cywgY29lZmYsIHZiX3Bvcyk7Cisg ICAgfQorfQorCit2b2lkIGZmX3Z2Y19hbGZfY29weV9jdHVfdG9faHYoVlZDTG9jYWxDb250ZXh0 KiBsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTApCit7CisgICAgVlZDRnJhbWVDb250ZXh0 ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgaW50IHhfY3RiICAgICAgICAgPSB4MCA+PiBm Yy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IHlfY3RiICAgICAgICAg PSB5MCA+PiBmYy0+cHMuc3BzLT5jdGJfbG9nMl9zaXplX3k7CisgICAgY29uc3QgaW50IGN0Yl9z aXplX3kgICAgPSBmYy0+cHMuc3BzLT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCBwcyAgICAg ICAgICAgID0gZmMtPnBzLnNwcy0+cGl4ZWxfc2hpZnQ7CisgICAgY29uc3QgaW50IGNfZW5kICAg ICAgICAgPSBmYy0+cHMuc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA/IFZWQ19NQVhfU0FNUExFX0FS UkFZUyA6IDE7CisKKyAgICBmb3IgKGludCBjX2lkeCA9IDA7IGNfaWR4IDwgY19lbmQ7IGNfaWR4 KyspIHsKKyAgICAgICAgY29uc3QgaW50IGhzICAgICAgICA9IGZjLT5wcy5zcHMtPmhzaGlmdFtj X2lkeF07CisgICAgICAgIGNvbnN0IGludCB2cyAgICAgICAgPSBmYy0+cHMuc3BzLT52c2hpZnRb Y19pZHhdOworICAgICAgICBjb25zdCBpbnQgeCAgICAgICAgID0geDAgPj4gaHM7CisgICAgICAg IGNvbnN0IGludCB5ICAgICAgICAgPSB5MCA+PiB2czsKKyAgICAgICAgY29uc3QgaW50IHdpZHRo ICAgICA9IEZGTUlOKGZjLT5wcy5zcHMtPndpZHRoIC0geDAsIGN0Yl9zaXplX3kpID4+IGhzOwor ICAgICAgICBjb25zdCBpbnQgaGVpZ2h0ICAgID0gRkZNSU4oZmMtPnBzLnNwcy0+aGVpZ2h0IC0g eTAsIGN0Yl9zaXplX3kpID4+IHZzOworCisgICAgICAgIGNvbnN0IGludCBzcmNfc3RyaWRlID0g ZmMtPmZyYW1lLT5saW5lc2l6ZVtjX2lkeF07CisgICAgICAgIHVpbnQ4X3QqIHNyYyA9ICZmYy0+ ZnJhbWUtPmRhdGFbY19pZHhdW3kgKiBzcmNfc3RyaWRlICsgKHggPDwgcHMpXTsKKworICAgICAg ICBhbGZfY29weV9jdGJfdG9faHYoZmMsIHNyYywgc3JjX3N0cmlkZSwgeCwgeSwgd2lkdGgsIGhl aWdodCwgeF9jdGIsIHlfY3RiLCBjX2lkeCk7CisgICAgfQorfQorCit2b2lkIGZmX3Z2Y19hbGZf ZmlsdGVyKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGludCB4MCwgY29uc3QgaW50IHkwKQor eworICAgIFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgID0gbGMtPmZjOworICAgIGNvbnN0IFZWQ1BQ UyAqcHBzICAgICAgID0gZmMtPnBzLnBwczsKKyAgICBjb25zdCBpbnQgeF9jdGIgICAgICAgICA9 IHgwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBpbnQgeV9jdGIg ICAgICAgICA9IHkwID4+IGZjLT5wcy5zcHMtPmN0Yl9sb2cyX3NpemVfeTsKKyAgICBjb25zdCBp bnQgY3RiX3NpemVfeSAgICA9IGZjLT5wcy5zcHMtPmN0Yl9zaXplX3k7CisgICAgY29uc3QgaW50 IHBzICAgICAgICAgICAgPSBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdDsKKyAgICBjb25zdCBpbnQg cGFkZGVkX3N0cmlkZSA9IEVER0VfRU1VX0JVRkZFUl9TVFJJREUgPDwgcHM7CisgICAgY29uc3Qg aW50IHBhZGRlZF9vZmZzZXQgPSBwYWRkZWRfc3RyaWRlICogQUxGX1BBRERJTkdfU0laRSArIChB TEZfUEFERElOR19TSVpFIDw8IHBzKTsKKyAgICBjb25zdCBpbnQgY19lbmQgICAgICAgICA9IGZj LT5wcy5zcHMtPmNocm9tYV9mb3JtYXRfaWRjID8gVlZDX01BWF9TQU1QTEVfQVJSQVlTIDogMTsK KyAgICBBTEZQYXJhbXMgKmFsZiAgICAgICAgICA9ICZDVEIoZmMtPnRhYi5hbGYsIHhfY3RiLCB5 X2N0Yik7CisgICAgaW50IGVkZ2VzW01BWF9FREdFU10gICAgPSB7IHhfY3RiID09IDAsIHlfY3Ri ID09IDAsIHhfY3RiID09IHBwcy0+Y3RiX3dpZHRoIC0gMSwgeV9jdGIgPT0gcHBzLT5jdGJfaGVp Z2h0IC0gMSB9OworCisgICAgaWYgKCFwcHMtPmxvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFi bGVkX2ZsYWcpIHsKKyAgICAgICAgZWRnZXNbTEVGVF0gPSBlZGdlc1tMRUZUXSB8fCAobGMtPmJv dW5kYXJ5X2ZsYWdzICYgQk9VTkRBUllfTEVGVF9USUxFKTsKKyAgICAgICAgZWRnZXNbVE9QXSAg PSBlZGdlc1tUT1BdIHx8IChsYy0+Ym91bmRhcnlfZmxhZ3MgJiBCT1VOREFSWV9VUFBFUl9USUxF KTsKKyAgICAgICAgZWRnZXNbUklHSFRdID0gZWRnZXNbUklHSFRdIHx8IHBwcy0+Y3RiX3RvX2Nv bF9iZFt4X2N0Yl0gIT0gcHBzLT5jdGJfdG9fY29sX2JkW3hfY3RiICsgMV07CisgICAgICAgIGVk Z2VzW0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IHBwcy0+Y3RiX3RvX3Jvd19iZFt5X2N0Yl0g IT0gcHBzLT5jdGJfdG9fcm93X2JkW3lfY3RiICsgMV07CisgICAgfQorCisgICAgaWYgKCFwcHMt Pmxvb3BfZmlsdGVyX2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnKSB7CisgICAgICAgIGVkZ2Vz W0xFRlRdID0gZWRnZXNbTEVGVF0gfHwgKGxjLT5ib3VuZGFyeV9mbGFncyAmIEJPVU5EQVJZX0xF RlRfU0xJQ0UpOworICAgICAgICBlZGdlc1tUT1BdID0gZWRnZXNbVE9QXSB8fCAobGMtPmJvdW5k YXJ5X2ZsYWdzICYgQk9VTkRBUllfVVBQRVJfU0xJQ0UpOworICAgICAgICBlZGdlc1tSSUdIVF0g PSBlZGdlc1tSSUdIVF0gfHwgQ1RCKGZjLT50YWIuc2xpY2VfaWR4LCB4X2N0YiwgeV9jdGIpICE9 IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIgKyAxLCB5X2N0Yik7CisgICAgICAgIGVkZ2Vz W0JPVFRPTV0gPSBlZGdlc1tCT1RUT01dIHx8IENUQihmYy0+dGFiLnNsaWNlX2lkeCwgeF9jdGIs IHlfY3RiKSAhPSBDVEIoZmMtPnRhYi5zbGljZV9pZHgsIHhfY3RiLCB5X2N0YiArIDEpOworICAg IH0KKworICAgIGZvciAoaW50IGNfaWR4ID0gMDsgY19pZHggPCBjX2VuZDsgY19pZHgrKykgewor ICAgICAgICBjb25zdCBpbnQgaHMgPSBmYy0+cHMuc3BzLT5oc2hpZnRbY19pZHhdOworICAgICAg ICBjb25zdCBpbnQgdnMgPSBmYy0+cHMuc3BzLT52c2hpZnRbY19pZHhdOworICAgICAgICBjb25z dCBpbnQgY3RiX3NpemVfaCA9IGN0Yl9zaXplX3kgPj4gaHM7CisgICAgICAgIGNvbnN0IGludCBj dGJfc2l6ZV92ID0gY3RiX3NpemVfeSA+PiB2czsKKyAgICAgICAgY29uc3QgaW50IHggPSB4MCA+ PiBoczsKKyAgICAgICAgY29uc3QgaW50IHkgPSB5MCA+PiB2czsKKyAgICAgICAgY29uc3QgaW50 IHBpY193aWR0aCA9IGZjLT5wcy5zcHMtPndpZHRoID4+IGhzOworICAgICAgICBjb25zdCBpbnQg cGljX2hlaWdodCA9IGZjLT5wcy5zcHMtPmhlaWdodCA+PiB2czsKKyAgICAgICAgY29uc3QgaW50 IHdpZHRoICA9IEZGTUlOKHBpY193aWR0aCAgLSB4LCBjdGJfc2l6ZV9oKTsKKyAgICAgICAgY29u c3QgaW50IGhlaWdodCA9IEZGTUlOKHBpY19oZWlnaHQgLSB5LCBjdGJfc2l6ZV92KTsKKyAgICAg ICAgY29uc3QgaW50IHNyY19zdHJpZGUgPSBmYy0+ZnJhbWUtPmxpbmVzaXplW2NfaWR4XTsKKyAg ICAgICAgdWludDhfdCAqc3JjID0gJmZjLT5mcmFtZS0+ZGF0YVtjX2lkeF1beSAqIHNyY19zdHJp ZGUgKyAoeCA8PCBwcyldOworICAgICAgICB1aW50OF90ICpwYWRkZWQ7CisKKyAgICAgICAgaWYg KGFsZi0+Y3RiX2ZsYWdbY19pZHhdIHx8ICghY19pZHggJiYgKGFsZi0+Y3RiX2NjX2lkY1swXSB8 fCBhbGYtPmN0Yl9jY19pZGNbMV0pKSkgeworICAgICAgICAgICAgcGFkZGVkID0gKGNfaWR4ID8g bGMtPmFsZl9idWZmZXJfY2hyb21hIDogbGMtPmFsZl9idWZmZXJfbHVtYSkgKyBwYWRkZWRfb2Zm c2V0OworICAgICAgICAgICAgYWxmX3ByZXBhcmVfYnVmZmVyKGZjLCBwYWRkZWQsIHNyYywgeCwg eSwgeF9jdGIsIHlfY3RiLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIHBhZGRlZF9z dHJpZGUsIHNyY19zdHJpZGUsIGNfaWR4LCBlZGdlcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGFsZi0+Y3RiX2ZsYWdbY19pZHhdKSB7CisgICAgICAgICAgICBpZiAoIWNfaWR4KSAgeworICAg ICAgICAgICAgICAgIGFsZl9maWx0ZXJfbHVtYShsYywgc3JjLCBwYWRkZWQsIHNyY19zdHJpZGUs IHBhZGRlZF9zdHJpZGUsIHgsIHksCisgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQs IHkgKyBjdGJfc2l6ZV92IC0gQUxGX1ZCX1BPU19BQk9WRV9MVU1BLCBhbGYpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbGZfZmlsdGVyX2Nocm9tYShsYywgc3JjLCBw YWRkZWQsIHNyY19zdHJpZGUsIHBhZGRlZF9zdHJpZGUsIGNfaWR4LAorICAgICAgICAgICAgICAg ICAgICB3aWR0aCwgaGVpZ2h0LCBjdGJfc2l6ZV92IC0gQUxGX1ZCX1BPU19BQk9WRV9DSFJPTUEs IGFsZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNfaWR4ICYmIGFs Zi0+Y3RiX2NjX2lkY1tjX2lkeCAtIDFdKSB7CisgICAgICAgICAgICBwYWRkZWQgPSBsYy0+YWxm X2J1ZmZlcl9sdW1hICsgcGFkZGVkX29mZnNldDsKKyAgICAgICAgICAgIGFsZl9maWx0ZXJfY2Mo bGMsIHNyYywgcGFkZGVkLCBzcmNfc3RyaWRlLCBwYWRkZWRfc3RyaWRlLCBjX2lkeCwKKyAgICAg ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBocywgdnMsIChjdGJfc2l6ZV92IDw8IHZzKSAtIEFM Rl9WQl9QT1NfQUJPVkVfTFVNQSwgYWxmKTsKKyAgICAgICAgfQorCisgICAgICAgIGFsZi0+YXBw bGllZFtjX2lkeF0gPSAxOworICAgIH0KK30KKworCit2b2lkIGZmX3Z2Y19sbWNzX2ZpbHRlcihj b25zdCBWVkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeCwgY29uc3QgaW50IHkpCit7Cisg ICAgY29uc3QgU2xpY2VDb250ZXh0ICpzYyA9IGxjLT5zYzsKKyAgICBjb25zdCBWVkNGcmFtZUNv bnRleHQgKmZjID0gbGMtPmZjOworICAgIGNvbnN0IGludCBjdGJfc2l6ZSAgPSBmYy0+cHMuc3Bz LT5jdGJfc2l6ZV95OworICAgIGNvbnN0IGludCB3aWR0aCAgICAgPSBGRk1JTihmYy0+cHMucHBz LT53aWR0aCAgLSB4LCBjdGJfc2l6ZSk7CisgICAgY29uc3QgaW50IGhlaWdodCAgICA9IEZGTUlO KGZjLT5wcy5wcHMtPmhlaWdodCAtIHksIGN0Yl9zaXplKTsKKyAgICB1aW50OF90ICpkYXRhICAg ICAgID0gZmMtPmZyYW1lLT5kYXRhW0xVTUFdICsgeSAqIGZjLT5mcmFtZS0+bGluZXNpemVbTFVN QV0gKyAoeCA8PCBmYy0+cHMuc3BzLT5waXhlbF9zaGlmdCk7CisgICAgaWYgKHNjLT5zaC5sbWNz X3VzZWRfZmxhZykKKyAgICAgICAgZmMtPnZ2Y2RzcC5sbWNzLmZpbHRlcihkYXRhLCBmYy0+ZnJh bWUtPmxpbmVzaXplW0xVTUFdLCB3aWR0aCwgaGVpZ2h0LCBmYy0+cHMucGgtPmxtY3NfaW52X2x1 dCk7Cit9CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z2Yy92dmNfZmlsdGVyLmggYi9saWJhdmNv ZGVjL3Z2Yy92dmNfZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uMmZiZmFhMjNiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0 ZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogVlZDIGZpbHRlcnMKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMjIgTnVvIE1pCisgKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworI2lmbmRlZiBBVkNPREVDX1ZWQ19GSUxURVJfSAorI2RlZmluZSBBVkNPREVDX1ZWQ19G SUxURVJfSAorCisjaW5jbHVkZSAidnZjZGVjLmgiCisKKy8qKgorICogbG1jcyBmaWx0ZXIgZm9y IHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBDVFUKKyAqIEBwYXJhbSB4 MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBwb3NpdGlvbiBmb3IgdGhl IENUVQorICovCit2b2lkIGZmX3Z2Y19sbWNzX2ZpbHRlcihjb25zdCBWVkNMb2NhbENvbnRleHQg KmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCk7CisKKy8qKgorICogdmVydGljYWwgZGVi bG9jayBmaWx0ZXIgZm9yIHRoZSBDVFUKKyAqIEBwYXJhbSBsYyBsb2NhbCBjb250ZXh0IGZvciBD VFUKKyAqIEBwYXJhbSB4MCB4IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0geTAgeSBw b3NpdGlvbiBmb3IgdGhlIENUVQorICovCit2b2lkIGZmX3Z2Y19kZWJsb2NrX3ZlcnRpY2FsKGNv bnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKTsKKworLyoqCisgKiBob3Jp em9udGFsIGRlYmxvY2sgZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29u dGV4dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBh cmFtIHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfZGVibG9ja19o b3Jpem9udGFsKGNvbnN0IFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwKTsKKwor LyoqCisgKiBzYW8gZmlsdGVyIGZvciB0aGUgQ1RVCisgKiBAcGFyYW0gbGMgbG9jYWwgY29udGV4 dCBmb3IgQ1RVCisgKiBAcGFyYW0geDAgeCBwb3NpdGlvbiBmb3IgdGhlIENUVQorICogQHBhcmFt IHkwIHkgcG9zaXRpb24gZm9yIHRoZSBDVFUKKyAqLwordm9pZCBmZl92dmNfc2FvX2ZpbHRlcihW VkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBpbnQgeDAsIGNvbnN0IGludCB5MCk7CisKK3ZvaWQg ZmZfdnZjX2FsZl9jb3B5X2N0dV90b19odihWVkNMb2NhbENvbnRleHQqIGxjLCBpbnQgeDAsIGlu dCB5MCk7CisKKy8qKgorICogYWxmIGZpbHRlciBmb3IgdGhlIENUVQorICogQHBhcmFtIGxjIGxv Y2FsIGNvbnRleHQgZm9yIENUVQorICogQHBhcmFtIHgwIHggcG9zaXRpb24gZm9yIHRoZSBDVFUK KyAqIEBwYXJhbSB5MCB5IHBvc2l0aW9uIGZvciB0aGUgQ1RVCisgKi8KK3ZvaWQgZmZfdnZjX2Fs Zl9maWx0ZXIoVlZDTG9jYWxDb250ZXh0ICpsYywgY29uc3QgaW50IHgwLCBjb25zdCBpbnQgeTAp OworCisjZW5kaWYgLy8gQVZDT0RFQ19WVkNfQ1RVX0gKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv dnZjL3Z2Y19maWx0ZXJfdGVtcGxhdGUuYyBiL2xpYmF2Y29kZWMvdnZjL3Z2Y19maWx0ZXJfdGVt cGxhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45MzA1OTU3N2E1 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dmMvdnZjX2ZpbHRlcl90ZW1wbGF0ZS5j CkBAIC0wLDAgKzEsMTIxNiBAQAorLyoKKyAqIFZWQyBmaWx0ZXJzIERTUAorICoKKyAqIENvcHly aWdodCAoQykgMjAyMiBOdW8gTWkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcu CisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisg Ki8KKworc3RhdGljIHZvaWQgRlVOQyhsbWNzX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBw dHJkaWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBj b25zdCB1aW50OF90ICpfbHV0KQoreworICAgIGNvbnN0IHBpeGVsICpsdXQgPSAoY29uc3QgcGl4 ZWwgKilfbHV0OworICAgIHBpeGVsICpkc3QgPSAocGl4ZWwqKV9kc3Q7CisgICAgZHN0X3N0cmlk ZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr KykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAg ICBkc3RbeF0gPSBsdXRbZHN0W3hdXTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBGVU5DKHNhb19iYW5kX2ZpbHRlcikodWludDhfdCAqX2RzdCwg dWludDhfdCAqX3NyYywgcHRyZGlmZl90IGRzdF9zdHJpZGUsIHB0cmRpZmZfdCBzcmNfc3RyaWRl LAorICAgIGludDE2X3QgKnNhb19vZmZzZXRfdmFsLCBjb25zdCBpbnQgc2FvX2xlZnRfY2xhc3Ms IGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCkKK3sKKyAgICBwaXhlbCAqZHN0ID0g KHBpeGVsICopX2RzdDsKKyAgICBwaXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQg b2Zmc2V0X3RhYmxlWzMyXSA9IHsgMCB9OworICAgIGludCBrLCB5LCB4OworICAgIGludCBzaGlm dCAgPSBCSVRfREVQVEggLSA1OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOwor ICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoayA9IDA7IGsgPCA0 OyBrKyspCisgICAgICAgIG9mZnNldF90YWJsZVsoayArIHNhb19sZWZ0X2NsYXNzKSAmIDMxXSA9 IHNhb19vZmZzZXRfdmFsW2sgKyAxXTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp IHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICBkc3Rb eF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF90YWJsZVtzcmNbeF0gPj4gc2hpZnRd KTsKKyAgICAgICAgZHN0ICs9IGRzdF9zdHJpZGU7CisgICAgICAgIHNyYyArPSBzcmNfc3RyaWRl OworICAgIH0KK30KKworI2RlZmluZSBDTVAoYSwgYikgKCgoYSkgPiAoYikpIC0gKChhKSA8IChi KSkpCisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfZmlsdGVyKSh1aW50OF90ICpfZHN0LCB1 aW50OF90ICpfc3JjLCBwdHJkaWZmX3QgZHN0X3N0cmlkZSwKKyAgICBpbnQxNl90ICpzYW9fb2Zm c2V0X3ZhbCwgY29uc3QgaW50IGVvLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQp Cit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgZWRnZV9pZHhbXSA9IHsgMSwgMiwgMCwgMywg NCB9OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgcG9zWzRdWzJdWzJdID0geworICAgICAgICB7 IHsgLTEsICAwIH0sIHsgIDEsIDAgfSB9LCAvLyBob3Jpem9udGFsCisgICAgICAgIHsgeyAgMCwg LTEgfSwgeyAgMCwgMSB9IH0sIC8vIHZlcnRpY2FsCisgICAgICAgIHsgeyAtMSwgLTEgfSwgeyAg MSwgMSB9IH0sIC8vIDQ1IGRlZ3JlZQorICAgICAgICB7IHsgIDEsIC0xIH0sIHsgLTEsIDEgfSB9 LCAvLyAxMzUgZGVncmVlCisgICAgfTsKKyAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdDsK KyAgICBwaXhlbCAqc3JjID0gKHBpeGVsICopX3NyYzsKKyAgICBpbnQgYV9zdHJpZGUsIGJfc3Ry aWRlOworICAgIGludCB4LCB5OworICAgIHB0cmRpZmZfdCBzcmNfc3RyaWRlID0gKDIgKiBNQVhf UEJfU0laRSArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpIC8gc2l6ZW9mKHBpeGVsKTsK KyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBhX3N0cmlkZSA9IHBvc1tl b11bMF1bMF0gKyBwb3NbZW9dWzBdWzFdICogc3JjX3N0cmlkZTsKKyAgICBiX3N0cmlkZSA9IHBv c1tlb11bMV1bMF0gKyBwb3NbZW9dWzFdWzFdICogc3JjX3N0cmlkZTsKKyAgICBmb3IgKHkgPSAw OyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4Kysp IHsKKyAgICAgICAgICAgIGludCBkaWZmMCA9IENNUChzcmNbeF0sIHNyY1t4ICsgYV9zdHJpZGVd KTsKKyAgICAgICAgICAgIGludCBkaWZmMSA9IENNUChzcmNbeF0sIHNyY1t4ICsgYl9zdHJpZGVd KTsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsICAgICAgICA9IGVkZ2VfaWR4WzIgKyBkaWZm MCArIGRpZmYxXTsKKyAgICAgICAgICAgIGRzdFt4XSA9IGF2X2NsaXBfcGl4ZWwoc3JjW3hdICsg c2FvX29mZnNldF92YWxbb2Zmc2V0X3ZhbF0pOworICAgICAgICB9CisgICAgICAgIHNyYyArPSBz cmNfc3RyaWRlOworICAgICAgICBkc3QgKz0gZHN0X3N0cmlkZTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8wKSh1aW50OF90ICpfZHN0LCB1aW50OF90ICpf c3JjLAorICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwgU0FP UGFyYW1zICpzYW8sCisgICAgaW50ICpib3JkZXJzLCBjb25zdCBpbnQgX3dpZHRoLCBjb25zdCBp bnQgX2hlaWdodCwgY29uc3QgaW50IGNfaWR4LAorICAgIHVpbnQ4X3QgKnZlcnRfZWRnZSwgdWlu dDhfdCAqaG9yaXpfZWRnZSwgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGludCB4LCB5Owor ICAgIHBpeGVsICpkc3QgPSAocGl4ZWwgKilfZHN0OworICAgIHBpeGVsICpzcmMgPSAocGl4ZWwg Kilfc3JjOworICAgIGludDE2X3QgKnNhb19vZmZzZXRfdmFsID0gc2FvLT5vZmZzZXRfdmFsW2Nf aWR4XTsKKyAgICBpbnQgc2FvX2VvX2NsYXNzICAgID0gc2FvLT5lb19jbGFzc1tjX2lkeF07Cisg ICAgaW50IGluaXRfeCA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0OworCisg ICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9m KHBpeGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsKKyAgICAg ICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0gc2FvX29m ZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK KyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhlbChzcmNb eSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpbml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7CisgICAg ICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAgICAgICAg aW50IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwg aGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUgKyBvZmZz ZXRdID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsgb2Zmc2V0 X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAgICAgIGlm IChib3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRf dmFsWzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAg ICAgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNldF92YWwp OworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzNdKSB7CisgICAgICAgICAgICBpbnQg b2Zmc2V0X3ZhbCAgID0gc2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBwdHJkaWZmX3Qg eV9kc3Rfc3RyaWRlID0gZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIHB0 cmRpZmZfdCB5X3NyY19zdHJpZGUgPSBzcmNfc3RyaWRlICogKGhlaWdodCAtIDEpOworICAgICAg ICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICBk c3RbeCArIHlfZHN0X3N0cmlkZV0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4ICsgeV9zcmNfc3RyaWRl XSArIG9mZnNldF92YWwpOworICAgICAgICAgICAgaGVpZ2h0LS07CisgICAgICAgIH0KKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoc2FvX2VkZ2VfcmVzdG9yZV8xKSh1aW50OF90ICpfZHN0 LCB1aW50OF90ICpfc3JjLAorICAgIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBwdHJkaWZmX3Qgc3Jj X3N0cmlkZSwgU0FPUGFyYW1zICpzYW8sCisgICAgaW50ICpib3JkZXJzLCBpbnQgX3dpZHRoLCBp bnQgX2hlaWdodCwgaW50IGNfaWR4LAorICAgIHVpbnQ4X3QgKnZlcnRfZWRnZSwgdWludDhfdCAq aG9yaXpfZWRnZSwgdWludDhfdCAqZGlhZ19lZGdlKQoreworICAgIGludCB4LCB5OworICAgIHBp eGVsICpkc3QgPSAocGl4ZWwgKilfZHN0OworICAgIHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3Jj OworICAgIGludDE2X3QgKnNhb19vZmZzZXRfdmFsID0gc2FvLT5vZmZzZXRfdmFsW2NfaWR4XTsK KyAgICBpbnQgc2FvX2VvX2NsYXNzICAgID0gc2FvLT5lb19jbGFzc1tjX2lkeF07CisgICAgaW50 IGluaXRfeCA9IDAsIGluaXRfeSA9IDAsIHdpZHRoID0gX3dpZHRoLCBoZWlnaHQgPSBfaGVpZ2h0 OworCisgICAgZHN0X3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0g c2l6ZW9mKHBpeGVsKTsKKworICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX1ZFUlQpIHsK KyAgICAgICAgaWYgKGJvcmRlcnNbMF0pIHsKKyAgICAgICAgICAgIGludCBvZmZzZXRfdmFsID0g c2FvX29mZnNldF92YWxbMF07CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5 KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeSAqIGRzdF9zdHJpZGVdID0gYXZfY2xpcF9waXhl bChzcmNbeSAqIHNyY19zdHJpZGVdICsgb2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpbml0X3ggPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChib3JkZXJzWzJdKSB7 CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19vZmZzZXRfdmFsWzBdOworICAgICAg ICAgICAgaW50IG9mZnNldCAgICAgPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBmb3IgKHggPSAw OyB4IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgICAgICBkc3RbeCAqIGRzdF9zdHJpZGUg KyBvZmZzZXRdID0gYXZfY2xpcF9waXhlbChzcmNbeCAqIHNyY19zdHJpZGUgKyBvZmZzZXRdICsg b2Zmc2V0X3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aC0tOworICAgICAg ICB9CisgICAgfQorICAgIGlmIChzYW9fZW9fY2xhc3MgIT0gU0FPX0VPX0hPUklaKSB7CisgICAg ICAgIGlmIChib3JkZXJzWzFdKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0X3ZhbCA9IHNhb19v ZmZzZXRfdmFsWzBdOworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94OyB4IDwgd2lkdGg7IHgr KykKKyAgICAgICAgICAgICAgICBkc3RbeF0gPSBhdl9jbGlwX3BpeGVsKHNyY1t4XSArIG9mZnNl dF92YWwpOworICAgICAgICAgICAgaW5pdF95ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAo Ym9yZGVyc1szXSkgeworICAgICAgICAgICAgaW50IG9mZnNldF92YWwgICA9IHNhb19vZmZzZXRf dmFsWzBdOworICAgICAgICAgICAgcHRyZGlmZl90IHlfZHN0X3N0cmlkZSA9IGRzdF9zdHJpZGUg KiAoaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBwdHJkaWZmX3QgeV9zcmNfc3RyaWRlID0gc3Jj X3N0cmlkZSAqIChoZWlnaHQgLSAxKTsKKyAgICAgICAgICAgIGZvciAoeCA9IGluaXRfeDsgeCA8 IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgZHN0W3ggKyB5X2RzdF9zdHJpZGVdID0gYXZf Y2xpcF9waXhlbChzcmNbeCArIHlfc3JjX3N0cmlkZV0gKyBvZmZzZXRfdmFsKTsKKyAgICAgICAg ICAgIGhlaWdodC0tOworICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgc2F2 ZV91cHBlcl9sZWZ0ICA9ICFkaWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18x MzVEICYmICFib3JkZXJzWzBdICYmICFib3JkZXJzWzFdOworICAgICAgICBpbnQgc2F2ZV91cHBl cl9yaWdodCA9ICFkaWFnX2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYm ICFib3JkZXJzWzFdICYmICFib3JkZXJzWzJdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9yaWdo dCA9ICFkaWFnX2VkZ2VbMl0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEICYmICFib3Jk ZXJzWzJdICYmICFib3JkZXJzWzNdOworICAgICAgICBpbnQgc2F2ZV9sb3dlcl9sZWZ0ICA9ICFk aWFnX2VkZ2VbM10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQgICYmICFib3JkZXJzWzBd ICYmICFib3JkZXJzWzNdOworCisgICAgICAgIC8vIFJlc3RvcmUgcGl4ZWxzIHRoYXQgY2FuJ3Qg YmUgbW9kaWZpZWQKKyAgICAgICAgaWYgKHZlcnRfZWRnZVswXSAmJiBzYW9fZW9fY2xhc3MgIT0g U0FPX0VPX1ZFUlQpIHsKKyAgICAgICAgICAgIGZvciAoeSA9IGluaXRfeSArIHNhdmVfdXBwZXJf bGVmdDsgeSA8IGhlaWdodCAtIHNhdmVfbG93ZXJfbGVmdDsgeSsrKQorICAgICAgICAgICAgICAg IGRzdFt5ICogZHN0X3N0cmlkZV0gPSBzcmNbeSAqIHNyY19zdHJpZGVdOworICAgICAgICB9Cisg ICAgICAgIGlmICh2ZXJ0X2VkZ2VbMV0gJiYgc2FvX2VvX2NsYXNzICE9IFNBT19FT19WRVJUKSB7 CisgICAgICAgICAgICBmb3IgKHkgPSBpbml0X3kgKyBzYXZlX3VwcGVyX3JpZ2h0OyB5IDwgaGVp Z2h0IC0gc2F2ZV9sb3dlcl9yaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIGRzdFt5ICogZHN0 X3N0cmlkZSArIHdpZHRoIC0gMV0gPSBzcmNbeSAqIHNyY19zdHJpZGUgKyB3aWR0aCAtIDFdOwor ICAgICAgICB9CisKKyAgICAgICAgaWYgKGhvcml6X2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzICE9 IFNBT19FT19IT1JJWikgeworICAgICAgICAgICAgZm9yICh4ID0gaW5pdF94ICsgc2F2ZV91cHBl cl9sZWZ0OyB4IDwgd2lkdGggLSBzYXZlX3VwcGVyX3JpZ2h0OyB4KyspCisgICAgICAgICAgICAg ICAgZHN0W3hdID0gc3JjW3hdOworICAgICAgICB9CisgICAgICAgIGlmIChob3Jpel9lZGdlWzFd ICYmIHNhb19lb19jbGFzcyAhPSBTQU9fRU9fSE9SSVopIHsKKyAgICAgICAgICAgIGZvciAoeCA9 IGluaXRfeCArIHNhdmVfbG93ZXJfbGVmdDsgeCA8IHdpZHRoIC0gc2F2ZV9sb3dlcl9yaWdodDsg eCsrKQorICAgICAgICAgICAgICAgIGRzdFsoaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlICsgeF0g PSBzcmNbKGhlaWdodCAtIDEpICogc3JjX3N0cmlkZSArIHhdOworICAgICAgICB9CisgICAgICAg IGlmIChkaWFnX2VkZ2VbMF0gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT18xMzVEKQorICAgICAg ICAgICAgZHN0WzBdID0gc3JjWzBdOworICAgICAgICBpZiAoZGlhZ19lZGdlWzFdICYmIHNhb19l b19jbGFzcyA9PSBTQU9fRU9fNDVEKQorICAgICAgICAgICAgZHN0W3dpZHRoIC0gMV0gPSBzcmNb d2lkdGggLSAxXTsKKyAgICAgICAgaWYgKGRpYWdfZWRnZVsyXSAmJiBzYW9fZW9fY2xhc3MgPT0g U0FPX0VPXzEzNUQpCisgICAgICAgICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKSAr IHdpZHRoIC0gMV0gPSBzcmNbc3JjX3N0cmlkZSAqIChoZWlnaHQgLSAxKSArIHdpZHRoIC0gMV07 CisgICAgICAgIGlmIChkaWFnX2VkZ2VbM10gJiYgc2FvX2VvX2NsYXNzID09IFNBT19FT180NUQp CisgICAgICAgICAgICBkc3RbZHN0X3N0cmlkZSAqIChoZWlnaHQgLSAxKV0gPSBzcmNbc3JjX3N0 cmlkZSAqIChoZWlnaHQgLSAxKV07CisKKyAgICB9Cit9CisKKyN1bmRlZiBDTVAKKworc3RhdGlj IGF2X2Fsd2F5c19pbmxpbmUgaW50MTZfdCBGVU5DKGFsZl9jbGlwKShwaXhlbCBjdXJyLCBwaXhl bCB2MCwgcGl4ZWwgdjEsIGludDE2X3QgY2xpcCkKK3sKKyAgICByZXR1cm4gYXZfY2xpcCh2MCAt IGN1cnIsIC1jbGlwLCBjbGlwKSArIGF2X2NsaXAodjEgLSBjdXJyLCAtY2xpcCwgY2xpcCk7Cit9 CisKK3N0YXRpYyB2b2lkIEZVTkMoYWxmX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpfZHN0LCBwdHJk aWZmX3QgZHN0X3N0cmlkZSwgY29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90IHNyY19zdHJp ZGUsCisgICAgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQ4X3Qg KmZpbHRlciwgY29uc3QgaW50MTZfdCAqY2xpcCkKK3sKKyAgICBjb25zdCBwaXhlbCAqc3JjICAg ID0gKHBpeGVsICopX3NyYzsKKyAgICBjb25zdCBpbnQgc2hpZnQgICAgID0gNzsKKyAgICBjb25z dCBpbnQgb2Zmc2V0ICAgID0gMSA8PCAoIHNoaWZ0IC0gMSApOworCisgICAgZHN0X3N0cmlkZSAv PSBzaXplb2YocGl4ZWwpOworICAgIHNyY19zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAg IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAg ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpzMCA9IHNyYyArIHkgKiBzcmNfc3RyaWRlICsgeDsKKyAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpzMSA9IHMwICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAg IGNvbnN0IHBpeGVsICpzMiA9IHMwIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBp eGVsICpzMyA9IHMxICsgc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNCA9 IHMyIC0gc3JjX3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNSA9IHMzICsgc3Jj X3N0cmlkZTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpzNiA9IHM0IC0gc3JjX3N0cmlkZTsK KworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBTEZfQkxPQ0tfU0laRTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgcGl4ZWwgKmRzdCA9IChwaXhlbCAqKV9kc3QgKyAoeSArIGkpICog ZHN0X3N0cmlkZSArIHg7CisKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDAgPSBzMCAr IGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMSA9IHMxICsg aSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAyID0gczIgKyBp ICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDMgPSBzMyArIGkg KiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNCA9IHM0ICsgaSAq IHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA1ID0gczUgKyBpICog c3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDYgPSBzNiArIGkgKiBz cmNfc3RyaWRlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxP Q0tfU0laRTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAg ICAgICAgICAgICAgICBjb25zdCBwaXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbMF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDVbKzBdLCBwNlsr MF0sIGNsaXBbMF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZV TkMoYWxmX2NsaXApKGN1cnIsIHAzWysxXSwgcDRbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAg ICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0s IHA0WyswXSwgY2xpcFsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10g ICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDNbLTFdLCBwNFsrMV0sIGNsaXBbM10pOworICAgICAg ICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAx WysyXSwgcDJbLTJdLCBjbGlwWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRl cls1XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFs1XSk7Cisg ICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gICogRlVOQyhhbGZfY2xpcCkoY3Vy ciwgcDFbKzBdLCBwMlsrMF0sIGNsaXBbNl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0g ZmlsdGVyWzddICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzdd KTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls4XSAgKiBGVU5DKGFsZl9jbGlw KShjdXJyLCBwMVstMl0sIHAyWysyXSwgY2xpcFs4XSk7CisgICAgICAgICAgICAgICAgICAgIHN1 bSArPSBmaWx0ZXJbOV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzNdLCBwMFstM10sIGNs aXBbOV0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzEwXSAqIEZVTkMoYWxm X2NsaXApKGN1cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlwWzEwXSk7CisgICAgICAgICAgICAgICAg ICAgIHN1bSArPSBmaWx0ZXJbMTFdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFst MV0sIGNsaXBbMTFdKTsKKworICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0 KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGN1cnI7CisgICAgICAgICAg ICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAgICAgICAgICAgICAgICAgICBwMCsr OworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgICAgICBwMisrOwor ICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAgICAgICAgICAgICBwNCsrOworICAg ICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAgICAgICAgICBwNisrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciArPSBBTEZfTlVN X0NPRUZGX0xVTUE7CisgICAgICAgICAgICBjbGlwICs9IEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2x1bWFfdmIp KHVpbnQ4X3QgKl9kc3QsIHB0cmRpZmZfdCBkc3Rfc3RyaWRlLCBjb25zdCB1aW50OF90ICpfc3Jj LCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBo ZWlnaHQsIGNvbnN0IGludDhfdCAqZmlsdGVyLCBjb25zdCBpbnQxNl90ICpjbGlwLCBjb25zdCBp bnQgdmJfcG9zKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgICAgPSAocGl4ZWwgKilfc3JjOwor ICAgIGNvbnN0IGludCBzaGlmdCAgICAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgICAgPSAx IDw8ICggc2hpZnQgLSAxICk7CisgICAgY29uc3QgaW50IHZiX2Fib3ZlICA9IHZiX3BvcyAtIDQ7 CisgICAgY29uc3QgaW50IHZiX2JlbG93ICA9IHZiX3BvcyArIDM7CisKKyAgICBkc3Rfc3RyaWRl IC89IHNpemVvZihwaXhlbCk7CisgICAgc3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisg ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAg ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgewor ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4Owor ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAg ICAgY29uc3QgcGl4ZWwgKnMyID0gczAgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3Qg cGl4ZWwgKnMzID0gczEgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0 ID0gczIgLSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBz cmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRl OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKysp IHsKKyAgICAgICAgICAgICAgICBwaXhlbCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkg KiBkc3Rfc3RyaWRlICsgeDsKKworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMw ICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEg KyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiAr IGkgKiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsg aSAqIHNyY19zdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBp ICogc3JjX3N0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkg KiBzcmNfc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAq IHNyY19zdHJpZGU7CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9hYm92 ZSA9ICh5ICsgaSA8ICB2Yl9wb3MpICYmICh5ICsgaSA+PSB2Yl9wb3MgLSAxKTsKKyAgICAgICAg ICAgICAgICBjb25zdCBpbnQgaXNfbmVhcl92Yl9iZWxvdyA9ICh5ICsgaSA+PSB2Yl9wb3MpICYm ICh5ICsgaSA8PSB2Yl9wb3MpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3Zi ID0gaXNfbmVhcl92Yl9hYm92ZSB8fCBpc19uZWFyX3ZiX2JlbG93OworCisgICAgICAgICAgICAg ICAgaWYgKCh5ICsgaSA8IHZiX3BvcykgJiYgKCh5ICsgaSkgPj0gdmJfYWJvdmUpKSB7CisgICAg ICAgICAgICAgICAgICAgIHAxID0gKHkgKyBpID09IHZiX3BvcyAtIDEpID8gcDAgOiBwMTsKKyAg ICAgICAgICAgICAgICAgICAgcDMgPSAoeSArIGkgPj0gdmJfcG9zIC0gMikgPyBwMSA6IHAzOwor ICAgICAgICAgICAgICAgICAgICBwNSA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAzKSA/IHAzIDogcDU7 CisKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6 IHAyOworICAgICAgICAgICAgICAgICAgICBwNCA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAy IDogcDQ7CisgICAgICAgICAgICAgICAgICAgIHA2ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8g cDQgOiBwNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh5ICsgaSA+PSB2Yl9wb3MpICYm ICgoeSArIGkpIDw9IHZiX2JlbG93KSkgeworICAgICAgICAgICAgICAgICAgICBwMiA9ICh5ICsg aSA9PSB2Yl9wb3MgICAgKSA/IHAwIDogcDI7CisgICAgICAgICAgICAgICAgICAgIHA0ID0gKHkg KyBpIDw9IHZiX3BvcyArIDEpID8gcDIgOiBwNDsKKyAgICAgICAgICAgICAgICAgICAgcDYgPSAo eSArIGkgPD0gdmJfcG9zICsgMikgPyBwNCA6IHA2OworCisgICAgICAgICAgICAgICAgICAgIHAx ID0gKHkgKyBpID09IHZiX3BvcyAgICApID8gcDAgOiBwMTsKKyAgICAgICAgICAgICAgICAgICAg cDMgPSAoeSArIGkgPD0gdmJfcG9zICsgMSkgPyBwMSA6IHAzOworICAgICAgICAgICAgICAgICAg ICBwNSA9ICh5ICsgaSA8PSB2Yl9wb3MgKyAyKSA/IHAzIDogcDU7CisgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBBTEZfQkxPQ0tfU0laRTsg aisrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgICAg ICAgICBjb25zdCBwaXhlbCBjdXJyID0gKnAwOworCisgICAgICAgICAgICAgICAgICAgIHN1bSAr PSBmaWx0ZXJbMF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDVbKzBdLCBwNlsrMF0sIGNsaXBb MF0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFdICAqIEZVTkMoYWxmX2Ns aXApKGN1cnIsIHAzWysxXSwgcDRbLTFdLCBjbGlwWzFdKTsKKyAgICAgICAgICAgICAgICAgICAg c3VtICs9IGZpbHRlclsyXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwg Y2xpcFsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gICogRlVOQyhh bGZfY2xpcCkoY3VyciwgcDNbLTFdLCBwNFsrMV0sIGNsaXBbM10pOworICAgICAgICAgICAgICAg ICAgICBzdW0gKz0gZmlsdGVyWzRdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWysyXSwgcDJb LTJdLCBjbGlwWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAgKiBG VU5DKGFsZl9jbGlwKShjdXJyLCBwMVsrMV0sIHAyWy0xXSwgY2xpcFs1XSk7CisgICAgICAgICAg ICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzBd LCBwMlsrMF0sIGNsaXBbNl0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzdd ICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWy0xXSwgcDJbKzFdLCBjbGlwWzddKTsKKyAgICAg ICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlcls4XSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBw MVstMl0sIHAyWysyXSwgY2xpcFs4XSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0 ZXJbOV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzNdLCBwMFstM10sIGNsaXBbOV0pOwor ICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzEwXSAqIEZVTkMoYWxmX2NsaXApKGN1 cnIsIHAwWysyXSwgcDBbLTJdLCBjbGlwWzEwXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSAr PSBmaWx0ZXJbMTFdICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzFdLCBwMFstMV0sIGNsaXBb MTFdKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX25lYXJfdmIpCisgICAgICAgICAg ICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSArICgxIDw8 ICgoc2hpZnQgKyAzKSAtIDEpKSkgPj4gKHNoaWZ0ICsgMyk7CisgICAgICAgICAgICAgICAgICAg IHN1bSArPSBjdXJyOworICAgICAgICAgICAgICAgICAgICBkc3Rbal0gPSBDTElQKHN1bSk7CisK KyAgICAgICAgICAgICAgICAgICAgcDArKzsKKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAg ICAgICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgcDMrKzsKKyAgICAg ICAgICAgICAgICAgICAgcDQrKzsKKyAgICAgICAgICAgICAgICAgICAgcDUrKzsKKyAgICAgICAg ICAgICAgICAgICAgcDYrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBmaWx0ZXIgKz0gQUxGX05VTV9DT0VGRl9MVU1BOworICAgICAgICAgICAgY2xpcCAr PSBBTEZfTlVNX0NPRUZGX0xVTUE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk IEZVTkMoYWxmX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QqIF9kc3QsIHB0cmRpZmZfdCBkc3Rfc3Ry aWRlLCBjb25zdCB1aW50OF90KiBfc3JjLCBwdHJkaWZmX3Qgc3JjX3N0cmlkZSwKKyAgICBjb25z dCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQsIGNvbnN0IGludDhfdCogZmlsdGVyLCBjb25z dCBpbnQxNl90KiBjbGlwKQoreworICAgIGNvbnN0IHBpeGVsICpzcmMgPSAocGl4ZWwgKilfc3Jj OworICAgIGNvbnN0IGludCBzaGlmdCAgPSA3OworICAgIGNvbnN0IGludCBvZmZzZXQgPSAxIDw8 ICggc2hpZnQgLSAxICk7CisKKyAgICBkc3Rfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisgICAg c3JjX3N0cmlkZSAvPSBzaXplb2YocGl4ZWwpOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo ZWlnaHQ7IHkgKz0gQUxGX0JMT0NLX1NJWkUpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnMwID0gc3JjICsgeSAqIHNyY19zdHJpZGUgKyB4OworICAgICAgICAgICAgY29uc3QgcGl4ZWwg KnMxID0gczAgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMyID0gczAg LSBzcmNfc3RyaWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnMzID0gczEgKyBzcmNfc3Ry aWRlOworICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnM0ID0gczIgLSBzcmNfc3RyaWRlOworICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnM1ID0gczMgKyBzcmNfc3RyaWRlOworICAgICAgICAgICAg Y29uc3QgcGl4ZWwgKnM2ID0gczQgLSBzcmNfc3RyaWRlOworCisgICAgICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IEFMRl9CTE9DS19TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwaXhl bCAqZHN0ID0gKHBpeGVsICopX2RzdCArICh5ICsgaSkgKiBkc3Rfc3RyaWRlICsgeDsKKworICAg ICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMCA9IHMwICsgaSAqIHNyY19zdHJpZGU7CisgICAg ICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAxID0gczEgKyBpICogc3JjX3N0cmlkZTsKKyAgICAg ICAgICAgICAgICBjb25zdCBwaXhlbCAqcDIgPSBzMiArIGkgKiBzcmNfc3RyaWRlOworICAgICAg ICAgICAgICAgIGNvbnN0IHBpeGVsICpwMyA9IHMzICsgaSAqIHNyY19zdHJpZGU7CisgICAgICAg ICAgICAgICAgY29uc3QgcGl4ZWwgKnA0ID0gczQgKyBpICogc3JjX3N0cmlkZTsKKyAgICAgICAg ICAgICAgICBjb25zdCBwaXhlbCAqcDUgPSBzNSArIGkgKiBzcmNfc3RyaWRlOworICAgICAgICAg ICAgICAgIGNvbnN0IHBpeGVsICpwNiA9IHM2ICsgaSAqIHNyY19zdHJpZGU7CisKKyAgICAgICAg ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFMRl9CTE9DS19TSVpFOyBqKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBp eGVsIGN1cnIgPSAqcDA7CisKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclswXSAg KiBGVU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xpcFswXSk7CisgICAgICAg ICAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFb KzFdLCBwMlstMV0sIGNsaXBbMV0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVy WzJdICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwgcDJbKzBdLCBjbGlwWzJdKTsKKyAg ICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJy LCBwMVstMV0sIHAyWysxXSwgY2xpcFszXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBm aWx0ZXJbNF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzJdLCBwMFstMl0sIGNsaXBbNF0p OworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICAqIEZVTkMoYWxmX2NsaXAp KGN1cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzVdKTsKKworICAgICAgICAgICAgICAgICAgICBz dW0gPSAoc3VtICsgb2Zmc2V0KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9 IGN1cnI7CisgICAgICAgICAgICAgICAgICAgIGRzdFtqXSA9IENMSVAoc3VtKTsKKworICAgICAg ICAgICAgICAgICAgICBwMCsrOworICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAg ICAgICAgICAgICBwMisrOworICAgICAgICAgICAgICAgICAgICBwMysrOworICAgICAgICAgICAg ICAgICAgICBwNCsrOworICAgICAgICAgICAgICAgICAgICBwNSsrOworICAgICAgICAgICAgICAg ICAgICBwNisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZmlsdGVyX2Nocm9tYV92YikodWludDhf dCogX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNvbnN0IHVpbnQ4X3QqIF9zcmMsIHB0cmRp ZmZfdCBzcmNfc3RyaWRlLAorICAgIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50IGhlaWdodCwg Y29uc3QgaW50OF90KiBmaWx0ZXIsIGNvbnN0IGludDE2X3QqIGNsaXAsIGNvbnN0IGludCB2Yl9w b3MpCit7CisgICAgY29uc3QgcGl4ZWwgKnNyYyA9IChwaXhlbCAqKV9zcmM7CisgICAgY29uc3Qg aW50IHNoaWZ0ICA9IDc7CisgICAgY29uc3QgaW50IG9mZnNldCA9IDEgPDwgKCBzaGlmdCAtIDEg KTsKKyAgICBjb25zdCBpbnQgdmJfYWJvdmUgID0gdmJfcG9zIC0gMjsKKyAgICBjb25zdCBpbnQg dmJfYmVsb3cgID0gdmJfcG9zICsgMTsKKworICAgIGRzdF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVs KTsKKyAgICBzcmNfc3RyaWRlIC89IHNpemVvZihwaXhlbCk7CisKKyAgICBmb3IgKGludCB5ID0g MDsgeSA8IGhlaWdodDsgeSArPSBBTEZfQkxPQ0tfU0laRSkgeworICAgICAgICBmb3IgKGludCB4 ID0gMDsgeCA8IHdpZHRoOyB4ICs9IEFMRl9CTE9DS19TSVpFKSB7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqczAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZSArIHg7CisgICAgICAgICAgICBjb25z dCBwaXhlbCAqczEgPSBzMCArIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq czIgPSBzMCAtIHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczMgPSBzMSAr IHNyY19zdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczQgPSBzMiAtIHNyY19zdHJp ZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczUgPSBzMyArIHNyY19zdHJpZGU7CisgICAg ICAgICAgICBjb25zdCBwaXhlbCAqczYgPSBzNCAtIHNyY19zdHJpZGU7CisKKyAgICAgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgQUxGX0JMT0NLX1NJWkU7IGkrKykgeworICAgICAgICAgICAg ICAgIHBpeGVsICpkc3QgPSAocGl4ZWwgKilfZHN0ICsgKHkgKyBpKSAqIGRzdF9zdHJpZGUgKyB4 OworCisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAwID0gczAgKyBpICogc3JjX3N0cmlk ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDEgPSBzMSArIGkgKiBzcmNfc3RyaWRl OworICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwMiA9IHMyICsgaSAqIHNyY19zdHJpZGU7 CisgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnAzID0gczMgKyBpICogc3JjX3N0cmlkZTsK KyAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCAqcDQgPSBzNCArIGkgKiBzcmNfc3RyaWRlOwor ICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsICpwNSA9IHM1ICsgaSAqIHNyY19zdHJpZGU7Cisg ICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgKnA2ID0gczYgKyBpICogc3JjX3N0cmlkZTsKKwor ICAgICAgICAgICAgICAgIGNvbnN0IGludCBpc19uZWFyX3ZiX2Fib3ZlID0gKHkgKyBpIDwgIHZi X3BvcykgJiYgKHkgKyBpID49IHZiX3BvcyAtIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBpc19uZWFyX3ZiX2JlbG93ID0gKHkgKyBpID49IHZiX3BvcykgJiYgKHkgKyBpIDw9IHZiX3Bv cyk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGlzX25lYXJfdmIgPSBpc19uZWFyX3ZiX2Fi b3ZlIHx8IGlzX25lYXJfdmJfYmVsb3c7CisKKyAgICAgICAgICAgICAgICBpZiAoKHkgKyBpIDwg dmJfcG9zKSAmJiAoKHkgKyBpKSA+PSB2Yl9hYm92ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg cDEgPSAoeSArIGkgPT0gdmJfcG9zIC0gMSkgPyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAg ICBwMyA9ICh5ICsgaSA+PSB2Yl9wb3MgLSAyKSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAg ICAgIHA1ID0gKHkgKyBpID49IHZiX3BvcyAtIDMpID8gcDMgOiBwNTsKKworICAgICAgICAgICAg ICAgICAgICBwMiA9ICh5ICsgaSA9PSB2Yl9wb3MgLSAxKSA/IHAwIDogcDI7CisgICAgICAgICAg ICAgICAgICAgIHA0ID0gKHkgKyBpID49IHZiX3BvcyAtIDIpID8gcDIgOiBwNDsKKyAgICAgICAg ICAgICAgICAgICAgcDYgPSAoeSArIGkgPj0gdmJfcG9zIC0gMykgPyBwNCA6IHA2OworICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoKHkgKyBpID49IHZiX3BvcykgJiYgKCh5ICsgaSkgPD0gdmJf YmVsb3cpKSB7CisgICAgICAgICAgICAgICAgICAgIHAyID0gKHkgKyBpID09IHZiX3BvcyAgICAp ID8gcDAgOiBwMjsKKyAgICAgICAgICAgICAgICAgICAgcDQgPSAoeSArIGkgPD0gdmJfcG9zICsg MSkgPyBwMiA6IHA0OworICAgICAgICAgICAgICAgICAgICBwNiA9ICh5ICsgaSA8PSB2Yl9wb3Mg KyAyKSA/IHA0IDogcDY7CisKKyAgICAgICAgICAgICAgICAgICAgcDEgPSAoeSArIGkgPT0gdmJf cG9zICAgICkgPyBwMCA6IHAxOworICAgICAgICAgICAgICAgICAgICBwMyA9ICh5ICsgaSA8PSB2 Yl9wb3MgKyAxKSA/IHAxIDogcDM7CisgICAgICAgICAgICAgICAgICAgIHA1ID0gKHkgKyBpIDw9 IHZiX3BvcyArIDIpID8gcDMgOiBwNTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IEFMRl9CTE9DS19TSVpFOyBqKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgaW50IHN1bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVs IGN1cnIgPSAqcDA7CisKKyAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclswXSAgKiBG VU5DKGFsZl9jbGlwKShjdXJyLCBwM1srMF0sIHA0WyswXSwgY2xpcFswXSk7CisgICAgICAgICAg ICAgICAgICAgIHN1bSArPSBmaWx0ZXJbMV0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDFbKzFd LCBwMlstMV0sIGNsaXBbMV0pOworICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzJd ICAqIEZVTkMoYWxmX2NsaXApKGN1cnIsIHAxWyswXSwgcDJbKzBdLCBjbGlwWzJdKTsKKyAgICAg ICAgICAgICAgICAgICAgc3VtICs9IGZpbHRlclszXSAgKiBGVU5DKGFsZl9jbGlwKShjdXJyLCBw MVstMV0sIHAyWysxXSwgY2xpcFszXSk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBmaWx0 ZXJbNF0gICogRlVOQyhhbGZfY2xpcCkoY3VyciwgcDBbKzJdLCBwMFstMl0sIGNsaXBbNF0pOwor ICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzVdICAqIEZVTkMoYWxmX2NsaXApKGN1 cnIsIHAwWysxXSwgcDBbLTFdLCBjbGlwWzVdKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAo IWlzX25lYXJfdmIpCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gPSAoc3VtICsgb2Zmc2V0 KSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgc3VtID0gKHN1bSArICgxIDw8ICgoc2hpZnQgKyAzKSAtIDEpKSkgPj4gKHNoaWZ0ICsg Myk7CisgICAgICAgICAgICAgICAgICAgIHN1bSArPSBjdXJyOworICAgICAgICAgICAgICAgICAg ICBkc3Rbal0gPSBDTElQKHN1bSk7CisKKyAgICAgICAgICAgICAgICAgICAgcDArKzsKKyAgICAg ICAgICAgICAgICAgICAgcDErKzsKKyAgICAgICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAg ICAgICAgICAgICAgcDMrKzsKKyAgICAgICAgICAgICAgICAgICAgcDQrKzsKKyAgICAgICAgICAg ICAgICAgICAgcDUrKzsKKyAgICAgICAgICAgICAgICAgICAgcDYrKzsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEZV TkMoYWxmX2ZpbHRlcl9jYykodWludDhfdCAqX2RzdCwgcHRyZGlmZl90IGRzdF9zdHJpZGUsIGNv bnN0IHVpbnQ4X3QgKl9sdW1hLCBjb25zdCBwdHJkaWZmX3QgbHVtYV9zdHJpZGUsCisgICAgY29u c3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0LCBjb25zdCBpbnQgaHMsIGNvbnN0IGludCB2 cywgY29uc3QgaW50OF90ICpmaWx0ZXIsIGNvbnN0IGludCB2Yl9wb3MpCit7CisgICAgY29uc3Qg cHRyZGlmZl90IHN0cmlkZSA9IGx1bWFfc3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGRz dF9zdHJpZGUgLz0gc2l6ZW9mKHBpeGVsKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp Z2h0OyB5KyspIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Cisg ICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgIHBpeGVsICpkc3QgID0gKHBpeGVs ICopX2RzdCAgKyB5ICogZHN0X3N0cmlkZSArIHg7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAq c3JjICA9IChwaXhlbCAqKV9sdW1hICsgKHkgPDwgdnMpICogc3RyaWRlICsgKHggPDwgaHMpOwor CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczAgPSBzcmMgLSBzdHJpZGU7CisgICAgICAgICAg ICBjb25zdCBwaXhlbCAqczEgPSBzcmM7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczIgPSBz cmMgKyBzdHJpZGU7CisgICAgICAgICAgICBjb25zdCBwaXhlbCAqczMgPSBzcmMgKyAyICogc3Ry aWRlOworCisgICAgICAgICAgICBjb25zdCBpbnQgcG9zID0geSA8PCB2czsKKyAgICAgICAgICAg IGlmICghdnMgJiYgKHBvcyA9PSB2Yl9wb3MgfHwgcG9zID09IHZiX3BvcyArIDEpKQorICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAocG9zID09ICh2Yl9wb3MgLSAy KSB8fCBwb3MgPT0gKHZiX3BvcyArIDEpKQorICAgICAgICAgICAgICAgIHMzID0gczI7CisgICAg ICAgICAgICBlbHNlICBpZiAocG9zID09ICh2Yl9wb3MgLSAxKSB8fCBwb3MgPT0gdmJfcG9zKQor ICAgICAgICAgICAgICAgIHMzID0gczIgPSBzMCA9IHMxOworCisKKyAgICAgICAgICAgIHN1bSAr PSBmaWx0ZXJbMF0gKiAoKnMwIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzFd ICogKCooczEgLSAxKSAtICpzcmMpOworICAgICAgICAgICAgc3VtICs9IGZpbHRlclsyXSAqICgq KHMxICsgMSkgLSAqc3JjKTsKKyAgICAgICAgICAgIHN1bSArPSBmaWx0ZXJbM10gKiAoKihzMiAt IDEpIC0gKnNyYyk7CisgICAgICAgICAgICBzdW0gKz0gZmlsdGVyWzRdICogKCpzMiAtICpzcmMp OworICAgICAgICAgICAgc3VtICs9IGZpbHRlcls1XSAqICgqKHMyICsgMSkgLSAqc3JjKTsKKyAg ICAgICAgICAgIHN1bSArPSBmaWx0ZXJbNl0gKiAoKnMzIC0gKnNyYyk7CisgICAgICAgICAgICBz dW0gPSBhdl9jbGlwKChzdW0gKyA2NCkgPj4gNywgLSgxIDw8IChCSVRfREVQVEggLSAxKSksICgx IDw8IChCSVRfREVQVEggLSAxKSkgLSAxKTsKKyAgICAgICAgICAgIHN1bSArPSAqZHN0OworICAg ICAgICAgICAgKmRzdCA9IGF2X2NsaXBfcGl4ZWwoc3VtKTsKKyAgICAgICAgfQorICAgIH0KK30K KworI2RlZmluZSBBTEZfRElSX1ZFUlQgICAgICAgIDAKKyNkZWZpbmUgQUxGX0RJUl9IT1JaICAg ICAgICAxCisjZGVmaW5lIEFMRl9ESVJfRElHQTAgICAgICAgMgorI2RlZmluZSBBTEZfRElSX0RJ R0ExICAgICAgIDMKKworc3RhdGljIHZvaWQgRlVOQyhhbGZfZ2V0X2lkeCkoaW50ICpjbGFzc19p ZHgsIGludCAqdHJhbnNwb3NlX2lkeCwgY29uc3QgaW50ICpzdW0sIGNvbnN0IGludCBhYykKK3sK KyAgICBzdGF0aWMgY29uc3QgaW50IGFyZ192YXJbXSA9IHswLCAxLCAyLCAyLCAyLCAyLCAyLCAz LCAzLCAzLCAzLCAzLCAzLCAzLCAzLCA0IH07CisKKyAgICBpbnQgaHYwLCBodjEsIGRpcl9odiwg ZDAsIGQxLCBkaXJfZCwgaHZkMSwgaHZkMCwgc3VtX2h2LCBkaXIxOworCisgICAgZGlyX2h2ID0g c3VtW0FMRl9ESVJfVkVSVF0gPD0gc3VtW0FMRl9ESVJfSE9SWl07CisgICAgaHYxICAgID0gRkZN QVgoc3VtW0FMRl9ESVJfVkVSVF0sIHN1bVtBTEZfRElSX0hPUlpdKTsKKyAgICBodjAgICAgPSBG Rk1JTihzdW1bQUxGX0RJUl9WRVJUXSwgc3VtW0FMRl9ESVJfSE9SWl0pOworCisgICAgZGlyX2Qg ID0gc3VtW0FMRl9ESVJfRElHQTBdIDw9IHN1bVtBTEZfRElSX0RJR0ExXTsKKyAgICBkMSAgICAg PSBGRk1BWChzdW1bQUxGX0RJUl9ESUdBMF0sIHN1bVtBTEZfRElSX0RJR0ExXSk7CisgICAgZDAg ICAgID0gRkZNSU4oc3VtW0FMRl9ESVJfRElHQTBdLCBzdW1bQUxGX0RJUl9ESUdBMV0pOworCisg ICAgLy9wcm9tb3RlIHRvIGF2b2lkIG92ZXJmbG93CisgICAgZGlyMSA9ICh1aW50NjRfdClkMSAq IGh2MCA8PSAodWludDY0X3QpaHYxICogZDA7CisgICAgaHZkMSA9IGRpcjEgPyBodjEgOiBkMTsK KyAgICBodmQwID0gZGlyMSA/IGh2MCA6IGQwOworCisgICAgc3VtX2h2ID0gc3VtW0FMRl9ESVJf SE9SWl0gKyBzdW1bQUxGX0RJUl9WRVJUXTsKKyAgICAqY2xhc3NfaWR4ID0gYXJnX3Zhclthdl9j bGlwX3VpbnRwMihzdW1faHYgKiBhYyA+PiAoQklUX0RFUFRIIC0gMSksIDQpXTsKKyAgICBpZiAo aHZkMSAqIDIgPiA5ICogaHZkMCkKKyAgICAgICAgKmNsYXNzX2lkeCArPSAoKGRpcjEgPDwgMSkg KyAyKSAqIDU7CisgICAgZWxzZSBpZiAoaHZkMSA+IDIgKiBodmQwKQorICAgICAgICAqY2xhc3Nf aWR4ICs9ICgoZGlyMSA8PCAxKSArIDEpICogNTsKKworICAgICp0cmFuc3Bvc2VfaWR4ID0gZGly X2QgKiAyICsgZGlyX2h2OworfQorCitzdGF0aWMgdm9pZCBGVU5DKGFsZl9jbGFzc2lmeSkoaW50 ICpjbGFzc19pZHgsIGludCAqdHJhbnNwb3NlX2lkeCwKKyAgICBjb25zdCB1aW50OF90ICpfc3Jj LCBjb25zdCBwdHJkaWZmX3QgX3NyY19zdHJpZGUsIGNvbnN0IGludCB3aWR0aCwgY29uc3QgaW50 IGhlaWdodCwKKyAgICBjb25zdCBpbnQgdmJfcG9zLCBpbnQgKmdyYWRpZW50X3RtcCkKK3sKKyAg ICBpbnQgKmdyYWQ7CisKKyAgICBjb25zdCBpbnQgaCA9IGhlaWdodCArIEFMRl9HUkFESUVOVF9C T1JERVIgKiAyOworICAgIGNvbnN0IGludCB3ID0gd2lkdGggICsgQUxGX0dSQURJRU5UX0JPUkRF UiAqIDI7CisgICAgY29uc3QgaW50IHNpemUgPSAoQUxGX0JMT0NLX1NJWkUgKyBBTEZfR1JBRElF TlRfQk9SREVSICogMikgLyBBTEZfR1JBRElFTlRfU1RFUDsKKyAgICBjb25zdCBpbnQgZ3N0cmlk ZSA9ICh3IC8gQUxGX0dSQURJRU5UX1NURVApICogQUxGX05VTV9ESVI7CisKKyAgICBjb25zdCBw aXhlbCAqc3JjICAgICAgICAgICA9IChjb25zdCBwaXhlbCAqKV9zcmM7CisgICAgY29uc3QgcHRy ZGlmZl90IHNyY19zdHJpZGUgPSBfc3JjX3N0cmlkZSAvIHNpemVvZihwaXhlbCk7CisgICAgc3Jj IC09IChBTEZfR1JBRElFTlRfQk9SREVSICsgMSkgKiBzcmNfc3RyaWRlICsgQUxGX0dSQURJRU5U X0JPUkRFUjsKKworICAgIGdyYWQgPSBncmFkaWVudF90bXA7CisgICAgZm9yIChpbnQgeSA9IDA7 IHkgPCBoOyB5ICs9IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAgICAgIGNvbnN0IHBpeGVsICpz MCAgPSBzcmMgKyB5ICogc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMxICA9IHMw ICsgc3JjX3N0cmlkZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMyICA9IHMxICsgc3JjX3N0cmlk ZTsKKyAgICAgICAgY29uc3QgcGl4ZWwgKnMzICA9IHMyICsgc3JjX3N0cmlkZTsKKworICAgICAg ICBpZiAoeSA9PSB2Yl9wb3MpICAgICAgICAgIC8vYWJvdmUKKyAgICAgICAgICAgIHMzID0gczI7 CisgICAgICAgIGVsc2UgaWYgKHkgPT0gdmJfcG9zICsgQUxGX0dSQURJRU5UX0JPUkRFUikKKyAg ICAgICAgICAgIHMwID0gczE7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyB4ICs9 IEFMRl9HUkFESUVOVF9TVEVQKSB7CisgICAgICAgICAgICAvL3R3byBwb2ludHMgYSB0aW1lCisg ICAgICAgICAgICBjb25zdCBwaXhlbCAqYTAgID0gczAgKyB4OworICAgICAgICAgICAgY29uc3Qg cGl4ZWwgKnAwICA9IHMxICsgeDsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpiMCAgPSBzMiAr IHg7CisgICAgICAgICAgICBjb25zdCBpbnQgdmFsMCAgID0gKCpwMCkgPDwgMTsKKworICAgICAg ICAgICAgY29uc3QgcGl4ZWwgKmExICA9IHMxICsgeCArIDE7CisgICAgICAgICAgICBjb25zdCBw aXhlbCAqcDEgID0gczIgKyB4ICsgMTsKKyAgICAgICAgICAgIGNvbnN0IHBpeGVsICpiMSAgPSBz MyArIHggKyAxOworICAgICAgICAgICAgY29uc3QgaW50IHZhbDEgICA9ICgqcDEpIDw8IDE7CisK KyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9WRVJUXSAgPSBGRkFCUyh2YWwwIC0gKmEwIC0gKmIw KSArIEZGQUJTKHZhbDEgLSAqYTEgLSAqYjEpOworICAgICAgICAgICAgZ3JhZFtBTEZfRElSX0hP UlpdICA9IEZGQUJTKHZhbDAgLSAqKHAwIC0gMSkgLSAqKHAwICsgMSkpICsgRkZBQlModmFsMSAt ICoocDEgLSAxKSAtICoocDEgKyAxKSk7CisgICAgICAgICAgICBncmFkW0FMRl9ESVJfRElHQTBd ID0gRkZBQlModmFsMCAtICooYTAgLSAxKSAtICooYjAgKyAxKSkgKyBGRkFCUyh2YWwxIC0gKihh MSAtIDEpIC0gKihiMSArIDEpKTsKKyAgICAgICAgICAgIGdyYWRbQUxGX0RJUl9ESUdBMV0gPSBG RkFCUyh2YWwwIC0gKihhMCArIDEpIC0gKihiMCAtIDEpKSArIEZGQUJTKHZhbDEgLSAqKGExICsg MSkgLSAqKGIxIC0gMSkpOworICAgICAgICAgICAgZ3JhZCArPSBBTEZfTlVNX0RJUjsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0IDsgeSArPSBBTEZf QkxPQ0tfU0laRSApIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCAg ID0gKEFMRl9CTE9DS19TSVpFICsgQUxGX0dSQURJRU5UX0JPUkRFUiAqIDIpIC8gQUxGX0dSQURJ RU5UX1NURVA7CisgICAgICAgIGludCBhYyAgICA9IDI7CisgICAgICAgIGlmICh5ICsgQUxGX0JM T0NLX1NJWkUgPT0gdmJfcG9zKSB7CisgICAgICAgICAgICBlbmQgLT0gQUxGX0dSQURJRU5UX0JP UkRFUiAvIEFMRl9HUkFESUVOVF9TVEVQOworICAgICAgICAgICAgYWMgPSAzOworICAgICAgICB9 IGVsc2UgaWYgKHkgPT0gdmJfcG9zKSB7CisgICAgICAgICAgICBzdGFydCArPSBBTEZfR1JBRElF TlRfQk9SREVSIC8gQUxGX0dSQURJRU5UX1NURVA7CisgICAgICAgICAgICBhYyA9IDM7CisgICAg ICAgIH0KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCArPSBBTEZfQkxPQ0tf U0laRSkgeworICAgICAgICAgICAgY29uc3QgaW50IHhnID0geCAvIEFMRl9HUkFESUVOVF9TVEVQ OworICAgICAgICAgICAgY29uc3QgaW50IHlnID0geSAvIEFMRl9HUkFESUVOVF9TVEVQOworICAg ICAgICAgICAgaW50IHN1bVtBTEZfTlVNX0RJUl0gPSB7IDAgfTsKKworICAgICAgICAgICAgZ3Jh ZCA9IGdyYWRpZW50X3RtcCArICh5ZyArIHN0YXJ0KSAqIGdzdHJpZGUgKyB4ZyAqIEFMRl9OVU1f RElSOworICAgICAgICAgICAgLy90b2RvOiBvcHRpbWl6ZSB0aGlzIGxvb3AKKyAgICAgICAgICAg IGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9y IChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtW0FM Rl9ESVJfVkVSVF0gICs9IGdyYWRbQUxGX0RJUl9WRVJUXTsKKyAgICAgICAgICAgICAgICAgICAg c3VtW0FMRl9ESVJfSE9SWl0gICs9IGdyYWRbQUxGX0RJUl9IT1JaXTsKKyAgICAgICAgICAgICAg ICAgICAgc3VtW0FMRl9ESVJfRElHQTBdICs9IGdyYWRbQUxGX0RJUl9ESUdBMF07CisgICAgICAg ICAgICAgICAgICAgIHN1bVtBTEZfRElSX0RJR0ExXSArPSBncmFkW0FMRl9ESVJfRElHQTFdOwor ICAgICAgICAgICAgICAgICAgICBncmFkICs9IEFMRl9OVU1fRElSOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBncmFkICs9IGdzdHJpZGUgLSBzaXplICogQUxGX05VTV9ESVI7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGVU5DKGFsZl9nZXRfaWR4KShjbGFzc19pZHgs IHRyYW5zcG9zZV9pZHgsIHN1bSwgYWMpOworCisgICAgICAgICAgICBjbGFzc19pZHgrKzsKKyAg ICAgICAgICAgIHRyYW5zcG9zZV9pZHgrKzsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdGF0 aWMgdm9pZCBGVU5DKGFsZl9yZWNvbl9jb2VmZl9hbmRfY2xpcCkoaW50OF90ICpjb2VmZiwgaW50 MTZfdCAqY2xpcCwKKyAgICBjb25zdCBpbnQgKmNsYXNzX2lkeCwgY29uc3QgaW50ICp0cmFuc3Bv c2VfaWR4LCBjb25zdCBpbnQgc2l6ZSwKKyAgICBjb25zdCBpbnQ4X3QgKmNvZWZmX3NldCwgY29u c3QgdWludDhfdCAqY2xpcF9pZHhfc2V0LCBjb25zdCB1aW50OF90ICpjbGFzc190b19maWx0KQor eworICAgIGNvbnN0IHN0YXRpYyBpbnQgaW5kZXhbXVtBTEZfTlVNX0NPRUZGX0xVTUFdID0gewor ICAgICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSB9LAorICAgICAg ICB7IDksIDQsIDEwLCA4LCAxLCA1LCAxMSwgNywgMywgMCwgMiwgNiB9LAorICAgICAgICB7IDAs IDMsIDIsIDEsIDgsIDcsIDYsIDUsIDQsIDksIDEwLCAxMSB9LAorICAgICAgICB7IDksIDgsIDEw LCA0LCAzLCA3LCAxMSwgNSwgMSwgMCwgMiwgNiB9LAorICAgIH07CisKKyAgICBjb25zdCBpbnQx Nl90IGNsaXBfc2V0W10gPSB7CisgICAgICAgIDEgPDwgQklUX0RFUFRILCAxIDw8IChCSVRfREVQ VEggLSAzKSwgMSA8PCAoQklUX0RFUFRIIC0gNSksIDEgPDwgKEJJVF9ERVBUSCAtIDcpCisgICAg fTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0 IGludDhfdCAgKnNyY19jb2VmZiA9IGNvZWZmX3NldCArIGNsYXNzX3RvX2ZpbHRbY2xhc3NfaWR4 W2ldXSAqIEFMRl9OVU1fQ09FRkZfTFVNQTsKKyAgICAgICAgY29uc3QgdWludDhfdCAqY2xpcF9p ZHggID0gY2xpcF9pZHhfc2V0ICsgY2xhc3NfaWR4W2ldICogQUxGX05VTV9DT0VGRl9MVU1BOwor CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQUxGX05VTV9DT0VGRl9MVU1BOyBqKyspIHsK KyAgICAgICAgICAgIGNvbnN0IGludCBpZHggPSBpbmRleFt0cmFuc3Bvc2VfaWR4W2ldXVtqXTsK KyAgICAgICAgICAgICpjb2VmZisrID0gc3JjX2NvZWZmW2lkeF07CisgICAgICAgICAgICAqY2xp cCsrICA9IGNsaXBfc2V0W2NsaXBfaWR4W2lkeF1dOworICAgICAgICB9CisgICAgfQorfQorCisj dW5kZWYgQUxGX0RJUl9IT1JaCisjdW5kZWYgQUxGX0RJUl9WRVJUCisjdW5kZWYgQUxGX0RJUl9E SUdBMAorI3VuZGVmIEFMRl9ESVJfRElHQTEKKworLy8gbGluZSB6ZXJvCisjZGVmaW5lIFA3IHBp eFstOCAqIHhzdHJpZGVdCisjZGVmaW5lIFA2IHBpeFstNyAqIHhzdHJpZGVdCisjZGVmaW5lIFA1 IHBpeFstNiAqIHhzdHJpZGVdCisjZGVmaW5lIFA0IHBpeFstNSAqIHhzdHJpZGVdCisjZGVmaW5l IFAzIHBpeFstNCAqIHhzdHJpZGVdCisjZGVmaW5lIFAyIHBpeFstMyAqIHhzdHJpZGVdCisjZGVm aW5lIFAxIHBpeFstMiAqIHhzdHJpZGVdCisjZGVmaW5lIFAwIHBpeFstMSAqIHhzdHJpZGVdCisj ZGVmaW5lIFEwIHBpeFswICogeHN0cmlkZV0KKyNkZWZpbmUgUTEgcGl4WzEgKiB4c3RyaWRlXQor I2RlZmluZSBRMiBwaXhbMiAqIHhzdHJpZGVdCisjZGVmaW5lIFEzIHBpeFszICogeHN0cmlkZV0K KyNkZWZpbmUgUTQgcGl4WzQgKiB4c3RyaWRlXQorI2RlZmluZSBRNSBwaXhbNSAqIHhzdHJpZGVd CisjZGVmaW5lIFE2IHBpeFs2ICogeHN0cmlkZV0KKyNkZWZpbmUgUTcgcGl4WzcgKiB4c3RyaWRl XQorI2RlZmluZSBQKHgpIHBpeFsoLSh4KS0xKSAqIHhzdHJpZGVdCisjZGVmaW5lIFEoeCkgcGl4 Wyh4KSAgICAgICogeHN0cmlkZV0KKworLy8gbGluZSB0aHJlZS4gdXNlZCBvbmx5IGZvciBkZWJs b2NraW5nIGRlY2lzaW9uCisjZGVmaW5lIFRQNyBwaXhbLTggKiB4c3RyaWRlICsgMyAqIHlzdHJp ZGVdCisjZGVmaW5lIFRQNiBwaXhbLTcgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5l IFRQNSBwaXhbLTYgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQNCBwaXhbLTUg KiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMyBwaXhbLTQgKiB4c3RyaWRlICsg MyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQMiBwaXhbLTMgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVd CisjZGVmaW5lIFRQMSBwaXhbLTIgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRQ MCBwaXhbLTEgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMCBwaXhbMCAgKiB4 c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRMSBwaXhbMSAgKiB4c3RyaWRlICsgMyAq IHlzdHJpZGVdCisjZGVmaW5lIFRRMiBwaXhbMiAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisj ZGVmaW5lIFRRMyBwaXhbMyAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNCBw aXhbNCAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNSBwaXhbNSAgKiB4c3Ry aWRlICsgMyAqIHlzdHJpZGVdCisjZGVmaW5lIFRRNiBwaXhbNiAgKiB4c3RyaWRlICsgMyAqIHlz dHJpZGVdCisjZGVmaW5lIFRRNyBwaXhbNyAgKiB4c3RyaWRlICsgMyAqIHlzdHJpZGVdCisjZGVm aW5lIFRQKHgpIHBpeFsoLSh4KS0xKSAqIHhzdHJpZGUgKyAzICogeXN0cmlkZV0KKyNkZWZpbmUg VFEoeCkgcGl4Wyh4KSAgICAgICogeHN0cmlkZSArIDMgKiB5c3RyaWRlXQorCisjZGVmaW5lIEZQ MyBwaXhbLTQgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMiBwaXhbLTMgKiB4 c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZQMSBwaXhbLTIgKiB4c3RyaWRlICsgMSAq IHlzdHJpZGVdCisjZGVmaW5lIEZQMCBwaXhbLTEgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisj ZGVmaW5lIEZRMCBwaXhbMCAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMSBw aXhbMSAgKiB4c3RyaWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMiBwaXhbMiAgKiB4c3Ry aWRlICsgMSAqIHlzdHJpZGVdCisjZGVmaW5lIEZRMyBwaXhbMyAgKiB4c3RyaWRlICsgMSAqIHlz dHJpZGVdCisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2xvb3BfZmlsdGVyX2x1bWEpKHVpbnQ4X3Qq IF9waXgsCisgICAgcHRyZGlmZl90IF94c3RyaWRlLCBwdHJkaWZmX3QgX3lzdHJpZGUsCisgICAg aW50IF9iZXRhLCBpbnQgX3RjLAorICAgIHVpbnQ4X3QgX25vX3AsIHVpbnQ4X3QgX25vX3EsCisg ICAgdWludDhfdCBtYXhfbGVuX3AsIHVpbnQ4X3QgbWF4X2xlbl9xLAorICAgIGludCBob3JfY3R1 X2VkZ2UpCit7CisgICAgaW50IGQ7CisgICAgcGl4ZWwqIHBpeCA9IChwaXhlbCopX3BpeDsKKyAg ICBwdHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBwdHJk aWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKworICAgIGNvbnN0IGlu dCBkcDAgPSBhYnMoUDIgLSAyICogUDEgKyBQMCk7CisgICAgY29uc3QgaW50IGRxMCA9IGFicyhR MiAtIDIgKiBRMSArIFEwKTsKKyAgICBjb25zdCBpbnQgZHAzID0gYWJzKFRQMiAtIDIgKiBUUDEg KyBUUDApOworICAgIGNvbnN0IGludCBkcTMgPSBhYnMoVFEyIC0gMiAqIFRRMSArIFRRMCk7Cisg ICAgY29uc3QgaW50IGQwID0gZHAwICsgZHEwOworICAgIGNvbnN0IGludCBkMyA9IGRwMyArIGRx MzsKKyNpZiBCSVRfREVQVEggPCAxMAorICAgIGNvbnN0IGludCB0YyA9IChfdGMgKyAoMSA8PCAo OSAtIEJJVF9ERVBUSCkpKSA+PiAoMTAgLSBCSVRfREVQVEgpOworI2Vsc2UKKyAgICBjb25zdCBp bnQgdGMgPSBfdGMgPDwgKEJJVF9ERVBUSCAtIDEwKTsKKyNlbmRpZgorICAgIGNvbnN0IGludCBu b19wID0gX25vX3A7CisgICAgY29uc3QgaW50IG5vX3EgPSBfbm9fcTsKKworICAgIGNvbnN0IGlu dCBsYXJnZV9wID0gKG1heF9sZW5fcCA+IDMgJiYgIWhvcl9jdHVfZWRnZSk7CisgICAgY29uc3Qg aW50IGxhcmdlX3EgPSBtYXhfbGVuX3EgPiAzOworICAgIGNvbnN0IGludCBiZXRhID0gX2JldGEg PDwgQklUX0RFUFRIIC0gODsKKworICAgIGNvbnN0IGludCBiZXRhXzMgPSBiZXRhID4+IDM7Cisg ICAgY29uc3QgaW50IGJldGFfMiA9IGJldGEgPj4gMjsKKyAgICBjb25zdCBpbnQgdGMyNSA9ICgo dGMgKiA1ICsgMSkgPj4gMSk7CisKKworICAgIGlmIChsYXJnZV9wIHx8IGxhcmdlX3EpIHsKKyAg ICAgICAgY29uc3QgaW50IGRwMGwgPSBsYXJnZV9wID8gKChkcDAgKyBhYnMoUDUgLSAyICogUDQg KyBQMykgKyAxKSA+PiAxKSA6IGRwMDsKKyAgICAgICAgY29uc3QgaW50IGRxMGwgPSBsYXJnZV9x ID8gKChkcTAgKyBhYnMoUTUgLSAyICogUTQgKyBRMykgKyAxKSA+PiAxKSA6IGRxMDsKKyAgICAg ICAgY29uc3QgaW50IGRwM2wgPSBsYXJnZV9wID8gKChkcDMgKyBhYnMoVFA1IC0gMiAqIFRQNCAr IFRQMykgKyAxKSA+PiAxKSA6IGRwMzsKKyAgICAgICAgY29uc3QgaW50IGRxM2wgPSBsYXJnZV9x ID8gKChkcTMgKyBhYnMoVFE1IC0gMiAqIFRRNCArIFRRMykgKyAxKSA+PiAxKSA6IGRxMzsKKyAg ICAgICAgY29uc3QgaW50IGQwbCA9IGRwMGwgKyBkcTBsOworICAgICAgICBjb25zdCBpbnQgZDNs ID0gZHAzbCArIGRxM2w7CisgICAgICAgIGNvbnN0IGludCBiZXRhNTMgPSBiZXRhICogMyA+PiA1 OworICAgICAgICBjb25zdCBpbnQgYmV0YV80ID0gYmV0YSA+PiA0OworICAgICAgICBtYXhfbGVu X3AgPSBsYXJnZV9wID8gbWF4X2xlbl9wIDogMzsKKyAgICAgICAgbWF4X2xlbl9xID0gbGFyZ2Vf cSA/IG1heF9sZW5fcSA6IDM7CisKKyAgICAgICAgaWYgKGQwbCArIGQzbCA8IGJldGEpIHsKKyAg ICAgICAgICAgIGNvbnN0IGludCBzcDBsID0gYWJzKFAzIC0gUDApICsgKG1heF9sZW5fcCA9PSA3 ID8gYWJzKFA3IC0gUDYgLSBQNSArIFA0KSA6IDApOworICAgICAgICAgICAgY29uc3QgaW50IHNx MGwgPSBhYnMoUTAgLSBRMykgKyAobWF4X2xlbl9xID09IDcgPyBhYnMoUTQgLSBRNSAtIFE2ICsg UTcpIDogMCk7CisgICAgICAgICAgICBjb25zdCBpbnQgc3AzbCA9IGFicyhUUDMgLSBUUDApICsg KG1heF9sZW5fcCA9PSA3ID8gYWJzKFRQNyAtIFRQNiAtIFRQNSArIFRQNCkgOiAwKTsKKyAgICAg ICAgICAgIGNvbnN0IGludCBzcTNsID0gYWJzKFRRMCAtIFRRMykgKyAobWF4X2xlbl9xID09IDcg PyBhYnMoVFE0IC0gVFE1IC0gVFE2ICsgVFE3KSA6IDApOworICAgICAgICAgICAgY29uc3QgaW50 IHNwMCA9IGxhcmdlX3AgPyAoKHNwMGwgKyBhYnMoUDMgLSAgIFAobWF4X2xlbl9wKSkgKyAxKSA+ PiAxKSA6IHNwMGw7CisgICAgICAgICAgICBjb25zdCBpbnQgc3AzID0gbGFyZ2VfcCA/ICgoc3Az bCArIGFicyhUUDMgLSBUUChtYXhfbGVuX3ApKSArIDEpID4+IDEpIDogc3AzbDsKKyAgICAgICAg ICAgIGNvbnN0IGludCBzcTAgPSBsYXJnZV9xID8gKChzcTBsICsgYWJzKFEzIC0gICBRKG1heF9s ZW5fcSkpICsgMSkgPj4gMSkgOiBzcTBsOworICAgICAgICAgICAgY29uc3QgaW50IHNxMyA9IGxh cmdlX3EgPyAoKHNxM2wgKyBhYnMoVFEzIC0gVFEobWF4X2xlbl9xKSkgKyAxKSA+PiAxKSA6IHNx M2w7CisgICAgICAgICAgICBpZiAoc3AwICsgc3EwIDwgYmV0YTUzICYmIGFicyhQMCAtIFEwKSA8 IHRjMjUgJiYKKyAgICAgICAgICAgICAgICBzcDMgKyBzcTMgPCBiZXRhNTMgJiYgYWJzKFRQMCAt IFRRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAgICAgKGQwbCA8PCAxKSA8IGJldGFfNCAmJiAo ZDNsIDw8IDEpIDwgYmV0YV80KSB7CisgICAgICAgICAgICAgICAgZm9yIChkID0gMDsgZCA8IDQ7 IGQrKykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDYgPSBQNjsKKyAgICAgICAg ICAgICAgICAgICAgY29uc3QgaW50IHA1ID0gUDU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCBwNCA9IFA0OworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDMgPSBQMzsKKyAg ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAgICAgICAgICAgICAg IGNvbnN0IGludCBwMSA9IFAxOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgcDAgPSBQ MDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGludCBxMSA9IFExOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQg cTIgPSBRMjsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHEzID0gUTM7CisgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGludCBxNCA9IFE0OworICAgICAgICAgICAgICAgICAgICBjb25z dCBpbnQgcTUgPSBRNTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHE2ID0gUTY7Cisg ICAgICAgICAgICAgICAgICAgIGludCBtOworICAgICAgICAgICAgICAgICAgICBpZiAobWF4X2xl bl9wID09IDUgJiYgbWF4X2xlbl9xID09IDUpCisgICAgICAgICAgICAgICAgICAgICAgICBtID0g KHA0ICsgcDMgKyAyICogKHAyICsgcDEgKyBwMCArIHEwICsgcTEgKyBxMikgKyBxMyArIHE0ICsg OCkgPj4gNDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wID09IG1heF9s ZW5fcSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAocDYgKyBwNSArIHA0ICsgcDMgKyBw MiArIHAxICsgMiAqIChwMCArIHEwKSArIHExICsgcTIgKyBxMyArIHE0ICsgcTUgKyBxNiArIDgp ID4+IDQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heF9sZW5fcCArIG1heF9sZW5f cSA9PSAxMikKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAocDUgKyBwNCArIHAzICsgcDIg KyAyICogKHAxICsgcDAgKyBxMCArIHExKSArIHEyICsgcTMgKyBxNCArIHE1ICsgOCkgPj4gNDsK KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF4X2xlbl9wICsgbWF4X2xlbl9xID09IDgp CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gKHAzICsgcDIgKyBwMSArIHAwICsgcTAgKyBx MSArIHEyICsgcTMgKyA0KSA+PiAzOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXhf bGVuX3EgPT0gNykKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAoMiAqIChwMiArIHAxICsg cDAgKyBxMCkgKyBwMCArIHAxICsgcTEgKyBxMiArIHEzICsgcTQgKyBxNSArIHE2ICsgOCkgPj4g NDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbSA9 IChwNiArIHA1ICsgcDQgKyBwMyArIHAyICsgcDEgKyAyICogKHEyICsgcTEgKyBxMCArIHAwKSAr IHEwICsgcTEgKyA4KSA+PiA0OworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vX3ApIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZwID0gKFAobWF4X2xlbl9wKSArIFAo bWF4X2xlbl9wIC0gMSkgKyAxKSA+PiAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1h eF9sZW5fcCA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDAgPSBwMCArIGF2 X2NsaXAoKChtICogNTMgKyByZWZwICogMTEgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAqIDYgPj4g MSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAxID0gcDEg KyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcCAqIDMyICsgMzIpID4+IDYpIC0gcDEsIC0odGMgKiA0 ID4+IDEpLCAodGMgKiA0ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMiA9 IHAyICsgYXZfY2xpcCgoKG0gKiAxMSArIHJlZnAgKiA1MyArIDMyKSA+PiA2KSAtIHAyLCAtKHRj ICogMiA+PiAxKSwgKHRjICogMiA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKG1heF9sZW5fcCA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDAg PSBwMCArIGF2X2NsaXAoKChtICogNTggKyByZWZwICogIDYgKyAzMikgPj4gNikgLSBwMCwgLSh0 YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IFAxID0gcDEgKyBhdl9jbGlwKCgobSAqIDQ1ICsgcmVmcCAqIDE5ICsgMzIpID4+IDYpIC0gcDEs IC0odGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKG0gKiAzMiArIHJlZnAgKiAzMiArIDMyKSA+PiA2KSAt IHAyLCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMTkgKyByZWZwICogNDUgKyAzMikgPj4g NikgLSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgobSAqICA2ICsgcmVmcCAqIDU4ICsgMzIp ID4+IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDAgPSBw MCArIGF2X2NsaXAoKChtICogNTkgKyByZWZwICogIDUgKyAzMikgPj4gNikgLSBwMCwgLSh0YyAq IDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAx ID0gcDEgKyBhdl9jbGlwKCgobSAqIDUwICsgcmVmcCAqIDE0ICsgMzIpID4+IDYpIC0gcDEsIC0o dGMgKiA1ID4+IDEpLCAodGMgKiA1ID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQMiA9IHAyICsgYXZfY2xpcCgoKG0gKiA0MSArIHJlZnAgKiAyMyArIDMyKSA+PiA2KSAtIHAy LCAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUDMgPSBwMyArIGF2X2NsaXAoKChtICogMzIgKyByZWZwICogMzIgKyAzMikgPj4gNikg LSBwMywgLSh0YyAqIDMgPj4gMSksICh0YyAqIDMgPj4gMSkpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFA0ID0gcDQgKyBhdl9jbGlwKCgobSAqIDIzICsgcmVmcCAqIDQxICsgMzIpID4+ IDYpIC0gcDQsIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQNSA9IHA1ICsgYXZfY2xpcCgoKG0gKiAxNCArIHJlZnAgKiA1MCArIDMy KSA+PiA2KSAtIHA1LCAtKHRjICogMSA+PiAxKSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUDYgPSBwNiArIGF2X2NsaXAoKChtICogIDUgKyByZWZwICogNTkg KyAzMikgPj4gNikgLSBwNiwgLSh0YyAqIDEgPj4gMSksICh0YyAqIDEgPj4gMSkpOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHJl ZnEgPSAoUShtYXhfbGVuX3EpICsgUShtYXhfbGVuX3EgLSAxKSArIDEpID4+IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAobWF4X2xlbl9xID09IDMpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1MyArIHJlZnEgKiAxMSArIDMyKSA+ PiA2KSAtIHEwLCAgLSh0YyAqIDYgPj4gMSksICh0YyAqIDYgPj4gMSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFExID0gcTEgKyBhdl9jbGlwKCgobSAqIDMyICsgcmVmcSAqIDMyICsg MzIpID4+IDYpIC0gcTEsICAtKHRjICogNCA+PiAxKSwgKHRjICogNCA+PiAxKSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUTIgPSBxMiArIGF2X2NsaXAoKChtICogMTEgKyByZWZxICog NTMgKyAzMikgPj4gNikgLSBxMiwgIC0odGMgKiAyID4+IDEpLCAodGMgKiAyID4+IDEpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4X2xlbl9xID09IDUpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1OCArIHJlZnEg KiAgNiArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChtICogNDUgKyBy ZWZxICogMTkgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDMy ICsgcmVmcSAqIDMyICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+ IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0g KiAxOSArIHJlZnEgKiA0NSArIDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICog MyA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAo KChtICogIDYgKyByZWZxICogNTggKyAzMikgPj4gNikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0 YyAqIDIgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRMCA9IHEwICsgYXZfY2xpcCgoKG0gKiA1OSArIHJlZnEgKiAg NSArIDMyKSA+PiA2KSAtIHEwLCAtKHRjICogNiA+PiAxKSwgKHRjICogNiA+PiAxKSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2NsaXAoKChtICogNTAgKyByZWZx ICogMTQgKyAzMikgPj4gNikgLSBxMSwgLSh0YyAqIDUgPj4gMSksICh0YyAqIDUgPj4gMSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgobSAqIDQxICsg cmVmcSAqIDIzICsgMzIpID4+IDYpIC0gcTIsIC0odGMgKiA0ID4+IDEpLCAodGMgKiA0ID4+IDEp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRMyA9IHEzICsgYXZfY2xpcCgoKG0gKiAz MiArIHJlZnEgKiAzMiArIDMyKSA+PiA2KSAtIHEzLCAtKHRjICogMyA+PiAxKSwgKHRjICogMyA+ PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUTQgPSBxNCArIGF2X2NsaXAoKCht ICogMjMgKyByZWZxICogNDEgKyAzMikgPj4gNikgLSBxNCwgLSh0YyAqIDIgPj4gMSksICh0YyAq IDIgPj4gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFE1ID0gcTUgKyBhdl9jbGlw KCgobSAqIDE0ICsgcmVmcSAqIDUwICsgMzIpID4+IDYpIC0gcTUsIC0odGMgKiAxID4+IDEpLCAo dGMgKiAxID4+IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRNiA9IHE2ICsgYXZf Y2xpcCgoKG0gKiAgNSArIHJlZnEgKiA1OSArIDMyKSA+PiA2KSAtIHE2LCAtKHRjICogMSA+PiAx KSwgKHRjICogMSA+PiAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZDAgKyBkMyA8IGJldGEpIHsKKyAgICAgICAgaWYg KG1heF9sZW5fcCA+IDIgJiYgbWF4X2xlbl9xID4gMiAmJgorICAgICAgICAgICAgYWJzKFAzIC0g UDApICsgYWJzKFEzIC0gUTApIDwgYmV0YV8zICYmIGFicyhQMCAtIFEwKSA8IHRjMjUgJiYKKyAg ICAgICAgICAgIGFicyhUUDMgLSBUUDApICsgYWJzKFRRMyAtIFRRMCkgPCBiZXRhXzMgJiYgYWJz KFRQMCAtIFRRMCkgPCB0YzI1ICYmCisgICAgICAgICAgICAoZDAgPDwgMSkgPCBiZXRhXzIgJiYg KGQzIDw8IDEpIDwgYmV0YV8yKSB7CisgICAgICAgICAgICAvLyBzdHJvbmcgZmlsdGVyaW5nCisg ICAgICAgICAgICBjb25zdCBpbnQgdGMyID0gdGMgPDwgMTsKKyAgICAgICAgICAgIGNvbnN0IGlu dCB0YzMgPSB0YyAqIDM7CisgICAgICAgICAgICBmb3IgKGQgPSAwOyBkIDwgNDsgZCsrKSB7Cisg ICAgICAgICAgICAgICAgY29uc3QgaW50IHAzID0gUDM7CisgICAgICAgICAgICAgICAgY29uc3Qg aW50IHAyID0gUDI7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IHAwID0gUDA7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHEw ID0gUTA7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgICAgICAg ICAgY29uc3QgaW50IHEyID0gUTI7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHEzID0gUTM7 CisgICAgICAgICAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICAgICAgICAgIFAwID0g cDAgKyBhdl9jbGlwKCgocDIgKyAyICogcDEgKyAyICogcDAgKyAyICogcTAgKyBxMSArIDQpID4+ IDMpIC0gcDAsIC10YzMsIHRjMyk7CisgICAgICAgICAgICAgICAgICAgIFAxID0gcDEgKyBhdl9j bGlwKCgocDIgKyBwMSArIHAwICsgcTAgKyAyKSA+PiAyKSAtIHAxLCAtdGMyLCB0YzIpOworICAg ICAgICAgICAgICAgICAgICBQMiA9IHAyICsgYXZfY2xpcCgoKDIgKiBwMyArIDMgKiBwMiArIHAx ICsgcDAgKyBxMCArIDQpID4+IDMpIC0gcDIsIC10YywgdGMpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBpZiAoIW5vX3EpIHsKKyAgICAgICAgICAgICAgICAgICAgUTAgPSBx MCArIGF2X2NsaXAoKChwMSArIDIgKiBwMCArIDIgKiBxMCArIDIgKiBxMSArIHEyICsgNCkgPj4g MykgLSBxMCwgLXRjMywgdGMzKTsKKyAgICAgICAgICAgICAgICAgICAgUTEgPSBxMSArIGF2X2Ns aXAoKChwMCArIHEwICsgcTEgKyBxMiArIDIpID4+IDIpIC0gcTEsIC10YzIsIHRjMik7CisgICAg ICAgICAgICAgICAgICAgIFEyID0gcTIgKyBhdl9jbGlwKCgoMiAqIHEzICsgMyAqIHEyICsgcTEg KyBxMCArIHAwICsgNCkgPj4gMykgLSBxMiwgLXRjLCB0Yyk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeyAvLyB3ZWFrIGZpbHRlcmluZworICAgICAgICAgICAgaW50IG5kX3AgPSAxOworICAg ICAgICAgICAgaW50IG5kX3EgPSAxOworICAgICAgICAgICAgY29uc3QgaW50IHRjXzIgPSB0YyA+ PiAxOworICAgICAgICAgICAgaWYgKG1heF9sZW5fcCA+IDEgJiYgbWF4X2xlbl9xID4gMSkgewor ICAgICAgICAgICAgICAgIGlmIChkcDAgKyBkcDMgPCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4g MykpCisgICAgICAgICAgICAgICAgICAgIG5kX3AgPSAyOworICAgICAgICAgICAgICAgIGlmIChk cTAgKyBkcTMgPCAoKGJldGEgKyAoYmV0YSA+PiAxKSkgPj4gMykpCisgICAgICAgICAgICAgICAg ICAgIG5kX3EgPSAyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGQgPSAwOyBk IDwgNDsgZCsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAg ICAgICAgICAgY29uc3QgaW50IHAxID0gUDE7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHAw ID0gUDA7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgICAgICAg ICAgY29uc3QgaW50IHExID0gUTE7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHEyID0gUTI7 CisgICAgICAgICAgICAgICAgaW50IGRlbHRhMCA9ICg5ICogKHEwIC0gcDApIC0gMyAqIChxMSAt IHAxKSArIDgpID4+IDQ7CisgICAgICAgICAgICAgICAgaWYgKGFicyhkZWx0YTApIDwgMTAgKiB0 YykgeworICAgICAgICAgICAgICAgICAgICBkZWx0YTAgPSBhdl9jbGlwKGRlbHRhMCwgLXRjLCB0 Yyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAgICAgICAgICAgICAg ICAgIFAwID0gYXZfY2xpcF9waXhlbChwMCArIGRlbHRhMCk7CisgICAgICAgICAgICAgICAgICAg IGlmICghbm9fcSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFEwID0gYXZfY2xpcF9waXhlbChx MCAtIGRlbHRhMCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9fcCAmJiBuZF9wID4gMSkg eworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGRlbHRhcDEgPSBhdl9jbGlwKCgo KHAyICsgcDAgKyAxKSA+PiAxKSAtIHAxICsgZGVsdGEwKSA+PiAxLCAtdGNfMiwgdGNfMik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBQMSA9IGF2X2NsaXBfcGl4ZWwocDEgKyBkZWx0YXAxKTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vX3EgJiYg bmRfcSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBkZWx0YXExID0g YXZfY2xpcCgoKChxMiArIHEwICsgMSkgPj4gMSkgLSBxMSAtIGRlbHRhMCkgPj4gMSwgLXRjXzIs IHRjXzIpOworICAgICAgICAgICAgICAgICAgICAgICAgUTEgPSBhdl9jbGlwX3BpeGVsKHExICsg ZGVsdGFxMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgcGl4ICs9IHlzdHJpZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkIEZVTkModnZjX2xvb3BfZmlsdGVyX2Nocm9tYSkodWludDhf dCAqX3BpeCwgY29uc3QgcHRyZGlmZl90ICBfeHN0cmlkZSwKKyAgICBjb25zdCBwdHJkaWZmX3Qg X3lzdHJpZGUsIGNvbnN0IGludCBfYmV0YSwgY29uc3QgaW50IF90YywgY29uc3QgdWludDhfdCBu b19wLCBjb25zdCB1aW50OF90IG5vX3EsCisgICAgY29uc3QgaW50IHNoaWZ0LCAgaW50IG1heF9s ZW5fcCwgaW50IG1heF9sZW5fcSkKK3sKKyAgICBwaXhlbCAqcGl4ICAgICAgICA9IChwaXhlbCAq KV9waXg7CisgICAgY29uc3QgcHRyZGlmZl90IHhzdHJpZGUgPSBfeHN0cmlkZSAvIHNpemVvZihw aXhlbCk7CisgICAgY29uc3QgcHRyZGlmZl90IHlzdHJpZGUgPSBfeXN0cmlkZSAvIHNpemVvZihw aXhlbCk7CisgICAgY29uc3QgaW50IGVuZCAgPSBzaGlmdCA/IDIgOiA0OworICAgIGNvbnN0IGlu dCBiZXRhID0gX2JldGEgPDwgKEJJVF9ERVBUSCAtIDgpOworICAgIGNvbnN0IGludCBiZXRhXzMg PSBiZXRhID4+IDM7CisgICAgY29uc3QgaW50IGJldGFfMiA9IGJldGEgPj4gMjsKKworI2lmIEJJ VF9ERVBUSCA8IDEwCisgICAgY29uc3QgaW50IHRjID0gKF90YyArICgxIDw8ICg5IC0gQklUX0RF UFRIKSkpID4+ICgxMCAtIEJJVF9ERVBUSCk7CisjZWxzZQorICAgIGNvbnN0IGludCB0YyA9IF90 YyA8PCAoQklUX0RFUFRIIC0gMTApOworI2VuZGlmCisgICAgY29uc3QgaW50IHRjMjUgPSAoKHRj ICogNSArIDEpID4+IDEpOworCisgICAgaWYgKCFtYXhfbGVuX3AgfHwgIW1heF9sZW5fcSkKKyAg ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1heF9sZW5fcSA9PSAzKXsKKyAgICAgICAgY29uc3Qg aW50IHAxbiAgPSBzaGlmdCA/IEZQMSA6IFRQMTsKKyAgICAgICAgY29uc3QgaW50IHAybiA9IG1h eF9sZW5fcCA9PSAxID8gcDFuIDogKHNoaWZ0ID8gRlAyIDogVFAyKTsKKyAgICAgICAgY29uc3Qg aW50IHAwbiAgPSBzaGlmdCA/IEZQMCA6IFRQMDsKKyAgICAgICAgY29uc3QgaW50IHEwbiAgPSBz aGlmdCA/IEZRMCA6IFRRMDsKKyAgICAgICAgY29uc3QgaW50IHExbiAgPSBzaGlmdCA/IEZRMSA6 IFRRMTsKKyAgICAgICAgY29uc3QgaW50IHEybiAgPSBzaGlmdCA/IEZRMiA6IFRRMjsKKyAgICAg ICAgY29uc3QgaW50IHAzICAgPSBtYXhfbGVuX3AgPT0gMSA/IFAxIDogUDM7CisgICAgICAgIGNv bnN0IGludCBwMiAgID0gbWF4X2xlbl9wID09IDEgPyBQMSA6IFAyOworICAgICAgICBjb25zdCBp bnQgcDEgICA9IFAxOworICAgICAgICBjb25zdCBpbnQgcDAgICA9IFAwOworICAgICAgICBjb25z dCBpbnQgZHAwICA9IGFicyhwMiAtIDIgKiBwMSArIHAwKTsKKyAgICAgICAgY29uc3QgaW50IGRx MCAgPSBhYnMoUTIgLSAyICogUTEgKyBRMCk7CisKKyAgICAgICAgY29uc3QgaW50IGRwMSA9IGFi cyhwMm4gLSAyICogcDFuICsgcDBuKTsKKyAgICAgICAgY29uc3QgaW50IGRxMSA9IGFicyhxMm4g LSAyICogcTFuICsgcTBuKTsKKyAgICAgICAgY29uc3QgaW50IGQwICA9IGRwMCArIGRxMDsKKyAg ICAgICAgY29uc3QgaW50IGQxICA9IGRwMSArIGRxMTsKKworICAgICAgICBpZiAoZDAgKyBkMSA8 IGJldGEpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwM24gPSBtYXhfbGVuX3AgPT0gMSA/IHAx biA6IChzaGlmdCA/IEZQMyA6IFRQMyk7CisgICAgICAgICAgICBjb25zdCBpbnQgcTNuID0gc2hp ZnQgPyBGUTMgOiBUUTM7CisgICAgICAgICAgICBjb25zdCBpbnQgZHNhbTAgPSAoZDAgPDwgMSkg PCBiZXRhXzIgJiYgKGFicyhwMyAtIHAwKSArIGFicyhRMCAtIFEzKSAgICAgPCBiZXRhXzMpICYm CisgICAgICAgICAgICAgICAgYWJzKHAwIC0gUTApICAgPCB0YzI1OworICAgICAgICAgICAgY29u c3QgaW50IGRzYW0xID0gKGQxIDw8IDEpIDwgYmV0YV8yICYmIChhYnMocDNuIC0gcDBuKSArIGFi cyhxMG4gLSBxM24pIDwgYmV0YV8zKSAmJgorICAgICAgICAgICAgICAgIGFicyhwMG4gLSBxMG4p IDwgdGMyNTsKKyAgICAgICAgICAgIGlmICghZHNhbTAgfHwgIWRzYW0xKQorICAgICAgICAgICAg ICAgIG1heF9sZW5fcCA9IG1heF9sZW5fcSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBtYXhfbGVuX3AgPSBtYXhfbGVuX3EgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAg aWYgKG1heF9sZW5fcCA9PSAzICYmIG1heF9sZW5fcSA9PSAzKSB7CisgICAgICAgIC8vc3Ryb25n CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZW5kOyBkKyspIHsKKyAgICAgICAgICAgIGNv bnN0IGludCBwMyA9IFAzOworICAgICAgICAgICAgY29uc3QgaW50IHAyID0gUDI7CisgICAgICAg ICAgICBjb25zdCBpbnQgcDEgPSBQMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOwor ICAgICAgICAgICAgY29uc3QgaW50IHEwID0gUTA7CisgICAgICAgICAgICBjb25zdCBpbnQgcTEg PSBRMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBxMiA9IFEyOworICAgICAgICAgICAgY29uc3Qg aW50IHEzID0gUTM7CisgICAgICAgICAgICBpZiAoIW5vX3ApIHsKKyAgICAgICAgICAgICAgICBQ MCA9IGF2X2NsaXAoKHAzICsgcDIgKyBwMSArIDIgKiBwMCArIHEwICsgcTEgKyBxMiArIDQpID4+ IDMsIHAwIC0gdGMsIHAwICsgdGMpOworICAgICAgICAgICAgICAgIFAxID0gYXZfY2xpcCgoMiAq IHAzICsgcDIgKyAyICogcDEgKyBwMCArIHEwICsgcTEgKyA0KSA+PiAzLCBwMSAtIHRjLCBwMSAr IHRjKTsKKyAgICAgICAgICAgICAgICBQMiA9IGF2X2NsaXAoKDMgKiBwMyArIDIgKiBwMiArIHAx ICsgcDAgKyBxMCArIDQpID4+IDMsIHAyIC0gdGMsIHAyICsgdGMgKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICghbm9fcSkgeworICAgICAgICAgICAgICAgIFEwID0gYXZfY2xpcCgo cDIgKyBwMSArIHAwICsgMiAqIHEwICsgcTEgKyBxMiArIHEzICsgNCkgPj4gMywgcTAgLSB0Yywg cTAgKyB0Yyk7CisgICAgICAgICAgICAgICAgUTEgPSBhdl9jbGlwKChwMSArIHAwICsgcTAgKyAy ICogcTEgKyBxMiArIDIgKiBxMyArIDQpID4+IDMsIHExIC0gdGMsIHExICsgdGMpOworICAgICAg ICAgICAgICAgIFEyID0gYXZfY2xpcCgocDAgKyBxMCArIHExICsgMiAqIHEyICsgMyAqIHEzICsg NCkgPj4gMywgcTIgLSB0YywgcTIgKyB0Yyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw aXggKz0geXN0cmlkZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobWF4X2xlbl9xID09IDMp IHsKKyAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBlbmQ7IGQrKykgeworICAgICAgICAgICAg Y29uc3QgaW50IHAxID0gUDE7CisgICAgICAgICAgICBjb25zdCBpbnQgcDAgPSBQMDsKKyAgICAg ICAgICAgIGNvbnN0IGludCBxMCA9IFEwOworICAgICAgICAgICAgY29uc3QgaW50IHExID0gUTE7 CisgICAgICAgICAgICBjb25zdCBpbnQgcTIgPSBRMjsKKyAgICAgICAgICAgIGNvbnN0IGludCBx MyA9IFEzOworICAgICAgICAgICAgaWYgKCFub19wKSB7CisgICAgICAgICAgICAgICAgUDAgPSBh dl9jbGlwKCgzICogcDEgKyAyICogcDAgKyBxMCArIHExICsgcTIgKyA0KSA+PiAzLCBwMCAtIHRj LCBwMCArIHRjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbm9fcSkgeworICAg ICAgICAgICAgICAgIFEwID0gYXZfY2xpcCgoMiAqIHAxICsgcDAgKyAyICogcTAgKyBxMSArIHEy ICsgcTMgKyA0KSA+PiAzLCBxMCAtIHRjLCBxMCArIHRjKTsKKyAgICAgICAgICAgICAgICBRMSA9 IGF2X2NsaXAoKHAxICsgcDAgKyBxMCArIDIgKiBxMSArIHEyICsgMiAqIHEzICsgNCkgPj4gMywg cTEgLSB0YywgcTEgKyB0Yyk7CisgICAgICAgICAgICAgICAgUTIgPSBhdl9jbGlwKChwMCArIHEw ICsgcTEgKyAyICogcTIgKyAzICogcTMgKyA0KSA+PiAzLCBxMiAtIHRjLCBxMiArIHRjKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHBpeCArPSB5c3RyaWRlOworICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgLy93ZWFrCisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZW5k OyBkKyspIHsKKyAgICAgICAgICAgIGludCBkZWx0YTA7CisgICAgICAgICAgICBjb25zdCBpbnQg cDEgPSBQMTsKKyAgICAgICAgICAgIGNvbnN0IGludCBwMCA9IFAwOworICAgICAgICAgICAgY29u c3QgaW50IHEwID0gUTA7CisgICAgICAgICAgICBjb25zdCBpbnQgcTEgPSBRMTsKKyAgICAgICAg ICAgIGRlbHRhMCA9IGF2X2NsaXAoKCgocTAgLSBwMCkgKiA0KSArIHAxIC0gcTEgKyA0KSA+PiAz LCAtdGMsIHRjKTsKKyAgICAgICAgICAgIGlmICghbm9fcCkKKyAgICAgICAgICAgICAgICBQMCA9 IGF2X2NsaXBfcGl4ZWwocDAgKyBkZWx0YTApOworICAgICAgICAgICAgaWYgKCFub19xKQorICAg ICAgICAgICAgICAgIFEwID0gYXZfY2xpcF9waXhlbChxMCAtIGRlbHRhMCk7CisgICAgICAgICAg ICBwaXggKz0geXN0cmlkZTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgRlVO Qyh2dmNfaF9sb29wX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlk ZSwKKyAgICBpbnQgYmV0YSwgaW50MzJfdCB0YywgdWludDhfdCBub19wLCB1aW50OF90IG5vX3Es IGludCBzaGlmdCwgaW50IG1heF9sZW5fcCwgaW50IG1heF9sZW5fcSkKK3sKKyAgICBGVU5DKHZ2 Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHBpeCwgc3RyaWRlLCBzaXplb2YocGl4ZWwpLCBiZXRhLCB0 Yywgbm9fcCwgbm9fcSwgc2hpZnQsIG1heF9sZW5fcCwgbWF4X2xlbl9xKTsKK30KKworc3RhdGlj IHZvaWQgRlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9jaHJvbWEpKHVpbnQ4X3QgKnBpeCwgcHRyZGlm Zl90IHN0cmlkZSwKKyAgICBpbnQgYmV0YSwgaW50MzJfdCB0YywgdWludDhfdCBub19wLCB1aW50 OF90IG5vX3EsIGludCBzaGlmdCwgaW50IG1heF9sZW5fcCwgaW50IG1heF9sZW5fcSkKK3sKKyAg ICBGVU5DKHZ2Y19sb29wX2ZpbHRlcl9jaHJvbWEpKHBpeCwgc2l6ZW9mKHBpeGVsKSwgc3RyaWRl LCBiZXRhLCB0Yywgbm9fcCwgbm9fcSwgc2hpZnQsIG1heF9sZW5fcCwgbWF4X2xlbl9xKTsKK30K Kworc3RhdGljIHZvaWQgRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9sdW1hKSh1aW50OF90ICpwaXgs IHB0cmRpZmZfdCBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgYmV0YSwgaW50MzJfdCB0YywgdWludDhfdCBub19wLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBub19xLCB1aW50OF90IG1heF9sZW5f cCwgdWludDhfdCBtYXhfbGVuX3EsIGludCBob3JfY3R1X2VkZ2UpCit7CisgICAgRlVOQyh2dmNf bG9vcF9maWx0ZXJfbHVtYSkocGl4LCBzdHJpZGUsIHNpemVvZihwaXhlbCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJldGEsIHRjLCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1h eF9sZW5fcSwgaG9yX2N0dV9lZGdlKTsKK30KKworc3RhdGljIHZvaWQgRlVOQyh2dmNfdl9sb29w X2ZpbHRlcl9sdW1hKSh1aW50OF90ICpwaXgsIHB0cmRpZmZfdCBzdHJpZGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmV0YSwgaW50MzJfdCB0YywgdWlu dDhfdCBub19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCBub19xLCB1aW50OF90IG1heF9sZW5fcCwgdWludDhfdCBtYXhfbGVuX3EsIGludCBob3Jf Y3R1X2VkZ2UpCit7CisgICAgRlVOQyh2dmNfbG9vcF9maWx0ZXJfbHVtYSkocGl4LCBzaXplb2Yo cGl4ZWwpLCBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldGEsIHRj LCBub19wLCBub19xLCBtYXhfbGVuX3AsIG1heF9sZW5fcSwgaG9yX2N0dV9lZGdlKTsKK30KKwor c3RhdGljIGludCBGVU5DKHZ2Y19sb29wX2xhZGZfbGV2ZWwpKGNvbnN0IHVpbnQ4X3QgKl9waXgs IGNvbnN0IHB0cmRpZmZfdCBfeHN0cmlkZSwgY29uc3QgcHRyZGlmZl90IF95c3RyaWRlKQorewor ICAgIGNvbnN0IHBpeGVsICpwaXggICAgICAgID0gKHBpeGVsICopX3BpeDsKKyAgICBjb25zdCBw dHJkaWZmX3QgeHN0cmlkZSA9IF94c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICBjb25zdCBw dHJkaWZmX3QgeXN0cmlkZSA9IF95c3RyaWRlIC8gc2l6ZW9mKHBpeGVsKTsKKyAgICByZXR1cm4g KFAwICsgVFAwICsgUTAgKyBUUTApID4+IDI7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNfaF9s b29wX2xhZGZfbGV2ZWwpKGNvbnN0IHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSkKK3sK KyAgICByZXR1cm4gRlVOQyh2dmNfbG9vcF9sYWRmX2xldmVsKShwaXgsIHN0cmlkZSwgc2l6ZW9m KHBpeGVsKSk7Cit9CisKK3N0YXRpYyBpbnQgRlVOQyh2dmNfdl9sb29wX2xhZGZfbGV2ZWwpKGNv bnN0IHVpbnQ4X3QgKnBpeCwgcHRyZGlmZl90IHN0cmlkZSkKK3sKKyAgICByZXR1cm4gRlVOQyh2 dmNfbG9vcF9sYWRmX2xldmVsKShwaXgsIHNpemVvZihwaXhlbCksIHN0cmlkZSk7Cit9CisKKyN1 bmRlZiBQNworI3VuZGVmIFA2CisjdW5kZWYgUDUKKyN1bmRlZiBQNAorI3VuZGVmIFAzCisjdW5k ZWYgUDIKKyN1bmRlZiBQMQorI3VuZGVmIFAwCisjdW5kZWYgUTAKKyN1bmRlZiBRMQorI3VuZGVm IFEyCisjdW5kZWYgUTMKKyN1bmRlZiBRNAorI3VuZGVmIFE1CisjdW5kZWYgUTYKKyN1bmRlZiBR NworCisjdW5kZWYgVFA3CisjdW5kZWYgVFA2CisjdW5kZWYgVFA1CisjdW5kZWYgVFA0CisjdW5k ZWYgVFAzCisjdW5kZWYgVFAyCisjdW5kZWYgVFAxCisjdW5kZWYgVFAwCisjdW5kZWYgVFEwCisj dW5kZWYgVFExCisjdW5kZWYgVFEyCisjdW5kZWYgVFEzCisjdW5kZWYgVFE0CisjdW5kZWYgVFE1 CisjdW5kZWYgVFE2CisjdW5kZWYgVFE3CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZjX2xtY3Nf ZHNwX2luaXQpKFZWQ0xNQ1NEU1BDb250ZXh0ICpjb25zdCBsbWNzKQoreworICAgIGxtY3MtPmZp bHRlciA9IEZVTkMobG1jc19maWx0ZXJfbHVtYSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZf dnZjX2xmX2RzcF9pbml0KShWVkNMRkRTUENvbnRleHQgKmNvbnN0IGxmKQoreworICAgIGxmLT5s YWRmX2xldmVsWzBdICAgICAgPSBGVU5DKHZ2Y19oX2xvb3BfbGFkZl9sZXZlbCk7CisgICAgbGYt PmxhZGZfbGV2ZWxbMV0gICAgICA9IEZVTkModnZjX3ZfbG9vcF9sYWRmX2xldmVsKTsKKyAgICBs Zi0+ZmlsdGVyX2x1bWFbMF0gICAgID0gRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9sdW1hKTsKKyAg ICBsZi0+ZmlsdGVyX2x1bWFbMV0gICAgID0gRlVOQyh2dmNfdl9sb29wX2ZpbHRlcl9sdW1hKTsK KyAgICBsZi0+ZmlsdGVyX2Nocm9tYVswXSAgID0gRlVOQyh2dmNfaF9sb29wX2ZpbHRlcl9jaHJv bWEpOworICAgIGxmLT5maWx0ZXJfY2hyb21hWzFdICAgPSBGVU5DKHZ2Y192X2xvb3BfZmlsdGVy X2Nocm9tYSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZfdnZjX3Nhb19kc3BfaW5pdCkoVlZD U0FPRFNQQ29udGV4dCAqY29uc3Qgc2FvKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVMoc2FvLT5iYW5kX2ZpbHRlcik7IGkrKykKKyAgICAgICAgc2FvLT5iYW5kX2Zp bHRlcltpXSA9IEZVTkMoc2FvX2JhbmRfZmlsdGVyKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHNhby0+ZWRnZV9maWx0ZXIpOyBpKyspCisgICAgICAgIHNhby0+ZWRn ZV9maWx0ZXJbaV0gPSBGVU5DKHNhb19lZGdlX2ZpbHRlcik7CisgICAgc2FvLT5lZGdlX3Jlc3Rv cmVbMF0gPSBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMCk7CisgICAgc2FvLT5lZGdlX3Jlc3RvcmVb MV0gPSBGVU5DKHNhb19lZGdlX3Jlc3RvcmVfMSk7Cit9CisKK3N0YXRpYyB2b2lkIEZVTkMoZmZf dnZjX2FsZl9kc3BfaW5pdCkoVlZDQUxGRFNQQ29udGV4dCAqY29uc3QgYWxmKQoreworICAgIGFs Zi0+ZmlsdGVyW0xVTUFdICAgICAgID0gRlVOQyhhbGZfZmlsdGVyX2x1bWEpOworICAgIGFsZi0+ ZmlsdGVyW0NIUk9NQV0gICAgID0gRlVOQyhhbGZfZmlsdGVyX2Nocm9tYSk7CisgICAgYWxmLT5m aWx0ZXJfdmJbTFVNQV0gICAgPSBGVU5DKGFsZl9maWx0ZXJfbHVtYV92Yik7CisgICAgYWxmLT5m aWx0ZXJfdmJbQ0hST01BXSAgPSBGVU5DKGFsZl9maWx0ZXJfY2hyb21hX3ZiKTsKKyAgICBhbGYt PmZpbHRlcl9jYyAgICAgICAgICA9IEZVTkMoYWxmX2ZpbHRlcl9jYyk7CisgICAgYWxmLT5jbGFz c2lmeSAgICAgICAgICAgPSBGVU5DKGFsZl9jbGFzc2lmeSk7CisgICAgYWxmLT5yZWNvbl9jb2Vm Zl9hbmRfY2xpcCA9IEZVTkMoYWxmX3JlY29uX2NvZWZmX2FuZF9jbGlwKTsKK30KLS0gCjIuMjUu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVn LWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBl Zy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNp dCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdp dGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=