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 9E7124452C for ; Wed, 19 Oct 2022 07:27:52 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA37168BE02; Wed, 19 Oct 2022 10:26:39 +0300 (EEST) Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 889A968BDDC for ; Wed, 19 Oct 2022 10:26:30 +0300 (EEST) Received: by mail-ej1-f54.google.com with SMTP id d26so37791822eje.10 for ; Wed, 19 Oct 2022 00:26:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; 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=8vM6w6jtL0M8mszX/bMYSqQTo65+cfcN3YxFJnWgqPo=; b=spZHrFHC2AaKK3aAlbFo06zlB6f3Tw6X2O/q/wQWMkFemB3GZdnqisgx9too8XC0/0 e1SGPmZ+AqGZSmpGuz49vIyqX53ToaBLz0uXslmkDedwo23YZVja1B0Fw92eRWfkBIzT xsxzmrX6m4jt98stuL+3mOYKFjWU2A/oS/L1a2q69A8Z3JT+PwrROJlwHOF0XTJ1licZ 9RKO96b/wY5DyIavp40SJSiBUCq5xvMfnY3DXwzbKGCVqsivAxwpSlkUwceIXwh7Fef1 aA3QSBtWrCr9v3OOsP01TmhCw4G89tDpyYDR7cQDILAmQJmP9xeXPD6GrZFw5AK4h24+ O0FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=8vM6w6jtL0M8mszX/bMYSqQTo65+cfcN3YxFJnWgqPo=; b=YsxkZ69c9zb9u94hSgAVgWUokc3L1jjSZOd+Urg2F9yCCl9KTgZBoYG+wtMt27rnvb sa6XlRLNcizE774zU1K4sCKCk8zw/vHErCVX9tatDmS9kTy4KHbAtcQVH6EPUy3hbgV5 5e12QnPHqJUn1M4QdkN6xhcfUTPv3huAdyMHxelUaX2cnD8Yp50hwLj/zn3+q3UfDN37 bZDI19EEY5tuV4B54UfzI6J0H81mcMqyCVzcXBh3D6IS9Kfd/C7VMO4BeOWrW4W5Ve29 qE42AmvW+BJXwvnWfZ+AqETNvvh73hYaje48qGTTxXEY1+JDb2xhiVry13NcUyqqRTcK PEdQ== X-Gm-Message-State: ACrzQf2L4I6ZIphl6ucJbQ0dJvl/XqkRy8Py6FtJL/5fmTYfIUHR/rD/ Bup6FYBJo4s8V2LsqChN4lY2ssZLrmfuhw== X-Google-Smtp-Source: AMsMyM5qQy3EW3saaT2UCdYiy16EArAqtpoRvRzmjzuzSkiUZ0c5VmYh3g0CqhUUepW1bP5v898jog== X-Received: by 2002:a17:907:2d89:b0:78d:9c30:452b with SMTP id gt9-20020a1709072d8900b0078d9c30452bmr5184824ejc.533.1666164389122; Wed, 19 Oct 2022 00:26:29 -0700 (PDT) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id p5-20020a170906498500b0078b83968ad4sm8515150eju.24.2022.10.19.00.26.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Oct 2022 00:26:28 -0700 (PDT) From: thomas.ff@spin-digital.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Oct 2022 09:25:03 +0200 Message-Id: <20221019072508.23460-7-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221019072508.23460-1-thomas.ff@spin-digital.com> References: <20221019072508.23460-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v1 06/11] avformat: add demuxer and probe support for H266/VVC 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: Thomas Siedel 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: RnJvbTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+CgpBZGQgZGVt dXhlciB0byBwcm9iZSByYXcgdnZjIGFuZCBwYXJzZSB2dmNjIGJ5dGUgc3RyZWFtIGZvcm1hdC4K ClNpZ25lZC1vZmYtYnk6IFRob21hcyBTaWVkZWwgPHRob21hcy5mZkBzcGluLWRpZ2l0YWwuY29t PgotLS0KIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZvcm1hdC9hbGxm b3JtYXRzLmMgfCAgIDEgKwogbGliYXZmb3JtYXQvZGVtdXguYyAgICAgIHwgICA3ICstCiBsaWJh dmZvcm1hdC92dmMuYyAgICAgICAgfCA5MTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBsaWJhdmZvcm1hdC92dmMuaCAgICAgICAgfCAgOTkgKysrKysKIGxpYmF2Zm9y bWF0L3Z2Y2RlYy5jICAgICB8ICA2MSArKysKIDYgZmlsZXMgY2hhbmdlZCwgMTA4NSBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L3Z2 Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdnZjLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZvcm1hdC92dmNkZWMuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L01ha2Vm aWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKaW5kZXggZDdmMTk4YmYzOS4uMDBhYjRkZWQ4OSAx MDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKKysrIGIvbGliYXZmb3JtYXQvTWFrZWZp bGUKQEAgLTU5NSw2ICs1OTUsNyBAQCBPQkpTLSQoQ09ORklHX1ZPQ19NVVhFUikgICAgICAgICAg ICAgICAgICs9IHZvY2VuYy5vIHZvYy5vCiBPQkpTLSQoQ09ORklHX1ZQS19ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IHZway5vCiBPQkpTLSQoQ09ORklHX1ZQTEFZRVJfREVNVVhFUikgICAgICAg ICAgICs9IHZwbGF5ZXJkZWMubyBzdWJ0aXRsZXMubwogT0JKUy0kKENPTkZJR19WUUZfREVNVVhF UikgICAgICAgICAgICAgICArPSB2cWYubworT0JKUy0kKENPTkZJR19WVkNfREVNVVhFUikgICAg ICAgICAgICAgICArPSB2dmNkZWMubyByYXdkZWMubwogT0JKUy0kKENPTkZJR19XNjRfREVNVVhF UikgICAgICAgICAgICAgICArPSB3YXZkZWMubyB3NjQubyBwY20ubwogT0JKUy0kKENPTkZJR19X NjRfTVVYRVIpICAgICAgICAgICAgICAgICArPSB3YXZlbmMubyB3NjQubwogT0JKUy0kKENPTkZJ R19XQVZfREVNVVhFUikgICAgICAgICAgICAgICArPSB3YXZkZWMubyBwY20ubwpkaWZmIC0tZ2l0 IGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmlu ZGV4IDQ3YzQxOWEwMDkuLmE0ZTM4MjI2ODEgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZv cm1hdHMuYworKysgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTQ3NCw2ICs0NzQsNyBA QCBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfdm9jX211eGVyOwogZXh0ZXJuIGNvbnN0 IEFWSW5wdXRGb3JtYXQgIGZmX3Zwa19kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3Jt YXQgIGZmX3ZwbGF5ZXJfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl92 cWZfZGVtdXhlcjsKK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl92dmNfZGVtdXhlcjsK IGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl93NjRfZGVtdXhlcjsKIGV4dGVybiBjb25z dCBBVk91dHB1dEZvcm1hdCBmZl93NjRfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1h dCAgZmZfd2F2X2RlbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9kZW11eC5jIGIvbGli YXZmb3JtYXQvZGVtdXguYwppbmRleCAyZGZkODJhNjNjLi44ZGJkZTIzZmNkIDEwMDY0NAotLS0g YS9saWJhdmZvcm1hdC9kZW11eC5jCisrKyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKQEAgLTEyMCw2 ICsxMjAsNyBAQCBzdGF0aWMgaW50IHNldF9jb2RlY19mcm9tX3Byb2JlX2RhdGEoQVZGb3JtYXRD b250ZXh0ICpzLCBBVlN0cmVhbSAqc3QsCiAgICAgICAgIHsgIm1wMyIsICAgICAgICBBVl9DT0RF Q19JRF9NUDMsICAgICAgICAgIEFWTUVESUFfVFlQRV9BVURJTyAgICB9LAogICAgICAgICB7ICJt cGVndmlkZW8iLCAgQVZfQ09ERUNfSURfTVBFRzJWSURFTywgICBBVk1FRElBX1RZUEVfVklERU8g ICAgfSwKICAgICAgICAgeyAidHJ1ZWhkIiwgICAgIEFWX0NPREVDX0lEX1RSVUVIRCwgICAgICAg QVZNRURJQV9UWVBFX0FVRElPICAgIH0sCisgICAgICAgIHsgInZ2YyIsICAgICAgICBBVl9DT0RF Q19JRF9WVkMsICAgICAgICAgIEFWTUVESUFfVFlQRV9WSURFTyAgICB9LAogICAgICAgICB7IDAg fQogICAgIH07CiAgICAgaW50IHNjb3JlOwpAQCAtNzQzLDcgKzc0NCw4IEBAIHN0YXRpYyBpbnQ2 NF90IHNlbGVjdF9mcm9tX3B0c19idWZmZXIoQVZTdHJlYW0gKnN0LCBpbnQ2NF90ICpwdHNfYnVm ZmVyLCBpbnQ2NF90CiB7CiAgICAgRkZTdHJlYW0gKmNvbnN0IHN0aSA9IGZmc3RyZWFtKHN0KTsK ICAgICBpbnQgb25laW5fb25lb3V0ID0gc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RF Q19JRF9IMjY0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNf aWQgIT0gQVZfQ09ERUNfSURfSEVWQzsKKyAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVj cGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDICYmCisgICAgICAgICAgICAgICAgICAg ICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfVlZDOwogCiAgICAgaWYg KCFvbmVpbl9vbmVvdXQpIHsKICAgICAgICAgaW50IGRlbGF5ID0gc3RpLT5hdmN0eC0+aGFzX2Jf ZnJhbWVzOwpAQCAtOTMzLDcgKzkzNSw4IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfcGt0X2ZpZWxk cyhBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKICAgICBpbnQ2NF90IG9mZnNldDsK ICAgICBBVlJhdGlvbmFsIGR1cmF0aW9uOwogICAgIGludCBvbmVpbl9vbmVvdXQgPSBzdC0+Y29k ZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0gyNjQgJiYKLSAgICAgICAgICAgICAgICAg ICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDOworICAgICAg ICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hF VkMgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBB Vl9DT0RFQ19JRF9WVkM7CiAKICAgICBpZiAocy0+ZmxhZ3MgJiBBVkZNVF9GTEFHX05PRklMTElO KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92dmMuYyBiL2xpYmF2 Zm9ybWF0L3Z2Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZkMDUy NzI0MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC92dmMuYwpAQCAtMCwwICsxLDkx OCBAQAorLyoKKyAqIFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhlcnMKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv ZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1w ZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29kZWMvZ2V0X2JpdHMuaCIKKyNpbmNsdWRl ICJsaWJhdmNvZGVjL2dvbG9tYi5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvdnZjLmgiCisjaW5j bHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgorI2luY2x1ZGUgImF2Yy5oIgorI2luY2x1 ZGUgImF2aW8uaCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAidnZjLmgi CisKK3R5cGVkZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJyYXkgeworICAgIHVpbnQ4X3QgIGFycmF5 X2NvbXBsZXRlbmVzczsKKyAgICB1aW50OF90ICBOQUxfdW5pdF90eXBlOworICAgIHVpbnQxNl90 IG51bV9uYWx1czsKKyAgICB1aW50MTZfdCAqbmFsX3VuaXRfbGVuZ3RoOworICAgIHVpbnQ4X3Qg ICoqbmFsX3VuaXQ7Cit9IFZWQ0NOQUxVbml0QXJyYXk7CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BU TFJlY29yZCB7CisgICAgdWludDhfdCAgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzsKKyAgICB1 aW50OF90ICBnZW5lcmFsX3Byb2ZpbGVfaWRjOworICAgIHVpbnQ4X3QgIGdlbmVyYWxfdGllcl9m bGFnOworICAgIHVpbnQ4X3QgIGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgIHB0bF9m cmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB1aW50OF90ICBwdGxfbXVsdGlsYXllcl9l bmFibGVkX2ZsYWc7CisgICAgdWludDhfdCAgKmdlbmVyYWxfY29uc3RyYWludF9pbmZvOworICAg IHVpbnQ4X3QgICpwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3Qg ICpzdWJsYXllcl9sZXZlbF9pZGM7CisgICAgdWludDhfdCAgcHRsX251bV9zdWJfcHJvZmlsZXM7 CisgICAgdWludDMyX3QgKmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNQVExSZWNvcmQ7 CisKK3R5cGVkZWYgc3RydWN0IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHsKKyAgICB1 aW50OF90ICBsZW5ndGhTaXplTWludXNPbmU7CisgICAgdWludDhfdCAgcHRsX3ByZXNlbnRfZmxh ZzsKKyAgICB1aW50MTZfdCBvbHNfaWR4OworICAgIHVpbnQ4X3QgIG51bV9zdWJsYXllcnM7Cisg ICAgdWludDhfdCAgY29uc3RhbnRfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90ICBjaHJvbWFfZm9y bWF0X2lkYzsKKyAgICB1aW50OF90ICBiaXRfZGVwdGhfbWludXM4OworICAgIFZWQ1BUTFJlY29y ZCBwdGw7CisgICAgdWludDE2X3QgbWF4X3BpY3R1cmVfd2lkdGg7CisgICAgdWludDE2X3QgbWF4 X3BpY3R1cmVfaGVpZ2h0OworICAgIHVpbnQxNl90IGF2Z19mcmFtZV9yYXRlOworICAgIHVpbnQ4 X3QgIG51bV9vZl9hcnJheXM7CisgICAgVlZDQ05BTFVuaXRBcnJheSAqYXJyYXk7Cit9IFZWQ0Rl Y29kZXJDb25maWd1cmF0aW9uUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBWVkNDUHJvZmlsZVRp ZXJMZXZlbCB7CisgICAgdWludDhfdCBwcm9maWxlX2lkYzsKKyAgICB1aW50OF90IHRpZXJfZmxh ZzsKKyAgICB1aW50OF90IGdlbmVyYWxfbGV2ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnOworICAgIHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxl ZF9mbGFnOworLy8gZ2VuZXJhbF9jb25zdHJhaW50X2luZm8KKyAgICB1aW50OF90ICAgZ2NpX3By ZXNlbnRfZmxhZzsKKyAgICB1bnNpZ25lZCBfX2ludDEyOCBnY2lfZ2VuZXJhbF9jb25zdHJhaW50 czsKKyAgICB1aW50OF90ICAgZ2NpX251bV9yZXNlcnZlZF9iaXRzOworLy8gZW5kIGdlbmVyYWxf Y29uc3RyYWludF9pbmZvCisgICAgdWludDhfdCAgKnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50 X2ZsYWc7CisgICAgdWludDhfdCAgKnN1YmxheWVyX2xldmVsX2lkYzsKKyAgICB1aW50OF90ICBw dGxfbnVtX3N1Yl9wcm9maWxlczsKKyAgICB1aW50MzJfdCAqZ2VuZXJhbF9zdWJfcHJvZmlsZV9p ZGM7Cit9IFZWQ0NQcm9maWxlVGllckxldmVsOworCisKK3N0YXRpYyB2b2lkIHZ2Y2NfdXBkYXRl X3B0bChWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCAqcHRsKQoreworICAgIC8qCisgICAg ICogVGhlIGxldmVsIGluZGljYXRpb24gZ2VuZXJhbF9sZXZlbF9pZGMgbXVzdCBpbmRpY2F0ZSBh IGxldmVsIG9mCisgICAgICogY2FwYWJpbGl0eSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhl IGhpZ2hlc3QgbGV2ZWwgaW5kaWNhdGVkIGZvciB0aGUKKyAgICAgKiBoaWdoZXN0IHRpZXIgaW4g YWxsIHRoZSBwYXJhbWV0ZXIgc2V0cy4KKyAgICAgKi8KKyAgICBpZiAodnZjYy0+cHRsLmdlbmVy YWxfdGllcl9mbGFnIDwgcHRsLT50aWVyX2ZsYWcpCisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFs X2xldmVsX2lkYyA9IHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGM7CisgICAgZWxzZQorICAgICAgICB2 dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMgPSBGRk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9sZXZl bF9pZGMsIHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGMpOworCisgICAgLyoKKyAgICAgKiBUaGUgdGll ciBpbmRpY2F0aW9uIGdlbmVyYWxfdGllcl9mbGFnIG11c3QgaW5kaWNhdGUgYSB0aWVyIGVxdWFs IHRvIG9yCisgICAgICogZ3JlYXRlciB0aGFuIHRoZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGlu IGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAgICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxf dGllcl9mbGFnID0gRkZNQVgodnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnLCBwdGwtPnRpZXJf ZmxhZyk7CisKKyAgICAvKgorICAgICAqIFRoZSBwcm9maWxlIGluZGljYXRpb24gZ2VuZXJhbF9w cm9maWxlX2lkYyBtdXN0IGluZGljYXRlIGEgcHJvZmlsZSB0bworICAgICAqIHdoaWNoIHRoZSBz dHJlYW0gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMu CisgICAgICoKKyAgICAgKiBJZiB0aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldHMgYXJlIG1hcmtl ZCB3aXRoIGRpZmZlcmVudCBwcm9maWxlcywgdGhlbgorICAgICAqIHRoZSBzdHJlYW0gbWF5IG5l ZWQgZXhhbWluYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCisg ICAgICogZW50aXJlIHN0cmVhbSBjb25mb3JtcyB0by4gSWYgdGhlIGVudGlyZSBzdHJlYW0gaXMg bm90IGV4YW1pbmVkLCBvciB0aGUKKyAgICAgKiBleGFtaW5hdGlvbiByZXZlYWxzIHRoYXQgdGhl cmUgaXMgbm8gcHJvZmlsZSB0byB3aGljaCB0aGUgZW50aXJlIHN0cmVhbQorICAgICAqIGNvbmZv cm1zLCB0aGVuIHRoZSBlbnRpcmUgc3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3IgbW9y ZQorICAgICAqIHN1Yi1zdHJlYW1zIHdpdGggc2VwYXJhdGUgY29uZmlndXJhdGlvbiByZWNvcmRz IGluIHdoaWNoIHRoZXNlIHJ1bGVzIGNhbgorICAgICAqIGJlIG1ldC4KKyAgICAgKgorICAgICAq IE5vdGU6IHNldCB0aGUgcHJvZmlsZSB0byB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlIHNha2Ug b2Ygc2ltcGxpY2l0eS4KKyAgICAgKi8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lk YyA9IEZGTUFYKHZ2Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjLCBwdGwtPnByb2ZpbGVfaWRj KTsKKworICAgIC8qCisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlm IGFsbAorICAgICAqIHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisg ICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyAmPSBwdGwtPnB0bF9m cmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJf ZW5hYmxlZF9mbGFnICY9IHB0bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworCisgICAg LyoKKyAgICAgKiBDb25zdHJhaW50cyBJbmZvCisgICAgICogQHRvZG8gaW1wbGVtbnQgY29ycmVj dCBjb250cmFpbnQgaW5mbyBwYXJzaW5nCisgICAgICovCisgICAgaWYocHRsLT5nY2lfcHJlc2Vu dF9mbGFnKSB7CisgICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvID0g MTAgKyBjZWlsKHB0bC0+Z2NpX251bV9yZXNlcnZlZF9iaXRzIC8gOC4pOworICAgICAgICB2dmNj LT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPSAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9m KHVpbnQ4X3QpKTsKKyAgICAgICAgLy8qdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZv ID0gcHRsLT5nY2lfcHJlc2VudF9mbGFnOworICAgICAgICAvLyp2dmNjLT5wdGwuZ2VuZXJhbF9j b25zdHJhaW50X2luZm8gPSAqdnZjYy0+Z2VuZXJhbF9jb25zdHJhaW50X2luZm8gPDwgNzEgfCBw dGwtPmdjaV9nZW5lcmFsX2NvbnN0cmFpbnRzOworICAgICAgICAvLyp2dmNjLT5wdGwuZ2VuZXJh bF9jb25zdHJhaW50X2luZm8gPSAqdnZjYy0+Z2VuZXJhbF9jb25zdHJhaW50X2luZm8gPDwgOCAg fCBwdGwtPmdjaV9udW1fcmVzZXJ2ZWRfYml0czsKKyAgICAgICAgKnZ2Y2MtPnB0bC5nZW5lcmFs X2NvbnN0cmFpbnRfaW5mbyA9ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPDwg KGludCkoOCpjZWlsKHB0bC0+Z2NpX251bV9yZXNlcnZlZF9iaXRzIC8gOC4pKTsKKyAgICB9IGVs c2UgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7Cisg ICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mbyA9ICh1aW50OF90ICopIG1h bGxvYyh2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbypzaXplb2YodWludDhfdCkp OworICAgICAgICAqdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvID0gMHgwMDsKKyAg ICB9CisKKyAgICAvKgorICAgICAqIEVhY2ggYml0IGluIGZsYWdzIG1heSBvbmx5IGJlIHNldCBp ZiBvbmUgb2YKKyAgICAgKiB0aGUgcGFyYW1ldGVyIHNldHMgc2V0IHRoYXQgYml0LgorICAgICAq LworICAgIHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnID0gKHVpbnQ4 X3QgKikgbWFsbG9jKHNpemVvZih1aW50OF90KSp2dmNjLT5udW1fc3VibGF5ZXJzLTEpOworICAg IHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGMgICAgICAgICAgICAgID0gKHVpbnQ4X3QgKikg bWFsbG9jKHNpemVvZih1aW50OF90KSp2dmNjLT5udW1fc3VibGF5ZXJzLTEpOworCisgICAgbWVt c2V0KHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnLCAwLCBzaXplb2Yo dWludDhfdCkqdnZjYy0+bnVtX3N1YmxheWVycy0xKTsKKyAgICBtZW1zZXQodnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkYywgMCwgc2l6ZW9mKHVpbnQ4X3QpKnZ2Y2MtPm51bV9zdWJsYXllcnMt MSk7CisKKyAgICBmb3IoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsgaSA+PSAwOyBp LS0pCisgICAgeworICAgICAgICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRf ZmxhZ1tpXSB8PSBwdGwtPnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV07CisgICAg ICAgIGlmKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKXsKKyAg ICAgICAgICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPSBGRk1BWCh2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldLCBwdGwtPnN1YmxheWVyX2xldmVsX2lkY1tpXSk7Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZXsKKyAgICAgICAgICBpZihpID09IHZ2Y2MtPm51bV9zdWJs YXllcnMgLSAxKXsKKyAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tp XSA9IHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYzsKKyAgICAgICAgICB9ZWxzZXsKKyAgICAg ICAgICAgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkY1tpXSA9IHZ2Y2MtPnB0bC5zdWJs YXllcl9sZXZlbF9pZGNbaSsxXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg ICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPSBGRk1BWCh2dmNjLT5wdGwucHRsX251 bV9zdWJfcHJvZmlsZXMsIHB0bC0+cHRsX251bV9zdWJfcHJvZmlsZXMpOworICAgIGlmKCB2dmNj LT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgKXsKKyAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2YodWludDMyX3QpKnZ2 Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkg PCB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXM7IGkrKykgeworICAgICAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldID0gcHRsLT5nZW5lcmFsX3N1Yl9wcm9m aWxlX2lkY1tpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXpl b2YodWludDMyX3QpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZ2Y2NfcGFyc2VfcHRsKEdl dEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNv bmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgcHJvZmlsZVRpZXJQcmVzZW50RmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBtYXhfc3ViX2xheWVyc19taW51czEpCit7CisgICAgVlZDQ1Byb2Zp bGVUaWVyTGV2ZWwgZ2VuZXJhbF9wdGw7CisKKyAgICBpZihwcm9maWxlVGllclByZXNlbnRGbGFn KSB7CisgICAgICAgIGdlbmVyYWxfcHRsLnByb2ZpbGVfaWRjICAgICAgICAgICAgICAgICA9IGdl dF9iaXRzKGdiLCA3KTsKKyAgICAgICAgZ2VuZXJhbF9wdGwudGllcl9mbGFnICAgICAgICAgICAg ICAgICAgID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB9CisgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9s ZXZlbF9pZGMgICAgICAgICAgICAgICAgICAgPSBnZXRfYml0cyhnYiwgOCk7CisKKyAgICBnZW5l cmFsX3B0bC5wdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgPSBnZXRfYml0czEoZ2IpOwor ICAgIGdlbmVyYWxfcHRsLnB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZyA9IGdldF9iaXRzMShn Yik7CisgICAgaWYocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAgLy8gcGFyc2UgY29uc3RyYWlu dCBpbmZvCisgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9wcmVzZW50X2ZsYWcgPSBnZXRfYml0czEo Z2IpOworICAgICAgICBpZihnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAgICAg ICAgICBnZW5lcmFsX3B0bC5nY2lfZ2VuZXJhbF9jb25zdHJhaW50cyA9IGdldF9iaXRzX2xvbmco Z2IsIDcxKTsKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2ZWRfYml0cyAg ID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBnZW5lcmFsX3B0 bC5nY2lfbnVtX3Jlc2VydmVkX2JpdHMpOworICAgICAgICB9CisgICAgICAgIHdoaWxlKGdiLT5p bmRleCAlIDggIT0gMCkKKyAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOworICAgIH0KKworICAg IGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcgPSAodWludDhfdCAq KSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpKm1heF9zdWJfbGF5ZXJzX21pbnVzMSk7CisgICAgZm9y KGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWludXMxLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAg IGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0gPSBnZXRfYml0 czEoZ2IpOworICAgIH0KKyAgICB3aGlsZShnYi0+aW5kZXglOCAhPSAwKQorICAgICAgICBza2lw X2JpdHMxKGdiKTsKKworICAgIGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lkYyA9ICh1aW50 OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkqbWF4X3N1Yl9sYXllcnNfbWludXMxKTsKKyAg ICBmb3IoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEtMTsgaSA+PSAwOyBpLS0pIHsKKyAg ICAgICAgaWYoIGdlbmVyYWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0g KQorICAgICAgICAgICAgZ2VuZXJhbF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gZ2V0X2Jp dHMoZ2IsIDgpOworICAgIH0KKworICAgIGlmKHByb2ZpbGVUaWVyUHJlc2VudEZsYWcpIHsKKyAg ICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7 CisgICAgICAgIGlmKCBnZW5lcmFsX3B0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcykgeworICAgICAg ICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMgPSAodWludDMyX3QgKikg bWFsbG9jKHNpemVvZih1aW50MzJfdCkqZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJvZmlsZXMp OworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGdlbmVyYWxfcHRsLnB0bF9udW1fc3Vi X3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1 Yl9wcm9maWxlX2lkY1tpXSA9IGdldF9iaXRzX2xvbmcoZ2IsIDMyKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdlbmVyYWxf cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0gKHVpbnQzMl90ICopIG1hbGxvYyhzaXplb2Yo dWludDMyX3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZ2Y2NfdXBkYXRlX3B0bCh2dmNj LCAmZ2VuZXJhbF9wdGwpOworCisgICAgZnJlZShnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2 ZWxfcHJlc2VudF9mbGFnKTsKKyAgICBmcmVlKGdlbmVyYWxfcHRsLnN1YmxheWVyX2xldmVsX2lk Yyk7CisgICAgZnJlZShnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyk7Cit9CisK K3N0YXRpYyBpbnQgdnZjY19wYXJzZV92cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQorewor ICB1bnNpZ25lZCBpbnQgdnBzX21heF9sYXllcnNfbWludXMxOworICB1bnNpZ25lZCBpbnQgdnBz X21heF9zdWJfbGF5ZXJzX21pbnVzMTsKKyAgdW5zaWduZWQgaW50IHZwc19kZWZhdWx0X3B0bF9k cGJfaHJkX21heF90aWRfZmxhZzsKKyAgdW5zaWduZWQgaW50IHZwc19hbGxfaW5kZXBlbmRhbnRf bGF5ZXJfZmxhZzsKKyAgdW5zaWduZWQgaW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFn OworICB1bnNpZ25lZCBpbnQgdnBzX29sc19tb2RlX2lkYzsKKworICB1bnNpZ25lZCBpbnQgKnZw c19wdF9wcmVzZW50X2ZsYWc7CisgIHVuc2lnbmVkIGludCAqdnBzX3B0bF9tYXhfdGlkOworICB1 bnNpZ25lZCBpbnQgdnBzX251bV9wdGxzX21pbnVzMSA9IDA7CisKKworICAgIC8qCisgICAgICog dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhn YiwgNCk7CisKKyAgICB2cHNfbWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7Cisg ICAgdnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8q CisgICAgICogbnVtVGVtcG9yYWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQg dGhlIHN0cmVhbSB0byB3aGljaCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBw bGllcyBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVt YmVyIG9mIHRlbXBvcmFsIGxheWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWIt bGF5ZXIgb3IKKyAgICAgKiBzdWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0 byBudW1UZW1wb3JhbExheWVycy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBz dHJlYW0gaXMgbm90IHRlbXBvcmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAg ICogdGhhdCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNj YWxhYmxlLgorICAgICAqLworICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5u dW1fc3VibGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwc19t YXhfc3ViX2xheWVyc19taW51czEgKyAxKTsKKworCisgICAgaWYodnBzX21heF9sYXllcnNfbWlu dXMxID4gMCAmJiB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2Rl ZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsgLy92cHNfZGVm YXVsdF9wdGxfZHBiX2hyZF9tYXhfdGlkX2ZsYWdzCisgICAgaWYodnBzX21heF9sYXllcnNfbWlu dXMxID4gMCkKKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnID0gZ2V0X2Jp dHMxKGdiKTsKKworICAgIGZvcihpbnQgaSA9MDsgaSA8PSB2cHNfbWF4X2xheWVyc19taW51czE7 IGkrKykgeworICAgICAgICBza2lwX2JpdHMoZ2IsIDYpOyAvL3Zwc19kZWZhdWx0X3B0bF9kcGJf aHJkX21heF90aWRfZmxhZ3N2cHNfbGF5ZXJfaWRbaV0KKyAgICAgICAgaWYoaSA+IDAgJiYgIXZw c19hbGxfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZykgeworICAgICAgICAgICAgaWYoZ2V0X2JpdHMx KGdiKSkgeyAvLyB2cHNfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZworICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCB2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsK KyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0wOyBqPGk7IGorKykgeworICAgICAgICAgICAg ICAgICAgICBpZih2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnICYmIGdldF9iaXRzMShnYikp IC8vIHZwc19kaXJlY3RfcmVmX2xheWVyX2ZsYWdbaV1bal0KKyAgICAgICAgICAgICAgICAgICAg ICAgIHNraXBfYml0cyhnYiwgMyk7IC8vdnBzX21heF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp Zih2cHNfbWF4X2xheWVyc19taW51czEgPiAwKSB7CisgICAgICAgIGlmKHZwc19hbGxfaW5kZXBl bmRhbnRfbGF5ZXJfZmxhZykKKyAgICAgICAgICAgIHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19m bGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgaWYodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xz X2ZsYWcpIHsKKyAgICAgICAgICAgIGlmKCF2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWcp CisgICAgICAgICAgICAgICAgdnBzX29sc19tb2RlX2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAg ICAgICAgICAgIGlmKHZwc19vbHNfbW9kZV9pZGMgPT0gMikgeworICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCB2cHNfbnVtX291dHB1dF9sYXllcl9zZXRzX21pbnVzMiA9IGdldF9iaXRzKGdi LCA4KTsKKyAgICAgICAgICAgICAgICBmb3IoIGludCBpID0gMTsgaSA8PSB2cHNfbnVtX291dHB1 dF9sYXllcl9zZXRzX21pbnVzMiArMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcigg aW50IGogPSAwOyBqIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVt X3B0bHNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIH0KKworICAgIHZwc19wdF9wcmVz ZW50X2ZsYWcgPSAodW5zaWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAq ICh2cHNfbnVtX3B0bHNfbWludXMxKzEpKTsKKyAgICB2cHNfcHRsX21heF90aWQgPSAodW5zaWdu ZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqICh2cHNfbnVtX3B0bHNfbWlu dXMxKzEpKTsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7IGkr KykgeworICAgICAgICBpZihpPjApCisJICAgICAgICAgIHZwc19wdF9wcmVzZW50X2ZsYWdbaV0g PSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZighdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4 X3RpZF9mbGFnKQorCSAgICAgICAgICB2cHNfcHRsX21heF90aWRbaV0gPSBnZXRfYml0cyhnYiwg Myk7CisgICAgfQorCisgICAgd2hpbGUoZ2ItPmluZGV4JTggIT0gMCkKKyAgICAgICAgc2tpcF9i aXRzMShnYik7CisKKyAgICBmb3IoaW50IGkgPSAwOyBpIDw9IHZwc19udW1fcHRsc19taW51czE7 IGkrKykgeworICAgICAgICB2dmNjX3BhcnNlX3B0bChnYiwgdnZjYywgdnBzX3B0X3ByZXNlbnRf ZmxhZ1tpXSwgdnBzX3B0bF9tYXhfdGlkW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHZwc19wdF9w cmVzZW50X2ZsYWcpOworICAgIGZyZWUodnBzX3B0bF9tYXhfdGlkKTsKKworICAgIC8qIG5vdGhp bmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHZ2Y2NfcGFyc2Vfc3BzKEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sK KyAgICB1bnNpZ25lZCBpbnQgc3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSwgbG9nMl9jdHVfc2l6 ZV9taW51czU7CisgICAgLy91bnNpZ25lZCBpbnQgbnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRz LCBudW1fZGVsdGFfcG9jc1tWVkNfTUFYX1JFRl9QSUNfTElTVFNdOworICAgIC8vdW5zaWduZWQg aW50IHNwc19jaHJvbWFfZm9ybWF0X2lkYzsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX3N1YnBpY19z YW1lX3NpemVfZmxhZywgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlLCBzcHNfcGlj X3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZTsKKyAgICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5k YW50X3N1YnBpY3NfZmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZzsKKworICAgIHNraXBfYml0 cyhnYiwgOCk7IC8vIHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCAmJiBzcHNfdmlkZW9fcGFyYW1l dGVyX3NldF9pZAorICAgIHNwc19tYXhfc3ViX2xheWVyc19taW51czEgPSBnZXRfYml0cyAoZ2Is IDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1wb3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBp bmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0 aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWlu ZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFz IHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAqIHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4 LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNh dGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVtcG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBp bmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlz IHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICovCisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9 IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcHNfbWF4X3N1Yl9sYXllcnNfbWludXMxICsgMSk7CisKKyAgICB2dmNjLT5jaHJv bWFfZm9ybWF0X2lkYyA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICBsb2cyX2N0dV9zaXplX21pbnVz NSA9IGdldF9iaXRzKGdiLCAyKTsKKworICAgIGlmKGdldF9iaXRzMShnYikpIC8vc3BzX3B0bF9k cGJfaHJkX3BhcmFtc19wcmVzZW50X2ZsYWcKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2 Y2MsIDEsIHNwc19tYXhfc3ViX2xheWVyc19taW51czEpOworCisgICAgZmxhZyA9IGdldF9iaXRz KGdiLCAxKTsgLy9za2lwX2JpdHMxKGdiKTsgLy9zcHNfZ2RyX2VuYWJsZWRfZmxhZworICAgIGZs YWcgPSBnZXRfYml0cyhnYiwgMSk7ICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9m bGFnCisgICAgaWYoZmxhZyl7IC8vc3BzX3JlZl9waWNfcmVzYW1wbGluZ19lbmFibGVkX2ZsYWcK KyAgICAgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsgLy9za2lwX2JpdHMxKGdiKTsgLy9zcHNf cmVzX2NoYW5nZV9pbl9jbHZzX2FsbG93ZWRfZmxhZworICAgIH0KKworICAgIHNwc19waWNfd2lk dGhfbWF4X2luX2x1bWFfc2FtcGxlID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNj LT5tYXhfcGljdHVyZV93aWR0aCA9IEZGTUFYKHZ2Y2MtPm1heF9waWN0dXJlX3dpZHRoICwgc3Bz X3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUpOworICAgIHNwc19waWNfaGVpZ2h0X21heF9p bl9sdW1hX3NhbXBsZT0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICB2dmNjLT5tYXhfcGlj dHVyZV9oZWlnaHQgPSBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQgLCBzcHNfcGljX2hl aWdodF9tYXhfaW5fbHVtYV9zYW1wbGUpOworCisgICAgaWYoZ2V0X2JpdHMxKGdiKSkgeworICAg ICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fbGVmdF9vZmZzZXQK KyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2NvbmZfd2luX3JpZ2h0X29m ZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5fdG9w X29mZnNldAorICAgICAgICBnZXRfdWVfZ29sb21iX2xvbmcoZ2IpOyAvLyBzcHNfY29uZl93aW5f Ym90dG9tX29mZnNldAorICAgIH0KKworICAgIGlmKGdldF9iaXRzMShnYikpIHsgLy8gc3BzX3N1 YnBpY19pbmZvX3ByZXNlbnRfZmxhZworICAgICAgICB1bnNpZ25lZCBpbnQgc3BzX251bV9zdWJw aWNzX21pbnVzMSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgICAgIGlmKHNwc19udW1f c3VicGljc19taW51czEgPiAwKSB7IC8vIHNwc19udW1fc3VicGljc19taW51czEKKyAgICAgICAg ICAgIHNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAg ICAgICAgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAg IH0KKyAgICAgICAgZm9yKGludCBpID0gMDsgc3BzX251bV9zdWJwaWNzX21pbnVzMSA+IDAgJiYg aSA8PSBzcHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgIGlmKCFzcHNf c3VicGljX3NhbWVfc2l6ZV9mbGFnIHx8IGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGludCBs ZW4gPSBGRk1JTihsb2cyX2N0dV9zaXplX21pbnVzNSArNSwgMTYpOworICAgICAgICAgICAgICAg IGlmKGkgPiAwICYmIHNwc19waWNfd2lkdGhfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAg ICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYo aSA+IDAgJiYgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2FtcGxlID4gMTI4KQorICAgICAg ICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAgICAgICAgICAgICAgaWYoaSA8 IHNwc19udW1fc3VicGljc19taW51czEgJiYgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1w bGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAg ICAgICAgICAgICBpZihpIDwgc3BzX251bV9zdWJwaWNzX21pbnVzMSAmJiBzcHNfcGljX2hlaWdo dF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCFzcHNfaW5kZXBlbmRh bnRfc3VicGljc19mbGFnKSB7CisgICAgICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCAyKTsgLy8g c3BzX3N1YnBpY190cmVhdGVkX2FzX3BpY19mbGFnICYmIHNwc19sb29wX2ZpbHRlcl9hY3Jvc3Nf c3VicGljX2VuYWJsZWRfZmxhZworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdl dF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNwc19zdWJwaWNfaWRfbGVuX21pbnVzMQorICAgICAg ICBpZihnZXRfYml0czEoZ2IpKSB7IC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5 X3NpZ25hbGxlZF9mbGFnCisgICAgICAgICAgICBpZihnZXRfYml0czEoZ2IpKSAvLyBzcHNfc3Vi cGljX2lkX21hcHBpbmdfcHJlc2VudF9mbGFnCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBp IDw9IHNwc19udW1fc3VicGljc19taW51czE7IGkrKykgeworICAgICAgICAgICAgICAgIHNraXBf Yml0czEoZ2IpOyAvLyBzcHNfc3VicGljX2lkW2ldCisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgdnZjYy0+Yml0X2RlcHRoX21pbnVzOCA9IGdldF91ZV9nb2xvbWJfbG9uZyhn Yik7CisKKyAgICAvKiBub3RoaW5nIHVzZWZ1bCBmb3IgdnZjYyBwYXN0IHRoaXMgcG9pbnQgKi8K KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3BwcyhHZXRCaXRDb250 ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3VyYXRp b25SZWNvcmQgKnZ2Y2MpCit7CisKKyAgICAvLyBOb3RoaW5nIG9mIGltcG9ydGFuY2UgdG8gcGFy c2UgaW4gUFBTCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0aGlzIHBvaW50 ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5hbF91bml0X3BhcnNlX2hlYWRl cihHZXRCaXRDb250ZXh0ICpnYiwgdWludDhfdCAqbmFsX3R5cGUpCit7CisgICAgLyoKKyAgICAg KiBmb3JiaWRkZW5femVyb19iaXQgICAgdSgxKQorICAgICAqIG51aF9yZXNlcnZlZF96ZXJvX2Jp dCB1KDEpCisgICAgICogbnVoX2xheWVyX2lkICAgICAgICAgIHUoNikKKyAgICAgKi8KKyAgICBz a2lwX2JpdHMoZ2IsIDgpOworICAgICpuYWxfdHlwZSA9IGdldF9iaXRzKGdiLCA1KTsKKworICAg IC8qCisgICAgICogbnVoX3RlbXBvcmFsX2lkX3BsdXMxIHUoMykKKyAgICAgKi8KKyAgICBza2lw X2JpdHMoZ2IsIDMpOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYXJyYXlfYWRkX25hbF91bml0KHVp bnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50OF90IG5hbF90eXBlLCBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJh dGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQgcmV0OworICAgIHVpbnQ4X3QgaW5kZXg7Cisg ICAgdWludDE2X3QgbnVtX25hbHVzOworICAgIFZWQ0NOQUxVbml0QXJyYXkgKmFycmF5OworCisg ICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdnZjYy0+bnVtX29mX2FycmF5czsgaW5kZXgrKykK KyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5W2luZGV4XS5OQUxfdW5pdF90eXBlID09IG5hbF90eXBl KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaW5kZXggPj0gdnZjYy0+bnVtX29mX2Fy cmF5cykgeworICAgICAgICB1aW50OF90IGk7CisKKyAgICAgICAgcmV0ID0gYXZfcmVhbGxvY3Bf YXJyYXkoJnZ2Y2MtPmFycmF5LCBpbmRleCArIDEsIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAg ICBmb3IgKGkgPSB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpIDw9IGluZGV4OyBpKyspCisgICAgICAg ICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkp OworICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gaW5kZXggKyAxOworICAgIH0KKworICAg IGFycmF5ICAgID0gJnZ2Y2MtPmFycmF5W2luZGV4XTsKKyAgICBudW1fbmFsdXMgPSBhcnJheS0+ bnVtX25hbHVzOworCisgICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5p dCwgbnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQ4X3QqKSk7CisgICAgaWYgKHJldCA8IDApCisg ICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXQgPSBhdl9yZWFsbG9jcF9hcnJheSgmYXJyYXkt Pm5hbF91bml0X2xlbmd0aCwgbnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBhcnJheS0+bmFsX3VuaXQg ICAgICAgW251bV9uYWx1c10gPSBuYWxfYnVmOworICAgIGFycmF5LT5uYWxfdW5pdF9sZW5ndGhb bnVtX25hbHVzXSA9IG5hbF9zaXplOworICAgIGFycmF5LT5OQUxfdW5pdF90eXBlICAgICAgICAg ICAgICA9IG5hbF90eXBlOworICAgIGFycmF5LT5udW1fbmFsdXMrKzsKKworICAgIC8qCisgICAg ICogV2hlbiB0aGUgc2FtcGxlIGVudHJ5IG5hbWUgaXMg4oCYdnZjMeKAmSwgdGhlIGRlZmF1bHQg YW5kIG1hbmRhdG9yeSB2YWx1ZSBvZgorICAgICAqIGFycmF5X2NvbXBsZXRlbmVzcyBpcyAxIGZv ciBhcnJheXMgb2YgYWxsIHR5cGVzIG9mIHBhcmFtZXRlciBzZXRzLCBhbmQgMAorICAgICAqIGZv ciBhbGwgb3RoZXIgYXJyYXlzLiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyDigJhoZXYx 4oCZLCB0aGUgZGVmYXVsdAorICAgICAqIHZhbHVlIG9mIGFycmF5X2NvbXBsZXRlbmVzcyBpcyAw IGZvciBhbGwgYXJyYXlzLgorICAgICAqLworICAgIGlmIChuYWxfdHlwZSA9PSBWVkNfVlBTX05V VCB8fCBuYWxfdHlwZSA9PSBWVkNfU1BTX05VVCB8fCBuYWxfdHlwZSA9PSBWVkNfUFBTX05VVCkK KyAgICAgICAgYXJyYXktPmFycmF5X2NvbXBsZXRlbmVzcyA9IHBzX2FycmF5X2NvbXBsZXRlbmVz czsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfYWRkX25hbF91bml0KHVp bnQ4X3QgKm5hbF9idWYsIHVpbnQzMl90IG5hbF9zaXplLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcHNfYXJyYXlfY29tcGxldGVuZXNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICBpbnQg cmV0ID0gMDsKKyAgICBHZXRCaXRDb250ZXh0IGdiYzsKKyAgICB1aW50OF90IG5hbF90eXBlOwor ICAgIHVpbnQ4X3QgKnJic3BfYnVmOworICAgIHVpbnQzMl90IHJic3Bfc2l6ZTsKKworICAgIHJi c3BfYnVmID0gZmZfbmFsX3VuaXRfZXh0cmFjdF9yYnNwKG5hbF9idWYsIG5hbF9zaXplLCAmcmJz cF9zaXplLCAyKTsKKyAgICBpZiAoIXJic3BfYnVmKSB7CisgICAgICAgIHJldCA9IEFWRVJST1Io RU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gaW5pdF9nZXRf Yml0czgoJmdiYywgcmJzcF9idWYsIHJic3Bfc2l6ZSk7CisgICAgaWYgKHJldCA8IDApCisgICAg ICAgIGdvdG8gZW5kOworCisgICAgbmFsX3VuaXRfcGFyc2VfaGVhZGVyKCZnYmMsICZuYWxfdHlw ZSk7CisKKyAgICAvKgorICAgICAqIE5vdGU6IG9ubHkgJ2RlY2xhcmF0aXZlJyBTRUkgbWVzc2Fn ZXMgYXJlIGFsbG93ZWQgaW4KKyAgICAgKiB2dmNjLiBQZXJoYXBzIHRoZSBTRUkgcGxheWxvYWQg dHlwZSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAqIGFuZCBub24tZGVjbGFyYXRpdmUgU0VJIG1l c3NhZ2VzIGRpc2NhcmRlZD8KKyAgICAgKi8KKyAgICBzd2l0Y2ggKG5hbF90eXBlKSB7CisgICAg Y2FzZSBWVkNfT1BJX05VVDoKKyAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgIGNhc2UgVlZDX1NQ U19OVVQ6CisgICAgY2FzZSBWVkNfUFBTX05VVDoKKyAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05V VDoKKyAgICBjYXNlIFZWQ19TVUZGSVhfU0VJX05VVDoKKyAgICAgICAgcmV0ID0gdnZjY19hcnJh eV9hZGRfbmFsX3VuaXQobmFsX2J1ZiwgbmFsX3NpemUsIG5hbF90eXBlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwc19hcnJheV9jb21wbGV0ZW5lc3MsIHZ2Y2MpOwor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBlbHNl IGlmIChuYWxfdHlwZSA9PSBWVkNfVlBTX05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFy c2VfdnBzKCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfU1BT X05VVCkKKyAgICAgICAgICAgIHJldCA9IHZ2Y2NfcGFyc2Vfc3BzKCZnYmMsIHZ2Y2MpOworICAg ICAgICBlbHNlIGlmIChuYWxfdHlwZSA9PSBWVkNfUFBTX05VVCkKKyAgICAgICAgICAgIHJldCA9 IHZ2Y2NfcGFyc2VfcHBzKCZnYmMsIHZ2Y2MpOworICAgICAgICBlbHNlIGlmIChuYWxfdHlwZSA9 PSBWVkNfT1BJX05VVCkgeworICAgICAgICAgICAgIC8vIG5vdCB5ZXQgc3VwcG9ydGVkCisgICAg ICAgIH0KKyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCitlbmQ6CisgICAgYXZfZnJlZShyYnNwX2J1 Zik7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdnZjY19pbml0KFZWQ0RlY29k ZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworICAgIG1lbXNldCh2dmNjLCAwLCBzaXpl b2YoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQpKTsKKyAgICB2dmNjLT5sZW5ndGhTaXpl TWludXNPbmUgICA9IDM7IC8vIDQgYnl0ZXMKKworICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29u c3RyYWludF9pbmZvID0gMTsKKworICAgIHZ2Y2MtPnB0bF9wcmVzZW50X2ZsYWcgPSAxOworfQor CitzdGF0aWMgdm9pZCB2dmNjX2Nsb3NlKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2 dmNjKQoreworICAgIHVpbnQ4X3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1f b2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzID0gMDsK KyAgICAgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0KTsKKyAgICAgICAgYXZf ZnJlZXAoJnZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aCk7CisgICAgfQorCisgICAgZnJl ZSh2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8pOworICAgIGZyZWUodnZjYy0+cHRs LnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkYyk7CisgICAgZnJlZSh2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmls ZV9pZGMpOworCisgICAgdnZjYy0+bnVtX29mX2FycmF5cyA9IDA7CisgICAgYXZfZnJlZXAoJnZ2 Y2MtPmFycmF5KTsKK30KKworc3RhdGljIGludCB2dmNjX3dyaXRlKEFWSU9Db250ZXh0ICpwYiwg VlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWludDhfdCBpOwor ICAgIHVpbnQxNl90IGosIHZwc19jb3VudCA9IDAsIHNwc19jb3VudCA9IDAsIHBwc19jb3VudCA9 IDA7CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKyAgICAvKgorICAgICAqIEl0J3Mg dW5jbGVhciBob3cgdG8gcHJvcGVybHkgY29tcHV0ZSB0aGVzZSBmaWVsZHMsIHNvCisgICAgICog bGV0J3MgYWx3YXlzIHNldCB0aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCisg ICAgICovCisgICAgdnZjYy0+YXZnX2ZyYW1lX3JhdGUgICAgICA9IDA7CisgICAgdnZjYy0+Y29u c3RhbnRfZnJhbWVfcmF0ZSA9IDE7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAg Imxlbmd0aFNpemVNaW51c09uZTogICAgICAgICAgICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAg ICAgICAgIHZ2Y2MtPmxlbmd0aFNpemVNaW51c09uZSk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAgICAgICAgJSJQUkl1OCJc biIsCisgICAgICAgICAgICB2dmNjLT5wdGxfcHJlc2VudF9mbGFnKTsKKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLCAgIm9sc19pZHg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAl IlBSSXUxNiJcbiIsCisgICAgICAgICAgICB2dmNjLT5vbHNfaWR4KTsKKyAgICBhdl9sb2coTlVM TCwgQVZfTE9HX1RSQUNFLCAgIm51bV9zdWJsYXllcnM6ICAgICAgICAgICAgICAgICAgICAgICAl IlBSSXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMpOworICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiY29uc3RhbnRfZnJhbWVfcmF0ZTogICAgICAgICAgICAg ICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+Y29uc3RhbnRfZnJhbWVfcmF0ZSk7 CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJjaHJvbWFfZm9ybWF0X2lkYzogICAg ICAgICAgICAgICAgICAgJSJQUkl1OCJcbiIsCisgICAgICAgICAgICB2dmNjLT5jaHJvbWFfZm9y bWF0X2lkYyk7CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgImJpdF9kZXB0aF9t aW51czg6ICAgICAgICAgICAgICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2Mt PmJpdF9kZXB0aF9taW51czgpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibnVt X2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAg ICAgdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8pOworICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJhbF9wcm9maWxlX2lkYzogICAgICAgICAgICAgICAgICUi UFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9pZGMpOwor ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAg ICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+cHRsLmdlbmVyYWxf dGllcl9mbGFnKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgImdlbmVyYWxfbGV2 ZWxfaWRjOiAgICAgICAgICAgICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2Mt PnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwg ICJwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAgICAgJSJQUkl1OCJcbiIsCisgICAg ICAgICAgICB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnKTsKKyAgICBh dl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgInB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZzog ICAgICAgICAlIlBSSXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbXVsdGlsYXll cl9lbmFibGVkX2ZsYWcpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAiZ2VuZXJh bF9jb25zdHJhaW50X2luZm86ICAgICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAg KnZ2Y2MtPnB0bC5nZW5lcmFsX2NvbnN0cmFpbnRfaW5mbyk7CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgdnZjYy0+bnVtX3N1YmxheWVycy0xOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19UUkFDRSwgICJwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnWyUiUFJJdTgiXTog JSJQUkl1OCJcbiIsCisgICAgICAgICAgICAgICAgaSwgdnZjYy0+cHRsLnB0bF9zdWJsYXllcl9s ZXZlbF9wcmVzZW50X2ZsYWdbaV0pOworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNF LCAgInN1YmxheWVyX2xldmVsX2lkY1slIlBSSXU4Il06ICUiUFJJdTgiXG4iLAorICAgICAgICAg ICAgICAgIGksIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgIH0KKworICAg IGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICAibnVtX3N1Yl9wcm9maWxlczogICAgICAgICAg ICAgICAgICAgICUiUFJJdTgiXG4iLAorICAgICAgICAgICAgdnZjYy0+cHRsLnB0bF9udW1fc3Vi X3Byb2ZpbGVzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5wdGwucHRsX251bV9zdWJf cHJvZmlsZXM7IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgImdl bmVyYWxfc3ViX3Byb2ZpbGVfaWRjWyUiUFJJdTgiXTogICAgICAgICAlIlBSSXgzMiJcbiIsCisg ICAgICAgICAgICAgICAgaSwgdnZjYy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2ldKTsK KyAgICB9CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLCAgIm1heF9waWN0dXJlX3dp ZHRoOiAgICAgICAgICAgICAgICAgICAlIlBSSXUxNiJcbiIsCisgICAgICAgICAgICB2dmNjLT5t YXhfcGljdHVyZV93aWR0aCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgICJtYXhf cGljdHVyZV9oZWlnaHQ6ICAgICAgICAgICAgICAgICAgJSJQUkl1MTYiXG4iLAorICAgICAgICAg ICAgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLCAgImF2Z19mcmFtZV9yYXRlOiAgICAgICAgICAgICAgICAgICAgICAlIlBSSXUxNiJcbiIs CisgICAgICAgICAgICB2dmNjLT5hdmdfZnJhbWVfcmF0ZSk7CisKKyAgICBhdl9sb2coTlVMTCwg QVZfTE9HX1RSQUNFLCAgIm51bV9vZl9hcnJheXM6ICAgICAgICAgICAgICAgICAgICAgICAlIlBS SXU4IlxuIiwKKyAgICAgICAgICAgIHZ2Y2MtPm51bV9vZl9hcnJheXMpOworICAgIGZvciAoaSA9 IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwgImFycmF5X2NvbXBsZXRlbmVzc1slIlBSSXU4Il06ICAgICAgICAgICAg ICAgJSJQUkl1OCJcbiIsCisgICAgICAgICAgICAgICAgaSwgdnZjYy0+YXJyYXlbaV0uYXJyYXlf Y29tcGxldGVuZXNzKTsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwgIk5BTF91 bml0X3R5cGVbJSJQUkl1OCJdOiAgICAgICAgICAgICAgICAgICAgJSJQUkl1OCJcbiIsCisgICAg ICAgICAgICAgICAgaSwgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSk7CisgICAgICAgIGF2 X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsICJudW1fbmFsdXNbJSJQUkl1OCJdOiAgICAgICAgICAg ICAgICAgICAgICAgICUiUFJJdTE2IlxuIiwKKyAgICAgICAgICAgICAgICBpLCB2dmNjLT5hcnJh eVtpXS5udW1fbmFsdXMpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgdnZjYy0+YXJyYXlbaV0u bnVtX25hbHVzOyBqKyspCisgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAor ICAgICAgICAgICAgICAgICAgICAibmFsX3VuaXRfbGVuZ3RoWyUiUFJJdTgiXVslIlBSSXUxNiJd OiAgICAgICAgICAgICAgICAgJSJQUkl1MTYiXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCBq LCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAgIH0KKworICAgIC8qCisg ICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUgb2YgZWFjaDogVlBTIGFuZCBTUFMuCisgICAgICov CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykKKyAgICAgICAg c3dpdGNoICh2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKSB7CisgICAgICAgIGNhc2UgVlZD X1ZQU19OVVQ6CisgICAgICAgICAgICB2cHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25h bHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAg ICAgICAgICBzcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBwcHNfY291 bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgaWYgKCFz cHNfY291bnQgfHwgc3BzX2NvdW50ID4gVlZDX01BWF9TUFNfQ09VTlQpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyogYml0KDUpIHJlc2VydmVkID0g4oCYMTEx MTHigJliOworICAgICAgIHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6ZU1pbnVzT25lCisgICAg ICAgdW5zaWduZWQgaW50ICgxKSBwdGxfcHJlc2VudF9mbGFnICovCisgICAgYXZpb193OChwYiwg dnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lIDw8IDEgfCB2dmNjLT5wdGxfcHJlc2VudF9mbGFnIHwg MHhmOCk7CisKKyAgICBpZih2dmNjLT5wdGxfcHJlc2VudF9mbGFnKSB7CisgICAgICAgIC8qCisg ICAgICAgICogdW5zaWduZWQgaW50KDkpIG9sc19pZHg7CisgICAgICAgICogdW5zaWduZWQgaW50 KDMpIG51bV9zdWJsYXllcnM7CisgICAgICAgICogdW5zaWduZWQgaW50KDIpIGNvbnN0YW50X2Zy YW1lX3JhdGU7CisgICAgICAgICogdW5zaWduZWQgaW50KDIpIGNocm9tYV9mb3JtYXRfaWRjOyAg ICAgKi8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5u dW1fc3VibGF5ZXJzIDw8IDQgfCB2dmNjLT5jb25zdGFudF9mcmFtZV9yYXRlIDw8IDIgfCB2dmNj LT5jaHJvbWFfZm9ybWF0X2lkYyk7CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50KDMpIGJpdF9k ZXB0aF9taW51czg7CisgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOyov CisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPDwgNSB8IDB4MWYp OworCisgICAgICAgIC8vVlZDUFRMUmVjb3JkCisKKyAgICAgICAgLyogYml0KDIpIHJlc2VydmVk ID0g4oCYMDDigJliOworICAgICAgICAgIHVuc2lnbmVkIGludCAoNikgbnVtX2J5dGVzX2NvbnN0 cmFpbnRfaW5mbyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5wdGwubnVtX2J5dGVzX2Nv bnN0cmFpbnRfaW5mbyAmIDB4M2YpOworCisgICAgICAgIC8qIHVuc2lnbmVkIGludCAoNykgZ2Vu ZXJhbF9wcm9maWxlX2lkYworICAgICAgICAgIHVuc2lnbmVkIGludCAoMSkgZ2VuZXJhbF90aWVy X2ZsYWcgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLmdlbmVyYWxfcHJvZmlsZV9p ZGMgPDwgMSB8IHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7CisKKyAgICAgICAgLyogdW5z aWduZWQgaW50ICg4KSBnZW5lcmFsX2xldmVsX2lkYyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2 dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMpOworCisgICAgICAgIC8qCisgICAgICAgICogdW5z aWduZWQgaW50ICgxKSBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcKKyAgICAgICAgKiB1 bnNpZ25lZCBpbnQgKDEpIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZworICAgICAgICAqIHVu c2lnbmVkIGludCAoOCpudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvIC0yKSBnZW5lcmFsX2NvbnN0 cmFpbnRfaW5mbyAqLworICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Moc2l6 ZW9mKHVuc2lnbmVkIGNoYXIpICogdnZjYy0+cHRsLm51bV9ieXRlc19jb25zdHJhaW50X2luZm8p OworICAgICAgICAqYnVmID0gdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxh ZyA8PCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyo4LTEgfCB2dmNjLT5wdGwu cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnIDw8IHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3Ry YWludF9pbmZvKjgtMiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPj4gMjsK KyAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFp bnRfaW5mbyk7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICBpZih2dmNjLT5udW1fc3Vi bGF5ZXJzID4gMSkgeworICAgICAgICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNl bnRfZmxhZ3MgPSAwOworICAgICAgICAgIGZvcihpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMg LTI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2Vu dF9mbGFncyA9IChwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyA8PCAxIHwgdnZjYy0+ cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pOworICAgICAgICAgIH0KKyAg ICAgICAgICBhdmlvX3c4KHBiLCBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncyk7Cisg ICAgICAgIH0KKworICAgICAgICBmb3IoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0yOyBp ID49IDA7IGktLSkgeworICAgICAgICAgIGlmKHZ2Y2MtPnB0bC5wdGxfc3VibGF5ZXJfbGV2ZWxf cHJlc2VudF9mbGFnW2ldKQorICAgICAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnN1Ymxh eWVyX2xldmVsX2lkY1tpXSk7CisgICAgICAgIH0KKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQo OCkgbnVtX3N1Yl9wcm9maWxlczsgKi8KKyAgICAgICAgYXZpb193OChwYiwgdnZjYy0+cHRsLnB0 bF9udW1fc3ViX3Byb2ZpbGVzKTsKKworICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgdnZjYy0+ cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBqKyspIHsKKyAgICAgICAgLyogdW5zaWduZWQgaW50 KDMyKSBnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tqXTsgKi8KKyAgICAgICAgYXZpb193YjMyKHBi LCB2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal0pOworICAgICAgICB9CisKKyAg ICAgICAgLy9FbmQgb2YgVnZjUFRMUmVjb3JkCisKKyAgICAgICAgLyoKKyAgICAgICAgKiB1bnNp Z25lZCBpbnQoMTYpIG1heF9waWN0dXJlX3dpZHRoOyovCisgICAgICAgIGF2aW9fd2IxNihwYiwg dnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworCisgICAgICAgIC8qCisgICAgICAgICogdW5zaWdu ZWQgaW50KDE2KSBtYXhfcGljdHVyZV9oZWlnaHQ7Ki8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2 dmNjLT5tYXhfcGljdHVyZV9oZWlnaHQpOworCisgICAgICAgIC8qCisgICAgICAgICogdW5zaWdu ZWQgaW50KDE2KSBhdmdfZnJhbWVfcmF0ZTsgKi8KKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNj LT5hdmdfZnJhbWVfcmF0ZSk7CisgICAgfQorCisgICAgLyogdW5zaWduZWQgaW50KDgpIG51bV9v Zl9hcnJheXM7ICovCisgICAgYXZpb193OChwYiwgdnZjYy0+bnVtX29mX2FycmF5cyk7CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIC8q CisgICAgICAgICAqIGJpdCgxKSBhcnJheV9jb21wbGV0ZW5lc3M7CisgICAgICAgICAqIHVuc2ln bmVkIGludCgyKSByZXNlcnZlZCA9IDA7CisgICAgICAgICAqIHVuc2lnbmVkIGludCg1KSBOQUxf dW5pdF90eXBlOworICAgICAgICAgKi8KKyAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPmFycmF5W2ld LmFycmF5X2NvbXBsZXRlbmVzcyA8PCA3IHwKKyAgICAgICAgICAgICAgICAgICAgdnZjYy0+YXJy YXlbaV0uTkFMX3VuaXRfdHlwZSAmIDB4MWYpOworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMTYp IG51bV9uYWx1czsgKi8KKyAgICAgIGlmKHZ2Y2MtPmFycmF5W2ldLk5BTF91bml0X3R5cGUgIT0g VlZDX0RDSV9OVVQgJiYgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAhPSBWVkNfT1BJX05V VCkKKyAgICAgICAgYXZpb193YjE2KHBiLCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXMpOworICAg ICAgZm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1czsgaisrKSB7CisgICAg ICAgIC8qIHVuc2lnbmVkIGludCgxNikgbmFsX3VuaXRfbGVuZ3RoOyAqLworICAgICAgICBhdmlv X3diMTYocGIsIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisKKyAgICAgICAg LyogYml0KDgqbmFsX3VuaXRfbGVuZ3RoKSBuYWxfdW5pdDsgKi8KKyAgICAgICAgYXZpb193cml0 ZShwYiwgdnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRbal0sIHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0 X2xlbmd0aFtqXSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBm Zl92dmNfYW5uZXhiMm1wNChBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVpbnQ4X3QgKmJ1Zl9pbiwK KyAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIGludCBmaWx0ZXJfcHMsIGludCAqcHNf Y291bnQpCit7CisgICAgaW50IG51bV9wcyA9IDAsIHJldCA9IDA7CisgICAgdWludDhfdCAqYnVm LCAqZW5kLCAqc3RhcnQgPSBOVUxMOworCisgICAgaWYgKCFmaWx0ZXJfcHMpIHsKKyAgICAgICAg cmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0cyhwYiwgYnVmX2luLCBzaXplKTsKKyAgICAgICAg Z290byBlbmQ7CisgICAgfQorCisgICAgcmV0ID0gZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYo YnVmX2luLCAmc3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBl bmQ7CisKKyAgICByZXQgPSAwOworICAgIGJ1ZiA9IHN0YXJ0OworICAgIGVuZCA9IHN0YXJ0ICsg c2l6ZTsKKworICAgIHdoaWxlIChlbmQgLSBidWYgPiA0KSB7CisgICAgICAgIHVpbnQzMl90IGxl biA9IEZGTUlOKEFWX1JCMzIoYnVmKSwgZW5kIC0gYnVmIC0gNCk7CisgICAgICAgIHVpbnQ4X3Qg dHlwZSA9IChidWZbNV0gPj4gMyk7CisKKyAgICAgICAgYnVmICs9IDQ7CisKKyAgICAgICAgc3dp dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVlZDX1ZQU19OVVQ6CisgICAgICAgIGNhc2UgVlZD X1NQU19OVVQ6CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBudW1fcHMr KzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0 ICs9IDQgKyBsZW47CisgICAgICAgICAgICBhdmlvX3diMzIocGIsIGxlbik7CisgICAgICAgICAg ICBhdmlvX3dyaXRlKHBiLCBidWYsIGxlbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorCisgICAgICAgIGJ1ZiArPSBsZW47CisgICAgfQorCitlbmQ6CisgICAgYXZfZnJlZShzdGFy dCk7CisgICAgaWYgKHBzX2NvdW50KQorICAgICAgICAqcHNfY291bnQgPSBudW1fcHM7CisgICAg cmV0dXJuIHJldDsKK30KKworaW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihjb25zdCB1aW50OF90 ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIEFWSU9Db250 ZXh0ICpwYjsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBi KTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldCAgID0g ZmZfdnZjX2FubmV4YjJtcDQocGIsIGJ1Zl9pbiwgKnNpemUsIGZpbHRlcl9wcywgcHNfY291bnQp OworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGZmaW9fZnJlZV9keW5fYnVmKCZwYik7Cisg ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgKnNpemUgPSBhdmlvX2Nsb3NlX2R5bl9i dWYocGIsIGJ1Zl9vdXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9pc29tX3dyaXRl X3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcykKK3sKKyAgICBW VkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB2dmNjOworICAgIHVpbnQ4X3QgKmJ1ZiwgKmVu ZCwgKnN0YXJ0OworICAgIGludCByZXQ7CisKKyAgICBpZiAoc2l6ZSA8IDYpIHsKKyAgICAgICAg LyogV2UgY2FuJ3Qgd3JpdGUgYSB2YWxpZCB2dmNjIGZyb20gdGhlIHByb3ZpZGVkIGRhdGEgKi8K KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfSBlbHNlIGlmICgqZGF0 YSA9PSAxKSB7CisgICAgICAgIC8qIERhdGEgaXMgYWxyZWFkeSB2dmNjLWZvcm1hdHRlZCAqLwor ICAgICAgICBhdmlvX3dyaXRlKHBiLCBkYXRhLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfSBlbHNlIGlmICghKEFWX1JCMjQoZGF0YSkgPT0gMSB8fCBBVl9SQjMyKGRhdGEpID09IDEp KSB7CisgICAgICAgIC8qIE5vdCBhIHZhbGlkIEFubmV4IEIgc3RhcnQgY29kZSBwcmVmaXggKi8K KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0ID0g ZmZfYXZjX3BhcnNlX25hbF91bml0c19idWYoZGF0YSwgJnN0YXJ0LCAmc2l6ZSk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICB2dmNjX2luaXQoJnZ2Y2MpOwor CisgICAgYnVmID0gc3RhcnQ7CisgICAgZW5kID0gc3RhcnQgKyBzaXplOworCisgICAgd2hpbGUg KGVuZCAtIGJ1ZiA+IDQpIHsKKyAgICAgICAgdWludDMyX3QgbGVuID0gRkZNSU4oQVZfUkIzMihi dWYpLCBlbmQgLSBidWYgLSA0KTsKKyAgICAgICAgdWludDhfdCB0eXBlID0gKGJ1Zls1XSA+PiAz KTsKKworICAgICAgICBidWYgKz0gNDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKwljYXNl IFZWQ19PUElfTlVUOgorICAgICAgICBjYXNlIFZWQ19WUFNfTlVUOgorICAgICAgICBjYXNlIFZW Q19TUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19Q UkVGSVhfU0VJX05VVDoKKyAgICAgICAgY2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6CisgICAgICAg ICAgICByZXQgPSB2dmNjX2FkZF9uYWxfdW5pdChidWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVu ZXNzLCAmdnZjYyk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBn b3RvIGVuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAgIH0KKworICAg IHJldCA9IHZ2Y2Nfd3JpdGUocGIsICZ2dmNjKTsKKworZW5kOgorICAgIHZ2Y2NfY2xvc2UoJnZ2 Y2MpOworICAgIGF2X2ZyZWUoc3RhcnQpOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQg YS9saWJhdmZvcm1hdC92dmMuaCBiL2xpYmF2Zm9ybWF0L3Z2Yy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNkZjRmNmQzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmZvcm1hdC92dmMuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogVlZDIGhlbHBlciBmdW5jdGlv bnMgZm9yIG11eGVycworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisg KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisv KioKKyAqIEBmaWxlCisgKiBpbnRlcm5hbCBoZWFkZXIgZm9yIFZWQyAoZGUpbXV4ZXIgdXRpbGl0 aWVzCisgKi8KKworI2lmbmRlZiBBVkZPUk1BVF9WVkNfSAorI2RlZmluZSBBVkZPUk1BVF9WVkNf SAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiYXZpby5oIgorCisvKioKKyAqIFdy aXRlcyBBbm5leCBCIGZvcm1hdHRlZCBWVkMgTkFMIHVuaXRzIHRvIHRoZSBwcm92aWRlZCBBVklP Q29udGV4dC4KKyAqCisgKiBUaGUgTkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0LWNv bXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHByZWZpeGVzCisgKiBhcmUgcmVwbGFjZWQgYnkg NC1ieXRlIHNpemUgZmllbGRzLCBhcyBwZXIgSVNPL0lFQyAxNDQ5Ni0xNSkuCisgKgorICogSWYg ZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRzIGZvdW5kIGluIHRo ZSBpbnB1dCB3aWxsIGJlCisgKiBkaXNjYXJkZWQsIGFuZCAqcHNfY291bnQgd2lsbCBiZSBzZXQg dG8gdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgUFMgTkFMIHVuaXRzLgorICoKKyAqIEBwYXJhbSBw YiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgZGF0YSBzaGFsbCBiZSB3cml0 dGVuCisgKiBAcGFyYW0gYnVmX2luIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBp bnB1dCBkYXRhCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGlucHV0IGJ1 ZmZlcgorICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBzZXQg TkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCisgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0aGVt IChub24temVybykKKyAqIEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSB3 aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAorICogICAgICAgIHBhcmFtZXRlciBzZXQgTkFM IHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0dXJuIHRoZSBhbW91 bnQgKGluIGJ5dGVzKSBvZiBkYXRhIHdyaXR0ZW4gaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5lZ2F0 aXZlCisgKiAgICAgICAgIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUiBjb2RlIGlu IGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgZmZfdnZjX2FubmV4YjJtcDQoQVZJT0NvbnRleHQg KnBiLCBjb25zdCB1aW50OF90ICpidWZfaW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBz aXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMgQW5u ZXggQiBmb3JtYXR0ZWQgVlZDIE5BTCB1bml0cyB0byBhIGRhdGEgYnVmZmVyLgorICoKKyAqIFRo ZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBmb3JtYXQgKHN0 YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6ZSBmaWVsZHMs IGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMgaXMgbm9uLXpl cm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdpbGwgYmUKKyAq IGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGRp c2NhcmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogT24gc3VjY2VzcywgKnNpemUgaG9sZHMgdGhl IHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgb3V0cHV0IGRhdGEgYnVmZmVyLgorICoKKyAqIEBwYXJh bSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0IGRhdGEKKyAq IEBwYXJhbSBzaXplIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhlIHNpemUgKGlu IGJ5dGVzKSBvZiB0aGUgaW5wdXQKKyAqICAgICAgICBidWZmZXIgKG9uIGlucHV0KSBhbmQgb2Yg dGhlIG91dHB1dCBidWZmZXIgKG9uIHN1Y2Nlc3MpCisgKiBAcGFyYW0gYnVmX291dCBvbiBzdWNj ZXNzLCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBhZGRyZXNzIG9mCisgKiAg ICAgICAgdGhlIG91dHB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMgd2hldGhlciB0byB3 cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0ICgwKQorICogICAgICAg IG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0gcHNfY291bnQgYWRkcmVz cyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQKKyAqICAgICAg ICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVuLCBtYXkgYmUgTlVMTAor ICogQHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNw b25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUK KyAqIEBub3RlICpidWZfb3V0IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmluaXRpYWxpemVkIG9uIGlu cHV0IGFuZCB3b24ndCBiZSBmcmVlZC4KKyAqLworaW50IGZmX3Z2Y19hbm5leGIybXA0X2J1Zihj b25zdCB1aW50OF90ICpidWZfaW4sIHVpbnQ4X3QgKipidWZfb3V0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKwor LyoqCisgKiBXcml0ZXMgVlZDIGV4dHJhZGF0YSAocGFyYW1ldGVyIHNldHMsIGRlY2xhcmF0aXZl IFNFSSBOQUwgdW5pdHMpIHRvIHRoZQorICogcHJvdmlkZWQgQVZJT0NvbnRleHQuCisgKgorICog SWYgdGhlIGV4dHJhZGF0YSBpcyBBbm5leCBCIGZvcm1hdCwgaXQgZ2V0cyBjb252ZXJ0ZWQgdG8g dnZjQyBmb3JtYXQgYmVmb3JlCisgKiB3cml0aW5nLgorICoKKyAqIEBwYXJhbSBwYiBhZGRyZXNz IG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgdnZjQyBzaGFsbCBiZSB3cml0dGVuCisgKiBA cGFyYW0gZGF0YSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSBuZWVkZWQg dG8gd3JpdGUgdGhlIHZ2Y0MKKyAqIEBwYXJhbSBzaXplIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUg ZGF0YSBidWZmZXIKKyAqIEBwYXJhbSBwc19hcnJheV9jb21wbGV0ZW5lc3Mgd2hldGhlciBhbGwg cGFyYW1ldGVyIHNldHMgYXJlIGluIHRoZSB2dmNDICgxKQorICogICAgICAgIG9yIHRoZXJlIG1h eSBiZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXRzIGluIHRoZSBiaXRzdHJlYW0gKDApCisgKiBA cmV0dXJuID49MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgY29ycmVzcG9u ZGluZyB0byBhbiBBVkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlCisg Ki8KK2ludCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBiLCBjb25zdCB1aW50OF90 ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBzX2FycmF5X2Nv bXBsZXRlbmVzcyk7CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9WVkNfSCAqLwpkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvdnZjZGVjLmMgYi9saWJhdmZvcm1hdC92dmNkZWMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zMDRmOTAwOTY2Ci0tLSAvZGV2L251bGwKKysrIGIv bGliYXZmb3JtYXQvdnZjZGVjLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFJBVyBWVkMgdmlk ZW8gZGVtdXhlcgorICogQ29weXJpZ2h0IChjKSAyMDIwIE51byBNaSA8bnVvbWkyMDIxQGdtYWls LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUg ImxpYmF2Y29kZWMvdnZjLmgiCisKKyNpbmNsdWRlICJhdmZvcm1hdC5oIgorI2luY2x1ZGUgInJh d2RlYy5oIgorCitzdGF0aWMgaW50IHZ2Y19wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKK3sK KyAgICB1aW50MzJfdCBjb2RlID0gLTE7CisgICAgaW50IHNwcyA9IDAsIHBwcyA9IDAsIGlyYXAg PSAwOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IHAtPmJ1Zl9zaXplIC0gMTsg aSsrKSB7CisgICAgICAgIGNvZGUgPSAoY29kZSA8PCA4KSArIHAtPmJ1ZltpXTsKKyAgICAgICAg aWYgKChjb2RlICYgMHhmZmZmZmYwMCkgPT0gMHgxMDApIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qg bmFsMiA9IHAtPmJ1ZltpICsgMV07CisgICAgICAgICAgICBpbnQgdHlwZSA9IChuYWwyICYgMHhG OCkgPj4gMzsKKworICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwKSAvLyBmb3JiaWRkZW5femVy b19iaXQKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYgKChuYWwy ICYgMHg3KSA9PSAwKSAvLyBudWhfdGVtcG9yYWxfaWRfcGx1czEKKyAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKKworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNl IFZWQ19TUFNfTlVUOiAgICAgICBzcHMrKzsgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWVkNf UFBTX05VVDogICAgICAgcHBzKys7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVlZDX0lEUl9O X0xQOgorICAgICAgICAgICAgY2FzZSBWVkNfSURSX1dfUkFETDoKKyAgICAgICAgICAgIGNhc2Ug VlZDX0NSQV9OVVQ6CisgICAgICAgICAgICBjYXNlIFZWQ19HRFJfTlVUOiAgICAgICBpcmFwKys7 IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNwcyAm JiBwcHMgJiYgaXJhcCkKKyAgICAgICAgcmV0dXJuIEFWUFJPQkVfU0NPUkVfRVhURU5TSU9OICsg MTsgLy8gMSBtb3JlIHRoYW4gLm1wZworICAgIHJldHVybiAwOworfQorCitGRl9ERUZfUkFXVklE RU9fREVNVVhFUih2dmMsICJyYXcgVlZDIHZpZGVvIiwgdnZjX3Byb2JlLCAiaDI2NiwyNjYsdnZj IiwgQVZfQ09ERUNfSURfVlZDKQotLSAKMi4yNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==