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 AC9AC4A9B8 for ; Tue, 7 May 2024 01:53:37 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2FD9168D647; Tue, 7 May 2024 04:53:34 +0300 (EEST) Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5464268D5CE for ; Tue, 7 May 2024 04:53:27 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2e2a4c20870so33062041fa.3 for ; Mon, 06 May 2024 18:53:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715046806; x=1715651606; 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=GjHo5B599KZYrX6zFLdc9j2kXcwb6t0tHci8GPhVqAU=; b=mTRxn7dEv9Fe3kg+5z6Iv1eU1MgsnG5/R/PyZ6vZee0nvXzcJYyPMQHo/102iD8Xmo 73aSZPlyksrxH8MAGtW80MeLvcLCfzxavxoiZXgPaga2UvhWxusjuRz76KnHTzDwoFEX l88QutfZJQXET/tjn/XbRdtV8xES4fMyEQGZs6aoajK1+nb9l8HGPO/bzRfr8FO/e1sU NvtPZXPxdPEZZMLvvrEquCBWCIdJfp38XZ2T7D+3FJjilT9LOrd8PoGcdtSOs5XWa8Hq +TTDikHet9DddyreTdeRHLdXWLkAsRyKqrApUQ6NfDp0NxVZlKoV/VUQqAf0TPYpeFeZ JTgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715046806; x=1715651606; 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=GjHo5B599KZYrX6zFLdc9j2kXcwb6t0tHci8GPhVqAU=; b=U1oT6Qc6iNCZiqvUl62kS0uC+dDglZB/85x1aMY9cq8OiVvZcQ6is99EcJXH+TB8aO cO+g5BR4fZCL9OHtrj5Pb5QBwPEArIbAd6AtahIpmSF3aYahO+mS16/QCo3/GgluX2zh dbHCazLg4QSG3p7278iAmJ5vUgr+fe70dv8aN1c4TlfBBxaazy6vufwcQdOfc9q1IrtX 1GoF1tv4V8b+LwfEOJoAST0cgQAlr8bEXcl85a9/rBVHJ+R1gppTfKbPVuyBIXUVi0k8 ocEia31t2FZ3av1jAEPrwSfGGZIj4D+i7TntCLNM6DDtq9ewQz4wNDWBWrXJBbuByZzy V5Mw== X-Gm-Message-State: AOJu0Ywg6WlYB1QZCqbH9YeonW3Q53Ybx3hEgwPo59E9alx5u57QSAds tGggx88geVsC6YYPWaCO3b/mNnpVdqJmUBczGVTdw9Qz9X7aNIJ86lmntUJaLtdVZf9xuNxOQCr 7HiQnJniGWhW7n1lZIbGoXgk9a0IPtdbUBKY= X-Google-Smtp-Source: AGHT+IED4OyN8nh/40YiRqgjlXVE7reG0l3Th5vvgI+owEvRBwnHa1P902fPFoM4DtQXK3WVb2KyKZIdVGE+6q2enrg= X-Received: by 2002:a19:ca4d:0:b0:51e:e703:d11c with SMTP id h13-20020a19ca4d000000b0051ee703d11cmr7269352lfj.12.1715046805539; Mon, 06 May 2024 18:53:25 -0700 (PDT) MIME-Version: 1.0 References: <20240506170319.43685-1-chris10317h5@gmail.com> <20240506170319.43685-2-chris10317h5@gmail.com> In-Reply-To: <20240506170319.43685-2-chris10317h5@gmail.com> From: Nuo Mi Date: Tue, 7 May 2024 09:53:14 +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: SGkgQ2hyaXN0aWFuLApUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KTGV0IHVzIHJldmlldyBhbmQg bWVyZ2UgdGhlIGVuY29kZXIgcGFydC4KCk9uIFR1ZSwgTWF5IDcsIDIwMjQgYXQgMTowNeKAr0FN IENocmlzdGlhbiBCYXJ0bmlrIDxjaHJpczEwMzE3aDVAZ21haWwuY29tPgp3cm90ZToKCj4gRnJv bTogVGhvbWFzIFNpZWRlbCA8dGhvbWFzLmZmQHNwaW4tZGlnaXRhbC5jb20+Cj4KPiBBZGQgZXh0 ZXJuYWwgZW5jb2RlciBWVmVuQyBmb3IgSDI2Ni9WVkMgZW5jb2RpbmcuCj4gUmVnaXN0ZXIgbmV3 IGVuY29kZXIgbGlidnZlbmMuCj4gQWRkIGxpYnZ2ZW5jIHRvIHdyYXAgdGhlIHZ2ZW5jIGludGVy ZmFjZS4KPiBsaWJ2dmVuYyBpbXBsZW1lbnRzIGVuY29kZXIgb3B0aW9uOiBwcmVzZXQscXAscGVy aW9kLHN1YmpvcHQsCj4gdnZlbmMtcGFyYW1zLGxldmVsaWRjLHRpZXIuCj4gRW5hYmxlIGVuY29k ZXIgYnkgYWRkaW5nIC0tZW5hYmxlLWxpYnZ2ZW5jIGluIGNvbmZpZ3VyZSBzdGVwLgo+Cj4gQ28t YXV0aG9yZWQtYnk6IENocmlzdGlhbiBCYXJ0bmlrIGNocmlzMTAzMTdoNUBnbWFpbC5jb20KPiBT aWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gQmFydG5payA8Y2hyaXMxMDMxN2g1QGdtYWlsLmNvbT4K PiAtLS0KPiAgY29uZmlndXJlICAgICAgICAgICAgICB8ICAgNCArCj4gIGxpYmF2Y29kZWMvTWFr ZWZpbGUgICAgfCAgIDEgKwo+ICBsaWJhdmNvZGVjL2FsbGNvZGVjcy5jIHwgICAxICsKPiAgbGli YXZjb2RlYy9saWJ2dmVuYy5jICB8IDUwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDUwNyBpbnNlcnRpb25zKCspCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPgo+IGRpZmYgLS1naXQgYS9jb25m aWd1cmUgYi9jb25maWd1cmUKPiBpbmRleCBlZDc0NTgzYTZmLi5jYjMxMmQ5YzczIDEwMDc1NQo+ IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBiL2NvbmZpZ3VyZQo+IEBAIC0yOTMsNiArMjkzLDcgQEAg RXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+ICAgIC0tZW5hYmxlLWxpYnZvcmJpcyAgICAgICBl bmFibGUgVm9yYmlzIGVuL2RlY29kaW5nIHZpYSBsaWJ2b3JiaXMsCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBleGlzdHMgW25vXQo+ICAgIC0tZW5h YmxlLWxpYnZweCAgICAgICAgICBlbmFibGUgVlA4IGFuZCBWUDkgZGUvZW5jb2RpbmcgdmlhIGxp YnZweCBbbm9dCj4gKyAgLS1lbmFibGUtbGlidnZlbmMgICAgICAgIGVuYWJsZSBILjI2Ni9WVkMg ZW5jb2RpbmcgdmlhIHZ2ZW5jIFtub10KPiAgICAtLWVuYWJsZS1saWJ3ZWJwICAgICAgICAgZW5h YmxlIFdlYlAgZW5jb2RpbmcgdmlhIGxpYndlYnAgW25vXQo+ICAgIC0tZW5hYmxlLWxpYngyNjQg ICAgICAgICBlbmFibGUgSC4yNjQgZW5jb2RpbmcgdmlhIHgyNjQgW25vXQo+ICAgIC0tZW5hYmxl LWxpYngyNjUgICAgICAgICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9dCj4gQEAg LTE5NjYsNiArMTk2Nyw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCj4gICAgICBsaWJ2bWFm Cj4gICAgICBsaWJ2b3JiaXMKPiAgICAgIGxpYnZweAo+ICsgICAgbGlidnZlbmMKPiAgICAgIGxp YndlYnAKPiAgICAgIGxpYnhldmQKPiAgICAgIGxpYnhldmUKPiBAQCAtMzU0OCw2ICszNTUwLDcg QEAgbGlidnB4X3ZwOF9kZWNvZGVyX2RlcHM9ImxpYnZweCIKPiAgbGlidnB4X3ZwOF9lbmNvZGVy X2RlcHM9ImxpYnZweCIKPiAgbGlidnB4X3ZwOV9kZWNvZGVyX2RlcHM9ImxpYnZweCIKPiAgbGli dnB4X3ZwOV9lbmNvZGVyX2RlcHM9ImxpYnZweCIKPiArbGlidnZlbmNfZW5jb2Rlcl9kZXBzPSJs aWJ2dmVuYyIKPiAgbGlid2VicF9lbmNvZGVyX2RlcHM9ImxpYndlYnAiCj4gIGxpYndlYnBfYW5p bV9lbmNvZGVyX2RlcHM9ImxpYndlYnAiCj4gIGxpYngyNjJfZW5jb2Rlcl9kZXBzPSJsaWJ4MjYy Igo+IEBAIC03MDEwLDYgKzcwMTMsNyBAQCBlbmFibGVkIGxpYnZweCAgICAgICAgICAgICYmIHsK PiAgICAgICAgICBkaWUgImxpYnZweCBlbmFibGVkIGJ1dCBubyBzdXBwb3J0ZWQgZGVjb2RlcnMg Zm91bmQiCj4gICAgICBmaQo+ICB9Cj4gK2VuYWJsZWQgbGlidnZlbmMgICAgICAgICAgJiYgcmVx dWlyZV9wa2dfY29uZmlnIGxpYnZ2ZW5jICJsaWJ2dmVuYyA+PQo+IDEuNi4xIiAidnZlbmMvdnZl bmMuaCIgdnZlbmNfZ2V0X3ZlcnNpb24KPgo+ICBlbmFibGVkIGxpYndlYnAgICAgICAgICAgICYm IHsKPiAgICAgIGVuYWJsZWQgbGlid2VicF9lbmNvZGVyICAgICAgJiYgcmVxdWlyZV9wa2dfY29u ZmlnIGxpYndlYnAgImxpYndlYnAKPiA+PSAwLjIuMCIgd2VicC9lbmNvZGUuaCBXZWJQR2V0RW5j b2RlclZlcnNpb24KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29k ZWMvTWFrZWZpbGUKPiBpbmRleCBjZmY2MzQ3YmRiLi41NGQ4NWY2YWFhIDEwMDY0NAo+IC0tLSBh L2xpYmF2Y29kZWMvTWFrZWZpbGUKPiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4gQEAgLTEx NTUsNiArMTE1NSw3IEBAIE9CSlMtJChDT05GSUdfTElCVlBYX1ZQOF9ERUNPREVSKSAgICAgICAg ICs9Cj4gbGlidnB4ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19MSUJWUFhfVlA4X0VOQ09ERVIpICAg ICAgICAgKz0gbGlidnB4ZW5jLm8KPiAgT0JKUy0kKENPTkZJR19MSUJWUFhfVlA5X0RFQ09ERVIp ICAgICAgICAgKz0gbGlidnB4ZGVjLm8KPiAgT0JKUy0kKENPTkZJR19MSUJWUFhfVlA5X0VOQ09E RVIpICAgICAgICAgKz0gbGlidnB4ZW5jLm8KPiArT0JKUy0kKENPTkZJR19MSUJWVkVOQ19FTkNP REVSKSAgICAgICAgICAgKz0gbGlidnZlbmMubwo+ICBPQkpTLSQoQ09ORklHX0xJQldFQlBfRU5D T0RFUikgICAgICAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vCj4gbGlid2VicGVuYy5vCj4g IE9CSlMtJChDT05GSUdfTElCV0VCUF9BTklNX0VOQ09ERVIpICAgICAgICs9IGxpYndlYnBlbmNf Y29tbW9uLm8KPiBsaWJ3ZWJwZW5jX2FuaW1lbmNvZGVyLm8KPiAgT0JKUy0kKENPTkZJR19MSUJY MjYyX0VOQ09ERVIpICAgICAgICAgICAgKz0gbGlieDI2NC5vCj4gZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvYWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4gaW5kZXggZjQ3MDU2 NTFmYi4uYmIyYzNjZTAxNyAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4g KysrIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+IEBAIC04MDEsNiArODAxLDcgQEAgZXh0ZXJu IGNvbnN0IEZGQ29kZWMgZmZfbGlidnB4X3ZwOF9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZD b2RlYyBmZl9saWJ2cHhfdnA4X2RlY29kZXI7Cj4gIGV4dGVybiBGRkNvZGVjIGZmX2xpYnZweF92 cDlfZW5jb2RlcjsKPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlidnB4X3ZwOV9kZWNvZGVy Owo+ICtleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ2dmVuY19lbmNvZGVyOwo+ICAvKiBwcmVm ZXJyZWQgb3ZlciBsaWJ3ZWJwICovCj4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYndlYnBf YW5pbV9lbmNvZGVyOwo+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ3ZWJwX2VuY29kZXI7 Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvbGlidnZlbmMuYyBiL2xpYmF2Y29kZWMvbGlidnZl bmMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uYzQ1OTI3M2Y0 NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPiBAQCAtMCww ICsxLDUwMSBAQAo+ICsvKgo+ICsgKiBILjI2NiBlbmNvZGluZyB1c2luZyB0aGUgVlZlbkMgbGli cmFyeQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKPiArICoK PiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiAr ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCj4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAx IFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIgo+ICsKPiAr I2luY2x1ZGUgPHZ2ZW5jL3Z2ZW5jLmg+Cj4gKyNpbmNsdWRlIDx2dmVuYy92dmVuY0NmZy5oPgo+ ICsjaW5jbHVkZSA8dnZlbmMvdmVyc2lvbi5oPgo+ICsKPiArI2luY2x1ZGUgImF2Y29kZWMuaCIK PiArI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJlbmNvZGUuaCIKPiAr I2luY2x1ZGUgImludGVybmFsLmgiCj4gKyNpbmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPiAr I2luY2x1ZGUgInByb2ZpbGVzLmgiCj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5o Igo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3Bp eGRlc2MuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxpYmF2 dXRpbC9jb21tb24uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgo+ICsjaW5j bHVkZSAibGliYXZ1dGlsL2ZyYW1lLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCj4g Kwo+ICt0eXBlZGVmIHN0cnVjdCBWVmVuQ09wdGlvbnMgewo+ICsgICAgaW50IHByZXNldDsgICAg ICAgICAgICAgICAgIC8vIHByZXNldCAwOiBmYXN0ZXIgIDQ6IHNsb3dlcgo+ICsgICAgaW50IHFw OyAgICAgICAgICAgICAgICAgICAgIC8vIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgMC02Mwo+ICsg ICAgaW50IHN1YmplY3RpdmVPcHRpbWl6YXRpb247IC8vIHBlcmNlcHR1YWxseSBtb3RpdmF0ZWQg UVAgYWRhcHRhdGlvbiwKPiBYUFNOUiBiYXNlZAo+ICsgICAgaW50IGZsYWc4Yml0Q29kaW5nOyAg ICAgICAgIC8vIGVuY29kZSBpbiA4Yml0IGluc3RlYWQgb2YgMTBiaXQKPiArICAgIGludCBpbnRy YVJlZnJlc2hTZWM7ICAgICAgICAvLyBpbnRyYSBwZXJpb2QvcmVmcmVzaCBpbiBzZWNvbmRzCj4g KyAgICBpbnQgbGV2ZWxJZGM7ICAgICAgICAgICAgICAgLy8gdnZjIGxldmVsX2lkYwo+ICsgICAg aW50IHRpZXI7ICAgICAgICAgICAgICAgICAgIC8vIHZ2YyB0aWVyCj4gKyAgICBBVkRpY3Rpb25h cnkgKnZ2ZW5jX29wdHM7Cj4gK30gVlZlbkNPcHRpb25zOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qg VlZlbkNDb250ZXh0IHsKPiArICAgIEFWQ2xhc3MgICAgICAgICAqYXZfY2xhc3M7Cj4gKyAgICBW VmVuQ09wdGlvbnMgICAgb3B0aW9uczsgICAgICAvLyBlbmNvZGVyIG9wdGlvbnMKPiArICAgIHZ2 ZW5jRW5jb2RlciAgICAqdnZlbmNFbmM7Cj4gKyAgICB2dmVuY0FjY2Vzc1VuaXQgKnBBVTsKPiAr ICAgIGJvb2wgICAgICAgICAgICBlbmNvZGVEb25lOwo+ICt9IFZWZW5DQ29udGV4dDsKPiArCj4g Kwo+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGZmX3Z2ZW5jX2xvZ19jYWxsYmFjayh2b2lkICphdmN0 eCwgaW50IGxldmVsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKPiArewo+ICsgICAgdmZwcmludGYobGV2 ZWwgPT0gMSA/IHN0ZGVyciA6IHN0ZG91dCwgZm10LCBhcmdzKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZmZfdnZlbmNfaW50ZXJuYWxMb2codm9pZCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNo YXIgKmZtdCwKPiAuLi4pCj4gK3sKPiArICAgIHZhX2xpc3QgYXJnczsKPiArICAgIHZhX3N0YXJ0 KGFyZ3MsIGZtdCk7Cj4gKyAgICBmZl92dmVuY19sb2dfY2FsbGJhY2soY3R4LCBsZXZlbCwgZm10 LCBhcmdzKTsKPiArICAgIHZhX2VuZChhcmdzKTsKPiArfQo+ICsKPgp0aGlzIGlzIGEgdmVyeSBs YXJnZSBmdW5jdGlvbiwgbWl4ZWQgbWFueSB0aGluZ3MKSG93IGFib3V0IHdlIGJyZWFrIGl0IGlu dG8gc21hbGxlciBvbmUoPCA0MCBsaW5lcykKZm9yIGV4YW1wbGU6CnNldCBsb2cgY2FsbGJhY2ss IHNldCBleHRyYSBkYXRhLnNldCBjb2xvciBmb3JtYXQsIHNldCB2dmVuYyBwYXJhbXMuLi4KCj4g K3N0YXRpYyBhdl9jb2xkIGludCBmZl92dmVuY19lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAq YXZjdHgpCj4gK3sKPiArICAgIGludCByZXQ7Cj4gKyAgICBpbnQgZnJhbWVyYXRlLCBxcCwgcGFy c2VfcmV0Owo+ICsgICAgVlZlbkNDb250ZXh0ICpzOwo+ICsgICAgdnZlbmNfY29uZmlnIHBhcmFt czsKPiArICAgIHZ2ZW5jUHJlc2V0TW9kZSBwcmVzZXQ7Cj4gKyAgICBBVkRpY3Rpb25hcnlFbnRy eSAqZW47Cj4gKyAgICBjaGFyIHN0YXRzZmlsZVsxMDI0XSA9ICJ2dmVuYy1yY3N0YXRzLmpzb24i Owo+ICsKPiArICAgIHMgPSAoVlZlbkNDb250ZXh0ICopIGF2Y3R4LT5wcml2X2RhdGE7Cj4gKyAg ICBxcCA9ICh2dmVuY1ByZXNldE1vZGUpIHMtPm9wdGlvbnMucXA7Cj4KdHlwbyBmb3IgdnZlbmNQ cmVzZXRNb2RlPwoKPiArICAgIHByZXNldCA9ICh2dmVuY1ByZXNldE1vZGUpIHMtPm9wdGlvbnMu cHJlc2V0Owo+ICsKPiArICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0lOVEVS TEFDRURfRENUKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4gKyAg ICAgICAgICAgICAgICJmZl92dmVuY19lbmNvZGVfaW5pdDo6aW5pdCgpIGludGVybGFjZWQgZW5j b2Rpbmcgbm90Cj4gc3VwcG9ydGVkIHlldFxuIik7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgdnZlbmNfY29uZmlnX2RlZmF1bHQoJnBh cmFtcyk7Cj4gKwo+ICsgICAgLy8gc2V0IGRlc2lyZWQgZW5jb2Rpbmcgb3B0aW9ucwo+ICsgICAg ZnJhbWVyYXRlID0gYXZjdHgtPnRpbWVfYmFzZS5kZW4gLyBhdmN0eC0+dGltZV9iYXNlLm51bTsK PiArICAgIHZ2ZW5jX2luaXRfZGVmYXVsdCgmcGFyYW1zLCBhdmN0eC0+d2lkdGgsIGF2Y3R4LT5o ZWlnaHQsIGZyYW1lcmF0ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAocXAgPj0gMCkgPyAw IDogYXZjdHgtPmJpdF9yYXRlLCAocXAgPCAwKSA/IDMyIDoKPiBxcCwgcHJlc2V0KTsKPiArICAg IHBhcmFtcy5tX0ZyYW1lUmF0ZSA9IGF2Y3R4LT50aW1lX2Jhc2UuZGVuOwo+ICsgICAgcGFyYW1z Lm1fRnJhbWVTY2FsZSA9IGF2Y3R4LT50aW1lX2Jhc2UubnVtOwo+ICsKPiArICAgIHBhcmFtcy5t X3ZlcmJvc2l0eSA9IFZWRU5DX1ZFUkJPU0U7Cj4gKyAgICBpZiAoYXZfbG9nX2dldF9sZXZlbCgp ID49IEFWX0xPR19ERUJVRykKPiArICAgICAgICBwYXJhbXMubV92ZXJib3NpdHkgPSBWVkVOQ19E RVRBSUxTOwo+ICsgICAgZWxzZSBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19WRVJC T1NFKQo+ICsgICAgICAgIHBhcmFtcy5tX3ZlcmJvc2l0eSA9IFZWRU5DX05PVElDRTsgICAgICAv LyBvdXRwdXQgcGVyIHBpY3R1cmUgaW5mbwo+ICsgICAgZWxzZSBpZiAoYXZfbG9nX2dldF9sZXZl bCgpID49IEFWX0xPR19JTkZPKQo+ICsgICAgICAgIHBhcmFtcy5tX3ZlcmJvc2l0eSA9IFZWRU5D X1dBUk5JTkc7ICAgICAvLyBmZm1wZWcgZGVmYXVsdCBmZm1wZWcKPiBsb2dsZXZlbAo+ICsgICAg ZWxzZQo+ICsgICAgICAgIHBhcmFtcy5tX3ZlcmJvc2l0eSA9IFZWRU5DX1NJTEVOVDsKCndlIHNl dCBtX3ZlcmJvc2l0eSBoZXJlIGFuZAoKPgoKKwo+ICtGRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dB Uk5JTkdTCj4gKwo+ICsjaWYgRkZfQVBJX1RJQ0tTX1BFUl9GUkFNRQo+ICsgICAgaWYgKGF2Y3R4 LT50aWNrc19wZXJfZnJhbWUgPT0gMSkgewo+ICsjZW5kaWYKPiArICAgICAgICBwYXJhbXMubV9U aWNrc1BlclNlY29uZCA9IC0xOyAgIC8vIGF1dG8gbW9kZSBmb3IgdGlja3MgcGVyIGZyYW1lCj4g PSAxCj4gKyNpZiBGRl9BUElfVElDS1NfUEVSX0ZSQU1FCj4gKyAgICB9IGVsc2Ugewo+ICsgICAg ICAgIHBhcmFtcy5tX1RpY2tzUGVyU2Vjb25kID0KPiArICAgICAgICAgICAgY2VpbCgoYXZjdHgt PnRpbWVfYmFzZS5kZW4gLyAoZG91YmxlKSBhdmN0eC0+dGltZV9iYXNlLm51bSkgKgo+ICsgICAg ICAgICAgICAgICAgIChkb3VibGUpIGF2Y3R4LT50aWNrc19wZXJfZnJhbWUpOwo+ICsgICAgfQo+ ICsjZW5kaWYKPiArRkZfRU5BQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCj4gKwo+ICsgICAgaWYg KGF2Y3R4LT50aHJlYWRfY291bnQgPiAwKQo+ICsgICAgICAgIHBhcmFtcy5tX251bVRocmVhZHMg PSBhdmN0eC0+dGhyZWFkX2NvdW50Owo+ICsKPiArICAgIC8vIEdPUCBzZXR0aW5ncyAoSURSL0NS QSkKPiArICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0NMT1NFRF9HT1ApCj4g KyAgICAgICAgcGFyYW1zLm1fRGVjb2RpbmdSZWZyZXNoVHlwZSA9IFZWRU5DX0RSVF9JRFI7Cj4g Kwo+ICsgICAgaWYgKGF2Y3R4LT5nb3Bfc2l6ZSA9PSAxKSB7Cj4gKyAgICAgICAgcGFyYW1zLm1f R09QU2l6ZSA9IDE7Cj4gKyAgICAgICAgcGFyYW1zLm1fSW50cmFQZXJpb2QgPSAxOwo+ICsgICAg fSBlbHNlIHsKPiArICAgICAgICBwYXJhbXMubV9JbnRyYVBlcmlvZFNlYyA9IHMtPm9wdGlvbnMu aW50cmFSZWZyZXNoU2VjOwo+ICsgICAgfQo+ICsKPiArICAgIHBhcmFtcy5tX3VzZVBlcmNlcHRR UEEgPSBzLT5vcHRpb25zLnN1YmplY3RpdmVPcHRpbWl6YXRpb247Cj4gKyAgICBwYXJhbXMubV9s ZXZlbCAgICAgICAgID0gKHZ2ZW5jTGV2ZWwpIHMtPm9wdGlvbnMubGV2ZWxJZGM7Cj4gKyAgICBw YXJhbXMubV9sZXZlbFRpZXIgICAgID0gKHZ2ZW5jVGllcikgcy0+b3B0aW9ucy50aWVyOwo+ICsK PiArICAgIHBhcmFtcy5tX0FjY2Vzc1VuaXREZWxpbWl0ZXIgPSB0cnVlOwo+ICsKPiArICAgIHBh cmFtcy5tX2ludGVybkNocm9tYUZvcm1hdCA9IFZWRU5DX0NIUk9NQV80MjA7Cj4gKyAgICBwYXJh bXMubV9pbnB1dEJpdERlcHRoWzBdICAgPSAxMDsKPiArCj4gKyAgICBpZiAoIGF2Y3R4LT5waXhf Zm10ICE9IEFWX1BJWF9GTVRfWVVWNDIwUDEwTEUgKXsKPiArICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpeGVsIGZvcm1h dCAlcywgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBmb3IKPiB5dXY0MjBwMTBsZVxuIiwKPiArICAg ICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsKPiArICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICggcy0+ b3B0aW9ucy5mbGFnOGJpdENvZGluZyApIHsKPiArI2lmIFZWRU5DX1ZFUlNJT05fTUFKT1IgPiAx IHx8IChWVkVOQ19WRVJTSU9OX01BSk9SID09IDEgJiYKPiBWVkVOQ19WRVJTSU9OX01JTk9SID4g OSkgfHwgKFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJgo+IFZWRU5DX1ZFUlNJT05fTUlOT1Ig Pj0gOSAmJiBWVkVOQ19WRVJTSU9OX1BBVENIID49IDEpCj4gKyAgICAgICAgcGFyYW1zLm1faW50 ZXJuYWxCaXREZXB0aFswXSA9IDg7Cj4gKyNlbHNlCj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgOGJpdCBjb2Rpbmcg bW9kZS4gOGJpdCBjb2RpbmcgbmVlZHMgYXQgbGVhc3QKPiB2dmVuYyB2ZXJzaW9uID49IDEuOS4x XG4iLAo+ICsgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2Zt dCkpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyNlbmRpZgo+ICsgICAg fQo+ICsKPiArICAgIGlmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BSSV9VTlNQ RUNJRklFRCkKPiArICAgICAgICBwYXJhbXMubV9jb2xvdXJQcmltYXJpZXMgPSAoaW50KSBhdmN0 eC0+Y29sb3JfcHJpbWFyaWVzOwo+ICsgICAgaWYgKGF2Y3R4LT5jb2xvcnNwYWNlICE9IEFWQ09M X1NQQ19VTlNQRUNJRklFRCkKPiArICAgICAgICBwYXJhbXMubV9tYXRyaXhDb2VmZmljaWVudHMg PSAoaW50KSBhdmN0eC0+Y29sb3JzcGFjZTsKPiArICAgIGlmIChhdmN0eC0+Y29sb3JfdHJjICE9 IEFWQ09MX1RSQ19VTlNQRUNJRklFRCkgewo+ICsgICAgICAgIHBhcmFtcy5tX3RyYW5zZmVyQ2hh cmFjdGVyaXN0aWNzID0gKGludCkgYXZjdHgtPmNvbG9yX3RyYzsKPiArCj4gKyAgICAgICAgaWYg KGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX1NNUFRFMjA4NCkKPiArICAgICAgICAgICAg cGFyYW1zLm1fSGRyTW9kZSA9IChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzID09Cj4gQVZDT0xfUFJJ X0JUMjAyMCkgPwo+ICsgICAgICAgICAgICAgICAgVlZFTkNfSERSX1BRX0JUMjAyMCA6IFZWRU5D X0hEUl9QUTsKPiArICAgICAgICBlbHNlIGlmIChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RS Q19CVDIwMjBfMTAKPiArICAgICAgICAgICAgICAgICB8fCBhdmN0eC0+Y29sb3JfdHJjID09IEFW Q09MX1RSQ19BUklCX1NURF9CNjcpCj4gKyAgICAgICAgICAgIHBhcmFtcy5tX0hkck1vZGUgPSAo YXZjdHgtPmNvbG9yX3RyYyA9PSBBVkNPTF9UUkNfQlQyMDIwXzEwIHx8Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9PQo+IEFWQ09MX1BS SV9CVDIwMjAgfHwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29s b3JzcGFjZSA9PSBBVkNPTF9TUENfQlQyMDIwX05DTAo+IHx8Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BDX0JUMjAyMF9DTCkK PiA/Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVkVOQ19IRFJfSExHX0JUMjAy MCA6IFZWRU5DX0hEUl9ITEc7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHBhcmFtcy5tX0hkck1v ZGUgPT0gVlZFTkNfSERSX09GRgo+ICsgICAgICAgICYmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVz ICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRAo+ICsgICAgICAgICAgICB8fCBhdmN0eC0+Y29sb3Jz cGFjZSAhPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQpKSB7Cj4gKyAgICAgICAgcGFyYW1zLm1fdnVp UGFyYW1ldGVyc1ByZXNlbnQgPSAxOwo+ICsgICAgICAgIHBhcmFtcy5tX2NvbG91ckRlc2NyaXB0 aW9uUHJlc2VudCA9IHRydWU7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcGFyYW1zLm1fUkNOdW1QYXNz ZXMgPSAxOwo+ICsgICAgZW4gPSBOVUxMOwo+ICsgICAgd2hpbGUgKChlbiA9IGF2X2RpY3RfZ2V0 KHMtPm9wdGlvbnMudnZlbmNfb3B0cywgIiIsIGVuLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfREVCVUcsICJ2dmVuY19zZXRfcGFyYW06ICclczolcydcbiIsIGVuLT5rZXksCj4g KyAgICAgICAgICAgICAgIGVuLT52YWx1ZSk7Cj4gKyAgICAgICAgcGFyc2VfcmV0ID0gdnZlbmNf c2V0X3BhcmFtKCZwYXJhbXMsIGVuLT5rZXksIGVuLT52YWx1ZSk7Cj4gKyAgICAgICAgc3dpdGNo IChwYXJzZV9yZXQpIHsKPiArICAgICAgICBjYXNlIFZWRU5DX1BBUkFNX0JBRF9OQU1FOgo+ICsg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5rbm93biB2dmVuYyBv cHRpb246ICVzLlxuIiwKPiArICAgICAgICAgICAgICAgICAgIGVuLT5rZXkpOwo+ICsgICAgICAg ICAgICBicmVhazsKPiArICAgICAgICBjYXNlIFZWRU5DX1BBUkFNX0JBRF9WQUxVRToKPiArICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywKPiArICAgICAgICAgICAgICAg ICAgICJJbnZhbGlkIHZ2ZW5jIHZhbHVlIGZvciAlczogJXMuXG4iLCBlbi0+a2V5LAo+IGVuLT52 YWx1ZSk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKG1lbWNtcChlbi0+ a2V5LCAicmNzdGF0c2ZpbGUiLCAxMSkgPT0gMCB8fAo+ICsgICAgICAgICAgICBtZW1jbXAoZW4t PmtleSwgIlJDU3RhdHNGaWxlIiwgMTEpID09IDApIHsKPiArICAgICAgICAgICAgc3RybmNweShz dGF0c2ZpbGUsIGVuLT52YWx1ZSwgc2l6ZW9mKHN0YXRzZmlsZSkgLSAxKTsKPiArICAgICAgICAg ICAgc3RhdHNmaWxlW3NpemVvZihzdGF0c2ZpbGUpIC0gMV0gPSAnXDAnOwo+ICsgICAgICAgIH0K PiArICAgIH0KPiArCj4gKyAgICBpZiAocGFyYW1zLm1fUkNQYXNzICE9IC0xICYmIHBhcmFtcy5t X1JDTnVtUGFzc2VzID09IDEpCj4gKyAgICAgICAgcGFyYW1zLm1fUkNOdW1QYXNzZXMgPSAyOyAg ICAgICAvLyBlbmFibGUgMnBhc3MgbW9kZQo+ICsKPiArI2lmIFZWRU5DX1ZFUlNJT05fTUFKT1Ig PiAxIHx8IChWVkVOQ19WRVJTSU9OX01BSk9SID09IDEgJiYKPiBWVkVOQ19WRVJTSU9OX01JTk9S ID4gOCkKPiArICAgIGlmKGF2Y3R4LT5yY19tYXhfcmF0ZSkgewo+ICsgICAgICAgIGlmKCFhdmN0 eC0+Yml0X3JhdGUpIHsKPiArICAgICAgICAgICAgYXZfbG9nKCBhdmN0eCwgQVZfTE9HX0VSUk9S LCAiUmF0ZSBjb250cm9sIHBhcmFtZXRlcnMgc2V0Cj4gd2l0aG91dCBhIGJpdHJhdGVcbiIpOwo+ ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIH0KPiArICAg ICAgICBlbHNlCj4gKyAgICAgICAgICAgIHBhcmFtcy5tX1JDTWF4Qml0cmF0ZSA9IGF2Y3R4LT5y Y19tYXhfcmF0ZTsKPiArICAgIH0KPiArI2VuZGlmCj4gKwo+ICsgICAgcy0+dnZlbmNFbmMgPSB2 dmVuY19lbmNvZGVyX2NyZWF0ZSgpOwo+ICsgICAgaWYgKE5VTEwgPT0gcy0+dnZlbmNFbmMpIHsK PiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBjcmVhdGUgdnZj IGVuY29kZXIKPiAodnZlbmMpXG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p Owo+ICsgICAgfQo+ICsKPiArICAgIHZ2ZW5jX3NldF9tc2dfY2FsbGJhY2soJnBhcmFtcywgcy0+ dnZlbmNFbmMsIGZmX3Z2ZW5jX2xvZ19jYWxsYmFjayk7Cj4gKyAgICByZXQgPSB2dmVuY19lbmNv ZGVyX29wZW4ocy0+dnZlbmNFbmMsICZwYXJhbXMpOwo+ICsgICAgaWYgKDAgIT0gcmV0KSB7Cj4g KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJjYW5ub3Qgb3BlbiB2dmMgZW5j b2RlciAodnZlbmMpOgo+ICVzXG4iLAo+ICsgICAgICAgICAgICAgICB2dmVuY19nZXRfbGFzdF9l cnJvcihzLT52dmVuY0VuYykpOwo+ICsgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZl bmNFbmMpOwo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgdnZlbmNfZ2V0X2NvbmZpZyhzLT52dmVuY0VuYywgJnBhcmFtcyk7ICAgICAvLyBnZXQg dGhlIGFkYXB0ZWQgY29uZmlnCj4gKwo+ICsgICAgaWYgKHBhcmFtcy5tX3ZlcmJvc2l0eSA+PSBW VkVOQ19JTkZPCj4gKyAgICAgICAgJiYgYXZfbG9nX2dldF9sZXZlbCgpIDw9IEFWX0xPR19JTkZP KSB7Cj4gKyAgICAgICAgZmZfdnZlbmNfaW50ZXJuYWxMb2coYXZjdHgsIHBhcmFtcy5tX3ZlcmJv c2l0eSwgInZ2ZW5jIHZlcnNpb246Cj4gJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnZlbmNfZ2V0X3ZlcnNpb24oKSk7Cj4gKyAgICAgICAgZmZfdnZlbmNfaW50ZXJuYWxM b2coYXZjdHgsIHBhcmFtcy5tX3ZlcmJvc2l0eSwgIiVzXG4iLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZ2ZW5jX2dldF9jb25maWdfYXNfc3RyaW5nKCZwYXJhbXMsCj4gKwo+IHBh cmFtcy5tX3ZlcmJvc2l0eSkpOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICB2dmVuY01zZ0xl dmVsIGxvZ2x2bCA9IFZWRU5DX0lORk87Cj4gKyAgICAgICAgaWYgKGF2X2xvZ19nZXRfbGV2ZWwo KSA+PSBBVl9MT0dfREVCVUcpCj4gKyAgICAgICAgICAgIGxvZ2x2bCA9IFZWRU5DX0RFVEFJTFM7 Cj4gKyAgICAgICAgZWxzZSBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19WRVJCT1NF KQo+ICsgICAgICAgICAgICBsb2dsdmwgPSBWVkVOQ19WRVJCT1NFOwo+ICsKPiArICAgICAgICBh dl9sb2coYXZjdHgsIGF2X2xvZ19nZXRfbGV2ZWwoKSwgInZ2ZW5jIHZlcnNpb246ICVzXG4iLAo+ ICsgICAgICAgICAgICAgIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+ICsgICAgICAgIGF2X2xvZyhh dmN0eCwgYXZfbG9nX2dldF9sZXZlbCgpLCAiJXNcbiIsCj4gKyAgICAgICAgICAgICAgdnZlbmNf Z2V0X2NvbmZpZ19hc19zdHJpbmcoJnBhcmFtcywgbG9nbHZsICkpOwo+ICsgICAgfQo+ICsKPiAr ICAgIGlmIChwYXJhbXMubV9SQ051bVBhc3NlcyA9PSAyKSB7Cj4gKyAgICAgICAgcmV0ID0gdnZl bmNfaW5pdF9wYXNzKHMtPnZ2ZW5jRW5jLCBwYXJhbXMubV9SQ1Bhc3MgLSAxLAo+ICZzdGF0c2Zp bGVbMF0pOwo+ICsgICAgICAgIGlmICgwICE9IHJldCkgewo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaW5pdCBw YXNzICVkIGZvciB2dmMgZW5jb2RlciAodnZlbmMpOiAlc1xuIiwKPiArICAgICAgICAgICAgICAg ICAgIHBhcmFtcy5tX1JDUGFzcywgdnZlbmNfZ2V0X2xhc3RfZXJyb3Iocy0+dnZlbmNFbmMpKTsK PiArICAgICAgICAgICAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52dmVuY0VuYyk7Cj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsK PiArICAgIHMtPnBBVSA9IHZ2ZW5jX2FjY2Vzc1VuaXRfYWxsb2MoKTsKPiArICAgIHZ2ZW5jX2Fj Y2Vzc1VuaXRfYWxsb2NfcGF5bG9hZChzLT5wQVUsIGF2Y3R4LT53aWR0aCAqIGF2Y3R4LT5oZWln aHQpOwo+CkRvIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gcmVzdWx0PwoKPiArCj4g KyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKSB7Cj4g KyAgICAgICAgcmV0ID0gdnZlbmNfZ2V0X2hlYWRlcnMocy0+dnZlbmNFbmMsIHMtPnBBVSk7Cj4g KyAgICAgICAgaWYgKDAgIT0gcmV0KSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgaGVhZGVycyAoU1BT LFBQUykgZnJvbSB2dmMgZW5jb2Rlcih2dmVuYyk6Cj4gJXNcbiIsCj4gKyAgICAgICAgICAgICAg ICAgICB2dmVuY19nZXRfbGFzdF9lcnJvcihzLT52dmVuY0VuYykpOwo+ICsgICAgICAgICAgICB2 dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChzLT5wQVUtPnBh eWxvYWRVc2VkU2l6ZSA8PSAwKSB7Cj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uo cy0+dnZlbmNFbmMpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSA9IHMtPnBB VS0+cGF5bG9hZFVzZWRTaXplOwo+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRhdGEgPQo+ICsgICAg ICAgICAgICBhdl9tYWxsb2N6KGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSArCj4gQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRSk7Cj4gKyAgICAgICAgaWYgKCFhdmN0eC0+ZXh0cmFkYXRhKSB7Cj4g KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICAg ICAgICAgIkNhbm5vdCBhbGxvY2F0ZSBWVkMgaGVhZGVyIG9mIHNpemUgJWQuXG4iLAo+ICsgICAg ICAgICAgICAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplKTsKPiArICAgICAgICAgICAgdnZl bmNfZW5jb2Rlcl9jbG9zZShzLT52dmVuY0VuYyk7Cj4gKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBtZW1jcHkoYXZjdHgtPmV4 dHJhZGF0YSwgcy0+cEFVLT5wYXlsb2FkLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUpOwo+ICsgICAg ICAgIG1lbXNldChhdmN0eC0+ZXh0cmFkYXRhICsgYXZjdHgtPmV4dHJhZGF0YV9zaXplLCAwLAo+ ICsgICAgICAgICAgICAgICBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKPiArICAgIH0K PiArICAgIHMtPmVuY29kZURvbmUgPSBmYWxzZTsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZlbmNfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0 ICogYXZjdHgpCj4gK3sKPiArICAgIFZWZW5DQ29udGV4dCAqcyA9IChWVmVuQ0NvbnRleHQgKikg YXZjdHgtPnByaXZfZGF0YTsKPiArICAgIGlmIChzLT52dmVuY0VuYykgewo+ICsgICAgICAgIGlm IChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX1ZFUkJPU0UpCj4gKyAgICAgICAgICAgIHZ2 ZW5jX3ByaW50X3N1bW1hcnkocy0+dnZlbmNFbmMpOwo+ICsKPiArICAgICAgICBpZiAoMCAhPSB2 dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKSkgewo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBjbG9zZSB2dmVuY1xuIik7Cj4gKyAgICAgICAg ICAgIHJldHVybiAtMTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgdnZlbmNfYWNj ZXNzVW5pdF9mcmVlKHMtPnBBVSwgdHJ1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBhdl9jb2xkIGludCBmZl92dmVuY19lbmNvZGVfZnJhbWUoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBBVlBhY2tldAo+ICpwa3QsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqZnJhbWUsIGludAo+ICpnb3RfcGFja2V0KQo+ ICt7Cj4gKyAgICBWVmVuQ0NvbnRleHQgKnMgPSAoVlZlbkNDb250ZXh0ICopIGF2Y3R4LT5wcml2 X2RhdGE7Cj4gKyAgICB2dmVuY1lVVkJ1ZmZlciAqcHl1dmJ1ZjsKPiArICAgIHZ2ZW5jWVVWQnVm ZmVyIHl1dmJ1ZjsKPiArICAgIGludCBwaWN0X3R5cGU7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiAr ICAgIHB5dXZidWYgPSBOVUxMOwo+ICsgICAgaWYgKGZyYW1lKSB7CgorICAgICAgICBpZiAoYXZj dHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSkgewo+CjggYml0cyBhcmUgc3Rp bGwgd2lkZSB1c2VkLiBJcyBpdCBoYXJkIHRvIGFkZCA4Yml0cyBzdXBwb3J0PwoKPiArICAgICAg ICAgICAgdnZlbmNfWVVWQnVmZmVyX2RlZmF1bHQoJnl1dmJ1Zik7Cj4gKyAgICAgICAgICAgIHl1 dmJ1Zi5wbGFuZXNbMF0ucHRyID0gKGludDE2X3QgKikgZnJhbWUtPmRhdGFbMF07Cj4gKyAgICAg ICAgICAgIHl1dmJ1Zi5wbGFuZXNbMV0ucHRyID0gKGludDE2X3QgKikgZnJhbWUtPmRhdGFbMV07 Cj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMl0ucHRyID0gKGludDE2X3QgKikgZnJhbWUt PmRhdGFbMl07Cj4gKwo+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzBdLndpZHRoID0gZnJh bWUtPndpZHRoOwo+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzBdLmhlaWdodCA9IGZyYW1l LT5oZWlnaHQ7Cj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMF0uc3RyaWRlID0gZnJhbWUt PmxpbmVzaXplWzBdID4+IDE7ICAvLyBzdHJpZGUKPiBpcyB1c2VkIGluIHNhbXBsZXMgKDE2Yml0 KSBpbiB2dmVuYywgZmZtcGVnIHVzZXMgc3RyaWRlIGluIGJ5dGVzCj4gKwo+ICsgICAgICAgICAg ICB5dXZidWYucGxhbmVzWzFdLndpZHRoID0gZnJhbWUtPndpZHRoID4+IDE7Cj4gKyAgICAgICAg ICAgIHl1dmJ1Zi5wbGFuZXNbMV0uaGVpZ2h0ID0gZnJhbWUtPmhlaWdodCA+PiAxOwo+ICsgICAg ICAgICAgICB5dXZidWYucGxhbmVzWzFdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVsxXSA+PiAx Owo+ICsKPiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1syXS53aWR0aCA9IGZyYW1lLT53aWR0 aCA+PiAxOwo+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLmhlaWdodCA9IGZyYW1lLT5o ZWlnaHQgPj4gMTsKPiArICAgICAgICAgICAgeXV2YnVmLnBsYW5lc1syXS5zdHJpZGUgPSBmcmFt ZS0+bGluZXNpemVbMl0gPj4gMTsKPiArCj4gKyAgICAgICAgICAgIHl1dmJ1Zi5jdHMgPSBmcmFt ZS0+cHRzOwo+ICsgICAgICAgICAgICB5dXZidWYuY3RzVmFsaWQgPSB0cnVlOwo+ICsgICAgICAg ICAgICBweXV2YnVmID0gJnl1dmJ1ZjsKPiArICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgICAgICJ1bnN1 cHBvcnRlZCBpbnB1dCBjb2xvcnNwYWNlISBpbnB1dCBtdXN0IGJlCj4geXV2NDIwcDEwbGUiKTsK PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKCFzLT5lbmNvZGVEb25lKSB7Cj4gKyAgICAgICAgcmV0ID0gdnZl bmNfZW5jb2RlKHMtPnZ2ZW5jRW5jLCBweXV2YnVmLCBzLT5wQVUsICZzLT5lbmNvZGVEb25lKTsK PiArICAgICAgICBpZiAocmV0ICE9IDApIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJlcnJvciBpbiB2dmVuYzo6ZW5jb2RlIC0KPiByZXQ6JWRcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICByZXQpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgKmdvdF9wYWNrZXQg PSAwOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChzLT5wQVUt PnBheWxvYWRVc2VkU2l6ZSA+IDApIHsKPiArICAgICAgICByZXQgPSBmZl9nZXRfZW5jb2RlX2J1 ZmZlcihhdmN0eCwgcGt0LCBzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSwKPiAwKTsKPiArICAgICAg ICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkVycm9yIGdldHRpbmcgb3V0cHV0IHBhY2tldC5cbiIpOwo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbWVtY3B5KHBrdC0+ZGF0YSwgcy0+ cEFVLT5wYXlsb2FkLCBzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSk7Cj4gKwo+ICsgICAgICAgIGlm IChzLT5wQVUtPmN0c1ZhbGlkKQo+ICsgICAgICAgICAgICBwa3QtPnB0cyA9IHMtPnBBVS0+Y3Rz Owo+ICsgICAgICAgIGlmIChzLT5wQVUtPmR0c1ZhbGlkKQo+ICsgICAgICAgICAgICBwa3QtPmR0 cyA9IHMtPnBBVS0+ZHRzOwo+ICsgICAgICAgIHBrdC0+ZmxhZ3MgfD0gQVZfUEtUX0ZMQUdfS0VZ ICogcy0+cEFVLT5yYXA7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAocy0+cEFVLT5zbGljZVR5cGUp IHsKPiArICAgICAgICBjYXNlIFZWRU5DX0lfU0xJQ0U6Cj4gKyAgICAgICAgICAgIHBpY3RfdHlw ZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBj YXNlIFZWRU5DX1BfU0xJQ0U6Cj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVf VFlQRV9QOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNlIFZWRU5DX0JfU0xJ Q0U6Cj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COwo+ICsgICAg ICAgICAgICBicmVhazsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gcGljdHVyZSB0eXBlCj4gZW5jb3VudGVyZWQu XG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBmZl9zaWRlX2RhdGFfc2V0X2VuY29kZXJfc3RhdHMocGt0LCAwLCBO VUxMLCAwLCBwaWN0X3R5cGUpOwo+ICsKPiArICAgICAgICAqZ290X3BhY2tldCA9IDE7Cj4gKwo+ ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICAqZ290X3BhY2tl dCA9IDA7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdHNfdnZl bmNbXSA9IHsKPiArICAgIEFWX1BJWF9GTVRfWVVWNDIwUDEwTEUsCj4gKyAgICBBVl9QSVhfRk1U X05PTkUKPiArfTsKPiArCj4gKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFZWZW5DQ29udGV4 dCwgeCkKPiArI2RlZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFH X0VOQ09ESU5HX1BBUkFNCj4gK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBsaWJ2dmVuY19vcHRpb25z W10gPSB7Cj4gKyAgICB7InByZXNldCIsICJzZXQgZW5jb2RpbmcgcHJlc2V0KDA6IGZhc3RlciAt IDQ6IHNsb3dlciIsIE9GRlNFVCgKPiBvcHRpb25zLnByZXNldCksIEFWX09QVF9UWVBFX0lOVCwg ey5pNjQgPSAyfSAsIDAgLCA0ICwgVkUsICJwcmVzZXQifSwKPiArICAgICAgICB7ICJmYXN0ZXIi LCAiMCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX0ZBU1RFUn0sCj4gSU5U X01JTiwgSU5UX01BWCwgVkUsICJwcmVzZXQiIH0sCj4gKyAgICAgICAgeyAiZmFzdCIsICAgIjEi LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWVkVOQ19GQVNUfSwKPiAgSU5UX01JTiwg SU5UX01BWCwgVkUsICJwcmVzZXQiIH0sCj4gKyAgICAgICAgeyAibWVkaXVtIiwgIjIiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBWVkVOQ19NRURJVU19LAo+IElOVF9NSU4sIElOVF9N QVgsIFZFLCAicHJlc2V0IiB9LAo+ICsgICAgICAgIHsgInNsb3ciLCAgICIzIiwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0ID0gVlZFTkNfU0xPV30sCj4gIElOVF9NSU4sIElOVF9NQVgsIFZF LCAicHJlc2V0IiB9LAo+ICsgICAgICAgIHsgInNsb3dlciIsICI0IiwgMCwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0ID0gVlZFTkNfU0xPV0VSfSwKPiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInBy ZXNldCIgfSwKPiArICAgIHsgInFwIiAgICAgLCAic2V0IHF1YW50aXphdGlvbiIsIE9GRlNFVChv cHRpb25zLnFwKSwKPiBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2NCA9IC0xfSwgLTEgLCA2MyAsVkUs ICJxcF9tb2RlIiB9LAo+ICsgICAgeyAicGVyaW9kIiAsICJzZXQgKGludHJhKSByZWZyZXNoIHBl cmlvZCBpbiBzZWNvbmRzIiwKPiBPRkZTRVQob3B0aW9ucy5pbnRyYVJlZnJlc2hTZWMpLCBBVl9P UFRfVFlQRV9JTlQsICB7Lmk2NCA9IDF9LCAgMSAsIElOVF9NQVgKPiAsVkUsImlyZWZyZXNoc2Vj IiB9LAo+ICsgICAgeyAic3Viam9wdCIsICJzZXQgc3ViamVjdGl2ZSAocGVyY2VwdHVhbGx5IG1v dGl2YXRlZCkgb3B0aW1pemF0aW9uIiwKPiBPRkZTRVQob3B0aW9ucy5zdWJqZWN0aXZlT3B0aW1p emF0aW9uKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQgPSAxfSwgIDAgLAo+IDEsIFZFfSwKPgor ICAgIHsgImJpdGRlcHRoOCIsICJzZXQgOGJpdCBjb2RpbmcgbW9kZSIsIE9GRlNFVChvcHRpb25z LmZsYWc4Yml0Q29kaW5nKSwKPiBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDB9LCAgMCAsIDEs IFZFfSwKPgp3aHkgYml0ZGVwdGg4IGlzIHNvIGltcG9ydGFudCwgY2FuIHdlIGhpZGUgaXQgaW4g dnZlbmMtcGFyYW1zPwoKPiArICAgIHsgInZ2ZW5jLXBhcmFtcyIsICJzZXQgdGhlIHZ2ZW5jIGNv bmZpZ3VyYXRpb24gdXNpbmcgYSA6LXNlcGFyYXRlZAo+IGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFt ZXRlcnMiLCBPRkZTRVQob3B0aW9ucy52dmVuY19vcHRzKSwKPiBBVl9PUFRfVFlQRV9ESUNULCB7 IDAgfSwgMCwgMCwgVkUgfSwKCkhvdyB0byBzZXQgdGhlIHZ2ZW5jLXBhcmFtcywgYmV0dGVyIHBy b3ZpZGUgc29tZSBkb2N1bWVudHMKCj4gKyAgICB7ICJsZXZlbGlkYyIsICJ2dmMgbGV2ZWxfaWRj IiwgT0ZGU0VUKCBvcHRpb25zLmxldmVsSWRjKSwKPiBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0g MH0sIDAsIDEwNSwgVkUsICJsZXZlbGlkYyJ9LAo+ICsgICAgICAgIHsgIjAiLCAgICJhdXRvIiwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMH0sICBJTlRfTUlOLAo+IElOVF9NQVgsIFZF LCAibGV2ZWxpZGMifSwKPiArICAgICAgICB7ICIxIiwgICAiMSIgICAsIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2NCA9IDE2fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0s Cj4gKyAgICAgICAgeyAiMiIsICAgIjIiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSAzMn0sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICsgICAgICAgIHsg IjIuMSIsICIyLjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMzV9LCBJTlRfTUlO LAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiArICAgICAgICB7ICIzIiwgICAiMyIgICAs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDQ4fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBW RSwgImxldmVsaWRjIn0sCj4gKyAgICAgICAgeyAiMy4xIiwgIjMuMSIgLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQgPSA1MX0sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9 LAo+ICsgICAgICAgIHsgIjQiLCAgICI0IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 ID0gNjR9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiArICAgICAgICB7 ICI0LjEiLCAiNC4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDY3fSwgSU5UX01J TiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gKyAgICAgICAgeyAiNSIsICAgIjUiICAg LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA4MH0sIElOVF9NSU4sCj4gSU5UX01BWCwg VkUsICJsZXZlbGlkYyJ9LAo+ICsgICAgICAgIHsgIjUuMSIsICI1LjEiICwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0ID0gODN9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMi fSwKPiArICAgICAgICB7ICI1LjIiLCAiNS4yIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2 NCA9IDg2fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gKyAgICAgICAg eyAiNiIsICAgIjYiICAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA5Nn0sIElOVF9N SU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICsgICAgICAgIHsgIjYuMSIsICI2LjEi ICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gOTl9LCBJTlRfTUlOLAo+IElOVF9NQVgs IFZFLCAibGV2ZWxpZGMifSwKPiArICAgICAgICB7ICI2LjIiLCAiNi4yIiAsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7Lmk2NCA9IDEwMn0sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlk YyJ9LAo+ICsgICAgICAgIHsgIjYuMyIsICI2LjMiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gMTA1fSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gKyAgICB7 ICJ0aWVyIiwgInNldCB2dmMgdGllciIsIE9GRlNFVCggb3B0aW9ucy50aWVyKSwgQVZfT1BUX1RZ UEVfSU5ULAo+IHsuaTY0ID0gMH0sICAwICwgMSAsIFZFLCAidGllciJ9LAo+ICsgICAgICAgIHsg Im1haW4iLCAibWFpbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDB9LCBJTlRfTUlO LAo+IElOVF9NQVgsIFZFLCAidGllciJ9LAo+ICsgICAgICAgIHsgImhpZ2giLCAiaGlnaCIsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDF9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAi dGllciJ9LAo+ICsgICAge05VTEx9Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBj bGFzc19saWJ2dmVuYyA9IHsKPiArICAgIC5jbGFzc19uYW1lID0gImxpYnZ2ZW5jLXZ2YyBlbmNv ZGVyIiwKPiArICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4gKyAgICAu b3B0aW9uICAgICA9IGxpYnZ2ZW5jX29wdGlvbnMsCj4gKyAgICAudmVyc2lvbiAgICA9IExJQkFW VVRJTF9WRVJTSU9OX0lOVCwKPiArfTsKPiArCj4gK0ZGQ29kZWMgZmZfbGlidnZlbmNfZW5jb2Rl ciA9IHsKPiArICAgIC5wLm5hbWUgICAgICAgICA9ICJsaWJ2dmVuYyIsCj4gKyAgICBDT0RFQ19M T05HX05BTUUoIkguMjY2IC8gVlZDIEVuY29kZXIgVlZlbkMiKSwKPiArICAgIC5wLnR5cGUgICAg ICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKPiArICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NP REVDX0lEX1ZWQywKPiArICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8 IEFWX0NPREVDX0NBUF9PVEhFUl9USFJFQURTLAo+ICsgICAgLnAucHJvZmlsZXMgICAgID0gTlVM TF9JRl9DT05GSUdfU01BTEwoZmZfdnZjX3Byb2ZpbGVzKSwKPiArICAgIC5wLnByaXZfY2xhc3Mg ICA9ICZjbGFzc19saWJ2dmVuYywKPiArICAgIC5wLndyYXBwZXJfbmFtZSA9ICJsaWJ2dmVuYyIs Cj4gKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoVlZlbkNDb250ZXh0KSwKPiArICAgIC5w LnBpeF9mbXRzICAgICA9IHBpeF9mbXRzX3Z2ZW5jLAo+ICsgICAgLmluaXQgICAgICAgICAgID0g ZmZfdnZlbmNfZW5jb2RlX2luaXQsCj4gKyAgICBGRl9DT0RFQ19FTkNPREVfQ0IoZmZfdnZlbmNf ZW5jb2RlX2ZyYW1lKSwKPiArICAgIC5jbG9zZSAgICAgICAgICA9IGZmX3Z2ZW5jX2VuY29kZV9j bG9zZSwKPiArICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMs Cj4gK307Cj4gLS0KPiAyLjM0LjEKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1k ZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZt cGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWct ZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVn Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0 IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0 aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==