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 4D75E48D8D for ; Tue, 26 Mar 2024 19:09:26 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EB4C768D66D; Tue, 26 Mar 2024 21:09:23 +0200 (EET) Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EAC1B68BE9D for ; Tue, 26 Mar 2024 21:09:17 +0200 (EET) Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-430d3fcc511so53371cf.1 for ; Tue, 26 Mar 2024 12:09:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711480156; x=1712084956; h=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=sUEhx/0za0V+WZ3iBs5i5Z0ZyggdpaWQFRX0qxf874Q=; b=uBkXjM/MMzztZlfMMisjvMuYpSCkETTkymdTxukaaSKI4KxZHA1XLlHbxj02hEr7BA TAvA9WD30Rfl8ZkXUAbTmuiD69UOdUhAGPU1xcMBtsNrf1gy1gZoFqxRCp23qfGCcRT1 CNXjdrlfvq1KvJNNDanJ1fH1nIWoPtpAiNgjGB+oxijagCj0vbgbr2QJJNars2Qw0uV6 svm/4ZcHdJtMPcgY79RlqfVPZmkIggpkZ7Qg/8PHkDxLWpyyqOUHq408iFM1TWUvcU7V dLNRFE+idLZHtE3xZ8cESkJ76ZpEReS+0Otgw941UkSrt7Tg5MLcNKTlaZfYzeNUNMEp qiuA== X-Gm-Message-State: AOJu0YxTMGSqtIjgZ9seT/snPjtL2gPeSIzlEl3Y5t5WSAo5O78pPRb+ fz8bBHJLyI+T38grwEn4/UiVadyauokDOUttTsrqqYA44UE6Q4rIl4RQIEBK0GzNDDPQofznaod IojPwMAC5Klt56FxXBcFAaF6jeyu8gvcR8xmzyTDUfhA44GeOvEJF X-Google-Smtp-Source: AGHT+IEF0X4R1K2B32pi4OIx7dcll+Bg0eQniV3PPeRdiGIngongR0dDHlGjtMz5gXp3gQpPdR9yi6cuX7391xtv3/U= X-Received: by 2002:a05:622a:98c:b0:431:3771:1081 with SMTP id bw12-20020a05622a098c00b0043137711081mr36088qtb.23.1711480155964; Tue, 26 Mar 2024 12:09:15 -0700 (PDT) MIME-Version: 1.0 References: <20240326164739.153011-1-asoulier@google.com> <20240326164739.153011-2-asoulier@google.com> In-Reply-To: Date: Tue, 26 Mar 2024 12:09:04 -0700 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 2/5] avcodec/liblc3: Add encoding/decoding support of LC3 audio codec 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: , From: Antoine Soulier via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Antoine Soulier 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: MS4gVGhhbmtzLCBJIHdpbGwgYWRkIHRoZSBjYXBzLgoyLiBZZXMsIHRoZSBgbGMzX2hyX3NldHVw X2RlY29kZXIoKWAgcmV0dXJucyB0aGUgZ2l2ZW4gbWVtb3J5IGFkZHJlc3MgKEFuZApkbyBub3Qg d3JpdGUgYW55dGhpbmcgd2hlbiAnTlVMTCcpLgpCdXQgYmFkIHBhcmFtZXRlcnMgYWxzbyByZXR1 cm4gYE5VTExgLCBldmVuIGlmIHBhcmFtZXRlcnMgYXJlIGFscmVhZHkKdmFsaWRhdGVkIGVsc2V3 aGVyZSwgSSB3aWxsIGNoYW5nZSB0aGlzIGNhbGwgdG8gYmUgbW9yZSBjbGVhbi4KPiAiV2hhdCBt YWtlcyB5b3UgYmVsaWV2ZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgZXJyb3IgdGhhdCBjYW4gaGFw cGVuPyIKVGhlICJsYzNfaHJfZW5jb2Rlcl9zaXplKCkiIHZhbGlkYXRlcyB0aGUgb3RoZXIgcGFy YW1ldGVycy4KMy4gWWVzLCBJIHdpbGwuCgpGb3IgdGhlIGNoYW5nZSBvZiB0aGUgY29kZWMgSUQs IEkgZGlkIG5vdCBrbm93IGhvdyB0byBpbXBsZW1lbnQgaXQuClRoZXJlIGFyZSAyIGNvZGVjcyBj b3ZlcmVkOgotIExDMywgc3RhbmRhcmRpemVkIGJ5IHRoZSBCbHVldG9vdGggU0lHLCBmcmVlIHRv IHVzZSBvdmVyIEJsdWV0b290aCwgYW5kCnNob3VsZCBvbmx5IGJlIHVzZWQgb3ZlciBCbHVldG9v dGguCi0gTEMzcGx1cywgYSBzaWJsaW5nIG9mIExDMywgZGVmaW5lZCBieSBhbm90aGVyIHN0YW5k YXJkLCAoRVRTSSBUUyAxMDMKNjM0KSwgdGhhdCBjYW4gYmUgdXNlZCBhbnl3aGVyZS4gVGhlIGNo b3NlbiBwYXJhbWV0ZXJzIGNvbmZvcm0gdG8gb25lIG9yCm90aGVyLgpTaG91bGQgSSBkZWNsYXJl IGEgc2Vjb25kIEZGQ29kZWMgYW5kIGFkZCBhbiBvcHRpb24gImxjM3BsdXMiID8KClRoYW5rcy4K Ck9uIFR1ZSwgTWFyIDI2LCAyMDI0IGF0IDExOjI44oCvQU0gQW5kcmVhcyBSaGVpbmhhcmR0IDwK YW5kcmVhcy5yaGVpbmhhcmR0QG91dGxvb2suY29tPiB3cm90ZToKCj4gQW50b2luZSBTb3VsaWVy IHZpYSBmZm1wZWctZGV2ZWw6Cj4gPiBUaGUgTEMzIGF1ZGlvIGNvZGVjIGlzIHRoZSBkZWZhdWx0 IGNvZGVjIG9mIEJsdWV0b290aCBMRSBhdWRpby4KPiA+IFRoaXMgaXMgYSB3cmFwcGVyIG92ZXIg dGhlIGxpYmxjMyBsaWJyYXJ5ICgKPiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2xpYmxjMyku Cj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogQW50b2luZSBTb3VsaWVyIDxhc291bGllckBnb29nbGUu Y29tPgo+ID4gU2lnbmVkLW9mZi1ieTogQW50b2luZSBTT1VMSUVSIDxhc291bGllckBnb29nbGUu Y29tPgo+ID4gLS0tCj4gPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgfCAgIDMgKwo+ID4gIGxp YmF2Y29kZWMvYWxsY29kZWNzLmMgIHwgICAzICsKPiA+ICBsaWJhdmNvZGVjL2NvZGVjX2Rlc2Mu YyB8ICAxNCArKysKPiA+ICBsaWJhdmNvZGVjL2NvZGVjX2lkLmggICB8ICAgMiArCj4gPiAgbGli YXZjb2RlYy9saWJsYzNkZWMuYyAgfCAxNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gPiAgbGliYXZjb2RlYy9saWJsYzNlbmMuYyAgfCAxOTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgMzU5IGluc2VydGlvbnMo KykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJsYzNkZWMuYwo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYmxjM2VuYy5jCj4gPgo+ID4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gPiBpbmRleCA3 MDg0MzRhYzc2Li43ZDJjZjMwNzZkIDEwMDY0NAo+ID4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmls ZQo+ID4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ID4gQEAgLTExMjMsNiArMTEyMyw5IEBA IE9CSlMtJChDT05GSUdfTElCSUxCQ19FTkNPREVSKSAgICAgICAgICAgICs9Cj4gbGliaWxiYy5v Cj4gPiAgT0JKUy0kKENPTkZJR19MSUJKWExfREVDT0RFUikgICAgICAgICAgICAgKz0gbGlianhs ZGVjLm8gbGlianhsLm8KPiA+ICBPQkpTLSQoQ09ORklHX0xJQkpYTF9FTkNPREVSKSAgICAgICAg ICAgICArPSBsaWJqeGxlbmMubyBsaWJqeGwubwo+ID4gIE9CSlMtJChDT05GSUdfTElCS1ZBWkFB Ul9FTkNPREVSKSAgICAgICAgICs9IGxpYmt2YXphYXIubwo+ID4gK09CSlMtJChDT05GSUdfTElC TEMzX0VOQ09ERVIpICAgICAgICAgICAgICs9IGxpYmxjM2VuYy5vCj4gPiArT0JKUy0kKENPTkZJ R19MSUJMQzNfTEMzX0RFQ09ERVIpICAgICAgICAgKz0gbGlibGMzZGVjLm8KPiA+ICtPQkpTLSQo Q09ORklHX0xJQkxDM19MQzNQTFVTX0RFQ09ERVIpICAgICArPSBsaWJsYzNkZWMubwo+ID4gIE9C SlMtJChDT05GSUdfTElCTVAzTEFNRV9FTkNPREVSKSAgICAgICAgICs9IGxpYm1wM2xhbWUubwo+ ID4gIE9CSlMtJChDT05GSUdfTElCT1BFTkNPUkVfQU1STkJfREVDT0RFUikgICs9IGxpYm9wZW5j b3JlLWFtci5vCj4gPiAgT0JKUy0kKENPTkZJR19MSUJPUEVOQ09SRV9BTVJOQl9FTkNPREVSKSAg Kz0gbGlib3BlbmNvcmUtYW1yLm8KPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVj cy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ID4gaW5kZXggMjM4NmI0NTBhNi4uMjlhZWRh ZWFjNiAxMDA2NDQKPiA+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+ICsrKyBiL2xp YmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+IEBAIC03NzYsNiArNzc2LDkgQEAgZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGliaWxiY19lbmNvZGVyOwo+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZm X2xpYmlsYmNfZGVjb2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZGVj b2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJqeGxfZW5jb2RlcjsKPiA+ICtl eHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJsYzNfZW5jb2RlcjsKPiA+ICtleHRlcm4gY29uc3Qg RkZDb2RlYyBmZl9saWJsYzNfbGMzX2RlY29kZXI7Cj4gPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfbGlibGMzX2xjM3BsdXNfZGVjb2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9s aWJtcDNsYW1lX2VuY29kZXI7Cj4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmNv cmVfYW1ybmJfZW5jb2RlcjsKPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuY29y ZV9hbXJuYl9kZWNvZGVyOwo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5j IGIvbGliYXZjb2RlYy9jb2RlY19kZXNjLmMKPiA+IGluZGV4IDNiYWI4NmRiNjIuLjIzMGJiYTJh MDkgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL2NvZGVjX2Rlc2MuYwo+ID4gKysrIGIvbGli YXZjb2RlYy9jb2RlY19kZXNjLmMKPiA+IEBAIC0zNDI1LDYgKzM0MjUsMjAgQEAgc3RhdGljIGNv bnN0IEFWQ29kZWNEZXNjcmlwdG9yCj4gY29kZWNfZGVzY3JpcHRvcnNbXSA9IHsKPiA+ICAgICAg ICAgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiUU9BIChRdWl0ZSBPSyBBdWRp bykiKSwKPiA+ICAgICAgICAgIC5wcm9wcyAgICAgPSBBVl9DT0RFQ19QUk9QX0lOVFJBX09OTFkg fCBBVl9DT0RFQ19QUk9QX0xPU1NZLAo+ID4gICAgICB9LAo+ID4gKyAgICB7Cj4gPiArICAgICAg ICAuaWQgICAgICAgID0gQVZfQ09ERUNfSURfTEMzLAo+ID4gKyAgICAgICAgLnR5cGUgICAgICA9 IEFWTUVESUFfVFlQRV9BVURJTywKPiA+ICsgICAgICAgIC5uYW1lICAgICAgPSAibGMzIiwKPiA+ ICsgICAgICAgIC5sb25nX25hbWUgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiTEMzIChMb3cgQ29t cGxleGl0eQo+IENvbW11bmljYXRpb24gQ29kZWMpIiksCj4gPiArICAgICAgICAucHJvcHMgICAg ID0gQVZfQ09ERUNfUFJPUF9JTlRSQV9PTkxZIHwgQVZfQ09ERUNfUFJPUF9MT1NTWSwKPiA+ICsg ICAgfSwKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLmlkICAgICAgICA9IEFWX0NPREVDX0lEX0xD M19QTFVTLAo+ID4gKyAgICAgICAgLnR5cGUgICAgICA9IEFWTUVESUFfVFlQRV9BVURJTywKPiA+ ICsgICAgICAgIC5uYW1lICAgICAgPSAibGMzX3BsdXMiLAo+ID4gKyAgICAgICAgLmxvbmdfbmFt ZSA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJMQzNwbHVzIChMb3cgQ29tcGxleGl0eQo+IENvbW11 bmljYXRpb24gQ29kZWMgcGx1cykiKSwKPiA+ICsgICAgICAgIC5wcm9wcyAgICAgPSBBVl9DT0RF Q19QUk9QX0lOVFJBX09OTFkgfCBBVl9DT0RFQ19QUk9QX0xPU1NZLAo+ID4gKyAgICB9LAo+ID4K PiA+ICAgICAgLyogc3VidGl0bGUgY29kZWNzICovCj4gPiAgICAgIHsKPiA+IGRpZmYgLS1naXQg YS9saWJhdmNvZGVjL2NvZGVjX2lkLmggYi9saWJhdmNvZGVjL2NvZGVjX2lkLmgKPiA+IGluZGV4 IGM4ZGMyMWRhNzQuLjdlNGNiMzkwNDkgMTAwNjQ0Cj4gPiAtLS0gYS9saWJhdmNvZGVjL2NvZGVj X2lkLmgKPiA+ICsrKyBiL2xpYmF2Y29kZWMvY29kZWNfaWQuaAo+ID4gQEAgLTU0Myw2ICs1NDMs OCBAQCBlbnVtIEFWQ29kZWNJRCB7Cj4gPiAgICAgIEFWX0NPREVDX0lEX0FDNCwKPiA+ICAgICAg QVZfQ09ERUNfSURfT1NRLAo+ID4gICAgICBBVl9DT0RFQ19JRF9RT0EsCj4gPiArICAgIEFWX0NP REVDX0lEX0xDMywKPiA+ICsgICAgQVZfQ09ERUNfSURfTEMzX1BMVVMsCj4gPgo+ID4gICAgICAv KiBzdWJ0aXRsZSBjb2RlY3MgKi8KPiA+ICAgICAgQVZfQ09ERUNfSURfRklSU1RfU1VCVElUTEUg PSAweDE3MDAwLCAgICAgICAgICAvLy88IEEgZHVtbXkgSUQKPiBwb2ludGluZyBhdCB0aGUgc3Rh cnQgb2Ygc3VidGl0bGUgY29kZWNzLgo+ID4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlibGMz ZGVjLmMgYi9saWJhdmNvZGVjL2xpYmxjM2RlYy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ ID4gaW5kZXggMDAwMDAwMDAwMC4uZTk3Y2VjYzY4Zgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysr IGIvbGliYXZjb2RlYy9saWJsYzNkZWMuYwo+ID4gQEAgLTAsMCArMSwxNDYgQEAKPiA+ICsvKgo+ ID4gKyAqIExDMyBkZWNvZGVyIHdyYXBwZXIKPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjQgIEFu dG9pbmUgU291bGllciA8YXNvdWxpZXJAZ29vZ2xlLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yCj4gYW55 Cj4gPiArICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBw cm92aWRlZCB0aGF0IHRoZQo+IGFib3ZlCj4gPiArICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KPiA+ICsgKgo+ID4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlN UyBBTEwKPiBXQVJSQU5USUVTCj4gPiArICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJ TkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgo+ID4gKyAqIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUKPiBG T1IKPiA+ICsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWQo+IERBTUFHRVMKPiA+ICsgKiBXSEFUU09FVkVSIFJFU1VMVElORyBG Uk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KPiA+ICsgKiBB Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB UklTSU5HIE9VVAo+IE9GCj4gPiArICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVk ZSA8bGMzLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIK PiA+ICsKPiA+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIgo+ID4gKyNpbmNsdWRlICJjb2RlYy5oIgo+ ID4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ID4gKyNpbmNsdWRlICJkZWNvZGUuaCIK PiA+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ICsKPiA+ICsjZGVmaW5lIERFQ09ERVJfTUFY X0NIQU5ORUxTICAyCj4gPiArCj4gPiArdHlwZWRlZiBzdHJ1Y3QgTGliTEMzRGVjQ29udGV4dCB7 Cj4gPiArICAgIGludCBmcmFtZV91cywgc3JhdGVfaHo7Cj4gPiArICAgIGJvb2wgaHJfbW9kZTsK PiA+ICsgICAgbGMzX2RlY29kZXJfdCBkZWNvZGVyW0RFQ09ERVJfTUFYX0NIQU5ORUxTXTsKPiA+ ICt9IExpYkxDM0RlY0NvbnRleHQ7Cj4gPiArCj4gPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYmxj M19kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gPiArewo+ID4gKyAgICBMaWJM QzNEZWNDb250ZXh0ICpsaWJsYzMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBpbnQgY2hh bm5lbHMgPSBhdmN0eC0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwo+ID4gKyAgICB1bnNpZ25lZCBk ZWNvZGVyX3NpemU7Cj4gPiArCj4gPiArICAgIGlmIChhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPCAy KQo+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gPiArCj4gPiArICAg IGxpYmxjMy0+ZnJhbWVfdXMgPSBBVl9STDE2KGF2Y3R4LT5leHRyYWRhdGEgKyAwKTsKPiA+ICsg ICAgbGlibGMzLT5zcmF0ZV9oeiA9IGF2Y3R4LT5zYW1wbGVfcmF0ZTsKPiA+ICsgICAgbGlibGMz LT5ocl9tb2RlICA9IGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSA+PSA2ICYmCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBBVl9STDE2KGF2Y3R4LT5leHRyYWRhdGEgKyA0KTsKPiA+ICsKPiA+ICsg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywKPiA+ICsgICAgICAgICJEZWNvZGluZyAlLjFm IG1zIGZyYW1lc1xuIiwgbGlibGMzLT5mcmFtZV91cyAvIDFlM2YpOwo+ID4gKyAgICBpZiAobGli bGMzLT5ocl9tb2RlKQo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgIkhp Z2gtcmVzb2x1dGlvbiBtb2RlIGVuYWJsZWRcbiIpOwo+ID4gKwo+ID4gKyAgICBkZWNvZGVyX3Np emUgPSBsYzNfaHJfZGVjb2Rlcl9zaXplKAo+ID4gKyAgICAgICAgbGlibGMzLT5ocl9tb2RlLCBs aWJsYzMtPmZyYW1lX3VzLCBsaWJsYzMtPnNyYXRlX2h6KTsKPiA+ICsgICAgaWYgKCFkZWNvZGVy X3NpemUpCj4gPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiA+ICsKPiA+ ICsgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IGNoYW5uZWxzOyBjaCsrKSB7Cj4gPiArICAgICAg ICBsaWJsYzMtPmRlY29kZXJbY2hdID0gbGMzX2hyX3NldHVwX2RlY29kZXIobGlibGMzLT5ocl9t b2RlLAo+ID4gKyAgICAgICAgICAgIGxpYmxjMy0+ZnJhbWVfdXMsIGxpYmxjMy0+c3JhdGVfaHos IDAsCj4gYXZfbWFsbG9jKGRlY29kZXJfc2l6ZSkpOwo+Cj4gMS4gTGVhayBvbiBlcnJvciAoaWYg dGhpcyBmYWlscyBmb3IgdGhlIHNlY29uZCBjaGFubmVsLCB0aGVuIHRoZSBmaXJzdAo+IGNoYW5u ZWwncyBidWZmZXIgd2lsbCBub3QgYmUgZnJlZWQpLiBVc2UgRkZfQ09ERUNfQ0FQX0lOSVRfQ0xF QU5VUCBmb3IKPiB0aGF0Lgo+IDIuIFNob3VsZG4ndCB0aGVyZSBiZSBhIGNoZWNrIGZvciB0aGF0 IGF2X21hbGxvYyBvciBpcyB0aGUgaWRlYSB0aGF0Cj4gbGMzX2hyX3NldHVwX2RlY29kZXIoKSBj aGVja3MgZm9yIHVzPwo+IDMuIFlvdSBjYW4gYWxsb2NhdGUgdGhlIGRlY29kZXJzIGpvaW50bHk6 IHB0ciA9Cj4gYXZfbWFsbG9jX2FycmF5KGRlY29kZXJfc2l6ZSwgY2hhbm5lbHMpIGFuZCB0aGVu IHVzZSAoY2hhciopcHRyICsgY2ggKgo+IGRlY29kZXJfc2l6ZSBhcyBjb250ZXh0IGZvciB0aGUg ZGVjb2RlciBmb3IgY2hhbm5lbCBjaC4KPiBsaWJsYzMtPmRlY29kZXJbMF0gd291bGQgYmUgdGhl IGFjdHVhbGx5IGFsbG9jYXRlZCBwb2ludGVyIGZvciBmcmVlaW5nLgo+Cj4gPiArICAgICAgICBp ZiAoIWxpYmxjMy0+ZGVjb2RlcltjaF0pCj4gPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPgo+IFdoYXQgbWFrZXMgeW91IGJlbGlldmUgdGhhdCB0aGlzIGlzIHRoZSBvbmx5 IGVycm9yIHRoYXQgY2FuIGhhcHBlbj8KPgo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGF2Y3R4 LT5zYW1wbGVfZm10ID0gQVZfU0FNUExFX0ZNVF9GTFRQOwo+ID4gKyAgICBhdmN0eC0+ZGVsYXkg PSBsYzNfaHJfZGVsYXlfc2FtcGxlcygKPiA+ICsgICAgICAgIGxpYmxjMy0+aHJfbW9kZSwgbGli bGMzLT5mcmFtZV91cywgbGlibGMzLT5zcmF0ZV9oeik7Cj4gPiArICAgIGF2Y3R4LT5pbnRlcm5h bC0+c2tpcF9zYW1wbGVzID0gYXZjdHgtPmRlbGF5Owo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYmxjM19kZWNvZGVfY2xvc2Uo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ID4gK3sKPiA+ICsgICAgTGliTEMzRGVjQ29udGV4dCAq bGlibGMzID0gYXZjdHgtPnByaXZfZGF0YTsKPiA+ICsgICAgaW50IGNoYW5uZWxzID0gYXZjdHgt PmNoX2xheW91dC5uYl9jaGFubmVsczsKPiA+ICsKPiA+ICsgICAgZm9yIChpbnQgY2ggPSAwOyBj aCA8IGNoYW5uZWxzOyBjaCsrKQo+ID4gKyAgICAgICAgYXZfZnJlZShsaWJsYzMtPmRlY29kZXJb Y2hdKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgbGlibGMzX2RlY29kZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1lLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmdvdF9mcmFtZV9wdHIsIEFWUGFja2V0 ICphdnBrdCkKPiA+ICt7Cj4gPiArICAgIExpYkxDM0RlY0NvbnRleHQgKmxpYmxjMyA9IGF2Y3R4 LT5wcml2X2RhdGE7Cj4gPiArICAgIGludCBjaGFubmVscyA9IGF2Y3R4LT5jaF9sYXlvdXQubmJf Y2hhbm5lbHM7Cj4gPiArICAgIHVpbnQ4X3QgKmluID0gYXZwa3QtPmRhdGE7Cj4gPiArICAgIGlu dCBibG9ja19ieXRlcywgcmV0Owo+ID4gKwo+ID4gKyAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IGxj M19ocl9mcmFtZV9zYW1wbGVzKAo+ID4gKyAgICAgICAgbGlibGMzLT5ocl9tb2RlLCBsaWJsYzMt PmZyYW1lX3VzLCBsaWJsYzMtPnNyYXRlX2h6KTsKPiA+ICsgICAgaWYgKChyZXQgPSBmZl9nZXRf YnVmZmVyKGF2Y3R4LCBmcmFtZSwgMCkpIDwgMCkKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g PiArCj4gPiArICAgIGJsb2NrX2J5dGVzID0gYXZwa3QtPnNpemU7Cj4gPiArICAgIGZvciAoaW50 IGNoID0gMDsgY2ggPCBjaGFubmVsczsgY2grKykgewo+ID4gKyAgICAgICAgaW50IGZyYW1lX2J5 dGVzID0gYmxvY2tfYnl0ZXMgLyBjaGFubmVscwo+ID4gKyAgICAgICAgICAgICsgKGNoIDwgYmxv Y2tfYnl0ZXMgJSBjaGFubmVscyk7Cj4gPiArCj4gPiArCj4gPiArICAgICAgICByZXQgPSBsYzNf ZGVjb2RlKGxpYmxjMy0+ZGVjb2RlcltjaF0sIGluLCBmcmFtZV9ieXRlcywKPiA+ICsgICAgICAg ICAgICAgICAgTEMzX1BDTV9GT1JNQVRfRkxPQVQsIGZyYW1lLT5kYXRhW2NoXSwgMSk7Cj4gPiAr ICAgICAgICBpZiAocmV0IDwgMCkKPiA+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKPiA+ICsKPiA+ICsgICAgICAgIGluICs9IGZyYW1lX2J5dGVzOwo+ID4gKyAgICB9 Cj4gPiArCj4gPiArICAgIGZyYW1lLT5uYl9zYW1wbGVzID0gRkZNSU4oZnJhbWUtPm5iX3NhbXBs ZXMsIGF2cGt0LT5kdXJhdGlvbik7Cj4gPiArCj4gPiArICAgICpnb3RfZnJhbWVfcHRyID0gMTsK PiA+ICsKPiA+ICsgICAgcmV0dXJuIGF2cGt0LT5zaXplOwo+ID4gK30KPiA+ICsKPiA+ICtjb25z dCBGRkNvZGVjIGZmX2xpYmxjM19sYzNfZGVjb2RlciA9IHsKPiA+ICsgICAgLnAubmFtZSAgICAg ICAgID0gImxpYmxjMyIsCj4gPiArICAgIENPREVDX0xPTkdfTkFNRSgiTEMzIChMb3cgQ29tcGxl eGl0eSBDb21tdW5pY2F0aW9uIENvZGVjKSIpLAo+ID4gKyAgICAucC50eXBlICAgICAgICAgPSBB Vk1FRElBX1RZUEVfQVVESU8sCj4gPiArICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lE X0xDMywKPiA+ICsgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RSMSwKPiA+ICsg ICAgLnAud3JhcHBlcl9uYW1lID0gImxpYmxjMyIsCj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9 IHNpemVvZihMaWJMQzNEZWNDb250ZXh0KSwKPiA+ICsgICAgLmluaXQgICAgICAgICAgID0gbGli bGMzX2RlY29kZV9pbml0LAo+ID4gKyAgICAuY2xvc2UgICAgICAgICAgPSBsaWJsYzNfZGVjb2Rl X2Nsb3NlLAo+ID4gKyAgICBGRl9DT0RFQ19ERUNPREVfQ0IobGlibGMzX2RlY29kZSksCj4gPiAr fTsKPiA+ICsKPiA+ICtjb25zdCBGRkNvZGVjIGZmX2xpYmxjM19sYzNwbHVzX2RlY29kZXIgPSB7 Cj4gPiArICAgIC5wLm5hbWUgICAgICAgICA9ICJsaWJsYzMiLAo+ID4gKyAgICBDT0RFQ19MT05H X05BTUUoIkxDM3BsdXMgKExvdyBDb21wbGV4aXR5IENvbW11bmljYXRpb24gQ29kZWMKPiBwbHVz KSIpLAo+ID4gKyAgICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCj4gPiAr ICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX0xDM19QTFVTLAo+ID4gKyAgICAucC5j YXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfRFIxLAo+ID4gKyAgICAucC53cmFwcGVyX25hbWUg PSAibGlibGMzIiwKPiA+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKExpYkxDM0RlY0Nv bnRleHQpLAo+ID4gKyAgICAuaW5pdCAgICAgICAgICAgPSBsaWJsYzNfZGVjb2RlX2luaXQsCj4g PiArICAgIC5jbG9zZSAgICAgICAgICA9IGxpYmxjM19kZWNvZGVfY2xvc2UsCj4gPiArICAgIEZG X0NPREVDX0RFQ09ERV9DQihsaWJsYzNfZGVjb2RlKSwKPiA+ICt9Owo+ID4gZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvbGlibGMzZW5jLmMgYi9saWJhdmNvZGVjL2xpYmxjM2VuYy5jCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4uNjQ5NTc0MmMwNAo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvbGliYXZjb2RlYy9saWJsYzNlbmMuYwo+ID4gQEAgLTAsMCAr MSwxOTEgQEAKPiA+ICsvKgo+ID4gKyAqIExDMyBlbmNvZGVyIHdyYXBwZXIKPiA+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMjQgIEFudG9pbmUgU291bGllciA8YXNvdWxpZXJAZ29vZ2xlLmNvbT4KPiA+ ICsgKgo+ID4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+ICsgKgo+ID4gKyAq IFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMg c29mdHdhcmUgZm9yCj4gYW55Cj4gPiArICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlz IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZQo+IGFib3ZlCj4gPiArICogY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGll cy4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBU SEUgQVVUSE9SIERJU0NMQUlNUyBBTEwKPiBXQVJSQU5USUVTCj4gPiArICogV0lUSCBSRUdBUkQg VE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgo+ID4g KyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV VEhPUiBCRSBMSUFCTEUKPiBGT1IKPiA+ICsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVD VCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWQo+IERBTUFHRVMKPiA+ICsgKiBXSEFU U09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRI RVIgSU4gQU4KPiA+ICsgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAo+IE9GCj4gPiArICogT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KPiA+ICsgKi8K PiA+ICsKPiA+ICsjaW5jbHVkZSA8bGMzLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImxpYmF2dXRp bC9pbnRyZWFkd3JpdGUuaCIKPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ID4gKwo+ ID4gKyNpbmNsdWRlICJhdmNvZGVjLmgiCj4gPiArI2luY2x1ZGUgImNvZGVjLmgiCj4gPiArI2lu Y2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCj4gPiArI2luY2x1ZGUgImVuY29kZS5oIgo+ID4gKwo+ ID4gKyNkZWZpbmUgRU5DT0RFUl9NQVhfQ0hBTk5FTFMgIDIKPiA+ICsKPiA+ICt0eXBlZGVmIHN0 cnVjdCBMaWJMQzNFbmNPcHRzIHsKPiA+ICsgICAgZmxvYXQgZnJhbWVfZHVyYXRpb247Cj4gPiAr ICAgIGJvb2wgaHJfbW9kZTsKPiA+ICt9IExpYkxDM0VuY09wdHM7Cj4gPiArCj4gPiArdHlwZWRl ZiBzdHJ1Y3QgTGliTEMzRW5jQ29udGV4dCB7Cj4gPiArICAgIEFWQ2xhc3MgKmF2X2NsYXNzOwo+ ID4gKyAgICBMaWJMQzNFbmNPcHRzIG9wdHM7Cj4gPiArICAgIGludCBibG9ja19ieXRlczsKPiA+ ICsgICAgbGMzX2VuY29kZXJfdCBlbmNvZGVyW0VOQ09ERVJfTUFYX0NIQU5ORUxTXTsKPiA+ICt9 IExpYkxDM0VuY0NvbnRleHQ7Cj4gPiArCj4gPiArc3RhdGljIGF2X2NvbGQgaW50IGxpYmxjM19l bmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gPiArewo+ID4gKyAgICBMaWJMQzNF bmNDb250ZXh0ICpsaWJsYzMgPSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4gKyAgICBib29sIGhyX21v ZGUgPSBsaWJsYzMtPm9wdHMuaHJfbW9kZTsKPiA+ICsgICAgaW50IGZyYW1lX3VzID0gbGlibGMz LT5vcHRzLmZyYW1lX2R1cmF0aW9uICogMTAwMDsKPiA+ICsgICAgaW50IHNyYXRlX2h6ID0gYXZj dHgtPnNhbXBsZV9yYXRlOwo+ID4gKyAgICBpbnQgY2hhbm5lbHMgPSBhdmN0eC0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzOwo+ID4gKyAgICBpbnQgZWZmZWN0aXZlX2JpdF9yYXRlOwo+ID4gKyAgICB1 bnNpZ25lZCBlbmNvZGVyX3NpemU7Cj4gPiArCj4gPiArICAgIGlmIChmcmFtZV91cyAhPSAyNTAw ICYmIGZyYW1lX3VzICE9ICA1MDAwICYmCj4gPiArICAgICAgICBmcmFtZV91cyAhPSA3NTAwICYm IGZyYW1lX3VzICE9IDEwMDAwICAgKSB7Cj4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwKPiA+ICsgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgZnJhbWUgZHVyYXRpb24gJS4x ZiBtc1xuIiwgZnJhbWVfdXMgLyAxZTNmKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgaHJfbW9kZSB8PSBzcmF0ZV9oeiA+IDQ4 MDAwOwo+ID4gKyAgICBocl9tb2RlICY9IHNyYXRlX2h6ID49IDQ4MDAwOwo+ID4gKwo+ID4gKyAg ICBpZiAoZnJhbWVfdXMgPD0gNTAwMCB8fCBocl9tb2RlKQo+ID4gKyAgICAgICAgYXZjdHgtPmNv ZGVjX2lkID0gQVZfQ09ERUNfSURfTEMzX1BMVVM7Cj4KPiBUaGUgZW5jb2RlciBoYXMgdG8gZW5j b2RlIHRoZSBmb3JtYXQgaXQgYWR2ZXJ0aXNlcyAodmlhIEFWQ29kZWMuaWQpOyBpdAo+IG11c3Qg bm90IGNoYW5nZSBpdC4KPiAoV2hhdCBpcyBhY3R1YWxseSB0aGUgcG9pbnQgb2YgdGhpcyB1c2lu ZyB0d28gZGlmZmVyZW50IGNvZGVjIGlkcz8gWW91Cj4gZG8gbm90IGV2ZW4gbmVlZCB0byB0ZWxs IHRoZSBsaWJyYXJpZXMgd2hldGhlciB5b3UgYXJlIGRlY29kaW5nL2VuY29kaW5nCj4gdGhlICst dmVyc2lvbiBvciBub3QuKQo+Cj4gPiArCj4gPiArICAgIGlmIChmcmFtZV91cyA9PSA3NTAwICYm IGhyX21vZGUpIHsKPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ID4g KyAgICAgICAgICAgICJIaWdoLXJlb2x1dGlvbiBtb2RlIG5vdCBzdXBwb3J0ZWQgd2l0aCA3LjUg bXMgZnJhbWVzXG4iKTsKPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPiAr ICAgIH0KPiA+ICsKPiA+ICsgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgIkVuY29kaW5n ICUuMWYgbXMgZnJhbWVzXG4iLCBmcmFtZV91cyAvCj4gMWUzZik7Cj4gPiArICAgIGlmIChocl9t b2RlKQo+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgIkhpZ2gtcmVzb2x1 dGlvbiBtb2RlIGVuYWJsZWRcbiIpOwo+ID4gKwo+ID4gKyAgICBsaWJsYzMtPmJsb2NrX2J5dGVz ID0gbGMzX2hyX2ZyYW1lX2Jsb2NrX2J5dGVzKAo+ID4gKyAgICAgICAgaHJfbW9kZSwgZnJhbWVf dXMsIHNyYXRlX2h6LCBjaGFubmVscywgYXZjdHgtPmJpdF9yYXRlKTsKPiA+ICsKPiA+ICsgICAg ZWZmZWN0aXZlX2JpdF9yYXRlID0gbGMzX2hyX3Jlc29sdmVfYml0cmF0ZSgKPiA+ICsgICAgICAg IGhyX21vZGUsIGZyYW1lX3VzLCBzcmF0ZV9oeiwgbGlibGMzLT5ibG9ja19ieXRlcyk7Cj4gPiAr Cj4gPiArICAgIGlmIChhdmN0eC0+Yml0X3JhdGUgIT0gZWZmZWN0aXZlX2JpdF9yYXRlKQo+ID4g KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywKPiA+ICsgICAgICAgICAgICAg ICAiQml0cmF0ZSBjaGFuZ2VkIHRvICVkIGJwc1xuIiwgZWZmZWN0aXZlX2JpdF9yYXRlKTsKPiA+ ICsgICAgYXZjdHgtPmJpdF9yYXRlID0gZWZmZWN0aXZlX2JpdF9yYXRlOwo+ID4gKwo+ID4gKyAg ICBlbmNvZGVyX3NpemUgPSBsYzNfaHJfZW5jb2Rlcl9zaXplKGZyYW1lX3VzLCBmcmFtZV91cywg c3JhdGVfaHopOwo+ID4gKyAgICBpZiAoIWVuY29kZXJfc2l6ZSkKPiA+ICsgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gPiArCj4gPiArICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBj aGFubmVsczsgY2grKykgewo+ID4gKyAgICAgICAgbGlibGMzLT5lbmNvZGVyW2NoXSA9IGxjM19o cl9zZXR1cF9lbmNvZGVyKAo+ID4gKyAgICAgICAgICAgIGhyX21vZGUsIGZyYW1lX3VzLCBzcmF0 ZV9oeiwgMCwgYXZfbWFsbG9jKGVuY29kZXJfc2l6ZSkpOwo+ID4gKyAgICAgICAgaWYgKCFsaWJs YzMtPmVuY29kZXJbY2hdKQo+ID4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAgYXZjdHgtPmV4dHJhZGF0YSA9IGF2X21hbGxvY3oo Nik7Cj4KPiBQYWRkaW5nCj4KPiA+ICsgICAgaWYgKCFhdmN0eC0+ZXh0cmFkYXRhKQo+ID4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgQVZfV0wxNihhdmN0 eC0+ZXh0cmFkYXRhICsgMCwgZnJhbWVfdXMpOwo+ID4gKyAgICBBVl9XTDE2KGF2Y3R4LT5leHRy YWRhdGEgKyAyLCAwKTsKPiA+ICsgICAgQVZfV0wxNihhdmN0eC0+ZXh0cmFkYXRhICsgNCwgaHJf bW9kZSk7Cj4gPiArICAgIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSA9IDY7Cj4gPiArCj4gPiArICAg IGF2Y3R4LT5mcmFtZV9zaXplID0gbGMzX2hyX2ZyYW1lX3NhbXBsZXMoaHJfbW9kZSwgZnJhbWVf dXMsCj4gc3JhdGVfaHopOwo+ID4gKwo+ID4gKyAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGF2X2NvbGQgaW50IGxpYmxjM19lbmNvZGVfY2xvc2UoQVZDb2RlY0NvbnRleHQg KmF2Y3R4KQo+ID4gK3sKPiA+ICsgICAgTGliTEMzRW5jQ29udGV4dCAqbGlibGMzID0gYXZjdHgt PnByaXZfZGF0YTsKPiA+ICsgICAgaW50IGNoYW5uZWxzID0gYXZjdHgtPmNoX2xheW91dC5uYl9j aGFubmVsczsKPiA+ICsKPiA+ICsgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IGNoYW5uZWxzOyBj aCsrKQo+ID4gKyAgICAgICAgYXZfZnJlZShsaWJsYzMtPmVuY29kZXJbY2hdKTsKPiA+ICsKPiA+ ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbGlibGMzX2VuY29k ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICphdnBrdCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqYXZfZnJhbWUsIGludCAqZ290X3BhY2tldF9w dHIpCj4gPiArewo+ID4gKyAgICBMaWJMQzNFbmNDb250ZXh0ICpsaWJsYzMgPSBhdmN0eC0+cHJp dl9kYXRhOwo+ID4gKyAgICBpbnQgYmxvY2tfYnl0ZXMgPSBsaWJsYzMtPmJsb2NrX2J5dGVzOwo+ ID4gKyAgICBpbnQgY2hhbm5lbHMgPSBhdmN0eC0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzOwo+ID4g KyAgICB1aW50OF90ICpkYXRhX3B0cjsKPiA+ICsgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAg aWYgKChyZXQgPSBmZl9hbGxvY19wYWNrZXQoYXZjdHgsIGF2cGt0LCBibG9ja19ieXRlcykpIDwg MCkKPiA+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiArICAgIGRhdGFfcHRyID0gYXZw a3QtPmRhdGE7Cj4gPiArICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBjaGFubmVsczsgY2grKykg ewo+ID4gKyAgICAgICAgaW50IGZyYW1lX2J5dGVzID0gYmxvY2tfYnl0ZXMgLyBjaGFubmVscwo+ ID4gKyAgICAgICAgICAgICAgICArIChjaCA8IGJsb2NrX2J5dGVzICUgY2hhbm5lbHMpOwo+ID4g Kwo+ID4gKyAgICAgICAgbGMzX2VuY29kZShsaWJsYzMtPmVuY29kZXJbY2hdLAo+ID4gKyAgICAg ICAgICAgIExDM19QQ01fRk9STUFUX0ZMT0FULCBhdl9mcmFtZS0+ZGF0YVtjaF0sIDEsCj4gPiAr ICAgICAgICAgICAgZnJhbWVfYnl0ZXMsIGRhdGFfcHRyKTsKPiA+ICsKPiA+ICsgICAgICAgIGRh dGFfcHRyICs9IGZyYW1lX2J5dGVzOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgICpnb3RfcGFj a2V0X3B0ciA9IDE7Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsj ZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihMaWJMQzNFbmNDb250ZXh0LCBvcHRzLngpCj4gPiAr I2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19BVURJT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09E SU5HX1BBUkFNCj4gPiArc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlvbnNbXSA9IHsKPiA+ICsg ICAgeyAiZnJhbWVfZHVyYXRpb24iLCAiRHVyYXRpb24gb2YgYSBmcmFtZSBpbiBtaWxsaXNlY29u ZHMiLAo+ID4gKyAgICAgICAgT0ZGU0VUKGZyYW1lX2R1cmF0aW9uKSwgQVZfT1BUX1RZUEVfRkxP QVQsCj4gPiArICAgICAgICB7IC5kYmwgPSAxMC4wIH0sIDIuNSwgMTAuMCwgRkxBR1MgfSwKPiA+ ICsgICAgeyAiaGlnaF9yZXNvbHV0aW9uIiwgIkVuYWJsZSBIaWdoLVJlc29sdXRpb24gbW9kZSAo NDggS0h6IG9yIDk2Cj4gS0h6KSIsCj4gPiArICAgICAgICBPRkZTRVQoaHJfbW9kZSksIEFWX09Q VF9UWVBFX0JPT0wsCj4gPiArICAgICAgICB7IC5pNjQgPSAwIH0sIDAsIDEsIEZMQUdTIH0sCj4g PiArICAgIHsgTlVMTCB9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBj bGFzcyA9IHsKPiA+ICsgICAgLmNsYXNzX25hbWUgPSAibGlibGMzIGVuY29kZXIiLAo+ID4gKyAg ICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ID4gKyAgICAub3B0aW9uICAg ICA9IG9wdGlvbnMsCj4gPiArICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5U LAo+ID4gK307Cj4gPiArCj4gPiArY29uc3QgRkZDb2RlYyBmZl9saWJsYzNfZW5jb2RlciA9IHsK PiA+ICsgICAgLnAubmFtZSAgICAgICAgID0gImxpYmxjMyIsCj4gPiArICAgIENPREVDX0xPTkdf TkFNRSgiTEMzIChMb3cgQ29tcGxleGl0eSBDb21tdW5pY2F0aW9uIENvZGVjKSIpLAo+ID4gKyAg ICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfQVVESU8sCj4gPiArICAgIC5wLmlkICAg ICAgICAgICA9IEFWX0NPREVDX0lEX0xDMywKPiA+ICsgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZf Q09ERUNfQ0FQX0RSMSwKPiA+ICsgICAgLnAuY2hfbGF5b3V0cyA9IChjb25zdCBBVkNoYW5uZWxM YXlvdXRbXSkKPiA+ICsgICAgICAgIHsgeyBBVl9DSEFOTkVMX09SREVSX1VOU1BFQywgMSB9LAo+ ID4gKyAgICAgICAgICB7IEFWX0NIQU5ORUxfT1JERVJfVU5TUEVDLCAyIH0sIHsgMCB9IH0sCj4g PiArICAgIC5wLnN1cHBvcnRlZF9zYW1wbGVyYXRlcyA9IChjb25zdCBpbnQgW10pCj4gPiArICAg ICAgICB7IDk2MDAwLCA0ODAwMCwgMzIwMDAsIDI0MDAwLCAxNjAwMCwgODAwMCwgMCB9LAo+ID4g KyAgICAucC5zYW1wbGVfZm10cyA9IChjb25zdCBlbnVtIEFWU2FtcGxlRm9ybWF0W10pCj4gPiAr ICAgICAgICB7IEFWX1NBTVBMRV9GTVRfRkxUUCwgQVZfU0FNUExFX0ZNVF9OT05FIH0sCj4gPiAr ICAgIC5wLnByaXZfY2xhc3MgICA9ICZjbGFzcywKPiA+ICsgICAgLnAud3JhcHBlcl9uYW1lID0g ImxpYmxjMyIsCj4gPiArICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihMaWJMQzNFbmNDb250 ZXh0KSwKPiA+ICsgICAgLmluaXQgICAgICAgICAgID0gbGlibGMzX2VuY29kZV9pbml0LAo+ID4g KyAgICAuY2xvc2UgICAgICAgICAgPSBsaWJsYzNfZW5jb2RlX2Nsb3NlLAo+ID4gKyAgICBGRl9D T0RFQ19FTkNPREVfQ0IobGlibGMzX2VuY29kZSksCj4gPiArfTsKPgo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcg bGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxt YW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3Vi amVjdCAidW5zdWJzY3JpYmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBl Zy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpU byB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K