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 EB45F480A7 for ; Thu, 9 May 2024 12:20:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 310DA68D549; Thu, 9 May 2024 15:20:12 +0300 (EEST) Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E26A68D510 for ; Thu, 9 May 2024 15:20:05 +0300 (EEST) Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-51f12ccff5eso1052928e87.1 for ; Thu, 09 May 2024 05:20:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715257204; x=1715862004; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=vjQFbyeykjmbp4psGqT8RxM6GP6omGUDsVVNPhyFujA=; b=emV98YvxRaj9hgxeijPVnjKO8srm1XGedJD84Iz174h6Ez/Sy7uSqALrtAZL15tdvP H79T0e0BpMhPf5Q/XlNJaAX6PeY2HGdnU7bAkrb/Y2wwkq51Ueo+D78zviUetfz7DgH9 lE3JvPtKb5rMdqTranosQ602GdtuUFmjMsyzUregtSo7UwI0FqRg+Y54BEhSLfSGFULU IbQzhjzpltwjp55Ryoo1+/EDwT3CeYuK9tf53b0rqpfKrCo/NIBMp4g+QymQYRnQrtZY pM4okczR2tsI6DamTbNobUUNZTi8lFdQsW70+WbO0LFR3Q4ZpgwLghe1D8HppQuQvNNo S4MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715257204; x=1715862004; 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=vjQFbyeykjmbp4psGqT8RxM6GP6omGUDsVVNPhyFujA=; b=YTVkiDHW3VJgJtjJFbknuw2Nrm93kw/P9JVhiwMQ4nxX1WeH5lY0KVkuu7nODsBvs0 ZYrpBCD1ChIZVMCRHDEf24u6XPpqRHmvteP3EZGyrH5iAPp2SmtXJ8T/36e8uc2zWMd3 nmbVzE3joDc4VbL5WHNeWihB2mNMdXc3u4JzM94432L8I4MVQ4rU4/TQeN6HlK8vGi5F n1qVrY2/1uGQJwMK7GtJ6X7YgI4coUzAAOhSRAhu1G8sNP7SRxDZotdB0kyvV06mkfiz hSTDf1sCbm6J84xe0SwFflUDJJag0OpaIgdmDbRvuqrXezA4oWzRH486TEw5q+3t/95U LNDQ== X-Gm-Message-State: AOJu0YwuHIvZDLlqAO2iNNpVHY25UTvaW8HZFcbLotWgXQ2IZGhg89hZ 8uyMwRC6n/e+xSpK9u/8v1APB93zquAn/fzQLYbyIFNartnHs6vkSGeT0RXpvYk7aX7BCnwNDeU 8VCgD62h8KTMr+ALTxjW6v0sV/swkFWAA X-Google-Smtp-Source: AGHT+IHc833bsodmRckVsJCanKbik111UbBBYpRGjQkJ8hXGu7YHEdMx948DWT6YzoL5FlBBMgcKrmeZq8kK4J/z7wU= X-Received: by 2002:a05:6512:6c:b0:521:cee5:db3d with SMTP id 2adb3069b0e04-521cee5dcfbmr2398053e87.50.1715257203329; Thu, 09 May 2024 05:20:03 -0700 (PDT) MIME-Version: 1.0 References: <20240506170319.43685-1-chris10317h5@gmail.com> <20240506170319.43685-2-chris10317h5@gmail.com> <636EA1AB-0195-4505-8980-594045F47AB1@gmail.com> In-Reply-To: <636EA1AB-0195-4505-8980-594045F47AB1@gmail.com> From: Nuo Mi Date: Thu, 9 May 2024 20:19:51 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] avcodec: add external enc libvvenc for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches 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: T24gVHVlLCBNYXkgNywgMjAyNCBhdCA5OjUz4oCvUE0gQ2hyaXN0aWFuIDxjaHJpczEwMzE3aDVA Z21haWwuY29tPiB3cm90ZToKCj4KPiA+IE9uIDcuIE1heSAyMDI0LCBhdCAwMzo1MywgTnVvIE1p IDxudW9taTIwMjFAZ21haWwuY29tPiB3cm90ZToKPiA+Cj4gPiBIaSBDaHJpc3RpYW4sCj4gPiBU aGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KPiA+IExldCB1cyByZXZpZXcgYW5kIG1lcmdlIHRoZSBl bmNvZGVyIHBhcnQuCj4gPgo+ID4gT24gVHVlLCBNYXkgNywgMjAyNCBhdCAxOjA14oCvQU0gQ2hy aXN0aWFuIEJhcnRuaWsgPGNocmlzMTAzMTdoNUBnbWFpbC5jb20KPiA8bWFpbHRvOmNocmlzMTAz MTdoNUBnbWFpbC5jb20+Pgo+ID4gd3JvdGU6Cj4gPgo+ID4+IEZyb206IFRob21hcyBTaWVkZWwg PHRob21hcy5mZkBzcGluLWRpZ2l0YWwuY29tPgo+ID4+Cj4gPj4gQWRkIGV4dGVybmFsIGVuY29k ZXIgVlZlbkMgZm9yIEgyNjYvVlZDIGVuY29kaW5nLgo+ID4+IFJlZ2lzdGVyIG5ldyBlbmNvZGVy IGxpYnZ2ZW5jLgo+ID4+IEFkZCBsaWJ2dmVuYyB0byB3cmFwIHRoZSB2dmVuYyBpbnRlcmZhY2Uu Cj4gPj4gbGlidnZlbmMgaW1wbGVtZW50cyBlbmNvZGVyIG9wdGlvbjogcHJlc2V0LHFwLHBlcmlv ZCxzdWJqb3B0LAo+ID4+IHZ2ZW5jLXBhcmFtcyxsZXZlbGlkYyx0aWVyLgo+ID4+IEVuYWJsZSBl bmNvZGVyIGJ5IGFkZGluZyAtLWVuYWJsZS1saWJ2dmVuYyBpbiBjb25maWd1cmUgc3RlcC4KPiA+ Pgo+ID4+IENvLWF1dGhvcmVkLWJ5OiBDaHJpc3RpYW4gQmFydG5payBjaHJpczEwMzE3aDVAZ21h aWwuY29tCj4gPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEJhcnRuaWsgPGNocmlzMTAzMTdo NUBnbWFpbC5jb20+Cj4gPj4gLS0tCj4gPj4gY29uZmlndXJlICAgICAgICAgICAgICB8ICAgNCAr Cj4gPj4gbGliYXZjb2RlYy9NYWtlZmlsZSAgICB8ICAgMSArCj4gPj4gbGliYXZjb2RlYy9hbGxj b2RlY3MuYyB8ICAgMSArCj4gPj4gbGliYXZjb2RlYy9saWJ2dmVuYy5jICB8IDUwMSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4+IDQgZmlsZXMgY2hhbmdlZCwg NTA3IGluc2VydGlvbnMoKykKPiA+PiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ2 dmVuYy5jCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gPj4g aW5kZXggZWQ3NDU4M2E2Zi4uY2IzMTJkOWM3MyAxMDA3NTUKPiA+PiAtLS0gYS9jb25maWd1cmUK PiA+PiArKysgYi9jb25maWd1cmUKPiA+PiBAQCAtMjkzLDYgKzI5Myw3IEBAIEV4dGVybmFsIGxp YnJhcnkgc3VwcG9ydDoKPiA+PiAgIC0tZW5hYmxlLWxpYnZvcmJpcyAgICAgICBlbmFibGUgVm9y YmlzIGVuL2RlY29kaW5nIHZpYSBsaWJ2b3JiaXMsCj4gPj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmF0aXZlIGltcGxlbWVudGF0aW9uIGV4aXN0cyBbbm9dCj4gPj4gICAtLWVuYWJsZS1s aWJ2cHggICAgICAgICAgZW5hYmxlIFZQOCBhbmQgVlA5IGRlL2VuY29kaW5nIHZpYSBsaWJ2cHgK PiBbbm9dCj4gPj4gKyAgLS1lbmFibGUtbGlidnZlbmMgICAgICAgIGVuYWJsZSBILjI2Ni9WVkMg ZW5jb2RpbmcgdmlhIHZ2ZW5jIFtub10KPiA+PiAgIC0tZW5hYmxlLWxpYndlYnAgICAgICAgICBl bmFibGUgV2ViUCBlbmNvZGluZyB2aWEgbGlid2VicCBbbm9dCj4gPj4gICAtLWVuYWJsZS1saWJ4 MjY0ICAgICAgICAgZW5hYmxlIEguMjY0IGVuY29kaW5nIHZpYSB4MjY0IFtub10KPiA+PiAgIC0t ZW5hYmxlLWxpYngyNjUgICAgICAgICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9d Cj4gPj4gQEAgLTE5NjYsNiArMTk2Nyw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCj4gPj4g ICAgIGxpYnZtYWYKPiA+PiAgICAgbGlidm9yYmlzCj4gPj4gICAgIGxpYnZweAo+ID4+ICsgICAg bGlidnZlbmMKPiA+PiAgICAgbGlid2VicAo+ID4+ICAgICBsaWJ4ZXZkCj4gPj4gICAgIGxpYnhl dmUKPiA+PiBAQCAtMzU0OCw2ICszNTUwLDcgQEAgbGlidnB4X3ZwOF9kZWNvZGVyX2RlcHM9Imxp YnZweCIKPiA+PiBsaWJ2cHhfdnA4X2VuY29kZXJfZGVwcz0ibGlidnB4Igo+ID4+IGxpYnZweF92 cDlfZGVjb2Rlcl9kZXBzPSJsaWJ2cHgiCj4gPj4gbGlidnB4X3ZwOV9lbmNvZGVyX2RlcHM9Imxp YnZweCIKPiA+PiArbGlidnZlbmNfZW5jb2Rlcl9kZXBzPSJsaWJ2dmVuYyIKPiA+PiBsaWJ3ZWJw X2VuY29kZXJfZGVwcz0ibGlid2VicCIKPiA+PiBsaWJ3ZWJwX2FuaW1fZW5jb2Rlcl9kZXBzPSJs aWJ3ZWJwIgo+ID4+IGxpYngyNjJfZW5jb2Rlcl9kZXBzPSJsaWJ4MjYyIgo+ID4+IEBAIC03MDEw LDYgKzcwMTMsNyBAQCBlbmFibGVkIGxpYnZweCAgICAgICAgICAgICYmIHsKPiA+PiAgICAgICAg IGRpZSAibGlidnB4IGVuYWJsZWQgYnV0IG5vIHN1cHBvcnRlZCBkZWNvZGVycyBmb3VuZCIKPiA+ PiAgICAgZmkKPiA+PiB9Cj4gPj4gK2VuYWJsZWQgbGlidnZlbmMgICAgICAgICAgJiYgcmVxdWly ZV9wa2dfY29uZmlnIGxpYnZ2ZW5jICJsaWJ2dmVuYyA+PQo+ID4+IDEuNi4xIiAidnZlbmMvdnZl bmMuaCIgdnZlbmNfZ2V0X3ZlcnNpb24KPiA+Pgo+ID4+IGVuYWJsZWQgbGlid2VicCAgICAgICAg ICAgJiYgewo+ID4+ICAgICBlbmFibGVkIGxpYndlYnBfZW5jb2RlciAgICAgICYmIHJlcXVpcmVf cGtnX2NvbmZpZyBsaWJ3ZWJwICJsaWJ3ZWJwCj4gPj4+ID0gMC4yLjAiIHdlYnAvZW5jb2RlLmgg V2ViUEdldEVuY29kZXJWZXJzaW9uCj4gPj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZp bGUgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gPj4gaW5kZXggY2ZmNjM0N2JkYi4uNTRkODVmNmFh YSAxMDA2NDQKPiA+PiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCj4gPj4gKysrIGIvbGliYXZj b2RlYy9NYWtlZmlsZQo+ID4+IEBAIC0xMTU1LDYgKzExNTUsNyBAQCBPQkpTLSQoQ09ORklHX0xJ QlZQWF9WUDhfREVDT0RFUikgICAgICAgICArPQo+ID4+IGxpYnZweGRlYy5vCj4gPj4gT0JKUy0k KENPTkZJR19MSUJWUFhfVlA4X0VOQ09ERVIpICAgICAgICAgKz0gbGlidnB4ZW5jLm8KPiA+PiBP QkpTLSQoQ09ORklHX0xJQlZQWF9WUDlfREVDT0RFUikgICAgICAgICArPSBsaWJ2cHhkZWMubwo+ ID4+IE9CSlMtJChDT05GSUdfTElCVlBYX1ZQOV9FTkNPREVSKSAgICAgICAgICs9IGxpYnZweGVu Yy5vCj4gPj4gK09CSlMtJChDT05GSUdfTElCVlZFTkNfRU5DT0RFUikgICAgICAgICAgICs9IGxp YnZ2ZW5jLm8KPiA+PiBPQkpTLSQoQ09ORklHX0xJQldFQlBfRU5DT0RFUikgICAgICAgICAgICAr PSBsaWJ3ZWJwZW5jX2NvbW1vbi5vCj4gPj4gbGlid2VicGVuYy5vCj4gPj4gT0JKUy0kKENPTkZJ R19MSUJXRUJQX0FOSU1fRU5DT0RFUikgICAgICAgKz0gbGlid2VicGVuY19jb21tb24ubwo+ID4+ IGxpYndlYnBlbmNfYW5pbWVuY29kZXIubwo+ID4+IE9CSlMtJChDT05GSUdfTElCWDI2Ml9FTkNP REVSKSAgICAgICAgICAgICs9IGxpYngyNjQubwo+ID4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVj L2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ID4+IGluZGV4IGY0NzA1NjUx ZmIuLmJiMmMzY2UwMTcgMTAwNjQ0Cj4gPj4gLS0tIGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ ID4+ICsrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPiA+PiBAQCAtODAxLDYgKzgwMSw3IEBA IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnZweF92cDhfZW5jb2RlcjsKPiA+PiBleHRlcm4g Y29uc3QgRkZDb2RlYyBmZl9saWJ2cHhfdnA4X2RlY29kZXI7Cj4gPj4gZXh0ZXJuIEZGQ29kZWMg ZmZfbGlidnB4X3ZwOV9lbmNvZGVyOwo+ID4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnZw eF92cDlfZGVjb2RlcjsKPiA+PiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnZlbmNfZW5j b2RlcjsKPiA+PiAvKiBwcmVmZXJyZWQgb3ZlciBsaWJ3ZWJwICovCj4gPj4gZXh0ZXJuIGNvbnN0 IEZGQ29kZWMgZmZfbGlid2VicF9hbmltX2VuY29kZXI7Cj4gPj4gZXh0ZXJuIGNvbnN0IEZGQ29k ZWMgZmZfbGlid2VicF9lbmNvZGVyOwo+ID4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xpYnZ2 ZW5jLmMgYi9saWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ ID4+IGluZGV4IDAwMDAwMDAwMDAuLmM0NTkyNzNmNDQKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4g KysrIGIvbGliYXZjb2RlYy9saWJ2dmVuYy5jCj4gPj4gQEAgLTAsMCArMSw1MDEgQEAKPiA+PiAr LyoKPiA+PiArICogSC4yNjYgZW5jb2RpbmcgdXNpbmcgdGhlIFZWZW5DIGxpYnJhcnkKPiA+PiAr ICoKPiA+PiArICogQ29weXJpZ2h0IChDKSAyMDIyLCBUaG9tYXMgU2llZGVsCj4gPj4gKyAqCj4g Pj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiA+PiArICoKPiA+PiArICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4+ ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCj4gPj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgo+ID4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiA+PiArICoKPiA+PiArICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Cj4gPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCj4gPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gPj4gKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPj4gKyAqCj4gPj4gKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKPiA+PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQo+ID4+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCj4gPj4gMDIxMTAtMTMwMSBVU0EKPiA+PiAr ICovCj4gPj4gKwo+ID4+ICsjaW5jbHVkZSAiY29uZmlnX2NvbXBvbmVudHMuaCIKPiA+PiArCj4g Pj4gKyNpbmNsdWRlIDx2dmVuYy92dmVuYy5oPgo+ID4+ICsjaW5jbHVkZSA8dnZlbmMvdnZlbmND ZmcuaD4KPiA+PiArI2luY2x1ZGUgPHZ2ZW5jL3ZlcnNpb24uaD4KPiA+PiArCj4gPj4gKyNpbmNs dWRlICJhdmNvZGVjLmgiCj4gPj4gKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIgo+ID4+ICsj aW5jbHVkZSAiZW5jb2RlLmgiCj4gPj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ID4+ICsjaW5j bHVkZSAicGFja2V0X2ludGVybmFsLmgiCj4gPj4gKyNpbmNsdWRlICJwcm9maWxlcy5oIgo+ID4+ ICsKPiA+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnV0aWwuaCIKPiA+PiArI2luY2x1ZGUgImxp YmF2dXRpbC9tZW0uaCIKPiA+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9waXhkZXNjLmgiCj4gPj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4gPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29t bW9uLmgiCj4gPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCIKPiA+PiArI2luY2x1 ZGUgImxpYmF2dXRpbC9mcmFtZS5oIgo+ID4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgo+ ID4+ICsKPiA+PiArdHlwZWRlZiBzdHJ1Y3QgVlZlbkNPcHRpb25zIHsKPiA+PiArICAgIGludCBw cmVzZXQ7ICAgICAgICAgICAgICAgICAvLyBwcmVzZXQgMDogZmFzdGVyICA0OiBzbG93ZXIKPiA+ PiArICAgIGludCBxcDsgICAgICAgICAgICAgICAgICAgICAvLyBxdWFudGl6YXRpb24gcGFyYW1l dGVyIDAtNjMKPiA+PiArICAgIGludCBzdWJqZWN0aXZlT3B0aW1pemF0aW9uOyAvLyBwZXJjZXB0 dWFsbHkgbW90aXZhdGVkIFFQCj4gYWRhcHRhdGlvbiwKPiA+PiBYUFNOUiBiYXNlZAo+ID4+ICsg ICAgaW50IGZsYWc4Yml0Q29kaW5nOyAgICAgICAgIC8vIGVuY29kZSBpbiA4Yml0IGluc3RlYWQg b2YgMTBiaXQKPiA+PiArICAgIGludCBpbnRyYVJlZnJlc2hTZWM7ICAgICAgICAvLyBpbnRyYSBw ZXJpb2QvcmVmcmVzaCBpbiBzZWNvbmRzCj4gPj4gKyAgICBpbnQgbGV2ZWxJZGM7ICAgICAgICAg ICAgICAgLy8gdnZjIGxldmVsX2lkYwo+ID4+ICsgICAgaW50IHRpZXI7ICAgICAgICAgICAgICAg ICAgIC8vIHZ2YyB0aWVyCj4gPj4gKyAgICBBVkRpY3Rpb25hcnkgKnZ2ZW5jX29wdHM7Cj4gPj4g K30gVlZlbkNPcHRpb25zOwo+ID4+ICsKPiA+PiArdHlwZWRlZiBzdHJ1Y3QgVlZlbkNDb250ZXh0 IHsKPiA+PiArICAgIEFWQ2xhc3MgICAgICAgICAqYXZfY2xhc3M7Cj4gPj4gKyAgICBWVmVuQ09w dGlvbnMgICAgb3B0aW9uczsgICAgICAvLyBlbmNvZGVyIG9wdGlvbnMKPiA+PiArICAgIHZ2ZW5j RW5jb2RlciAgICAqdnZlbmNFbmM7Cj4gPj4gKyAgICB2dmVuY0FjY2Vzc1VuaXQgKnBBVTsKPiA+ PiArICAgIGJvb2wgICAgICAgICAgICBlbmNvZGVEb25lOwo+ID4+ICt9IFZWZW5DQ29udGV4dDsK PiA+PiArCj4gPj4gKwo+ID4+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGZmX3Z2ZW5jX2xvZ19jYWxs YmFjayh2b2lkICphdmN0eCwgaW50IGxldmVsLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QKPiBhcmdzKQo+ID4+ ICt7Cj4gPj4gKyAgICB2ZnByaW50ZihsZXZlbCA9PSAxID8gc3RkZXJyIDogc3Rkb3V0LCBmbXQs IGFyZ3MpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBmZl92dmVuY19pbnRlcm5h bExvZyh2b2lkICpjdHgsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LAo+ID4+IC4uLikKPiA+ PiArewo+ID4+ICsgICAgdmFfbGlzdCBhcmdzOwo+ID4+ICsgICAgdmFfc3RhcnQoYXJncywgZm10 KTsKPiA+PiArICAgIGZmX3Z2ZW5jX2xvZ19jYWxsYmFjayhjdHgsIGxldmVsLCBmbXQsIGFyZ3Mp Owo+ID4+ICsgICAgdmFfZW5kKGFyZ3MpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+Cj4gPiB0aGlzIGlz IGEgdmVyeSBsYXJnZSBmdW5jdGlvbiwgbWl4ZWQgbWFueSB0aGluZ3MKPiA+IEhvdyBhYm91dCB3 ZSBicmVhayBpdCBpbnRvIHNtYWxsZXIgb25lKDwgNDAgbGluZXMpCj4gPiBmb3IgZXhhbXBsZToK PiA+IHNldCBsb2cgY2FsbGJhY2ssIHNldCBleHRyYSBkYXRhLnNldCBjb2xvciBmb3JtYXQsIHNl dCB2dmVuYyBwYXJhbXMuLi4KPgo+IFRoYW5rcyBmb3IgdGhlIGZlZWRiYWNrLiBJIHdpbGwgc3Bs aXQgdGhlIGluaXQgZnVuY3Rpb24uCj4KPgo+ID4+ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZl bmNfZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ID4+ICt7Cj4gPj4gKyAgICBp bnQgcmV0Owo+ID4+ICsgICAgaW50IGZyYW1lcmF0ZSwgcXAsIHBhcnNlX3JldDsKPiA+PiArICAg IFZWZW5DQ29udGV4dCAqczsKPiA+PiArICAgIHZ2ZW5jX2NvbmZpZyBwYXJhbXM7Cj4gPj4gKyAg ICB2dmVuY1ByZXNldE1vZGUgcHJlc2V0Owo+ID4+ICsgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmVu Owo+ID4+ICsgICAgY2hhciBzdGF0c2ZpbGVbMTAyNF0gPSAidnZlbmMtcmNzdGF0cy5qc29uIjsK PiA+PiArCj4gPj4gKyAgICBzID0gKFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+ ID4+ICsgICAgcXAgPSAodnZlbmNQcmVzZXRNb2RlKSBzLT5vcHRpb25zLnFwOwo+ID4+Cj4gPiB0 eXBvIGZvciB2dmVuY1ByZXNldE1vZGU/Cj4gPgo+Cj4gdGhhbmtzLCB0aGF0wrRzIGEgdHlwby4g SSB3aWxsIGZpeCBpdC4KPgo+Cj4gPj4gKyAgICBwcmVzZXQgPSAodnZlbmNQcmVzZXRNb2RlKSBz LT5vcHRpb25zLnByZXNldDsKPiA+PiArCj4gPj4gKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZf Q09ERUNfRkxBR19JTlRFUkxBQ0VEX0RDVCkgewo+ID4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLAo+ID4+ICsgICAgICAgICAgICAgICAiZmZfdnZlbmNfZW5jb2RlX2luaXQ6 OmluaXQoKSBpbnRlcmxhY2VkIGVuY29kaW5nIG5vdAo+ID4+IHN1cHBvcnRlZCB5ZXRcbiIpOwo+ ID4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ID4+ICsgICAgfQo+ID4+ ICsKPiA+PiArICAgIHZ2ZW5jX2NvbmZpZ19kZWZhdWx0KCZwYXJhbXMpOwo+ID4+ICsKPiA+PiAr ICAgIC8vIHNldCBkZXNpcmVkIGVuY29kaW5nIG9wdGlvbnMKPiA+PiArICAgIGZyYW1lcmF0ZSA9 IGF2Y3R4LT50aW1lX2Jhc2UuZGVuIC8gYXZjdHgtPnRpbWVfYmFzZS5udW07Cj4gPj4gKyAgICB2 dmVuY19pbml0X2RlZmF1bHQoJnBhcmFtcywgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBm cmFtZXJhdGUsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgKHFwID49IDApID8gMCA6IGF2 Y3R4LT5iaXRfcmF0ZSwgKHFwIDwgMCkgPyAzMiA6Cj4gPj4gcXAsIHByZXNldCk7Cj4gPj4gKyAg ICBwYXJhbXMubV9GcmFtZVJhdGUgPSBhdmN0eC0+dGltZV9iYXNlLmRlbjsKPiA+PiArICAgIHBh cmFtcy5tX0ZyYW1lU2NhbGUgPSBhdmN0eC0+dGltZV9iYXNlLm51bTsKPiA+PiArCj4gPj4gKyAg ICBwYXJhbXMubV92ZXJib3NpdHkgPSBWVkVOQ19WRVJCT1NFOwo+ID4+ICsgICAgaWYgKGF2X2xv Z19nZXRfbGV2ZWwoKSA+PSBBVl9MT0dfREVCVUcpCj4gPj4gKyAgICAgICAgcGFyYW1zLm1fdmVy Ym9zaXR5ID0gVlZFTkNfREVUQUlMUzsKPiA+PiArICAgIGVsc2UgaWYgKGF2X2xvZ19nZXRfbGV2 ZWwoKSA+PSBBVl9MT0dfVkVSQk9TRSkKPiA+PiArICAgICAgICBwYXJhbXMubV92ZXJib3NpdHkg PSBWVkVOQ19OT1RJQ0U7ICAgICAgLy8gb3V0cHV0IHBlciBwaWN0dXJlCj4gaW5mbwo+ID4+ICsg ICAgZWxzZSBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19JTkZPKQo+ID4+ICsgICAg ICAgIHBhcmFtcy5tX3ZlcmJvc2l0eSA9IFZWRU5DX1dBUk5JTkc7ICAgICAvLyBmZm1wZWcgZGVm YXVsdAo+IGZmbXBlZwo+ID4+IGxvZ2xldmVsCj4gPj4gKyAgICBlbHNlCj4gPj4gKyAgICAgICAg cGFyYW1zLm1fdmVyYm9zaXR5ID0gVlZFTkNfU0lMRU5UOwo+ID4KPiA+IHdlIHNldCBtX3ZlcmJv c2l0eSBoZXJlIGFuZAo+ID4KPiA+Pgo+Cj4gU29ycnksIGJ1dCBJIGRvbsK0dCBnZXQgd2hhdCB5 b3Ugd2FudCB0byBzYXkgaGVyZT8KPgpXZSBzZXQgbV92ZXJib3NpdHkgaGVyZSBhbmQgcmVhZCBp dCBsYXRlci4sIG1heWJlIHdlIGNhbiBwdXQgdGhlbSBpbiBvbmUKZnVuY3Rpb24uClRoYW5rIHlv dQoKPgo+Cj4gPgo+ID4gKwo+ID4+ICtGRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCj4g Pj4gKwo+ID4+ICsjaWYgRkZfQVBJX1RJQ0tTX1BFUl9GUkFNRQo+ID4+ICsgICAgaWYgKGF2Y3R4 LT50aWNrc19wZXJfZnJhbWUgPT0gMSkgewo+ID4+ICsjZW5kaWYKPiA+PiArICAgICAgICBwYXJh bXMubV9UaWNrc1BlclNlY29uZCA9IC0xOyAgIC8vIGF1dG8gbW9kZSBmb3IgdGlja3MgcGVyCj4g ZnJhbWUKPiA+PiA9IDEKPiA+PiArI2lmIEZGX0FQSV9USUNLU19QRVJfRlJBTUUKPiA+PiArICAg IH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgcGFyYW1zLm1fVGlja3NQZXJTZWNvbmQgPQo+ID4+ICsg ICAgICAgICAgICBjZWlsKChhdmN0eC0+dGltZV9iYXNlLmRlbiAvIChkb3VibGUpCj4gYXZjdHgt PnRpbWVfYmFzZS5udW0pICoKPiA+PiArICAgICAgICAgICAgICAgICAoZG91YmxlKSBhdmN0eC0+ dGlja3NfcGVyX2ZyYW1lKTsKPiA+PiArICAgIH0KPiA+PiArI2VuZGlmCj4gPj4gK0ZGX0VOQUJM RV9ERVBSRUNBVElPTl9XQVJOSU5HUwo+ID4+ICsKPiA+PiArICAgIGlmIChhdmN0eC0+dGhyZWFk X2NvdW50ID4gMCkKPiA+PiArICAgICAgICBwYXJhbXMubV9udW1UaHJlYWRzID0gYXZjdHgtPnRo cmVhZF9jb3VudDsKPiA+PiArCj4gPj4gKyAgICAvLyBHT1Agc2V0dGluZ3MgKElEUi9DUkEpCj4g Pj4gKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19DTE9TRURfR09QKQo+ID4+ ICsgICAgICAgIHBhcmFtcy5tX0RlY29kaW5nUmVmcmVzaFR5cGUgPSBWVkVOQ19EUlRfSURSOwo+ ID4+ICsKPiA+PiArICAgIGlmIChhdmN0eC0+Z29wX3NpemUgPT0gMSkgewo+ID4+ICsgICAgICAg IHBhcmFtcy5tX0dPUFNpemUgPSAxOwo+ID4+ICsgICAgICAgIHBhcmFtcy5tX0ludHJhUGVyaW9k ID0gMTsKPiA+PiArICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgcGFyYW1zLm1fSW50cmFQZXJp b2RTZWMgPSBzLT5vcHRpb25zLmludHJhUmVmcmVzaFNlYzsKPiA+PiArICAgIH0KPiA+PiArCj4g Pj4gKyAgICBwYXJhbXMubV91c2VQZXJjZXB0UVBBID0gcy0+b3B0aW9ucy5zdWJqZWN0aXZlT3B0 aW1pemF0aW9uOwo+ID4+ICsgICAgcGFyYW1zLm1fbGV2ZWwgICAgICAgICA9ICh2dmVuY0xldmVs KSBzLT5vcHRpb25zLmxldmVsSWRjOwo+ID4+ICsgICAgcGFyYW1zLm1fbGV2ZWxUaWVyICAgICA9 ICh2dmVuY1RpZXIpIHMtPm9wdGlvbnMudGllcjsKPiA+PiArCj4gPj4gKyAgICBwYXJhbXMubV9B Y2Nlc3NVbml0RGVsaW1pdGVyID0gdHJ1ZTsKPiA+PiArCj4gPj4gKyAgICBwYXJhbXMubV9pbnRl cm5DaHJvbWFGb3JtYXQgPSBWVkVOQ19DSFJPTUFfNDIwOwo+ID4+ICsgICAgcGFyYW1zLm1faW5w dXRCaXREZXB0aFswXSAgID0gMTA7Cj4gPj4gKwo+ID4+ICsgICAgaWYgKCBhdmN0eC0+cGl4X2Zt dCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFICl7Cj4gPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsCj4gPj4gKyAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBwaXhlbCBm b3JtYXQgJXMsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgZm9yCj4gPj4geXV2NDIwcDEwbGVcbiIs Cj4gPj4gKyAgICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10 KSk7Cj4gPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+PiArICAgIH0KPiA+ PiArCj4gPj4gKyAgICBpZiAoIHMtPm9wdGlvbnMuZmxhZzhiaXRDb2RpbmcgKSB7Cj4gPj4gKyNp ZiBWVkVOQ19WRVJTSU9OX01BSk9SID4gMSB8fCAoVlZFTkNfVkVSU0lPTl9NQUpPUiA9PSAxICYm Cj4gPj4gVlZFTkNfVkVSU0lPTl9NSU5PUiA+IDkpIHx8IChWVkVOQ19WRVJTSU9OX01BSk9SID09 IDEgJiYKPiA+PiBWVkVOQ19WRVJTSU9OX01JTk9SID49IDkgJiYgVlZFTkNfVkVSU0lPTl9QQVRD SCA+PSAxKQo+ID4+ICsgICAgICAgIHBhcmFtcy5tX2ludGVybmFsQml0RGVwdGhbMF0gPSA4Owo+ ID4+ICsjZWxzZQo+ID4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ID4+ ICsgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIDhiaXQgY29kaW5nIG1vZGUuIDhiaXQgY29k aW5nIG5lZWRzIGF0Cj4gbGVhc3QKPiA+PiB2dmVuYyB2ZXJzaW9uID49IDEuOS4xXG4iLAo+ID4+ ICsgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2ZtdCkpOwo+ ID4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4gKyNlbmRpZgo+ID4+ICsg ICAgfQo+ID4+ICsKPiA+PiArICAgIGlmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09M X1BSSV9VTlNQRUNJRklFRCkKPiA+PiArICAgICAgICBwYXJhbXMubV9jb2xvdXJQcmltYXJpZXMg PSAoaW50KSBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzOwo+ID4+ICsgICAgaWYgKGF2Y3R4LT5jb2xv cnNwYWNlICE9IEFWQ09MX1NQQ19VTlNQRUNJRklFRCkKPiA+PiArICAgICAgICBwYXJhbXMubV9t YXRyaXhDb2VmZmljaWVudHMgPSAoaW50KSBhdmN0eC0+Y29sb3JzcGFjZTsKPiA+PiArICAgIGlm IChhdmN0eC0+Y29sb3JfdHJjICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCkgewo+ID4+ICsgICAg ICAgIHBhcmFtcy5tX3RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gKGludCkgYXZjdHgtPmNvbG9y X3RyYzsKPiA+PiArCj4gPj4gKyAgICAgICAgaWYgKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xf VFJDX1NNUFRFMjA4NCkKPiA+PiArICAgICAgICAgICAgcGFyYW1zLm1fSGRyTW9kZSA9IChhdmN0 eC0+Y29sb3JfcHJpbWFyaWVzID09Cj4gPj4gQVZDT0xfUFJJX0JUMjAyMCkgPwo+ID4+ICsgICAg ICAgICAgICAgICAgVlZFTkNfSERSX1BRX0JUMjAyMCA6IFZWRU5DX0hEUl9QUTsKPiA+PiArICAg ICAgICBlbHNlIGlmIChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19CVDIwMjBfMTAKPiA+ PiArICAgICAgICAgICAgICAgICB8fCBhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19BUklC X1NURF9CNjcpCj4gPj4gKyAgICAgICAgICAgIHBhcmFtcy5tX0hkck1vZGUgPSAoYXZjdHgtPmNv bG9yX3RyYyA9PQo+IEFWQ09MX1RSQ19CVDIwMjBfMTAgfHwKPiA+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID09Cj4gPj4gQVZDT0xfUFJJ X0JUMjAyMCB8fAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5j b2xvcnNwYWNlID09Cj4gQVZDT0xfU1BDX0JUMjAyMF9OQ0wKPiA+PiB8fAo+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2xvcnNwYWNlID09Cj4gQVZDT0xfU1BD X0JUMjAyMF9DTCkKPiA+PiA/Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW VkVOQ19IRFJfSExHX0JUMjAyMCA6IFZWRU5DX0hEUl9ITEc7Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ ID4+ICsgICAgaWYgKHBhcmFtcy5tX0hkck1vZGUgPT0gVlZFTkNfSERSX09GRgo+ID4+ICsgICAg ICAgICYmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRAo+ ID4+ICsgICAgICAgICAgICB8fCBhdmN0eC0+Y29sb3JzcGFjZSAhPSBBVkNPTF9TUENfVU5TUEVD SUZJRUQpKSB7Cj4gPj4gKyAgICAgICAgcGFyYW1zLm1fdnVpUGFyYW1ldGVyc1ByZXNlbnQgPSAx Owo+ID4+ICsgICAgICAgIHBhcmFtcy5tX2NvbG91ckRlc2NyaXB0aW9uUHJlc2VudCA9IHRydWU7 Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgcGFyYW1zLm1fUkNOdW1QYXNzZXMgPSAxOwo+ ID4+ICsgICAgZW4gPSBOVUxMOwo+ID4+ICsgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfZ2V0KHMt Pm9wdGlvbnMudnZlbmNfb3B0cywgIiIsIGVuLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4gPj4gKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJ2dmVuY19zZXRfcGFyYW06ICclczolcydcbiIsCj4gZW4tPmtl eSwKPiA+PiArICAgICAgICAgICAgICAgZW4tPnZhbHVlKTsKPiA+PiArICAgICAgICBwYXJzZV9y ZXQgPSB2dmVuY19zZXRfcGFyYW0oJnBhcmFtcywgZW4tPmtleSwgZW4tPnZhbHVlKTsKPiA+PiAr ICAgICAgICBzd2l0Y2ggKHBhcnNlX3JldCkgewo+ID4+ICsgICAgICAgIGNhc2UgVlZFTkNfUEFS QU1fQkFEX05BTUU6Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5J TkcsICJVbmtub3duIHZ2ZW5jIG9wdGlvbjoKPiAlcy5cbiIsCj4gPj4gKyAgICAgICAgICAgICAg ICAgICBlbi0+a2V5KTsKPiA+PiArICAgICAgICAgICAgYnJlYWs7Cj4gPj4gKyAgICAgICAgY2Fz ZSBWVkVOQ19QQVJBTV9CQURfVkFMVUU6Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB2dmVuYyB2 YWx1ZSBmb3IgJXM6ICVzLlxuIiwgZW4tPmtleSwKPiA+PiBlbi0+dmFsdWUpOwo+ID4+ICsgICAg ICAgICAgICBicmVhazsKPiA+PiArICAgICAgICBkZWZhdWx0Ogo+ID4+ICsgICAgICAgICAgICBi cmVhazsKPiA+PiArICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgICAgIGlmIChtZW1jbXAoZW4t PmtleSwgInJjc3RhdHNmaWxlIiwgMTEpID09IDAgfHwKPiA+PiArICAgICAgICAgICAgbWVtY21w KGVuLT5rZXksICJSQ1N0YXRzRmlsZSIsIDExKSA9PSAwKSB7Cj4gPj4gKyAgICAgICAgICAgIHN0 cm5jcHkoc3RhdHNmaWxlLCBlbi0+dmFsdWUsIHNpemVvZihzdGF0c2ZpbGUpIC0gMSk7Cj4gPj4g KyAgICAgICAgICAgIHN0YXRzZmlsZVtzaXplb2Yoc3RhdHNmaWxlKSAtIDFdID0gJ1wwJzsKPiA+ PiArICAgICAgICB9Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgaWYgKHBhcmFtcy5tX1JD UGFzcyAhPSAtMSAmJiBwYXJhbXMubV9SQ051bVBhc3NlcyA9PSAxKQo+ID4+ICsgICAgICAgIHBh cmFtcy5tX1JDTnVtUGFzc2VzID0gMjsgICAgICAgLy8gZW5hYmxlIDJwYXNzIG1vZGUKPiA+PiAr Cj4gPj4gKyNpZiBWVkVOQ19WRVJTSU9OX01BSk9SID4gMSB8fCAoVlZFTkNfVkVSU0lPTl9NQUpP UiA9PSAxICYmCj4gPj4gVlZFTkNfVkVSU0lPTl9NSU5PUiA+IDgpCj4gPj4gKyAgICBpZihhdmN0 eC0+cmNfbWF4X3JhdGUpIHsKPiA+PiArICAgICAgICBpZighYXZjdHgtPmJpdF9yYXRlKSB7Cj4g Pj4gKyAgICAgICAgICAgIGF2X2xvZyggYXZjdHgsIEFWX0xPR19FUlJPUiwgIlJhdGUgY29udHJv bCBwYXJhbWV0ZXJzIHNldAo+ID4+IHdpdGhvdXQgYSBiaXRyYXRlXG4iKTsKPiA+PiArICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+PiArICAgICAgICB9Cj4gPj4gKyAgICAg ICAgZWxzZQo+ID4+ICsgICAgICAgICAgICBwYXJhbXMubV9SQ01heEJpdHJhdGUgPSBhdmN0eC0+ cmNfbWF4X3JhdGU7Cj4gPj4gKyAgICB9Cj4gPj4gKyNlbmRpZgo+ID4+ICsKPiA+PiArICAgIHMt PnZ2ZW5jRW5jID0gdnZlbmNfZW5jb2Rlcl9jcmVhdGUoKTsKPiA+PiArICAgIGlmIChOVUxMID09 IHMtPnZ2ZW5jRW5jKSB7Cj4gPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJjYW5ub3QgY3JlYXRlIHZ2YyBlbmNvZGVyCj4gPj4gKHZ2ZW5jKVxuIik7Cj4gPj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICB2 dmVuY19zZXRfbXNnX2NhbGxiYWNrKCZwYXJhbXMsIHMtPnZ2ZW5jRW5jLAo+IGZmX3Z2ZW5jX2xv Z19jYWxsYmFjayk7Cj4gPj4gKyAgICByZXQgPSB2dmVuY19lbmNvZGVyX29wZW4ocy0+dnZlbmNF bmMsICZwYXJhbXMpOwo+ID4+ICsgICAgaWYgKDAgIT0gcmV0KSB7Cj4gPj4gKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJjYW5ub3Qgb3BlbiB2dmMgZW5jb2RlciAodnZlbmMp Ogo+ID4+ICVzXG4iLAo+ID4+ICsgICAgICAgICAgICAgICB2dmVuY19nZXRfbGFzdF9lcnJvcihz LT52dmVuY0VuYykpOwo+ID4+ICsgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNF bmMpOwo+ID4+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gPj4gKyAgICB9Cj4g Pj4gKwo+ID4+ICsgICAgdnZlbmNfZ2V0X2NvbmZpZyhzLT52dmVuY0VuYywgJnBhcmFtcyk7ICAg ICAvLyBnZXQgdGhlIGFkYXB0ZWQKPiBjb25maWcKPiA+PiArCj4gPj4gKyAgICBpZiAocGFyYW1z Lm1fdmVyYm9zaXR5ID49IFZWRU5DX0lORk8KPiA+PiArICAgICAgICAmJiBhdl9sb2dfZ2V0X2xl dmVsKCkgPD0gQVZfTE9HX0lORk8pIHsKPiA+PiArICAgICAgICBmZl92dmVuY19pbnRlcm5hbExv ZyhhdmN0eCwgcGFyYW1zLm1fdmVyYm9zaXR5LCAidnZlbmMgdmVyc2lvbjoKPiA+PiAlc1xuIiwK PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dmVuY19nZXRfdmVyc2lvbigpKTsK PiA+PiArICAgICAgICBmZl92dmVuY19pbnRlcm5hbExvZyhhdmN0eCwgcGFyYW1zLm1fdmVyYm9z aXR5LCAiJXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZlbmNfZ2V0 X2NvbmZpZ19hc19zdHJpbmcoJnBhcmFtcywKPiA+PiArCj4gPj4gcGFyYW1zLm1fdmVyYm9zaXR5 KSk7Cj4gPj4gKyAgICB9IGVsc2Ugewo+ID4+ICsgICAgICAgIHZ2ZW5jTXNnTGV2ZWwgbG9nbHZs ID0gVlZFTkNfSU5GTzsKPiA+PiArICAgICAgICBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFW X0xPR19ERUJVRykKPiA+PiArICAgICAgICAgICAgbG9nbHZsID0gVlZFTkNfREVUQUlMUzsKPiA+ PiArICAgICAgICBlbHNlIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX1ZFUkJPU0Up Cj4gPj4gKyAgICAgICAgICAgIGxvZ2x2bCA9IFZWRU5DX1ZFUkJPU0U7Cj4gPj4gKwo+ID4+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgYXZfbG9nX2dldF9sZXZlbCgpLCAidnZlbmMgdmVyc2lvbjog JXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgdnZlbmNfZ2V0X3ZlcnNpb24oKSk7Cj4gPj4gKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBhdl9sb2dfZ2V0X2xldmVsKCksICIlc1xuIiwKPiA+PiArICAg ICAgICAgICAgICB2dmVuY19nZXRfY29uZmlnX2FzX3N0cmluZygmcGFyYW1zLCBsb2dsdmwgKSk7 Cj4gPj4gKyAgICB9Cj4gPj4gKwo+ID4+ICsgICAgaWYgKHBhcmFtcy5tX1JDTnVtUGFzc2VzID09 IDIpIHsKPiA+PiArICAgICAgICByZXQgPSB2dmVuY19pbml0X3Bhc3Mocy0+dnZlbmNFbmMsIHBh cmFtcy5tX1JDUGFzcyAtIDEsCj4gPj4gJnN0YXRzZmlsZVswXSk7Cj4gPj4gKyAgICAgICAgaWYg KDAgIT0gcmV0KSB7Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LAo+ID4+ICsgICAgICAgICAgICAgICAgICAgImNhbm5vdCBpbml0IHBhc3MgJWQgZm9yIHZ2YyBl bmNvZGVyICh2dmVuYyk6ICVzXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgcGFyYW1zLm1f UkNQYXNzLCB2dmVuY19nZXRfbGFzdF9lcnJvcihzLT52dmVuY0VuYykpOwo+ID4+ICsgICAgICAg ICAgICB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPiA+PiArICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiA+PiArICAgICAgICB9Cj4gPj4gKyAgICB9Cj4gPj4g Kwo+ID4+ICsgICAgcy0+cEFVID0gdnZlbmNfYWNjZXNzVW5pdF9hbGxvYygpOwo+ID4+ICsgICAg dnZlbmNfYWNjZXNzVW5pdF9hbGxvY19wYXlsb2FkKHMtPnBBVSwgYXZjdHgtPndpZHRoICoKPiBh dmN0eC0+aGVpZ2h0KTsKPiA+Pgo+ID4gRG8gd2UgbmVlZCB0byBjaGVjayB0aGUgYWxsb2NhdGlv biByZXN1bHQ/Cj4gPgo+Cj4gVGhhbmtzLCBJIHdpbGwgYWRkIGEgYWxsb2NhdGlvbiBjaGVjay4K Pgo+Cj4gPj4gKwo+ID4+ICsgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfR0xP QkFMX0hFQURFUikgewo+ID4+ICsgICAgICAgIHJldCA9IHZ2ZW5jX2dldF9oZWFkZXJzKHMtPnZ2 ZW5jRW5jLCBzLT5wQVUpOwo+ID4+ICsgICAgICAgIGlmICgwICE9IHJldCkgewo+ID4+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiA+PiArICAgICAgICAgICAgICAg ICAgICJjYW5ub3QgZ2V0IGhlYWRlcnMgKFNQUyxQUFMpIGZyb20gdnZjCj4gZW5jb2Rlcih2dmVu Yyk6Cj4gPj4gJXNcbiIsCj4gPj4gKyAgICAgICAgICAgICAgICAgICB2dmVuY19nZXRfbGFzdF9l cnJvcihzLT52dmVuY0VuYykpOwo+ID4+ICsgICAgICAgICAgICB2dmVuY19lbmNvZGVyX2Nsb3Nl KHMtPnZ2ZW5jRW5jKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK PiA+PiArICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgICAgIGlmIChzLT5wQVUtPnBheWxvYWRV c2VkU2l6ZSA8PSAwKSB7Cj4gPj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+ dnZlbmNFbmMpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiA+PiArICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRhdGFfc2l6 ZSA9IHMtPnBBVS0+cGF5bG9hZFVzZWRTaXplOwo+ID4+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRh dGEgPQo+ID4+ICsgICAgICAgICAgICBhdl9tYWxsb2N6KGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSAr Cj4gPj4gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7Cj4gPj4gKyAgICAgICAgaWYgKCFh dmN0eC0+ZXh0cmFkYXRhKSB7Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBhbGxvY2F0ZSBWVkMgaGVh ZGVyIG9mIHNpemUgJWQuXG4iLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgYXZjdHgtPmV4dHJh ZGF0YV9zaXplKTsKPiA+PiArICAgICAgICAgICAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52dmVu Y0VuYyk7Cj4gPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gPj4gKyAg ICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICBtZW1jcHkoYXZjdHgtPmV4dHJhZGF0YSwgcy0+ cEFVLT5wYXlsb2FkLAo+IGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Cj4gPj4gKyAgICAgICAgbWVt c2V0KGF2Y3R4LT5leHRyYWRhdGEgKyBhdmN0eC0+ZXh0cmFkYXRhX3NpemUsIDAsCj4gPj4gKyAg ICAgICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwo+ID4+ICsgICAgfQo+ ID4+ICsgICAgcy0+ZW5jb2RlRG9uZSA9IGZhbHNlOwo+ID4+ICsgICAgcmV0dXJuIDA7Cj4gPj4g K30KPiA+PiArCj4gPj4gK3N0YXRpYyBhdl9jb2xkIGludCBmZl92dmVuY19lbmNvZGVfY2xvc2Uo QVZDb2RlY0NvbnRleHQgKiBhdmN0eCkKPiA+PiArewo+ID4+ICsgICAgVlZlbkNDb250ZXh0ICpz ID0gKFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4+ICsgICAgaWYgKHMtPnZ2 ZW5jRW5jKSB7Cj4gPj4gKyAgICAgICAgaWYgKGF2X2xvZ19nZXRfbGV2ZWwoKSA+PSBBVl9MT0df VkVSQk9TRSkKPiA+PiArICAgICAgICAgICAgdnZlbmNfcHJpbnRfc3VtbWFyeShzLT52dmVuY0Vu Yyk7Cj4gPj4gKwo+ID4+ICsgICAgICAgIGlmICgwICE9IHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+ dnZlbmNFbmMpKSB7Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiY2Fubm90IGNsb3NlIHZ2ZW5jXG4iKTsKPiA+PiArICAgICAgICAgICAgcmV0dXJuIC0xOwo+ ID4+ICsgICAgICAgIH0KPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICB2dmVuY19hY2Nlc3NV bml0X2ZyZWUocy0+cEFVLCB0cnVlKTsKPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiAr fQo+ID4+ICsKPiA+PiArc3RhdGljIGF2X2NvbGQgaW50IGZmX3Z2ZW5jX2VuY29kZV9mcmFtZShB VkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gQVZQYWNrZXQKPiA+PiAqcGt0LAo+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBp bnQKPiA+PiAqZ290X3BhY2tldCkKPiA+PiArewo+ID4+ICsgICAgVlZlbkNDb250ZXh0ICpzID0g KFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+ID4+ICsgICAgdnZlbmNZVVZCdWZm ZXIgKnB5dXZidWY7Cj4gPj4gKyAgICB2dmVuY1lVVkJ1ZmZlciB5dXZidWY7Cj4gPj4gKyAgICBp bnQgcGljdF90eXBlOwo+ID4+ICsgICAgaW50IHJldDsKPiA+PiArCj4gPj4gKyAgICBweXV2YnVm ID0gTlVMTDsKPiA+PiArICAgIGlmIChmcmFtZSkgewo+ID4KPiA+ICsgICAgICAgIGlmIChhdmN0 eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFKSB7Cj4gPj4KPiA+IDggYml0cyBh cmUgc3RpbGwgd2lkZSB1c2VkLiBJcyBpdCBoYXJkIHRvIGFkZCA4Yml0cyBzdXBwb3J0Pwo+ID4K Pgo+IFZWZW5jIGRvZXMgbm90IHN1cHBvcnQgOGJpdCBpbnB1dCBjdXJyZW50bHkuCj4gVGhhdCBt ZWFucyB0aGUgeXV2IGlucHV0IGJ1ZmZlciBoYXZlIHRvIGJlIDEwYml0IHBhY2tldCBpbiAyIDhi aXQgc2FtcGxlcy4KPiBUaGUgb25seSB3YXkgZW5jb2RlIDhiaXQgaXMgdG8gaW5wdXQgMTBiaXQg YW5kIHVzZSB0aGUgOGJpdCBwaXBlbGluZSBieQo+IHVzaW5nCj4gLXZ2ZW5jLXBhcmFtcyAiSW50 ZXJuYWxCaXREZXB0aD04IiBvciB1c2UgdGhlIGxpYnZ2ZW5jIG9wdGlvbiAtYml0ZGVwdGg4Cj4K Pgo+ID4+ICsgICAgICAgICAgICB2dmVuY19ZVVZCdWZmZXJfZGVmYXVsdCgmeXV2YnVmKTsKPiA+ PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1swXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ ZGF0YVswXTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1sxXS5wdHIgPSAoaW50MTZf dCAqKSBmcmFtZS0+ZGF0YVsxXTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1syXS5w dHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsyXTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAg IHl1dmJ1Zi5wbGFuZXNbMF0ud2lkdGggPSBmcmFtZS0+d2lkdGg7Cj4gPj4gKyAgICAgICAgICAg IHl1dmJ1Zi5wbGFuZXNbMF0uaGVpZ2h0ID0gZnJhbWUtPmhlaWdodDsKPiA+PiArICAgICAgICAg ICAgeXV2YnVmLnBsYW5lc1swXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMF0gPj4gMTsgIC8v Cj4gc3RyaWRlCj4gPj4gaXMgdXNlZCBpbiBzYW1wbGVzICgxNmJpdCkgaW4gdnZlbmMsIGZmbXBl ZyB1c2VzIHN0cmlkZSBpbiBieXRlcwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBs YW5lc1sxXS53aWR0aCA9IGZyYW1lLT53aWR0aCA+PiAxOwo+ID4+ICsgICAgICAgICAgICB5dXZi dWYucGxhbmVzWzFdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQgPj4gMTsKPiA+PiArICAgICAgICAg ICAgeXV2YnVmLnBsYW5lc1sxXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMV0gPj4gMTsKPiA+ PiArCj4gPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMl0ud2lkdGggPSBmcmFtZS0+d2lk dGggPj4gMTsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1syXS5oZWlnaHQgPSBmcmFt ZS0+aGVpZ2h0ID4+IDE7Cj4gPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMl0uc3RyaWRl ID0gZnJhbWUtPmxpbmVzaXplWzJdID4+IDE7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICB5dXZi dWYuY3RzID0gZnJhbWUtPnB0czsKPiA+PiArICAgICAgICAgICAgeXV2YnVmLmN0c1ZhbGlkID0g dHJ1ZTsKPiA+PiArICAgICAgICAgICAgcHl1dmJ1ZiA9ICZ5dXZidWY7Cj4gPj4gKyAgICAgICAg fSBlbHNlIHsKPiA+PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4g Pj4gKyAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgaW5wdXQgY29sb3JzcGFjZSEgaW5w dXQgbXVzdCBiZQo+ID4+IHl1djQyMHAxMGxlIik7Cj4gPj4gKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4gPj4gKyAgICAgICAgfQo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiAr ICAgIGlmICghcy0+ZW5jb2RlRG9uZSkgewo+ID4+ICsgICAgICAgIHJldCA9IHZ2ZW5jX2VuY29k ZShzLT52dmVuY0VuYywgcHl1dmJ1Ziwgcy0+cEFVLAo+ICZzLT5lbmNvZGVEb25lKTsKPiA+PiAr ICAgICAgICBpZiAocmV0ICE9IDApIHsKPiA+PiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJlcnJvciBpbiB2dmVuYzo6ZW5jb2RlIC0KPiA+PiByZXQ6JWRcbiIsCj4g Pj4gKyAgICAgICAgICAgICAgICAgICByZXQpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwo+ID4+ICsgICAgICAgIH0KPiA+PiArICAgIH0gZWxzZSB7Cj4gPj4gKyAg ICAgICAgKmdvdF9wYWNrZXQgPSAwOwo+ID4+ICsgICAgICAgIHJldHVybiAwOwo+ID4+ICsgICAg fQo+ID4+ICsKPiA+PiArICAgIGlmIChzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSA+IDApIHsKPiA+ PiArICAgICAgICByZXQgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCBzLT5wQVUt PnBheWxvYWRVc2VkU2l6ZSwKPiA+PiAwKTsKPiA+PiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ ID4+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIGdldHRp bmcgb3V0cHV0Cj4gcGFja2V0LlxuIik7Cj4gPj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g Pj4gKyAgICAgICAgfQo+ID4+ICsKPiA+PiArICAgICAgICBtZW1jcHkocGt0LT5kYXRhLCBzLT5w QVUtPnBheWxvYWQsIHMtPnBBVS0+cGF5bG9hZFVzZWRTaXplKTsKPiA+PiArCj4gPj4gKyAgICAg ICAgaWYgKHMtPnBBVS0+Y3RzVmFsaWQpCj4gPj4gKyAgICAgICAgICAgIHBrdC0+cHRzID0gcy0+ cEFVLT5jdHM7Cj4gPj4gKyAgICAgICAgaWYgKHMtPnBBVS0+ZHRzVmFsaWQpCj4gPj4gKyAgICAg ICAgICAgIHBrdC0+ZHRzID0gcy0+cEFVLT5kdHM7Cj4gPj4gKyAgICAgICAgcGt0LT5mbGFncyB8 PSBBVl9QS1RfRkxBR19LRVkgKiBzLT5wQVUtPnJhcDsKPiA+PiArCj4gPj4gKyAgICAgICAgc3dp dGNoIChzLT5wQVUtPnNsaWNlVHlwZSkgewo+ID4+ICsgICAgICAgIGNhc2UgVlZFTkNfSV9TTElD RToKPiA+PiArICAgICAgICAgICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7Cj4gPj4g KyAgICAgICAgICAgIGJyZWFrOwo+ID4+ICsgICAgICAgIGNhc2UgVlZFTkNfUF9TTElDRToKPiA+ PiArICAgICAgICAgICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX1A7Cj4gPj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ID4+ICsgICAgICAgIGNhc2UgVlZFTkNfQl9TTElDRToKPiA+PiArICAg ICAgICAgICAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0I7Cj4gPj4gKyAgICAgICAgICAg IGJyZWFrOwo+ID4+ICsgICAgICAgIGRlZmF1bHQ6Cj4gPj4gKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBwaWN0dXJlIHR5cGUKPiA+PiBlbmNvdW50ZXJl ZC5cbiIpOwo+ID4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPiA+PiAr ICAgICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgICAgIGZmX3NpZGVfZGF0YV9zZXRfZW5jb2Rlcl9z dGF0cyhwa3QsIDAsIE5VTEwsIDAsIHBpY3RfdHlwZSk7Cj4gPj4gKwo+ID4+ICsgICAgICAgICpn b3RfcGFja2V0ID0gMTsKPiA+PiArCj4gPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gPj4gKyAgICB9 IGVsc2Ugewo+ID4+ICsgICAgICAgICpnb3RfcGFja2V0ID0gMDsKPiA+PiArICAgICAgICByZXR1 cm4gMDsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4+ ICsKPiA+PiArc3RhdGljIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10c192dmVuY1td ID0gewo+ID4+ICsgICAgQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSwKPiA+PiArICAgIEFWX1BJWF9G TVRfTk9ORQo+ID4+ICt9Owo+ID4+ICsKPiA+PiArI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2Yo VlZlbkNDb250ZXh0LCB4KQo+ID4+ICsjZGVmaW5lIFZFIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFN IHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0KPiA+PiArc3RhdGljIGNvbnN0IEFWT3B0aW9u IGxpYnZ2ZW5jX29wdGlvbnNbXSA9IHsKPiA+PiArICAgIHsicHJlc2V0IiwgInNldCBlbmNvZGlu ZyBwcmVzZXQoMDogZmFzdGVyIC0gNDogc2xvd2VyIiwgT0ZGU0VUKAo+ID4+IG9wdGlvbnMucHJl c2V0KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDJ9ICwgMCAsIDQgLCBWRSwgInByZXNldCJ9 LAo+ID4+ICsgICAgICAgIHsgImZhc3RlciIsICIwIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gVlZFTkNfRkFTVEVSfSwKPiA+PiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIg fSwKPiA+PiArICAgICAgICB7ICJmYXN0IiwgICAiMSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7 Lmk2NCA9IFZWRU5DX0ZBU1R9LAo+ID4+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9 LAo+ID4+ICsgICAgICAgIHsgIm1lZGl1bSIsICIyIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gVlZFTkNfTUVESVVNfSwKPiA+PiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIg fSwKPiA+PiArICAgICAgICB7ICJzbG93IiwgICAiMyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7 Lmk2NCA9IFZWRU5DX1NMT1d9LAo+ID4+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9 LAo+ID4+ICsgICAgICAgIHsgInNsb3dlciIsICI0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gVlZFTkNfU0xPV0VSfSwKPiA+PiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIg fSwKPiA+PiArICAgIHsgInFwIiAgICAgLCAic2V0IHF1YW50aXphdGlvbiIsIE9GRlNFVChvcHRp b25zLnFwKSwKPiA+PiBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2NCA9IC0xfSwgLTEgLCA2MyAsVkUs ICJxcF9tb2RlIiB9LAo+ID4+ICsgICAgeyAicGVyaW9kIiAsICJzZXQgKGludHJhKSByZWZyZXNo IHBlcmlvZCBpbiBzZWNvbmRzIiwKPiA+PiBPRkZTRVQob3B0aW9ucy5pbnRyYVJlZnJlc2hTZWMp LCBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2NCA9IDF9LCAgMSAsCj4gSU5UX01BWAo+ID4+ICxWRSwi aXJlZnJlc2hzZWMiIH0sCj4gPj4gKyAgICB7ICJzdWJqb3B0IiwgInNldCBzdWJqZWN0aXZlIChw ZXJjZXB0dWFsbHkgbW90aXZhdGVkKQo+IG9wdGltaXphdGlvbiIsCj4gPj4gT0ZGU0VUKG9wdGlv bnMuc3ViamVjdGl2ZU9wdGltaXphdGlvbiksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0ID0gMX0s Cj4gMCAsCj4gPj4gMSwgVkV9LAo+ID4+Cj4gPiArICAgIHsgImJpdGRlcHRoOCIsICJzZXQgOGJp dCBjb2RpbmcgbW9kZSIsCj4gT0ZGU0VUKG9wdGlvbnMuZmxhZzhiaXRDb2RpbmcpLAo+ID4+IEFW X09QVF9UWVBFX0JPT0wsIHsuaTY0ID0gMH0sICAwICwgMSwgVkV9LAo+ID4+Cj4gPiB3aHkgYml0 ZGVwdGg4IGlzIHNvIGltcG9ydGFudCwgY2FuIHdlIGhpZGUgaXQgaW4gdnZlbmMtcGFyYW1zPwo+ ID4KPgo+IEl0IGNhbiBhbHNvIGJlIHNwZWNpZmllZCB3aXRoIHRoZSB2dmVuYy1wYXJhbXM6Cj4g LXZ2ZW5jLXBhcmFtcyAiSW50ZXJuYWxCaXREZXB0aD04Igo+IFlvdSBhbHJlYWR5IG1lbnRpb25l ZCBhYm92ZSwgd2h5IHRoZXJlIGlzIG5vdCA4Yml0IHl1djQyMHAgc3VwcG9ydC4KPiBDYXVzZSB0 aGVyZSBpc27CtHQsIGl0IGlzIGEgd29ya2Fyb3VuZCB0byBlbmFibGUgdGhlIDhiaXQgcGlwZWxp bmUgd2l0aG91dAo+IHRvdWNoaW5nIHRoZSB2dmVuYy1wYXJhbXMKPgo+Cj4gPj4gKyAgICB7ICJ2 dmVuYy1wYXJhbXMiLCAic2V0IHRoZSB2dmVuYyBjb25maWd1cmF0aW9uIHVzaW5nIGEgOi1zZXBh cmF0ZWQKPiA+PiBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKG9wdGlvbnMu dnZlbmNfb3B0cyksCj4gPj4gQVZfT1BUX1RZUEVfRElDVCwgeyAwIH0sIDAsIDAsIFZFIH0sCj4g Pgo+ID4gSG93IHRvIHNldCB0aGUgdnZlbmMtcGFyYW1zLCBiZXR0ZXIgcHJvdmlkZSBzb21lIGRv Y3VtZW50cwo+ID4KPgo+IEl0wrRzIHRoZSBzYW1lIHdheSB4MjY0IG9yIHgyNjUgYXJlIHByb3Zp ZGluZyB0aGVpciBwYXJhbWV0ZXJzLgo+IEFsbCBwYXJhbWV0ZXJzIHRoYXQgdGhlIHZ2ZW5jIGFw cGxpY2F0aW9uIHN1cHBvcnRzIGNhbiBiZSB1c2VkIGhlcmUuCj4gSSB3aWxsIGFkZCBzb21lIGRv Y3VtZW50YXRpb24gaW4gdGhlIGVuY29kZXJzLnRleGkgZmlsZS4KPgo+Cj4gPj4gKyAgICB7ICJs ZXZlbGlkYyIsICJ2dmMgbGV2ZWxfaWRjIiwgT0ZGU0VUKCBvcHRpb25zLmxldmVsSWRjKSwKPiA+ PiBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMH0sIDAsIDEwNSwgVkUsICJsZXZlbGlkYyJ9LAo+ ID4+ICsgICAgICAgIHsgIjAiLCAgICJhdXRvIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 ID0gMH0sICBJTlRfTUlOLAo+ID4+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAg ICAgICB7ICIxIiwgICAiMSIgICAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDE2fSwg SU5UX01JTiwKPiA+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAi MiIsICAgIjIiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAzMn0sIElOVF9NSU4s Cj4gPj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4+ICsgICAgICAgIHsgIjIuMSIsICIy LjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMzV9LCBJTlRfTUlOLAo+ID4+IElO VF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICIzIiwgICAiMyIgICAsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDQ4fSwgSU5UX01JTiwKPiA+PiBJTlRfTUFYLCBW RSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAiMy4xIiwgIjMuMSIgLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSA1MX0sIElOVF9NSU4sCj4gPj4gSU5UX01BWCwgVkUsICJsZXZl bGlkYyJ9LAo+ID4+ICsgICAgICAgIHsgIjQiLCAgICI0IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0ID0gNjR9LCBJTlRfTUlOLAo+ID4+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwK PiA+PiArICAgICAgICB7ICI0LjEiLCAiNC4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 NCA9IDY3fSwgSU5UX01JTiwKPiA+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4gKyAg ICAgICAgeyAiNSIsICAgIjUiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA4MH0s IElOVF9NSU4sCj4gPj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ID4+ICsgICAgICAgIHsg IjUuMSIsICI1LjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gODN9LCBJTlRfTUlO LAo+ID4+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICI1LjIiLCAi NS4yIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDg2fSwgSU5UX01JTiwKPiA+PiBJ TlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4gKyAgICAgICAgeyAiNiIsICAgIjYiICAgLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA5Nn0sIElOVF9NSU4sCj4gPj4gSU5UX01BWCwg VkUsICJsZXZlbGlkYyJ9LAo+ID4+ICsgICAgICAgIHsgIjYuMSIsICI2LjEiICwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0ID0gOTl9LCBJTlRfTUlOLAo+ID4+IElOVF9NQVgsIFZFLCAibGV2 ZWxpZGMifSwKPiA+PiArICAgICAgICB7ICI2LjIiLCAiNi4yIiAsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2NCA9IDEwMn0sIElOVF9NSU4sCj4gPj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9 LAo+ID4+ICsgICAgICAgIHsgIjYuMyIsICI2LjMiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gMTA1fSwgSU5UX01JTiwKPiA+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gPj4g KyAgICB7ICJ0aWVyIiwgInNldCB2dmMgdGllciIsIE9GRlNFVCggb3B0aW9ucy50aWVyKSwgQVZf T1BUX1RZUEVfSU5ULAo+ID4+IHsuaTY0ID0gMH0sICAwICwgMSAsIFZFLCAidGllciJ9LAo+ID4+ ICsgICAgICAgIHsgIm1haW4iLCAibWFpbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9 IDB9LCBJTlRfTUlOLAo+ID4+IElOVF9NQVgsIFZFLCAidGllciJ9LAo+ID4+ICsgICAgICAgIHsg ImhpZ2giLCAiaGlnaCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDF9LCBJTlRfTUlO LAo+ID4+IElOVF9NQVgsIFZFLCAidGllciJ9LAo+ID4+ICsgICAge05VTEx9Cj4gPj4gK307Cj4g Pj4gKwo+ID4+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBjbGFzc19saWJ2dmVuYyA9IHsKPiA+PiAr ICAgIC5jbGFzc19uYW1lID0gImxpYnZ2ZW5jLXZ2YyBlbmNvZGVyIiwKPiA+PiArICAgIC5pdGVt X25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gPj4gKyAgICAub3B0aW9uICAgICA9IGxp YnZ2ZW5jX29wdGlvbnMsCj4gPj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9O X0lOVCwKPiA+PiArfTsKPiA+PiArCj4gPj4gK0ZGQ29kZWMgZmZfbGlidnZlbmNfZW5jb2RlciA9 IHsKPiA+PiArICAgIC5wLm5hbWUgICAgICAgICA9ICJsaWJ2dmVuYyIsCj4gPj4gKyAgICBDT0RF Q19MT05HX05BTUUoIkguMjY2IC8gVlZDIEVuY29kZXIgVlZlbkMiKSwKPiA+PiArICAgIC5wLnR5 cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKPiA+PiArICAgIC5wLmlkICAgICAgICAg ICA9IEFWX0NPREVDX0lEX1ZWQywKPiA+PiArICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVD X0NBUF9ERUxBWSB8IEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTLAo+ID4+ICsgICAgLnAucHJv ZmlsZXMgICAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoZmZfdnZjX3Byb2ZpbGVzKSwKPiA+PiAr ICAgIC5wLnByaXZfY2xhc3MgICA9ICZjbGFzc19saWJ2dmVuYywKPiA+PiArICAgIC5wLndyYXBw ZXJfbmFtZSA9ICJsaWJ2dmVuYyIsCj4gPj4gKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yo VlZlbkNDb250ZXh0KSwKPiA+PiArICAgIC5wLnBpeF9mbXRzICAgICA9IHBpeF9mbXRzX3Z2ZW5j LAo+ID4+ICsgICAgLmluaXQgICAgICAgICAgID0gZmZfdnZlbmNfZW5jb2RlX2luaXQsCj4gPj4g KyAgICBGRl9DT0RFQ19FTkNPREVfQ0IoZmZfdnZlbmNfZW5jb2RlX2ZyYW1lKSwKPiA+PiArICAg IC5jbG9zZSAgICAgICAgICA9IGZmX3Z2ZW5jX2VuY29kZV9jbG9zZSwKPiA+PiArICAgIC5jYXBz X2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMsCj4gPj4gK307Cj4gPj4gLS0K PiA+PiAyLjM0LjEKPiA+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+ID4+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+PiBmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZyA8bWFpbHRvOmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnPgo+ID4+IGh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+ID4+Cj4gPj4gVG8gdW5z dWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gPj4gZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyA8bWFpbHRvOmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmc+ Cj4gd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCj4gPj4KPiA+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0Cj4gPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZyA8bWFpbHRvOmZmbXBlZy1kZXZlbEBmZm1w ZWcub3JnPgo+ID4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRl dmVsCj4gPgo+ID4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4g PiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIDxtYWlsdG86ZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZz4KPiB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPgo+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVs IG1haWxpbmcgbGlzdAo+IGZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcu b3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlz aXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3Jn IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRl dmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVn LWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVn LWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K