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 EC92345F8F for ; Wed, 17 Jan 2024 20:45:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B259D68D02A; Wed, 17 Jan 2024 22:45:50 +0200 (EET) Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C7F5668CE14 for ; Wed, 17 Jan 2024 22:45:44 +0200 (EET) Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-5cf495b46caso2291712a12.1 for ; Wed, 17 Jan 2024 12:45:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705524342; x=1706129142; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:content-language:references :to:from:subject:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=GcjDTt2yfTtWK+Aznl7ef1E3g78uSTTdpjxGtCcbsCU=; b=V7AfiO9XVMEe6S2uNpaB3fygpOpPsiwcibOK799HyNVfjiGK0WbuoXQInC44qe3zg7 XVMeYcfR+7kDwoHhZmBxUGtEMFEMSUofnYdJYsiVpbQBEbhdoNCys9aBUlCi2OLUDe6d Ao0965N2fZu04bynEkbEX5VNF96kE5dOqgYKBNWDKa9lyQ3lwqbFPHsxzpFERHB1eoyj ReRyzuBF/IPO5vLtDHrOdonSCMjDMd14+h+xGdwfl+a91psUCYSVfeRVxFvjOFBV4dhN 00/P2ZYpkrFRI/9NTmRakSU3ZLolXjBqEy9OTOio6HGmol6o5ct6NVZGcLWYKkmj20Eh AOPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705524342; x=1706129142; h=content-transfer-encoding:in-reply-to:content-language:references :to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=GcjDTt2yfTtWK+Aznl7ef1E3g78uSTTdpjxGtCcbsCU=; b=vU0tBH3f77zP+njrGnq6dABTluBMOToCtRSZZR57bLg64HE/IqXnAlJ03Ewb3g6p8f S/O6YxZuKfXz2u8IqaYdk8/Jj/CYELDaeIgtq85tc3CR1Deu+ZE9I5N2vo4grMFRJ13W UXt7PYI2kJmrxAckCoZeSqLsEOLnq+DF2b8sK5kphgL+chkKCOAgaW01/x5C+BPU49Py a9a4y4SqbtTIUoDCcfIbK6Pau6RCvkrPfVxW899C+OWChXWPhi4lMGi/1HvnCPx3fpc/ nb7A3LHAvkReFujCXLiOpu8EpIE4tCG9o17XDbVxPs5Vq1PKPPp+KNw7I7JRT7nrM9Xd gPRg== X-Gm-Message-State: AOJu0YwswaQRGR9G9g9eCqRtX7izYRvXL+SgM8Cw7Gkgy99du6XWSarB u/OjB8wUus0iSzDpQLXYnMBQ1U7mXYCdRA== X-Google-Smtp-Source: AGHT+IHIajYxE06cSyKGh0Dupcv9T3u1kYh19LVZ1aB0gzWLwdPoh9BqigUhdr1GERjG7266gO0xeg== X-Received: by 2002:a05:6a20:d805:b0:19a:9db4:851b with SMTP id iv5-20020a056a20d80500b0019a9db4851bmr6321765pzb.61.1705524341885; Wed, 17 Jan 2024 12:45:41 -0800 (PST) Received: from ?IPV6:2601:647:4600:84e0:e8e2:b653:59f2:93c4? ([2601:647:4600:84e0:e8e2:b653:59f2:93c4]) by smtp.gmail.com with ESMTPSA id jw15-20020a056a00928f00b006db6633f5edsm1864181pfb.159.2024.01.17.12.45.41 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 17 Jan 2024 12:45:41 -0800 (PST) Message-ID: <59e91285-b67e-41ec-ba05-e383f28ae0dd@gmail.com> Date: Wed, 17 Jan 2024 12:45:40 -0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Connor Worley To: ffmpeg-devel@ffmpeg.org References: <20240117131257.GP6420@pb2> Content-Language: en-US In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] Add DXV encoder with support for DXT1 texture format 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 Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gMS8xNy8yNCAwODo1NSwgQ29ubm9yIFdvcmxleSB3cm90ZToKCj4gU2lnbmVkLW9mZi1ieTog Q29ubm9yIFdvcmxleSA8Y29ubm9yYndvcmxleUBnbWFpbC5jb20+Cj4gLS0tCj4gwqBDaGFuZ2Vs b2fCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGNvbmZpZ3Vy ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgZG9jL2dlbmVy YWxfY29udGVudHMudGV4aSB8wqDCoCAzICstCj4gwqBsaWJhdmNvZGVjL01ha2VmaWxlwqDCoMKg wqDCoMKgIHzCoMKgIDEgKwo+IMKgbGliYXZjb2RlYy9hbGxjb2RlY3MuY8KgwqDCoCB8wqDCoCAx ICsKPiDCoGxpYmF2Y29kZWMvZHh2ZW5jLmPCoMKgwqDCoMKgwqAgfCAzNjIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoGxpYmF2Y29kZWMvdmVyc2lvbi5owqDCoMKg wqDCoCB8wqDCoCAyICstCj4gwqA3IGZpbGVzIGNoYW5nZWQsIDM2OSBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZHh2ZW5jLmMK Pgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiBpbmRleCA1YjI4OTlkMDVi Li4yMjRkODQ2NjRhIDEwMDY0NAo+IC0tLSBhL0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+ IEBAIC0yLDYgKzIsNyBAQCBFbnRyaWVzIGFyZSBzb3J0ZWQgY2hyb25vbG9naWNhbGx5IGZyb20g b2xkZXN0IHRvIHlvdW5nZXN0IHdpdGhpbiBlYWNoIHJlbGVhc2UsCj4gwqByZWxlYXNlcyBhcmUg c29ydGVkIGZyb20geW91bmdlc3QgdG8gb2xkZXN0Lgo+Cj4gwqB2ZXJzaW9uIDxuZXh0PjoKPiAr LSBEWFYgRFhUMSBlbmNvZGVyCj4gwqAtIExFQUQgTUNNUCBkZWNvZGVyCj4gwqAtIEVWQyBkZWNv ZGluZyB1c2luZyBleHRlcm5hbCBsaWJyYXJ5IGxpYnhldmQKPiDCoC0gRVZDIGVuY29kaW5nIHVz aW5nIGV4dGVybmFsIGxpYnJhcnkgbGlieGV2ZQo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9j b25maWd1cmUKPiBpbmRleCBjOGFlMGEwNjFkLi4yMTY2MzAwMGY4IDEwMDc1NQo+IC0tLSBhL2Nv bmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0yODUxLDYgKzI4NTEsNyBAQCBkdnZpZGVv X2RlY29kZXJfc2VsZWN0PSJkdnByb2ZpbGUgaWRjdGRzcCIKPiDCoGR2dmlkZW9fZW5jb2Rlcl9z ZWxlY3Q9ImR2cHJvZmlsZSBmZGN0ZHNwIG1lX2NtcCBwaXhibG9ja2RzcCIKPiDCoGR4YV9kZWNv ZGVyX2RlcHM9InpsaWIiCj4gwqBkeHZfZGVjb2Rlcl9zZWxlY3Q9Imx6ZiB0ZXh0dXJlZHNwIgo+ ICtkeHZfZW5jb2Rlcl9zZWxlY3Q9InRleHR1cmVkc3BlbmMiCj4gwqBlYWMzX2RlY29kZXJfc2Vs ZWN0PSJhYzNfZGVjb2RlciIKPiDCoGVhYzNfZW5jb2Rlcl9zZWxlY3Q9ImFjM19lbmNvZGVyIgo+ IMKgZWFtYWRfZGVjb2Rlcl9zZWxlY3Q9ImFhbmRjdHRhYmxlcyBibG9ja2RzcCBic3dhcGRzcCIK PiBkaWZmIC0tZ2l0IGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aSBiL2RvYy9nZW5lcmFsX2Nv bnRlbnRzLnRleGkKPiBpbmRleCA4YjQ4ZmVkMDYwLi5mMjY5Y2JkMWE5IDEwMDY0NAo+IC0tLSBh L2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkKPiArKysgYi9kb2MvZ2VuZXJhbF9jb250ZW50cy50 ZXhpCj4gQEAgLTY3MCw3ICs2NzAsOCBAQCBsaWJyYXJ5Ogo+IMKgQGl0ZW0gUmVkaXJlY3RvcsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBAdGFiwqDCoCBAdGFiIFgKPiDCoEBpdGVtIFJl ZFNwYXJrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBAdGFiwqDCoCBAdGFiIFgK PiDCoEBpdGVtIFJlbmRlcndhcmUgVGVYdHVyZSBEaWN0aW9uYXJ5IEB0YWLCoMKgIEB0YWIgWAo+ IC1AaXRlbSBSZXNvbHVtZSBEWFbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBAdGFiwqDCoCBA dGFiIFgKPiArQGl0ZW0gUmVzb2x1bWUgRFhWwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQHRh YiBYIEB0YWIgWAo+ICvCoMKgwqAgQHRhYiBFbmNvZGluZyBpcyBvbmx5IHN1cHBvcnRlZCBmb3Ig dGhlIERYVDEgKE5vcm1hbCBRdWFsaXR5LCBObyBBbHBoYSkgdGV4dHVyZSBmb3JtYXQuCj4gwqBA aXRlbSBSRjY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEB0YWLC oMKgIEB0YWIgWAo+IMKgQGl0ZW0gUkwywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQHRhYsKgwqAgQHRhYiBYCj4gwqDCoMKgwqAgQHRhYiBBdWRpbyBhbmQgdmlk ZW8gZm9ybWF0IHVzZWQgaW4gc29tZSBnYW1lcyBieSBFbnRlcnRhaW5tZW50IFNvZnR3YXJlIFBh cnRuZXJzLgo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9N YWtlZmlsZQo+IGluZGV4IGJiNDIwOTUxNjUuLjk2MzYxYWM3OTQgMTAwNjQ0Cj4gLS0tIGEvbGli YXZjb2RlYy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBAQCAtMzQxLDYg KzM0MSw3IEBAIE9CSlMtJChDT05GSUdfRFZWSURFT19FTkNPREVSKcKgwqDCoMKgwqDCoMKgwqAg Kz0gZHZlbmMubyBkdi5vIGR2ZGF0YS5vCj4gwqBPQkpTLSQoQ09ORklHX0RYQV9ERUNPREVSKcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBkeGEubwo+IMKgT0JKUy0kKENPTkZJR19EWFRPUllf REVDT0RFUinCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZHh0b3J5Lm8KPiDCoE9CSlMtJChDT05GSUdf RFhWX0RFQ09ERVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4di5vCj4gK09CSlMtJChD T05GSUdfRFhWX0VOQ09ERVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmVuYy5vCj4g wqBPQkpTLSQoQ09ORklHX0VBQzNfREVDT0RFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGVh YzNfZGF0YS5vCj4gwqBPQkpTLSQoQ09ORklHX0VBQzNfRU5DT0RFUinCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICs9IGVhYzNlbmMubyBlYWMzX2RhdGEubwo+IMKgT0JKUy0kKENPTkZJR19FQUNNVl9E RUNPREVSKcKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGVhY212Lm8KPiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiBpbmRleCA5M2Nl OGUzMjI0Li5lZjhjM2E2ZDdkIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMK PiArKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gQEAgLTEwNiw2ICsxMDYsNyBAQCBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9kdnZpZGVvX2VuY29kZXI7Cj4gwqBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9kdnZpZGVvX2RlY29kZXI7Cj4gwqBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9keGFf ZGVjb2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2R4dG9yeV9kZWNvZGVyOwo+ICtl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9keHZfZW5jb2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNv ZGVjIGZmX2R4dl9kZWNvZGVyOwo+IMKgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfZWFjbXZfZGVj b2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2VhbWFkX2RlY29kZXI7Cj4gZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvZHh2ZW5jLmMgYi9saWJhdmNvZGVjL2R4dmVuYy5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4zNmVlMDY2OTlkCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2xpYmF2Y29kZWMvZHh2ZW5jLmMKPiBAQCAtMCwwICsxLDM2MiBAQAo+ICsv Kgo+ICsgKiBSZXNvbHVtZSBEWFYgZW5jb2Rlcgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVml0 dG9yaW8gR2lvdmFyYSA8dml0dG9yaW8uZ2lvdmFyYUBnbWFpbC5jb20+Cj4gKyAqIENvcHlyaWdo dCAoQykgMjAxNSBUb20gQnV0dGVyd29ydGggPGJhbmdub2lzZUBnbWFpbC5jb20+Cj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBQYXVsIEIgTWFob2wKPiArICogQ29weXJpZ2h0IChDKSAyMDI0IENv bm5vciBXb3JsZXkgPGNvbm5vcmJ3b3JsZXlAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2NyYy5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvb3B0LmgiCj4gKwo+ICsjaW5jbHVkZSAibWF0aG9wcy5oIgo+ICsjaW5jbHVkZSAiYXZjb2Rl Yy5oIgo+ICsjaW5jbHVkZSAiYnl0ZXN0cmVhbS5oIgo+ICsjaW5jbHVkZSAiY29kZWNfaW50ZXJu YWwuaCIKPiArI2luY2x1ZGUgImVuY29kZS5oIgo+ICsjaW5jbHVkZSAibHpmLmgiCj4gKyNpbmNs dWRlICJ0ZXh0dXJlZHNwLmgiCj4gKyNpbmNsdWRlICJ0aHJlYWQuaCIKPiArCj4gKyNkZWZpbmUg TE9PS0JBQ0tfSFRfRUxFTVMgMHg0MDAwMAo+ICsjZGVmaW5lIExPT0tCQUNLX1dPUkRTwqDCoMKg IDB4MjAyMDIKPiArCj4gK2VudW0gRFhWVGV4dHVyZUZvcm1hdCB7Cj4gK8KgwqDCoCBEWFZfRk1U X0RYVDEgPSBNS0JFVEFHKCdEJywgJ1gnLCAnVCcsICcxJyksCj4gK307Cj4gKwo+ICt0eXBlZGVm IHN0cnVjdCBIVEVudHJ5IHsKPiArwqDCoMKgIHVpbnQzMl90IGtleTsKPiArwqDCoMKgIHVpbnQz Ml90IHBvczsKPiArfSBIVEVudHJ5Owo+ICsKPiArc3RhdGljIHZvaWQgaHRfaW5pdChIVEVudHJ5 ICpodCkKPiArewo+ICvCoMKgwqAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBMT09LQkFDS19IVF9F TEVNUzsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGh0W2ldLnBvcyA9IC0xOwo+ICvCoMKgwqAg fQo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QgaHRfbG9va3VwX2FuZF91cHNlcnQoSFRFbnRy eSAqaHQsIEFWQ1JDICpoYXNoX2N0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBrZXksIHVp bnQzMl90IHBvcykKPiArewo+ICvCoMKgwqAgdWludDMyX3QgcmV0ID0gLTE7Cj4gK8KgwqDCoCBz aXplX3QgaGFzaCA9IGF2X2NyYyhoYXNoX2N0eCwgMCwgKHVpbnQ4X3QqKSZrZXksIDQpICUgTE9P S0JBQ0tfSFRfRUxFTVM7Cj4gK8KgwqDCoCBmb3IgKHNpemVfdCBpID0gaGFzaDsgaSA8IGhhc2gg KyBMT09LQkFDS19IVF9FTEVNUzsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHNpemVfdCB3cmFw cGVkX2luZGV4ID0gaSAlIExPT0tCQUNLX0hUX0VMRU1TOwo+ICvCoMKgwqDCoMKgwqDCoCBIVEVu dHJ5ICplbnRyeSA9ICZodFt3cmFwcGVkX2luZGV4XTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGVu dHJ5LT5rZXkgPT0ga2V5IHx8IGVudHJ5LT5wb3MgPT0gLTEpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXQgPSBlbnRyeS0+cG9zOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudHJ5 LT5rZXkgPSBrZXk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW50cnktPnBvcyA9IHBvczsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvC oMKgwqAgfQo+ICvCoMKgwqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaHRf ZGVsZXRlKEhURW50cnkgKmh0LCBBVkNSQyAqaGFzaF9jdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBrZXksIHVpbnQzMl90IHBvcykKPiAr ewo+ICvCoMKgwqAgSFRFbnRyeSAqcmVtb3ZlZF9lbnRyeSA9IE5VTEw7Cj4gK8KgwqDCoCBzaXpl X3QgcmVtb3ZlZF9oYXNoOwo+ICvCoMKgwqAgc2l6ZV90IGhhc2ggPSBhdl9jcmMoaGFzaF9jdHgs IDAsICh1aW50OF90Kikma2V5LCA0KSAlIExPT0tCQUNLX0hUX0VMRU1TOwo+ICsKPiArwqDCoMKg IGZvciAoc2l6ZV90IGkgPSBoYXNoOyBpIDwgaGFzaCArIExPT0tCQUNLX0hUX0VMRU1TOyBpKysp IHsKPiArwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHdyYXBwZWRfaW5kZXggPSBpICUgTE9PS0JBQ0tf SFRfRUxFTVM7Cj4gK8KgwqDCoMKgwqDCoMKgIEhURW50cnkgKmVudHJ5ID0gJmh0W3dyYXBwZWRf aW5kZXhdOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZW50cnktPnBvcyA9PSAtMSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZW1vdmVkX2Vu dHJ5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGNhbmRpZGF0ZV9oYXNoID0g YXZfY3JjKGhhc2hfY3R4LCAwLCAodWludDhfdCopJmVudHJ5LT5rZXksIDQpICUgTE9PS0JBQ0tf SFRfRUxFTVM7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCh3cmFwcGVkX2luZGV4ID4g cmVtb3ZlZF9oYXNoICYmIChjYW5kaWRhdGVfaGFzaCA8PSByZW1vdmVkX2hhc2ggfHwgY2FuZGlk YXRlX2hhc2ggPiB3cmFwcGVkX2luZGV4KSkgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICh3cmFwcGVkX2luZGV4IDwgcmVtb3ZlZF9oYXNoICYmIChjYW5kaWRhdGVfaGFzaCA8 PSByZW1vdmVkX2hhc2ggJiYgY2FuZGlkYXRlX2hhc2ggPiB3cmFwcGVkX2luZGV4KSkpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpyZW1vdmVkX2VudHJ5ID0gKmVudHJ5Owo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW50cnktPnBvcyA9IC0xOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVtb3ZlZF9lbnRyeSA9IGVudHJ5Owo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVtb3ZlZF9oYXNoID0gd3JhcHBlZF9pbmRleDsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAo ZW50cnktPmtleSA9PSBrZXkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZW50cnkt PnBvcyA8PSBwb3MpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudHJ5LT5w b3MgPSAtMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlbW92ZWRfZW50cnkg PSBlbnRyeTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlbW92ZWRfaGFzaCA9 IHdyYXBwZWRfaW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArfQo+ICsKPiArdHlwZWRl ZiBzdHJ1Y3QgRFhWRW5jQ29udGV4dCB7Cj4gK8KgwqDCoCBBVkNsYXNzICpjbGFzczsKPiArCj4g K8KgwqDCoCBUZXh0dXJlRFNQQ29udGV4dCB0ZXhkc3A7Cj4gK8KgwqDCoCBQdXRCeXRlQ29udGV4 dCBwYmM7Cj4gKwo+ICvCoMKgwqAgdWludDhfdCAqdGV4X2RhdGE7wqDCoCAvLyBDb21wcmVzc2Vk IHRleHR1cmUKPiArwqDCoMKgIGludDY0X3QgdGV4X3NpemU7wqDCoMKgIC8vIFRleHR1cmUgc2l6 ZQo+ICsKPiArwqDCoMKgIC8qIE9wdGltYWwgbnVtYmVyIG9mIHNsaWNlcyBmb3IgcGFyYWxsZWwg ZGVjb2RpbmcgKi8KPiArwqDCoMKgIGludCBzbGljZV9jb3VudDsKPiArCj4gK8KgwqDCoCBUZXh0 dXJlRFNQVGhyZWFkQ29udGV4dCBlbmM7Cj4gKwo+ICvCoMKgwqAgZW51bSBEWFZUZXh0dXJlRm9y bWF0IHRleF9mbXQ7Cj4gK8KgwqDCoCBpbnQgKCpjb21wcmVzc190ZXgpKEFWQ29kZWNDb250ZXh0 ICphdmN0eCk7Cj4gKwo+ICvCoMKgwqAgQVZDUkMgKmNyY19jdHg7Cj4gKwo+ICvCoMKgwqAgSFRF bnRyeSBjb2xvcl9sb29rYmFja19odFtMT09LQkFDS19IVF9FTEVNU107Cj4gK8KgwqDCoCBIVEVu dHJ5IGx1dF9sb29rYmFja19odFtMT09LQkFDS19IVF9FTEVNU107Cj4gK30gRFhWRW5jQ29udGV4 dDsKPiArCj4gK3N0YXRpYyBpbnQgY29tcHJlc3NfdGV4dHVyZV90aHJlYWQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCB2b2lkICphcmcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBzbGljZSwgaW50IHRocmVh ZF9uYikKPiArewo+ICvCoMKgwqAgRFhWRW5jQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsKPiArwqDCoMKgIEFWRnJhbWUgKmZyYW1lID0gYXJnOwo+ICsKPiArwqDCoMKgIGlmIChjdHgt PmVuYy50ZXhfZnVuY3QpIHsKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5lbmMudGV4X2RhdGEub3V0 ID0gY3R4LT50ZXhfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5lbmMuZnJhbWVfZGF0YS5p biA9IGZyYW1lLT5kYXRhWzBdOwo+ICvCoMKgwqDCoMKgwqDCoCBjdHgtPmVuYy5zdHJpZGUgPSBm cmFtZS0+bGluZXNpemVbMF07Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmZl90ZXh0dXJlZHNw X2NvbXByZXNzX3RocmVhZChhdmN0eCwgJmN0eC0+ZW5jLCBzbGljZSwgdGhyZWFkX25iKTsKPiAr wqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgIC8qIHVuaW1wbGVtZW50ZWQ6IFlDb0Nn IGZvcm1hdHMgKi8KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC0xOwo+ICvCoMKgwqAgfQo+ICsK PiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBDb252ZXJ0cyBhbiBpbmRleCBvZmZz ZXQgdmFsdWUgdG8gYSAyLWJpdCBvcGNvZGUgYW5kIHB1c2hlcyBpdCB0byBhIHN0cmVhbS4KPiAr ICogSW52ZXJzZSBvZiBDSEVDS1BPSU5UIGluIGR4di5jLsKgICovCj4gKyNkZWZpbmUgUFVTSF9P UCh4KSBcCj4gK8KgwqDCoCBkbyB7IFwKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHN0YXRlID09IDE2 KSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnRfcChwYmMp IDwgNCkge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBcCj4gKyB9IFwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWx1ZSA9ICh1 aW50MzJfdCopcGJjLT5idWZmZXI7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJ5dGVzdHJlYW0yX3B1dF9sZTMyKHBiYywgMCk7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZSA9IDA7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ICsgfSBcCj4gK8KgwqDCoMKgwqDCoMKgIGlm IChpZHggPj0gMHgxMDIgKiB4KSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg XAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wID0gMzvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnl0ZXN0cmVhbTJfcHV0X2xlMTYocGJjLCAoaWR4IC8geCkgLSAweDEwMik7wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKg IH0gZWxzZSBpZiAoaWR4ID49IDIgKiB4KSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg XAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wID0gMjvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnl0ZXN0cmVhbTJfcHV0X2J5dGUocGJjLCAoaWR4IC8geCkgLSAyKTvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ICvCoMKgwqDCoMKg wqDCoCB9IGVsc2UgaWYgKGlkeCA9PSB4KSB7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AgPSAxO8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPiArwqDCoMKg wqDCoMKgwqAgfSBlbHNlIHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3Ag PSAwO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFwKPiArIH0gXAo+ICvCoMKgwqDCoMKgwqDCoCAqdmFsdWUgfD0gKG9wIDw8IChzdGF0 ZSAqIDIpKTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ICsgc3RhdGUrKzsgXAo+ICvCoMKgwqAg fSB3aGlsZSAoMCkKPiArCj4gK3N0YXRpYyBpbnQgZHh2X2NvbXByZXNzX2R4dDEoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQo+ICt7Cj4gK8KgwqDCoCBEWFZFbmNDb250ZXh0ICpjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOwo+ICvCoMKgwqAgUHV0Qnl0ZUNvbnRleHQgKnBiYyA9ICZjdHgtPnBiYzsKPiAr wqDCoMKgIHVpbnQzMl90ICp2YWx1ZTsKPiArwqDCoMKgIHVpbnQzMl90IGNvbG9yLCBsdXQsIGlk eCwgY29sb3JfaWR4LCBsdXRfaWR4LCBwcmV2X3Bvcywgc3RhdGUgPSAxNiwgcG9zID0gMiwgb3Ag PSAwOwo+ICsKPiArwqDCoMKgIGh0X2luaXQoY3R4LT5jb2xvcl9sb29rYmFja19odCk7Cj4gK8Kg wqDCoCBodF9pbml0KGN0eC0+bHV0X2xvb2tiYWNrX2h0KTsKPiArCj4gK8KgwqDCoCBieXRlc3Ry ZWFtMl9wdXRfbGUzMihwYmMsIEFWX1JMMzIoY3R4LT50ZXhfZGF0YSkpOwo+ICvCoMKgwqAgYnl0 ZXN0cmVhbTJfcHV0X2xlMzIocGJjLCBBVl9STDMyKGN0eC0+dGV4X2RhdGEgKyA0KSk7Cj4gKwo+ ICvCoMKgwqAgaHRfbG9va3VwX2FuZF91cHNlcnQoY3R4LT5jb2xvcl9sb29rYmFja19odCwgY3R4 LT5jcmNfY3R4LCBBVl9STDMyKGN0eC0+dGV4X2RhdGEpLCAwKTsKPiArwqDCoMKgIGh0X2xvb2t1 cF9hbmRfdXBzZXJ0KGN0eC0+bHV0X2xvb2tiYWNrX2h0LCBjdHgtPmNyY19jdHgsIEFWX1JMMzIo Y3R4LT50ZXhfZGF0YSArIDQpLCAxKTsKPiArCj4gK8KgwqDCoCB3aGlsZSAocG9zICsgMiA8PSBj dHgtPnRleF9zaXplIC8gNCkgewo+ICvCoMKgwqDCoMKgwqDCoCBpZHggPSAwOwo+ICsKPiArwqDC oMKgwqDCoMKgwqAgY29sb3IgPSBBVl9STDMyKGN0eC0+dGV4X2RhdGEgKyBwb3MgKiA0KTsKPiAr wqDCoMKgwqDCoMKgwqAgcHJldl9wb3MgPSBodF9sb29rdXBfYW5kX3Vwc2VydChjdHgtPmNvbG9y X2xvb2tiYWNrX2h0LCBjdHgtPmNyY19jdHgsIGNvbG9yLCBwb3MpOwo+ICvCoMKgwqDCoMKgwqDC oCBjb2xvcl9pZHggPSBwcmV2X3BvcyAhPSAtMSA/IHBvcyAtIHByZXZfcG9zIDogMDsKPiArwqDC oMKgwqDCoMKgwqAgaWYgKHBvcyA+PSBMT09LQkFDS19XT1JEUykgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVpbnQzMl90IG9sZF9wb3MgPSBwb3MgLSBMT09LQkFDS19XT1JEUzsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBvbGRfY29sb3IgPSBBVl9STDMyKGN0eC0+dGV4 X2RhdGEgKyBvbGRfcG9zICogNCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaHRfZGVsZXRl KGN0eC0+Y29sb3JfbG9va2JhY2tfaHQsIGN0eC0+Y3JjX2N0eCwgb2xkX2NvbG9yLCBvbGRfcG9z KTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCBwb3MrKzsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgIGx1dCA9IEFWX1JMMzIoY3R4LT50ZXhfZGF0YSArIHBvcyAqIDQpOwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAoY29sb3JfaWR4ICYmIGx1dCA9PSBBVl9STDMyKGN0eC0+dGV4X2Rh dGEgKyAocG9zIC0gY29sb3JfaWR4KSAqIDQpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWR4ID0gY29sb3JfaWR4Owo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlkeCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJldl9wb3Mg PSBodF9sb29rdXBfYW5kX3Vwc2VydChjdHgtPmx1dF9sb29rYmFja19odCwgY3R4LT5jcmNfY3R4 LCBsdXQsIHBvcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbHV0X2lkeCA9IHByZXZfcG9z ICE9IC0xID8gcG9zIC0gcHJldl9wb3MgOiAwOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDC oMKgwqDCoMKgIGlmIChwb3MgPj0gTE9PS0JBQ0tfV09SRFMpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1aW50MzJfdCBvbGRfcG9zID0gcG9zIC0gTE9PS0JBQ0tfV09SRFM7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3Qgb2xkX2x1dCA9IEFWX1JMMzIoY3R4LT50ZXhfZGF0 YSArIG9sZF9wb3MgKiA0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBodF9kZWxldGUoY3R4 LT5sdXRfbG9va2JhY2tfaHQsIGN0eC0+Y3JjX2N0eCwgb2xkX2x1dCwgb2xkX3Bvcyk7Cj4gK8Kg wqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgcG9zKys7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCBQVVNIX09QKDIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKCFpZHgpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZHggPSBjb2xvcl9pZHg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgUFVTSF9PUCgyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWlkeCkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ5dGVzdHJlYW0yX3B1dF9sZTMyKHBiYyzC oCBjb2xvcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlkeCA9IGx1dF9pZHg7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUFVTSF9PUCgyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoIWlkeCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ5dGVzdHJl YW0yX3B1dF9sZTMyKHBiYyzCoCBsdXQpOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9 Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHh2X2VuY29k ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpwa3QsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBBVkZyYW1lICpmcmFtZSwgaW50ICpn b3RfcGFja2V0KQo+ICt7Cj4gK8KgwqDCoCBEWFZFbmNDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOwo+ICvCoMKgwqAgUHV0Qnl0ZUNvbnRleHQgKnBiYyA9ICZjdHgtPnBiYzsKPiArwqDC oMKgIGludCByZXQ7Cj4gKwo+ICvCoMKgwqAgLyogdW5pbXBsZW1lbnRlZDogbmVlZHMgdG8gZGVw ZW5kIG9uIGNvbXByZXNzaW9uIHJhdGlvIG9mIHRleCBmb3JtYXQgKi8KPiArwqDCoMKgIHJldCA9 IGZmX2FsbG9jX3BhY2tldChhdmN0eCwgcGt0LCAxMiArIDggKyAoY3R4LT50ZXhfc2l6ZSAtIDgp ICsgKGN0eC0+dGV4X3NpemUgLSA4KSoxMi8xMjggKyAxKTsKPiArwqDCoMKgIGlmIChyZXQgPCAw KQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgIGF2Y3R4LT5leGVj dXRlMihhdmN0eCwgY29tcHJlc3NfdGV4dHVyZV90aHJlYWQsICh2b2lkKilmcmFtZSwgTlVMTCwg Y3R4LT5lbmMuc2xpY2VfY291bnQpOwo+ICsKPiArwqDCoMKgIGJ5dGVzdHJlYW0yX2luaXRfd3Jp dGVyKHBiYywgcGt0LT5kYXRhLCBwa3QtPnNpemUpOwo+ICsKPiArwqDCoMKgIGJ5dGVzdHJlYW0y X3B1dF9sZTMyKHBiYywgY3R4LT50ZXhfZm10KTsKPiArwqDCoMKgIGJ5dGVzdHJlYW0yX3B1dF9i eXRlKHBiYywgNCk7Cj4gK8KgwqDCoCBieXRlc3RyZWFtMl9wdXRfYnl0ZShwYmMsIDApOwo+ICvC oMKgwqAgYnl0ZXN0cmVhbTJfcHV0X2J5dGUocGJjLCAwKTsKPiArwqDCoMKgIGJ5dGVzdHJlYW0y X3B1dF9ieXRlKHBiYywgMCk7Cj4gK8KgwqDCoCAvKiBGaWxsIGluIGNvbXByZXNzZWQgc2l6ZSBs YXRlciAqLwo+ICvCoMKgwqAgYnl0ZXN0cmVhbTJfc2tpcF9wKHBiYywgNCk7Cj4gKwo+ICvCoMKg wqAgcmV0ID0gY3R4LT5jb21wcmVzc190ZXgoYXZjdHgpOwo+ICvCoMKgwqAgaWYgKHJldCA8IDAp Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqAgQVZfV0wzMihwa3Qt PmRhdGEgKyA4LCBieXRlc3RyZWFtMl90ZWxsX3AocGJjKSAtIDEyKTsKPiArwqDCoMKgIGF2X3No cmlua19wYWNrZXQocGt0LCBieXRlc3RyZWFtMl90ZWxsX3AocGJjKSk7Cj4gKwo+ICvCoMKgwqAg KmdvdF9wYWNrZXQgPSAxOwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBh dl9jb2xkIGludCBkeHZfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArwqDCoMKg IERYVkVuY0NvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gK8KgwqDCoCBpbnQgcmV0 ID0gYXZfaW1hZ2VfY2hlY2tfc2l6ZShhdmN0eC0+d2lkdGgsIGF2Y3R4LT5oZWlnaHQsIDAsIGF2 Y3R4KTsKPiArCj4gK8KgwqDCoCBpZiAocmV0IDwgMCkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW1hZ2Ugc2l6ZSAlZHglZC5cbiIsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0 KTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDC oCBpZiAoYXZjdHgtPndpZHRoICUgNCB8fCBhdmN0eC0+aGVpZ2h0ICUgNCkgewo+ICvCoMKgwqDC oMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlZpZGVvIHNpemUgJWR4JWQgaXMg bm90IG11bHRpcGxlIG9mIDQuXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 Y3R4LT53aWR0aCwgYXZjdHgtPmhlaWdodCk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIGZmX3RleHR1cmVkc3Bl bmNfaW5pdCgmY3R4LT50ZXhkc3ApOwo+ICsKPiArwqDCoMKgIHN3aXRjaCAoY3R4LT50ZXhfZm10 KSB7Cj4gK8KgwqDCoCBjYXNlIERYVl9GTVRfRFhUMToKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5j b21wcmVzc190ZXggPSBkeHZfY29tcHJlc3NfZHh0MTsKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT5l bmMudGV4X2Z1bmN0ID0gY3R4LT50ZXhkc3AuZHh0MV9ibG9jazsKPiArwqDCoMKgwqDCoMKgwqAg Y3R4LT5lbmMudGV4X3JhdGlvID0gODsKPiArwqDCoMKgwqDCoMKgwqAgY3R4LT50ZXhfc2l6ZSA9 IGF2Y3R4LT53aWR0aCAqIGF2Y3R4LT5oZWlnaHQgLyAyOwo+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsKPiArwqDCoMKgIGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiSW52YWxpZCBmb3JtYXQgJTA4WFxuIiwgY3R4LT50ZXhfZm10KTsKPiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gK8KgwqDCoCB9Cj4gK8Kg wqDCoCBjdHgtPmVuYy5yYXdfcmF0aW8gPSAxNjsKPiArwqDCoMKgIGN0eC0+ZW5jLnNsaWNlX2Nv dW50ID0gYXZfY2xpcChhdmN0eC0+dGhyZWFkX2NvdW50LCAxLCBhdmN0eC0+aGVpZ2h0IC8gVEVY VFVSRV9CTE9DS19IKTsKPiArCj4gK8KgwqDCoCBjdHgtPnRleF9kYXRhID0gYXZfbWFsbG9jKGN0 eC0+dGV4X3NpemUpOwo+ICvCoMKgwqAgaWYgKCFjdHgtPnRleF9kYXRhKSB7Cj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAg Y3R4LT5jcmNfY3R4ID0gKEFWQ1JDKilhdl9jcmNfZ2V0X3RhYmxlKEFWX0NSQ18zMl9JRUVFKTsK PiArwqDCoMKgIGlmICghY3R4LT5jcmNfY3R4KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt MTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGF2X2NvbGQgaW50IGR4dl9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gK3sKPiArwqDC oMKgIERYVkVuY0NvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICvCoMKgwqAg YXZfZnJlZXAoJmN0eC0+dGV4X2RhdGEpOwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihEWFZFbmNDb250ZXh0LCB4KQo+ICsjZGVm aW5lIEZMQUdTwqDCoMKgwqAgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19F TkNPRElOR19QQVJBTQo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24gb3B0aW9uc1tdID0gewo+ICvC oMKgwqAgeyAiZm9ybWF0IiwgTlVMTCwgT0ZGU0VUKHRleF9mbXQpLCBBVl9PUFRfVFlQRV9JTlQs IHsgLmk2NCA9IERYVl9GTVRfRFhUMSB9LCBEWFZfRk1UX0RYVDEsIERYVl9GTVRfRFhUMSwgRkxB R1MsICJmb3JtYXQiIH0sCj4gK8KgwqDCoMKgwqDCoMKgIHsgImR4dDEiLCAiRFhUMSAoTm9ybWFs IFF1YWxpdHksIE5vIEFscGhhKSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBEWFZf Rk1UX0RYVDHCoMKgIH0sIDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9LAo+ICvCoMKgwqAgeyBOVUxM IH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBkeHZlbmNfY2xhc3MgPSB7Cj4g K8KgwqDCoCAuY2xhc3NfbmFtZSA9ICJEWFYgZW5jb2RlciIsCj4gK8KgwqDCoCAub3B0aW9uwqDC oMKgwqAgPSBvcHRpb25zLAo+ICvCoMKgwqAgLnZlcnNpb27CoMKgwqAgPSBMSUJBVlVUSUxfVkVS U0lPTl9JTlQsCj4gK307Cj4gKwo+ICtjb25zdCBGRkNvZGVjIGZmX2R4dl9lbmNvZGVyID0gewo+ ICvCoMKgwqAgLnAubmFtZcKgwqDCoMKgwqDCoMKgwqAgPSAiZHh2IiwKPiArwqDCoMKgIENPREVD X0xPTkdfTkFNRSgiUmVzb2x1bWUgRFhWIiksCj4gK8KgwqDCoCAucC50eXBlwqDCoMKgwqDCoMKg wqDCoCA9IEFWTUVESUFfVFlQRV9WSURFTywKPiArwqDCoMKgIC5wLmlkwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBBVl9DT0RFQ19JRF9EWFYsCj4gK8KgwqDCoCAuaW5pdMKgwqDCoMKgwqDCoMKgwqDC oMKgID0gZHh2X2luaXQsCj4gK8KgwqDCoCBGRl9DT0RFQ19FTkNPREVfQ0IoZHh2X2VuY29kZSks Cj4gK8KgwqDCoCAuY2xvc2XCoMKgwqDCoMKgwqDCoMKgwqAgPSBkeHZfY2xvc2UsCj4gK8KgwqDC oCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoRFhWRW5jQ29udGV4dCksCj4gK8KgwqDCoCAucC5j YXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfRFIxIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX0NPREVDX0NBUF9TTElDRV9USFJFQURTIHwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX0NPREVDX0NBUF9GUkFN RV9USFJFQURTLAo+ICvCoMKgwqAgLnAucHJpdl9jbGFzc8KgwqAgPSAmZHh2ZW5jX2NsYXNzLAo+ ICvCoMKgwqAgLnAucGl4X2ZtdHPCoMKgwqDCoCA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXRb XSkgewo+ICvCoMKgwqDCoMKgwqDCoCBBVl9QSVhfRk1UX1JHQkEsIEFWX1BJWF9GTVRfTk9ORSwK PiArwqDCoMKgIH0sCj4gK8KgwqDCoCAuY2Fwc19pbnRlcm5hbMKgID0gRkZfQ09ERUNfQ0FQX0lO SVRfQ0xFQU5VUCwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92ZXJzaW9uLmggYi9s aWJhdmNvZGVjL3ZlcnNpb24uaAo+IGluZGV4IDM3NjM4OGM1YmIuLjBmYWUzZDA2ZDMgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZjb2RlYy92ZXJzaW9uLmgKPiArKysgYi9saWJhdmNvZGVjL3ZlcnNpb24u aAo+IEBAIC0yOSw3ICsyOSw3IEBACj4KPiDCoCNpbmNsdWRlICJ2ZXJzaW9uX21ham9yLmgiCj4K PiAtI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fTUlOT1LCoCAzNwo+ICsjZGVmaW5lIExJQkFW Q09ERUNfVkVSU0lPTl9NSU5PUsKgIDM4Cj4gwqAjZGVmaW5lIExJQkFWQ09ERUNfVkVSU0lPTl9N SUNSTyAxMDAKPgo+IMKgI2RlZmluZSBMSUJBVkNPREVDX1ZFUlNJT05fSU5UIEFWX1ZFUlNJT05f SU5UKExJQkFWQ09ERUNfVkVSU0lPTl9NQUpPUiwgXAoKClNvcnJ5LCBzdGlsbCBmaWd1cmluZyBv dXQgbXkgZW1haWwgY2xpZW50IHNldHRpbmdzIHRvIGdldCBwYXRjaGVzIHRvIHNlbmQgY29ycmVj dGx5LiBCZWFyIHdpdGggbWUuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcu b3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==