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 7283649259 for ; Tue, 7 May 2024 13:53:48 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3745B68D726; Tue, 7 May 2024 16:53:46 +0300 (EEST) Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5775668D609 for ; Tue, 7 May 2024 16:53:39 +0300 (EEST) Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-1ecd9a81966so34525095ad.0 for ; Tue, 07 May 2024 06:53:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715090017; x=1715694817; darn=ffmpeg.org; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :from:to:cc:subject:date:message-id:reply-to; bh=/638IeuBqmzdXhpnDkUEquqEIT4kKMyF/jM88aiVN9E=; b=d4rM2QFX/eLPXDk67w5UhW2I/Zv3EIoxXrsEv5s3pxc3SKl7QrvQwAXZj9BvZ+qV4D /VhrbdNer5hCzkeTxOUZfQkDceIGOZ3Vry3KMsqrLupJ+kbZpr/QFBZyiDuTSre993aE /F81YEAMvhDihQo3OrqrTqVvmJYWtTI/kRoofe9HPXhq+kaPGhOI3y2gBuueLwfls12T natYGBMabahwQueUCYtnBVjJvSdrRlz07H0qSbOqH1v09EvRP7yH4FQPdTBBNeF+LgmC YebSCBfzuR0qQ9dP9sjbNFXbryYBSht0pRCJYvmrbK9xLNsRruxVPrQWJyBttjxABOtG xPfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715090017; x=1715694817; h=message-id:in-reply-to:to:references:date:subject:mime-version:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/638IeuBqmzdXhpnDkUEquqEIT4kKMyF/jM88aiVN9E=; b=ITod+SBC6/p/uXgvsVAgkkhDAZQxsbBEWmVTG7cbWiKXaK3s3BgAAaCWzUnbIMDGZP ZITRYvYr75tDbjhn8w1HTqymL+cCUaeA1GXbEC2UuXCY81rnAK8vfgM2ziLWXaGxzoqL EschcpY/Xa1LGTBmjNArDxhHZR6EROtUxMf13Tg+8mcWxpOeM4Thp68XQMPUUb5tpTMH vf/h5kR+WmBucvQlH+oSNS6DJextzyzNhoz/+heUDmt/oyY5wn26wOYDXSSdIFJtN+7P RjEw8Zvnt8xlZH5GHXAJqEttuGjyo3JaVsBLI3Jn1M/8takas3zW19PViKjPYyJhEIjC 8gqw== X-Gm-Message-State: AOJu0YwQBbw4besFKHMvo2oOt3icyRuTOa0AybqJneNJD6C514XoAFTB MFrkm+/vUx8Zoj6mORKVcdvpsZKH6REFQDybObXvMS0rsBFhtuBQryrfPnG2 X-Google-Smtp-Source: AGHT+IE7lof/3glEr54I/OLH85qAEDTdNKXUpPfaegVA8T7UvtiS73Umu0STe/cJS0+Ktxww98N6TA== X-Received: by 2002:a17:902:ce8e:b0:1eb:8299:db35 with SMTP id d9443c01a7336-1ee6356b8camr37716235ad.32.1715090016762; Tue, 07 May 2024 06:53:36 -0700 (PDT) Received: from smtpclient.apple ([2804:d55:9507:1500:9008:575f:9f19:a5ca]) by smtp.gmail.com with ESMTPSA id u9-20020a170902e5c900b001ebd7ef383fsm10056522plf.203.2024.05.07.06.53.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 May 2024 06:53:36 -0700 (PDT) From: Christian Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.500.171.1.1\)) Date: Tue, 7 May 2024 15:53:22 +0200 References: <20240506170319.43685-1-chris10317h5@gmail.com> <20240506170319.43685-2-chris10317h5@gmail.com> To: FFmpeg development discussions and patches In-Reply-To: Message-Id: <636EA1AB-0195-4505-8980-594045F47AB1@gmail.com> X-Mailer: Apple Mail (2.3774.500.171.1.1) 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: Cj4gT24gNy4gTWF5IDIwMjQsIGF0IDAzOjUzLCBOdW8gTWkgPG51b21pMjAyMUBnbWFpbC5jb20+ IHdyb3RlOgo+IAo+IEhpIENocmlzdGlhbiwKPiBUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KPiBM ZXQgdXMgcmV2aWV3IGFuZCBtZXJnZSB0aGUgZW5jb2RlciBwYXJ0Lgo+IAo+IE9uIFR1ZSwgTWF5 IDcsIDIwMjQgYXQgMTowNeKAr0FNIENocmlzdGlhbiBCYXJ0bmlrIDxjaHJpczEwMzE3aDVAZ21h aWwuY29tIDxtYWlsdG86Y2hyaXMxMDMxN2g1QGdtYWlsLmNvbT4+Cj4gd3JvdGU6Cj4gCj4+IEZy b206IFRob21hcyBTaWVkZWwgPHRob21hcy5mZkBzcGluLWRpZ2l0YWwuY29tPgo+PiAKPj4gQWRk IGV4dGVybmFsIGVuY29kZXIgVlZlbkMgZm9yIEgyNjYvVlZDIGVuY29kaW5nLgo+PiBSZWdpc3Rl ciBuZXcgZW5jb2RlciBsaWJ2dmVuYy4KPj4gQWRkIGxpYnZ2ZW5jIHRvIHdyYXAgdGhlIHZ2ZW5j IGludGVyZmFjZS4KPj4gbGlidnZlbmMgaW1wbGVtZW50cyBlbmNvZGVyIG9wdGlvbjogcHJlc2V0 LHFwLHBlcmlvZCxzdWJqb3B0LAo+PiB2dmVuYy1wYXJhbXMsbGV2ZWxpZGMsdGllci4KPj4gRW5h YmxlIGVuY29kZXIgYnkgYWRkaW5nIC0tZW5hYmxlLWxpYnZ2ZW5jIGluIGNvbmZpZ3VyZSBzdGVw Lgo+PiAKPj4gQ28tYXV0aG9yZWQtYnk6IENocmlzdGlhbiBCYXJ0bmlrIGNocmlzMTAzMTdoNUBn bWFpbC5jb20KPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEJhcnRuaWsgPGNocmlzMTAzMTdo NUBnbWFpbC5jb20+Cj4+IC0tLQo+PiBjb25maWd1cmUgICAgICAgICAgICAgIHwgICA0ICsKPj4g bGliYXZjb2RlYy9NYWtlZmlsZSAgICB8ICAgMSArCj4+IGxpYmF2Y29kZWMvYWxsY29kZWNzLmMg fCAgIDEgKwo+PiBsaWJhdmNvZGVjL2xpYnZ2ZW5jLmMgIHwgNTAxICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4+IDQgZmlsZXMgY2hhbmdlZCwgNTA3IGluc2VydGlv bnMoKykKPj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlidnZlbmMuYwo+PiAKPj4g ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+PiBpbmRleCBlZDc0NTgzYTZmLi5j YjMxMmQ5YzczIDEwMDc1NQo+PiAtLS0gYS9jb25maWd1cmUKPj4gKysrIGIvY29uZmlndXJlCj4+ IEBAIC0yOTMsNiArMjkzLDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0Ogo+PiAgIC0tZW5h YmxlLWxpYnZvcmJpcyAgICAgICBlbmFibGUgVm9yYmlzIGVuL2RlY29kaW5nIHZpYSBsaWJ2b3Ji aXMsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBl eGlzdHMgW25vXQo+PiAgIC0tZW5hYmxlLWxpYnZweCAgICAgICAgICBlbmFibGUgVlA4IGFuZCBW UDkgZGUvZW5jb2RpbmcgdmlhIGxpYnZweCBbbm9dCj4+ICsgIC0tZW5hYmxlLWxpYnZ2ZW5jICAg ICAgICBlbmFibGUgSC4yNjYvVlZDIGVuY29kaW5nIHZpYSB2dmVuYyBbbm9dCj4+ICAgLS1lbmFi bGUtbGlid2VicCAgICAgICAgIGVuYWJsZSBXZWJQIGVuY29kaW5nIHZpYSBsaWJ3ZWJwIFtub10K Pj4gICAtLWVuYWJsZS1saWJ4MjY0ICAgICAgICAgZW5hYmxlIEguMjY0IGVuY29kaW5nIHZpYSB4 MjY0IFtub10KPj4gICAtLWVuYWJsZS1saWJ4MjY1ICAgICAgICAgZW5hYmxlIEhFVkMgZW5jb2Rp bmcgdmlhIHgyNjUgW25vXQo+PiBAQCAtMTk2Niw2ICsxOTY3LDcgQEAgRVhURVJOQUxfTElCUkFS WV9MSVNUPSIKPj4gICAgIGxpYnZtYWYKPj4gICAgIGxpYnZvcmJpcwo+PiAgICAgbGlidnB4Cj4+ ICsgICAgbGlidnZlbmMKPj4gICAgIGxpYndlYnAKPj4gICAgIGxpYnhldmQKPj4gICAgIGxpYnhl dmUKPj4gQEAgLTM1NDgsNiArMzU1MCw3IEBAIGxpYnZweF92cDhfZGVjb2Rlcl9kZXBzPSJsaWJ2 cHgiCj4+IGxpYnZweF92cDhfZW5jb2Rlcl9kZXBzPSJsaWJ2cHgiCj4+IGxpYnZweF92cDlfZGVj b2Rlcl9kZXBzPSJsaWJ2cHgiCj4+IGxpYnZweF92cDlfZW5jb2Rlcl9kZXBzPSJsaWJ2cHgiCj4+ ICtsaWJ2dmVuY19lbmNvZGVyX2RlcHM9ImxpYnZ2ZW5jIgo+PiBsaWJ3ZWJwX2VuY29kZXJfZGVw cz0ibGlid2VicCIKPj4gbGlid2VicF9hbmltX2VuY29kZXJfZGVwcz0ibGlid2VicCIKPj4gbGli eDI2Ml9lbmNvZGVyX2RlcHM9ImxpYngyNjIiCj4+IEBAIC03MDEwLDYgKzcwMTMsNyBAQCBlbmFi bGVkIGxpYnZweCAgICAgICAgICAgICYmIHsKPj4gICAgICAgICBkaWUgImxpYnZweCBlbmFibGVk IGJ1dCBubyBzdXBwb3J0ZWQgZGVjb2RlcnMgZm91bmQiCj4+ICAgICBmaQo+PiB9Cj4+ICtlbmFi bGVkIGxpYnZ2ZW5jICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ2dmVuYyAibGli dnZlbmMgPj0KPj4gMS42LjEiICJ2dmVuYy92dmVuYy5oIiB2dmVuY19nZXRfdmVyc2lvbgo+PiAK Pj4gZW5hYmxlZCBsaWJ3ZWJwICAgICAgICAgICAmJiB7Cj4+ICAgICBlbmFibGVkIGxpYndlYnBf ZW5jb2RlciAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ3ZWJwICJsaWJ3ZWJwCj4+PiA9 IDAuMi4wIiB3ZWJwL2VuY29kZS5oIFdlYlBHZXRFbmNvZGVyVmVyc2lvbgo+PiBkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPj4gaW5kZXggY2Zm NjM0N2JkYi4uNTRkODVmNmFhYSAxMDA2NDQKPj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQo+ PiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlCj4+IEBAIC0xMTU1LDYgKzExNTUsNyBAQCBPQkpT LSQoQ09ORklHX0xJQlZQWF9WUDhfREVDT0RFUikgICAgICAgICArPQo+PiBsaWJ2cHhkZWMubwo+ PiBPQkpTLSQoQ09ORklHX0xJQlZQWF9WUDhfRU5DT0RFUikgICAgICAgICArPSBsaWJ2cHhlbmMu bwo+PiBPQkpTLSQoQ09ORklHX0xJQlZQWF9WUDlfREVDT0RFUikgICAgICAgICArPSBsaWJ2cHhk ZWMubwo+PiBPQkpTLSQoQ09ORklHX0xJQlZQWF9WUDlfRU5DT0RFUikgICAgICAgICArPSBsaWJ2 cHhlbmMubwo+PiArT0JKUy0kKENPTkZJR19MSUJWVkVOQ19FTkNPREVSKSAgICAgICAgICAgKz0g bGlidnZlbmMubwo+PiBPQkpTLSQoQ09ORklHX0xJQldFQlBfRU5DT0RFUikgICAgICAgICAgICAr PSBsaWJ3ZWJwZW5jX2NvbW1vbi5vCj4+IGxpYndlYnBlbmMubwo+PiBPQkpTLSQoQ09ORklHX0xJ QldFQlBfQU5JTV9FTkNPREVSKSAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vCj4+IGxpYndl YnBlbmNfYW5pbWVuY29kZXIubwo+PiBPQkpTLSQoQ09ORklHX0xJQlgyNjJfRU5DT0RFUikgICAg ICAgICAgICArPSBsaWJ4MjY0Lm8KPj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWxsY29kZWNz LmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCj4+IGluZGV4IGY0NzA1NjUxZmIuLmJiMmMzY2Uw MTcgMTAwNjQ0Cj4+IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKPj4gKysrIGIvbGliYXZj b2RlYy9hbGxjb2RlY3MuYwo+PiBAQCAtODAxLDYgKzgwMSw3IEBAIGV4dGVybiBjb25zdCBGRkNv ZGVjIGZmX2xpYnZweF92cDhfZW5jb2RlcjsKPj4gZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGli dnB4X3ZwOF9kZWNvZGVyOwo+PiBleHRlcm4gRkZDb2RlYyBmZl9saWJ2cHhfdnA5X2VuY29kZXI7 Cj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnZweF92cDlfZGVjb2RlcjsKPj4gK2V4dGVy biBjb25zdCBGRkNvZGVjIGZmX2xpYnZ2ZW5jX2VuY29kZXI7Cj4+IC8qIHByZWZlcnJlZCBvdmVy IGxpYndlYnAgKi8KPj4gZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlid2VicF9hbmltX2VuY29k ZXI7Cj4+IGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYndlYnBfZW5jb2RlcjsKPj4gZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvbGlidnZlbmMuYyBiL2xpYmF2Y29kZWMvbGlidnZlbmMuYwo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwLi5jNDU5MjczZjQ0Cj4+IC0t LSAvZGV2L251bGwKPj4gKysrIGIvbGliYXZjb2RlYy9saWJ2dmVuYy5jCj4+IEBAIC0wLDAgKzEs NTAxIEBACj4+ICsvKgo+PiArICogSC4yNjYgZW5jb2RpbmcgdXNpbmcgdGhlIFZWZW5DIGxpYnJh cnkKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRob21hcyBTaWVkZWwKPj4gKyAq Cj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4+ICsgKgo+PiArICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiArICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp Ywo+PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiBGRm1wZWcgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQo+PiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4+ICsgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+ICsgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BCj4+IDAyMTEwLTEzMDEgVVNBCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgImNvbmZpZ19j b21wb25lbnRzLmgiCj4+ICsKPj4gKyNpbmNsdWRlIDx2dmVuYy92dmVuYy5oPgo+PiArI2luY2x1 ZGUgPHZ2ZW5jL3Z2ZW5jQ2ZnLmg+Cj4+ICsjaW5jbHVkZSA8dnZlbmMvdmVyc2lvbi5oPgo+PiAr Cj4+ICsjaW5jbHVkZSAiYXZjb2RlYy5oIgo+PiArI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgi Cj4+ICsjaW5jbHVkZSAiZW5jb2RlLmgiCj4+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPj4gKyNp bmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPj4gKyNpbmNsdWRlICJwcm9maWxlcy5oIgo+PiAr Cj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgo+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9tZW0uaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+PiArI2luY2x1ZGUg ImxpYmF2dXRpbC9vcHQuaCIKPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY29tbW9uLmgiCj4+ICsj aW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2Zy YW1lLmgiCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIgo+PiArCj4+ICt0eXBlZGVmIHN0 cnVjdCBWVmVuQ09wdGlvbnMgewo+PiArICAgIGludCBwcmVzZXQ7ICAgICAgICAgICAgICAgICAv LyBwcmVzZXQgMDogZmFzdGVyICA0OiBzbG93ZXIKPj4gKyAgICBpbnQgcXA7ICAgICAgICAgICAg ICAgICAgICAgLy8gcXVhbnRpemF0aW9uIHBhcmFtZXRlciAwLTYzCj4+ICsgICAgaW50IHN1Ympl Y3RpdmVPcHRpbWl6YXRpb247IC8vIHBlcmNlcHR1YWxseSBtb3RpdmF0ZWQgUVAgYWRhcHRhdGlv biwKPj4gWFBTTlIgYmFzZWQKPj4gKyAgICBpbnQgZmxhZzhiaXRDb2Rpbmc7ICAgICAgICAgLy8g ZW5jb2RlIGluIDhiaXQgaW5zdGVhZCBvZiAxMGJpdAo+PiArICAgIGludCBpbnRyYVJlZnJlc2hT ZWM7ICAgICAgICAvLyBpbnRyYSBwZXJpb2QvcmVmcmVzaCBpbiBzZWNvbmRzCj4+ICsgICAgaW50 IGxldmVsSWRjOyAgICAgICAgICAgICAgIC8vIHZ2YyBsZXZlbF9pZGMKPj4gKyAgICBpbnQgdGll cjsgICAgICAgICAgICAgICAgICAgLy8gdnZjIHRpZXIKPj4gKyAgICBBVkRpY3Rpb25hcnkgKnZ2 ZW5jX29wdHM7Cj4+ICt9IFZWZW5DT3B0aW9uczsKPj4gKwo+PiArdHlwZWRlZiBzdHJ1Y3QgVlZl bkNDb250ZXh0IHsKPj4gKyAgICBBVkNsYXNzICAgICAgICAgKmF2X2NsYXNzOwo+PiArICAgIFZW ZW5DT3B0aW9ucyAgICBvcHRpb25zOyAgICAgIC8vIGVuY29kZXIgb3B0aW9ucwo+PiArICAgIHZ2 ZW5jRW5jb2RlciAgICAqdnZlbmNFbmM7Cj4+ICsgICAgdnZlbmNBY2Nlc3NVbml0ICpwQVU7Cj4+ ICsgICAgYm9vbCAgICAgICAgICAgIGVuY29kZURvbmU7Cj4+ICt9IFZWZW5DQ29udGV4dDsKPj4g Kwo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGZmX3Z2ZW5jX2xvZ19jYWxsYmFjayh2b2lk ICphdmN0eCwgaW50IGxldmVsLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCj4+ICt7Cj4+ICsgICAgdmZw cmludGYobGV2ZWwgPT0gMSA/IHN0ZGVyciA6IHN0ZG91dCwgZm10LCBhcmdzKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgZmZfdnZlbmNfaW50ZXJuYWxMb2codm9pZCAqY3R4LCBpbnQgbGV2 ZWwsIGNvbnN0IGNoYXIgKmZtdCwKPj4gLi4uKQo+PiArewo+PiArICAgIHZhX2xpc3QgYXJnczsK Pj4gKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOwo+PiArICAgIGZmX3Z2ZW5jX2xvZ19jYWxsYmFj ayhjdHgsIGxldmVsLCBmbXQsIGFyZ3MpOwo+PiArICAgIHZhX2VuZChhcmdzKTsKPj4gK30KPj4g Kwo+PiAKPiB0aGlzIGlzIGEgdmVyeSBsYXJnZSBmdW5jdGlvbiwgbWl4ZWQgbWFueSB0aGluZ3MK PiBIb3cgYWJvdXQgd2UgYnJlYWsgaXQgaW50byBzbWFsbGVyIG9uZSg8IDQwIGxpbmVzKQo+IGZv ciBleGFtcGxlOgo+IHNldCBsb2cgY2FsbGJhY2ssIHNldCBleHRyYSBkYXRhLnNldCBjb2xvciBm b3JtYXQsIHNldCB2dmVuYyBwYXJhbXMuLi4KClRoYW5rcyBmb3IgdGhlIGZlZWRiYWNrLiBJIHdp bGwgc3BsaXQgdGhlIGluaXQgZnVuY3Rpb24uCgoKPj4gK3N0YXRpYyBhdl9jb2xkIGludCBmZl92 dmVuY19lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4+ICt7Cj4+ICsgICAgaW50 IHJldDsKPj4gKyAgICBpbnQgZnJhbWVyYXRlLCBxcCwgcGFyc2VfcmV0Owo+PiArICAgIFZWZW5D Q29udGV4dCAqczsKPj4gKyAgICB2dmVuY19jb25maWcgcGFyYW1zOwo+PiArICAgIHZ2ZW5jUHJl c2V0TW9kZSBwcmVzZXQ7Cj4+ICsgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmVuOwo+PiArICAgIGNo YXIgc3RhdHNmaWxlWzEwMjRdID0gInZ2ZW5jLXJjc3RhdHMuanNvbiI7Cj4+ICsKPj4gKyAgICBz ID0gKFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9kYXRhOwo+PiArICAgIHFwID0gKHZ2ZW5j UHJlc2V0TW9kZSkgcy0+b3B0aW9ucy5xcDsKPj4gCj4gdHlwbyBmb3IgdnZlbmNQcmVzZXRNb2Rl Pwo+IAoKdGhhbmtzLCB0aGF0wrRzIGEgdHlwby4gSSB3aWxsIGZpeCBpdC4KCgo+PiArICAgIHBy ZXNldCA9ICh2dmVuY1ByZXNldE1vZGUpIHMtPm9wdGlvbnMucHJlc2V0Owo+PiArCj4+ICsgICAg aWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfSU5URVJMQUNFRF9EQ1QpIHsKPj4gKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4+ICsgICAgICAgICAgICAgICAiZmZf dnZlbmNfZW5jb2RlX2luaXQ6OmluaXQoKSBpbnRlcmxhY2VkIGVuY29kaW5nIG5vdAo+PiBzdXBw b3J0ZWQgeWV0XG4iKTsKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgdnZlbmNfY29uZmlnX2RlZmF1bHQoJnBhcmFtcyk7Cj4+ICsK Pj4gKyAgICAvLyBzZXQgZGVzaXJlZCBlbmNvZGluZyBvcHRpb25zCj4+ICsgICAgZnJhbWVyYXRl ID0gYXZjdHgtPnRpbWVfYmFzZS5kZW4gLyBhdmN0eC0+dGltZV9iYXNlLm51bTsKPj4gKyAgICB2 dmVuY19pbml0X2RlZmF1bHQoJnBhcmFtcywgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBm cmFtZXJhdGUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIChxcCA+PSAwKSA/IDAgOiBhdmN0 eC0+Yml0X3JhdGUsIChxcCA8IDApID8gMzIgOgo+PiBxcCwgcHJlc2V0KTsKPj4gKyAgICBwYXJh bXMubV9GcmFtZVJhdGUgPSBhdmN0eC0+dGltZV9iYXNlLmRlbjsKPj4gKyAgICBwYXJhbXMubV9G cmFtZVNjYWxlID0gYXZjdHgtPnRpbWVfYmFzZS5udW07Cj4+ICsKPj4gKyAgICBwYXJhbXMubV92 ZXJib3NpdHkgPSBWVkVOQ19WRVJCT1NFOwo+PiArICAgIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkg Pj0gQVZfTE9HX0RFQlVHKQo+PiArICAgICAgICBwYXJhbXMubV92ZXJib3NpdHkgPSBWVkVOQ19E RVRBSUxTOwo+PiArICAgIGVsc2UgaWYgKGF2X2xvZ19nZXRfbGV2ZWwoKSA+PSBBVl9MT0dfVkVS Qk9TRSkKPj4gKyAgICAgICAgcGFyYW1zLm1fdmVyYm9zaXR5ID0gVlZFTkNfTk9USUNFOyAgICAg IC8vIG91dHB1dCBwZXIgcGljdHVyZSBpbmZvCj4+ICsgICAgZWxzZSBpZiAoYXZfbG9nX2dldF9s ZXZlbCgpID49IEFWX0xPR19JTkZPKQo+PiArICAgICAgICBwYXJhbXMubV92ZXJib3NpdHkgPSBW VkVOQ19XQVJOSU5HOyAgICAgLy8gZmZtcGVnIGRlZmF1bHQgZmZtcGVnCj4+IGxvZ2xldmVsCj4+ ICsgICAgZWxzZQo+PiArICAgICAgICBwYXJhbXMubV92ZXJib3NpdHkgPSBWVkVOQ19TSUxFTlQ7 Cj4gCj4gd2Ugc2V0IG1fdmVyYm9zaXR5IGhlcmUgYW5kCj4gCj4+IAoKU29ycnksIGJ1dCBJIGRv bsK0dCBnZXQgd2hhdCB5b3Ugd2FudCB0byBzYXkgaGVyZT8KCgo+IAo+ICsKPj4gK0ZGX0RJU0FC TEVfREVQUkVDQVRJT05fV0FSTklOR1MKPj4gKwo+PiArI2lmIEZGX0FQSV9USUNLU19QRVJfRlJB TUUKPj4gKyAgICBpZiAoYXZjdHgtPnRpY2tzX3Blcl9mcmFtZSA9PSAxKSB7Cj4+ICsjZW5kaWYK Pj4gKyAgICAgICAgcGFyYW1zLm1fVGlja3NQZXJTZWNvbmQgPSAtMTsgICAvLyBhdXRvIG1vZGUg Zm9yIHRpY2tzIHBlciBmcmFtZQo+PiA9IDEKPj4gKyNpZiBGRl9BUElfVElDS1NfUEVSX0ZSQU1F Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgcGFyYW1zLm1fVGlja3NQZXJTZWNvbmQgPQo+ PiArICAgICAgICAgICAgY2VpbCgoYXZjdHgtPnRpbWVfYmFzZS5kZW4gLyAoZG91YmxlKSBhdmN0 eC0+dGltZV9iYXNlLm51bSkgKgo+PiArICAgICAgICAgICAgICAgICAoZG91YmxlKSBhdmN0eC0+ dGlja3NfcGVyX2ZyYW1lKTsKPj4gKyAgICB9Cj4+ICsjZW5kaWYKPj4gK0ZGX0VOQUJMRV9ERVBS RUNBVElPTl9XQVJOSU5HUwo+PiArCj4+ICsgICAgaWYgKGF2Y3R4LT50aHJlYWRfY291bnQgPiAw KQo+PiArICAgICAgICBwYXJhbXMubV9udW1UaHJlYWRzID0gYXZjdHgtPnRocmVhZF9jb3VudDsK Pj4gKwo+PiArICAgIC8vIEdPUCBzZXR0aW5ncyAoSURSL0NSQSkKPj4gKyAgICBpZiAoYXZjdHgt PmZsYWdzICYgQVZfQ09ERUNfRkxBR19DTE9TRURfR09QKQo+PiArICAgICAgICBwYXJhbXMubV9E ZWNvZGluZ1JlZnJlc2hUeXBlID0gVlZFTkNfRFJUX0lEUjsKPj4gKwo+PiArICAgIGlmIChhdmN0 eC0+Z29wX3NpemUgPT0gMSkgewo+PiArICAgICAgICBwYXJhbXMubV9HT1BTaXplID0gMTsKPj4g KyAgICAgICAgcGFyYW1zLm1fSW50cmFQZXJpb2QgPSAxOwo+PiArICAgIH0gZWxzZSB7Cj4+ICsg ICAgICAgIHBhcmFtcy5tX0ludHJhUGVyaW9kU2VjID0gcy0+b3B0aW9ucy5pbnRyYVJlZnJlc2hT ZWM7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcGFyYW1zLm1fdXNlUGVyY2VwdFFQQSA9IHMtPm9w dGlvbnMuc3ViamVjdGl2ZU9wdGltaXphdGlvbjsKPj4gKyAgICBwYXJhbXMubV9sZXZlbCAgICAg ICAgID0gKHZ2ZW5jTGV2ZWwpIHMtPm9wdGlvbnMubGV2ZWxJZGM7Cj4+ICsgICAgcGFyYW1zLm1f bGV2ZWxUaWVyICAgICA9ICh2dmVuY1RpZXIpIHMtPm9wdGlvbnMudGllcjsKPj4gKwo+PiArICAg IHBhcmFtcy5tX0FjY2Vzc1VuaXREZWxpbWl0ZXIgPSB0cnVlOwo+PiArCj4+ICsgICAgcGFyYW1z Lm1faW50ZXJuQ2hyb21hRm9ybWF0ID0gVlZFTkNfQ0hST01BXzQyMDsKPj4gKyAgICBwYXJhbXMu bV9pbnB1dEJpdERlcHRoWzBdICAgPSAxMDsKPj4gKwo+PiArICAgIGlmICggYXZjdHgtPnBpeF9m bXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSApewo+PiArICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwKPj4gKyAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBwaXhlbCBmb3Jt YXQgJXMsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgZm9yCj4+IHl1djQyMHAxMGxlXG4iLAo+PiAr ICAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsKPj4g KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBp ZiAoIHMtPm9wdGlvbnMuZmxhZzhiaXRDb2RpbmcgKSB7Cj4+ICsjaWYgVlZFTkNfVkVSU0lPTl9N QUpPUiA+IDEgfHwgKFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJgo+PiBWVkVOQ19WRVJTSU9O X01JTk9SID4gOSkgfHwgKFZWRU5DX1ZFUlNJT05fTUFKT1IgPT0gMSAmJgo+PiBWVkVOQ19WRVJT SU9OX01JTk9SID49IDkgJiYgVlZFTkNfVkVSU0lPTl9QQVRDSCA+PSAxKQo+PiArICAgICAgICBw YXJhbXMubV9pbnRlcm5hbEJpdERlcHRoWzBdID0gODsKPj4gKyNlbHNlCj4+ICsgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+PiArICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRl ZCA4Yml0IGNvZGluZyBtb2RlLiA4Yml0IGNvZGluZyBuZWVkcyBhdCBsZWFzdAo+PiB2dmVuYyB2 ZXJzaW9uID49IDEuOS4xXG4iLAo+PiArICAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25h bWUoYXZjdHgtPnBpeF9mbXQpKTsKPj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK Pj4gKyNlbmRpZgo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmIChhdmN0eC0+Y29sb3JfcHJpbWFy aWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCkKPj4gKyAgICAgICAgcGFyYW1zLm1fY29sb3Vy UHJpbWFyaWVzID0gKGludCkgYXZjdHgtPmNvbG9yX3ByaW1hcmllczsKPj4gKyAgICBpZiAoYXZj dHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKQo+PiArICAgICAgICBwYXJh bXMubV9tYXRyaXhDb2VmZmljaWVudHMgPSAoaW50KSBhdmN0eC0+Y29sb3JzcGFjZTsKPj4gKyAg ICBpZiAoYXZjdHgtPmNvbG9yX3RyYyAhPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQpIHsKPj4gKyAg ICAgICAgcGFyYW1zLm1fdHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSAoaW50KSBhdmN0eC0+Y29s b3JfdHJjOwo+PiArCj4+ICsgICAgICAgIGlmIChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RS Q19TTVBURTIwODQpCj4+ICsgICAgICAgICAgICBwYXJhbXMubV9IZHJNb2RlID0gKGF2Y3R4LT5j b2xvcl9wcmltYXJpZXMgPT0KPj4gQVZDT0xfUFJJX0JUMjAyMCkgPwo+PiArICAgICAgICAgICAg ICAgIFZWRU5DX0hEUl9QUV9CVDIwMjAgOiBWVkVOQ19IRFJfUFE7Cj4+ICsgICAgICAgIGVsc2Ug aWYgKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX0JUMjAyMF8xMAo+PiArICAgICAgICAg ICAgICAgICB8fCBhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19BUklCX1NURF9CNjcpCj4+ ICsgICAgICAgICAgICBwYXJhbXMubV9IZHJNb2RlID0gKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZD T0xfVFJDX0JUMjAyMF8xMCB8fAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh dmN0eC0+Y29sb3JfcHJpbWFyaWVzID09Cj4+IEFWQ09MX1BSSV9CVDIwMjAgfHwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BD X0JUMjAyMF9OQ0wKPj4gfHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZj dHgtPmNvbG9yc3BhY2UgPT0gQVZDT0xfU1BDX0JUMjAyMF9DTCkKPj4gPwo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZWRU5DX0hEUl9ITEdfQlQyMDIwIDogVlZFTkNfSERSX0hM RzsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAocGFyYW1zLm1fSGRyTW9kZSA9PSBWVkVOQ19I RFJfT0ZGCj4+ICsgICAgICAgICYmIChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BS SV9VTlNQRUNJRklFRAo+PiArICAgICAgICAgICAgfHwgYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZD T0xfU1BDX1VOU1BFQ0lGSUVEKSkgewo+PiArICAgICAgICBwYXJhbXMubV92dWlQYXJhbWV0ZXJz UHJlc2VudCA9IDE7Cj4+ICsgICAgICAgIHBhcmFtcy5tX2NvbG91ckRlc2NyaXB0aW9uUHJlc2Vu dCA9IHRydWU7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcGFyYW1zLm1fUkNOdW1QYXNzZXMgPSAx Owo+PiArICAgIGVuID0gTlVMTDsKPj4gKyAgICB3aGlsZSAoKGVuID0gYXZfZGljdF9nZXQocy0+ b3B0aW9ucy52dmVuY19vcHRzLCAiIiwgZW4sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpKSB7Cj4+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0RFQlVHLCAidnZlbmNfc2V0X3BhcmFtOiAnJXM6JXMnXG4iLCBlbi0+a2V5LAo+PiAr ICAgICAgICAgICAgICAgZW4tPnZhbHVlKTsKPj4gKyAgICAgICAgcGFyc2VfcmV0ID0gdnZlbmNf c2V0X3BhcmFtKCZwYXJhbXMsIGVuLT5rZXksIGVuLT52YWx1ZSk7Cj4+ICsgICAgICAgIHN3aXRj aCAocGFyc2VfcmV0KSB7Cj4+ICsgICAgICAgIGNhc2UgVlZFTkNfUEFSQU1fQkFEX05BTUU6Cj4+ ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5rbm93biB2dmVu YyBvcHRpb246ICVzLlxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICBlbi0+a2V5KTsKPj4gKyAg ICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBjYXNlIFZWRU5DX1BBUkFNX0JBRF9WQUxVRToK Pj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsCj4+ICsgICAgICAg ICAgICAgICAgICAgIkludmFsaWQgdnZlbmMgdmFsdWUgZm9yICVzOiAlcy5cbiIsIGVuLT5rZXks Cj4+IGVuLT52YWx1ZSk7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgZGVmYXVs dDoKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAg aWYgKG1lbWNtcChlbi0+a2V5LCAicmNzdGF0c2ZpbGUiLCAxMSkgPT0gMCB8fAo+PiArICAgICAg ICAgICAgbWVtY21wKGVuLT5rZXksICJSQ1N0YXRzRmlsZSIsIDExKSA9PSAwKSB7Cj4+ICsgICAg ICAgICAgICBzdHJuY3B5KHN0YXRzZmlsZSwgZW4tPnZhbHVlLCBzaXplb2Yoc3RhdHNmaWxlKSAt IDEpOwo+PiArICAgICAgICAgICAgc3RhdHNmaWxlW3NpemVvZihzdGF0c2ZpbGUpIC0gMV0gPSAn XDAnOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKHBhcmFtcy5tX1JD UGFzcyAhPSAtMSAmJiBwYXJhbXMubV9SQ051bVBhc3NlcyA9PSAxKQo+PiArICAgICAgICBwYXJh bXMubV9SQ051bVBhc3NlcyA9IDI7ICAgICAgIC8vIGVuYWJsZSAycGFzcyBtb2RlCj4+ICsKPj4g KyNpZiBWVkVOQ19WRVJTSU9OX01BSk9SID4gMSB8fCAoVlZFTkNfVkVSU0lPTl9NQUpPUiA9PSAx ICYmCj4+IFZWRU5DX1ZFUlNJT05fTUlOT1IgPiA4KQo+PiArICAgIGlmKGF2Y3R4LT5yY19tYXhf cmF0ZSkgewo+PiArICAgICAgICBpZighYXZjdHgtPmJpdF9yYXRlKSB7Cj4+ICsgICAgICAgICAg ICBhdl9sb2coIGF2Y3R4LCBBVl9MT0dfRVJST1IsICJSYXRlIGNvbnRyb2wgcGFyYW1ldGVycyBz ZXQKPj4gd2l0aG91dCBhIGJpdHJhdGVcbiIpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKPj4gKyAgICAgICAgfQo+PiArICAgICAgICBlbHNlCj4+ICsgICAgICAgICAg ICBwYXJhbXMubV9SQ01heEJpdHJhdGUgPSBhdmN0eC0+cmNfbWF4X3JhdGU7Cj4+ICsgICAgfQo+ PiArI2VuZGlmCj4+ICsKPj4gKyAgICBzLT52dmVuY0VuYyA9IHZ2ZW5jX2VuY29kZXJfY3JlYXRl KCk7Cj4+ICsgICAgaWYgKE5VTEwgPT0gcy0+dnZlbmNFbmMpIHsKPj4gKyAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJjYW5ub3QgY3JlYXRlIHZ2YyBlbmNvZGVyCj4+ICh2dmVu YylcbiIpOwo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+PiArICAgIH0KPj4g Kwo+PiArICAgIHZ2ZW5jX3NldF9tc2dfY2FsbGJhY2soJnBhcmFtcywgcy0+dnZlbmNFbmMsIGZm X3Z2ZW5jX2xvZ19jYWxsYmFjayk7Cj4+ICsgICAgcmV0ID0gdnZlbmNfZW5jb2Rlcl9vcGVuKHMt PnZ2ZW5jRW5jLCAmcGFyYW1zKTsKPj4gKyAgICBpZiAoMCAhPSByZXQpIHsKPj4gKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJjYW5ub3Qgb3BlbiB2dmMgZW5jb2RlciAodnZl bmMpOgo+PiAlc1xuIiwKPj4gKyAgICAgICAgICAgICAgIHZ2ZW5jX2dldF9sYXN0X2Vycm9yKHMt PnZ2ZW5jRW5jKSk7Cj4+ICsgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNFbmMp Owo+PiArICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+PiArICAgIH0KPj4gKwo+PiAr ICAgIHZ2ZW5jX2dldF9jb25maWcocy0+dnZlbmNFbmMsICZwYXJhbXMpOyAgICAgLy8gZ2V0IHRo ZSBhZGFwdGVkIGNvbmZpZwo+PiArCj4+ICsgICAgaWYgKHBhcmFtcy5tX3ZlcmJvc2l0eSA+PSBW VkVOQ19JTkZPCj4+ICsgICAgICAgICYmIGF2X2xvZ19nZXRfbGV2ZWwoKSA8PSBBVl9MT0dfSU5G Tykgewo+PiArICAgICAgICBmZl92dmVuY19pbnRlcm5hbExvZyhhdmN0eCwgcGFyYW1zLm1fdmVy Ym9zaXR5LCAidnZlbmMgdmVyc2lvbjoKPj4gJXNcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+PiArICAgICAgICBmZl92dmVuY19pbnRl cm5hbExvZyhhdmN0eCwgcGFyYW1zLm1fdmVyYm9zaXR5LCAiJXNcbiIsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZ2ZW5jX2dldF9jb25maWdfYXNfc3RyaW5nKCZwYXJhbXMsCj4+ ICsKPj4gcGFyYW1zLm1fdmVyYm9zaXR5KSk7Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAg dnZlbmNNc2dMZXZlbCBsb2dsdmwgPSBWVkVOQ19JTkZPOwo+PiArICAgICAgICBpZiAoYXZfbG9n X2dldF9sZXZlbCgpID49IEFWX0xPR19ERUJVRykKPj4gKyAgICAgICAgICAgIGxvZ2x2bCA9IFZW RU5DX0RFVEFJTFM7Cj4+ICsgICAgICAgIGVsc2UgaWYgKGF2X2xvZ19nZXRfbGV2ZWwoKSA+PSBB Vl9MT0dfVkVSQk9TRSkKPj4gKyAgICAgICAgICAgIGxvZ2x2bCA9IFZWRU5DX1ZFUkJPU0U7Cj4+ ICsKPj4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBhdl9sb2dfZ2V0X2xldmVsKCksICJ2dmVuYyB2 ZXJzaW9uOiAlc1xuIiwKPj4gKyAgICAgICAgICAgICAgdnZlbmNfZ2V0X3ZlcnNpb24oKSk7Cj4+ ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgYXZfbG9nX2dldF9sZXZlbCgpLCAiJXNcbiIsCj4+ICsg ICAgICAgICAgICAgIHZ2ZW5jX2dldF9jb25maWdfYXNfc3RyaW5nKCZwYXJhbXMsIGxvZ2x2bCAp KTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAocGFyYW1zLm1fUkNOdW1QYXNzZXMgPT0gMikg ewo+PiArICAgICAgICByZXQgPSB2dmVuY19pbml0X3Bhc3Mocy0+dnZlbmNFbmMsIHBhcmFtcy5t X1JDUGFzcyAtIDEsCj4+ICZzdGF0c2ZpbGVbMF0pOwo+PiArICAgICAgICBpZiAoMCAhPSByZXQp IHsKPj4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+PiArICAgICAg ICAgICAgICAgICAgICJjYW5ub3QgaW5pdCBwYXNzICVkIGZvciB2dmMgZW5jb2RlciAodnZlbmMp OiAlc1xuIiwKPj4gKyAgICAgICAgICAgICAgICAgICBwYXJhbXMubV9SQ1Bhc3MsIHZ2ZW5jX2dl dF9sYXN0X2Vycm9yKHMtPnZ2ZW5jRW5jKSk7Cj4+ICsgICAgICAgICAgICB2dmVuY19lbmNvZGVy X2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBzLT5wQVUgPSB2dmVuY19h Y2Nlc3NVbml0X2FsbG9jKCk7Cj4+ICsgICAgdnZlbmNfYWNjZXNzVW5pdF9hbGxvY19wYXlsb2Fk KHMtPnBBVSwgYXZjdHgtPndpZHRoICogYXZjdHgtPmhlaWdodCk7Cj4+IAo+IERvIHdlIG5lZWQg dG8gY2hlY2sgdGhlIGFsbG9jYXRpb24gcmVzdWx0Pwo+IAoKVGhhbmtzLCBJIHdpbGwgYWRkIGEg YWxsb2NhdGlvbiBjaGVjay4KCgo+PiArCj4+ICsgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NP REVDX0ZMQUdfR0xPQkFMX0hFQURFUikgewo+PiArICAgICAgICByZXQgPSB2dmVuY19nZXRfaGVh ZGVycyhzLT52dmVuY0VuYywgcy0+cEFVKTsKPj4gKyAgICAgICAgaWYgKDAgIT0gcmV0KSB7Cj4+ ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPj4gKyAgICAgICAgICAg ICAgICAgICAiY2Fubm90IGdldCBoZWFkZXJzIChTUFMsUFBTKSBmcm9tIHZ2YyBlbmNvZGVyKHZ2 ZW5jKToKPj4gJXNcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgdnZlbmNfZ2V0X2xhc3RfZXJy b3Iocy0+dnZlbmNFbmMpKTsKPj4gKyAgICAgICAgICAgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+ dnZlbmNFbmMpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gKyAg ICAgICAgfQo+PiArCj4+ICsgICAgICAgIGlmIChzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSA8PSAw KSB7Cj4+ICsgICAgICAgICAgICB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+PiArICAgICAgICB9Cj4+ ICsKPj4gKyAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplID0gcy0+cEFVLT5wYXlsb2FkVXNl ZFNpemU7Cj4+ICsgICAgICAgIGF2Y3R4LT5leHRyYWRhdGEgPQo+PiArICAgICAgICAgICAgYXZf bWFsbG9jeihhdmN0eC0+ZXh0cmFkYXRhX3NpemUgKwo+PiBBVl9JTlBVVF9CVUZGRVJfUEFERElO R19TSVpFKTsKPj4gKyAgICAgICAgaWYgKCFhdmN0eC0+ZXh0cmFkYXRhKSB7Cj4+ICsgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKPj4gKyAgICAgICAgICAgICAgICAgICAi Q2Fubm90IGFsbG9jYXRlIFZWQyBoZWFkZXIgb2Ygc2l6ZSAlZC5cbiIsCj4+ICsgICAgICAgICAg ICAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplKTsKPj4gKyAgICAgICAgICAgIHZ2ZW5jX2Vu Y29kZXJfY2xvc2Uocy0+dnZlbmNFbmMpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIG1lbWNweShhdmN0eC0+ZXh0 cmFkYXRhLCBzLT5wQVUtPnBheWxvYWQsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Cj4+ICsgICAg ICAgIG1lbXNldChhdmN0eC0+ZXh0cmFkYXRhICsgYXZjdHgtPmV4dHJhZGF0YV9zaXplLCAwLAo+ PiArICAgICAgICAgICAgICAgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7Cj4+ICsgICAg fQo+PiArICAgIHMtPmVuY29kZURvbmUgPSBmYWxzZTsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGF2X2NvbGQgaW50IGZmX3Z2ZW5jX2VuY29kZV9jbG9zZShBVkNvZGVj Q29udGV4dCAqIGF2Y3R4KQo+PiArewo+PiArICAgIFZWZW5DQ29udGV4dCAqcyA9IChWVmVuQ0Nv bnRleHQgKikgYXZjdHgtPnByaXZfZGF0YTsKPj4gKyAgICBpZiAocy0+dnZlbmNFbmMpIHsKPj4g KyAgICAgICAgaWYgKGF2X2xvZ19nZXRfbGV2ZWwoKSA+PSBBVl9MT0dfVkVSQk9TRSkKPj4gKyAg ICAgICAgICAgIHZ2ZW5jX3ByaW50X3N1bW1hcnkocy0+dnZlbmNFbmMpOwo+PiArCj4+ICsgICAg ICAgIGlmICgwICE9IHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNFbmMpKSB7Cj4+ICsgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImNhbm5vdCBjbG9zZSB2dmVuY1xu Iik7Cj4+ICsgICAgICAgICAgICByZXR1cm4gLTE7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ ICsKPj4gKyAgICB2dmVuY19hY2Nlc3NVbml0X2ZyZWUocy0+cEFVLCB0cnVlKTsKPj4gKwo+PiAr ICAgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZlbmNf ZW5jb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQKPj4gKnBrdCwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAq ZnJhbWUsIGludAo+PiAqZ290X3BhY2tldCkKPj4gK3sKPj4gKyAgICBWVmVuQ0NvbnRleHQgKnMg PSAoVlZlbkNDb250ZXh0ICopIGF2Y3R4LT5wcml2X2RhdGE7Cj4+ICsgICAgdnZlbmNZVVZCdWZm ZXIgKnB5dXZidWY7Cj4+ICsgICAgdnZlbmNZVVZCdWZmZXIgeXV2YnVmOwo+PiArICAgIGludCBw aWN0X3R5cGU7Cj4+ICsgICAgaW50IHJldDsKPj4gKwo+PiArICAgIHB5dXZidWYgPSBOVUxMOwo+ PiArICAgIGlmIChmcmFtZSkgewo+IAo+ICsgICAgICAgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBB Vl9QSVhfRk1UX1lVVjQyMFAxMExFKSB7Cj4+IAo+IDggYml0cyBhcmUgc3RpbGwgd2lkZSB1c2Vk LiBJcyBpdCBoYXJkIHRvIGFkZCA4Yml0cyBzdXBwb3J0Pwo+IAoKVlZlbmMgZG9lcyBub3Qgc3Vw cG9ydCA4Yml0IGlucHV0IGN1cnJlbnRseS4gClRoYXQgbWVhbnMgdGhlIHl1diBpbnB1dCBidWZm ZXIgaGF2ZSB0byBiZSAxMGJpdCBwYWNrZXQgaW4gMiA4Yml0IHNhbXBsZXMuClRoZSBvbmx5IHdh eSBlbmNvZGUgOGJpdCBpcyB0byBpbnB1dCAxMGJpdCBhbmQgdXNlIHRoZSA4Yml0IHBpcGVsaW5l IGJ5IHVzaW5nIAotdnZlbmMtcGFyYW1zICJJbnRlcm5hbEJpdERlcHRoPTgiIG9yIHVzZSB0aGUg bGlidnZlbmMgb3B0aW9uIC1iaXRkZXB0aDgKCgo+PiArICAgICAgICAgICAgdnZlbmNfWVVWQnVm ZmVyX2RlZmF1bHQoJnl1dmJ1Zik7Cj4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzBdLnB0 ciA9IChpbnQxNl90ICopIGZyYW1lLT5kYXRhWzBdOwo+PiArICAgICAgICAgICAgeXV2YnVmLnBs YW5lc1sxXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsxXTsKPj4gKyAgICAgICAgICAg IHl1dmJ1Zi5wbGFuZXNbMl0ucHRyID0gKGludDE2X3QgKikgZnJhbWUtPmRhdGFbMl07Cj4+ICsK Pj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMF0ud2lkdGggPSBmcmFtZS0+d2lkdGg7Cj4+ ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzBdLmhlaWdodCA9IGZyYW1lLT5oZWlnaHQ7Cj4+ ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzBdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVsw XSA+PiAxOyAgLy8gc3RyaWRlCj4+IGlzIHVzZWQgaW4gc2FtcGxlcyAoMTZiaXQpIGluIHZ2ZW5j LCBmZm1wZWcgdXNlcyBzdHJpZGUgaW4gYnl0ZXMKPj4gKwo+PiArICAgICAgICAgICAgeXV2YnVm LnBsYW5lc1sxXS53aWR0aCA9IGZyYW1lLT53aWR0aCA+PiAxOwo+PiArICAgICAgICAgICAgeXV2 YnVmLnBsYW5lc1sxXS5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0ID4+IDE7Cj4+ICsgICAgICAgICAg ICB5dXZidWYucGxhbmVzWzFdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVsxXSA+PiAxOwo+PiAr Cj4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLndpZHRoID0gZnJhbWUtPndpZHRoID4+ IDE7Cj4+ICsgICAgICAgICAgICB5dXZidWYucGxhbmVzWzJdLmhlaWdodCA9IGZyYW1lLT5oZWln aHQgPj4gMTsKPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5wbGFuZXNbMl0uc3RyaWRlID0gZnJhbWUt PmxpbmVzaXplWzJdID4+IDE7Cj4+ICsKPj4gKyAgICAgICAgICAgIHl1dmJ1Zi5jdHMgPSBmcmFt ZS0+cHRzOwo+PiArICAgICAgICAgICAgeXV2YnVmLmN0c1ZhbGlkID0gdHJ1ZTsKPj4gKyAgICAg ICAgICAgIHB5dXZidWYgPSAmeXV2YnVmOwo+PiArICAgICAgICB9IGVsc2Ugewo+PiArICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4+ICsgICAgICAgICAgICAgICAgICAg InVuc3VwcG9ydGVkIGlucHV0IGNvbG9yc3BhY2UhIGlucHV0IG11c3QgYmUKPj4geXV2NDIwcDEw bGUiKTsKPj4gKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAg IH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAoIXMtPmVuY29kZURvbmUpIHsKPj4gKyAgICAg ICAgcmV0ID0gdnZlbmNfZW5jb2RlKHMtPnZ2ZW5jRW5jLCBweXV2YnVmLCBzLT5wQVUsICZzLT5l bmNvZGVEb25lKTsKPj4gKyAgICAgICAgaWYgKHJldCAhPSAwKSB7Cj4+ICsgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImVycm9yIGluIHZ2ZW5jOjplbmNvZGUgLQo+PiBy ZXQ6JWRcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgcmV0KTsKPj4gKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9IGVsc2Ugewo+PiAr ICAgICAgICAqZ290X3BhY2tldCA9IDA7Cj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArICAgIH0K Pj4gKwo+PiArICAgIGlmIChzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSA+IDApIHsKPj4gKyAgICAg ICAgcmV0ID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZjdHgsIHBrdCwgcy0+cEFVLT5wYXlsb2Fk VXNlZFNpemUsCj4+IDApOwo+PiArICAgICAgICBpZiAocmV0IDwgMCkgewo+PiArICAgICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBnZXR0aW5nIG91dHB1dCBwYWNr ZXQuXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+ PiArICAgICAgICBtZW1jcHkocGt0LT5kYXRhLCBzLT5wQVUtPnBheWxvYWQsIHMtPnBBVS0+cGF5 bG9hZFVzZWRTaXplKTsKPj4gKwo+PiArICAgICAgICBpZiAocy0+cEFVLT5jdHNWYWxpZCkKPj4g KyAgICAgICAgICAgIHBrdC0+cHRzID0gcy0+cEFVLT5jdHM7Cj4+ICsgICAgICAgIGlmIChzLT5w QVUtPmR0c1ZhbGlkKQo+PiArICAgICAgICAgICAgcGt0LT5kdHMgPSBzLT5wQVUtPmR0czsKPj4g KyAgICAgICAgcGt0LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVkgKiBzLT5wQVUtPnJhcDsKPj4g Kwo+PiArICAgICAgICBzd2l0Y2ggKHMtPnBBVS0+c2xpY2VUeXBlKSB7Cj4+ICsgICAgICAgIGNh c2UgVlZFTkNfSV9TTElDRToKPj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVf VFlQRV9JOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgIGNhc2UgVlZFTkNfUF9T TElDRToKPj4gKyAgICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9QOwo+PiAr ICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgICAgIGNhc2UgVlZFTkNfQl9TTElDRToKPj4gKyAg ICAgICAgICAgIHBpY3RfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COwo+PiArICAgICAgICAgICAg YnJlYWs7Cj4+ICsgICAgICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIlVua25vd24gcGljdHVyZSB0eXBlCj4+IGVuY291bnRlcmVkLlxuIik7 Cj4+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKPj4gKyAgICAgICAgfQo+ PiArCj4+ICsgICAgICAgIGZmX3NpZGVfZGF0YV9zZXRfZW5jb2Rlcl9zdGF0cyhwa3QsIDAsIE5V TEwsIDAsIHBpY3RfdHlwZSk7Cj4+ICsKPj4gKyAgICAgICAgKmdvdF9wYWNrZXQgPSAxOwo+PiAr Cj4+ICsgICAgICAgIHJldHVybiAwOwo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICpnb3Rf cGFja2V0ID0gMDsKPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4X2ZtdHNfdnZlbmNbXSA9IHsKPj4gKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAxMExFLAo+PiAr ICAgIEFWX1BJWF9GTVRfTk9ORQo+PiArfTsKPj4gKwo+PiArI2RlZmluZSBPRkZTRVQoeCkgb2Zm c2V0b2YoVlZlbkNDb250ZXh0LCB4KQo+PiArI2RlZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19Q QVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNCj4+ICtzdGF0aWMgY29uc3QgQVZPcHRp b24gbGlidnZlbmNfb3B0aW9uc1tdID0gewo+PiArICAgIHsicHJlc2V0IiwgInNldCBlbmNvZGlu ZyBwcmVzZXQoMDogZmFzdGVyIC0gNDogc2xvd2VyIiwgT0ZGU0VUKAo+PiBvcHRpb25zLnByZXNl dCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSAyfSAsIDAgLCA0ICwgVkUsICJwcmVzZXQifSwK Pj4gKyAgICAgICAgeyAiZmFzdGVyIiwgIjAiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSBWVkVOQ19GQVNURVJ9LAo+PiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIgfSwKPj4g KyAgICAgICAgeyAiZmFzdCIsICAgIjEiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBW VkVOQ19GQVNUfSwKPj4gSU5UX01JTiwgSU5UX01BWCwgVkUsICJwcmVzZXQiIH0sCj4+ICsgICAg ICAgIHsgIm1lZGl1bSIsICIyIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVlZFTkNf TUVESVVNfSwKPj4gSU5UX01JTiwgSU5UX01BWCwgVkUsICJwcmVzZXQiIH0sCj4+ICsgICAgICAg IHsgInNsb3ciLCAgICIzIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVlZFTkNfU0xP V30sCj4+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAgICAgICB7ICJz bG93ZXIiLCAiNCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZWRU5DX1NMT1dFUn0s Cj4+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9LAo+PiArICAgIHsgInFwIiAgICAg LCAic2V0IHF1YW50aXphdGlvbiIsIE9GRlNFVChvcHRpb25zLnFwKSwKPj4gQVZfT1BUX1RZUEVf SU5ULCAgey5pNjQgPSAtMX0sIC0xICwgNjMgLFZFLCAicXBfbW9kZSIgfSwKPj4gKyAgICB7ICJw ZXJpb2QiICwgInNldCAoaW50cmEpIHJlZnJlc2ggcGVyaW9kIGluIHNlY29uZHMiLAo+PiBPRkZT RVQob3B0aW9ucy5pbnRyYVJlZnJlc2hTZWMpLCBBVl9PUFRfVFlQRV9JTlQsICB7Lmk2NCA9IDF9 LCAgMSAsIElOVF9NQVgKPj4gLFZFLCJpcmVmcmVzaHNlYyIgfSwKPj4gKyAgICB7ICJzdWJqb3B0 IiwgInNldCBzdWJqZWN0aXZlIChwZXJjZXB0dWFsbHkgbW90aXZhdGVkKSBvcHRpbWl6YXRpb24i LAo+PiBPRkZTRVQob3B0aW9ucy5zdWJqZWN0aXZlT3B0aW1pemF0aW9uKSwgQVZfT1BUX1RZUEVf Qk9PTCwgey5pNjQgPSAxfSwgIDAgLAo+PiAxLCBWRX0sCj4+IAo+ICsgICAgeyAiYml0ZGVwdGg4 IiwgInNldCA4Yml0IGNvZGluZyBtb2RlIiwgT0ZGU0VUKG9wdGlvbnMuZmxhZzhiaXRDb2Rpbmcp LAo+PiBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDB9LCAgMCAsIDEsIFZFfSwKPj4gCj4gd2h5 IGJpdGRlcHRoOCBpcyBzbyBpbXBvcnRhbnQsIGNhbiB3ZSBoaWRlIGl0IGluIHZ2ZW5jLXBhcmFt cz8KPiAKCkl0IGNhbiBhbHNvIGJlIHNwZWNpZmllZCB3aXRoIHRoZSB2dmVuYy1wYXJhbXM6Ci12 dmVuYy1wYXJhbXMgIkludGVybmFsQml0RGVwdGg9OCIgCllvdSBhbHJlYWR5IG1lbnRpb25lZCBh Ym92ZSwgd2h5IHRoZXJlIGlzIG5vdCA4Yml0IHl1djQyMHAgc3VwcG9ydC4KQ2F1c2UgdGhlcmUg aXNuwrR0LCBpdCBpcyBhIHdvcmthcm91bmQgdG8gZW5hYmxlIHRoZSA4Yml0IHBpcGVsaW5lIHdp dGhvdXQgdG91Y2hpbmcgdGhlIHZ2ZW5jLXBhcmFtcwoKCj4+ICsgICAgeyAidnZlbmMtcGFyYW1z IiwgInNldCB0aGUgdnZlbmMgY29uZmlndXJhdGlvbiB1c2luZyBhIDotc2VwYXJhdGVkCj4+IGxp c3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMiLCBPRkZTRVQob3B0aW9ucy52dmVuY19vcHRzKSwK Pj4gQVZfT1BUX1RZUEVfRElDVCwgeyAwIH0sIDAsIDAsIFZFIH0sCj4gCj4gSG93IHRvIHNldCB0 aGUgdnZlbmMtcGFyYW1zLCBiZXR0ZXIgcHJvdmlkZSBzb21lIGRvY3VtZW50cwo+IAoKSXTCtHMg dGhlIHNhbWUgd2F5IHgyNjQgb3IgeDI2NSBhcmUgcHJvdmlkaW5nIHRoZWlyIHBhcmFtZXRlcnMu IApBbGwgcGFyYW1ldGVycyB0aGF0IHRoZSB2dmVuYyBhcHBsaWNhdGlvbiBzdXBwb3J0cyBjYW4g YmUgdXNlZCBoZXJlLgpJIHdpbGwgYWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgZW5jb2Rl cnMudGV4aSBmaWxlLgoKCj4+ICsgICAgeyAibGV2ZWxpZGMiLCAidnZjIGxldmVsX2lkYyIsIE9G RlNFVCggb3B0aW9ucy5sZXZlbElkYyksCj4+IEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSAwfSwg MCwgMTA1LCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjAiLCAgICJhdXRvIiwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMH0sICBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwg ImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjEiLCAgICIxIiAgICwgMCwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0ID0gMTZ9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0s Cj4+ICsgICAgICAgIHsgIjIiLCAgICIyIiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 ID0gMzJ9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAg IHsgIjIuMSIsICIyLjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMzV9LCBJTlRf TUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjMiLCAgICIz IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gNDh9LCBJTlRfTUlOLAo+PiBJTlRf TUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjMuMSIsICIzLjEiICwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gNTF9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxl dmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjQiLCAgICI0IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsuaTY0ID0gNjR9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ ICsgICAgICAgIHsgIjQuMSIsICI0LjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0g Njd9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsg IjUiLCAgICI1IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gODB9LCBJTlRfTUlO LAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjUuMSIsICI1LjEi ICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gODN9LCBJTlRfTUlOLAo+PiBJTlRfTUFY LCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjUuMiIsICI1LjIiICwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsuaTY0ID0gODZ9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVs aWRjIn0sCj4+ICsgICAgICAgIHsgIjYiLCAgICI2IiAgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0ID0gOTZ9LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsg ICAgICAgIHsgIjYuMSIsICI2LjEiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gOTl9 LCBJTlRfTUlOLAo+PiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4+ICsgICAgICAgIHsgIjYu MiIsICI2LjIiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gMTAyfSwgSU5UX01JTiwK Pj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+PiArICAgICAgICB7ICI2LjMiLCAiNi4zIiAs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDEwNX0sIElOVF9NSU4sCj4+IElOVF9NQVgs IFZFLCAibGV2ZWxpZGMifSwKPj4gKyAgICB7ICJ0aWVyIiwgInNldCB2dmMgdGllciIsIE9GRlNF VCggb3B0aW9ucy50aWVyKSwgQVZfT1BUX1RZUEVfSU5ULAo+PiB7Lmk2NCA9IDB9LCAgMCAsIDEg LCBWRSwgInRpZXIifSwKPj4gKyAgICAgICAgeyAibWFpbiIsICJtYWluIiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0ID0gMH0sIElOVF9NSU4sCj4+IElOVF9NQVgsIFZFLCAidGllciJ9LAo+ PiArICAgICAgICB7ICJoaWdoIiwgImhpZ2giLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSAxfSwgSU5UX01JTiwKPj4gSU5UX01BWCwgVkUsICJ0aWVyIn0sCj4+ICsgICAge05VTEx9Cj4+ ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyBjbGFzc19saWJ2dmVuYyA9IHsKPj4g KyAgICAuY2xhc3NfbmFtZSA9ICJsaWJ2dmVuYy12dmMgZW5jb2RlciIsCj4+ICsgICAgLml0ZW1f bmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPj4gKyAgICAub3B0aW9uICAgICA9IGxpYnZ2 ZW5jX29wdGlvbnMsCj4+ICsgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQs Cj4+ICt9Owo+PiArCj4+ICtGRkNvZGVjIGZmX2xpYnZ2ZW5jX2VuY29kZXIgPSB7Cj4+ICsgICAg LnAubmFtZSAgICAgICAgID0gImxpYnZ2ZW5jIiwKPj4gKyAgICBDT0RFQ19MT05HX05BTUUoIkgu MjY2IC8gVlZDIEVuY29kZXIgVlZlbkMiKSwKPj4gKyAgICAucC50eXBlICAgICAgICAgPSBBVk1F RElBX1RZUEVfVklERU8sCj4+ICsgICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfVlZD LAo+PiArICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFWX0NPREVD X0NBUF9PVEhFUl9USFJFQURTLAo+PiArICAgIC5wLnByb2ZpbGVzICAgICA9IE5VTExfSUZfQ09O RklHX1NNQUxMKGZmX3Z2Y19wcm9maWxlcyksCj4+ICsgICAgLnAucHJpdl9jbGFzcyAgID0gJmNs YXNzX2xpYnZ2ZW5jLAo+PiArICAgIC5wLndyYXBwZXJfbmFtZSA9ICJsaWJ2dmVuYyIsCj4+ICsg ICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZWZW5DQ29udGV4dCksCj4+ICsgICAgLnAucGl4 X2ZtdHMgICAgID0gcGl4X2ZtdHNfdnZlbmMsCj4+ICsgICAgLmluaXQgICAgICAgICAgID0gZmZf dnZlbmNfZW5jb2RlX2luaXQsCj4+ICsgICAgRkZfQ09ERUNfRU5DT0RFX0NCKGZmX3Z2ZW5jX2Vu Y29kZV9mcmFtZSksCj4+ICsgICAgLmNsb3NlICAgICAgICAgID0gZmZfdnZlbmNfZW5jb2RlX2Ns b3NlLAo+PiArICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9BVVRPX1RIUkVBRFMs Cj4+ICt9Owo+PiAtLQo+PiAyLjM0LjEKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+PiBmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZyA8bWFpbHRvOmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnPgo+PiBodHRw czovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPj4gCj4+IFRvIHVu c3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+PiBmZm1wZWctZGV2ZWwtcmVx dWVzdEBmZm1wZWcub3JnIDxtYWlsdG86ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZz4g d2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCj4+IAo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZm bXBlZy1kZXZlbEBmZm1wZWcub3JnIDxtYWlsdG86ZmZtcGVnLWRldmVsQGZmbXBlZy5vcmc+Cj4g aHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCj4gCj4gVG8g dW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJl cXVlc3RAZmZtcGVnLm9yZyA8bWFpbHRvOmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmc+ IHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWct ZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWct ZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=