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 355DA42A9D for ; Thu, 12 May 2022 15:14:34 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 35A6B68B44A; Thu, 12 May 2022 18:14:32 +0300 (EEST) Received: from mail.jetheaddev.com (mail.jetheaddev.com [70.164.99.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8976B68B369 for ; Thu, 12 May 2022 18:14:25 +0300 (EEST) Received: from BENJAMIN.jetheaddev.com ([::1]) by cas.jetheaddev.com ([::1]) with mapi id 14.03.0513.000; Thu, 12 May 2022 08:14:21 -0700 From: John Stebbins To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH 81/87] avcodec: Move all AVCodecParser.split functions to remove_extradata_bsf Thread-Index: AQHXNSfSAczw7kwvok2kYhSOMf+eb60eMOoA Date: Thu, 12 May 2022 15:14:20 +0000 Message-ID: References: <20210419141024.8174-1-jamrial@gmail.com> <20210419141024.8174-82-jamrial@gmail.com> In-Reply-To: <20210419141024.8174-82-jamrial@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.42.4 (3.42.4-2.fc35) x-originating-ip: [192.168.13.201] Content-ID: <36FDBE2486A13E4FBDEF3BE61F69CFBB@jetheaddev.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 81/87] avcodec: Move all AVCodecParser.split functions to remove_extradata_bsf 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: SGkgYWxsLAoKSSBrbm93IHRoaXMgaGFwcGVuZWQgcXVpdGUgc29tZSB0aW1lIGFnbywgYnV0IHdl IGp1c3Qgbm90aWNlZCB0aGUKY2hhbmdlLgoKVGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUg cHVibGljIEFQSSBBVkNvZGVjUGFyc2VyLnNwbGl0IGZvciB0aGVzZQpjb2RlY3MuIEhhbmRCcmFr ZSB1c2VzIHRoaXMgQVBJIHRvIHNwbGl0IG91dCBleHRyYWRhdGEgZm9yIGEgZmV3CmNvZGVjcy4g QW55IGNoYW5jZSB3ZSBjYW4gYnJpbmcgdGhlc2UgYmFjaz8gIE90aGVyd2lzZSwgd2Ugd2lsbCBo YXZlIHRvCnJlcGxpY2F0ZSB0aGlzIGNvZGUgaW4gSGFuZEJyYWtlIPCfmJXvuI8KCk9uIE1vbiwg MjAyMS0wNC0xOSBhdCAxMToxMCAtMDMwMCwgSmFtZXMgQWxtZXIgd3JvdGU6Cj4gRnJvbTogQW5k cmVhcyBSaGVpbmhhcmR0IDxhbmRyZWFzLnJoZWluaGFyZHRAZ21haWwuY29tPgo+IAo+IFRoZSBy ZW1vdmVfZXh0cmFkYXRhIGJzZiBpcyB0aGUgb25seSB1c2VyIG9mIHRoZXNlIGZ1bmN0aW9ucy4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIFJoZWluaGFyZHQgPGFuZHJlYXMucmhlaW5oYXJk dEBnbWFpbC5jb20+Cj4gLS0tCj4gwqBsaWJhdmNvZGVjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCA0ICstCj4gwqBsaWJhdmNvZGVjL2F2MV9wYXJzZXIuY8KgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoCAyNSArLS0tCj4gwqBsaWJhdmNvZGVjL2F2czJfcGFyc2VyLmPC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSAtCj4gwqBsaWJhdmNvZGVjL2F2czNfcGFyc2VyLmPC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSAtCj4gwqBsaWJhdmNvZGVjL2NhdnNfcGFyc2VyLmPC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSAtCj4gwqBsaWJhdmNvZGVjL2gyNjRfcGFyc2VyLmPC oMKgwqDCoMKgwqDCoMKgwqAgfMKgIDM4IC0tLS0tLQo+IMKgbGliYXZjb2RlYy9oZXZjX3BhcnNl ci5jwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzNCAtLS0tLQo+IMKgbGliYXZjb2RlYy9tcGVnNHZp ZGVvX3BhcnNlci5jwqDCoMKgIHzCoMKgIDEgLQo+IMKgbGliYXZjb2RlYy9tcGVndmlkZW9fcGFy c2VyLmPCoMKgwqDCoCB8wqAgMTggLS0tCj4gwqBsaWJhdmNvZGVjL3BhcnNlci5jwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTQgLS0tCj4gwqBsaWJhdmNvZGVjL3JlbW92ZV9leHRy YWRhdGFfYnNmLmMgfCAyMDEgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+IC0tCj4gwqBs aWJhdmNvZGVjL3ZjMV9wYXJzZXIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxOSAtLS0KPiDC oDEyIGZpbGVzIGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspLCAxODYgZGVsZXRpb25zKC0pCj4g Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxl Cj4gaW5kZXggYTY0MGM1NDhlNS4uYzE5YTNjYjYwZCAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVj L01ha2VmaWxlCj4gKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+IEBAIC0xMDc1LDcgKzEwNzUs NyBAQCBPQkpTLSQoQ09ORklHX0FBQ19QQVJTRVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kz0KPiBhYWNfcGFyc2VyLm8gYWFjX2FjM19wYXJzZXIubyBcCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG1wZWc0YXVkaW8ubwo+IMKgT0JKUy0kKENPTkZJR19BQzNfUEFSU0VSKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGFjM3RhYi5vIGFhY19hYzNfcGFyc2VyLm8KPiDCoE9C SlMtJChDT05GSUdfQURYX1BBUlNFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBhZHhf cGFyc2VyLm8gYWR4Lm8KPiAtT0JKUy0kKENPTkZJR19BVjFfUEFSU0VSKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICs9IGF2MV9wYXJzZXIubyBhdjFfcGFyc2Uubwo+ICtPQkpTLSQoQ09ORklH X0FWMV9QQVJTRVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gYXYxX3BhcnNlci5vCj4g wqBPQkpTLSQoQ09ORklHX0FWUzJfUEFSU0VSKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBh dnMyX3BhcnNlci5vCj4gwqBPQkpTLSQoQ09ORklHX0FWUzNfUEFSU0VSKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCArPSBhdnMzX3BhcnNlci5vCj4gwqBPQkpTLSQoQ09ORklHX0JNUF9QQVJTRVIp wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gYm1wX3BhcnNlci5vCj4gQEAgLTExNTksNyAr MTE1OSw3IEBAIE9CSlMtJChDT05GSUdfTlVMTF9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICs9Cj4gbnVsbF9ic2Yubwo+IMKgT0JKUy0kKENPTkZJR19PUFVTX01FVEFE QVRBX0JTRinCoMKgwqDCoMKgwqDCoMKgwqAgKz0gb3B1c19tZXRhZGF0YV9ic2Yubwo+IMKgT0JK Uy0kKENPTkZJR19QQ01fUkVDSFVOS19CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBwY21f cmVjaHVua19ic2Yubwo+IMKgT0JKUy0kKENPTkZJR19QUk9SRVNfTUVUQURBVEFfQlNGKcKgwqDC oMKgwqDCoMKgICs9IHByb3Jlc19tZXRhZGF0YV9ic2Yubwo+IC1PQkpTLSQoQ09ORklHX1JFTU9W RV9FWFRSQURBVEFfQlNGKcKgwqDCoMKgwqDCoCArPSByZW1vdmVfZXh0cmFkYXRhX2JzZi5vCj4g K09CSlMtJChDT05GSUdfUkVNT1ZFX0VYVFJBREFUQV9CU0YpwqDCoMKgwqDCoMKgICs9IHJlbW92 ZV9leHRyYWRhdGFfYnNmLm8KPiBhdjFfcGFyc2Uubwo+IMKgT0JKUy0kKENPTkZJR19TRVRUU19C U0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBzZXR0c19ic2Yubwo+IMKg T0JKUy0kKENPTkZJR19URVhUMk1PVlNVQl9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBt b3ZzdWJfYnNmLm8KPiDCoE9CSlMtJChDT05GSUdfVFJBQ0VfSEVBREVSU19CU0YpwqDCoMKgwqDC oMKgwqDCoMKgICs9IHRyYWNlX2hlYWRlcnNfYnNmLm8KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9hdjFfcGFyc2VyLmMgYi9saWJhdmNvZGVjL2F2MV9wYXJzZXIuYwo+IGluZGV4IDU3OGY1Mjkz YzguLmI2YzgwMDRlZTMgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9hdjFfcGFyc2VyLmMKPiAr KysgYi9saWJhdmNvZGVjL2F2MV9wYXJzZXIuYwo+IEBAIC0yMCw3ICsyMCw3IEBACj4gwqAgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BCj4gMDIxMTAtMTMwMSBVU0EKPiDCoCAqLwo+IMKgCj4gLSNpbmNsdWRlICJhdjFfcGFyc2Uu aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+IMKgI2luY2x1ZGUgImNicy5o Igo+IMKgI2luY2x1ZGUgImNic19hdjEuaCIKPiDCoCNpbmNsdWRlICJpbnRlcm5hbC5oIgo+IEBA IC0yMDUsMzMgKzIwNSwxMCBAQCBzdGF0aWMgdm9pZAo+IGF2MV9wYXJzZXJfY2xvc2UoQVZDb2Rl Y1BhcnNlckNvbnRleHQgKmN0eCkKPiDCoMKgwqDCoCBmZl9jYnNfY2xvc2UoJnMtPmNiYyk7Cj4g wqB9Cj4gwqAKPiAtc3RhdGljIGludCBhdjFfcGFyc2VyX3NwbGl0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplKQo+IC17Cj4gLcKgwqDCoCBB VjFPQlUgb2J1Owo+IC3CoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVm ICsgYnVmX3NpemU7Cj4gLQo+IC3CoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+IC3CoMKgwqDC oMKgwqDCoCBpbnQgbGVuID0gZmZfYXYxX2V4dHJhY3Rfb2J1KCZvYnUsIHB0ciwgYnVmX3NpemUs IGF2Y3R4KTsKPiAtwqDCoMKgwqDCoMKgwqAgaWYgKGxlbiA8IDApCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoCBpZiAob2J1LnR5cGUgPT0gQVYx X09CVV9GUkFNRV9IRUFERVIgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvYnUudHlwZSA9 PSBBVjFfT0JVX0ZSQU1FKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHB0ciAt IGJ1ZjsKPiAtwqDCoMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKgwqDCoCBwdHLCoMKgwqDCoMKg ICs9IGxlbjsKPiAtwqDCoMKgwqDCoMKgwqAgYnVmX3NpemUgLT0gbGVuOwo+IC3CoMKgwqAgfQo+ IC0KPiAtwqDCoMKgIHJldHVybiAwOwo+IC19Cj4gLQo+IMKgY29uc3QgQVZDb2RlY1BhcnNlciBm Zl9hdjFfcGFyc2VyID0gewo+IMKgwqDCoMKgIC5jb2RlY19pZHPCoMKgwqDCoMKgID0geyBBVl9D T0RFQ19JRF9BVjEgfSwKPiDCoMKgwqDCoCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoQVYxUGFy c2VDb250ZXh0KSwKPiDCoMKgwqDCoCAucGFyc2VyX2luaXTCoMKgwqAgPSBhdjFfcGFyc2VyX2lu aXQsCj4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBhdjFfcGFyc2VyX2Nsb3NlLAo+IMKg wqDCoMKgIC5wYXJzZXJfcGFyc2XCoMKgID0gYXYxX3BhcnNlcl9wYXJzZSwKPiAtwqDCoMKgIC5z cGxpdMKgwqDCoMKgwqDCoMKgwqDCoCA9IGF2MV9wYXJzZXJfc3BsaXQsCj4gwqB9Owo+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2F2czJfcGFyc2VyLmMgYi9saWJhdmNvZGVjL2F2czJfcGFyc2Vy LmMKPiBpbmRleCAwNTlmYWY3N2M1Li5iN2Q1ZDc3NzRlIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29k ZWMvYXZzMl9wYXJzZXIuYwo+ICsrKyBiL2xpYmF2Y29kZWMvYXZzMl9wYXJzZXIuYwo+IEBAIC05 MSw1ICs5MSw0IEBAIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfYXZzMl9wYXJzZXIgPSB7Cj4gwqDC oMKgwqAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFBhcnNlQ29udGV4dCksCj4gwqDCoMKgwqAg LnBhcnNlcl9wYXJzZcKgwqAgPSBhdnMyX3BhcnNlLAo+IMKgwqDCoMKgIC5wYXJzZXJfY2xvc2XC oMKgID0gZmZfcGFyc2VfY2xvc2UsCj4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAg PSBmZl9tcGVnNHZpZGVvX3NwbGl0LAo+IMKgfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9h dnMzX3BhcnNlci5jIGIvbGliYXZjb2RlYy9hdnMzX3BhcnNlci5jCj4gaW5kZXggYjBlNzIwYTg0 NC4uMWEwNWVhMDQyZSAxMDA2NDQKPiAtLS0gYS9saWJhdmNvZGVjL2F2czNfcGFyc2VyLmMKPiAr KysgYi9saWJhdmNvZGVjL2F2czNfcGFyc2VyLmMKPiBAQCAtMTc1LDUgKzE3NSw0IEBAIGNvbnN0 IEFWQ29kZWNQYXJzZXIgZmZfYXZzM19wYXJzZXIgPSB7Cj4gwqDCoMKgwqAgLnByaXZfZGF0YV9z aXplID0gc2l6ZW9mKFBhcnNlQ29udGV4dCksCj4gwqDCoMKgwqAgLnBhcnNlcl9wYXJzZcKgwqAg PSBhdnMzX3BhcnNlLAo+IMKgwqDCoMKgIC5wYXJzZXJfY2xvc2XCoMKgID0gZmZfcGFyc2VfY2xv c2UsCj4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAgPSBmZl9tcGVnNHZpZGVvX3Nw bGl0LAo+IMKgfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9jYXZzX3BhcnNlci5jIGIvbGli YXZjb2RlYy9jYXZzX3BhcnNlci5jCj4gaW5kZXggMjBhZGNhMWRiYy4uMDNmMzkyYzJlNSAxMDA2 NDQKPiAtLS0gYS9saWJhdmNvZGVjL2NhdnNfcGFyc2VyLmMKPiArKysgYi9saWJhdmNvZGVjL2Nh dnNfcGFyc2VyLmMKPiBAQCAtMTAyLDUgKzEwMiw0IEBAIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZf Y2F2c3ZpZGVvX3BhcnNlciA9IHsKPiDCoMKgwqDCoCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yo UGFyc2VDb250ZXh0KSwKPiDCoMKgwqDCoCAucGFyc2VyX3BhcnNlwqDCoCA9IGNhdnN2aWRlb19w YXJzZSwKPiDCoMKgwqDCoCAucGFyc2VyX2Nsb3NlwqDCoCA9IGZmX3BhcnNlX2Nsb3NlLAo+IC3C oMKgwqAgLnNwbGl0wqDCoMKgwqDCoMKgwqDCoMKgID0gZmZfbXBlZzR2aWRlb19zcGxpdCwKPiDC oH07Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvaDI2NF9wYXJzZXIuYyBiL2xpYmF2Y29kZWMv aDI2NF9wYXJzZXIuYwo+IGluZGV4IDg4MGNjYjUwZmEuLmQzYzU2Y2MxODggMTAwNjQ0Cj4gLS0t IGEvbGliYXZjb2RlYy9oMjY0X3BhcnNlci5jCj4gKysrIGIvbGliYXZjb2RlYy9oMjY0X3BhcnNl ci5jCj4gQEAgLTY0NCw0MyArNjQ0LDYgQEAgc3RhdGljIGludCBoMjY0X3BhcnNlKEFWQ29kZWNQ YXJzZXJDb250ZXh0ICpzLAo+IMKgwqDCoMKgIHJldHVybiBuZXh0Owo+IMKgfQo+IMKgCj4gLXN0 YXRpYyBpbnQgaDI2NF9zcGxpdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1aW50OF90ICpidWYsIGludCBi dWZfc2l6ZSkKPiAtewo+IC3CoMKgwqAgdWludDMyX3Qgc3RhdGUgPSAtMTsKPiAtwqDCoMKgIGlu dCBoYXNfc3BzwqDCoMKgID0gMDsKPiAtwqDCoMKgIGludCBoYXNfcHBzwqDCoMKgID0gMDsKPiAt wqDCoMKgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+ IC3CoMKgwqAgaW50IG5hbHVfdHlwZTsKPiAtCj4gLcKgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7 Cj4gLcKgwqDCoMKgwqDCoMKgIHB0ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQs ICZzdGF0ZSk7Cj4gLcKgwqDCoMKgwqDCoMKgIGlmICgoc3RhdGUgJiAweEZGRkZGRjAwKSAhPSAw eDEwMCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiAtwqDCoMKgwqDCoMKgwqAg bmFsdV90eXBlID0gc3RhdGUgJiAweDFGOwo+IC3CoMKgwqDCoMKgwqDCoCBpZiAobmFsdV90eXBl ID09IEgyNjRfTkFMX1NQUykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhc19zcHMgPSAx Owo+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBIMjY0X05BTF9QUFMp Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX3BwcyA9IDE7Cj4gLcKgwqDCoMKgwqDCoMKg IC8qIGVsc2UgaWYgKG5hbHVfdHlwZSA9PSAweDAxIHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqAgKsKg wqDCoMKgIG5hbHVfdHlwZSA9PSAweDAyIHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKg IG5hbHVfdHlwZSA9PSAweDA1KSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqAgKsKgIH0KPiAtwqDCoMKg wqDCoMKgwqDCoCAqLwo+IC3CoMKgwqDCoMKgwqDCoCBlbHNlIGlmICgobmFsdV90eXBlICE9IEgy NjRfTkFMX1NFSSB8fCBoYXNfcHBzKSAmJgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG5hbHVfdHlwZSAhPSBIMjY0X05BTF9BVUQgJiYgbmFsdV90eXBlICE9Cj4gSDI2NF9O QUxfU1BTX0VYVCAmJgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hbHVf dHlwZSAhPSAweDBmKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGhhc19zcHMpIHsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlIChwdHIgLSA0ID4gYnVmICYm IHB0clstNV0gPT0gMCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHRyLS07Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAt IGJ1ZjsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKgwqDCoMKgIH0KPiAt wqDCoMKgIH0KPiAtCj4gLcKgwqDCoCByZXR1cm4gMDsKPiAtfQo+IC0KPiDCoHN0YXRpYyB2b2lk IGgyNjRfY2xvc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMpCj4gwqB7Cj4gwqDCoMKgwqAgSDI2 NFBhcnNlQ29udGV4dCAqcCA9IHMtPnByaXZfZGF0YTsKPiBAQCAtNzA4LDUgKzY3MSw0IEBAIGNv bnN0IEFWQ29kZWNQYXJzZXIgZmZfaDI2NF9wYXJzZXIgPSB7Cj4gwqDCoMKgwqAgLnBhcnNlcl9p bml0wqDCoMKgID0gaW5pdCwKPiDCoMKgwqDCoCAucGFyc2VyX3BhcnNlwqDCoCA9IGgyNjRfcGFy c2UsCj4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBoMjY0X2Nsb3NlLAo+IC3CoMKgwqAg LnNwbGl0wqDCoMKgwqDCoMKgwqDCoMKgID0gaDI2NF9zcGxpdCwKPiDCoH07Cj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvaGV2Y19wYXJzZXIuYyBiL2xpYmF2Y29kZWMvaGV2Y19wYXJzZXIuYwo+ IGluZGV4IDMyMGQ0ZWI1NjIuLmM5NDRhNmFhY2QgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9o ZXZjX3BhcnNlci5jCj4gKysrIGIvbGliYXZjb2RlYy9oZXZjX3BhcnNlci5jCj4gQEAgLTMzNiwz OSArMzM2LDYgQEAgc3RhdGljIGludCBoZXZjX3BhcnNlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpz LAo+IEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiDCoMKgwqDCoCByZXR1cm4gbmV4dDsKPiDCoH0K PiDCoAo+IC0vLyBTcGxpdCBhZnRlciB0aGUgcGFyYW1ldGVyIHNldHMgYXQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgc3RyZWFtIGlmCj4gdGhleSBleGlzdC4KPiAtc3RhdGljIGludCBoZXZjX3NwbGl0 KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQKPiBidWZfc2l6 ZSkKPiAtewo+IC3CoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsg YnVmX3NpemU7Cj4gLcKgwqDCoCB1aW50MzJfdCBzdGF0ZSA9IC0xOwo+IC3CoMKgwqAgaW50IGhh c192cHMgPSAwOwo+IC3CoMKgwqAgaW50IGhhc19zcHMgPSAwOwo+IC3CoMKgwqAgaW50IGhhc19w cHMgPSAwOwo+IC3CoMKgwqAgaW50IG51dDsKPiAtCj4gLcKgwqDCoCB3aGlsZSAocHRyIDwgZW5k KSB7Cj4gLcKgwqDCoMKgwqDCoMKgIHB0ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRyLCBl bmQsICZzdGF0ZSk7Cj4gLcKgwqDCoMKgwqDCoMKgIGlmICgoc3RhdGUgPj4gOCkgIT0gU1RBUlRf Q09ERSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiAtwqDCoMKgwqDCoMKgwqAg bnV0ID0gKHN0YXRlID4+IDEpICYgMHgzRjsKPiAtwqDCoMKgwqDCoMKgwqAgaWYgKG51dCA9PSBI RVZDX05BTF9WUFMpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX3ZwcyA9IDE7Cj4gLcKg wqDCoMKgwqDCoMKgIGVsc2UgaWYgKG51dCA9PSBIRVZDX05BTF9TUFMpCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaGFzX3NwcyA9IDE7Cj4gLcKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKG51dCA9 PSBIRVZDX05BTF9QUFMpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX3BwcyA9IDE7Cj4g LcKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKChudXQgIT0gSEVWQ19OQUxfU0VJX1BSRUZJWCB8fCBo YXNfcHBzKSAmJgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51dCAhPSBI RVZDX05BTF9BVUQpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaGFzX3ZwcyAmJiBo YXNfc3BzKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSAocHRyIC0g NCA+IGJ1ZiAmJiBwdHJbLTVdID09IDApCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHB0ci0tOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHB0ciAtIDQgLSBidWY7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKg wqDCoCB9Cj4gLcKgwqDCoCB9Cj4gLcKgwqDCoCByZXR1cm4gMDsKPiAtfQo+IC0KPiDCoHN0YXRp YyB2b2lkIGhldmNfcGFyc2VyX2Nsb3NlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQo+IMKgewo+ IMKgwqDCoMKgIEhFVkNQYXJzZXJDb250ZXh0ICpjdHggPSBzLT5wcml2X2RhdGE7Cj4gQEAgLTM4 NSw1ICszNTIsNCBAQCBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2hldmNfcGFyc2VyID0gewo+IMKg wqDCoMKgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihIRVZDUGFyc2VyQ29udGV4dCksCj4gwqDC oMKgwqAgLnBhcnNlcl9wYXJzZcKgwqAgPSBoZXZjX3BhcnNlLAo+IMKgwqDCoMKgIC5wYXJzZXJf Y2xvc2XCoMKgID0gaGV2Y19wYXJzZXJfY2xvc2UsCj4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKg wqDCoMKgwqAgPSBoZXZjX3NwbGl0LAo+IMKgfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9t cGVnNHZpZGVvX3BhcnNlci5jCj4gYi9saWJhdmNvZGVjL21wZWc0dmlkZW9fcGFyc2VyLmMKPiBp bmRleCBhZmExMGM3NzI3Li4xYjBlMjU1NWRhIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvbXBl ZzR2aWRlb19wYXJzZXIuYwo+ICsrKyBiL2xpYmF2Y29kZWMvbXBlZzR2aWRlb19wYXJzZXIuYwo+ IEBAIC0xNTksNSArMTU5LDQgQEAgY29uc3QgQVZDb2RlY1BhcnNlciBmZl9tcGVnNHZpZGVvX3Bh cnNlciA9IHsKPiDCoMKgwqDCoCAucGFyc2VyX2luaXTCoMKgwqAgPSBtcGVnNHZpZGVvX3BhcnNl X2luaXQsCj4gwqDCoMKgwqAgLnBhcnNlcl9wYXJzZcKgwqAgPSBtcGVnNHZpZGVvX3BhcnNlLAo+ IMKgwqDCoMKgIC5wYXJzZXJfY2xvc2XCoMKgID0gZmZfcGFyc2VfY2xvc2UsCj4gLcKgwqDCoCAu c3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAgPSBmZl9tcGVnNHZpZGVvX3NwbGl0LAo+IMKgfTsKPiBk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9tcGVndmlkZW9fcGFyc2VyLmMKPiBiL2xpYmF2Y29kZWMv bXBlZ3ZpZGVvX3BhcnNlci5jCj4gaW5kZXggNGU0ZjU2OWIxMy4uNzg2NDIyNDY0MyAxMDA2NDQK PiAtLS0gYS9saWJhdmNvZGVjL21wZWd2aWRlb19wYXJzZXIuYwo+ICsrKyBiL2xpYmF2Y29kZWMv bXBlZ3ZpZGVvX3BhcnNlci5jCj4gQEAgLTIxMywyMyArMjEzLDYgQEAgc3RhdGljIGludCBtcGVn dmlkZW9fcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQKPiAqcywKPiDCoMKgwqDCoCByZXR1cm4g bmV4dDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgaW50IG1wZWd2aWRlb19zcGxpdChBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gLXsKPiAtwqDC oMKgIGludCBpOwo+IC3CoMKgwqAgdWludDMyX3Qgc3RhdGU9IC0xOwo+IC3CoMKgwqAgaW50IGZv dW5kPTA7Cj4gLQo+IC3CoMKgwqAgZm9yKGk9MDsgaTxidWZfc2l6ZTsgaSsrKXsKPiAtwqDCoMKg wqDCoMKgwqAgc3RhdGU9IChzdGF0ZTw8OCkgfCBidWZbaV07Cj4gLcKgwqDCoMKgwqDCoMKgIGlm KHN0YXRlID09IDB4MUIzKXsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3VuZD0xOwo+IC3C oMKgwqDCoMKgwqDCoCB9ZWxzZSBpZihmb3VuZCAmJiBzdGF0ZSAhPSAweDFCNSAmJiBzdGF0ZSA8 IDB4MjAwICYmIHN0YXRlCj4gPj0gMHgxMDApCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIGktMzsKPiAtwqDCoMKgIH0KPiAtwqDCoMKgIHJldHVybiAwOwo+IC19Cj4gLQo+IMKgc3Rh dGljIGludCBtcGVndmlkZW9fcGFyc2VfaW5pdChBVkNvZGVjUGFyc2VyQ29udGV4dCAqcykKPiDC oHsKPiDCoMKgwqDCoCBzLT5waWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfTk9ORTsgLy8gZmly c3QgZnJhbWUgbWlnaHQgYmUKPiBwYXJ0aWFsCj4gQEAgLTI0Miw1ICsyMjUsNCBAQCBjb25zdCBB VkNvZGVjUGFyc2VyIGZmX21wZWd2aWRlb19wYXJzZXIgPSB7Cj4gwqDCoMKgwqAgLnBhcnNlcl9p bml0wqDCoMKgID0gbXBlZ3ZpZGVvX3BhcnNlX2luaXQsCj4gwqDCoMKgwqAgLnBhcnNlcl9wYXJz ZcKgwqAgPSBtcGVndmlkZW9fcGFyc2UsCj4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBm Zl9wYXJzZV9jbG9zZSwKPiAtwqDCoMKgIC5zcGxpdMKgwqDCoMKgwqDCoMKgwqDCoCA9IG1wZWd2 aWRlb19zcGxpdCwKPiDCoH07Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvcGFyc2VyLmMgYi9s aWJhdmNvZGVjL3BhcnNlci5jCj4gaW5kZXggZjgxYTYyZDU5Mi4uZmM1NzI0Njk2NSAxMDA2NDQK PiAtLS0gYS9saWJhdmNvZGVjL3BhcnNlci5jCj4gKysrIGIvbGliYXZjb2RlYy9wYXJzZXIuYwo+ IEBAIC0yODUsMTcgKzI4NSwzIEBAIHZvaWQgZmZfcGFyc2VfY2xvc2UoQVZDb2RlY1BhcnNlckNv bnRleHQgKnMpCj4gwqAKPiDCoMKgwqDCoCBhdl9mcmVlcCgmcGMtPmJ1ZmZlcik7Cj4gwqB9Cj4g LQo+IC1pbnQgZmZfbXBlZzR2aWRlb19zcGxpdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0 IHVpbnQ4X3QgKmJ1ZiwKPiBpbnQgYnVmX3NpemUpCj4gLXsKPiAtwqDCoMKgIHVpbnQzMl90IHN0 YXRlID0gLTE7Cj4gLcKgwqDCoCBjb25zdCB1aW50OF90ICpwdHIgPSBidWYsICplbmQgPSBidWYg KyBidWZfc2l6ZTsKPiAtCj4gLcKgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7Cj4gLcKgwqDCoMKg wqDCoMKgIHB0ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQsICZzdGF0ZSk7Cj4g LcKgwqDCoMKgwqDCoMKgIGlmIChzdGF0ZSA9PSAweDFCMyB8fCBzdGF0ZSA9PSAweDFCNikKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiAtwqDCoMKgIH0K PiAtCj4gLcKgwqDCoCByZXR1cm4gMDsKPiAtfQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Jl bW92ZV9leHRyYWRhdGFfYnNmLmMKPiBiL2xpYmF2Y29kZWMvcmVtb3ZlX2V4dHJhZGF0YV9ic2Yu Ywo+IGluZGV4IDU3ODNiMDc1ZjAuLjFkNWYxOTNmODkgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2Rl Yy9yZW1vdmVfZXh0cmFkYXRhX2JzZi5jCj4gKysrIGIvbGliYXZjb2RlYy9yZW1vdmVfZXh0cmFk YXRhX2JzZi5jCj4gQEAgLTIxLDkgKzIxLDEzIEBACj4gwqAjaW5jbHVkZSAibGliYXZ1dGlsL2xv Zy5oIgo+IMKgI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiDCoAo+IC0jaW5jbHVkZSAiYXZj b2RlYy5oIgo+ICsjaW5jbHVkZSAiYXYxX3BhcnNlLmgiCj4gwqAjaW5jbHVkZSAiYnNmLmgiCj4g wqAjaW5jbHVkZSAiYnNmX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJoMjY0LmgiCj4gKyNpbmNs dWRlICJoZXZjLmgiCj4gKyNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ICsjaW5jbHVkZSAidmMxX2Nv bW1vbi5oIgo+IMKgCj4gwqBlbnVtIFJlbW92ZUZyZXEgewo+IMKgwqDCoMKgIFJFTU9WRV9GUkVR X0tFWUZSQU1FLAo+IEBAIC0zMSw2MyArMzUsMTk2IEBAIGVudW0gUmVtb3ZlRnJlcSB7Cj4gwqDC oMKgwqAgUkVNT1ZFX0ZSRVFfTk9OS0VZRlJBTUUsCj4gwqB9Owo+IMKgCj4gKyNkZWZpbmUgU1RB UlRfQ09ERSAweDAwMDAwMQo+ICsKPiDCoHR5cGVkZWYgc3RydWN0IFJlbW92ZUV4dHJhZGF0YUNv bnRleHQgewo+IMKgwqDCoMKgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOwo+IMKgwqDCoMKgIGludCBm cmVxOwo+IC0KPiAtwqDCoMKgIEFWQ29kZWNQYXJzZXJDb250ZXh0ICpwYXJzZXI7Cj4gLcKgwqDC oCBBVkNvZGVjQ29udGV4dCAqYXZjdHg7Cj4gwqB9IFJlbW92ZUV4dHJhZGF0YUNvbnRleHQ7Cj4g wqAKPiAtc3RhdGljIGludCByZW1vdmVfZXh0cmFkYXRhKEFWQlNGQ29udGV4dCAqY3R4LCBBVlBh Y2tldCAqcGt0KQo+ICtzdGF0aWMgaW50IGF2MV9zcGxpdChjb25zdCB1aW50OF90ICpidWYsIGlu dCBidWZfc2l6ZSwgdm9pZCAqbG9nY3R4KQo+IMKgewo+IC3CoMKgwqAgUmVtb3ZlRXh0cmFkYXRh Q29udGV4dCAqcyA9IGN0eC0+cHJpdl9kYXRhOwo+ICvCoMKgwqAgQVYxT0JVIG9idTsKPiArwqDC oMKgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+IMKg Cj4gLcKgwqDCoCBpbnQgcmV0Owo+ICvCoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ICvCoMKg wqDCoMKgwqDCoCBpbnQgbGVuID0gZmZfYXYxX2V4dHJhY3Rfb2J1KCZvYnUsIHB0ciwgYnVmX3Np emUsIGxvZ2N0eCk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChsZW4gPCAwKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKgCj4gLcKgwqDCoCByZXQgPSBmZl9ic2ZfZ2V0X3BhY2tl dF9yZWYoY3R4LCBwa3QpOwo+IC3CoMKgwqAgaWYgKHJldCA8IDApCj4gLcKgwqDCoMKgwqDCoMKg IHJldHVybiByZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChvYnUudHlwZSA9PSBBVjFfT0JVX0ZS QU1FX0hFQURFUiB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9idS50eXBlID09IEFWMV9P QlVfRlJBTUUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gYnVmOwo+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgIHB0csKgwqDCoMKgwqAgKz0gbGVu Owo+ICvCoMKgwqDCoMKgwqDCoCBidWZfc2l6ZSAtPSBsZW47Cj4gK8KgwqDCoCB9Cj4gKwo+ICvC oMKgwqAgcmV0dXJuIDA7Cj4gK30KPiDCoAo+IC3CoMKgwqAgaWYgKHMtPnBhcnNlciAmJiBzLT5w YXJzZXItPnBhcnNlci0+c3BsaXQpIHsKPiAtwqDCoMKgwqDCoMKgwqAgaWYgKHMtPmZyZXEgPT0g UkVNT1ZFX0ZSRVFfQUxMIHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHMtPmZyZXEgPT0g UkVNT1ZFX0ZSRVFfTk9OS0VZRlJBTUUgJiYgIShwa3QtPmZsYWdzICYKPiBBVl9QS1RfRkxBR19L RVkpKSB8fAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzLT5mcmVxID09IFJFTU9WRV9GUkVR X0tFWUZSQU1FICYmIHBrdC0+ZmxhZ3MgJgo+IEFWX1BLVF9GTEFHX0tFWSkpIHsKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbnQgaSA9IHMtPnBhcnNlci0+cGFyc2VyLT5zcGxpdChzLT5hdmN0 eCwgcGt0LT5kYXRhLAo+IHBrdC0+c2l6ZSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGt0 LT5kYXRhICs9IGk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGt0LT5zaXplIC09IGk7Cj4g K3N0YXRpYyBpbnQgaDI2NF9zcGxpdChjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkK PiArewo+ICvCoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVm X3NpemU7Cj4gK8KgwqDCoCB1aW50MzJfdCBzdGF0ZSA9IC0xOwo+ICvCoMKgwqAgaW50IGhhc19z cHPCoMKgwqAgPSAwOwo+ICvCoMKgwqAgaW50IGhhc19wcHPCoMKgwqAgPSAwOwo+ICvCoMKgwqAg aW50IG5hbHVfdHlwZTsKPiArCj4gK8KgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7Cj4gK8KgwqDC oMKgwqDCoMKgIHB0ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQsICZzdGF0ZSk7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICgoc3RhdGUgJiAweEZGRkZGRjAwKSAhPSAweDEwMCkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgbmFsdV90eXBl ID0gc3RhdGUgJiAweDFGOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAobmFsdV90eXBlID09IEgyNjRf TkFMX1NQUykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhc19zcHMgPSAxOwo+ICvCoMKg wqDCoMKgwqDCoCB9IGVsc2UgaWYgKG5hbHVfdHlwZSA9PSBIMjY0X05BTF9QUFMpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaGFzX3BwcyA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIC8qIGVsc2Ug aWYgKG5hbHVfdHlwZSA9PSAweDAxIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgIG5h bHVfdHlwZSA9PSAweDAyIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgIG5hbHVfdHlw ZSA9PSAweDA1KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAgKsKgIH0KPiArwqDCoMKgwqDCoMKgwqDC oCAqLwo+ICvCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICgobmFsdV90eXBlICE9IEgyNjRfTkFMX1NF SSB8fCBoYXNfcHBzKSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5h bHVfdHlwZSAhPSBIMjY0X05BTF9BVUQgJiYgbmFsdV90eXBlICE9Cj4gSDI2NF9OQUxfU1BTX0VY VCAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5hbHVfdHlwZSAhPSAw eDBmKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGhhc19zcHMpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlIChwdHIgLSA0ID4gYnVmICYmIHB0clstNV0g PT0gMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRyLS07Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAg fQo+IMKgCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIGludCByZW1v dmVfZXh0cmFkYXRhX2luaXQoQVZCU0ZDb250ZXh0ICpjdHgpCj4gKy8vIFNwbGl0IGFmdGVyIHRo ZSBwYXJhbWV0ZXIgc2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0gaWYKPiB0aGV5 IGV4aXN0Lgo+ICtzdGF0aWMgaW50IGhldmNfc3BsaXQoY29uc3QgdWludDhfdCAqYnVmLCBpbnQg YnVmX3NpemUpCj4gwqB7Cj4gLcKgwqDCoCBSZW1vdmVFeHRyYWRhdGFDb250ZXh0ICpzID0gY3R4 LT5wcml2X2RhdGE7Cj4gLcKgwqDCoCBpbnQgcmV0Owo+ICvCoMKgwqAgY29uc3QgdWludDhfdCAq cHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gK8KgwqDCoCB1aW50MzJfdCBzdGF0 ZSA9IC0xOwo+ICvCoMKgwqAgaW50IGhhc192cHMgPSAwOwo+ICvCoMKgwqAgaW50IGhhc19zcHMg PSAwOwo+ICvCoMKgwqAgaW50IGhhc19wcHMgPSAwOwo+ICvCoMKgwqAgaW50IG51dDsKPiArCj4g K8KgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHB0ciA9IGF2cHJp dl9maW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQsICZzdGF0ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlm ICgoc3RhdGUgPj4gOCkgIT0gU1RBUlRfQ09ERSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqAgbnV0ID0gKHN0YXRlID4+IDEpICYgMHgzRjsKPiArwqDC oMKgwqDCoMKgwqAgaWYgKG51dCA9PSBIRVZDX05BTF9WUFMpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaGFzX3ZwcyA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKG51dCA9PSBIRVZD X05BTF9TUFMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX3NwcyA9IDE7Cj4gK8KgwqDC oMKgwqDCoMKgIGVsc2UgaWYgKG51dCA9PSBIRVZDX05BTF9QUFMpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaGFzX3BwcyA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKChudXQgIT0g SEVWQ19OQUxfU0VJX1BSRUZJWCB8fCBoYXNfcHBzKSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG51dCAhPSBIRVZDX05BTF9BVUQpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoaGFzX3ZwcyAmJiBoYXNfc3BzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB3aGlsZSAocHRyIC0gNCA+IGJ1ZiAmJiBwdHJbLTVdID09IDApCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ci0tOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHB0ciAtIDQgLSBidWY7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1 cm4gMDsKPiArfQo+IMKgCj4gLcKgwqDCoCBzLT5wYXJzZXIgPSBhdl9wYXJzZXJfaW5pdChjdHgt PnBhcl9pbi0+Y29kZWNfaWQpOwo+ICtzdGF0aWMgaW50IG1wZWd2aWRlb19zcGxpdChjb25zdCB1 aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiArewo+ICvCoMKgwqAgdWludDMyX3Qgc3RhdGUg PSAtMTsKPiArwqDCoMKgIGludCBmb3VuZCA9IDA7Cj4gKwo+ICvCoMKgwqAgZm9yIChpbnQgaSA9 IDA7IGkgPCBidWZfc2l6ZTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHN0YXRlID0gKHN0YXRl IDw8IDgpIHwgYnVmW2ldOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc3RhdGUgPT0gMHgxQjMpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3VuZCA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIH0g ZWxzZSBpZiAoZm91bmQgJiYgc3RhdGUgIT0gMHgxQjUgJiYgc3RhdGUgPCAweDIwMCAmJiBzdGF0 ZQo+ID49IDB4MTAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBpIC0gMzsKPiAr wqDCoMKgIH0KPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gwqAKPiAtwqDCoMKgIGlmIChzLT5w YXJzZXIpIHsKPiAtwqDCoMKgwqDCoMKgwqAgcy0+YXZjdHggPSBhdmNvZGVjX2FsbG9jX2NvbnRl eHQzKE5VTEwpOwo+IC3CoMKgwqDCoMKgwqDCoCBpZiAoIXMtPmF2Y3R4KQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gK3N0YXRpYyBpbnQgbXBlZzR2 aWRlb19zcGxpdChjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiArewo+ICvCoMKg wqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gK8Kg wqDCoCB1aW50MzJfdCBzdGF0ZSA9IC0xOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGF2 Y29kZWNfcGFyYW1ldGVyc190b19jb250ZXh0KHMtPmF2Y3R4LCBjdHgtPnBhcl9pbik7Cj4gLcKg wqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4gK8KgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHB0 ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQsICZzdGF0ZSk7Cj4gK8KgwqDCoMKg wqDCoMKgIGlmIChzdGF0ZSA9PSAweDFCMyB8fCBzdGF0ZSA9PSAweDFCNikKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiDCoMKgwqDCoCB9Cj4gwqAKPiDC oMKgwqDCoCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCByZW1vdmVfZXh0cmFk YXRhX2Nsb3NlKEFWQlNGQ29udGV4dCAqY3R4KQo+ICtzdGF0aWMgaW50IHZjMV9zcGxpdChjb25z dCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiArewo+ICvCoMKgwqAgY29uc3QgdWludDhf dCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gK8KgwqDCoCB1aW50MzJfdCBz dGF0ZSA9IC0xOwo+ICvCoMKgwqAgaW50IGNoYXJnZWQgPSAwOwo+ICsKPiArwqDCoMKgIHdoaWxl IChwdHIgPCBlbmQpIHsKPiArwqDCoMKgwqDCoMKgwqAgcHRyID0gYXZwcml2X2ZpbmRfc3RhcnRf Y29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHN0YXRlID09IFZD MV9DT0RFX1NFUUhEUiB8fCBzdGF0ZSA9PQo+IFZDMV9DT0RFX0VOVFJZUE9JTlQpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyZ2VkID0gMTsKPiArwqDCoMKgwqDCoMKgwqAgfSBlbHNl IGlmIChjaGFyZ2VkICYmIElTX01BUktFUihzdGF0ZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHB0ciAtIDQgLSBidWY7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmVtb3ZlX2V4dHJhZGF0YShBVkJTRkNvbnRleHQg KmN0eCwgQVZQYWNrZXQgKnBrdCkKPiDCoHsKPiDCoMKgwqDCoCBSZW1vdmVFeHRyYWRhdGFDb250 ZXh0ICpzID0gY3R4LT5wcml2X2RhdGE7Cj4gwqAKPiAtwqDCoMKgIGF2Y29kZWNfZnJlZV9jb250 ZXh0KCZzLT5hdmN0eCk7Cj4gLcKgwqDCoCBhdl9wYXJzZXJfY2xvc2Uocy0+cGFyc2VyKTsKPiAr wqDCoMKgIGludCByZXQ7Cj4gKwo+ICvCoMKgwqAgcmV0ID0gZmZfYnNmX2dldF9wYWNrZXRfcmVm KGN0eCwgcGt0KTsKPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+ICsKPiArwqDCoMKgIGlmIChzLT5mcmVxID09IFJFTU9WRV9GUkVRX0FMTCB8fAo+ ICvCoMKgwqDCoMKgwqDCoCAocy0+ZnJlcSA9PSBSRU1PVkVfRlJFUV9OT05LRVlGUkFNRSAmJiAh KHBrdC0+ZmxhZ3MgJgo+IEFWX1BLVF9GTEFHX0tFWSkpIHx8Cj4gK8KgwqDCoMKgwqDCoMKgIChz LT5mcmVxID09IFJFTU9WRV9GUkVRX0tFWUZSQU1FICYmIHBrdC0+ZmxhZ3MgJgo+IEFWX1BLVF9G TEFHX0tFWSkpIHsKPiArwqDCoMKgwqDCoMKgwqAgaW50IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oCBzd2l0Y2ggKGN0eC0+cGFyX2luLT5jb2RlY19pZCkgewo+ICvCoMKgwqDCoMKgwqDCoCBjYXNl IEFWX0NPREVDX0lEX0FWMToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpID0gYXYxX3NwbGl0 KHBrdC0+ZGF0YSwgcGt0LT5zaXplLCBjdHgpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFWX0NPREVDX0lEX0FWUzI6Cj4gK8KgwqDCoMKg wqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfQVZTMzoKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVl9D T0RFQ19JRF9DQVZTOgo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFWX0NPREVDX0lEX01QRUc0Ogo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkgPSBtcGVnNHZpZGVvX3NwbGl0KHBrdC0+ZGF0YSwg cGt0LT5zaXplKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDC oMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9IMjY0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkg PSBoMjY0X3NwbGl0KHBrdC0+ZGF0YSwgcGt0LT5zaXplKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9IRVZDOgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkgPSBoZXZjX3NwbGl0KHBrdC0+ZGF0YSwgcGt0LT5zaXpl KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDCoMKgwqAgY2Fz ZSBBVl9DT0RFQ19JRF9NUEVHMVZJREVPOgo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFWX0NPREVD X0lEX01QRUcyVklERU86Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9IG1wZWd2aWRlb19z cGxpdChwa3QtPmRhdGEsIHBrdC0+c2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfVkMxOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGkgPSB2YzFfc3BsaXQocGt0LT5kYXRhLCBwa3QtPnNpemUpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBwa3QtPmRhdGEgKz0gaTsKPiArwqDCoMKgwqDCoMKgwqAgcGt0LT5zaXpl IC09IGk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiDC oCNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFJlbW92ZUV4dHJhZGF0YUNvbnRleHQsIHgpCj4g QEAgLTExMiw3ICsyNDksNSBAQCBjb25zdCBBVkJpdFN0cmVhbUZpbHRlciBmZl9yZW1vdmVfZXh0 cmFkYXRhX2JzZiA9Cj4gewo+IMKgwqDCoMKgIC5uYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAi cmVtb3ZlX2V4dHJhIiwKPiDCoMKgwqDCoCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoUmVtb3Zl RXh0cmFkYXRhQ29udGV4dCksCj4gwqDCoMKgwqAgLnByaXZfY2xhc3PCoMKgwqDCoCA9ICZyZW1v dmVfZXh0cmFkYXRhX2NsYXNzLAo+IC3CoMKgwqAgLmluaXTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IHJlbW92ZV9leHRyYWRhdGFfaW5pdCwKPiAtwqDCoMKgIC5jbG9zZcKgwqDCoMKgwqDCoMKgwqDC oCA9IHJlbW92ZV9leHRyYWRhdGFfY2xvc2UsCj4gwqDCoMKgwqAgLmZpbHRlcsKgwqDCoMKgwqDC oMKgwqAgPSByZW1vdmVfZXh0cmFkYXRhLAo+IMKgfTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy92YzFfcGFyc2VyLmMgYi9saWJhdmNvZGVjL3ZjMV9wYXJzZXIuYwo+IGluZGV4IDBmMTdkMjk5 ZTEuLjAwODk2ZGRiMDkgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy92YzFfcGFyc2VyLmMKPiAr KysgYi9saWJhdmNvZGVjL3ZjMV9wYXJzZXIuYwo+IEBAIC0yNTYsMjQgKzI1Niw2IEBAIHN0YXRp YyBpbnQgdmMxX3BhcnNlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzLAo+IMKgwqDCoMKgIHJldHVy biBuZXh0Owo+IMKgfQo+IMKgCj4gLXN0YXRpYyBpbnQgdmMxX3NwbGl0KEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiAtewo+IC3CoMKgwqAg dWludDMyX3Qgc3RhdGUgPSAtMTsKPiAtwqDCoMKgIGludCBjaGFyZ2VkID0gMDsKPiAtwqDCoMKg IGNvbnN0IHVpbnQ4X3QgKnB0ciA9IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+IC0KPiAt wqDCoMKgIHdoaWxlIChwdHIgPCBlbmQpIHsKPiAtwqDCoMKgwqDCoMKgwqAgcHRyID0gYXZwcml2 X2ZpbmRfc3RhcnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiAtwqDCoMKgwqDCoMKgwqAgaWYg KHN0YXRlID09IFZDMV9DT0RFX1NFUUhEUiB8fCBzdGF0ZSA9PQo+IFZDMV9DT0RFX0VOVFJZUE9J TlQpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyZ2VkID0gMTsKPiAtwqDCoMKgwqDC oMKgwqAgfSBlbHNlIGlmIChjaGFyZ2VkICYmIElTX01BUktFUihzdGF0ZSkpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHB0ciAtIDQgLSBidWY7Cj4gLcKgwqDCoCB9Cj4gLQo+IC3C oMKgwqAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gwqBzdGF0aWMgYXZfY29sZCBpbnQgdmMxX3BhcnNl X2luaXQoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMpCj4gwqB7Cj4gwqDCoMKgwqAgVkMxUGFyc2VD b250ZXh0ICp2cGMgPSBzLT5wcml2X2RhdGE7Cj4gQEAgLTI5Myw1ICsyNzUsNCBAQCBjb25zdCBB VkNvZGVjUGFyc2VyIGZmX3ZjMV9wYXJzZXIgPSB7Cj4gwqDCoMKgwqAgLnBhcnNlcl9pbml0wqDC oMKgID0gdmMxX3BhcnNlX2luaXQsCj4gwqDCoMKgwqAgLnBhcnNlcl9wYXJzZcKgwqAgPSB2YzFf cGFyc2UsCj4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBmZl9wYXJzZV9jbG9zZSwKPiAt wqDCoMKgIC5zcGxpdMKgwqDCoMKgwqDCoMKgwqDCoCA9IHZjMV9zcGxpdCwKPiDCoH07CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==