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 A3E5C42A66 for ; Thu, 12 May 2022 10:27:03 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DFF8F68B456; Thu, 12 May 2022 13:27:01 +0300 (EEST) Received: from mout-p-102.mailbox.org (mout-p-102.mailbox.org [80.241.56.152]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 01C8168B411 for ; Thu, 12 May 2022 13:26:55 +0300 (EEST) Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4KzScs3C3zz9sk3 for ; Thu, 12 May 2022 12:26:53 +0200 (CEST) Message-ID: Date: Thu, 12 May 2022 15:56:51 +0530 MIME-Version: 1.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220504171516.566725-1-vigneshv@google.com> <45ffdff7-45c8-496f-0091-819035354a54@gyani.pro> From: Gyan Doshi In-Reply-To: <45ffdff7-45c8-496f-0091-819035354a54@gyani.pro> Subject: Re: [FFmpeg-devel] [PATCH 3/3] avformat/movenc: Add support for AVIF muxing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: CgpPbiAyMDIyLTA1LTExIDEwOjU1IHBtLCBHeWFuIERvc2hpIHdyb3RlOgo+Cj4KPiBPbiAyMDIy LTA1LTExIDEwOjI0IHBtLCBWaWduZXNoIFZlbmthdGFzdWJyYW1hbmlhbiB3cm90ZToKPj4gT24g V2VkLCBNYXkgNCwgMjAyMiBhdCAxMDoxNSBBTSBWaWduZXNoIFZlbmthdGFzdWJyYW1hbmlhbgo+ PiA8dmlnbmVzaHZAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4+PiBBZGQgYW4gQVZJRiBtdXhlciBieSBy ZS11c2luZyB0aGUgZXhpc3RpbmcgdGhlIG1vdi9tcDQgbXV4ZXIuCj4+Pgo+Pj4gQVZJRiBTcGVj aWZpY2F0aW9uOiBodHRwczovL2FvbWVkaWFjb2RlYy5naXRodWIuaW8vYXYxLWF2aWYKPj4+Cj4+ PiBTYW1wbGUgdXNhZ2UgZm9yIHN0aWxsIGltYWdlOgo+Pj4gZmZtcGVnIC1pIGltYWdlLnBuZyAt Yzp2IGxpYmFvbS1hdjEgLWF2aWYtaW1hZ2UgMSBpbWFnZS5hdmlmCgpJIHNlZSBhbiBvcHRpb24g Zm9yIGF2MSBlbmNvZGVyIGNhbGxlZCBzdGlsbC1waWN0dXJlIGJ1dCBubyBhdmlmLWltYWdlLgoK TXV4aW5nIHdvcmtzIGFuZCBmaWxlcyBkbyBwbGF5IGJhY2ssIGhvd2V2ZXIgZm9yIGFuaW1hdGVk IEFWSUYswqAgdGhlIApkZW11eGVyIGNvbXBsYWlucwoiSW52YWxpZCBtdmhkIHRpbWUgc2NhbGUg MCwgZGVmYXVsdGluZyB0byAxIi4KClJlZ2FyZHMsCkd5YW4KCgo+Pj4KPj4+IFNhbXBsZSB1c2Fn ZSBmb3IgYW5pbWF0ZWQgQVZJRiBpbWFnZToKPj4+IGZmbXBlZyAtaSB2aWRlby5tcDQgYW5pbWF0 ZWQuYXZpZgo+Pj4KPj4+IFdlIGNhbiByZS11c2UgYW55IG9mIHRoZSBBVjEgZW5jb2Rpbmcgb3B0 aW9ucyB0aGF0IHdpbGwgbWFrZQo+Pj4gc2Vuc2UgZm9yIGltYWdlIGVuY29kaW5nIChsaWtlIGJp dHJhdGUsIHRpbGVzLCBlbmNvZGluZyBzcGVlZCwKPj4+IGV0YykuCj4+Pgo+Pj4gVGhlIGZpbGVz IGdlbmVyYXRlZCBieSB0aGlzIG11eGVyIGhhcyBiZWVuIHZlcmlmaWVkIHRvIGJlIHZhbGlkCj4+ PiBBVklGIGZpbGVzIGJ5IHRoZSBmb2xsb3dpbmc6Cj4+PiAxKSBEaXNwbGF5cyBvbiBDaHJvbWUg KGJvdGggc3RpbGwgYW5kIGFuaW1hdGVkIGltYWdlcykuCj4+PiAyKSBEaXNwbGF5cyBvbiBGaXJl Zm94IChvbmx5IHN0aWxsIGltYWdlcywgZmlyZWZveCBkb2VzIG5vdCBzdXBwb3J0Cj4+PiDCoMKg wqAgYW5pbWF0ZWQgQVZJRiB5ZXQpLgo+Pj4gMykgVmVyaWZpZWQgdG8gYmUgdmFsaWQgYnkgQ29t cGxpYW5jZSBXYXJkZW46Cj4+PiDCoMKgwqAgaHR0cHM6Ly9naXRodWIuY29tL2dwYWMvQ29tcGxp YW5jZVdhcmRlbgo+Pj4KPj4+IEZpeGVzIHRoZSBlbmNvZGVyL211eGVyIHBhcnQgb2YgVHJhYyBU aWNrZXQgIzc2MjEKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBWaWduZXNoIFZlbmthdGFzdWJyYW1h bmlhbiA8dmlnbmVzaHZAZ29vZ2xlLmNvbT4KPj4+IC0tLQo+Pj4gwqAgY29uZmlndXJlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+Pj4gwqAgbGliYXZmb3JtYXQvYWxs Zm9ybWF0cy5jIHzCoMKgIDEgKwo+Pj4gwqAgbGliYXZmb3JtYXQvbW92ZW5jLmPCoMKgwqDCoCB8 IDMzMyAKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+Pj4gwqAg bGliYXZmb3JtYXQvbW92ZW5jLmjCoMKgwqDCoCB8wqDCoCA1ICsKPj4+IMKgIDQgZmlsZXMgY2hh bmdlZCwgMzE2IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1n aXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPj4+IGluZGV4IDE5Njg3M2M0YWEuLjI5OTJmOTc2 MGUgMTAwNzU1Cj4+PiAtLS0gYS9jb25maWd1cmUKPj4+ICsrKyBiL2NvbmZpZ3VyZQo+Pj4gQEAg LTM0MDQsNiArMzQwNCw3IEBAIGFzZl9zdHJlYW1fbXV4ZXJfc2VsZWN0PSJhc2ZfbXV4ZXIiCj4+ PiDCoCBhdjFfZGVtdXhlcl9zZWxlY3Q9ImF2MV9mcmFtZV9tZXJnZV9ic2YgYXYxX3BhcnNlciIK Pj4+IMKgIGF2aV9kZW11eGVyX3NlbGVjdD0icmlmZmRlYyBleGlmIgo+Pj4gwqAgYXZpX211eGVy X3NlbGVjdD0icmlmZmVuYyIKPj4+ICthdmlmX211eGVyX3NlbGVjdD0ibW92X211eGVyIgo+Pj4g wqAgY2FmX2RlbXV4ZXJfc2VsZWN0PSJpc29fbWVkaWEiCj4+PiDCoCBjYWZfbXV4ZXJfc2VsZWN0 PSJpc29fbWVkaWEiCj4+PiDCoCBkYXNoX211eGVyX3NlbGVjdD0ibXA0X211eGVyIgo+Pj4gZGlm ZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1h dHMuYwo+Pj4gaW5kZXggNjM4NzZjNDY4Zi4uMTgwMjUzNjYzMyAxMDA2NDQKPj4+IC0tLSBhL2xp YmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwo+Pj4gKysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5j Cj4+PiBAQCAtODEsNiArODEsNyBAQCBleHRlcm4gY29uc3QgQVZPdXRwdXRGb3JtYXQgZmZfYXVf bXV4ZXI7Cj4+PiDCoCBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdMKgIGZmX2F2MV9kZW11eGVy Owo+Pj4gwqAgZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXTCoCBmZl9hdmlfZGVtdXhlcjsKPj4+ IMKgIGV4dGVybiBjb25zdCBBVk91dHB1dEZvcm1hdCBmZl9hdmlfbXV4ZXI7Cj4+PiArZXh0ZXJu IGNvbnN0IEFWT3V0cHV0Rm9ybWF0IGZmX2F2aWZfbXV4ZXI7Cj4+PiDCoCBleHRlcm4gY29uc3Qg QVZJbnB1dEZvcm1hdMKgIGZmX2F2aXN5bnRoX2RlbXV4ZXI7Cj4+PiDCoCBleHRlcm4gY29uc3Qg QVZPdXRwdXRGb3JtYXQgZmZfYXZtMl9tdXhlcjsKPj4+IMKgIGV4dGVybiBjb25zdCBBVklucHV0 Rm9ybWF0wqAgZmZfYXZyX2RlbXV4ZXI7Cj4+PiBkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW92 ZW5jLmMgYi9saWJhdmZvcm1hdC9tb3ZlbmMuYwo+Pj4gaW5kZXggMjcxZGI5OWI0Ni4uMWEyMGZl MTdjYSAxMDA2NDQKPj4+IC0tLSBhL2xpYmF2Zm9ybWF0L21vdmVuYy5jCj4+PiArKysgYi9saWJh dmZvcm1hdC9tb3ZlbmMuYwo+Pj4gQEAgLTEzMzUsNyArMTMzNSw3IEBAIHN0YXRpYyBpbnQgbW92 X3dyaXRlX2F2MWNfdGFnKEFWSU9Db250ZXh0ICpwYiwgCj4+PiBNT1ZUcmFjayAqdHJhY2spCj4+ Pgo+Pj4gwqDCoMKgwqDCoCBhdmlvX3diMzIocGIsIDApOwo+Pj4gwqDCoMKgwqDCoCBmZmlvX3dm b3VyY2MocGIsICJhdjFDIik7Cj4+PiAtwqDCoMKgIGZmX2lzb21fd3JpdGVfYXYxYyhwYiwgdHJh Y2stPnZvc19kYXRhLCB0cmFjay0+dm9zX2xlbiwgMSk7Cj4+PiArwqDCoMKgIGZmX2lzb21fd3Jp dGVfYXYxYyhwYiwgdHJhY2stPnZvc19kYXRhLCB0cmFjay0+dm9zX2xlbiwgCj4+PiB0cmFjay0+ bW9kZSAhPSBNT0RFX0FWSUYpOwo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gdXBkYXRlX3NpemUocGIs IHBvcyk7Cj4+PiDCoCB9Cj4+Pgo+Pj4gQEAgLTIwMzcsMTIgKzIwMzcsMTMgQEAgc3RhdGljIGlu dCBtb3Zfd3JpdGVfY29scl90YWcoQVZJT0NvbnRleHQgCj4+PiAqcGIsIE1PVlRyYWNrICp0cmFj aywgaW50IHByZWZlcl9pY2MpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDC oCB9Cj4+Pgo+Pj4gLcKgwqDCoCAvKiBXZSBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBieSBN T1Ygb3IgTVA0LiAqLwo+Pj4gLcKgwqDCoCBhdl9hc3NlcnQwKHRyYWNrLT5tb2RlID09IE1PREVf TU9WIHx8IHRyYWNrLT5tb2RlID09IE1PREVfTVA0KTsKPj4+ICvCoMKgwqAgLyogV2Ugc2hvdWxk IG9ubHkgZXZlciBiZSBjYWxsZWQgZm9yIE1PViwgTVA0IGFuZCBBVklGLiAqLwo+Pj4gK8KgwqDC oCBhdl9hc3NlcnQwKHRyYWNrLT5tb2RlID09IE1PREVfTU9WIHx8IHRyYWNrLT5tb2RlID09IE1P REVfTVA0IHx8Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cmFjay0+bW9kZSA9 PSBNT0RFX0FWSUYpOwo+Pj4KPj4+IMKgwqDCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogc2l6 ZSAqLwo+Pj4gwqDCoMKgwqDCoCBmZmlvX3dmb3VyY2MocGIsICJjb2xyIik7Cj4+PiAtwqDCoMKg IGlmICh0cmFjay0+bW9kZSA9PSBNT0RFX01QNCkKPj4+ICvCoMKgwqAgaWYgKHRyYWNrLT5tb2Rl ID09IE1PREVfTVA0IHx8IHRyYWNrLT5tb2RlID09IE1PREVfQVZJRikKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBmZmlvX3dmb3VyY2MocGIsICJuY2x4Iik7Cj4+PiDCoMKgwqDCoMKgIGVsc2UKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBmZmlvX3dmb3VyY2MocGIsICJuY2xjIik7Cj4+PiBAQCAtMjA1 Miw3ICsyMDUzLDcgQEAgc3RhdGljIGludCBtb3Zfd3JpdGVfY29scl90YWcoQVZJT0NvbnRleHQg KnBiLCAKPj4+IE1PVlRyYWNrICp0cmFjaywgaW50IHByZWZlcl9pY2MpCj4+PiDCoMKgwqDCoMKg IGF2aW9fd2IxNihwYiwgdHJhY2stPnBhci0+Y29sb3JfcHJpbWFyaWVzKTsKPj4+IMKgwqDCoMKg wqAgYXZpb193YjE2KHBiLCB0cmFjay0+cGFyLT5jb2xvcl90cmMpOwo+Pj4gwqDCoMKgwqDCoCBh dmlvX3diMTYocGIsIHRyYWNrLT5wYXItPmNvbG9yX3NwYWNlKTsKPj4+IC3CoMKgwqAgaWYgKHRy YWNrLT5tb2RlID09IE1PREVfTVA0KSB7Cj4+PiArwqDCoMKgIGlmICh0cmFjay0+bW9kZSA9PSBN T0RFX01QNCB8fCB0cmFjay0+bW9kZSA9PSBNT0RFX0FWSUYpIHsKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgZnVsbF9yYW5nZSA9IHRyYWNrLT5wYXItPmNvbG9yX3JhbmdlID09IEFWQ09MX1JB TkdFX0pQRUc7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXZpb193OChwYiwgZnVsbF9yYW5nZSA8 PCA3KTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gQEAgLTIxMTgsNyArMjExOSw3IEBAIHN0YXRpYyB2 b2lkIGZpbmRfY29tcHJlc3NvcihjaGFyICogCj4+PiBjb21wcmVzc29yX25hbWUsIGludCBsZW4s IE1PVlRyYWNrICp0cmFjaykKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHx8ICh0cmFjay0+cGFyLT53aWR0aCA9PSAxNDQwICYmIAo+Pj4gdHJhY2stPnBhci0+aGVp Z2h0ID09IDEwODApCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 fCAodHJhY2stPnBhci0+d2lkdGggPT0gMTkyMCAmJiAKPj4+IHRyYWNrLT5wYXItPmhlaWdodCA9 PSAxMDgwKTsKPj4+Cj4+PiAtwqDCoMKgIGlmICh0cmFjay0+bW9kZSA9PSBNT0RFX01PViAmJgo+ Pj4gK8KgwqDCoCBpZiAoKHRyYWNrLT5tb2RlID09IE1PREVfQVZJRiB8fCB0cmFjay0+bW9kZSA9 PSBNT0RFX01PVikgJiYKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAoZW5jb2RlciA9IGF2X2RpY3Rf Z2V0KHRyYWNrLT5zdC0+bWV0YWRhdGEsICJlbmNvZGVyIiwgCj4+PiBOVUxMLCAwKSkpIHsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9zdHJsY3B5KGNvbXByZXNzb3JfbmFtZSwgZW5jb2Rlci0+ dmFsdWUsIDMyKTsKPj4+IMKgwqDCoMKgwqAgfSBlbHNlIGlmICh0cmFjay0+cGFyLT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9NUEVHMlZJREVPICYmIAo+Pj4geGRjYW1fcmVzKSB7Cj4+PiBAQCAt MjEzOSw2ICsyMTQwLDI1IEBAIHN0YXRpYyB2b2lkIGZpbmRfY29tcHJlc3NvcihjaGFyICogCj4+ PiBjb21wcmVzc29yX25hbWUsIGludCBsZW4sIE1PVlRyYWNrICp0cmFjaykKPj4+IMKgwqDCoMKg wqAgfQo+Pj4gwqAgfQo+Pj4KPj4+ICtzdGF0aWMgaW50IG1vdl93cml0ZV9jY3N0X3RhZyhBVklP Q29udGV4dCAqcGIpCj4+PiArewo+Pj4gK8KgwqDCoCBpbnQ2NF90IHBvcyA9IGF2aW9fdGVsbChw Yik7Cj4+PiArwqDCoMKgIC8vIFdyaXRlIHNhbmUgZGVmYXVsdHM6Cj4+PiArwqDCoMKgIC8vIGFs bF9yZWZfcGljc19pbnRyYSA9IDAgOiBhbGwgc2FtcGxlcyBjYW4gdXNlIGFueSB0eXBlIG9mIAo+ Pj4gcmVmZXJlbmNlLgo+Pj4gK8KgwqDCoCAvLyBpbnRyYV9wcmVkX3VzZWQgPSAxIDogaW50cmEg cHJlZGljdGlvbiBtYXkgb3IgbWF5IG5vdCBiZSB1c2VkLgo+Pj4gK8KgwqDCoCAvLyBtYXhfcmVm X3Blcl9waWMgPSAxNSA6IHJlc2VydmVkIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgYW55IAo+Pj4g bnVtYmVyIG9mCj4+PiArwqDCoMKgIC8vwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZWZlcmVuY2UgaW1hZ2VzIGNhbiBiZSB1c2VkLgo+Pj4gK8KgwqDCoCB1 aW50OF90IGNjc3RWYWx1ZSA9ICgwIDw8IDcpIHzCoCAvKiBhbGxfcmVmX3BpY3NfaW50cmEgKi8K Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgxIDw8 IDYpIHzCoCAvKiBpbnRyYV9wcmVkX3VzZWQgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgxNSA8PCAyKTvCoCAvKiBtYXhfcmVmX3Blcl9waWMg Ki8KPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogc2l6ZSAqLwo+Pj4gK8KgwqDCoCBm ZmlvX3dmb3VyY2MocGIsICJjY3N0Iik7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgMCk7IC8q IFZlcnNpb24gJiBmbGFncyAqLwo+Pj4gK8KgwqDCoCBhdmlvX3c4KHBiLCBjY3N0VmFsdWUpOwo+ Pj4gK8KgwqDCoCBhdmlvX3diMjQocGIsIDApO8KgIC8qIHJlc2VydmVkICovCj4+PiArwqDCoMKg IHJldHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsKPj4+ICt9Cj4+PiArCj4+PiDCoCBzdGF0aWMg aW50IG1vdl93cml0ZV92aWRlb190YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29udGV4dCAK Pj4+ICpwYiwgTU9WTXV4Q29udGV4dCAqbW92LCBNT1ZUcmFjayAqdHJhY2spCj4+PiDCoCB7Cj4+ PiDCoMKgwqDCoMKgIGludCByZXQgPSBBVkVSUk9SX0JVRzsKPj4+IEBAIC0yMjcyLDcgKzIyOTIs NyBAQCBzdGF0aWMgaW50IG1vdl93cml0ZV92aWRlb190YWcoQVZGb3JtYXRDb250ZXh0IAo+Pj4g KnMsIEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg ZWxzZQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKG1vdi0+ZmMsIEFWX0xP R19XQVJOSU5HLCAiTm90IHdyaXRpbmcgJ2dhbWEnIAo+Pj4gYXRvbS4gRm9ybWF0IGlzIG5vdCBN T1YuXG4iKTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gLcKgwqDCoCBpZiAodHJhY2stPm1vZGUgPT0g TU9ERV9NT1YgfHwgdHJhY2stPm1vZGUgPT0gTU9ERV9NUDQpIHsKPj4+ICvCoMKgwqAgaWYgKHRy YWNrLT5tb2RlID09IE1PREVfTU9WIHx8IHRyYWNrLT5tb2RlID09IE1PREVfTVA0IHx8IAo+Pj4g dHJhY2stPm1vZGUgPT0gTU9ERV9BVklGKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGhh c19jb2xvcl9pbmZvID0gdHJhY2stPnBhci0+Y29sb3JfcHJpbWFyaWVzICE9IAo+Pj4gQVZDT0xf UFJJX1VOU1BFQ0lGSUVEICYmCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJhY2stPnBhci0+Y29sb3JfdHJjICE9IAo+Pj4g QVZDT0xfVFJDX1VOU1BFQ0lGSUVEICYmCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJhY2stPnBhci0+Y29sb3Jfc3BhY2Ug IT0gCj4+PiBBVkNPTF9TUENfVU5TUEVDSUZJRUQ7Cj4+PiBAQCAtMjMyNCw2ICsyMzQ0LDkgQEAg c3RhdGljIGludCBtb3Zfd3JpdGVfdmlkZW9fdGFnKEFWRm9ybWF0Q29udGV4dCAKPj4+ICpzLCBB VklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRleAo+Pj4gwqDCoMKgwqDCoCBpZiAoYXZpZCkKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBhdmlvX3diMzIocGIsIDApOwo+Pj4KPj4+ICvCoMKgwqAgaWYg KHRyYWNrLT5tb2RlID09IE1PREVfQVZJRikKPj4+ICvCoMKgwqDCoMKgwqDCoCBtb3Zfd3JpdGVf Y2NzdF90YWcocGIpOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gdXBkYXRlX3NpemUocGIs IHBvcyk7Cj4+PiDCoCB9Cj4+Pgo+Pj4gQEAgLTI4MjYsOCArMjg0OSwxMyBAQCBzdGF0aWMgaW50 IG1vdl93cml0ZV9oZGxyX3RhZyhBVkZvcm1hdENvbnRleHQgCj4+PiAqcywgQVZJT0NvbnRleHQg KnBiLCBNT1ZUcmFjayAqdHJhCj4+PiDCoMKgwqDCoMKgIGlmICh0cmFjaykgewo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGhkbHIgPSAodHJhY2stPm1vZGUgPT0gTU9ERV9NT1YpID8gIm1obHIiIDog IlwwXDBcMFwwIjsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodHJhY2stPnBhci0+Y29kZWNf dHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGhkbHJfdHlwZSA9ICJ2aWRlIjsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2NywqDC oMKgwqAgPSAiVmlkZW9IYW5kbGVyIjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0 cmFjay0+bW9kZSA9PSBNT0RFX0FWSUYpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaGRscl90eXBlID0gInBpY3QiOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkZXNjcsKgwqDCoMKgID0gIlBpY3R1cmVIYW5kbGVyIjsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0gZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhk bHJfdHlwZSA9ICJ2aWRlIjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVz Y3LCoMKgwqDCoCA9ICJWaWRlb0hhbmRsZXIiOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAodHJhY2stPnBhci0+Y29kZWNfdHlw ZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGhkbHJfdHlwZSA9ICJzb3VuIjsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2Ny wqDCoMKgwqAgPSAiU291bmRIYW5kbGVyIjsKPj4+IEBAIC0yODkyLDYgKzI5MjAsMTI4IEBAIHN0 YXRpYyBpbnQgCj4+PiBtb3Zfd3JpdGVfaGRscl90YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklP Q29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmEKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIHVwZGF0ZV9z aXplKHBiLCBwb3MpOwo+Pj4gwqAgfQo+Pj4KPj4+ICtzdGF0aWMgaW50IG1vdl93cml0ZV9waXRt X3RhZyhBVklPQ29udGV4dCAqcGIsIGludCBpdGVtX2lkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgaW50 NjRfdCBwb3MgPSBhdmlvX3RlbGwocGIpOwo+Pj4gK8KgwqDCoCBhdmlvX3diMzIocGIsIDApOyAv KiBzaXplICovCj4+PiArwqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwgInBpdG0iKTsKPj4+ICvCoMKg wqAgYXZpb193YjMyKHBiLCAwKTsgLyogVmVyc2lvbiAmIGZsYWdzICovCj4+PiArwqDCoMKgIGF2 aW9fd2IxNihwYiwgaXRlbV9pZCk7IC8qIGl0ZW1faWQgKi8KPj4+ICvCoMKgwqAgcmV0dXJuIHVw ZGF0ZV9zaXplKHBiLCBwb3MpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IG1vdl93cml0 ZV9pbG9jX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRleHQgKm1vdiwgCj4+PiBBVkZv cm1hdENvbnRleHQgKnMpCj4+PiArewo+Pj4gK8KgwqDCoCBpbnQ2NF90IHBvcyA9IGF2aW9fdGVs bChwYik7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgMCk7IC8qIHNpemUgKi8KPj4+ICvCoMKg wqAgZmZpb193Zm91cmNjKHBiLCAiaWxvYyIpOwo+Pj4gK8KgwqDCoCBhdmlvX3diMzIocGIsIDAp OyAvKiBWZXJzaW9uICYgZmxhZ3MgKi8KPj4+ICvCoMKgwqAgYXZpb193OChwYiwgKDQgPDwgNCkg KyA0KTsgLyogb2Zmc2V0X3NpemUoNCkgYW5kIGxlbmd0aF9zaXplKDQpICovCj4+PiArwqDCoMKg IGF2aW9fdzgocGIsIDApOyAvKiBiYXNlX29mZnNldF9zaXplKDQpIGFuZCByZXNlcnZlZCg0KSAq Lwo+Pj4gK8KgwqDCoCBhdmlvX3diMTYocGIsIDEpOyAvKiBpdGVtX2NvdW50ICovCj4+PiArCj4+ PiArwqDCoMKgIGF2aW9fd2IxNihwYiwgMSk7IC8qIGl0ZW1faWQgKi8KPj4+ICvCoMKgwqAgYXZp b193YjE2KHBiLCAwKTsgLyogZGF0YV9yZWZlcmVuY2VfaW5kZXggKi8KPj4+ICvCoMKgwqAgYXZp b193YjE2KHBiLCAxKTsgLyogZXh0ZW50X2NvdW50ICovCj4+PiArwqDCoMKgIG1vdi0+YXZpZl9l eHRlbnRfcG9zID0gYXZpb190ZWxsKHBiKTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsg LyogZXh0ZW50X29mZnNldCAod3JpdHRlbiBsYXRlcikgKi8KPj4+ICvCoMKgwqAgLy8gRm9yIGFu aW1hdGVkIEFWSUYsIHdlIHNpbXBseSB3cml0ZSB0aGUgZmlyc3QgcGFja2V0J3Mgc2l6ZS4KPj4+ ICvCoMKgwqAgYXZpb193YjMyKHBiLCBtb3YtPmF2aWZfZXh0ZW50X2xlbmd0aCk7IC8qIGV4dGVu dF9sZW5ndGggKi8KPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3Mp Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IG1vdl93cml0ZV9paW5mX3RhZyhBVklPQ29u dGV4dCAqcGIsIE1PVk11eENvbnRleHQgKm1vdiwgCj4+PiBBVkZvcm1hdENvbnRleHQgKnMpCj4+ PiArewo+Pj4gK8KgwqDCoCBpbnQ2NF90IGluZmVfcG9zOwo+Pj4gK8KgwqDCoCBpbnQ2NF90IGlp bmZfcG9zID0gYXZpb190ZWxsKHBiKTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyog c2l6ZSAqLwo+Pj4gK8KgwqDCoCBmZmlvX3dmb3VyY2MocGIsICJpaW5mIik7Cj4+PiArwqDCoMKg IGF2aW9fd2IzMihwYiwgMCk7IC8qIFZlcnNpb24gJiBmbGFncyAqLwo+Pj4gK8KgwqDCoCBhdmlv X3diMTYocGIsIDEpOyAvKiBlbnRyeV9jb3VudCAqLwo+Pj4gKwo+Pj4gK8KgwqDCoCBpbmZlX3Bv cyA9IGF2aW9fdGVsbChwYik7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgMCk7IC8qIHNpemUg Ki8KPj4+ICvCoMKgwqAgZmZpb193Zm91cmNjKHBiLCAiaW5mZSIpOwo+Pj4gK8KgwqDCoCBhdmlv X3c4KHBiLCAweDIpOyAvKiBWZXJzaW9uICovCj4+PiArwqDCoMKgIGF2aW9fd2IyNChwYiwgMCk7 IC8qIGZsYWdzICovCj4+PiArwqDCoMKgIGF2aW9fd2IxNihwYiwgMSk7IC8qIGl0ZW1faWQgKi8K Pj4+ICvCoMKgwqAgYXZpb193YjE2KHBiLCAwKTsgLyogaXRlbV9wcm90ZWN0aW9uX2luZGV4ICov Cj4+PiArwqDCoMKgIGF2aW9fd3JpdGUocGIsICJhdjAxIiwgNCk7IC8qIGl0ZW1fdHlwZSAqLwo+ Pj4gK8KgwqDCoCBhdmlvX3dyaXRlKHBiLCAiQ29sb3JcMCIsIDYpOyAvKiBpdGVtX25hbWUgKi8K Pj4+ICvCoMKgwqAgdXBkYXRlX3NpemUocGIsIGluZmVfcG9zKTsKPj4+ICsKPj4+ICvCoMKgwqAg cmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBpaW5mX3Bvcyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBpbnQgbW92X3dyaXRlX2lzcGVfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4dCAq bW92LCAKPj4+IEFWRm9ybWF0Q29udGV4dCAqcykKPj4+ICt7Cj4+PiArwqDCoMKgIGludDY0X3Qg cG9zID0gYXZpb190ZWxsKHBiKTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogc2l6 ZSAqLwo+Pj4gK8KgwqDCoCBmZmlvX3dmb3VyY2MocGIsICJpc3BlIik7Cj4+PiArwqDCoMKgIGF2 aW9fd2IzMihwYiwgMCk7IC8qIFZlcnNpb24gJiBmbGFncyAqLwo+Pj4gK8KgwqDCoCBhdmlvX3di MzIocGIsIHMtPnN0cmVhbXNbMF0tPmNvZGVjcGFyLT53aWR0aCk7IC8qIGltYWdlX3dpZHRoICov Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgcy0+c3RyZWFtc1swXS0+Y29kZWNwYXItPmhlaWdo dCk7IC8qIGltYWdlX2hlaWdodCAqLwo+Pj4gK8KgwqDCoCByZXR1cm4gdXBkYXRlX3NpemUocGIs IHBvcyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgbW92X3dyaXRlX3BpeGlfdGFnKEFW SU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4dCAqbW92LCAKPj4+IEFWRm9ybWF0Q29udGV4dCAq cykKPj4+ICt7Cj4+PiArwqDCoMKgIGludDY0X3QgcG9zID0gYXZpb190ZWxsKHBiKTsKPj4+ICvC oMKgwqAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpwaXhkZXNjID0gCj4+PiBhdl9waXhfZm10 X2Rlc2NfZ2V0KHMtPnN0cmVhbXNbMF0tPmNvZGVjcGFyLT5mb3JtYXQpOwo+Pj4gK8KgwqDCoCBh dmlvX3diMzIocGIsIDApOyAvKiBzaXplICovCj4+PiArwqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwg InBpeGkiKTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogVmVyc2lvbiAmIGZsYWdz ICovCj4+PiArwqDCoMKgIGF2aW9fdzgocGIsIHBpeGRlc2MtPm5iX2NvbXBvbmVudHMpOyAvKiBu dW1fY2hhbm5lbHMgKi8KPj4+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhkZXNjLT5u Yl9jb21wb25lbnRzOyArK2kpIHsKPj4+ICvCoMKgwqDCoMKgIGF2aW9fdzgocGIsIHBpeGRlc2Mt PmNvbXBbaV0uZGVwdGgpOyAvKiBiaXRzX3Blcl9jaGFubmVsICovCj4+PiArwqDCoMKgIH0KPj4+ ICvCoMKgwqAgcmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3MpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW50IG1vdl93cml0ZV9pcGNvX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVk11eENvbnRl eHQgKm1vdiwgCj4+PiBBVkZvcm1hdENvbnRleHQgKnMpCj4+PiArewo+Pj4gK8KgwqDCoCBpbnQ2 NF90IHBvcyA9IGF2aW9fdGVsbChwYik7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgMCk7IC8q IHNpemUgKi8KPj4+ICvCoMKgwqAgZmZpb193Zm91cmNjKHBiLCAiaXBjbyIpOwo+Pj4gK8KgwqDC oCBtb3Zfd3JpdGVfaXNwZV90YWcocGIsIG1vdiwgcyk7Cj4+PiArwqDCoMKgIG1vdl93cml0ZV9w aXhpX3RhZyhwYiwgbW92LCBzKTsKPj4+ICvCoMKgwqAgbW92X3dyaXRlX2F2MWNfdGFnKHBiLCAm bW92LT50cmFja3NbMF0pOwo+Pj4gK8KgwqDCoCBtb3Zfd3JpdGVfY29scl90YWcocGIsICZtb3Yt PnRyYWNrc1swXSwgMCk7Cj4+PiArwqDCoMKgIHJldHVybiB1cGRhdGVfc2l6ZShwYiwgcG9zKTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBtb3Zfd3JpdGVfaXBtYV90YWcoQVZJT0NvbnRl eHQgKnBiLCBNT1ZNdXhDb250ZXh0ICptb3YsIAo+Pj4gQVZGb3JtYXRDb250ZXh0ICpzKQo+Pj4g K3sKPj4+ICvCoMKgwqAgaW50NjRfdCBwb3MgPSBhdmlvX3RlbGwocGIpOwo+Pj4gK8KgwqDCoCBh dmlvX3diMzIocGIsIDApOyAvKiBzaXplICovCj4+PiArwqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwg ImlwbWEiKTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogVmVyc2lvbiAmIGZsYWdz ICovCj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwgMSk7IC8qIGVudHJ5X2NvdW50ICovCj4+PiAr wqDCoMKgIGF2aW9fd2IxNihwYiwgMSk7IC8qIGl0ZW1fSUQgKi8KPj4+ICvCoMKgwqAgYXZpb193 OChwYiwgNCk7IC8qIGFzc29jaWF0aW9uX2NvdW50ICovCj4+PiArCj4+PiArwqDCoMKgIC8vIGlz cGUgYXNzb2NpYXRpb24uCj4+PiArwqDCoMKgIGF2aW9fdzgocGIsIDEpOyAvKiBlc3NlbnRpYWwg YW5kIHByb3BlcnR5X2luZGV4ICovCj4+PiArwqDCoMKgIC8vIHBpeGkgYXNzb2NpYXRpb24uCj4+ PiArwqDCoMKgIGF2aW9fdzgocGIsIDIpOyAvKiBlc3NlbnRpYWwgYW5kIHByb3BlcnR5X2luZGV4 ICovCj4+PiArwqDCoMKgIC8vIGF2MUMgYXNzb2NpYXRpb24uCj4+PiArwqDCoMKgIGF2aW9fdzgo cGIsIDB4ODAgfCAzKTsgLyogZXNzZW50aWFsIGFuZCBwcm9wZXJ0eV9pbmRleCAqLwo+Pj4gK8Kg wqDCoCAvLyBjb2xyIGFzc29jaWF0aW9uLgo+Pj4gK8KgwqDCoCBhdmlvX3c4KHBiLCA0KTsgLyog ZXNzZW50aWFsIGFuZCBwcm9wZXJ0eV9pbmRleCAqLwo+Pj4gK8KgwqDCoCByZXR1cm4gdXBkYXRl X3NpemUocGIsIHBvcyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgbW92X3dyaXRlX2lw cnBfdGFnKEFWSU9Db250ZXh0ICpwYiwgTU9WTXV4Q29udGV4dCAqbW92LCAKPj4+IEFWRm9ybWF0 Q29udGV4dCAqcykKPj4+ICt7Cj4+PiArwqDCoMKgIGludDY0X3QgcG9zID0gYXZpb190ZWxsKHBi KTsKPj4+ICvCoMKgwqAgYXZpb193YjMyKHBiLCAwKTsgLyogc2l6ZSAqLwo+Pj4gK8KgwqDCoCBm ZmlvX3dmb3VyY2MocGIsICJpcHJwIik7Cj4+PiArwqDCoMKgIG1vdl93cml0ZV9pcGNvX3RhZyhw YiwgbW92LCBzKTsKPj4+ICvCoMKgwqAgbW92X3dyaXRlX2lwbWFfdGFnKHBiLCBtb3YsIHMpOwo+ Pj4gK8KgwqDCoCByZXR1cm4gdXBkYXRlX3NpemUocGIsIHBvcyk7Cj4+PiArfQo+Pj4gKwo+Pj4g wqAgc3RhdGljIGludCBtb3Zfd3JpdGVfaG1oZF90YWcoQVZJT0NvbnRleHQgKnBiKQo+Pj4gwqAg ewo+Pj4gwqDCoMKgwqDCoCAvKiBUaGlzIGF0b20gbXVzdCBiZSBwcmVzZW50LCBidXQgbGVhdmlu ZyB0aGUgdmFsdWVzIGF0IHplcm8KPj4+IEBAIC0zMTM3LDcgKzMyODcsNyBAQCBzdGF0aWMgaW50 IG1vdl93cml0ZV90a2hkX3RhZyhBVklPQ29udGV4dCAqcGIsIAo+Pj4gTU9WTXV4Q29udGV4dCAq bW92LAo+Pj4gwqDCoMKgwqDCoCBpZiAoc3QgJiYgKHRyYWNrLT5wYXItPmNvZGVjX3R5cGUgPT0g QVZNRURJQV9UWVBFX1ZJREVPIHx8Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB0cmFjay0+cGFyLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9TVUJUSVRMRSkpIHsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQ2NF90IHRyYWNrX3dpZHRoXzE2MTY7Cj4+PiAtwqDCoMKg wqDCoMKgwqAgaWYgKHRyYWNrLT5tb2RlID09IE1PREVfTU9WKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHRyYWNrLT5tb2RlID09IE1PREVfTU9WIHx8IHRyYWNrLT5tb2RlID09IE1PREVfQVZJ Rikgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJhY2tfd2lkdGhfMTYxNiA9IHRy YWNrLT5wYXItPndpZHRoICogMHgxMDAwMFVMTDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVs c2Ugewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJhY2tfd2lkdGhfMTYxNiA9IAo+ Pj4gYXZfcmVzY2FsZShzdC0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0sCj4+PiBAQCAtMzk0Nyw4 ICs0MDk3LDE1IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX21ldGFfdGFnKEFWSU9Db250ZXh0IAo+ Pj4gKnBiLCBNT1ZNdXhDb250ZXh0ICptb3YsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbW92X3dy aXRlX21kdGFfaGRscl90YWcocGIsIG1vdiwgcyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbW92 X3dyaXRlX21kdGFfa2V5c190YWcocGIsIG1vdiwgcyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg bW92X3dyaXRlX21kdGFfaWxzdF90YWcocGIsIG1vdiwgcyk7Cj4+PiAtwqDCoMKgIH0KPj4+IC3C oMKgwqAgZWxzZSB7Cj4+PiArwqDCoMKgIH0gZWxzZSBpZiAobW92LT5tb2RlID09IE1PREVfQVZJ Rikgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIG1vdl93cml0ZV9oZGxyX3RhZyhzLCBwYiwgJm1vdi0+ dHJhY2tzWzBdKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvLyBXZSBhbHdheXMgd3JpdGUgdGhlIHBy aW1hcnkgaXRlbSBpZCBhcyAxIHNpbmNlIG9ubHkgb25lIAo+Pj4gdHJhY2sgaXMKPj4+ICvCoMKg wqDCoMKgwqDCoCAvLyBzdXBwb3J0ZWQgZm9yIEFWSUYuCj4+PiArwqDCoMKgwqDCoMKgwqAgbW92 X3dyaXRlX3BpdG1fdGFnKHBiLCAxKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBtb3Zfd3JpdGVfaWxv Y190YWcocGIsIG1vdiwgcyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbW92X3dyaXRlX2lpbmZfdGFn KHBiLCBtb3YsIHMpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIG1vdl93cml0ZV9pcHJwX3RhZyhwYiwg bW92LCBzKTsKPj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBp VHVuZXMgbWV0YWRhdGEgdGFnICovCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbW92X3dyaXRlX2l0 dW5lc19oZGxyX3RhZyhwYiwgbW92LCBzKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBtb3Zfd3Jp dGVfaWxzdF90YWcocGIsIG1vdiwgcyk7Cj4+PiBAQCAtNDI3OCwxMCArNDQzNSwxMSBAQCBzdGF0 aWMgaW50IG1vdl93cml0ZV9tb292X3RhZyhBVklPQ29udGV4dCAKPj4+ICpwYiwgTU9WTXV4Q29u dGV4dCAqbW92LAo+Pj4gwqDCoMKgwqDCoCB9Cj4+Pgo+Pj4gwqDCoMKgwqDCoCBtb3Zfd3JpdGVf bXZoZF90YWcocGIsIG1vdik7Cj4+PiAtwqDCoMKgIGlmIChtb3YtPm1vZGUgIT0gTU9ERV9NT1Yg JiYgIW1vdi0+aW9kc19za2lwKQo+Pj4gK8KgwqDCoCBpZiAobW92LT5tb2RlICE9IE1PREVfTU9W ICYmIG1vdi0+bW9kZSAhPSBNT0RFX0FWSUYgJiYgCj4+PiAhbW92LT5pb2RzX3NraXApCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgbW92X3dyaXRlX2lvZHNfdGFnKHBiLCBtb3YpOwo+Pj4gwqDCoMKg wqDCoCBmb3IgKGkgPSAwOyBpIDwgbW92LT5uYl9zdHJlYW1zOyBpKyspIHsKPj4+IC3CoMKgwqDC oMKgwqDCoCBpZiAobW92LT50cmFja3NbaV0uZW50cnkgPiAwIHx8IG1vdi0+ZmxhZ3MgJiAKPj4+ IEZGX01PVl9GTEFHX0ZSQUdNRU5UKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG1vdi0+dHJh Y2tzW2ldLmVudHJ5ID4gMCB8fCBtb3YtPmZsYWdzICYgCj4+PiBGRl9NT1ZfRkxBR19GUkFHTUVO VCB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW92LT5tb2RlID09IE1PREVfQVZJRikg ewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHJldCA9IG1vdl93cml0ZV90cmFr X3RhZyhzLCBwYiwgbW92LCAKPj4+ICYobW92LT50cmFja3NbaV0pLCBpIDwgcy0+bmJfc3RyZWFt cyA/IHMtPnN0cmVhbXNbaV0gOiBOVUxMKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChyZXQgPCAwKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4gQEAgLTQyOTIsNyArNDQ1MCw3IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX21v b3ZfdGFnKEFWSU9Db250ZXh0ICpwYiwgCj4+PiBNT1ZNdXhDb250ZXh0ICptb3YsCj4+Pgo+Pj4g wqDCoMKgwqDCoCBpZiAobW92LT5tb2RlID09IE1PREVfUFNQKQo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIG1vdl93cml0ZV91dWlkdXNtdF90YWcocGIsIHMpOwo+Pj4gLcKgwqDCoCBlbHNlCj4+PiAr wqDCoMKgIGVsc2UgaWYgKG1vdi0+bW9kZSAhPSBNT0RFX0FWSUYpCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgbW92X3dyaXRlX3VkdGFfdGFnKHBiLCBtb3YsIHMpOwo+Pj4KPj4+IMKgwqDCoMKgwqAg cmV0dXJuIHVwZGF0ZV9zaXplKHBiLCBwb3MpOwo+Pj4gQEAgLTUwMzksNiArNTE5Nyw5IEBAIHN0 YXRpYyB2b2lkIAo+Pj4gbW92X3dyaXRlX2Z0eXBfdGFnX2ludGVybmFsKEFWSU9Db250ZXh0ICpw YiwgQVZGb3JtYXRDb250ZXh0ICpzLAo+Pj4gwqDCoMKgwqDCoCBlbHNlIGlmIChtb3YtPm1vZGUg PT0gTU9ERV8zR1ApIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBmZmlvX3dmb3VyY2MocGIsIGhh c19oMjY0ID8gIjNncDYiwqAgOiAiM2dwNCIpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIG1pbm9y ID3CoMKgwqDCoCBoYXNfaDI2NCA/wqDCoCAweDEwMCA6wqDCoCAweDIwMDsKPj4+ICvCoMKgwqAg fSBlbHNlIGlmIChtb3YtPm1vZGUgPT0gTU9ERV9BVklGKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAg ZmZpb193Zm91cmNjKHBiLCBtb3YtPmlzX2FuaW1hdGVkX2F2aWYgPyAiYXZpcyIgOiAiYXZpZiIp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIG1pbm9yID0gMDsKPj4+IMKgwqDCoMKgwqAgfSBlbHNlIGlm IChtb3YtPm1vZGUgJiBNT0RFXzNHMikgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZmaW9fd2Zv dXJjYyhwYiwgaGFzX2gyNjQgPyAiM2cyYiLCoCA6ICIzZzJhIik7Cj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgbWlub3IgPcKgwqDCoMKgIGhhc19oMjY0ID8gMHgyMDAwMCA6IDB4MTAwMDA7Cj4+PiBA QCAtNTEwMiw2ICs1MjYzLDMxIEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX2Z0eXBfdGFnKEFWSU9D b250ZXh0IAo+Pj4gKnBiLCBBVkZvcm1hdENvbnRleHQgKnMpCj4+PiDCoMKgwqDCoMKgIC8vIGNv bXBhdGlibGUgYnJhbmQgYSBzZWNvbmQgdGltZS4KPj4+IMKgwqDCoMKgwqAgaWYgKG1vdi0+bW9k ZSA9PSBNT0RFX0lTTSkgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwg InBpZmYiKTsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChtb3YtPm1vZGUgPT0gTU9ERV9BVklGKSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpwaXhfZm10X2Rl c2MgPQo+Pj4gKyBhdl9waXhfZm10X2Rlc2NfZ2V0KHMtPnN0cmVhbXNbMF0tPmNvZGVjcGFyLT5m b3JtYXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbnN0IGludCBkZXB0aCA9IHBpeF9mbXRfZGVz Yy0+Y29tcFswXS5kZXB0aDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobW92LT5pc19hbmltYXRl ZF9hdmlmKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBGb3IgYW5pbWF0ZWQgQVZJ RiwgbWFqb3IgYnJhbmQgaXMgImF2aXMiLiBBZGQgImF2aWYiIAo+Pj4gYXMgYQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLy8gY29tcGF0aWJsZSBicmFuZC4KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwgImF2aWYiKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZmaW9fd2ZvdXJjYyhwYiwgIm1zZjEiKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGZmaW9fd2ZvdXJjYyhwYiwgImlzbzgiKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiAr wqDCoMKgwqDCoMKgwqAgZmZpb193Zm91cmNjKHBiLCAibWlmMSIpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGZmaW9fd2ZvdXJjYyhwYiwgIm1pYWYiKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZGVw dGggPT0gOCB8fCBkZXB0aCA9PSAxMCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8g TUExQiBhbmQgTUExQSBicmFuZHMgYXJlIGJhc2VkIG9uIEFWMSBwcm9maWxlLiBTaG9ydCAKPj4+ IGhhbmQgZm9yCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBjb21wdXRpbmcgdGhhdCBp cyBiYXNlZCBvbiBjaHJvbWEgc3Vic2FtcGxpbmcgdHlwZS4gCj4+PiA0MjAgY2hyb21hCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBzdWJzYW1wbGluZyBpcyBNQTFCLsKgIDQ0NCBjaHJv bWEgc3Vic2FtcGxpbmcgaXMgTUExQS4KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgh cGl4X2ZtdF9kZXNjLT5sb2cyX2Nocm9tYV93ICYmIAo+Pj4gIXBpeF9mbXRfZGVzYy0+bG9nMl9j aHJvbWFfaCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyA0NDQgY2hy b21hIHN1YnNhbXBsaW5nLgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZmlv X3dmb3VyY2MocGIsICJNQTFBIik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ug ewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyA0MjAgY2hyb21hIHN1YnNh bXBsaW5nLgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZmlvX3dmb3VyY2Mo cGIsICJNQTFCIik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgwqDC oMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCB9IGVsc2UgaWYgKG1vdi0+bW9kZSAhPSBNT0RFX01PVikg ewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8vIFdlIGFkZCB0ZmR0IGF0b21zIHdoZW4gZnJhZ21l bnRpbmcsIHNpZ25hbCB0aGlzIHdpdGggCj4+PiB0aGUgaXNvNiBjb21wYXRpYmxlCj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgLy8gYnJhbmQsIGlmIG5vdCBhbHJlYWR5IHRoZSBtYWpvciBicmFuZC4g VGhpcyBpcyAKPj4+IGNvbXBhdGlibGUgd2l0aCB1c2VycyB0aGF0Cj4+PiBAQCAtNTcwNSw3ICs1 ODkxLDcgQEAgaW50IGZmX21vdl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCAKPj4+ IEFWUGFja2V0ICpwa3QpCj4+PiDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pgo+Pj4gLcKgwqDCoCBpZiAobW92LT5mbGFncyAmIEZG X01PVl9GTEFHX0ZSQUdNRU5UKSB7Cj4+PiArwqDCoMKgIGlmIChtb3YtPmZsYWdzICYgRkZfTU9W X0ZMQUdfRlJBR01FTlQgfHwgbW92LT5tb2RlID09IE1PREVfQVZJRikgewo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIGludCByZXQ7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1vdi0+bW9vdl93 cml0dGVuIHx8IG1vdi0+ZmxhZ3MgJiAKPj4+IEZGX01PVl9GTEFHX0VNUFRZX01PT1YpIHsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChtb3YtPmZyYWdfaW50ZXJsZWF2ZSAmJiBt b3YtPmZyYWdtZW50cyA+IDApIHsKPj4+IEBAIC01ODQ2LDcgKzYwMzIsMTEgQEAgaW50IGZmX21v dl93cml0ZV9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCAKPj4+IEFWUGFja2V0ICpwa3QpCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdmlvX3dyaXRlKHBiLCByZWZvcm1hdHRlZF9k YXRhLCBzaXplKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2l6ZSA9IGZmX2F2MV9maWx0ZXJfb2J1cyhwYiwgcGt0LT5kYXRh LCBwa3QtPnNpemUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHRyay0+bW9kZSA9 PSBNT0RFX0FWSUYgJiYgIW1vdi0+YXZpZl9leHRlbnRfbGVuZ3RoKSB7Cj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vdi0+YXZpZl9leHRlbnRfbGVuZ3RoID0gc2l6ZTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiAr Cj4+PiDCoCAjaWYgQ09ORklHX0FDM19QQVJTRVIKPj4+IMKgwqDCoMKgwqAgfSBlbHNlIGlmIChw YXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0VBQzMpIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplID0gaGFuZGxlX2VhYzMobW92LCBwa3QsIHRyayk7Cj4+PiBAQCAtNjU3OSwxMSArNjc2 OSwxNSBAQCBzdGF0aWMgaW50IG1vdl9pbml0KEFWRm9ybWF0Q29udGV4dCAqcykKPj4+IMKgwqDC oMKgwqAgZWxzZSBpZiAoSVNfTU9ERShpcG9kLCBJUE9EKSkgbW92LT5tb2RlID0gTU9ERV9JUE9E Owo+Pj4gwqDCoMKgwqDCoCBlbHNlIGlmIChJU19NT0RFKGlzbXYsIElTTVYpKSBtb3YtPm1vZGUg PSBNT0RFX0lTTTsKPj4+IMKgwqDCoMKgwqAgZWxzZSBpZiAoSVNfTU9ERShmNHYswqDCoCBGNFYp KSBtb3YtPm1vZGUgPSBNT0RFX0Y0VjsKPj4+ICvCoMKgwqAgZWxzZSBpZiAoSVNfTU9ERShhdmlm LCBBVklGKSkgbW92LT5tb2RlID0gTU9ERV9BVklGOwo+Pj4gwqAgI3VuZGVmIElTX01PREUKPj4+ Cj4+PiDCoMKgwqDCoMKgIGlmIChtb3YtPmZsYWdzICYgRkZfTU9WX0ZMQUdfREVMQVlfTU9PVikK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBtb3YtPmZsYWdzIHw9IEZGX01PVl9GTEFHX0VNUFRZX01P T1Y7Cj4+Pgo+Pj4gK8KgwqDCoCBpZiAobW92LT5tb2RlID09IE1PREVfQVZJRikKPj4+ICvCoMKg wqDCoMKgwqDCoCBtb3YtPmZsYWdzIHw9IEZGX01PVl9GTEFHX0RFTEFZX01PT1Y7Cj4+PiArCj4+ PiDCoMKgwqDCoMKgIC8qIFNldCB0aGUgRlJBR01FTlQgZmxhZyBpZiBhbnkgb2YgdGhlIGZyYWdt ZW50YXRpb24gbWV0aG9kcyBhcmUKPj4+IMKgwqDCoMKgwqDCoCAqIGVuYWJsZWQuICovCj4+PiDC oMKgwqDCoMKgIGlmIChtb3YtPm1heF9mcmFnbWVudF9kdXJhdGlvbiB8fCBtb3YtPm1heF9mcmFn bWVudF9zaXplIHx8Cj4+PiBAQCAtNjY2NCwxMSArNjg1OCwyNSBAQCBzdGF0aWMgaW50IG1vdl9p bml0KEFWRm9ybWF0Q29udGV4dCAqcykKPj4+IMKgwqDCoMKgwqAgLyogTm9uLXNlZWthYmxlIG91 dHB1dCBpcyBvayBpZiB1c2luZyBmcmFnbWVudGF0aW9uLiBJZiAKPj4+IGlzbV9sb29rYWhlYWQK Pj4+IMKgwqDCoMKgwqDCoCAqIGlzIGVuYWJsZWQsIHdlIGRvbid0IHN1cHBvcnQgbm9uLXNlZWth YmxlIG91dHB1dCBhdCBhbGwuICovCj4+PiDCoMKgwqDCoMKgIGlmICghKHMtPnBiLT5zZWVrYWJs ZSAmIEFWSU9fU0VFS0FCTEVfTk9STUFMKSAmJgo+Pj4gLcKgwqDCoMKgwqDCoMKgICghKG1vdi0+ ZmxhZ3MgJiBGRl9NT1ZfRkxBR19GUkFHTUVOVCkgfHwgCj4+PiBtb3YtPmlzbV9sb29rYWhlYWQp KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgKCEobW92LT5mbGFncyAmIEZGX01PVl9GTEFHX0ZSQUdN RU5UKSB8fCBtb3YtPmlzbV9sb29rYWhlYWQgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIG1vdi0+ bW9kZSA9PSBNT0RFX0FWSUYpKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIm11eGVyIGRvZXMgbm90IHN1cHBvcnQgbm9uIAo+Pj4gc2Vla2FibGUgb3V0 cHV0XG4iKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ Pj4gwqDCoMKgwqDCoCB9Cj4+Pgo+Pj4gK8KgwqDCoCAvKiBBVklGIG91dHB1dCBtdXN0IGhhdmUg ZXhhY3RseSBvbmUgdmlkZW8gc3RyZWFtICovCj4+PiArwqDCoMKgIGlmIChtb3YtPm1vZGUgPT0g TU9ERV9BVklGKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHMtPm5iX3N0cmVhbXMgPiAxKSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQVZJ RiBvdXRwdXQgcmVxdWlyZXMgZXhhY3RseSAKPj4+IG9uZSBzdHJlYW1cbiIpOwo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHMtPnN0cmVhbXNbMF0tPmNvZGVjcGFyLT5j b2RlY190eXBlICE9IAo+Pj4gQVZNRURJQV9UWVBFX1ZJREVPKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiQVZJRiBvdXRwdXQgcmVxdWlyZXMg b25lIHZpZGVvIAo+Pj4gc3RyZWFtXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoMKg wqDCoMKgIHMtPnN0cmVhbXNbMF0tPmRpc3Bvc2l0aW9uIHw9IEFWX0RJU1BPU0lUSU9OX0RFRkFV TFQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+IMKgwqDCoMKgwqAgbW92LT5uYl9zdHJlYW1zID0g cy0+bmJfc3RyZWFtczsKPj4+IMKgwqDCoMKgwqAgaWYgKG1vdi0+bW9kZSAmIChNT0RFX01QNHxN T0RFX01PVnxNT0RFX0lQT0QpICYmIHMtPm5iX2NoYXB0ZXJzKQo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIG1vdi0+Y2hhcHRlcl90cmFjayA9IG1vdi0+bmJfc3RyZWFtcysrOwo+Pj4gQEAgLTY4MTEs MTIgKzcwMTksMTMgQEAgc3RhdGljIGludCBtb3ZfaW5pdChBVkZvcm1hdENvbnRleHQgKnMpCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaXhf Zm10ID09IEFWX1BJWF9GTVRfTU9OT1dISVRFIHx8Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaXhfZm10ID09IEFWX1BJWF9GTVRfTU9OT0JM QUNLOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHRyYWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX1ZQOSB8fAo+ Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cmFjay0+cGFyLT5jb2RlY19pZCA9 PSBBVl9DT0RFQ19JRF9BVjEpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHRyYWNrLT5tb2RlICE9IE1PREVfTVA0KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIiVzIG9ubHkgc3VwcG9y dGVkIGluIAo+Pj4gTVA0LlxuIiwgYXZjb2RlY19nZXRfbmFtZSh0cmFjay0+cGFyLT5jb2RlY19p ZCkpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0cmFjay0+cGFyLT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9WUDkgJiYgCj4+PiB0cmFjay0+bW9kZSAhPSBNT0RFX01QNCkgewo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiJXMgb25s eSBzdXBwb3J0ZWQgaW4gCj4+PiBNUDQuXG4iLCBhdmNvZGVjX2dldF9uYW1lKHRyYWNrLT5wYXIt PmNvZGVjX2lkKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKHRy YWNrLT5wYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSAmJgo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRyYWNrLT5tb2RlICE9IE1PREVfTVA0 ICYmIHRyYWNrLT5tb2RlICE9IAo+Pj4gTU9ERV9BVklGKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICIlcyBvbmx5IHN1cHBvcnRl ZCBpbiBNUDQgCj4+PiBhbmQgQVZJRi5cbiIsIGF2Y29kZWNfZ2V0X25hbWUodHJhY2stPnBhci0+ Y29kZWNfaWQpKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAo dHJhY2stPnBhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlA4KSB7Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGFsdHJlZiBmcmFtZXMgaGFuZGxpbmcgaXMgbm90 IGRlZmluZWQgaW4gdGhlIAo+Pj4gc3BlYyBhcyBvZiB2ZXJzaW9uIHYxLjAsCj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBzbyBqdXN0IGZvcmJpZCBtdXhpbmcgVlA4 IHN0cmVhbXMgYWx0b2dldGhlciAKPj4+IHVudGlsIGEgbmV3IHZlcnNpb24gZG9lcyAqLwo+Pj4g QEAgLTcwMzQsNyArNzI0Myw3IEBAIHN0YXRpYyBpbnQgbW92X3dyaXRlX2hlYWRlcihBVkZvcm1h dENvbnRleHQgKnMpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEZGX01PVl9GTEFHX0ZSQUdfRVZFUllfRlJBTUUpKSAmJgo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIW1vdi0+bWF4X2ZyYWdtZW50X2R1cmF0aW9uICYm ICFtb3YtPm1heF9mcmFnbWVudF9zaXplKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bW92LT5mbGFncyB8PSBGRl9NT1ZfRkxBR19GUkFHX0tFWUZSQU1FOwo+Pj4gLcKgwqDCoCB9IGVs c2Ugewo+Pj4gK8KgwqDCoCB9IGVsc2UgaWYgKG1vdi0+bW9kZSAhPSBNT0RFX0FWSUYpIHsKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobW92LT5mbGFncyAmIEZGX01PVl9GTEFHX0ZBU1RTVEFS VCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vdi0+cmVzZXJ2ZWRfaGVhZGVyX3Bv cyA9IGF2aW9fdGVsbChwYik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbW92X3dyaXRlX21kYXRf dGFnKHBiLCBtb3YpOwo+Pj4gQEAgLTczMjIsNiArNzUzMSw1MCBAQCBzdGF0aWMgaW50IAo+Pj4g bW92X2NoZWNrX2JpdHN0cmVhbShBVkZvcm1hdENvbnRleHQgKnMsIEFWU3RyZWFtICpzdCwKPj4+ IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IMKgIH0KPj4+Cj4+PiArc3RhdGljIGludCBhdmlm X3dyaXRlX3RyYWlsZXIoQVZGb3JtYXRDb250ZXh0ICpzKQo+Pj4gK3sKPj4+ICvCoMKgwqAgQVZJ T0NvbnRleHQgKnBiID0gcy0+cGI7Cj4+PiArwqDCoMKgIE1PVk11eENvbnRleHQgKm1vdiA9IHMt PnByaXZfZGF0YTsKPj4+ICvCoMKgwqAgaW50NjRfdCBwb3NfYmFja3VwLCBtZGF0X3BvczsKPj4+ ICvCoMKgwqAgdWludDhfdCAqYnVmOwo+Pj4gK8KgwqDCoCBpbnQgYnVmX3NpemUsIG1vb3Zfc2l6 ZTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKG1vdi0+bW9vdl93cml0dGVuKSByZXR1cm4gMDsKPj4+ ICsKPj4+ICvCoMKgwqAgbW92LT5pc19hbmltYXRlZF9hdmlmID0gcy0+c3RyZWFtc1swXS0+bmJf ZnJhbWVzID4gMTsKPj4+ICvCoMKgwqAgbW92X3dyaXRlX2lkZW50aWZpY2F0aW9uKHBiLCBzKTsK Pj4+ICvCoMKgwqAgbW92X3dyaXRlX21ldGFfdGFnKHBiLCBtb3YsIHMpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBtb292X3NpemUgPSBnZXRfbW9vdl9zaXplKHMpOwo+Pj4gK8KgwqDCoCBtb3YtPnRyYWNr c1swXS5kYXRhX29mZnNldCA9IGF2aW9fdGVsbChwYikgKyBtb292X3NpemUgKyA4Owo+Pj4gKwo+ Pj4gK8KgwqDCoCBpZiAobW92LT5pc19hbmltYXRlZF9hdmlmKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgaW50IHJldDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoKHJldCA9IG1vdl93cml0ZV9tb292 X3RhZyhwYiwgbW92LCBzKSkgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBidWZfc2l6ZSA9IGF2aW9fZ2V0 X2R5bl9idWYobW92LT5tZGF0X2J1ZiwgJmJ1Zik7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihwYiwg YnVmX3NpemUgKyA4KTsKPj4+ICvCoMKgwqAgZmZpb193Zm91cmNjKHBiLCAibWRhdCIpOwo+Pj4g K8KgwqDCoCBtZGF0X3BvcyA9IGF2aW9fdGVsbChwYik7Cj4+PiArCj4+PiArwqDCoMKgIGlmICht ZGF0X3BvcyAhPSAodWludDMyX3QpbWRhdF9wb3MpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9s b2cocywgQVZfTE9HX0VSUk9SLCAibWRhdCBvZmZzZXQgZG9lcyBub3QgZml0IGluIDMyIAo+Pj4g Yml0c1xuIik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgYXZpb193cml0ZShwYiwgYnVmLCBidWZf c2l6ZSk7Cj4+PiArCj4+PiArwqDCoMKgIC8vIHdyaXRlIGV4dGVudCBvZmZzZXQuCj4+PiArwqDC oMKgIHBvc19iYWNrdXAgPSBhdmlvX3RlbGwocGIpOwo+Pj4gK8KgwqDCoCBhdmlvX3NlZWsocGIs IG1vdi0+YXZpZl9leHRlbnRfcG9zLCBTRUVLX1NFVCk7Cj4+PiArwqDCoMKgIGF2aW9fd2IzMihw YiwgbWRhdF9wb3MpOyAvKiByZXdyaXRlIG9mZnNldCAqLwo+Pj4gK8KgwqDCoCBhdmlvX3NlZWso cGIsIHBvc19iYWNrdXAsIFNFRUtfU0VUKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ PiArfQo+Pj4gKwo+Pj4gwqAgI2lmIENPTkZJR19UR1BfTVVYRVIgfHwgQ09ORklHX1RHMl9NVVhF Ugo+Pj4gwqAgc3RhdGljIGNvbnN0IEFWQ29kZWNUYWcgY29kZWNfM2dwX3RhZ3NbXSA9IHsKPj4+ IMKgwqDCoMKgwqAgeyBBVl9DT0RFQ19JRF9IMjYzLMKgwqDCoMKgIE1LVEFHKCdzJywnMicsJzYn LCczJykgfSwKPj4+IEBAIC03NDA0LDYgKzc2NTcsMjAgQEAgc3RhdGljIGNvbnN0IEFWQ29kZWNU YWcgY29kZWNfZjR2X3RhZ3NbXSA9IHsKPj4+IMKgwqDCoMKgwqAgeyBBVl9DT0RFQ19JRF9OT05F LCAwIH0sCj4+PiDCoCB9Owo+Pj4KPj4+ICsjaWYgQ09ORklHX0FWSUZfTVVYRVIKPj4+ICtzdGF0 aWMgY29uc3QgQVZDb2RlY1RhZyBjb2RlY19hdmlmX3RhZ3NbXSA9IHsKPj4+ICvCoMKgwqAgeyBB Vl9DT0RFQ19JRF9BVjEswqDCoMKgwqAgTUtUQUcoJ2EnLCd2JywnMCcsJzEnKSB9LAo+Pj4gK8Kg wqDCoCB7IEFWX0NPREVDX0lEX05PTkUsIDAgfSwKPj4+ICt9Owo+Pj4gK3N0YXRpYyBjb25zdCBB VkNvZGVjVGFnICpjb25zdCBjb2RlY19hdmlmX3RhZ3NfbGlzdFtdID0geyAKPj4+IGNvZGVjX2F2 aWZfdGFncywgTlVMTCB9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBBVkNsYXNzIG1vdl9hdmlm X211eGVyX2NsYXNzID0gewo+Pj4gK8KgwqDCoCAuY2xhc3NfbmFtZSA9ICJhdmlmIG11eGVyIiwK Pj4+ICvCoMKgwqAgLml0ZW1fbmFtZcKgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCj4+PiArwqDC oMKgIC52ZXJzaW9uwqDCoMKgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+Pj4gK307Cj4+PiAr I2VuZGlmCj4+PiArCj4+PiDCoCAjaWYgQ09ORklHX01PVl9NVVhFUgo+Pj4gwqAgY29uc3QgQVZP dXRwdXRGb3JtYXQgZmZfbW92X211eGVyID0gewo+Pj4gwqDCoMKgwqDCoCAubmFtZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgID0gIm1vdiIsCj4+PiBAQCAtNzU2NiwzICs3ODMzLDIxIEBAIGNv bnN0IEFWT3V0cHV0Rm9ybWF0IGZmX2Y0dl9tdXhlciA9IHsKPj4+IMKgwqDCoMKgwqAgLnByaXZf Y2xhc3PCoMKgwqDCoMKgwqDCoCA9ICZtb3ZfaXNvYm1mZl9tdXhlcl9jbGFzcywKPj4+IMKgIH07 Cj4+PiDCoCAjZW5kaWYKPj4+ICsjaWYgQ09ORklHX0FWSUZfTVVYRVIKPj4+ICtjb25zdCBBVk91 dHB1dEZvcm1hdCBmZl9hdmlmX211eGVyID0gewo+Pj4gK8KgwqDCoCAubmFtZcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgID0gImF2aWYiLAo+Pj4gK8KgwqDCoCAubG9uZ19uYW1lwqDCoMKgwqDC oMKgwqDCoCA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJBVklGIiksCj4+PiArwqDCoMKgIC5taW1l X3R5cGXCoMKgwqDCoMKgwqDCoMKgID0gImltYWdlL2F2aWYiLAo+Pj4gK8KgwqDCoCAuZXh0ZW5z aW9uc8KgwqDCoMKgwqDCoMKgID0gImF2aWYiLAo+Pj4gK8KgwqDCoCAucHJpdl9kYXRhX3NpemXC oMKgwqAgPSBzaXplb2YoTU9WTXV4Q29udGV4dCksCj4+PiArwqDCoMKgIC52aWRlb19jb2RlY8Kg wqDCoMKgwqDCoCA9IEFWX0NPREVDX0lEX0FWMSwKPj4+ICvCoMKgwqAgLmluaXTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA9IG1vdl9pbml0LAo+Pj4gK8KgwqDCoCAud3JpdGVfaGVhZGVywqDC oMKgwqDCoCA9IG1vdl93cml0ZV9oZWFkZXIsCj4+PiArwqDCoMKgIC53cml0ZV9wYWNrZXTCoMKg wqDCoMKgID0gbW92X3dyaXRlX3BhY2tldCwKPj4+ICvCoMKgwqAgLndyaXRlX3RyYWlsZXLCoMKg wqDCoCA9IGF2aWZfd3JpdGVfdHJhaWxlciwKPj4+ICvCoMKgwqAgLmRlaW5pdMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgPSBtb3ZfZnJlZSwKPj4+ICvCoMKgwqAgLmZsYWdzwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID0gQVZGTVRfR0xPQkFMSEVBREVSIHwgQVZGTVRfQUxMT1dfRkxVU0gsCj4+PiAr wqDCoMKgIC5jb2RlY190YWfCoMKgwqDCoMKgwqDCoMKgID0gY29kZWNfYXZpZl90YWdzX2xpc3Qs Cj4+PiArwqDCoMKgIC5wcml2X2NsYXNzwqDCoMKgwqDCoMKgwqAgPSAmbW92X2F2aWZfbXV4ZXJf Y2xhc3MsCj4+PiArfTsKPj4+ICsjZW5kaWYKPj4+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9t b3ZlbmMuaCBiL2xpYmF2Zm9ybWF0L21vdmVuYy5oCj4+PiBpbmRleCBjYTUwN2UwZTA0Li4yODE1 NzZjYzY2IDEwMDY0NAo+Pj4gLS0tIGEvbGliYXZmb3JtYXQvbW92ZW5jLmgKPj4+ICsrKyBiL2xp YmF2Zm9ybWF0L21vdmVuYy5oCj4+PiBAQCAtNDMsNiArNDMsNyBAQAo+Pj4gwqAgI2RlZmluZSBN T0RFX0lQT0QgMHgyMAo+Pj4gwqAgI2RlZmluZSBNT0RFX0lTTcKgIDB4NDAKPj4+IMKgICNkZWZp bmUgTU9ERV9GNFbCoCAweDgwCj4+PiArI2RlZmluZSBNT0RFX0FWSUYgMHgxMDAKPj4+Cj4+PiDC oCB0eXBlZGVmIHN0cnVjdCBNT1ZJZW50cnkgewo+Pj4gwqDCoMKgwqDCoCB1aW50NjRfdMKgwqDC oMKgIHBvczsKPj4+IEBAIC0yNDQsNiArMjQ1LDEwIEBAIHR5cGVkZWYgc3RydWN0IE1PVk11eENv bnRleHQgewo+Pj4gwqDCoMKgwqDCoCBNT1ZQcmZ0Qm94IHdyaXRlX3ByZnQ7Cj4+PiDCoMKgwqDC oMKgIGludCBlbXB0eV9oZGxyX25hbWU7Cj4+PiDCoMKgwqDCoMKgIGludCBtb3ZpZV90aW1lc2Nh bGU7Cj4+PiArCj4+PiArwqDCoMKgIGludDY0X3QgYXZpZl9leHRlbnRfcG9zOwo+Pj4gK8KgwqDC oCBpbnQgYXZpZl9leHRlbnRfbGVuZ3RoOwo+Pj4gK8KgwqDCoCBpbnQgaXNfYW5pbWF0ZWRfYXZp ZjsKPj4+IMKgIH0gTU9WTXV4Q29udGV4dDsKPj4+Cj4+PiDCoCAjZGVmaW5lIEZGX01PVl9GTEFH X1JUUF9ISU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDEgPDzCoCAwKQo+Pj4gLS0gCj4+ PiAyLjM2LjAuNTEyLmdlNDBjMmJhZDdhLWdvb2cKPj4+Cj4+IEFueSBtb3JlIGNvbW1lbnRzIG9u IHRoaXM/IElmIG5vdCwgY2FuIHRoaXMgYmUgbWVyZ2VkIHBsZWFzZS4KPgo+IFdpbGwgdGVzdCBh bmQgcHVzaC4KPgo+IFJlZ2FyZHMsCj4gR3lhbgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdAo+IGZmbXBl Zy1kZXZlbEBmZm1wZWcub3JnCj4gaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8v ZmZtcGVnLWRldmVsCj4KPiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1h aWwKPiBmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJz Y3JpYmUiLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczov L2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJl LCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcu b3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=