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 0A3C445B36 for ; Wed, 17 May 2023 08:28:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 030D668C060; Wed, 17 May 2023 11:28:14 +0300 (EEST) Received: from mail-il1-f173.google.com (mail-il1-f173.google.com [209.85.166.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4BB4068BC6A for ; Wed, 17 May 2023 11:28:09 +0300 (EEST) Received: by mail-il1-f173.google.com with SMTP id e9e14a558f8ab-3381e9ec12bso4050285ab.3 for ; Wed, 17 May 2023 01:28:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1684312088; x=1686904088; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MoGEZuYFPiu1p/mwjS1vYpSMuq3+vRzCZK4mII//6LU=; b=IyR36iyGWiCZb5hpCNp8QnWo82BQldFmXYsoi028GywnbRj0zI0qwOdDoy8TV1XMVm NHiueTV0q6jGiLrMi97OYeA5elgsNr1QQPpToLiaTG2LAxi2kBo8qvR3vGbGuH9Qpz4s muZbxyYV4A/S7XR5fAaAuHLFZ26dIW477g0+NNSupirdxU4lZZLpc3dn12fgoW0AveV4 dWvemeENbiZirBK6KPVQLlannUryxMDDhXmol3KuFGnLZprMYeUzm2E1RYCQ0Xhuxzn4 ZFvo/500Zkkq9RjXdlra3T0dKfK2V+a0PMLQPSp8gPQs4FeNkCDNVX12Rsi4XeyM5Av1 2sdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684312088; x=1686904088; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MoGEZuYFPiu1p/mwjS1vYpSMuq3+vRzCZK4mII//6LU=; b=K9dqzkwKcRDJDowZmcWOV6rlY3CbiDEF/u+me6XsToaxb25CKxzZ0q0tbBWA6KeRXR CGRNSZ8xjtAd2PY8mK44tF//Q3bYtuxQh7ytioxegF3bthvSO2O8Fx1g3SVnehwvYh1O PxUO8oeusAEjFgsZaduOP11x666NcxS/QtcEudUYdERlDRM+o1kzaD+7Vlk0HAxSsPGt PDD+6ytacaBRqLlPs3DVGuL0AUDZyKRnh0P1GHgThDtPRH9KaQNBrWlI1+dGQQsjpyI9 Vz8J1Xxigje0fAXt3RBJCqget2iUo+2V1PE9RK9qNPLKOHujzxhWMBi9ueQX8ZaI8CjT cHXQ== X-Gm-Message-State: AC+VfDxMS+NPr7rok44S5JTHfd9FAn5ZbdK3bUMrnv9MKCcuczM2v//X gytWZ/rx/rmRM8ejVvKEe8Vt3GojLF46IOlxWPDdkC3Q+mDokWdL X-Google-Smtp-Source: ACHHUZ4J/WN6BV3OyzzRUajLuJz9jXvsLKxhsWSBX5QtY6tdal5Tv8TihZM8DxIDNMx9fY2zTqwSrKaKcfqtm5QgYHw= X-Received: by 2002:a92:d9c1:0:b0:335:7fb1:bb44 with SMTP id n1-20020a92d9c1000000b003357fb1bb44mr1358539ilq.12.1684312087961; Wed, 17 May 2023 01:28:07 -0700 (PDT) MIME-Version: 1.0 References: <20230501110120.20778-1-admin@superfashi.com> <20230503130223.15713-1-admin@superfashi.com> In-Reply-To: <20230503130223.15713-1-admin@superfashi.com> From: SuperFashi Date: Wed, 17 May 2023 17:27:56 +0900 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v6] avformat: add MMTP parser and MMT/TLV demuxer 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: SuperFashi 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: QnVtcGluZyB0aGlzLCB0aHguCgpPbiBXZWQsIE1heSAzLCAyMDIzIGF0IDIyOjAyIFN1cGVyRmFz aGkgPGFkbWluQHN1cGVyZmFzaGkuY29tPiB3cm90ZToKCj4gdjEgLT4gdjI6IFJlZmFjdG9yIHVz aW5nIEdldEJ5dGVDb250ZXh0OyBGaXggY29tcGlsZSBlcnJvci4KPiB2MiAtPiB2MzogUmVtb3Zl IGRlYnVnIHN0YXRlbWVudC4KPiB2MyAtPiB2NDogU3F1YXNoIGNvbW1pdHMuCj4gdjQgLT4gdjU6 IEltcHJvdmUgcG9ydGFiaWxpdHk7IENvc21ldGljIGNoYW5nZXMuCj4gdjUgLT4gdjY6IHJlbW92 ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrcy4KPgo+IFRoaXMgcGF0Y2ggYWRkcyBhbiBNUEVHIE1l ZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBkZWZpbmVkCj4gaW4gSVNP L0lFQyAyMzAwOC0xLCBhbmQgYW4gTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9U TFYpIGRlbXV4ZXIsCj4gYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuIEN1cnJlbnRseSwgaXQg c3VwcG9ydHMgSEVWQywgQUFDIExBVE0sIGFuZAo+IEFSSUItVFRNTCBkZW11eGluZy4KPgo+IFNp bmNlIE1NVFAgaXMgZGVzaWduZWQgdG8gdHJhbnNtaXQgb3ZlciBJUCwgdGhlcmUgaXMgbm8gc2l6 ZSBpbmZvcm1hdGlvbgo+IHdpdGhpbiBlYWNoIE1NVFAgcGFja2V0LCBhbmQgdGhlcmUgaXMgbm8g b24tZGlzayBmb3JtYXQgZGVmaW5lZCBhbG9uZ3NpZGUKPiB0aGUgcHJvdG9jb2wuIE9uZSBpbmR1 c3RyaWFsIHNvbHV0aW9uIGlzIGEgc2ltcGxlIGNvbnRhaW5lciBmb3JtYXQgdXNpbmcKPiB0eXBl 4oCTbGVuZ3Ro4oCTdmFsdWUgcGFja2V0cywgd2hpY2ggaXMgZGVmaW5lZCBpbiBBUklCIFNURC1C MzIuCj4KPiBBbm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAgaXMgdXNpbmcg cGFja2V0IGNhcHR1cmUgKHBjYXApCj4gZmlsZXMgd2hpY2ggcmVjb3JkcyBuZXR3b3JrIHBhY2tl dHMuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW5jbHVkZSB0aGUKPiBkZW11eGVyIGZvciB0aGlzIGNv bnRhaW5lciBmb3JtYXQuCj4KPiBTaWduZWQtb2ZmLWJ5OiBTdXBlckZhc2hpIDxhZG1pbkBzdXBl cmZhc2hpLmNvbT4KPiAtLS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAgICAgIHwgICAgMSArCj4g IGRvYy9kZW11eGVycy50ZXhpICAgICAgICB8ICAgIDQgKwo+ICBsaWJhdmZvcm1hdC9NYWtlZmls ZSAgICAgfCAgICAxICsKPiAgbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAgMSArCj4gIGxp YmF2Zm9ybWF0L21tdHAuYyAgICAgICB8IDE1MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgbGliYXZmb3JtYXQvbW10cC5oICAgICAgIHwgICA2NCArKwo+ICBsaWJh dmZvcm1hdC9tbXR0bHYuYyAgICAgfCAgMzM1ICsrKysrKysrKwo+ICBsaWJhdmZvcm1hdC92ZXJz aW9uLmggICAgfCAgICAyICstCj4gIDggZmlsZXMgY2hhbmdlZCwgMTkzMiBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9tbXRwLmMK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHAuaAo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmb3JtYXQvbW10dGx2LmMKPgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9D aGFuZ2Vsb2cKPiBpbmRleCA0OTAxZWY2YWQ3Li41OTRjNDQ1ZWEyIDEwMDY0NAo+IC0tLSBhL0No YW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+IEBAIC03LDYgKzcsNyBAQCB2ZXJzaW9uIDxuZXh0 PjoKPiAgLSBFeHRlbmQgVkFBUEkgc3VwcG9ydCBmb3IgbGlidmEtd2luMzIgb24gV2luZG93cwo+ ICAtIGFmaXJlcXNyYyBhdWRpbyBzb3VyY2UgZmlsdGVyCj4gIC0gYXJscyBmaWx0ZXIKPiArLSBN TVRQIHBhcnNlciBhbmQgTU1UL1RMViBkZW11eGVyCj4KPiAgdmVyc2lvbiA2LjA6Cj4gIC0gUmFk aWFuY2UgSERSIGltYWdlIHN1cHBvcnQKPiBkaWZmIC0tZ2l0IGEvZG9jL2RlbXV4ZXJzLnRleGkg Yi9kb2MvZGVtdXhlcnMudGV4aQo+IGluZGV4IDJkMzNiNDdhNTYuLjU2YWFiMjUxYjIgMTAwNjQ0 Cj4gLS0tIGEvZG9jL2RlbXV4ZXJzLnRleGkKPiArKysgYi9kb2MvZGVtdXhlcnMudGV4aQo+IEBA IC02ODksNiArNjg5LDEwIEBAIFNldCB0aGUgc2FtcGxlIHJhdGUgZm9yIGxpYm9wZW5tcHQgdG8g b3V0cHV0Lgo+ICBSYW5nZSBpcyBmcm9tIDEwMDAgdG8gSU5UX01BWC4gVGhlIHZhbHVlIGRlZmF1 bHQgaXMgNDgwMDAuCj4gIEBlbmQgdGFibGUKPgo+ICtAc2VjdGlvbiBtbXR0bHYKPiArCj4gK0Rl bXV4ZXIgZm9yIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRzIChNTVQvVExWKSwgYXMgZGVm aW5lZCBpbiBBUklCCj4gU1RELUIzMi4KPiArCj4gIEBzZWN0aW9uIG1vdi9tcDQvM2dwCj4KPiAg RGVtdXhlciBmb3IgUXVpY2t0aW1lIEZpbGUgRm9ybWF0ICYgSVNPL0lFQyBCYXNlIE1lZGlhIEZp bGUgRm9ybWF0Cj4gKElTTy9JRUMgMTQ0OTYtMTIgb3IgTVBFRy00IFBhcnQgMTIsIElTTy9JRUMg MTU0NDQtMTIgb3IgSlBFRyAyMDAwIFBhcnQgMTIpLgo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gaW5kZXggZjhhZDdjNmExMS4uZTMy ZDZlNzFhMyAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2 Zm9ybWF0L01ha2VmaWxlCj4gQEAgLTM1NCw2ICszNTQsNyBAQCBPQkpTLSQoQ09ORklHX01MVl9E RU1VWEVSKSAgICAgICAgICAgICAgICs9IG1sdmRlYy5vCj4gcmlmZmRlYy5vCj4gIE9CSlMtJChD T05GSUdfTU1fREVNVVhFUikgICAgICAgICAgICAgICAgKz0gbW0ubwo+ICBPQkpTLSQoQ09ORklH X01NRl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1tZi5vCj4gIE9CSlMtJChDT05GSUdfTU1G X01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbW1mLm8gcmF3ZW5jLm8KPiArT0JKUy0kKENPTkZJ R19NTVRUTFZfREVNVVhFUikgICAgICAgICAgICArPSBtbXRwLm8gbW10dGx2Lm8KPiAgT0JKUy0k KENPTkZJR19NT0RTX0RFTVVYRVIpICAgICAgICAgICAgICArPSBtb2RzLm8KPiAgT0JKUy0kKENP TkZJR19NT0ZMRVhfREVNVVhFUikgICAgICAgICAgICArPSBtb2ZsZXgubwo+ICBPQkpTLSQoQ09O RklHX01PVl9ERU1VWEVSKSAgICAgICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFuLm8gbW92X2Vz ZHMubyBcCj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9y bWF0L2FsbGZvcm1hdHMuYwo+IGluZGV4IGVmZGIzNGUyOWQuLmQ1ZjRmNTY4MGUgMTAwNjQ0Cj4g LS0tIGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCj4gKysrIGIvbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jCj4gQEAgLTI3MCw2ICsyNzAsNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAg ZmZfbWx2X2RlbXV4ZXI7Cj4gIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbV9kZW11 eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW1mX2RlbXV4ZXI7Cj4gIGV4 dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9tbWZfbXV4ZXI7Cj4gK2V4dGVybiBjb25zdCBB VklucHV0Rm9ybWF0ICBmZl9tbXR0bHZfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRG b3JtYXQgIGZmX21vZHNfZGVtdXhlcjsKPiAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X21vZmxleF9kZW11eGVyOwo+ICBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfbW92X2Rl bXV4ZXI7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21tdHAuYyBiL2xpYmF2Zm9ybWF0L21t dHAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uNmYwMDJjYzgy Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZvcm1hdC9tbXRwLmMKPiBAQCAtMCwwICsx LDE1MjUgQEAKPiArLyoKPiArICogTVBFRyBNZWRpYSBUcmFuc3BvcnQgUHJvdG9jb2wgKE1NVFAp IHBhcnNlciwgYXMgZGVmaW5lZCBpbiBJU08vSUVDCj4gMjMwMDgtMS4KPiArICogQ29weXJpZ2h0 IChjKSAyMDIzIFN1cGVyRmFzaGkKPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxz dGRib29sLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZjb2RlYy9ieXRlc3RyZWFtLmgiCj4gKyNp bmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRy ZWFkd3JpdGUuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKPiArI2luY2x1ZGUgImRl bXV4LmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAibW10cC5oIgo+ICsj aW5jbHVkZSAibmV0d29yay5oIgo+ICsKPiArc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8g ewo+ICsgICAgdWludDhfdCBsb2NhdGlvbl90eXBlOwo+ICsgICAgdW5pb24gewo+ICsgICAgICAg IHN0cnVjdCB7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90IHBhY2tldF9pZDsKPiArICAgICAgICB9 IHR5cGUwOwo+ICsgICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRy IGlwdjRfc3JjX2FkZHI7Cj4gKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlwdjRfZHN0X2Fk ZHI7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgIGRzdF9wb3J0Owo+ICsgICAgICAgICAg ICB1aW50MTZfdCAgICAgICBwYWNrZXRfaWQ7Cj4gKyAgICAgICAgfSB0eXBlMTsKPiArICAgICAg ICBzdHJ1Y3Qgewo+ICsgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9zcmNfYWRkcjsK PiArICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7Cj4gKyAgICAgICAg ICAgIHVpbnQxNl90ICAgICAgICBkc3RfcG9ydDsKPiArICAgICAgICAgICAgdWludDE2X3QgICAg ICAgIHBhY2tldF9pZDsKPiArICAgICAgICB9IHR5cGUyOwo+ICsgICAgICAgIHN0cnVjdCB7Cj4g KyAgICAgICAgICAgIHVpbnQxNl90IG5ldHdvcmtfaWQ7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90 IE1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkOwo+ICsgICAgICAgICAgICB1aW50MTZfdCBNUEVH XzJfUElEOiAxMzsKPiArICAgICAgICB9IHR5cGUzOwo+ICsgICAgICAgIHN0cnVjdCB7Cj4gKyAg ICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X3NyY19hZGRyOwo+ICsgICAgICAgICAgICBz dHJ1Y3QgaW42X2FkZHIgaXB2Nl9kc3RfYWRkcjsKPiArICAgICAgICAgICAgdWludDE2X3QgICAg ICAgIGRzdF9wb3J0Owo+ICsgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgTVBFR18yX1BJRDog MTM7Cj4gKyAgICAgICAgfSB0eXBlNDsKPiArICAgICAgICBzdHJ1Y3Qgewo+ICsgICAgICAgICAg ICBjaGFyIFVSTFsweDEwMCArIDFdOwo+ICsgICAgICAgIH0gdHlwZTU7Cj4gKyAgICB9Owo+ICt9 Owo+ICsKPiArc3RhdGljIGludCBwYXJzZV9tbXRfZ2VuZXJhbF9sb2NhdGlvbl9pbmZvKAo+ICsg ICAgc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gKmluZm8sIEdldEJ5dGVDb250ZXh0ICpn YmMpCj4gK3sKPiArICAgIHVpbnQ4X3QgdXJsX3NpemU7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAxKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwo+ICsgICAgc3dpdGNoIChpbmZvLT5sb2NhdGlvbl90eXBlID0gYnl0ZXN0cmVh bTJfZ2V0X2J5dGV1KGdiYykpIHsKPiArICAgIGNhc2UgMHgwMDoKPiArICAgICAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCj4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIGluZm8tPnR5cGUwLnBhY2tldF9pZCA9IGJ5 dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAw eDAxOgo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDMy ICsgMzIgKyAxNiArIDE2KSAvIDgpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgKHVpbnQ4X3Qg KikKPiAmaW5mby0+dHlwZTEuaXB2NF9zcmNfYWRkciwgNCk7Cj4gKyAgICAgICAgYnl0ZXN0cmVh bTJfZ2V0X2J1ZmZlcnUoZ2JjLCAodWludDhfdCAqKQo+ICZpbmZvLT50eXBlMS5pcHY0X2RzdF9h ZGRyLCA0KTsKPiArICAgICAgICBpbmZvLT50eXBlMS5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9n ZXRfYmUxNnUoZ2JjKTsKPiArICAgICAgICBpbmZvLT50eXBlMS5wYWNrZXRfaWQgPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgMHgwMjoK PiArICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxMjggKyAx MjggKyAxNiArIDE2KSAvIDgpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAo+ICsgICAgICAgICAgICBn YmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMi5pcHY2X3NyY19hZGRyLCAxNik7Cj4gKyAgICAg ICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCj4gKyAgICAgICAgICAgIGdiYywgKHVpbnQ4X3Qg KikgJmluZm8tPnR5cGUyLmlwdjZfZHN0X2FkZHIsIDE2KTsKPiArICAgICAgICBpbmZvLT50eXBl Mi5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgICAgICBpbmZv LT50eXBlMi5wYWNrZXRfaWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgICAg ICBicmVhazsKPiArICAgIGNhc2UgMHgwMzoKPiArICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDE2ICsgMyArIDEzKSAvIDgpCj4gKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgIGluZm8tPnR5cGUzLm5ldHdv cmtfaWQgICAgICAgICAgICAgICAgID0KPiBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiAr ICAgICAgICBpbmZvLT50eXBlMy5NUEVHXzJfdHJhbnNwb3J0X3N0cmVhbV9pZCA9Cj4gYnl0ZXN0 cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7Cj4gKyAgICAgICAgaW5mby0+dHlwZTMuTVBFR18yX1BJRCA9 Cj4gKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICYgMGIxMTExMTExMTEx MTExOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAweDA0Ogo+ICsgICAgICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDEyOCArIDEyOCArIDE2ICsgMyArIDEz KSAvCj4gOCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAg ICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoCj4gKyAgICAgICAgICAgIGdiYywgKHVpbnQ4 X3QgKikgJmluZm8tPnR5cGU0LmlwdjZfc3JjX2FkZHIsIDE2KTsKPiArICAgICAgICBieXRlc3Ry ZWFtMl9nZXRfYnVmZmVydSgKPiArICAgICAgICAgICAgZ2JjLCAodWludDhfdCAqKSAmaW5mby0+ dHlwZTQuaXB2Nl9kc3RfYWRkciwgMTYpOwo+ICsgICAgICAgIGluZm8tPnR5cGU0LmRzdF9wb3J0 ICAgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKPiArICAgICAgICBpbmZvLT50eXBlNC5N UEVHXzJfUElEID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJgo+IDBiMTExMTExMTExMTEx MTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgMHgwNToKPiArICAgICAgICB1cmxfc2l6 ZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKGdiYyk7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0 X2J1ZmZlcihnYmMsICh1aW50OF90ICopIGluZm8tPnR5cGU1LlVSTCwKPiB1cmxfc2l6ZSk7Cj4g KyAgICAgICAgaW5mby0+dHlwZTUuVVJMW3VybF9zaXplXSA9ICdcMCc7Cj4gKyAgICAgICAgYnJl YWs7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ICsgICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0cnVjdCBTdHJlYW1zIHsK PiArICAgIEFWU3RyZWFtICpzdHJlYW07Cj4gKwo+ICsgICAgaW50IG51bV90aW1lc3RhbXBfZGVz Y3JpcHRvcnM7Cj4gKyAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciB7Cj4gKyAgICAg ICAgdWludDMyX3Qgc2VxX251bTsKPiArICAgICAgICBpbnQ2NF90ICBwcmVzZW50YXRpb25fdGlt ZTsKPiArICAgIH0gKnRpbWVzdGFtcF9kZXNjcmlwdG9yOwo+ICsKPiArICAgIGludCBudW1fZXh0 X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsKPiArICAgIHN0cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFt cERlc2NyaXB0b3Igewo+ICsgICAgICAgIHVpbnQzMl90IHNlcV9udW07Cj4gKyAgICAgICAgdWlu dDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7Cj4gKyAgICAgICAgdWludDhfdCAgbnVtX29mX2F1 Owo+ICsgICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90IGR0c19wdHNfb2Zm c2V0Owo+ICsgICAgICAgICAgICB1aW50MTZfdCBwdHNfb2Zmc2V0Owo+ICsgICAgICAgIH0gYXVb MHgxMDBdOwo+ICsgICAgfSAqZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yOwo+ICsKPiArICAgIHVp bnQzMl90ICAgIGxhc3Rfc2VxdWVuY2VfbnVtYmVyOwo+ICsgICAgdWludDE2X3QgICAgYXVfY291 bnQ7Cj4gKyAgICBBVkJ1ZmZlclJlZiAqcGVuZGluZ19idWZmZXI7Cj4gKyAgICBpbnQ2NF90ICAg ICBvZmZzZXQ7Cj4gKyAgICBpbnQgICAgICAgICBmbGFnczsKPiArCj4gKyAgICBzdHJ1Y3QgU3Ry ZWFtcyAqbmV4dDsKPiArfTsKPiArCj4gK3N0cnVjdCBNTVRQQ29udGV4dCB7Cj4gKyAgICBzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlcjsKPiArICAgIHN0cnVjdCBTdHJlYW1zICAg ICAgICAgICAqc3RyZWFtczsKPiArICAgIEFWUHJvZ3JhbSAgICAgICAgICAgICAgICAqcHJvZ3Jh bTsKPiArICAgIC8vIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIG1wdF9sb2NhdGlvbjsg VE9ETwo+ICsKPiArICAgIC8vIGJlbG93IGFyZSB0ZW1wb3JhcnkgZmllbGRzIGF2YWlsYWJsZSBm b3IgdGhlIHNjb3BlIG9mIGEgc2luZ2xlCj4gcGFja2V0Cj4gKyAgICBBVkZvcm1hdENvbnRleHQg KnM7Cj4gKyAgICBBVlBhY2tldCAgICAgICAgKnBrdDsKPiArICAgIHVpbnQxNl90ICAgICAgICBj dXJyZW50X3BpZDsKPiArICAgIGJvb2wgICAgICAgICAgICBpc19yYXA7Cj4gK307Cj4gKwo+ICtz dGF0aWMgc3RydWN0IFN0cmVhbXMgKmZpbmRfY3VycmVudF9zdHJlYW0oc3RydWN0IE1NVFBDb250 ZXh0ICpjdHgpCj4gK3sKPiArICAgIHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zOwo+ICsgICAgZm9y IChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJl YW1zLT5uZXh0KQo+ICsgICAgICAgIGlmIChzdHJlYW1zLT5zdHJlYW0tPmlkID09IGN0eC0+Y3Vy cmVudF9waWQpCj4gKyAgICAgICAgICAgIHJldHVybiBzdHJlYW1zOwo+ICsgICAgcmV0dXJuIE5V TEw7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgU3RyZWFtcyAqCj4gK2ZpbmRfb3JfYWxsb2Nh dGVfc3RyZWFtKHN0cnVjdCBNTVRQQ29udGV4dCAqY3R4LCB1aW50MTZfdCBwaWQpCj4gK3sKPiAr ICAgIEFWU3RyZWFtICAgICAgICpzdHJlYW07Cj4gKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFt czsKPiArICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsgc3RyZWFtcyAhPSBOVUxMOyBz dHJlYW1zID0gc3RyZWFtcy0+bmV4dCkKPiArICAgICAgICBpZiAoc3RyZWFtcy0+c3RyZWFtLT5p ZCA9PSBwaWQpIHsKPiArICAgICAgICAgICAgZmZzdHJlYW0oc3RyZWFtcy0+c3RyZWFtKS0+bmVl ZF9jb250ZXh0X3VwZGF0ZSA9IDE7Cj4gKyAgICAgICAgICAgIHJldHVybiBzdHJlYW1zOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICBzdHJlYW0gPSBhdmZvcm1hdF9uZXdfc3RyZWFtKGN0eC0+cywg TlVMTCk7Cj4gKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBOVUxMOwo+ICsgICAgc3Ry ZWFtLT5pZCA9IHBpZDsKPiArICAgIGF2X3Byb2dyYW1fYWRkX3N0cmVhbV9pbmRleChjdHgtPnMs IGN0eC0+cHJvZ3JhbS0+aWQsIHN0cmVhbS0+aW5kZXgpOwo+ICsKPiArICAgIHN0cmVhbXMgPSBh dl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgU3RyZWFtcykpOwo+ICsgICAgaWYgKHN0cmVhbXMgPT0g TlVMTCkgcmV0dXJuIE5VTEw7Cj4gKyAgICBzdHJlYW1zLT5zdHJlYW0gPSBzdHJlYW07Cj4gKyAg ICBzdHJlYW1zLT5uZXh0ICAgPSBjdHgtPnN0cmVhbXM7Cj4gKyAgICBzdHJlYW1zLT5vZmZzZXQg PSAtMTsKPiArICAgIGN0eC0+c3RyZWFtcyAgICA9IHN0cmVhbXM7Cj4gKyAgICByZXR1cm4gc3Ry ZWFtczsKPiArfQo+ICsKPiArZW51bSB7Cj4gKyAgICBNTVRfUEFDS0FHRV9UQUJMRV9JRCAgPSAw eDIwLAo+ICsgICAgUEFDS0FHRV9MSVNUX1RBQkxFX0lEID0gMHg4MCwKPiArfTsKPiArCj4gK2Vu dW0gewo+ICsgICAgTVBVX1RJTUVTVEFNUF9ERVNDUklQVE9SICAgICAgICAgID0gMHgwMDAxLAo+ ICsgICAgQUNDRVNTX0NPTlRST0xfREVTQ1JJUFRPUiAgICAgICAgID0gMHg4MDA0LAo+ICsgICAg VklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IgICAgICAgID0gMHg4MDEwLAo+ICsgICAgTUhfU1RS RUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUiAgID0gMHg4MDExLAo+ICsgICAgTUhfQVVESU9fQ09N UE9ORU5UX0RFU0NSSVBUT1IgICAgID0gMHg4MDE0LAo+ICsgICAgTUhfREFUQV9DT01QT05FTlRf REVTQ1JJUFRPUiAgICAgID0gMHg4MDIwLAo+ICsgICAgTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9E RVNDUklQVE9SID0gMHg4MDI2LAo+ICt9Owo+ICsKPiArc3RhdGljIGludAo+ICtwYXJzZV92aWRl b19jb21wb25lbnRfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAq Z2JjKQo+ICt7Cj4gKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOwo+ICsgICAgdWludDhf dCBsYW5ndWFnZV9jb2RlWzRdOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IFZJREVPX0NP TVBPTkVOVF9ERVNDUklQVE9SKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB Owo+ICsgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsK PiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0 b3JfbGVuZ3RoKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg ewo+ICsgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJf aW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKPiArICAgICAgICAv Kgo+ICsgICAgICAgICAqIHNraXA6Cj4gKyAgICAgICAgICogLSB2aWRlb19yZXNvbHV0aW9uCj4g KyAgICAgICAgICogLSB2aWRlb19hc3BlY3RfcmF0aW8KPiArICAgICAgICAgKiAtIHZpZGVvX3Nj YW5fZmxhZwo+ICsgICAgICAgICAqIC0gcmVzZXJ2ZWQKPiArICAgICAgICAgKiAtIHZpZGVvX2Zy YW1lX3JhdGUKPiArICAgICAgICAgKiAtIGNvbXBvbmVudF90YWcKPiArICAgICAgICAgKiAtIHZp ZGVvX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljcwo+ICsgICAgICAgICAqIC0gcmVzZXJ2ZWQKPiAr ICAgICAgICAgKi8KPiArICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAoNCArIDQgKyAx ICsgMiArIDUgKyAxNiArIDQgKyA0KSAvIDgpOwo+ICsKPiArICAgICAgICBpZiAoYnl0ZXN0cmVh bTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMykKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoJm5nYmMs IGxhbmd1YWdlX2NvZGUsIDMpOwo+ICsgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOwo+ ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7 Cj4gKwo+ICsgICAgcmV0dXJuIGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3Vh Z2UiLCBsYW5ndWFnZV9jb2RlLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtwYXJzZV9t aF9hdWRpb19jb21wb25lbnRfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29u dGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOwo+ICsgICAg dWludDhfdCBzdHJlYW1fY29udGVudDsKPiArICAgIHVpbnQ4X3Qgc3RyZWFtX3R5cGU7Cj4gKyAg ICB1aW50OF90IGxhbmd1YWdlX2NvZGVbNF07Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0g TUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldShnYmMpOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgZGVzY3JpcHRvcl9sZW5ndGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICB7Cj4gKyAgICAgICAgdWludDhfdCBieXRlOwo+ICsgICAgICAgIGJvb2wgRVNf bXVsdGlfbGluZ3VhbF9mbGFnOwo+ICsKPiArICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ ICsgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9y X2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPAo+ICsgICAgICAgICAgICAoNCArIDQgKyA4ICsgMTYgKyA4ICsgOCArIDEgKyAxICsg MiArIDMgKyAxICsgMjQpIC8gOCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7Cj4gKwo+ICsgICAgICAgIGJ5dGUgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5 dGV1KCZuZ2JjKTsKPiArICAgICAgICBzdHJlYW1fY29udGVudCA9IGJ5dGUgJiAwYjExMTE7Cj4g Kwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogc2tpcDoKPiArICAgICAgICAgKiAtIGNvbXBv bmVudF90eXBlCj4gKyAgICAgICAgICogLSBjb21wb25lbnRfdGFnCj4gKyAgICAgICAgICovCj4g KyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDMpOwo+ICsgICAgICAgIHN0cmVhbV90 eXBlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiArCj4gKyAgICAgICAgLy8gc2tp cDogc2ltdWxjYXN0X2dyb3VwX3RhZwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2Jj LCAxKTsKPiArCj4gKyAgICAgICAgYnl0ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZuZ2JjKTsKPiArICAgICAgICBFU19tdWx0aV9saW5ndWFsX2ZsYWcgPSBieXRl ID4+IDc7Cj4gKwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KCZuZ2JjLCBsYW5n dWFnZV9jb2RlLCAzKTsKPiArICAgICAgICBsYW5ndWFnZV9jb2RlWzNdID0gJ1wwJzsKPiArCj4g KyAgICAgICAgaWYgKEVTX211bHRpX2xpbmd1YWxfZmxhZykgewo+ICsgICAgICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMykKPiArICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICBieXRlc3RyZWFtMl9z a2lwdSgmbmdiYywgMyk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJf c2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAgc3dpdGNoIChzdHJlYW1f Y29udGVudCkgewo+ICsgICAgY2FzZSAweDM6Cj4gKyAgICAgICAgc3dpdGNoIChzdHJlYW1fdHlw ZSkgewo+ICsgICAgICAgIGNhc2UgMHgxMToKPiArICAgICAgICAgICAgc3RyZWFtLT5jb2RlY3Bh ci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9BQUNfTEFUTTsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgY2FzZSAweDFjOgo+ICsgICAgICAgICAgICBzdHJlYW0tPmNvZGVjcGFyLT5j b2RlY19pZCA9IEFWX0NPREVDX0lEX0FBQzsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSAweDQ6Cj4gKyAgICAgICAgc3RyZWFt LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9NUDRBTFM7Cj4gKyAgICAgICAgYnJl YWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFk YXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2RlLCAwKTsKPiArfQo+ICsKPiArI2RlZmluZSBN QVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SIDMyCj4gKyNkZWZpbmUgRElGRihhLCBiKSAoKGEp ID4gKGIpID8gKChhKSAtIChiKSkgOiAoKGIpIC0gKGEpKSkKPiArCj4gK3N0YXRpYyBpbnQKPiAr cGFyc2VfbXB1X3RpbWVzdGFtcF9kZXNjcmlwdG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBH ZXRCeXRlQ29udGV4dAo+ICpnYmMpCj4gK3sKPiArICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5n dGg7Cj4gKwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYg KyA4KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IE1QVV9USU1FU1RBTVBfREVTQ1JJ UFRPUikKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGRlc2Ny aXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7Cj4gKwo+ICsgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIHsKPiArICAgICAgICBH ZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdi Yy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgIHdoaWxlIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPiAwKSB7Cj4gKyAgICAgICAgICAgIHVpbnQ2 NF90IG1wdV9zZXFfbnVtOwo+ICsgICAgICAgICAgICBpbnQ2NF90ICBtcHVfcHJlc2VudGF0aW9u X3RpbWU7Cj4gKyAgICAgICAgICAgIHNpemVfdCAgIGk7Cj4gKwo+ICsgICAgICAgICAgICBzdHJ1 Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciAqZGVzYzsKPiArCj4gKyAgICAgICAgICAgIGlmIChi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAoMzIgKyA2NCkgLyA4KQo+ICsgICAg ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgICAgIG1w dV9zZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KCZuZ2JjKTsKPiArICAgICAgICAgICAg bXB1X3ByZXNlbnRhdGlvbl90aW1lID0KPiArICAgICAgICAgICAgICAgIGZmX3BhcnNlX250cF90 aW1lKGJ5dGVzdHJlYW0yX2dldF9iZTY0dSgmbmdiYykpIC0KPiBOVFBfT0ZGU0VUX1VTOwo+ICsK PiArICAgICAgICAgICAgaWYgKG1wdV9zZXFfbnVtID49IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2Vf bnVtYmVyKSB7Cj4gKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVt X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChz dHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRl c2MgPSBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kMjsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3Jp cHRvcnM7ICsraSkKPiArICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+dGltZXN0YW1w X2Rlc2NyaXB0b3JbaV0uc2VxX251bSA8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVh bXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRl c2MgPSBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kMTsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICAgICAgaWYgKHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMgKyAxID4K PiArICAgICAgICAgICAgICAgICAgICBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbGwgZGVzY3JpcHRvcnMgbGFyZ2VyIHRo YW4gdGhlIGN1cnJlbnQKPiBzZXF1ZW5jZSBudW1iZXIKPiArICAgICAgICAgICAgICAgICAgICAv LyB3ZSBjYW4ndCBhZGQgbW9yZSwgc28gd2Ugc2hvdWxkIGV2aWN0IHRoZSBvbmUgd2l0aAo+IHRo ZSBsYXJnZXN0IGRpc3RhbmNlCj4gKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWF4X2Rp c3QgPSAwOwo+ICsgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5u dW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOwo+ICsraSkKPiArICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKERJRkYoCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+ dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtcHVfc2VxX251bSkgPiBtYXhfZGlzdCkgewo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZGlzdCA9IERJRkYoCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3Jb aV0uc2VxX251bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcHVfc2VxX251 bSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICBh dl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7IC8vIHNob3VsZCBuZXZlciBmYWlsCj4gKyAgICAgICAg ICAgICAgICAgICAgZ290byBlbmQxOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgICAgIGRlc2MgPSBhdl9keW5hcnJheTJfYWRkKAo+ICsgICAgICAgICAgICAgICAgICAg ICh2b2lkICoqKSAmc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IsCj4gKyAgICAgICAgICAg ICAgICAgICAgJnN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCj4gKyAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yKSwgTlVMTCk7 Cj4gKyAgICAgICAgICAgICAgICBpZiAoZGVzYyA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+ICsKPiArICAgICAgICAgICAgICAgIGVuZDE6Cj4gKyAgICAgICAgICAgICAgICBkZXNj LT5zZXFfbnVtICAgICAgICAgICA9IG1wdV9zZXFfbnVtOwo+ICsgICAgICAgICAgICAgICAgZW5k MjoKPiArICAgICAgICAgICAgICAgIGRlc2MtPnByZXNlbnRhdGlvbl90aW1lID0gbXB1X3ByZXNl bnRhdGlvbl90aW1lOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAg cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfbXB1X2V4dGVuZGVkX3RpbWVz dGFtcF9kZXNjcmlwdG9yKAo+ICsgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbXMsIEdldEJ5dGVD b250ZXh0ICpnYmMpCj4gK3sKPiArICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7Cj4gKwo+ ICsgICAgQVZTdHJlYW0gKnN0cmVhbSA9IHN0cmVhbXMtPnN0cmVhbTsKPiArCj4gKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDgpIC8gOCkKPiArICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKSAhPSBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1IpCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9 IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCj4gKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAgICAgICAgdWludDhfdCAgYnl0ZTsK PiArICAgICAgICB1aW50OF90ICBwdHNfb2Zmc2V0X3R5cGU7Cj4gKyAgICAgICAgYm9vbCB0aW1l c2NhbGVfZmxhZzsKPiArICAgICAgICB1aW50MTZfdCBkZWZhdWx0X3B0c19vZmZzZXQgPSAwOwo+ ICsKPiArICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0y X2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7Cj4gKwo+ICsgICAg ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAoNSArIDIgKyAxKSAv IDgpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAg IGJ5dGUgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKPiArICAgICAg ICBwdHNfb2Zmc2V0X3R5cGUgPSAoYnl0ZSA+PiAxKSAmIDBiMTE7Cj4gKyAgICAgICAgdGltZXNj YWxlX2ZsYWcgID0gYnl0ZSAmIDE7Cj4gKwo+ICsgICAgICAgIGlmICh0aW1lc2NhbGVfZmxhZykg ewo+ICsgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwg NCkKPiArICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg ICAgICAgICBzdHJlYW0tPnRpbWVfYmFzZS5udW0gPSAxOwo+ICsgICAgICAgICAgICBzdHJlYW0t PnRpbWVfYmFzZS5kZW4gPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJm5nYmMpOwo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9PSAxKSB7Cj4gKyAgICAgICAg ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQo+ICsgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgICAgIGRlZmF1 bHRfcHRzX29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMp ID4gMCkgewo+ICsgICAgICAgICAgICBzaXplX3QgICBpOwo+ICsgICAgICAgICAgICB1aW50OF90 ICBudW1fb2ZfYXU7Cj4gKyAgICAgICAgICAgIHVpbnQxNl90IGRlY29kaW5nX3RpbWVfb2Zmc2V0 Owo+ICsgICAgICAgICAgICB1aW50NjRfdCBtcHVfc2VxX251bTsKPiArCj4gKyAgICAgICAgICAg IHN0cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IgKmRlc2MgPSBOVUxMOwo+ICsK PiArICAgICAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9PSAwKQo+ICsgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOyAgLy8gd2UgZG9uJ3Qga25vdyBob3cgdG8K PiBoYW5kbGUgdGhpcwo+ICsKPiArICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KCZuZ2JjKSA8ICgzMiArIDIgKyA2ICsgMTYgKyA4KQo+IC8gOCkKPiArICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICBtcHVfc2Vx X251bSA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgmbmdiYyk7Cj4gKyAgICAgICAgICAgIC8vIHNr aXA6IGxlYXBfaW5kaWNhdG9yCj4gKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMs ICgyICsgNikgLyA4KTsKPiArICAgICAgICAgICAgZGVjb2RpbmdfdGltZV9vZmZzZXQgPSBieXRl c3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOwo+ICsgICAgICAgICAgICBudW1fb2ZfYXUgICAgICAg ICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cj4gKwo+ICsgICAgICAgICAgICBp ZiAobXB1X3NlcV9udW0gPj0gc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9k ZXNjcmlwdG9yczsKPiArK2kpCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPmV4 dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIG1wdV9zZXFfbnVtKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBz dHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGVuZDI7Cj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNj cmlwdG9yczsKPiArK2kpCj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPmV4dF90 aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtIDwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMTsKPiArICAgICAgICAgICAgICAgICAgICB9 Cj4gKwo+ICsgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3JzICsgMSA+Cj4gKyAgICAgICAgICAgICAgICAgICAgTUFYX05VTV9USU1FU1RBTVBf REVTQ1JJUFRPUikgewo+ICsgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kaWZmID0g MDsKPiArICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwKPiBzdHJlYW1zLT5udW1f ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoRElGRigKPiArCj4gc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNl cV9udW0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pID4g bWF4X2RpZmYpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgICAgID0gc3Ry ZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yCj4gKyBpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWF4X2RpZmYgPSBESUZGKAo+ICsKPiBzdHJlYW1zLT5leHRfdGltZXN0YW1w X2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtcHVfc2VxX251bSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7Cj4gKyAgICAgICAgICAgICAgICAg ICAgZ290byBlbmQxOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAg IGRlc2MgPSBhdl9keW5hcnJheTJfYWRkKAo+ICsgICAgICAgICAgICAgICAgICAgICh2b2lkICoq KSAmc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yLAo+ICsgICAgICAgICAgICAgICAg ICAgICZzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9ycywKPiArICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciks IE5VTEwpOwo+ICsgICAgICAgICAgICAgICAgaWYgKGRlc2MgPT0gTlVMTCkKPiArICAgICAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICAgICAgICAg IGVuZDE6Cj4gKyAgICAgICAgICAgICAgICBkZXNjLT5zZXFfbnVtICAgICAgICAgICAgICA9IG1w dV9zZXFfbnVtOwo+ICsgICAgICAgICAgICAgICAgZW5kMjoKPiArICAgICAgICAgICAgICAgIGRl c2MtPmRlY29kaW5nX3RpbWVfb2Zmc2V0ID0gZGVjb2RpbmdfdGltZV9vZmZzZXQ7Cj4gKyAgICAg ICAgICAgICAgICBkZXNjLT5udW1fb2ZfYXUgICAgICAgICAgICA9IG51bV9vZl9hdTsKPiArICAg ICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl9hdTsg KytpKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Jm5nYmMpIDwgMikKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKPiArICAgICAgICAgICAgICAgIGlmIChkZXNjICE9IE5VTEwpCj4gKyAgICAgICAgICAg ICAgICAgICAgZGVzYy0+YXVbaV0uZHRzX3B0c19vZmZzZXQgPQo+IGJ5dGVzdHJlYW0yX2dldF9i ZTE2dSgmbmdiYyk7Cj4gKyAgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAg ICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDIpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlm IChwdHNfb2Zmc2V0X3R5cGUgPT0gMikgewo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgICAgICAgICBp ZiAoZGVzYyAhPSBOVUxMKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLT5hdVtpXS5w dHNfb2Zmc2V0ID0KPiBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOwo+ICsgICAgICAgICAg ICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cHUoJm5nYmMsIDIpOwo+ICsgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjICE9IE5VTEwp IHsKPiArICAgICAgICAgICAgICAgICAgICBkZXNjLT5hdVtpXS5wdHNfb2Zmc2V0ID0gZGVmYXVs dF9wdHNfb2Zmc2V0Owo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9y X2xlbmd0aCk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAr cGFyc2VfYWRkaXRpb25hbF9hcmliX3N1YnRpdGxlX2luZm8oQVZTdHJlYW0gKnN0cmVhbSwgR2V0 Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAgYm9vbCAgICBzdGFydF9tcHVfc2VxdWVuY2Vf bnVtYmVyX2ZsYWc7Cj4gKyAgICBjaGFyICAgIGxhbmd1YWdlX2NvZGVbNF07Cj4gKyAgICB1aW50 OF90IHN1YnRpdGxlX2Zvcm1hdDsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8Cj4gKyAgICAgICAgKDggKyA0ICsgMSArIDMgKyAyNCArIDIgKyA0ICsgMiAr IDQgKyA0ICsgNCArIDQpIC8gOCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArICAgIC8vIHNraXA6IHN1YnRpdGxlX3RhZwo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUo Z2JjLCAxKTsKPiArICAgIHN0YXJ0X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZyA9IChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoZ2JjKSA+PiAzKSAmCj4gMTsKPiArICAgIGJ5dGVzdHJlYW0yX2dldF9i dWZmZXJ1KGdiYywgbGFuZ3VhZ2VfY29kZSwgMyk7Cj4gKyAgICBsYW5ndWFnZV9jb2RlWzNdID0g J1wwJzsKPiArICAgIHN1YnRpdGxlX2Zvcm1hdCA9IChieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2Jj KSA+PiAyKSAmIDBiMTExMTsKPiArICAgIC8qCj4gKyAgICAgKiBza2lwOgo+ICsgICAgICogLSBU TUQKPiArICAgICAqIC0gRE1GCj4gKyAgICAgKiAtIHJlc29sdXRpb24KPiArICAgICAqIC0gY29t cHJlc3Npb25fdHlwZQo+ICsgICAgICovCj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsICg0 ICsgNCArIDQgKyA0KSAvIDgpOwo+ICsKPiArICAgIGlmIChzdGFydF9tcHVfc2VxdWVuY2VfbnVt YmVyX2ZsYWcpCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyKTsKPiArCj4gKyAg ICBzd2l0Y2ggKHN1YnRpdGxlX2Zvcm1hdCkgewo+ICsgICAgY2FzZSAwYjAwMDA6Cj4gKyAgICAg ICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9UVE1MOwo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBhdl9kaWN0X3NldCgmc3RyZWFt LT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQKPiArcGFyc2VfbWhfZGF0YV9jb21wb25lbnRfZGVzY3JpcHRvcihBVlN0cmVhbSAq c3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1aW50OF90IGRlc2NyaXB0 b3JfbGVuZ3RoOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgKDE2ICsgOCkgLyA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IE1IX0RBVEFfQ09NUE9ORU5U X0RFU0NSSVBUT1IpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAg ICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsKPiAr ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5n dGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAg ICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKPiArICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZu Z2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOwo+ICsgICAgICAgIGJ5dGVzdHJl YW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOwo+ICsKPiArICAgICAgICBpZiAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMTYgLyA4KQo+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0y X2dldF9iZTE2dSgmbmdiYykpIHsKPiArICAgICAgICBjYXNlIDB4MDAyMDogLy8gYWRkaXRpb25h bCBBUklCIHN1YnRpdGxlIGluZm8gKFRhYmxlIDctNzQsIEFSSUIKPiBTVEQtQjYwLCBWZXJzaW9u IDEuMTQtRTEpCj4gKyAgICAgICAgICAgIHJldHVybiBwYXJzZV9hZGRpdGlvbmFsX2FyaWJfc3Vi dGl0bGVfaW5mbyhzdHJlYW0sICZuZ2JjKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArcGFyc2Vfc3RyZWFtX2lkZW50 aWZpZXJfZGVzY3JpcHRvcihBVlN0cmVhbSAqc3RyZWFtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ ICt7Cj4gKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOwo+ICsKPiArICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2 dShnYmMpICE9IE1IX1NUUkVBTV9JREVOVElGSUVSX0RFU0NSSVBUT1IpCj4gKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVz dHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAgICAgICAgLy8gbm8gbmVlZCBmb3Igbm93Cj4g KyAgICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9kZXNjcmlw dG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4g KyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDMpCj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0yX3Bl ZWtfYmUxNnUoZ2JjKSkgewo+ICsgICAgY2FzZSBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1I6Cj4g KyAgICAgICAgcmV0dXJuIHBhcnNlX21wdV90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJlYW1zLCBn YmMpOwo+ICsgICAgY2FzZSBWSURFT19DT01QT05FTlRfREVTQ1JJUFRPUjoKPiArICAgICAgICBy ZXR1cm4gcGFyc2VfdmlkZW9fY29tcG9uZW50X2Rlc2NyaXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBn YmMpOwo+ICsgICAgY2FzZSBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SOgo+ICsgICAg ICAgIHJldHVybiBwYXJzZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlwdG9yKHN0cmVhbXMtPnN0 cmVhbSwgZ2JjKTsKPiArICAgIGNhc2UgTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1I6Cj4g KyAgICAgICAgcmV0dXJuIHBhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9yKHN0cmVh bXMtPnN0cmVhbSwgZ2JjKTsKPiArICAgIGNhc2UgTUhfREFUQV9DT01QT05FTlRfREVTQ1JJUFRP UjoKPiArICAgICAgICByZXR1cm4gcGFyc2VfbWhfZGF0YV9jb21wb25lbnRfZGVzY3JpcHRvcihz dHJlYW1zLT5zdHJlYW0sIGdiYyk7Cj4gKyAgICBjYXNlIE1QVV9FWFRFTkRFRF9USU1FU1RBTVBf REVTQ1JJUFRPUjoKPiArICAgICAgICByZXR1cm4gcGFyc2VfbXB1X2V4dGVuZGVkX3RpbWVzdGFt cF9kZXNjcmlwdG9yKHN0cmVhbXMsIGdiYyk7Cj4gKyAgICBjYXNlIEFDQ0VTU19DT05UUk9MX0RF U0NSSVBUT1I6Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAyKTsKPiArICAgICAg ICBieXRlc3RyZWFtMl9za2lwKGdiYywgYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykpOwo+ICsg ICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsgICAgYXZfbG9nKHN0cmVhbXMtPnN0cmVhbSwg QVZfTE9HX0lORk8sICJVbmtub3duIGRlc2NyaXB0b3I6IDB4JTA0eFxuIiwKPiArICAgICAgICAg ICBieXRlc3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpOwo+ICsgICAgcmV0dXJuIEFWRVJST1JfUEFU Q0hXRUxDT01FOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBhcnNlX21tdF9wYWNrYWdlX3RhYmxl KE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIHVpbnQx Nl90IGxlbmd0aDsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2Jj KSA8ICg4ICsgOCArIDE2KSAvIDgpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gTU1UX1BBQ0tBR0Vf VEFCTEVfSUQpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAv LyBza2lwOiB2ZXJzaW9uCj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOwo+ICsgICAg bGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7Cj4gKwo+ICsgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICB7Cj4gKyAgICAgICAgc2l6ZV90ICAgaSwgajsKPiAr ICAgICAgICB1aW50OF90ICBwYWNrYWdlX2lkX2xlbmd0aDsKPiArICAgICAgICB1aW50MTZfdCBk ZXNjcmlwdG9yc19sZW5ndGg7Cj4gKyAgICAgICAgdWludDhfdCAgbnVtYmVyX29mX2Fzc2V0czsK PiArCj4gKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKPiArICAgICAgICBieXRlc3RyZWFt Ml9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3RoKTsKPiArCj4gKyAgICAgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8ICg2ICsgMiArIDgpIC8gOCkKPiArICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgICAgIC8vIHNr aXA6IE1QVF9tb2RlCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDEpOwo+ICsg ICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsK PiArCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgcGFja2FnZV9pZF9sZW5ndGgp Owo+ICsKPiArICAgICAgICBkZXNjcmlwdG9yc19sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUx NigmbmdiYyk7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgZGVzY3JpcHRvcnNf bGVuZ3RoKTsKPiArCj4gKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZu Z2JjKSA8IDEpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsg ICAgICAgIG51bWJlcl9vZl9hc3NldHMgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOwo+ ICsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2Fzc2V0czsgKytpKSB7Cj4g KyAgICAgICAgICAgIGludCBlcnI7Cj4gKwo+ICsgICAgICAgICAgICB1aW50OF90ICBhc3NldF9p ZF9sZW5ndGg7Cj4gKyAgICAgICAgICAgIHVpbnQ4X3QgIGxvY2F0aW9uX2NvdW50Owo+ICsgICAg ICAgICAgICB1aW50MTZfdCBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGg7Cj4gKyAgICAgICAgICAg IHVpbnQzMl90IGFzc2V0X3R5cGU7Cj4gKwo+ICsgICAgICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAq c3RyZWFtID0gTlVMTDsKPiArCj4gKyAgICAgICAgICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRp b25JbmZvIGluZm87Cj4gKwo+ICsgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoJm5nYmMpIDwgKDggKyAzMiArIDgpIC8gOCkKPiArICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAg KiBza2lwOgo+ICsgICAgICAgICAgICAgKiAtIGlkZW50aWZpZXJfdHlwZQo+ICsgICAgICAgICAg ICAgKiAtIGFzc2V0X2lkX3NjaGVtZQo+ICsgICAgICAgICAgICAgKi8KPiArICAgICAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcHUoJm5nYmMsICg4ICsgMzIpIC8gOCk7Cj4gKyAgICAgICAgICAgIGFz c2V0X2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cj4gKwo+ICsgICAg ICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCBhc3NldF9pZF9sZW5ndGgpOwo+ICsKPiAr ICAgICAgICAgICAgYXNzZXRfdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9sZTMyKCZuZ2JjKTsKPiAr Cj4gKyAgICAgICAgICAgIC8vIHNraXA6IGFzc2V0X2Nsb2NrX3JlbGF0aW9uX2ZsYWcKPiArICAg ICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgMSk7Cj4gKwo+ICsgICAgICAgICAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMSkKPiArICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICBsb2NhdGlvbl9j b3VudCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cj4gKwo+ICsgICAgICAgICAgICBm b3IgKGogPSAwOyBqIDwgbG9jYXRpb25fY291bnQ7ICsraikKPiArICAgICAgICAgICAgICAgIGlm ICgoZXJyID0gcGFyc2VfbW10X2dlbmVyYWxfbG9jYXRpb25faW5mbygmaW5mbywgJm5nYmMpKQo+ IDwgMCkKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ICsKPiArICAgICAgICAg ICAgc3dpdGNoIChhc3NldF90eXBlKSB7Cj4gKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ2gnLCAn ZScsICd2JywgJzEnKToKPiArICAgICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5cGUg IT0gMHgwMCkgcmV0dXJuCj4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKyAgICAgICAgICAgICAg ICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsCj4gaW5mby50eXBlMC5wYWNr ZXRfaWQpOwo+ICsgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICsgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFy LT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPOwo+ICsgICAgICAgICAgICAgICAgc3Ry ZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCAgID0gQVZfQ09ERUNfSURfSEVWQzsKPiAr ICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFz c2V0X3R5cGU7Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgY2FzZSBN S1RBRygnbScsICdwJywgJzQnLCAnYScpOgo+ICsgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9j YXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4KPiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKPiArICAg ICAgICAgICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxsb2NhdGVfc3RyZWFtKGN0eCwKPiBpbmZv LnR5cGUwLnBhY2tldF9pZCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwp IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVh bS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfQVVESU87Cj4gKyAgICAgICAg ICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90eXBl Owo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ3Mn LCAndCcsICdwJywgJ3AnKToKPiArICAgICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5 cGUgPT0gMHgwMCkgewo+ICsgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxs b2NhdGVfc3RyZWFtKGN0eCwKPiBpbmZvLnR5cGUwLnBhY2tldF9pZCk7Cj4gKyAgICAgICAgICAg ICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsg ICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9 Cj4gQVZNRURJQV9UWVBFX1NVQlRJVExFOwo+ICsgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+ c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFzc2V0X3R5cGU7Cj4gKyAgICAgICAgICAg ICAgICB9Cj4gKyAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgY2FzZSBNS1RB RygnYScsICdhJywgJ3AnLCAncCcpOgo+ICsgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ3Mn LCAnZycsICdkJyk6Cj4gKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ2EnLCAnYScsICdnJywgJ2Qn KToKPiArICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBUT0RPCj4gKyAgICAgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAy KQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAg ICAgICAgIGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgm bmdiYyk7Cj4gKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdi YykgPAo+IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCkKPiArICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAgICAgICBpZiAoc3RyZWFtICE9IE5VTEwp IHsKPiArICAgICAgICAgICAgICAgIEdldEJ5dGVDb250ZXh0IG5uZ2JjOwo+ICsgICAgICAgICAg ICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbm5nYmMsIG5nYmMuYnVmZmVyLAo+IGFzc2V0X2Rlc2Ny aXB0b3JzX2xlbmd0aCk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0y X2dldF9ieXRlc19sZWZ0KCZubmdiYykgPiAwKQo+ICsgICAgICAgICAgICAgICAgICAgIGlmICgo ZXJyID0gcGFyc2VfZGVzY3JpcHRvcihzdHJlYW0sICZubmdiYykpIDwgMCkKPiArICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoKTsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfcGFja2Fn ZV9saXN0X3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sK PiArICAgIHNpemVfdCAgIGk7Cj4gKyAgICB1aW50MzJfdCBsZW5ndGg7Cj4gKwo+ICsgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoOCArIDggKyAxNikgLyA4KQo+ICsg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgaWYgKGJ5dGVzdHJlYW0y X2dldF9ieXRldShnYmMpICE9IFBBQ0tBR0VfTElTVF9UQUJMRV9JRCkKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIC8vIHNraXA6IHZlcnNpb24KPiArICAgIGJ5 dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7Cj4gKyAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRf YmUxNnUoZ2JjKTsKPiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2Jj KSA8IGxlbmd0aCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAg IHsKPiArICAgICAgICBpbnQgICAgIGVycjsKPiArICAgICAgICB1aW50OF90IG51bV9vZl9wYWNr YWdlOwo+ICsgICAgICAgIHVpbnQ4X3QgbnVtX29mX2lwX2RlbGl2ZXJ5Owo+ICsKPiArICAgICAg ICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMs IGdiYy0+YnVmZmVyLCBsZW5ndGgpOwo+ICsKPiArICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOwo+ICsgICAgICAgIG51bV9vZl9wYWNrYWdlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1 KCZuZ2JjKTsKPiArCj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vZl9wYWNrYWdlOyAr K2kpIHsKPiArICAgICAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgcGFja2Fn ZV9pZF9sZW5ndGg7Cj4gKyAgICAgICAgICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZv IGluZm87Cj4gKwo+ICsgICAgICAgICAgICBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0y X2dldF9ieXRlKCZuZ2JjKTsKPiArICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywg cGFja2FnZV9pZF9sZW5ndGgpOwo+ICsKPiArICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9t bXRfZ2VuZXJhbF9sb2NhdGlvbl9pbmZvKCZpbmZvLCAmbmdiYykpIDwgMCkKPiArICAgICAgICAg ICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgMSkKPiArICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgbnVtX29mX2lwX2RlbGl2ZXJ5ID0gYnl0ZXN0 cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKPiArCj4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51 bV9vZl9pcF9kZWxpdmVyeTsgKytpKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRD SFdFTENPTUU7Cj4gKyAgICB9Cj4gKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7 Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfdGFibGUo TU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKPiArewo+ICsgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAyKQo+ICsgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwo+ICsgICAgc3dpdGNoIChieXRlc3RyZWFtMl9wZWVrX2J5dGV1KGdi YykpIHsKPiArICAgIGNhc2UgTU1UX1BBQ0tBR0VfVEFCTEVfSUQ6Cj4gKyAgICAgICAgcmV0dXJu IHBhcnNlX21tdF9wYWNrYWdlX3RhYmxlKGN0eCwgZ2JjKTsKPiArICAgIGNhc2UgUEFDS0FHRV9M SVNUX1RBQkxFX0lEOgo+ICsgICAgICAgIHJldHVybiBwYXJzZV9wYWNrYWdlX2xpc3RfdGFibGUo Y3R4LCBnYmMpOwo+ICsgICAgfQo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKTsgLy8gVE9ETwo+ICsgICAgcmV0dXJuIDA7Cj4gK30K PiArCj4gK2VudW0gewo+ICsgICAgUEFfTUVTU0FHRV9JRCA9IDB4MDAwMCwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgcGFyc2VfcGFfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29u dGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1aW50MzJfdCBsZW5ndGg7Cj4gKwo+ICsgICAgaWYgKGJ5 dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4ICsgMzIpIC8gOCkKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYmUxNnUoZ2JjKSAhPSBQQV9NRVNTQUdFX0lEKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOwo+ICsgICAgLy8gc2tpcDogdmVyc2lvbgo+ICsgICAgYnl0ZXN0cmVhbTJf c2tpcHUoZ2JjLCAxKTsKPiArICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydShnYmMp Owo+ICsKPiArICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3Ro KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgewo+ICsgICAg ICAgIHNpemVfdCAgaTsKPiArICAgICAgICB1aW50OF90IG51bV9vZl90YWJsZXM7Cj4gKwo+ICsg ICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgm bmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgMSkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gKyAgICAgICAgbnVtX29mX3RhYmxlcyA9IGJ5dGVzdHJlYW0yX2dldF9i eXRldSgmbmdiYyk7Cj4gKwo+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2ZfdGFibGVz OyArK2kpIHsKPiArICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDggKyA4ICsg MTYpIC8gOCk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoJm5nYmMpID4gMCkgewo+ICsgICAgICAgICAgICBpbnQgZXJyID0gcGFy c2VfdGFibGUoY3R4LCAmbmdiYyk7Cj4gKyAgICAgICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4g ZXJyOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywg bGVuZ3RoKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJz ZV9zaWduYWxsaW5nX21lc3NhZ2UoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdi YykKPiArewo+ICsgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCA0KQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgc3dpdGNoIChieXRl c3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpIHsKPiArICAgIGNhc2UgUEFfTUVTU0FHRV9JRDoKPiAr ICAgICAgICByZXR1cm4gcGFyc2VfcGFfbWVzc2FnZShjdHgsIGdiYyk7Cj4gKyAgICB9Cj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIHsKPiAr ICAgIE5PVF9GUkFHTUVOVEVEICA9IDBiMDAsCj4gKyAgICBGSVJTVF9GUkFHTUVOVCAgPSAwYjAx LAo+ICsgICAgTUlERExFX0ZSQUdNRU5UID0gMGIxMCwKPiArICAgIExBU1RfRlJBR01FTlQgICA9 IDBiMTEsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgewo+ICsgICAgdWlu dDE2X3QgICAgICAgICAgICAgICAgIHBpZDsKPiArICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxl ciAqbmV4dDsKPiArCj4gKyAgICB1aW50OF90ICpkYXRhOwo+ICsgICAgc2l6ZV90ICBzaXplLCBj YXA7Cj4gKwo+ICsgICAgdWludDMyX3QgbGFzdF9zZXE7Cj4gKwo+ICsgICAgZW51bSB7Cj4gKyAg ICAgICAgSU5JVCA9IDAsCj4gKyAgICAgICAgTk9UX1NUQVJURUQsCj4gKyAgICAgICAgSU5fRlJB R01FTlQsCj4gKyAgICAgICAgU0tJUCwKPiArICAgIH0gc3RhdGU7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50Cj4gK2FwcGVuZF9kYXRhKHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqY3R4LCBjb25z dCB1aW50OF90ICpkYXRhLCB1aW50MzJfdAo+IHNpemUpCj4gK3sKPiArICAgIGlmIChjdHgtPnNp emUgKyBzaXplID4gVUlOVDMyX01BWCkgcmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKPiArICAg IGlmIChjdHgtPmNhcCA8IGN0eC0+c2l6ZSArIHNpemUpIHsKPiArICAgICAgICB2b2lkICAgKm5l d19kYXRhOwo+ICsgICAgICAgIHNpemVfdCBuZXdfY2FwID0gY3R4LT5jYXAgPT0gMCA/IDEwMjQg OiBjdHgtPmNhcCAqIDI7Cj4gKyAgICAgICAgd2hpbGUgKG5ld19jYXAgPCBjdHgtPnNpemUgKyBz aXplKSBuZXdfY2FwICo9IDI7Cj4gKwo+ICsgICAgICAgIG5ld19kYXRhID0gYXZfcmVhbGxvYyhj dHgtPmRhdGEsIG5ld19jYXApOwo+ICsgICAgICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKSByZXR1 cm4gQVZFUlJPUihlcnJubyk7Cj4gKyAgICAgICAgY3R4LT5kYXRhID0gbmV3X2RhdGE7Cj4gKyAg ICAgICAgY3R4LT5jYXAgID0gbmV3X2NhcDsKPiArICAgIH0KPiArICAgIG1lbWNweShjdHgtPmRh dGEgKyBjdHgtPnNpemUsIGRhdGEsIHNpemUpOwo+ICsgICAgY3R4LT5zaXplICs9IHNpemU7Cj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtjaGVja19zdGF0ZShNTVRQ Q29udGV4dCAqY3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzcywgdWludDMyX3QKPiBz ZXFfbnVtKQo+ICt7Cj4gKyAgICBpZiAoYXNzLT5zdGF0ZSA9PSBJTklUKSB7Cj4gKyAgICAgICAg YXNzLT5zdGF0ZSA9IFNLSVA7Cj4gKyAgICB9IGVsc2UgaWYgKHNlcV9udW0gIT0gYXNzLT5sYXN0 X3NlcSArIDEpIHsKPiArICAgICAgICBpZiAoYXNzLT5zaXplICE9IDApIHsKPiArICAgICAgICAg ICAgYXZfbG9nKGN0eC0+cywgQVZfTE9HX1dBUk5JTkcsCj4gKyAgICAgICAgICAgICAgICAgICAi UGFja2V0IHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEgIT0gJXUsIGRyb3AgJXp1Cj4gYnl0 ZXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBhc3MtPmxhc3Rfc2VxLCBzZXFfbnVtLCBhc3Mt PnNpemUpOwo+ICsgICAgICAgICAgICBhc3MtPnNpemUgPSAwOwo+ICsgICAgICAgIH0gZWxzZSB7 Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5HLAo+ICsgICAgICAg ICAgICAgICAgICAgIlBhY2tldCBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAxICE9ICV1XG4i LAo+ICsgICAgICAgICAgICAgICAgICAgYXNzLT5sYXN0X3NlcSwgc2VxX251bSk7Cj4gKyAgICAg ICAgfQo+ICsgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQOwo+ICsgICAgfQo+ICsgICAgYXNzLT5s YXN0X3NlcSA9IHNlcV9udW07Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhc3NlbWJsZV9mcmFnbWVudCgKPiArICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqY3R4 LCB1aW50MzJfdCBzZXFfbnVtLAo+ICsgICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGlu ZGljYXRvciwKPiArICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHNpemUsCj4gKyAg ICBpbnQgKCpwYXJzZXIpKE1NVFBDb250ZXh0ICosIEdldEJ5dGVDb250ZXh0ICopLAo+ICsgICAg TU1UUENvbnRleHQgKm9wYXF1ZSkKPiArewo+ICsgICAgR2V0Qnl0ZUNvbnRleHQgZ2JjOwo+ICsg ICAgaW50ICAgICAgICAgICAgZXJyOwo+ICsKPiArICAgIHN3aXRjaCAoaW5kaWNhdG9yKSB7Cj4g KyAgICBjYXNlIE5PVF9GUkFHTUVOVEVEOgo+ICsgICAgICAgIGlmIChjdHgtPnN0YXRlID09IElO X0ZSQUdNRU5UKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICBjdHgtPnN0 YXRlID0gTk9UX1NUQVJURUQ7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmZ2JjLCBkYXRh LCBzaXplKTsKPiArICAgICAgICByZXR1cm4gcGFyc2VyKG9wYXF1ZSwgJmdiYyk7Cj4gKyAgICBj YXNlIEZJUlNUX0ZSQUdNRU5UOgo+ICsgICAgICAgIGlmIChjdHgtPnN0YXRlID09IElOX0ZSQUdN RU5UKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICBjdHgtPnN0YXRlID0g SU5fRlJBR01FTlQ7Cj4gKyAgICAgICAgcmV0dXJuIGFwcGVuZF9kYXRhKGN0eCwgZGF0YSwgc2l6 ZSk7Cj4gKyAgICBjYXNlIE1JRERMRV9GUkFHTUVOVDoKPiArICAgICAgICBpZiAoY3R4LT5zdGF0 ZSA9PSBTS0lQKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhvcGFxdWUtPnMsIEFWX0xPR19WRVJC T1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsCj4gc2VxX251bSk7Cj4gKyAgICAgICAgICAgIHJldHVy biAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVO VCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICAgICAgcmV0dXJuIGFwcGVuZF9k YXRhKGN0eCwgZGF0YSwgc2l6ZSk7Cj4gKyAgICBjYXNlIExBU1RfRlJBR01FTlQ6Cj4gKyAgICAg ICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgewo+ICsgICAgICAgICAgICBhdl9sb2cob3BhcXVl LT5zLCBBVl9MT0dfVkVSQk9TRSwgIkRyb3AgcGFja2V0ICV1XG4iLAo+IHNlcV9udW0pOwo+ICsg ICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKGN0eC0+c3Rh dGUgIT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgICAg IGlmICgoZXJyID0gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKSkgPCAwKSByZXR1cm4gZXJy Owo+ICsKPiArICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGN0eC0+ZGF0YSwgY3R4LT5z aXplKTsKPiArICAgICAgICBlcnIgPSBwYXJzZXIob3BhcXVlLCAmZ2JjKTsKPiArCj4gKyAgICAg ICAgY3R4LT5zaXplICA9IDA7Cj4gKyAgICAgICAgY3R4LT5zdGF0ZSA9IE5PVF9TVEFSVEVEOwo+ ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IEZy YWdtZW50QXNzZW1ibGVyICoKPiArZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoTU1UUENvbnRl eHQgKmN0eCwgdWludDE2X3QgcGlkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJs ZXIgKmFzczsKPiArICAgIGZvciAoYXNzID0gY3R4LT5hc3NlbWJsZXI7IGFzcyAhPSBOVUxMOyBh c3MgPSBhc3MtPm5leHQpCj4gKyAgICAgICAgaWYgKGFzcy0+cGlkID09IHBpZCkKPiArICAgICAg ICAgICAgcmV0dXJuIGFzczsKPiArCj4gKyAgICBhc3MgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIpKTsKPiArICAgIGlmIChhc3MgPT0gTlVMTCkgcmV0dXJuIE5V TEw7Cj4gKyAgICBhc3MtPnBpZCAgICAgICAgICAgICAgPSBwaWQ7Cj4gKyAgICBhc3MtPm5leHQg ICAgICAgICAgICAgPSBjdHgtPmFzc2VtYmxlcjsKPiArICAgIHJldHVybiBjdHgtPmFzc2VtYmxl ciA9IGFzczsKPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2Vz KAo+ICsgICAgTU1UUENvbnRleHQgKmN0eCwgdWludDMyX3Qgc2VxX251bSwgR2V0Qnl0ZUNvbnRl eHQgKmdiYykKPiArewo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKPiAr ICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBieXRlOwo+ICsgICAgZW51bSBGcmFnbWVu dGF0aW9uSW5kaWNhdG9yIGZyYWdtZW50YXRpb25faW5kaWNhdG9yOwo+ICsgICAgYm9vbCAgICAg ICAgICAgICAgICAgICAgICAgIGxlbmd0aF9leHRlbnNpb25fZmxhZzsKPiArICAgIGJvb2wgICAg ICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnOwo+ICsKPiArICAgIHN0cnVjdCBG cmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyID0gZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIo Cj4gKyAgICAgICAgY3R4LCBjdHgtPmN1cnJlbnRfcGlkKTsKPiArICAgIGlmIChhc3NlbWJsZXIg PT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOwo+ICsKPiArICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDIgKyA0ICsgMSArIDEgKyA4KSAvIDgpCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKyAgICBieXRlICAgICAgICAgICAgICAg ICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsgICAgZnJhZ21lbnRhdGlvbl9p bmRpY2F0b3IgPSBieXRlID4+IDY7Cj4gKyAgICBsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcgICA9IChi eXRlID4+IDEpICYgMTsKPiArICAgIGFnZ3JlZ2F0aW9uX2ZsYWcgICAgICAgID0gYnl0ZSAmIDE7 Cj4gKwo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKPiArCj4gKyAgICBpZiAoKGVy ciA9IGNoZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQo+ICsgICAgICAg IHJldHVybiBlcnI7Cj4gKwo+ICsgICAgaWYgKCFhZ2dyZWdhdGlvbl9mbGFnKQo+ICsgICAgICAg IHJldHVybiBhc3NlbWJsZV9mcmFnbWVudCgKPiArICAgICAgICAgICAgYXNzZW1ibGVyLCBzZXFf bnVtLCBmcmFnbWVudGF0aW9uX2luZGljYXRvciwKPiArICAgICAgICAgICAgZ2JjLT5idWZmZXIs IGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYyksCj4gKyAgICAgICAgICAgIHBhcnNlX3Np Z25hbGxpbmdfbWVzc2FnZSwgY3R4KTsKPiArCj4gKyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRp Y2F0b3IgIT0gTk9UX0ZSQUdNRU5URUQpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7IC8vIGNhbm5vdCBiZSBib3RoIGZyYWdtZW50ZWQgYW5kCj4gYWdncmVnYXRlZAo+ICsK PiArICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpID4gMCkgewo+ICsg ICAgICAgIHVpbnQzMl90IGxlbmd0aDsKPiArCj4gKyAgICAgICAgaWYgKGxlbmd0aF9leHRlbnNp b25fZmxhZykKPiArICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzIoZ2Jj KTsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dl dF9iZTE2KGdiYyk7Cj4gKwo+ICsgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgbGVuZ3RoKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArICAgICAgICBpZiAoKGVyciA9IGFzc2VtYmxlX2ZyYWdtZW50KAo+ICsgICAgICAgICAg ICBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELAo+ICsgICAgICAgICAgICBnYmMt PmJ1ZmZlciwgbGVuZ3RoLCBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCkpIDwgMCkKPiAr ICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMs IGxlbmd0aCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZmlsbF9wdHNfZHRzKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzKQo+ ICt7Cj4gKyAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciAgICAgICAgICpkZXNjICAg ICA9IE5VTEw7Cj4gKyAgICBzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yICpl eHRfZGVzYyA9IE5VTEw7Cj4gKwo+ICsgICAgaW50NjRfdCBwdGltZTsKPiArICAgIHNpemVfdCAg aSwgajsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlw dG9yczsgKytpKSB7Cj4gKyAgICAgICAgaWYgKHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNl cV9udW0gPT0KPiArICAgICAgICAgICAgcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAg ICAgICAgICAgZGVzYyA9IHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKPiArICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkg PCBzLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKSB7Cj4gKyAgICAgICAgaWYg KHMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXFfbnVtID09Cj4gKyAgICAgICAgICAg IHMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7Cj4gKyAgICAgICAgICAgIGV4dF9kZXNjID0gcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmIChkZXNjID09IE5VTEwgfHwgZXh0X2Rlc2Mg PT0gTlVMTCkgcmV0dXJuIEZGRVJST1JfUkVETzsKPiArICAgIHB0aW1lID0gYXZfcmVzY2FsZShk ZXNjLT5wcmVzZW50YXRpb25fdGltZSwgcy0+c3RyZWFtLT50aW1lX2Jhc2UuZGVuLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgIDEwMDAwMDBsbCAqIHMtPnN0cmVhbS0+dGltZV9iYXNlLm51bSk7 Cj4gKwo+ICsgICAgaWYgKHMtPmF1X2NvdW50ID49IGV4dF9kZXNjLT5udW1fb2ZfYXUpCj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgY3R4LT5wa3QtPmR0 cyA9IHB0aW1lIC0gZXh0X2Rlc2MtPmRlY29kaW5nX3RpbWVfb2Zmc2V0Owo+ICsKPiArICAgIGZv ciAoaiA9IDA7IGogPCBzLT5hdV9jb3VudDsgKytqKQo+ICsgICAgICAgIGN0eC0+cGt0LT5kdHMg Kz0gZXh0X2Rlc2MtPmF1W2pdLnB0c19vZmZzZXQ7Cj4gKwo+ICsgICAgY3R4LT5wa3QtPnB0cyA9 IGN0eC0+cGt0LT5kdHMgKwo+IGV4dF9kZXNjLT5hdVtzLT5hdV9jb3VudF0uZHRzX3B0c19vZmZz ZXQ7Cj4gKwo+ICsgICAgKytzLT5hdV9jb3VudDsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KE1NVFBDb250ZXh0ICpjdHgsIHN0 cnVjdCBTdHJlYW1zICpzdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH ZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7Cj4gKyAgICB1aW50OF90ICBkYXRhX3R5cGUsIHN1YnNh bXBsZV9udW1iZXIsIGxhc3Rfc3Vic2FtcGxlX251bWJlciwgYnl0ZTsKPiArICAgIHVpbnQzMl90 IGRhdGFfc2l6ZTsKPiArICAgIHNpemVfdCAgIGk7Cj4gKyAgICBpbnQgICAgICBlcnI7Cj4gKyAg ICBib29sICAgICBsZW5ndGhfZXh0X2ZsYWcsIHN1YnNhbXBsZV9pbmZvX2xpc3RfZmxhZzsKPiAr Cj4gKyAgICBhdl9hc3NlcnQwKGN0eC0+cGt0ICE9IE5VTEwpOwo+ICsKPiArICAgIGlmIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDggKyA4ICsgOCArIDggKyA0ICsgMSArIDEg KyAyKQo+IC8gOCkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4g KyAgICAvKgo+ICsgICAgICogc2tpcDoKPiArICAgICAqIC0gc3VidGl0bGVfdGFnCj4gKyAgICAg KiAtIHN1YnRpdGxlX3NlcXVlbmNlX251bWJlcgo+ICsgICAgICovCj4gKyAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsICg4ICsgOCkgLyA4KTsKPiArCj4gKyAgICBzdWJzYW1wbGVfbnVtYmVyICAg ICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKPiArICAgIGxhc3Rfc3Vic2FtcGxlX251 bWJlciA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsKPiArICAgIGJ5dGUgICAgICAg ICAgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOwo+ICsgICAgZGF0YV90 eXBlICAgICAgICAgICAgICAgID0gYnl0ZSA+PiA0Owo+ICsgICAgbGVuZ3RoX2V4dF9mbGFnICAg ICAgICAgID0gKGJ5dGUgPj4gMykgJiAxOwo+ICsgICAgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFn ID0gKGJ5dGUgPj4gMikgJiAxOwo+ICsKPiArICAgIGlmIChkYXRhX3R5cGUgIT0gMGIwMDAwKSBy ZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKwo+ICsgICAgaWYgKGxlbmd0aF9leHRfZmxh ZykKPiArICAgICAgICBkYXRhX3NpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOwo+ICsg ICAgZWxzZQo+ICsgICAgICAgIGRhdGFfc2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7 Cj4gKwo+ICsgICAgaWYgKHN1YnNhbXBsZV9udW1iZXIgPT0gMCAmJiBsYXN0X3N1YnNhbXBsZV9u dW1iZXIgPiAwICYmCj4gKyAgICAgICAgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnKSB7Cj4gKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IGxhc3Rfc3Vic2FtcGxlX251bWJlcjsgKytpKSB7Cj4gKyAg ICAgICAgICAgIC8vIHNraXA6IHN1YnNhbXBsZV9pX2RhdGFfdHlwZQo+ICsgICAgICAgICAgICBi eXRlc3RyZWFtMl9za2lwKGdiYywgKDQgKyA0KSAvIDgpOwo+ICsgICAgICAgICAgICAvLyBza2lw OiBzdWJzYW1wbGVfaV9kYXRhX3NpemUKPiArICAgICAgICAgICAgaWYgKGxlbmd0aF9leHRfZmxh Zykgewo+ICsgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7Cj4g KyAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lw KGdiYywgMTYgLyA4KTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRhdGFfc2l6ZSkK PiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgIGlmICgoZXJyID0g YXZfbmV3X3BhY2tldChjdHgtPnBrdCwgZGF0YV9zaXplKSkgPCAwKSByZXR1cm4gZXJyOwo+ICsg ICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBjdHgtPnBrdC0+ZGF0YSwgZGF0YV9zaXpl KTsKPiArCj4gKyAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5kZXg7 Cj4gKyAgICBjdHgtPnBrdC0+ZmxhZ3MgICAgICAgID0gc3QtPmZsYWdzOwo+ICsgICAgY3R4LT5w a3QtPnBvcyAgICAgICAgICA9IHN0LT5vZmZzZXQ7Cj4gKyAgICBjdHgtPnBrdCAgICAgICAgICAg ICAgID0gTlVMTDsKPiArCj4gKyAgICBzdC0+ZmxhZ3MgID0gMDsKPiArICAgIHN0LT5vZmZzZXQg PSAtMTsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVtaXRfcGFja2V0 KE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzdCwgQVZCdWZmZXJSZWYKPiAqYnVm KQo+ICt7Cj4gKyAgICBpbnQgZXJyOwo+ICsgICAgYXZfYXNzZXJ0MChjdHgtPnBrdCAhPSBOVUxM KTsKPiArICAgIGF2X3BhY2tldF91bnJlZihjdHgtPnBrdCk7Cj4gKyAgICBpZiAoKGVyciA9IGZp bGxfcHRzX2R0cyhjdHgsIHN0KSkgPCAwKSB7Cj4gKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZi dWYpOwo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKyAgICB9Cj4gKyAgICBjdHgtPnBrdC0+YnVm ICAgICAgICAgID0gYnVmOwo+ICsgICAgY3R4LT5wa3QtPmRhdGEgICAgICAgICA9IGJ1Zi0+ZGF0 YTsKPiArICAgIGN0eC0+cGt0LT5zaXplICAgICAgICAgPSBidWYtPnNpemUgLSBBVl9JTlBVVF9C VUZGRVJfUEFERElOR19TSVpFOwo+ICsgICAgY3R4LT5wa3QtPnN0cmVhbV9pbmRleCA9IHN0LT5z dHJlYW0tPmluZGV4Owo+ICsgICAgY3R4LT5wa3QtPmZsYWdzICAgICAgICA9IHN0LT5mbGFnczsK PiArICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+b2Zmc2V0Owo+ICsgICAgY3R4LT5w a3QgICAgICAgICAgICAgICA9IE5VTEw7Cj4gKwo+ICsgICAgc3QtPmZsYWdzICA9IDA7Cj4gKyAg ICBzdC0+b2Zmc2V0ID0gLTE7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBjb25zdW1lX21mdShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQo+ICt7 Cj4gKyAgICBpbnQgICAgICAgICAgICBlcnI7Cj4gKyAgICBBVkJ1ZmZlclJlZiAgICAqYnVmX3Jl ZjsKPiArICAgIHVuc2lnbmVkIGludCAgIHNpemU7Cj4gKyAgICB1aW50OF90ICAgICAgICBieXRl Owo+ICsgICAgc2l6ZV90ICAgICAgICAgb2xkX3NpemU7Cj4gKyAgICBzdHJ1Y3QgU3RyZWFtcyAq c3QgPSBmaW5kX2N1cnJlbnRfc3RyZWFtKGN0eCk7Cj4gKyAgICBhdl9hc3NlcnQwKHN0ICE9IE5V TEwpOwo+ICsKPiArICAgIHN3aXRjaCAoc3QtPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkKSB7 Cj4gKyAgICBjYXNlIEFWX0NPREVDX0lEX0hFVkM6Cj4gKyAgICAgICAgc2l6ZSA9IGJ5dGVzdHJl YW0yX2dldF9iZTMyKGdiYyk7Cj4gKyAgICAgICAgaWYgKHNpemUgIT0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSkgcmV0dXJuCj4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAg ICBpZiAoc2l6ZSA8IDEpIC8vIHdlIGV4cGVjdCB0byBleHRyYWN0IE5BTCB1bml0IGhlYWRlciB0 eXBlIGJlbG93Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsg ICAgICAgIGJ5dGUgPSBieXRlc3RyZWFtMl9wZWVrX2J5dGV1KGdiYyk7Cj4gKyAgICAgICAgaWYg KChieXRlID4+IDcpICE9IDApIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLwo+IGZvcmJp ZGRlbl96ZXJvX2JpdAo+ICsKPiArICAgICAgICBvbGRfc2l6ZSA9IHN0LT5wZW5kaW5nX2J1ZmZl ciA9PSBOVUxMID8gMCA6Cj4gKyAgICAgICAgICAgICAgICAgICAoc3QtPnBlbmRpbmdfYnVmZmVy LT5zaXplIC0KPiBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKPiArICAgICAgICBpZiAo KGVyciA9IGF2X2J1ZmZlcl9yZWFsbG9jKAo+ICsgICAgICAgICAgICAmc3QtPnBlbmRpbmdfYnVm ZmVyLAo+ICsgICAgICAgICAgICBvbGRfc2l6ZSArIHNpemUgKyA0ICsgQVZfSU5QVVRfQlVGRkVS X1BBRERJTkdfU0laRSkpIDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArICAgICAg ICAvLyBmaXggc3RhcnQgY29kZSAoMDAgMDAgMDAgMDEpCj4gKyAgICAgICAgQVZfV0IzMihzdC0+ cGVuZGluZ19idWZmZXItPmRhdGEgKyBvbGRfc2l6ZSwgMSk7Cj4gKyAgICAgICAgYnl0ZXN0cmVh bTJfZ2V0X2J1ZmZlcnUoCj4gKyAgICAgICAgICAgIGdiYywgc3QtPnBlbmRpbmdfYnVmZmVyLT5k YXRhICsgb2xkX3NpemUgKyA0LCBzaXplKTsKPiArICAgICAgICBpZiAoKChieXRlID4+IDEpICYg MGIxMTExMTEpIDwgMHgyMCkgeyAvLyBhIFZDTCBOQUwgdW5pdAo+ICsgICAgICAgICAgICAvLyBC ZWNhdXNlIHdlIGNhbid0IGVtaXQgYSBwYWNrZXQgd2l0aG91dCBhIHZhbGlkIFBUUywgd2UKPiBu ZWVkIHRvCj4gKyAgICAgICAgICAgIC8vIGFnZ3JlZ2F0ZSB0aGUgbm9uLVZDTCBOQUwgdW5pdHMg d2l0aCBWQ0wgb25lcy4gQWx0aG91Z2ggd2UKPiBkaWRuJ3QKPiArICAgICAgICAgICAgLy8gdGVj aG5pY2FsbHkgaWRlbnRpZnkgYW4gYWNjZXNzIHVuaXQgaGVyZSwgdGhpcyB3b3JrcyBmb3IKPiBh bGwgc2FtcGxlcwo+ICsgICAgICAgICAgICAvLyB3ZSBoYXZlLgo+ICsgICAgICAgICAgICBidWZf cmVmID0gc3QtPnBlbmRpbmdfYnVmZmVyOwo+ICsgICAgICAgICAgICBzdC0+cGVuZGluZ19idWZm ZXIgPSBOVUxMOwo+ICsKPiArICAgICAgICAgICAgbWVtc2V0KGJ1Zl9yZWYtPmRhdGEgKyBvbGRf c2l6ZSArIHNpemUgKyA0LCAwLAo+ICsgICAgICAgICAgICAgICAgICAgQVZfSU5QVVRfQlVGRkVS X1BBRERJTkdfU0laRSk7Cj4gKyAgICAgICAgICAgIHJldHVybiBlbWl0X3BhY2tldChjdHgsIHN0 LCBidWZfcmVmKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICBjYXNl IEFWX0NPREVDX0lEX0FBQ19MQVRNOgo+ICsgICAgICAgIHNpemUgPSBieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdChnYmMpOwo+ICsgICAgICAgIGlmIChzaXplID4+IDEzKSByZXR1cm4gQVZFUlJP UihFT1ZFUkZMT1cpOwo+ICsgICAgICAgIGlmICgoYnVmX3JlZiA9IGF2X2J1ZmZlcl9hbGxvYygK PiArICAgICAgICAgICAgc2l6ZSArIDMgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKSkg PT0gTlVMTCkKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAg ICBidWZfcmVmLT5kYXRhWzBdID0gMHg1NjsKPiArICAgICAgICBidWZfcmVmLT5kYXRhWzFdID0g MHhlMCB8IChzaXplID4+IDgpOwo+ICsgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMl0gPSBzaXplICYg MHhmZjsKPiArICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGJ1Zl9yZWYtPmRh dGEgKyAzLCBzaXplKTsKPiArICAgICAgICBtZW1zZXQoYnVmX3JlZi0+ZGF0YSArIDMgKyBzaXpl LCAwLCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKPiArICAgICAgICByZXR1cm4gZW1p dF9wYWNrZXQoY3R4LCBzdCwgYnVmX3JlZik7Cj4gKyAgICBjYXNlIEFWX0NPREVDX0lEX1RUTUw6 Cj4gKyAgICAgICAgcmV0dXJuIGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KGN0eCwgc3QsIGdiYyk7 Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsK PiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGludCBwYXJzZV9tZnVfdGltZWRfZGF0YSgKPiAr ICAgIE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVy LAo+ICsgICAgdWludDMyX3Qgc2VxX251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGlu ZGljYXRvciwKPiArICAgIEdldEJ5dGVDb250ZXh0ICpnYmMpCj4gK3sKPiArICAgIGJ5dGVzdHJl YW0yX3NraXAoZ2JjLCAoMzIgKyAzMiArIDMyICsgOCArIDgpIC8gOCk7Cj4gKyAgICByZXR1cm4g YXNzZW1ibGVfZnJhZ21lbnQoCj4gKyAgICAgICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBpbmRpY2F0 b3IsCj4gKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YyksCj4gKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKAo+ICsgICAgTU1UUENvbnRleHQgKmN0eCwgc3RydWN0 IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXIsCj4gKyAgICB1aW50MzJfdCBzZXFfbnVtLCBl bnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgaW5kaWNhdG9yLAo+ICsgICAgR2V0Qnl0ZUNvbnRl eHQgKmdiYykKPiArewo+ICsgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7Cj4gKyAg ICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCj4gKyAgICAgICAgYXNzZW1ibGVyLCBzZXFfbnVt LCBpbmRpY2F0b3IsCj4gKyAgICAgICAgZ2JjLT5idWZmZXIsIGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYyksCj4gKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgcGFyc2VfbXB1KE1NVFBDb250ZXh0ICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIEdl dEJ5dGVDb250ZXh0Cj4gKmdiYykKPiArewo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgICAg ICAgIGVycjsKPiArICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICBieXRlLCBmcmFnbWVu dF90eXBlOwo+ICsgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkX2ZsYWc7Cj4g KyAgICBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3I7 Cj4gKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb25fZmxhZzsKPiAr ICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBsZW5ndGg7Cj4gKyAgICB1aW50MzJfdCAg ICAgICAgICAgICAgICAgICAgbXB1X3NlcXVlbmNlX251bWJlcjsKPiArICAgIHN0cnVjdCBGcmFn bWVudEFzc2VtYmxlciAgICAqYXNzZW1ibGVyOwo+ICsgICAgc3RydWN0IFN0cmVhbXMgICAgICAg ICAgICAgICpzdHJlYW1zOwo+ICsKPiArICAgIHN0cmVhbXMgPSBmaW5kX2N1cnJlbnRfc3RyZWFt KGN0eCk7Cj4gKyAgICBpZiAoc3RyZWFtcyA9PSBOVUxMIHx8IHN0cmVhbXMtPnN0cmVhbS0+ZGlz Y2FyZCA+PSBBVkRJU0NBUkRfQUxMKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGFz c2VtYmxlciA9IGZpbmRfb3JfYWxsb2NhdGVfYXNzZW1ibGVyKGN0eCwgY3R4LT5jdXJyZW50X3Bp ZCk7Cj4gKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsK PiArCj4gKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDQg KyAxICsgMiArIDEgKyA4ICsgMzIpIC8KPiA4KQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwo+ICsKPiArICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp Owo+ICsgICAgaWYgKGxlbmd0aCAhPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAgIGJ5dGUgICAg ICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7Cj4gKyAgICBmcmFn bWVudF90eXBlICAgICAgICAgICA9IGJ5dGUgPj4gNDsKPiArICAgIHRpbWVkX2ZsYWcgICAgICAg ICAgICAgID0gKGJ5dGUgPj4gMykgJiAxOwo+ICsgICAgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3Ig PSAoYnl0ZSA+PiAxKSAmIDBiMTE7Cj4gKyAgICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9IGJ5 dGUgJiAxOwo+ICsKPiArICAgIC8vIHNraXA6IGZyYWdtZW50X2NvdW50ZXIKPiArICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgMSk7Cj4gKwo+ICsgICAgbXB1X3NlcXVlbmNlX251bWJlciA9IGJ5 dGVzdHJlYW0yX2dldF9iZTMydShnYmMpOwo+ICsKPiArICAgIGlmIChhZ2dyZWdhdGlvbl9mbGFn ICYmIGZyYWdtZW50YXRpb25faW5kaWNhdG9yICE9IE5PVF9GUkFHTUVOVEVEKQo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBjYW5ub3QgYmUgYm90aCBmcmFnbWVudGVk IGFuZAo+IGFnZ3JlZ2F0ZWQKPiArCj4gKyAgICBpZiAoZnJhZ21lbnRfdHlwZSAhPSAyKQo+ICsg ICAgICAgIHJldHVybiAwOyAvLyBub3QgTUZVCj4gKwo+ICsgICAgaWYgKGFzc2VtYmxlci0+c3Rh dGUgPT0gSU5JVCAmJiAhY3R4LT5pc19yYXApCj4gKyAgICAgICAgcmV0dXJuIDA7IC8vIHdhaXQg Zm9yIHRoZSBmaXJzdCBSQVAKPiArCj4gKyAgICBpZiAoYXNzZW1ibGVyLT5zdGF0ZSA9PSBJTklU KSB7Cj4gKyAgICAgICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSBtcHVfc2VxdWVu Y2VfbnVtYmVyOwo+ICsgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyID09IHN0cmVh bXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyICsgMSkgewo+ICsgICAgICAgIHN0cmVhbXMtPmxhc3Rf c2VxdWVuY2VfbnVtYmVyID0gbXB1X3NlcXVlbmNlX251bWJlcjsKPiArICAgICAgICBzdHJlYW1z LT5hdV9jb3VudCAgICAgICAgICAgICA9IDA7Cj4gKyAgICB9IGVsc2UgaWYgKG1wdV9zZXF1ZW5j ZV9udW1iZXIgIT0gc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKPiArICAgICAgICBh dl9sb2coc3RyZWFtcy0+c3RyZWFtLCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICJN UFUgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldVxuIiwKPiArICAgICAgICAgICAg ICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXF1ZW5jZV9udW1iZXIpOwo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAgfQo+ICsKPiArICAg IGlmICgoZXJyID0gY2hlY2tfc3RhdGUoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0pKSA8IDApCj4g KyAgICAgICAgcmV0dXJuIGVycjsKPiArCj4gKyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRpY2F0 b3IgPT0gTk9UX0ZSQUdNRU5URUQgfHwKPiArICAgICAgICBmcmFnbWVudGF0aW9uX2luZGljYXRv ciA9PSBGSVJTVF9GUkFHTUVOVCkKPiArICAgICAgICBzdHJlYW1zLT5vZmZzZXQgPSBjdHgtPnBr dC0+cG9zOwo+ICsKPiArICAgIGlmIChjdHgtPmlzX3JhcCkKPiArICAgICAgICBzdHJlYW1zLT5m bGFncyB8PSBBVl9QS1RfRkxBR19LRVk7Cj4gKwo+ICsgICAgaWYgKHRpbWVkX2ZsYWcpIHsKPiAr ICAgICAgICBpZiAoYWdncmVnYXRpb25fZmxhZykgewo+ICsgICAgICAgICAgICB3aGlsZSAoYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA+IDApIHsKPiArICAgICAgICAgICAgICAgIGxl bmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7Cj4gKyAgICAgICAgICAgICAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKPiArICAgICAgICAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgICAgIHsK PiArICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgICAg ICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5ndGgpOwo+ ICsKPiArICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVfdGltZWRfZGF0YSgKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFH TUVOVEVELCAmbmdiYyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVy biBlcnI7Cj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsIGxlbmd0aCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9IGVsc2Ug ewo+ICsgICAgICAgICAgICByZXR1cm4gcGFyc2VfbWZ1X3RpbWVkX2RhdGEoCj4gKyAgICAgICAg ICAgICAgICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3Is IGdiYyk7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBpZiAoYWdncmVn YXRpb25fZmxhZykgewo+ICsgICAgICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA+IDApIHsKPiArICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2KGdiYyk7Cj4gKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKPiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAg ICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwo+ICsgICAgICAgICAgICAgICAgICAgIGJ5dGVzdHJl YW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5ndGgpOwo+ICsKPiArICAgICAgICAgICAg ICAgICAgICBlcnIgPSBwYXJzZV9tZnVfbm9uX3RpbWVkX2RhdGEoCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJBR01FTlRFRCwgJm5nYmMp Owo+ICsgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOwo+ICsgICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBs ZW5ndGgpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAg ICAgcmV0dXJuIHBhcnNlX21mdV9ub25fdGltZWRfZGF0YSgKPiArICAgICAgICAgICAgICAgIGN0 eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9uX2luZGljYXRvciwgZ2JjKTsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK01NVFBD b250ZXh0ICpmZl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKQo+ICt7Cj4gKyAg ICBNTVRQQ29udGV4dCAqY3R4ID0gYXZfbWFsbG9jeihzaXplb2YoTU1UUENvbnRleHQpKTsKPiAr ICAgIGlmIChjdHggPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cj4gKyAgICBjdHgtPnByb2dyYW0gPSBw cm9ncmFtOwo+ICsgICAgcmV0dXJuIGN0eDsKPiArfQo+ICsKPiAraW50IGZmX21tdHBfcGFyc2Vf cGFja2V0KE1NVFBDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQKPiAq cGt0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCB1aW50 MTZfdCBzaXplKQo+ICt7Cj4gKyAgICBib29sICAgICBwYWNrZXRfY291bnRlcl9mbGFnOwo+ICsg ICAgYm9vbCAgICAgZXh0ZW5zaW9uX2hlYWRlcl9mbGFnOwo+ICsgICAgdWludDhfdCAgcGF5bG9h ZF90eXBlOwo+ICsgICAgdWludDMyX3QgcGFja2V0X3NlcXVlbmNlX251bWJlcjsKPiArICAgIHVp bnQ4X3QgIGJ5dGU7Cj4gKyAgICBpbnQgICAgICBlcnIgPSAwOwo+ICsKPiArICAgIEdldEJ5dGVD b250ZXh0IGdiYzsKPiArCj4gKyAgICBjdHgtPnMgICA9IHM7Cj4gKyAgICBjdHgtPnBrdCA9IHBr dDsKPiArCj4gKyAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGJ1Ziwgc2l6ZSk7Cj4gKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJmdiYykgPAo+ICsgICAgICAgICgyICsgMSAr IDIgKyAxICsgMSArIDEgKyAyICsgNiArIDE2ICsgMzIgKyAzMikgLyA4KQo+ICsgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsKPiArICAgIGJ5dGUgICAgICAgICAgICAgICAg ICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmZ2JjKTsKPiArICAgIHBhY2tldF9jb3VudGVyX2Zs YWcgICA9IChieXRlID4+IDUpICYgMTsKPiArICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZyA9IChi eXRlID4+IDEpICYgMTsKPiArICAgIGN0eC0+aXNfcmFwID0gYnl0ZSAmIDE7Cj4gKwo+ICsgICAg Ynl0ZSAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZnYmMpOwo+ICsgICAgcGF5bG9h ZF90eXBlID0gYnl0ZSAmIDBiMTExMTExOwo+ICsKPiArICAgIGN0eC0+Y3VycmVudF9waWQgPSBi eXRlc3RyZWFtMl9nZXRfYmUxNnUoJmdiYyk7Cj4gKwo+ICsgICAgLy8gc2tpcDogZGlzdHJpYnV0 ZV90aW1lc3RhbXAKPiArICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZnYmMsIDQpOwo+ICsKPiArICAg IHBhY2tldF9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoJmdiYyk7Cj4g Kwo+ICsgICAgaWYgKHBhY2tldF9jb3VudGVyX2ZsYWcpCj4gKyAgICAgICAgYnl0ZXN0cmVhbTJf c2tpcCgmZ2JjLCA0KTsKPiArCj4gKyAgICBpZiAoZXh0ZW5zaW9uX2hlYWRlcl9mbGFnKSB7Cj4g KyAgICAgICAgdWludDE2X3QgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGg7Cj4gKyAgICAgICAgLy8g c2tpcDogZXh0ZW5zaW9uX3R5cGUKPiArICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZnYmMsIDIp Owo+ICsgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2Jl MTYoJmdiYyk7Cj4gKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmZ2JjLCBleHRlbnNpb25faGVh ZGVyX2xlbmd0aCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3dpdGNoIChwYXlsb2FkX3R5cGUpIHsK PiArICAgIGNhc2UgMHgwMDogLy8gTVBVCj4gKyAgICAgICAgaWYgKHBrdCAhPSBOVUxMKQo+ICsg ICAgICAgICAgICBlcnIgPSBwYXJzZV9tcHUoY3R4LCBwYWNrZXRfc2VxdWVuY2VfbnVtYmVyLCAm Z2JjKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgMHgwMjogLy8gc2lnbmFsbGluZyBt ZXNzYWdlcwo+ICsgICAgICAgIGVyciA9IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoY3R4LCBw YWNrZXRfc2VxdWVuY2VfbnVtYmVyLAo+ICZnYmMpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAg fQo+ICsgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7Cj4gKyAgICByZXR1cm4gY3R4LT5wa3Qg PT0gTlVMTCA/IDAgOiBGRkVSUk9SX1JFRE87Cj4gK30KPiArCj4gK3ZvaWQgZmZfbW10cF9yZXNl dF9zdGF0ZShNTVRQQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAg ICAgICAgKnN0cmVhbXM7Cj4gKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxl cjsKPiArCj4gKyAgICBmb3IgKGFzc2VtYmxlciA9IGN0eC0+YXNzZW1ibGVyOwo+ICsgICAgICAg ICBhc3NlbWJsZXIgIT0gTlVMTDsgYXNzZW1ibGVyID0gYXNzZW1ibGVyLT5uZXh0KSB7Cj4gKyAg ICAgICAgYXNzZW1ibGVyLT5zdGF0ZSA9IElOSVQ7Cj4gKyAgICAgICAgYXNzZW1ibGVyLT5zaXpl ICA9IDA7Cj4gKyAgICB9Cj4gKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVh bXMgIT0gTlVMTDsgc3RyZWFtcyA9Cj4gc3RyZWFtcy0+bmV4dCkgewo+ICsgICAgICAgIHN0cmVh bXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyID0gMDsKPiArICAgICAgICBzdHJlYW1zLT5hdV9jb3Vu dCAgICAgICAgICAgICA9IDA7Cj4gKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgICAgICAgICAgICAg ICAgPSAwOwo+ICsgICAgICAgIHN0cmVhbXMtPm9mZnNldCAgICAgICAgICAgICAgID0gLTE7Cj4g KyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7Cj4gKyAg ICB9Cj4gK30KPiArCj4gK3ZvaWQgZmZfbW10cF9wYXJzZV9jbG9zZShNTVRQQ29udGV4dCAqY3R4 KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzczsKPiArICAgIHN0cnVj dCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKPiArCj4gKyAgICBmb3IgKGFzcyA9IGN0eC0+ YXNzZW1ibGVyOyBhc3MgIT0gTlVMTDspIHsKPiArICAgICAgICBzdHJ1Y3QgRnJhZ21lbnRBc3Nl bWJsZXIgKm5leHQgPSBhc3MtPm5leHQ7Cj4gKyAgICAgICAgYXZfZnJlZShhc3MtPmRhdGEpOwo+ ICsgICAgICAgIGF2X2ZyZWUoYXNzKTsKPiArICAgICAgICBhc3MgPSBuZXh0Owo+ICsgICAgfQo+ ICsKPiArICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3RyZWFtczsgc3RyZWFtcyAhPSBOVUxMOykg ewo+ICsgICAgICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0ID0gc3RyZWFtcy0+bmV4dDsKPiArICAg ICAgICBhdl9mcmVlKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yKTsKPiArICAgICAgICBh dl9mcmVlKHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcik7Cj4gKyAgICAgICAgYXZf YnVmZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7Cj4gKyAgICAgICAgYXZfZnJl ZShzdHJlYW1zKTsKPiArICAgICAgICBzdHJlYW1zID0gbmV4dDsKPiArICAgIH0KPiArCj4gKyAg ICBhdl9mcmVlKGN0eCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5oIGIv bGliYXZmb3JtYXQvbW10cC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwLi4zMDBhNmExYWVhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2Zm9ybWF0L21tdHAu aAo+IEBAIC0wLDAgKzEsNjQgQEAKPiArLyoKPiArICogTVBFRyBNZWRpYSBUcmFuc3BvcnQgUHJv dG9jb2wgKE1NVFApIHBhcnNlciwgYXMgZGVmaW5lZCBpbiBJU08vSUVDCj4gMjMwMDgtMS4KPiAr ICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVyRmFzaGkKPiArICoKPiArICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArI2lm bmRlZiBBVkZPUk1BVF9NTVRQX0gKPiArI2RlZmluZSBBVkZPUk1BVF9NTVRQX0gKPiArCj4gKyNp bmNsdWRlICJhdmZvcm1hdC5oIgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgTU1UUENvbnRleHQgTU1U UENvbnRleHQ7Cj4gKwo+ICsvKioKPiArICogT3BlbiBhbiBNTVQgcHJvdG9jb2wgcGFyc2VyIGNv bnRleHQuCj4gKyAqIEBwYXJhbSBwcm9ncmFtIFRoZSBBVlByb2dyYW0gdGhpcyBjb250ZXh0IGlz IGFzc29jaWF0ZWQgd2l0aC4KPiArICogQHJldHVybiBBIG5ldyBNTVRQQ29udGV4dCwgb3IgTlVM TCBvbiBhbGxvY2F0aW9uIGVycm9yLgo+ICsgKi8KPiArTU1UUENvbnRleHQgKmZmX21tdHBfcGFy c2Vfb3BlbihBVlByb2dyYW0gKnByb2dyYW0pOwo+ICsKPiArLyoqCj4gKyAqIFBhcnNlIGFuIE1N VCBwcm90b2NvbCBwYWNrZXQuCj4gKyAqCj4gKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2Nv bCBwYXJzZXIgY29udGV4dC4KPiArICogQHBhcmFtIHMgVGhlIEFWRm9ybWF0Q29udGV4dC4KPiAr ICogQHBhcmFtIHBrdCBUaGUgQVZQYWNrZXQgdG8gZmlsbC4KPiArICogQHBhcmFtIGJ1ZiBUaGUg cGFja2V0IGRhdGEuCj4gKyAqIEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIHRoZSBwYWNrZXQgZGF0 YS4KPiArICogQHJldHVybiA+PSAwIGlmIGEgbmV3IEFWUGFja2V0IGlzIGVtaXR0ZWQsCj4gKyAq ICAgICAgICAgRkZFUlJPUl9SRURPIGlmIHRoZSBuZXh0IHBhY2tldCBpcyBuZWVkZWQsCj4gKyAq ICAgICAgICAgb3IgYW5vdGhlciBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KPiArICovCj4gK2lu dCBmZl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBBVkZvcm1hdENvbnRleHQg KnMsIEFWUGFja2V0Cj4gKnBrdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp bnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSk7Cj4gKwo+ICsvKioKPiArICogUmVzZXQgdGhlIHN0 YXRlIG9mIHRoZSBNTVRQIHBhcnNlci4gVXNlZnVsIHdoZW4gc2Vla2luZy4KPiArICoKPiArICog QHBhcmFtIGN0eCBUaGUgTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0Lgo+ICsgKi8KPiArdm9p ZCBmZl9tbXRwX3Jlc2V0X3N0YXRlKE1NVFBDb250ZXh0ICpjdHgpOwo+ICsKPiArLyoqCj4gKyAq IENsb3NlIGFuIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dCwgZnJlZXMgYWxsIGFzc29jaWF0 ZWQgcmVzb3VyY2VzLgo+ICsgKgo+ICsgKiBAcGFyYW0gY3R4IFRoZSBNTVQgcHJvdG9jb2wgcGFy c2VyIGNvbnRleHQuCj4gKyAqLwo+ICt2b2lkIGZmX21tdHBfcGFyc2VfY2xvc2UoTU1UUENvbnRl eHQgKmN0eCk7Cj4gKwo+ICsjZW5kaWYgLyogQVZGT1JNQVRfTU1UUF9IICovCj4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L21tdHRsdi5jIGIvbGliYXZmb3JtYXQvbW10dGx2LmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLjYyMjg0MGU0YTEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvbGliYXZmb3JtYXQvbW10dGx2LmMKPiBAQCAtMCwwICsxLDMzNSBAQAo+ICsv Kgo+ICsgKiBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMVikgZGVtdXhlciwg YXMgZGVmaW5lZCBpbiBBUklCCj4gU1RELUIzMi4KPiArICogQ29weXJpZ2h0IChjKSAyMDIzIFN1 cGVyRmFzaGkKPiArICoKPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZh c3NlcnQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAi bGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgo+ICsjaW5jbHVkZSAiYXZmb3JtYXQuaCIKPiArI2lu Y2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImRlbXV4LmgiCj4gKyNpbmNsdWRl ICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAibW10cC5oIgo+ICsKPiArI2RlZmluZSBIRUFERVJf QllURSAwYjAxMTExMTExCj4gKwo+ICtlbnVtIHsKPiArICAgIFVOREVGSU5FRF9QQUNLRVQgICAg ICAgICAgICA9IDB4MDAsCj4gKyAgICBJUFY0X1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweDAx LAo+ICsgICAgSVBWNl9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHgwMiwKPiArICAgIEhFQURF Ul9DT01QUkVTU0VEX0lQX1BBQ0tFVCA9IDB4MDMsCj4gKyAgICBUUkFOU01JU1NJT05fQ09OVFJP TF9QQUNLRVQgPSAweEZFLAo+ICsgICAgTlVMTF9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHhG RiwKPiArfTsKPiArCj4gK2VudW0gewo+ICsgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJU SUFMX0lQVjRfQU5EX1BBUlRJQUxfVURQX0hFQURFUiA9IDB4MjAsCj4gKyAgICBDT05URVhUX0lE RU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwK PiArICAgIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VE UF9IRUFERVIgPSAweDYwLAo+ICsgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01QUkVT U0VEX0hFQURFUiAgICAgICAgICAgICAgICA9IDB4NjEsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IG1tdHRsdl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkKPiArewo+ICsgICAgc2l6ZV90ICAg aSwgajsKPiArICAgIHVpbnQ4X3QgIHBhY2tldF90eXBlOwo+ICsgICAgdWludDE2X3QgZGF0YV9s ZW5ndGg7Cj4gKwo+ICsgICAgaW50IHByb2Nlc3NlZCAgPSAwOwo+ICsgICAgaW50IHJlY29nbml6 ZWQgPSAwOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgKyA0IDwgcC0+YnVmX3NpemUgJiYgcHJv Y2Vzc2VkIDwgMTAwOyArK3Byb2Nlc3NlZCkgewo+ICsgICAgICAgIGlmIChwLT5idWZbaV0gIT0g SEVBREVSX0JZVEUpIHJldHVybiAwOwo+ICsKPiArICAgICAgICBwYWNrZXRfdHlwZSA9IHAtPmJ1 ZltpICsgMV07Cj4gKyAgICAgICAgZGF0YV9sZW5ndGggPSBBVl9SQjE2KHAtPmJ1ZiArIGkgKyAy KTsKPiArICAgICAgICBpICs9IDQ7Cj4gKwo+ICsgICAgICAgIGlmIChwYWNrZXRfdHlwZSA9PSBI RUFERVJfQ09NUFJFU1NFRF9JUF9QQUNLRVQpIHsKPiArICAgICAgICAgICAgaWYgKGRhdGFfbGVu Z3RoIDwgMyB8fCBpICsgMiA+PSBwLT5idWZfc2l6ZSkgZ290byBza2lwOwo+ICsgICAgICAgICAg ICBzd2l0Y2ggKHAtPmJ1ZltpICsgMl0pIHsKPiArICAgICAgICAgICAgY2FzZQo+IENPTlRFWFRf SURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6Cj4gKyAg ICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUjoKPiArICAg ICAgICAgICAgY2FzZQo+IENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9Q QVJUSUFMX1VEUF9IRUFERVI6Cj4gKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNB VElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoKPiArICAgICAgICAgICAgICAgICsrcmVjb2duaXpl ZDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0gZWxzZSBpZiAocGFja2V0X3R5cGUgPT0g TlVMTF9QQUNLRVQpIHsKPiArICAgICAgICAgICAgLy8gbnVsbCBwYWNrZXRzIHNob3VsZCBjb250 YWluIGFsbCAweEZGcwo+ICsgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgaSArIGRhdGFfbGVu Z3RoICYmIGogPCBwLT5idWZfc2l6ZTsgKytqKSB7Cj4gKyAgICAgICAgICAgICAgICBpZiAocC0+ YnVmW2pdICE9IDB4RkYpIGdvdG8gc2tpcDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICArK3JlY29nbml6ZWQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBza2lwOgo+ICsgICAg ICAgIGkgKz0gZGF0YV9sZW5ndGg7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHJlY29nbml6 ZWQgKiBBVlBST0JFX1NDT1JFX01BWCAvIEZGTUFYKHByb2Nlc3NlZCwgMTApOwo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgTU1UVExWQ29udGV4dCB7Cj4gKyAgICBzdHJ1Y3QgUHJvZ3JhbSB7Cj4gKyAgICAg ICAgdWludDMyX3QgICAgICAgY2lkOwo+ICsgICAgICAgIE1NVFBDb250ZXh0ICAgICptbXRwOwo+ ICsgICAgICAgIHN0cnVjdCBQcm9ncmFtICpuZXh0Owo+ICsgICAgfSAqcHJvZ3JhbXM7Cj4gKwo+ ICsgICAgaW50NjRfdCBsYXN0X3BvczsKPiArICAgIHNpemVfdCAgcmVzeW5jX3NpemU7Cj4gKwo+ ICsgICAgc2l6ZV90ICBjYXA7Cj4gKyAgICB1aW50OF90ICpidWY7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBfcGFja2V0KAo+ICsgICAgc3RydWN0IE1N VFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0LAo+ICsg ICAgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKQo+ICt7Cj4gKyAgICAvLyBwYXJ0 aWFsIHVkcCBoZWFkZXIgYXJlIHVkcCBoZWFkZXIgd2l0aG91dCBkYXRhIGxlbmd0aCAoMTYgYml0 cykKPiBhbmQgY2hlY2tzdW0gKDE2IGJpdHMpCj4gKyNkZWZpbmUgUEFSVElBTF9VRFBfSEVBREVS X0xFTkdUSCAoOCAtIDQpCj4gKyAgICAvLyBwYXJ0aWFsIGlwdjYgaGVhZGVyIGFyZSBpcHY2IGhl YWRlciB3aXRob3V0IHBheWxvYWQgbGVuZ3RoICgxNgo+IGJpdHMpCj4gKyNkZWZpbmUgUEFSVElB TF9JUFY2X0hFQURFUl9MRU5HVEggKDQwIC0gMikKPiArCj4gKyAgICB1aW50MzJfdCAgICAgICBj b250ZXh0X2lkOwo+ICsgICAgc3RydWN0IFByb2dyYW0gKnByb2dyYW07Cj4gKwo+ICsgICAgaWYg KHNpemUgPCAzKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICsgICAg Y29udGV4dF9pZCA9IEFWX1JCMTYoYnVmKSA+PiA0Owo+ICsgICAgYnVmICs9IDM7Cj4gKyAgICBz aXplIC09IDM7Cj4gKwo+ICsgICAgZm9yIChwcm9ncmFtID0gY3R4LT5wcm9ncmFtczsgcHJvZ3Jh bSAhPSBOVUxMOyBwcm9ncmFtID0KPiBwcm9ncmFtLT5uZXh0KQo+ICsgICAgICAgIGlmIChwcm9n cmFtLT5jaWQgPT0gY29udGV4dF9pZCkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAg aWYgKHByb2dyYW0gPT0gTlVMTCkgewo+ICsgICAgICAgIEFWUHJvZ3JhbSAqcCA9IGF2X25ld19w cm9ncmFtKHMsIGNvbnRleHRfaWQpOwo+ICsgICAgICAgIGlmIChwID09IE5VTEwpIHJldHVybiBB VkVSUk9SKGVycm5vKTsKPiArCj4gKyAgICAgICAgcHJvZ3JhbSA9IGF2X21hbGxvYyhzaXplb2Yo c3RydWN0IFByb2dyYW0pKTsKPiArICAgICAgICBpZiAocHJvZ3JhbSA9PSBOVUxMKSByZXR1cm4g QVZFUlJPUihlcnJubyk7Cj4gKwo+ICsgICAgICAgIHByb2dyYW0tPm1tdHAgPSBmZl9tbXRwX3Bh cnNlX29wZW4ocCk7Cj4gKyAgICAgICAgcHJvZ3JhbS0+bmV4dCA9IGN0eC0+cHJvZ3JhbXM7Cj4g KyAgICAgICAgY3R4LT5wcm9ncmFtcyA9IHByb2dyYW07Cj4gKyAgICAgICAgcHJvZ3JhbS0+Y2lk ICA9IGNvbnRleHRfaWQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3dpdGNoIChidWZbLTFdKSB7Cj4g KyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJUSUFM X1VEUF9IRUFERVI6Cj4gKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFE RVI6Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwo+ICsgICAgY2FzZSBD T05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVS Ogo+ICsgICAgICAgIGlmIChzaXplIDwgUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJU SUFMX1VEUF9IRUFERVJfTEVOR1RIKQo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKPiArICAgICAgICBzaXplIC09IFBBUlRJQUxfSVBWNl9IRUFERVJfTEVOR1RIICsg UEFSVElBTF9VRFBfSEVBREVSX0xFTkdUSDsKPiArICAgICAgICBidWYgKz0gUEFSVElBTF9JUFY2 X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VEUF9IRUFERVJfTEVOR1RIOwo+ICsgICAgY2FzZSBD T05URVhUX0lERU5USUZJQ0FUSU9OX05PX0NPTVBSRVNTRURfSEVBREVSOgo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gZmZfbW10cF9wYXJzZV9wYWNrZXQocHJvZ3Jh bS0+bW10cCwgcywgcGt0LCBidWYsIHNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1tdHRs dl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCj4gK3sKPiAr ICAgIHVpbnQ4X3QgICAgICAgICAgICAgIGhlYWRlcls0XTsKPiArICAgIHVpbnQxNl90ICAgICAg ICAgICAgIHNpemU7Cj4gKyAgICBpbnQgICAgICAgICAgICAgICAgICBlcnI7Cj4gKyAgICBzdHJ1 Y3QgTU1UVExWQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOwo+ICsgICAgaW50NjRfdCAgICAg ICAgICAgICAgcG9zICA9IGF2aW9fdGVsbChzLT5wYik7Cj4gKwo+ICsgICAgaWYgKHBvcyA8IDAp IHJldHVybiAoaW50KSBwb3M7Cj4gKyAgICBpZiAocG9zICE9IGN0eC0+bGFzdF9wb3MpIHsKPiAr ICAgICAgICBjdHgtPmxhc3RfcG9zID0gcG9zOwo+ICsKPiArICAgICAgICB3aGlsZSAocG9zIC0g Y3R4LT5sYXN0X3BvcyA8IGN0eC0+cmVzeW5jX3NpemUpIHsKPiArICAgICAgICAgICAgaWYgKChl cnIgPSBmZmlvX2Vuc3VyZV9zZWVrYmFjayhzLT5wYiwgNCkpIDwgMCkKPiArICAgICAgICAgICAg ICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKGVyciA9IGF2aW9fcmVhZChz LT5wYiwgaGVhZGVyLCA0KSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGF2aW9fZmVv ZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKPiArCj4gKyAgICAgICAgICAgIGlmIChoZWFk ZXJbMF0gIT0gSEVBREVSX0JZVEUpIHsKPiArICAgICAgICAgICAgICAgIGlmICgocG9zID0gYXZp b19zZWVrKHMtPnBiLCAtMywgU0VFS19DVVIpKSA8IDApCj4gKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIChpbnQpIHBvczsKPiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAg ICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBzaXplID0gQVZfUkIxNihoZWFkZXIgKyAyKTsKPiAr Cj4gKyAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAtNCwgU0VFS19DVVIp KSA8IDApCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOwo+ICsKPiArICAgICAg ICAgICAgaWYgKChlcnIgPSBmZmlvX2Vuc3VyZV9zZWVrYmFjayhzLT5wYiwgNCArIHNpemUgKyAx KSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKPiArCj4gKyAgICAgICAgICAg IGlmICgocG9zID0gYXZpb19za2lwKHMtPnBiLCA0ICsgc2l6ZSkpIDwgMCkKPiArICAgICAgICAg ICAgICAgIHJldHVybiAoaW50KSBwb3M7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoKGVyciA9IGF2 aW9fcmVhZChzLT5wYiwgaGVhZGVyLCAxKSkgPCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsKPiArCj4gKyAgICAgICAgICAg IGlmIChoZWFkZXJbMF0gPT0gSEVBREVSX0JZVEUpIHsKPiArICAgICAgICAgICAgICAgIC8vIGZv dW5kIEhFQURFUiwgW3NpemVdLCBIRUFERVIsIHNob3VsZCBiZSBnb29kCj4gKyAgICAgICAgICAg ICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLXNpemUgLSAxIC0gNCwgU0VFS19DVVIp KSA8IDApCj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKPiArICAgICAg ICAgICAgICAgIGdvdG8gc3VjY2VzczsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAg ICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIsIC1zaXplIC0gMSAtIDMsIFNFRUtfQ1VSKSkg PCAwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKPiArICAgICAgICB9Cj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gKwo+ICsgICAgICAgIHN1Y2Nl c3M6Cj4gKyAgICAgICAgY3R4LT5sYXN0X3BvcyA9IHBvczsKPiArCj4gKyAgICAgICAgZm9yIChz dHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbSA9IGN0eC0+cHJvZ3JhbXM7Cj4gKyAgICAgICAgICAgICBw cm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBwcm9ncmFtLT5uZXh0KQo+ICsgICAgICAgICAgICBm Zl9tbXRwX3Jlc2V0X3N0YXRlKHByb2dyYW0tPm1tdHApOwo+ICsgICAgfQo+ICsKPiArICAgIGlm IChwa3QgIT0gTlVMTCkgcGt0LT5wb3MgPSBjdHgtPmxhc3RfcG9zOwo+ICsgICAgaWYgKChlcnIg PSBmZmlvX3JlYWRfc2l6ZShzLT5wYiwgaGVhZGVyLCA0KSkgPCAwKQo+ICsgICAgICAgIHJldHVy biBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7Cj4gKyAgICBjdHgtPmxhc3Rf cG9zICs9IDQ7Cj4gKwo+ICsgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArCj4gKyAgICBzaXplID0gQVZfUkIx NihoZWFkZXIgKyAyKTsKPiArICAgIGlmIChoZWFkZXJbMV0gIT0gSEVBREVSX0NPTVBSRVNTRURf SVBfUEFDS0VUKSB7Cj4gKyAgICAgICAgaWYgKChjdHgtPmxhc3RfcG9zID0gYXZpb19za2lwKHMt PnBiLCBzaXplKSkgPCAwKQo+ICsgICAgICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3Bv czsKPiArICAgICAgICByZXR1cm4gcGt0ID09IE5VTEwgPyAwIDogRkZFUlJPUl9SRURPOwo+ICsg ICAgfQo+ICsKPiArICAgIGlmIChjdHgtPmNhcCA8IHNpemUpIHsKPiArICAgICAgICBhdl9mcmVl KGN0eC0+YnVmKTsKPiArICAgICAgICBpZiAoKGN0eC0+YnVmID0gYXZfbWFsbG9jKGN0eC0+Y2Fw ID0gc2l6ZSkpID09IE5VTEwpCj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsK PiArICAgIH0KPiArICAgIGlmICgoZXJyID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGN0eC0+YnVm LCBzaXplKSkgPCAwKQo+ICsgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJP Ul9FT0YgOiBlcnI7Cj4gKyAgICBjdHgtPmxhc3RfcG9zICs9IHNpemU7Cj4gKyAgICByZXR1cm4g bW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9wYWNrZXQoY3R4LCBzLCBwa3QsIGN0eC0+YnVmLCBz aXplKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtbXR0bHZfcmVhZF9oZWFkZXIoQVZGb3JtYXRD b250ZXh0ICpzKQo+ICt7Cj4gKyAgICBpbnQ2NF90ICAgICAgICAgICAgICBwb3M7Cj4gKyAgICBp bnQ2NF90ICAgICAgICAgICAgICBhbGxvdyA9IHMtPnByb2Jlc2l6ZTsKPiArICAgIHN0cnVjdCBN TVRUTFZDb250ZXh0ICpjdHggID0gcy0+cHJpdl9kYXRhOwo+ICsKPiArICAgIGN0eC0+bGFzdF9w b3MgPSBhdmlvX3RlbGwocy0+cGIpOwo+ICsgICAgaWYgKGN0eC0+bGFzdF9wb3MgPCAwKQo+ICsg ICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOwo+ICsgICAgY3R4LT5sYXN0X3BvcyAt PSAxOyAvLyBmb3JjZSByZXN5bmMKPiArCj4gKyAgICBjdHgtPnJlc3luY19zaXplID0gNDA5NjsK PiArICAgIHMtPmN0eF9mbGFncyB8PSBBVkZNVENUWF9OT0hFQURFUjsKPiArCj4gKyAgICBpZiAo IXMtPnBiLT5zZWVrYWJsZSkKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBpZiAoKHBv cyA9IGF2aW9fdGVsbChzLT5wYikpIDwgMCkKPiArICAgICAgICByZXR1cm4gKGludCkgcG9zOwo+ ICsKPiArICAgIHdoaWxlIChzLT5uYl9zdHJlYW1zIDw9IDAgJiYgYWxsb3cgPiAwKSB7Cj4gKyAg ICAgICAgY29uc3QgaW50NjRfdCBjdXIgPSBjdHgtPmxhc3RfcG9zOwo+ICsgICAgICAgIGNvbnN0 IGludCAgICAgZXJyID0gbW10dGx2X3JlYWRfcGFja2V0KHMsIE5VTEwpOwo+ICsgICAgICAgIGlm IChlcnIgPCAwKSByZXR1cm4gZXJyOwo+ICsgICAgICAgIGFsbG93IC09IGN0eC0+bGFzdF9wb3Mg LSBjdXI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgY3R4LT5sYXN0X3BvcyA9IGF2aW9fdGVsbChzLT5w Yik7Cj4gKyAgICBpZiAoY3R4LT5sYXN0X3BvcyA8IDApCj4gKyAgICAgICAgcmV0dXJuIChpbnQp IGN0eC0+bGFzdF9wb3M7Cj4gKwo+ICsgICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIsIHBv cywgU0VFS19TRVQpKSA8IDApCj4gKyAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKPiArCj4gKyAg ICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtbXR0bHZfcmVhZF9jbG9zZShBVkZv cm1hdENvbnRleHQgKmN0eCkKPiArewo+ICsgICAgc3RydWN0IFByb2dyYW0gICAgICAgKnByb2dy YW07Cj4gKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqcHJpdiA9IGN0eC0+cHJpdl9kYXRhOwo+ ICsgICAgZm9yIChwcm9ncmFtID0gcHJpdi0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDspIHsK PiArICAgICAgICBzdHJ1Y3QgUHJvZ3JhbSAqbmV4dCA9IHByb2dyYW0tPm5leHQ7Cj4gKyAgICAg ICAgZmZfbW10cF9wYXJzZV9jbG9zZShwcm9ncmFtLT5tbXRwKTsKPiArICAgICAgICBhdl9mcmVl KHByb2dyYW0pOwo+ICsgICAgICAgIHByb2dyYW0gPSBuZXh0Owo+ICsgICAgfQo+ICsgICAgcHJp di0+cHJvZ3JhbXMgPSBOVUxMOwo+ICsgICAgcHJpdi0+Y2FwID0gMDsKPiArICAgIGF2X2ZyZWVw KCZwcml2LT5idWYpOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQ2NF90 IG1tdHRsdl9yZWFkX3RpbWVzdGFtcCgKPiArICAgIHN0cnVjdCBBVkZvcm1hdENvbnRleHQgKnMs IGludCBzdHJlYW1faW5kZXgsCj4gKyAgICBpbnQ2NF90ICpwb3MsIGludDY0X3QgcG9zX2xpbWl0 KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOwo+ ICsKPiArICAgIGlmICgoKnBvcyA9IGF2aW9fc2VlayhzLT5wYiwgKnBvcywgU0VFS19TRVQpKSA8 IDApCj4gKyAgICAgICAgcmV0dXJuIChpbnQpICpwb3M7Cj4gKwo+ICsgICAgd2hpbGUgKHBvc19s aW1pdCA+IDApIHsKPiArICAgICAgICBBVlBhY2tldCAgICAgIHBhY2tldCA9IHswfTsKPiArICAg ICAgICBjb25zdCBpbnQgICAgIGVyciAgICA9IG1tdHRsdl9yZWFkX3BhY2tldChzLCAmcGFja2V0 KTsKPiArICAgICAgICBjb25zdCBpbnQ2NF90IHRzICAgICA9IHBhY2tldC5kdHM7Cj4gKyAgICAg ICAgY29uc3QgaW50NjRfdCBvZmYgICAgPSBwYWNrZXQucG9zOwo+ICsgICAgICAgIGNvbnN0IGlu dCAgICAgc2lkICAgID0gcGFja2V0LnN0cmVhbV9pbmRleDsKPiArICAgICAgICBhdl9wYWNrZXRf dW5yZWYoJnBhY2tldCk7Cj4gKyAgICAgICAgaWYgKGVyciA+PSAwICYmIChzdHJlYW1faW5kZXgg PCAwIHx8IHNpZCA9PSBzdHJlYW1faW5kZXgpKSB7Cj4gKyAgICAgICAgICAgICpwb3MgPSBvZmY7 Cj4gKyAgICAgICAgICAgIHJldHVybiB0czsKPiArICAgICAgICB9Cj4gKyAgICAgICAgcG9zX2xp bWl0IC09IGN0eC0+bGFzdF9wb3MgLSAqcG9zOwo+ICsgICAgICAgICpwb3MgPSBjdHgtPmxhc3Rf cG9zOwo+ICsgICAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBGRkVSUk9SX1JFRE8pCj4gKyAg ICAgICAgICAgIHJldHVybiBBVl9OT1BUU19WQUxVRTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1 cm4gQVZfTk9QVFNfVkFMVUU7Cj4gK30KPiArCj4gK2NvbnN0IEFWSW5wdXRGb3JtYXQgZmZfbW10 dGx2X2RlbXV4ZXIgPSB7Cj4gKyAgICAubmFtZSAgICAgICAgICAgPSAibW10dGx2IiwKPiArICAg IC5sb25nX25hbWUgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKAo+ICsgICAgICAgICJNTVQg cHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoQVJJQiBTVEQtQjMyKSIpLAo+ICsgICAgLnByaXZf ZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBNTVRUTFZDb250ZXh0KSwKPiArICAgIC5mbGFnc19p bnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCj4gKyAgICAucmVhZF9wcm9iZSAgICAgPSBt bXR0bHZfcHJvYmUsCj4gKyAgICAucmVhZF9oZWFkZXIgICAgPSBtbXR0bHZfcmVhZF9oZWFkZXIs Cj4gKyAgICAucmVhZF9wYWNrZXQgICAgPSBtbXR0bHZfcmVhZF9wYWNrZXQsCj4gKyAgICAucmVh ZF9jbG9zZSAgICAgPSBtbXR0bHZfcmVhZF9jbG9zZSwKPiArICAgIC5yZWFkX3RpbWVzdGFtcCA9 IG1tdHRsdl9yZWFkX3RpbWVzdGFtcCwKPiArICAgIC5mbGFncyAgICAgICAgICA9IEFWRk1UX1NI T1dfSURTLAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92ZXJzaW9uLmggYi9saWJh dmZvcm1hdC92ZXJzaW9uLmgKPiBpbmRleCBlMjYzNGI4NWFlLi40YmRlODJhYmI0IDEwMDY0NAo+ IC0tLSBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaAo+ICsrKyBiL2xpYmF2Zm9ybWF0L3ZlcnNpb24u aAo+IEBAIC0zMSw3ICszMSw3IEBACj4KPiAgI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKPgo+ IC0jZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fTUlOT1IgICA1Cj4gKyNkZWZpbmUgTElCQVZG T1JNQVRfVkVSU0lPTl9NSU5PUiAgIDYKPiAgI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01J Q1JPIDEwMAo+Cj4gICNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9JTlQgQVZfVkVSU0lPTl9J TlQoTElCQVZGT1JNQVRfVkVSU0lPTl9NQUpPUiwKPiBcCj4gLS0KPiAyLjI1LjEKPgo+Cl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4K