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 4F9D945499 for ; Mon, 30 Jan 2023 17:08:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1B6868BD5B; Mon, 30 Jan 2023 19:08:28 +0200 (EET) Received: from out162-62-57-87.mail.qq.com (out162-62-57-87.mail.qq.com [162.62.57.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A16F2680BA3 for ; Mon, 30 Jan 2023 19:08:21 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1675098497; bh=rH2mxS3mOreqxtbnl9jcFvF6K8dRx5HG88oOblMR6eo=; h=From:To:Cc:References:In-Reply-To:Subject:Date; b=CyAxzbIV7+U9nDZ6p6TGGUfuEjJdeYHZB+8Ra/wqY+IEraTWD2kxuVDBln73eZkBJ au+MNYRerBbD0wh+bSrQ+v4letQw+srk4BZm+VlfIJcb2uFeXIM0iaT2P/w9UlZmVn Bz15KFYtroviMNzUgEPG9SZTgEV3HdHUTOjN+IBo= Received: from ZHILIZHAOPC4 ([113.118.104.251]) by newxmesmtplogicsvrszb6-0.qq.com (NewEsmtp) with SMTP id 2101B4DC; Tue, 31 Jan 2023 01:08:16 +0800 X-QQ-mid: xmsmtpt1675098496txciopj9y Message-ID: X-QQ-XMAILINFO: NkHKfw09D6j8cEP+3nLHDkAdc9pmK4K7HRNF+wlh5xVLig4Vbhvtv3tipqOhID FkfjyI5ooTucRKaJlTG/9eykJS9H2vHFh/j/Flvw7PTeh2IxbveAEHbmYrt1T1/1lZb/6TLhlIt9 cCtx+nir2C+Qm9mUi032m3u161UXDB1niR5ReXud9D/lzddIHNCkPk+IUUjGrdaLGhM9oVVvdeXa WJEuLNB6xjLOmeL/TDWuKh52nVUgLmbSSv6quuwQ31jplpThorBEuiJXieD0R6Vf4aVFQPBsK0rC uMdmXUeh0EkSBiA0nUIQOi0PvmMjIFxznfGV+rFzFESV+fwDkyMArdAUQrPaf9gspWJ7pkammgBZ WCOgLzqBbDJJ/rTphz1YlohdrLHyKMjRiEzI2pdUJ8bIoVirol9Lv7UgV/Xu9I+RRDn5NsDQ4nW3 e8vQTg9ZMPKiZc6FDWDkty9N0ZuXrumCapn5FPnIQb+eJtmxwC05AVj2CEf/cvd+0L2gWxA1tcjJ nokrm4I9vjGf7QIpXz/DV3ZZeI/9//rLvmbwvwIBIDP0TPlJKDoshX6bf53aFgPD7z6nyFi23wcS ZYBavr2KnSdkh79L0CtxFFFmeeuyXKbRH8zb07F90jo8QCV4ifHhF7QhzJv3isB3s4jyGir5rfGE HTD/A5CbdXbvBwfsf+1EwO1XEq4S/JgbOVVFyNznYvrcEAJAxYbFOV8+g0YPjoBhXnchJ9zQGl5z R0uq2PRTUeiVTrR4eIk7zspn+hWbDfjNWojt8Agj23Db6lPygBZcMqhTIFUNDrg17yJQVOZvRT6C bWcQ0Doy7WTZ+91elujh+cQvcHa0VBxCS8qGvanTqh5XPLtQzV4bJ2hwt06Z7xPnvLP5HpbphIt1 VJtAA3ywyNVrxV2vsRKUmXgtfC+yT3C4ATZ1of5s7VZ6GiuC9gwb/F8DkpfgMjx1W2mOFi3bLK0h vCaS7n406oWMK1AGldMosgAS33hUAzeUoFyrQCqKPBcu3YFjnCBKNhuGAhyZ9z From: "Zhao Zhili" To: "'FFmpeg development discussions and patches'" References: <167499051601.4503.13329354060075233079@lain.khirnov.net> <20230130165010.3156-1-leo.izen@gmail.com> In-Reply-To: <20230130165010.3156-1-leo.izen@gmail.com> Date: Tue, 31 Jan 2023 01:08:15 +0800 X-OQ-MSGID: <007601d934cd$71b92780$552b7680$@foxmail.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQJPeLvylu58U1j1dfh0LKvKNrrmdwJB4012rbiZjHA= Content-Language: zh-cn Subject: Re: [FFmpeg-devel] [PATCH v2] avutil/{color_utils, csp}: merge color_utils into csp and expose API 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 Cc: 'Leo Izen' 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: Cgo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gRnJvbTogZmZtcGVnLWRldmVsIDxmZm1w ZWctZGV2ZWwtYm91bmNlc0BmZm1wZWcub3JnPiBPbiBCZWhhbGYgT2YgTGVvIEl6ZW4KPiBTZW50 OiAyMDIz5bm0MeaciDMx5pelIDA6NTAKPiBUbzogZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKPiBD YzogTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPiBTdWJqZWN0OiBbRkZtcGVnLWRldmVs XSBbUEFUQ0ggdjJdIGF2dXRpbC97Y29sb3JfdXRpbHMsIGNzcH06IG1lcmdlIGNvbG9yX3V0aWxz IGludG8gY3NwIGFuZCBleHBvc2UgQVBJCj4gCj4gbGliYXZ1dGlsL2NvbG9yX3V0aWxzIGNvbnRh aW5zIHNvbWUgYXZwcml2XyBzeW1ib2xzIHRoYXQgbWFwCj4gZW51bSBBVlRyYW5zZmVyQ2hhcmFj dGVyaXN0aWMgdmFsdWVzIHRvIGdhbW1hLWN1cnZlIGFwcHJveGltYXRpb25zIGFuZAo+IHRvIHRo ZSBhY3R1YWwgdHJhbnNmZXIgZnVuY3Rpb25zIHRvIGludmVydCB0aGVtIChpLmUuIC0+IGxpbmVh cikuCj4gCj4gVGhlcmUncyB0d28gaXNzdWVzIHdpdGggdGhpczoKPiAoMSkgYXZwcml2IGlzIGV2 aWwgYW5kIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5ldmVyIHBvc3NpYmxlCj4gKDIpIGxpYmF2dXRp bC9jc3AuaCBleHBvc2VzIGEgcHVibGljIEFQSSBmb3IgaGFuZGxpbmcgY29sb3IgdGhhdAo+ICAg ICBhbHJlYWR5IGhhbmRsZXMgcHJpbWFyaWVzIGFuZCBtYXRyaWNpZXMKPiAKPiBJIGRvbid0IHNl ZSBhbnkgcmVhc29uIHRoaXMgQVBJIGhhcyB0byBiZSBwcml2YXRlLCBzbyB0aGlzIGNvbW1pdCB0 YWtlcwo+IHRoZSBmdW5jdGlvbmFsaXR5IGZyb20gYXZ1dGlsL2NvbG9yX3V0aWxzIGFuZCBtZXJn ZXMgaXQgaW50byBhdnV0aWwvY3NwCj4gd2l0aCBhbiBleHBvc2VkIGF2XyBBUEkgcmF0aGVyIHRo YW4gdGhlIHByZXZpb3VzIGF2cHJpdl8gQVBJLgo+IAo+IEV2ZXJ5IHJlZmVyZW5jZSB0byB0aGUg cHJldmlvdXMgQVBJIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlCj4gbmV3IG9uZS4g Y29sb3JfdXRpbHMuaCBoYXMgYmVlbiBkZWxldGVkIGFzIHdlbGwuIFRoaXMgc2hvdWxkIG5vdCBi cmVhawo+IGFueSBhcHBsaWNhdGlvbnMgYXMgaXQgb25seSBjb250YWluZWQgYXZwcml2XyBzeW1i b2xzIGluIHRoZSBmaXJzdAo+IHBsYWNlLCBzbyBub3RoaW5nIGluIHRoYXQgaGVhZGVyIGNvdWxk IGJlIHJlZmVyZW5jZWQgYnkgb3RoZXIKPiBhcHBsaWNhdGlvbnMuCgpJc24ndCBpdCBicmVhayBv bGQgbGliYXZjb2RlYyB3aGljaCBsaW5rZWQgdG8gdGhlIG5ldyBsaWJhdnV0aWw/Cgo+IAo+IFNp Z25lZC1vZmYtYnk6IExlbyBJemVuIDxsZW8uaXplbkBnbWFpbC5jb20+Cj4gLS0tCj4gIGRvYy9B UEljaGFuZ2VzICAgICAgICAgICAgICAgIHwgICA0ICsKPiAgbGliYXZjb2RlYy9leHIuYyAgICAg ICAgICAgICAgfCAgIDggKy0KPiAgbGliYXZjb2RlYy9mZmxjbXMyLmMgICAgICAgICAgfCAgIDEg LQo+ICBsaWJhdmNvZGVjL3BuZ2VuYy5jICAgICAgICAgICB8ICAgMyArLQo+ICBsaWJhdmZvcm1h dC9tb3ZlbmMuYyAgICAgICAgICB8ICAgNyArLQo+ICBsaWJhdnV0aWwvTWFrZWZpbGUgICAgICAg ICAgICB8ICAgMSAtCj4gIGxpYmF2dXRpbC9jb2xvcl91dGlscy5jICAgICAgIHwgMjM0IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmgg ICAgICAgfCAgNTYgLS0tLS0tLS0KPiAgbGliYXZ1dGlsL2NzcC5jICAgICAgICAgICAgICAgfCAx NzIgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdnV0aWwvY3NwLmggICAgICAgICAg ICAgICB8ICAzOSArKysrKysKPiAgbGliYXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMgfCAgIDQg Ky0KPiAgMTEgZmlsZXMgY2hhbmdlZCwgMjI1IGluc2VydGlvbnMoKyksIDMwNCBkZWxldGlvbnMo LSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9jb2xvcl91dGlscy5jCj4gIGRlbGV0 ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvY29sb3JfdXRpbHMuaAo+IAo+IGRpZmYgLS1naXQgYS9k b2MvQVBJY2hhbmdlcyBiL2RvYy9BUEljaGFuZ2VzCj4gaW5kZXggYmM1MmEwNzk2NC4uZjI4ZWI1 OWVkMyAxMDA2NDQKPiAtLS0gYS9kb2MvQVBJY2hhbmdlcwo+ICsrKyBiL2RvYy9BUEljaGFuZ2Vz Cj4gQEAgLTE0LDYgKzE0LDEwIEBAIGxpYmF2dXRpbDogICAgIDIwMjEtMDQtMjcKPiAKPiAgQVBJ IGNoYW5nZXMsIG1vc3QgcmVjZW50IGZpcnN0Ogo+IAo+ICsyMDIzLTAxLTMwIC0geHh4eHh4eHh4 eCAtIGxhdnUgNTcuNDQuMTAwIC0gY3NwLmgKPiArICBBZGQgYXZfY3NwX2FwcHJveGltYXRlX3Ry Y19nYW1tYSgpIGFuZCBhdl9jc3BfdHJjX2Z1bmNfZnJvbV9pZCgpLgo+ICsgIEFkZCBhdl9jc3Bf dHJjX2Z1bmN0aW9uLgo+ICsKPiAgMjAyMy0wMS0yOSAtIHh4eHh4eHh4eHggLSBsYXZjIDU5LjU5 LjEwMCAtIGF2Y29kZWMuaAo+ICAgIEFkZCBBVl9DT0RFQ19GTEFHX0NPUFlfT1BBUVVFIGFuZCBB Vl9DT0RFQ19GTEFHX0ZSQU1FX0RVUkFUSU9OLgo+IAo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVj L2V4ci5jIGIvbGliYXZjb2RlYy9leHIuYwo+IGluZGV4IDZhMGFmOTZjZTQuLjJmMTc2NmMxN2Ig MTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2RlYy9leHIuYwo+ICsrKyBiL2xpYmF2Y29kZWMvZXhyLmMK PiBAQCAtMzYsMTEgKzM2LDExIEBACj4gCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQu aCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9jb21tb24uaCIKPiArI2luY2x1ZGUgImxpYmF2dXRp bC9jc3AuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgo+ICAjaW5jbHVkZSAi bGliYXZ1dGlsL2ludGZsb2F0LmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIK PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiAtI2luY2x1ZGUgImxpYmF2dXRpbC9jb2xv cl91dGlscy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2hhbGYyZmxvYXQuaCIKPiAKPiAgI2lu Y2x1ZGUgImF2Y29kZWMuaCIKPiBAQCAtMTE4OSw3ICsxMTg5LDcgQEAgc3RhdGljIGludCBkZWNv ZGVfYmxvY2soQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICp0ZGF0YSwKPiAgICAgIGludCBp LCB4LCBidWZfc2l6ZSA9IHMtPmJ1Zl9zaXplOwo+ICAgICAgaW50IGMsIHJnYl9jaGFubmVsX2Nv dW50Owo+ICAgICAgZmxvYXQgb25lX2dhbW1hID0gMS4wZiAvIHMtPmdhbW1hOwo+IC0gICAgYXZw cml2X3RyY19mdW5jdGlvbiB0cmNfZnVuYyA9IGF2cHJpdl9nZXRfdHJjX2Z1bmN0aW9uX2Zyb21f dHJjKHMtPmFwcGx5X3RyY190eXBlKTsKPiArICAgIGF2X2NzcF90cmNfZnVuY3Rpb24gdHJjX2Z1 bmMgPSBhdl9jc3BfdHJjX2Z1bmNfZnJvbV9pZChzLT5hcHBseV90cmNfdHlwZSk7Cj4gICAgICBp bnQgcmV0Owo+IAo+ICAgICAgbGluZV9vZmZzZXQgPSBBVl9STDY0KHMtPmdiLmJ1ZmZlciArIGpv Ym5yICogOCk7Cj4gQEAgLTIyMTUsNyArMjIxNSw3IEBAIHN0YXRpYyBhdl9jb2xkIGludCBkZWNv ZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCj4gICAgICB1aW50MzJfdCBpOwo+ICAgICAg dW5pb24gYXZfaW50ZmxvYXQzMiB0Owo+ICAgICAgZmxvYXQgb25lX2dhbW1hID0gMS4wZiAvIHMt PmdhbW1hOwo+IC0gICAgYXZwcml2X3RyY19mdW5jdGlvbiB0cmNfZnVuYyA9IE5VTEw7Cj4gKyAg ICBhdl9jc3BfdHJjX2Z1bmN0aW9uIHRyY19mdW5jID0gTlVMTDsKPiAKPiAgICAgIGZmX2luaXRf aGFsZjJmbG9hdF90YWJsZXMoJnMtPmgyZl90YWJsZXMpOwo+IAo+IEBAIC0yMjI3LDcgKzIyMjcs NyBAQCBzdGF0aWMgYXZfY29sZCBpbnQgZGVjb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQo+ICAgICAgZmZfYnN3YXBkc3BfaW5pdCgmcy0+YmJkc3ApOwo+ICAjZW5kaWYKPiAKPiAtICAg IHRyY19mdW5jID0gYXZwcml2X2dldF90cmNfZnVuY3Rpb25fZnJvbV90cmMocy0+YXBwbHlfdHJj X3R5cGUpOwo+ICsgICAgdHJjX2Z1bmMgPSBhdl9jc3BfdHJjX2Z1bmNfZnJvbV9pZChzLT5hcHBs eV90cmNfdHlwZSk7Cj4gICAgICBpZiAodHJjX2Z1bmMpIHsKPiAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgNjU1MzY7ICsraSkgewo+ICAgICAgICAgICAgICB0LmkgPSBoYWxmMmZsb2F0KGksICZz LT5oMmZfdGFibGVzKTsKPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9mZmxjbXMyLmMgYi9saWJh dmNvZGVjL2ZmbGNtczIuYwo+IGluZGV4IGZkMzcwZmIzMTAuLjU0NDNmMTc4YmMgMTAwNjQ0Cj4g LS0tIGEvbGliYXZjb2RlYy9mZmxjbXMyLmMKPiArKysgYi9saWJhdmNvZGVjL2ZmbGNtczIuYwo+ IEBAIC0xNyw3ICsxNyw2IEBACj4gICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiAgICovCj4gCj4g LSNpbmNsdWRlICJsaWJhdnV0aWwvY29sb3JfdXRpbHMuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRp bC9jc3AuaCIKPiAKPiAgI2luY2x1ZGUgImZmbGNtczIuaCIKPiBkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9wbmdlbmMuYyBiL2xpYmF2Y29kZWMvcG5nZW5jLmMKPiBpbmRleCAyMzkzMTYxYzNiLi5h YzI3ZWViZjNhIDEwMDY0NAo+IC0tLSBhL2xpYmF2Y29kZWMvcG5nZW5jLmMKPiArKysgYi9saWJh dmNvZGVjL3BuZ2VuYy5jCj4gQEAgLTI5LDcgKzI5LDYgQEAKPiAgI2luY2x1ZGUgInpsaWJfd3Jh cHBlci5oIgo+IAo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4gLSNpbmNsdWRl ICJsaWJhdnV0aWwvY29sb3JfdXRpbHMuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9jcmMuaCIK PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9jc3AuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9saWJt LmgiCj4gQEAgLTMxNyw3ICszMTYsNyBAQCBzdGF0aWMgaW50IHBuZ19nZXRfY2hybShlbnVtIEFW Q29sb3JQcmltYXJpZXMgcHJpbSwgIHVpbnQ4X3QgKmJ1ZikKPiAKPiAgc3RhdGljIGludCBwbmdf Z2V0X2dhbWEoZW51bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMsIHVpbnQ4X3Qg KmJ1ZikKPiAgewo+IC0gICAgZG91YmxlIGdhbW1hID0gYXZwcml2X2dldF9nYW1tYV9mcm9tX3Ry Yyh0cmMpOwo+ICsgICAgZG91YmxlIGdhbW1hID0gYXZfY3NwX2FwcHJveGltYXRlX3RyY19nYW1t YSh0cmMpOwo+ICAgICAgaWYgKGdhbW1hIDw9IDFlLTYpCj4gICAgICAgICAgcmV0dXJuIDA7Cj4g Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21vdmVuYy5jIGIvbGliYXZmb3JtYXQvbW92ZW5j LmMKPiBpbmRleCA4ZDMxMzE3ODM4Li42MTgyZGM3ZjU4IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9y bWF0L21vdmVuYy5jCj4gKysrIGIvbGliYXZmb3JtYXQvbW92ZW5jLmMKPiBAQCAtNDcsNiArNDcs NyBAQAo+ICAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0 cmluZy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0LmgiCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvY3NwLmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZmxvYXQuaCIK PiAgI2luY2x1ZGUgImxpYmF2dXRpbC9tYXRoZW1hdGljcy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1 dGlsL2xpYm0uaCIKPiBAQCAtNTYsNyArNTcsNiBAQAo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL3N0 ZXJlbzNkLmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvdGltZWNvZGUuaCIKPiAgI2luY2x1ZGUg ImxpYmF2dXRpbC9kb3ZpX21ldGEuaCIKPiAtI2luY2x1ZGUgImxpYmF2dXRpbC9jb2xvcl91dGls cy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL3V1aWQuaCIKPiAgI2luY2x1ZGUgImhldmMuaCIK PiAgI2luY2x1ZGUgInJ0cGVuYy5oIgo+IEBAIC0yMDExLDkgKzIwMTEsOCBAQCBzdGF0aWMgaW50 IG1vdl93cml0ZV9wYXNwX3RhZyhBVklPQ29udGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaykKPiAg c3RhdGljIGludCBtb3Zfd3JpdGVfZ2FtYV90YWcoQVZGb3JtYXRDb250ZXh0ICpzLCBBVklPQ29u dGV4dCAqcGIsIE1PVlRyYWNrICp0cmFjaywgZG91YmxlIGdhbW1hKQo+ICB7Cj4gICAgICB1aW50 MzJfdCBnYW1hID0gMDsKPiAtICAgIGlmIChnYW1tYSA8PSAwLjApIHsKPiAtICAgICAgICBnYW1t YSA9IGF2cHJpdl9nZXRfZ2FtbWFfZnJvbV90cmModHJhY2stPnBhci0+Y29sb3JfdHJjKTsKPiAt ICAgIH0KPiArICAgIGlmIChnYW1tYSA8PSAwLjApCj4gKyAgICAgICAgZ2FtbWEgPSBhdl9jc3Bf YXBwcm94aW1hdGVfdHJjX2dhbW1hKHRyYWNrLT5wYXItPmNvbG9yX3RyYyk7Cj4gICAgICBhdl9s b2cocywgQVZfTE9HX0RFQlVHLCAiZ2FtbWEgdmFsdWUgJWdcbiIsIGdhbW1hKTsKPiAKPiAgICAg IGlmIChnYW1tYSA+IDFlLTYpIHsKPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL01ha2VmaWxlIGIv bGliYXZ1dGlsL01ha2VmaWxlCj4gaW5kZXggMjliMDY2NjVmNS4uZGM5MDEyZjlhOCAxMDA2NDQK PiAtLS0gYS9saWJhdnV0aWwvTWFrZWZpbGUKPiArKysgYi9saWJhdnV0aWwvTWFrZWZpbGUKPiBA QCAtMTE0LDcgKzExNCw2IEBAIE9CSlMgPSBhZGxlcjMyLm8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAgICAgICAgIGNhc3Q1Lm8gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ICAgICAgICAgY2FtZWxsaWEubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gICAgICAgICBjaGFubmVsX2xheW91dC5vICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAtICAgICAgIGNvbG9yX3V0 aWxzLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ICAgICAgICAgY3B1Lm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCj4gICAgICAgICBjcmMubyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiAgICAgICAgIGNzcC5v ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvY29sb3JfdXRpbHMuYyBiL2xpYmF2dXRpbC9j b2xvcl91dGlscy5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggNWUyMjFmYjc5 OC4uMDAwMDAwMDAwMAo+IC0tLSBhL2xpYmF2dXRpbC9jb2xvcl91dGlscy5jCj4gKysrIC9kZXYv bnVsbAo+IEBAIC0xLDIzNCArMCwwIEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCAoYykgMjAxNSBL ZXZpbiBXaGVhdGxleSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4gLSAqCj4gLSAqIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiAtICoKPiAtICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+IC0gKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gLSAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgo+ IC0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiAtICoKPiAtICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4g LSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAq Cj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKPiAtICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+IC0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCj4gLSAq Lwo+IC0KPiAtI2luY2x1ZGUgPHN0ZGRlZi5oPgo+IC0jaW5jbHVkZSA8bWF0aC5oPgo+IC0KPiAt I2luY2x1ZGUgImxpYmF2dXRpbC9jb2xvcl91dGlscy5oIgo+IC0jaW5jbHVkZSAibGliYXZ1dGls L3BpeGZtdC5oIgo+IC0KPiAtZG91YmxlIGF2cHJpdl9nZXRfZ2FtbWFfZnJvbV90cmMoZW51bSBB VkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMpCj4gLXsKPiAtICAgIGRvdWJsZSBnYW1t YTsKPiAtICAgIHN3aXRjaCAodHJjKSB7Cj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfQlQ3MDk6 Cj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfU01QVEUxNzBNOgo+IC0gICAgICAgIGNhc2UgQVZD T0xfVFJDX1NNUFRFMjQwTToKPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19CVDEzNjFfRUNHOgo+ IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0JUMjAyMF8xMDoKPiAtICAgICAgICBjYXNlIEFWQ09M X1RSQ19CVDIwMjBfMTI6Cj4gLSAgICAgICAgICAgIC8qIHRoZXNlIHNoYXJlIGEgc2VnbWVudGVk IFRSQywgYnV0IGdhbW1hIDEuOTYxIGlzIGEgY2xvc2UKPiAtICAgICAgICAgICAgICBhcHByb3hp bWF0aW9uLCBhbmQgYWxzbyBtb3JlIGNvcnJlY3QgZm9yIGRlY29kaW5nIGNvbnRlbnQgKi8KPiAt ICAgICAgICAgICAgZ2FtbWEgPSAxLjk2MTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAg ICAgY2FzZSBBVkNPTF9UUkNfR0FNTUEyMjoKPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19JRUM2 MTk2Nl8yXzE6Cj4gLSAgICAgICAgICAgIGdhbW1hID0gMi4yOwo+IC0gICAgICAgICAgICBicmVh azsKPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19HQU1NQTI4Ogo+IC0gICAgICAgICAgICBnYW1t YSA9IDIuODsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNf TElORUFSOgo+IC0gICAgICAgICAgICBnYW1tYSA9IDEuMDsKPiAtICAgICAgICAgICAgYnJlYWs7 Cj4gLSAgICAgICAgZGVmYXVsdDoKPiAtICAgICAgICAgICAgZ2FtbWEgPSAwLjA7IC8vIFVua25v d24gdmFsdWUgcmVwcmVzZW50YXRpb24KPiAtICAgIH0KPiAtICAgIHJldHVybiBnYW1tYTsKPiAt fQo+IC0KPiAtI2RlZmluZSBCVDcwOV9hbHBoYSAxLjA5OTI5NjgyNjgwOTQ0Mgo+IC0jZGVmaW5l IEJUNzA5X2JldGEgMC4wMTgwNTM5Njg1MTA4MDcKPiAtCj4gLXN0YXRpYyBkb3VibGUgYXZwcml2 X3RyY19idDcwOShkb3VibGUgTGMpCj4gLXsKPiAtICAgIGNvbnN0IGRvdWJsZSBhID0gQlQ3MDlf YWxwaGE7Cj4gLSAgICBjb25zdCBkb3VibGUgYiA9IEJUNzA5X2JldGE7Cj4gLQo+IC0gICAgcmV0 dXJuICgwLjAgPiBMYykgPyAwLjAKPiAtICAgICAgICAgOiAoICBiID4gTGMpID8gNC41MDAgKiBM Ywo+IC0gICAgICAgICA6ICAgICAgICAgICAgICBhICogcG93KExjLCAwLjQ1KSAtIChhIC0gMS4w KTsKPiAtfQo+IC0KPiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJjX2dhbW1hMjIoZG91YmxlIExj KQo+IC17Cj4gLSAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMCA6IHBvdyhMYywgMS4wLyAyLjIp Owo+IC19Cj4gLQo+IC1zdGF0aWMgZG91YmxlIGF2cHJpdl90cmNfZ2FtbWEyOChkb3VibGUgTGMp Cj4gLXsKPiAtICAgIHJldHVybiAoMC4wID4gTGMpID8gMC4wIDogcG93KExjLCAxLjAvIDIuOCk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19zbXB0ZTI0ME0oZG91YmxlIExj KQo+IC17Cj4gLSAgICBjb25zdCBkb3VibGUgYSA9IDEuMTExNTsKPiAtICAgIGNvbnN0IGRvdWJs ZSBiID0gMC4wMjI4Owo+IC0KPiAtICAgIHJldHVybiAoMC4wID4gTGMpID8gMC4wCj4gLSAgICAg ICAgIDogKCAgYiA+IExjKSA/IDQuMDAwICogTGMKPiAtICAgICAgICAgOiAgICAgICAgICAgICAg YSAqIHBvdyhMYywgMC40NSkgLSAoYSAtIDEuMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBkb3VibGUg YXZwcml2X3RyY19saW5lYXIoZG91YmxlIExjKQo+IC17Cj4gLSAgICByZXR1cm4gTGM7Cj4gLX0K PiAtCj4gLXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19sb2coZG91YmxlIExjKQo+IC17Cj4gLSAg ICByZXR1cm4gKDAuMDEgPiBMYykgPyAwLjAgOiAxLjAgKyBsb2cxMChMYykgLyAyLjA7Cj4gLX0K PiAtCj4gLXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19sb2dfc3FydChkb3VibGUgTGMpCj4gLXsK PiAtICAgIC8vIHNxcnQoMTApIC8gMTAwMAo+IC0gICAgcmV0dXJuICgwLjAwMzE2MjI3NzY2ID4g TGMpID8gMC4wIDogMS4wICsgbG9nMTAoTGMpIC8gMi41Owo+IC19Cj4gLQo+IC1zdGF0aWMgZG91 YmxlIGF2cHJpdl90cmNfaWVjNjE5NjZfMl80KGRvdWJsZSBMYykKPiAtewo+IC0gICAgY29uc3Qg ZG91YmxlIGEgPSBCVDcwOV9hbHBoYTsKPiAtICAgIGNvbnN0IGRvdWJsZSBiID0gQlQ3MDlfYmV0 YTsKPiAtCj4gLSAgICByZXR1cm4gKC1iID49IExjKSA/IC1hICogcG93KC1MYywgMC40NSkgKyAo YSAtIDEuMCkKPiAtICAgICAgICAgOiAoIGIgPiAgTGMpID8gNC41MDAgKiBMYwo+IC0gICAgICAg ICA6ICAgICAgICAgICAgICAgYSAqIHBvdyggTGMsIDAuNDUpIC0gKGEgLSAxLjApOwo+IC19Cj4g LQo+IC1zdGF0aWMgZG91YmxlIGF2cHJpdl90cmNfYnQxMzYxKGRvdWJsZSBMYykKPiAtewo+IC0g ICAgY29uc3QgZG91YmxlIGEgPSBCVDcwOV9hbHBoYTsKPiAtICAgIGNvbnN0IGRvdWJsZSBiID0g QlQ3MDlfYmV0YTsKPiAtCj4gLSAgICByZXR1cm4gKC0wLjAwNDUgPj0gTGMpID8gLShhICogcG93 KC00LjAgKiBMYywgMC40NSkgKyAoYSAtIDEuMCkpIC8gNC4wCj4gLSAgICAgICAgIDogKCBiID4g IExjKSA/IDQuNTAwICogTGMKPiAtICAgICAgICAgOiAgICAgICAgICAgICAgIGEgKiBwb3coIExj LCAwLjQ1KSAtIChhIC0gMS4wKTsKPiAtfQo+IC0KPiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJj X2llYzYxOTY2XzJfMShkb3VibGUgTGMpCj4gLXsKPiAtICAgIGNvbnN0IGRvdWJsZSBhID0gMS4w NTU7Cj4gLSAgICBjb25zdCBkb3VibGUgYiA9IDAuMDAzMTMwODsKPiAtCj4gLSAgICByZXR1cm4g KDAuMCA+IExjKSA/IDAuMAo+IC0gICAgICAgICA6ICggIGIgPiBMYykgPyAxMi45MiAqIExjCj4g LSAgICAgICAgIDogICAgICAgICAgICAgIGEgKiBwb3coTGMsIDEuMCAgLyAyLjQpIC0gKGEgLSAx LjApOwo+IC19Cj4gLQo+IC1zdGF0aWMgZG91YmxlIGF2cHJpdl90cmNfc21wdGVfc3QyMDg0KGRv dWJsZSBMYykKPiAtewo+IC0gICAgY29uc3QgZG91YmxlIGMxID0gICAgICAgICAzNDI0LjAgLyA0 MDk2LjA7IC8vIGMzLWMyICsgMQo+IC0gICAgY29uc3QgZG91YmxlIGMyID0gIDMyLjAgKiAyNDEz LjAgLyA0MDk2LjA7Cj4gLSAgICBjb25zdCBkb3VibGUgYzMgPSAgMzIuMCAqIDIzOTIuMCAvIDQw OTYuMDsKPiAtICAgIGNvbnN0IGRvdWJsZSBtICA9IDEyOC4wICogMjUyMy4wIC8gNDA5Ni4wOwo+ IC0gICAgY29uc3QgZG91YmxlIG4gID0gIDAuMjUgKiAyNjEwLjAgLyA0MDk2LjA7Cj4gLSAgICBj b25zdCBkb3VibGUgTCAgPSBMYyAvIDEwMDAwLjA7Cj4gLSAgICBjb25zdCBkb3VibGUgTG4gPSBw b3coTCwgbik7Cj4gLQo+IC0gICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPiAtICAgICAgICAg OiAgICAgICAgICAgICAgcG93KChjMSArIGMyICogTG4pIC8gKDEuMCArIGMzICogTG4pLCBtKTsK PiAtCj4gLX0KPiAtCj4gLXN0YXRpYyBkb3VibGUgYXZwcml2X3RyY19zbXB0ZV9zdDQyOF8xKGRv dWJsZSBMYykKPiAtewo+IC0gICAgcmV0dXJuICgwLjAgPiBMYykgPyAwLjAKPiAtICAgICAgICAg OiAgICAgICAgICAgICAgcG93KDQ4LjAgKiBMYyAvIDUyLjM3LCAxLjAgLyAyLjYpOwo+IC19Cj4g LQo+IC0KPiAtc3RhdGljIGRvdWJsZSBhdnByaXZfdHJjX2FyaWJfc3RkX2I2Nyhkb3VibGUgTGMp IHsKPiAtICAgIC8vIFRoZSBmdW5jdGlvbiB1c2VzIHRoZSBkZWZpbml0aW9uIGZyb20gSEVWQywg d2hpY2ggYXNzdW1lcyB0aGF0IHRoZSBwZWFrCj4gLSAgICAvLyB3aGl0ZSBpcyBpbnB1dCBsZXZl bCA9IDEuICh0aGlzIGlzIGVxdWl2YWxlbnQgdG8gc2NhbGluZyBFID0gTGMgKiAxMiBhbmQKPiAt ICAgIC8vIHVzaW5nIHRoZSBkZWZpbml0aW9uIGZyb20gdGhlIEFSSUIgU1RELUI2NyBzcGVjKQo+ IC0gICAgY29uc3QgZG91YmxlIGEgPSAwLjE3ODgzMjc3Owo+IC0gICAgY29uc3QgZG91YmxlIGIg PSAwLjI4NDY2ODkyOwo+IC0gICAgY29uc3QgZG91YmxlIGMgPSAwLjU1OTkxMDczOwo+IC0gICAg cmV0dXJuICgwLjAgPiBMYykgPyAwLjAgOgo+IC0gICAgICAgIChMYyA8PSAxLjAgLyAxMi4wID8g c3FydCgzLjAgKiBMYykgOiBhICogbG9nKDEyLjAgKiBMYyAtIGIpICsgYyk7Cj4gLX0KPiAtCj4g LWF2cHJpdl90cmNfZnVuY3Rpb24gYXZwcml2X2dldF90cmNfZnVuY3Rpb25fZnJvbV90cmMoZW51 bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMpCj4gLXsKPiAtICAgIGF2cHJpdl90 cmNfZnVuY3Rpb24gZnVuYyA9IE5VTEw7Cj4gLSAgICBzd2l0Y2ggKHRyYykgewo+IC0gICAgICAg IGNhc2UgQVZDT0xfVFJDX0JUNzA5Ogo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX1NNUFRFMTcw TToKPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19CVDIwMjBfMTA6Cj4gLSAgICAgICAgY2FzZSBB VkNPTF9UUkNfQlQyMDIwXzEyOgo+IC0gICAgICAgICAgICBmdW5jID0gYXZwcml2X3RyY19idDcw OTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLQo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0dB TU1BMjI6Cj4gLSAgICAgICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2dhbW1hMjI7Cj4gLSAgICAg ICAgICAgIGJyZWFrOwo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0dBTU1BMjg6Cj4gLSAgICAg ICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2dhbW1hMjg7Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+ IC0KPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19TTVBURTI0ME06Cj4gLSAgICAgICAgICAgIGZ1 bmMgPSBhdnByaXZfdHJjX3NtcHRlMjQwTTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLQo+IC0g ICAgICAgIGNhc2UgQVZDT0xfVFJDX0xJTkVBUjoKPiAtICAgICAgICAgICAgZnVuYyA9IGF2cHJp dl90cmNfbGluZWFyOwo+IC0gICAgICAgICAgICBicmVhazsKPiAtCj4gLSAgICAgICAgY2FzZSBB VkNPTF9UUkNfTE9HOgo+IC0gICAgICAgICAgICBmdW5jID0gYXZwcml2X3RyY19sb2c7Cj4gLSAg ICAgICAgICAgIGJyZWFrOwo+IC0KPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19MT0dfU1FSVDoK PiAtICAgICAgICAgICAgZnVuYyA9IGF2cHJpdl90cmNfbG9nX3NxcnQ7Cj4gLSAgICAgICAgICAg IGJyZWFrOwo+IC0KPiAtICAgICAgICBjYXNlIEFWQ09MX1RSQ19JRUM2MTk2Nl8yXzQ6Cj4gLSAg ICAgICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2llYzYxOTY2XzJfNDsKPiAtICAgICAgICAgICAg YnJlYWs7Cj4gLQo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0JUMTM2MV9FQ0c6Cj4gLSAgICAg ICAgICAgIGZ1bmMgPSBhdnByaXZfdHJjX2J0MTM2MTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4g LQo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0lFQzYxOTY2XzJfMToKPiAtICAgICAgICAgICAg ZnVuYyA9IGF2cHJpdl90cmNfaWVjNjE5NjZfMl8xOwo+IC0gICAgICAgICAgICBicmVhazsKPiAt Cj4gLSAgICAgICAgY2FzZSBBVkNPTF9UUkNfU01QVEVTVDIwODQ6Cj4gLSAgICAgICAgICAgIGZ1 bmMgPSBhdnByaXZfdHJjX3NtcHRlX3N0MjA4NDsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLQo+ IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX1NNUFRFU1Q0MjhfMToKPiAtICAgICAgICAgICAgZnVu YyA9IGF2cHJpdl90cmNfc21wdGVfc3Q0MjhfMTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLQo+ IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX0FSSUJfU1REX0I2NzoKPiAtICAgICAgICAgICAgZnVu YyA9IGF2cHJpdl90cmNfYXJpYl9zdGRfYjY3Owo+IC0gICAgICAgICAgICBicmVhazsKPiAtCj4g LSAgICAgICAgY2FzZSBBVkNPTF9UUkNfUkVTRVJWRUQwOgo+IC0gICAgICAgIGNhc2UgQVZDT0xf VFJDX1VOU1BFQ0lGSUVEOgo+IC0gICAgICAgIGNhc2UgQVZDT0xfVFJDX1JFU0VSVkVEOgo+IC0g ICAgICAgIGRlZmF1bHQ6Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgfQo+IC0gICAgcmV0 dXJuIGZ1bmM7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2NvbG9yX3V0aWxzLmggYi9s aWJhdnV0aWwvY29sb3JfdXRpbHMuaAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDk1MjkwMDY0NTIuLjAwMDAwMDAwMDAKPiAtLS0gYS9saWJhdnV0aWwvY29sb3JfdXRpbHMuaAo+ ICsrKyAvZGV2L251bGwKPiBAQCAtMSw1NiArMCwwIEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCAo YykgMjAxNSBLZXZpbiBXaGVhdGxleSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4gLSAq Cj4gLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiAtICoKPiAtICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+IC0gKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4g LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgo+IC0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAtICoKPiAtICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCj4gLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gLSAqCj4gLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiAtICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo+IC0gKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBBVlVUSUxfQ09MT1JfVVRJTFNfSAo+IC0jZGVmaW5l IEFWVVRJTF9DT0xPUl9VVElMU19ICj4gLQo+IC0KPiAtI2luY2x1ZGUgImxpYmF2dXRpbC9waXhm bXQuaCIKPiAtCj4gLS8qKgo+IC0gKiBEZXRlcm1pbmUgYSBzdWl0YWJsZSAnZ2FtbWEnIHZhbHVl IHRvIG1hdGNoIHRoZSBzdXBwbGllZAo+IC0gKiBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp Yy4KPiAtICoKPiAtICogU2VlIEFwcGxlIFRlY2huaWNhbCBOb3RlIFROMjI1NyAoaHR0cHM6Ly9k ZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIyNTcvX2luZGV4Lmh0 bWwpCj4gLSAqCj4gLSAqIEByZXR1cm4gV2lsbCByZXR1cm4gYW4gYXBwcm94aW1hdGlvbiB0byB0 aGUgc2ltcGxlIGdhbW1hIGZ1bmN0aW9uIG1hdGNoaW5nCj4gLSAqICAgICAgICAgdGhlIHN1cHBs aWVkIFRyYW5zZmVyIENoYXJhY3RlcmlzdGljLCBXaWxsIHJldHVybiAwLjAgZm9yIGFueQo+IC0g KiAgICAgICAgIHdlIGNhbm5vdCByZWFzb25hYmx5IG1hdGNoIGFnYWluc3QuCj4gLSAqLwo+IC1k b3VibGUgYXZwcml2X2dldF9nYW1tYV9mcm9tX3RyYyhlbnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJh Y3RlcmlzdGljIHRyYyk7Cj4gLQo+IC0KPiAtdHlwZWRlZiBkb3VibGUgKCphdnByaXZfdHJjX2Z1 bmN0aW9uKShkb3VibGUpOwo+IC0KPiAtLyoqCj4gLSAqIERldGVybWluZSB0aGUgZnVuY3Rpb24g bmVlZGVkIHRvIGFwcGx5IHRoZSBnaXZlbgo+IC0gKiBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJp c3RpYyB0byBsaW5lYXIgaW5wdXQuCj4gLSAqCj4gLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5lZCBz aG91bGQgZXhwZWN0IGEgbm9taW5hbCBkb21haW4gYW5kIHJhbmdlIG9mIFswLjAtMS4wXQo+IC0g KiB2YWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIG1heWJlIHZhbGlkIGRlcGVuZGluZyBvbiB0 aGUgY2hvc2VuCj4gLSAqIGNoYXJhY3RlcmlzdGljIGZ1bmN0aW9uLgo+IC0gKgo+IC0gKiBAcmV0 dXJuIFdpbGwgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIG1hdGNoaW5nIHRoZQo+IC0g KiAgICAgICAgIHN1cHBsaWVkIFRyYW5zZmVyIENoYXJhY3RlcmlzdGljLiBJZiB1bnNwZWNpZmll ZCB3aWxsCj4gLSAqICAgICAgICAgcmV0dXJuIE5VTEw6Cj4gLSAqLwo+IC1hdnByaXZfdHJjX2Z1 bmN0aW9uIGF2cHJpdl9nZXRfdHJjX2Z1bmN0aW9uX2Zyb21fdHJjKGVudW0gQVZDb2xvclRyYW5z ZmVyQ2hhcmFjdGVyaXN0aWMgdHJjKTsKPiAtCj4gLSNlbmRpZgo+IGRpZmYgLS1naXQgYS9saWJh dnV0aWwvY3NwLmMgYi9saWJhdnV0aWwvY3NwLmMKPiBpbmRleCA5OGZjODNjMWRhLi43ZWY4MjJj NjBiIDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC9jc3AuYwo+ICsrKyBiL2xpYmF2dXRpbC9jc3Au Ywo+IEBAIC0xLDUgKzEsOCBAQAo+ICAvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTUgS2V2aW4g V2hlYXRsZXkgPGtldmluLmoud2hlYXRsZXlAZ21haWwuY29tPgo+ICAgKiBDb3B5cmlnaHQgKGMp IDIwMTYgUm9uYWxkIFMuIEJ1bHRqZSA8cnNidWx0amVAZ21haWwuY29tPgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMjMgTGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPiArICoKPiAgICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+ICAgKgo+ICAgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gQEAgLTIxLDkgKzI0LDExIEBA Cj4gICAqIEBmaWxlIENvbG9yc3BhY2UgZnVuY3Rpb25zIGZvciBsaWJhdnV0aWwKPiAgICogQGF1 dGhvciBSb25hbGQgUy4gQnVsdGplIDxyc2J1bHRqZUBnbWFpbC5jb20+Cj4gICAqIEBhdXRob3Ig TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPiArICogQGF1dGhvciBLZXZpbiBXaGVhdGxl eSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4gICAqLwo+IAo+ICAjaW5jbHVkZSA8c3Rk bGliLmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gCj4gICNpbmNsdWRlICJhdHRyaWJ1dGVzLmgi Cj4gICNpbmNsdWRlICJjc3AuaCIKPiBAQCAtMTI2LDMgKzEzMSwxNzAgQEAgZW51bSBBVkNvbG9y UHJpbWFyaWVzIGF2X2NzcF9wcmltYXJpZXNfaWRfZnJvbV9kZXNjKGNvbnN0IEFWQ29sb3JQcmlt YXJpZXNEZXNjICoKPiAKPiAgICAgIHJldHVybiBBVkNPTF9QUklfVU5TUEVDSUZJRUQ7Cj4gIH0K PiArCj4gK3N0YXRpYyBjb25zdCBkb3VibGUgYXBwcm94aW1hdGVfZ2FtbWFbQVZDT0xfVFJDX05C XSA9IHsKPiArICAgIFtBVkNPTF9UUkNfQlQ3MDldID0gMS45NjEsCj4gKyAgICBbQVZDT0xfVFJD X1NNUFRFMTcwTV0gPSAxLjk2MSwKPiArICAgIFtBVkNPTF9UUkNfU01QVEUyNDBNXSA9IDEuOTYx LAo+ICsgICAgW0FWQ09MX1RSQ19CVDEzNjFfRUNHXSA9IDEuOTYxLAo+ICsgICAgW0FWQ09MX1RS Q19CVDIwMjBfMTBdID0gMS45NjEsCj4gKyAgICBbQVZDT0xfVFJDX0JUMjAyMF8xMl0gPSAxLjk2 MSwKPiArICAgIFtBVkNPTF9UUkNfR0FNTUEyMl0gPSAyLjIsCj4gKyAgICBbQVZDT0xfVFJDX0lF QzYxOTY2XzJfMV0gPSAyLjIsCj4gKyAgICBbQVZDT0xfVFJDX0dBTU1BMjhdID0gMi44LAo+ICsg ICAgW0FWQ09MX1RSQ19MSU5FQVJdID0gMS4wLAo+ICsgICAgW0FWQ09MX1RSQ19TTVBURTQyOF0g PSAyLjYsCj4gK307Cj4gKwo+ICtkb3VibGUgYXZfY3NwX2FwcHJveGltYXRlX3RyY19nYW1tYShl bnVtIEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYykKPiArewo+ICsgICAgZG91Ymxl IGdhbW1hOwo+ICsgICAgaWYgKHRyYyA+PSBBVkNPTF9UUkNfTkIpCj4gKyAgICAgICAgcmV0dXJu IDAuMDsKPiArICAgIGdhbW1hID0gYXBwcm94aW1hdGVfZ2FtbWFbdHJjXTsKPiArICAgIGlmIChn YW1tYSA+IDApCj4gKyAgICAgICAgcmV0dXJuIGdhbW1hOwo+ICsgICAgcmV0dXJuIDAuMDsKPiAr fQo+ICsKPiArI2RlZmluZSBCVDcwOV9hbHBoYSAxLjA5OTI5NjgyNjgwOTQ0Mgo+ICsjZGVmaW5l IEJUNzA5X2JldGEgMC4wMTgwNTM5Njg1MTA4MDcKPiArCj4gK3N0YXRpYyBkb3VibGUgdHJjX2J0 NzA5KGRvdWJsZSBMYykKPiArewo+ICsgICAgY29uc3QgZG91YmxlIGEgPSBCVDcwOV9hbHBoYTsK PiArICAgIGNvbnN0IGRvdWJsZSBiID0gQlQ3MDlfYmV0YTsKPiArCj4gKyAgICByZXR1cm4gKDAu MCA+IExjKSA/IDAuMAo+ICsgICAgICAgICA6ICggIGIgPiBMYykgPyA0LjUwMCAqIExjCj4gKyAg ICAgICAgIDogICAgICAgICAgICAgIGEgKiBwb3coTGMsIDAuNDUpIC0gKGEgLSAxLjApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgZG91YmxlIHRyY19nYW1tYTIyKGRvdWJsZSBMYykKPiArewo+ICsgICAg cmV0dXJuICgwLjAgPiBMYykgPyAwLjAgOiBwb3coTGMsIDEuMC8gMi4yKTsKPiArfQo+ICsKPiAr c3RhdGljIGRvdWJsZSB0cmNfZ2FtbWEyOChkb3VibGUgTGMpCj4gK3sKPiArICAgIHJldHVybiAo MC4wID4gTGMpID8gMC4wIDogcG93KExjLCAxLjAvIDIuOCk7Cj4gK30KPiArCj4gK3N0YXRpYyBk b3VibGUgdHJjX3NtcHRlMjQwTShkb3VibGUgTGMpCj4gK3sKPiArICAgIGNvbnN0IGRvdWJsZSBh ID0gMS4xMTE1Owo+ICsgICAgY29uc3QgZG91YmxlIGIgPSAwLjAyMjg7Cj4gKwo+ICsgICAgcmV0 dXJuICgwLjAgPiBMYykgPyAwLjAKPiArICAgICAgICAgOiAoICBiID4gTGMpID8gNC4wMDAgKiBM Ywo+ICsgICAgICAgICA6ICAgICAgICAgICAgICBhICogcG93KExjLCAwLjQ1KSAtIChhIC0gMS4w KTsKPiArfQo+ICsKPiArc3RhdGljIGRvdWJsZSB0cmNfbGluZWFyKGRvdWJsZSBMYykKPiArewo+ ICsgICAgcmV0dXJuIExjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZG91YmxlIHRyY19sb2coZG91Ymxl IExjKQo+ICt7Cj4gKyAgICByZXR1cm4gKDAuMDEgPiBMYykgPyAwLjAgOiAxLjAgKyBsb2cxMChM YykgLyAyLjA7Cj4gK30KPiArCj4gK3N0YXRpYyBkb3VibGUgdHJjX2xvZ19zcXJ0KGRvdWJsZSBM YykKPiArewo+ICsgICAgLy8gc3FydCgxMCkgLyAxMDAwCj4gKyAgICByZXR1cm4gKDAuMDAzMTYy Mjc3NjYgPiBMYykgPyAwLjAgOiAxLjAgKyBsb2cxMChMYykgLyAyLjU7Cj4gK30KPiArCj4gK3N0 YXRpYyBkb3VibGUgdHJjX2llYzYxOTY2XzJfNChkb3VibGUgTGMpCj4gK3sKPiArICAgIGNvbnN0 IGRvdWJsZSBhID0gQlQ3MDlfYWxwaGE7Cj4gKyAgICBjb25zdCBkb3VibGUgYiA9IEJUNzA5X2Jl dGE7Cj4gKwo+ICsgICAgcmV0dXJuICgtYiA+PSBMYykgPyAtYSAqIHBvdygtTGMsIDAuNDUpICsg KGEgLSAxLjApCj4gKyAgICAgICAgIDogKCBiID4gIExjKSA/IDQuNTAwICogTGMKPiArICAgICAg ICAgOiAgICAgICAgICAgICAgIGEgKiBwb3coIExjLCAwLjQ1KSAtIChhIC0gMS4wKTsKPiArfQo+ ICsKPiArc3RhdGljIGRvdWJsZSB0cmNfYnQxMzYxKGRvdWJsZSBMYykKPiArewo+ICsgICAgY29u c3QgZG91YmxlIGEgPSBCVDcwOV9hbHBoYTsKPiArICAgIGNvbnN0IGRvdWJsZSBiID0gQlQ3MDlf YmV0YTsKPiArCj4gKyAgICByZXR1cm4gKC0wLjAwNDUgPj0gTGMpID8gLShhICogcG93KC00LjAg KiBMYywgMC40NSkgKyAoYSAtIDEuMCkpIC8gNC4wCj4gKyAgICAgICAgIDogKCBiID4gIExjKSA/ IDQuNTAwICogTGMKPiArICAgICAgICAgOiAgICAgICAgICAgICAgIGEgKiBwb3coIExjLCAwLjQ1 KSAtIChhIC0gMS4wKTsKPiArfQo+ICsKPiArc3RhdGljIGRvdWJsZSB0cmNfaWVjNjE5NjZfMl8x KGRvdWJsZSBMYykKPiArewo+ICsgICAgY29uc3QgZG91YmxlIGEgPSAxLjA1NTsKPiArICAgIGNv bnN0IGRvdWJsZSBiID0gMC4wMDMxMzA4Owo+ICsKPiArICAgIHJldHVybiAoMC4wID4gTGMpID8g MC4wCj4gKyAgICAgICAgIDogKCAgYiA+IExjKSA/IDEyLjkyICogTGMKPiArICAgICAgICAgOiAg ICAgICAgICAgICAgYSAqIHBvdyhMYywgMS4wICAvIDIuNCkgLSAoYSAtIDEuMCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBkb3VibGUgdHJjX3NtcHRlX3N0MjA4NChkb3VibGUgTGMpCj4gK3sKPiArICAg IGNvbnN0IGRvdWJsZSBjMSA9ICAgICAgICAgMzQyNC4wIC8gNDA5Ni4wOyAvLyBjMy1jMiArIDEK PiArICAgIGNvbnN0IGRvdWJsZSBjMiA9ICAzMi4wICogMjQxMy4wIC8gNDA5Ni4wOwo+ICsgICAg Y29uc3QgZG91YmxlIGMzID0gIDMyLjAgKiAyMzkyLjAgLyA0MDk2LjA7Cj4gKyAgICBjb25zdCBk b3VibGUgbSAgPSAxMjguMCAqIDI1MjMuMCAvIDQwOTYuMDsKPiArICAgIGNvbnN0IGRvdWJsZSBu ICA9ICAwLjI1ICogMjYxMC4wIC8gNDA5Ni4wOwo+ICsgICAgY29uc3QgZG91YmxlIEwgID0gTGMg LyAxMDAwMC4wOwo+ICsgICAgY29uc3QgZG91YmxlIExuID0gcG93KEwsIG4pOwo+ICsKPiArICAg IHJldHVybiAoMC4wID4gTGMpID8gMC4wCj4gKyAgICAgICAgIDogICAgICAgICAgICAgIHBvdygo YzEgKyBjMiAqIExuKSAvICgxLjAgKyBjMyAqIExuKSwgbSk7Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0 aWMgZG91YmxlIHRyY19zbXB0ZV9zdDQyOF8xKGRvdWJsZSBMYykKPiArewo+ICsgICAgcmV0dXJu ICgwLjAgPiBMYykgPyAwLjAKPiArICAgICAgICAgOiAgICAgICAgICAgICAgcG93KDQ4LjAgKiBM YyAvIDUyLjM3LCAxLjAgLyAyLjYpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGRvdWJsZSB0cmNf YXJpYl9zdGRfYjY3KGRvdWJsZSBMYykgewo+ICsgICAgLy8gVGhlIGZ1bmN0aW9uIHVzZXMgdGhl IGRlZmluaXRpb24gZnJvbSBIRVZDLCB3aGljaCBhc3N1bWVzIHRoYXQgdGhlIHBlYWsKPiArICAg IC8vIHdoaXRlIGlzIGlucHV0IGxldmVsID0gMS4gKHRoaXMgaXMgZXF1aXZhbGVudCB0byBzY2Fs aW5nIEUgPSBMYyAqIDEyIGFuZAo+ICsgICAgLy8gdXNpbmcgdGhlIGRlZmluaXRpb24gZnJvbSB0 aGUgQVJJQiBTVEQtQjY3IHNwZWMpCj4gKyAgICBjb25zdCBkb3VibGUgYSA9IDAuMTc4ODMyNzc7 Cj4gKyAgICBjb25zdCBkb3VibGUgYiA9IDAuMjg0NjY4OTI7Cj4gKyAgICBjb25zdCBkb3VibGUg YyA9IDAuNTU5OTEwNzM7Cj4gKyAgICByZXR1cm4gKDAuMCA+IExjKSA/IDAuMCA6Cj4gKyAgICAg ICAgKExjIDw9IDEuMCAvIDEyLjAgPyBzcXJ0KDMuMCAqIExjKSA6IGEgKiBsb2coMTIuMCAqIExj IC0gYikgKyBjKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGF2X2NzcF90cmNfZnVuY3Rpb24g dHJjX2Z1bmNzW0FWQ09MX1RSQ19OQl0gPSB7Cj4gKyAgICBbQVZDT0xfVFJDX0JUNzA5XSA9IHRy Y19idDcwOSwKPiArICAgIFtBVkNPTF9UUkNfR0FNTUEyMl0gPSB0cmNfZ2FtbWEyMiwKPiArICAg IFtBVkNPTF9UUkNfR0FNTUEyOF0gPSB0cmNfZ2FtbWEyOCwKPiArICAgIFtBVkNPTF9UUkNfU01Q VEUxNzBNXSA9IHRyY19idDcwOSwKPiArICAgIFtBVkNPTF9UUkNfU01QVEUyNDBNXSA9IHRyY19z bXB0ZTI0ME0sCj4gKyAgICBbQVZDT0xfVFJDX0xJTkVBUl0gPSB0cmNfbGluZWFyLAo+ICsgICAg W0FWQ09MX1RSQ19MT0ddID0gdHJjX2xvZywKPiArICAgIFtBVkNPTF9UUkNfTE9HX1NRUlRdID0g dHJjX2xvZ19zcXJ0LAo+ICsgICAgW0FWQ09MX1RSQ19JRUM2MTk2Nl8yXzRdID0gdHJjX2llYzYx OTY2XzJfNCwKPiArICAgIFtBVkNPTF9UUkNfQlQxMzYxX0VDR10gPSB0cmNfYnQxMzYxLAo+ICsg ICAgW0FWQ09MX1RSQ19JRUM2MTk2Nl8yXzFdID0gdHJjX2llYzYxOTY2XzJfMSwKPiArICAgIFtB VkNPTF9UUkNfQlQyMDIwXzEwXSA9IHRyY19idDcwOSwKPiArICAgIFtBVkNPTF9UUkNfQlQyMDIw XzEyXSA9IHRyY19idDcwOSwKPiArICAgIFtBVkNPTF9UUkNfU01QVEUyMDg0XSA9IHRyY19zbXB0 ZV9zdDIwODQsCj4gKyAgICBbQVZDT0xfVFJDX1NNUFRFNDI4XSA9IHRyY19zbXB0ZV9zdDQyOF8x LAo+ICsgICAgW0FWQ09MX1RSQ19BUklCX1NURF9CNjddID0gdHJjX2FyaWJfc3RkX2I2NywKPiAr fTsKPiArCj4gK2F2X2NzcF90cmNfZnVuY3Rpb24gYXZfY3NwX3RyY19mdW5jX2Zyb21faWQoZW51 bSBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYyB0cmMpCj4gK3sKPiArICAgIGF2X2NzcF90 cmNfZnVuY3Rpb24gZnVuYzsKPiArICAgIGlmICh0cmMgPj0gQVZDT0xfVFJDX05CKQo+ICsgICAg ICAgIHJldHVybiBOVUxMOwo+ICsgICAgZnVuYyA9IHRyY19mdW5jc1t0cmNdOwo+ICsgICAgaWYg KCFmdW5jKQo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgcmV0dXJuIGZ1bmM7Cj4gK30K PiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2NzcC5oIGIvbGliYXZ1dGlsL2NzcC5oCj4gaW5kZXgg MThlZjIwOGFkZi4uNzNiY2U1MmJjMCAxMDA2NDQKPiAtLS0gYS9saWJhdnV0aWwvY3NwLmgKPiAr KysgYi9saWJhdnV0aWwvY3NwLmgKPiBAQCAtMSw1ICsxLDggQEAKPiAgLyoKPiArICogQ29weXJp Z2h0IChjKSAyMDE1IEtldmluIFdoZWF0bGV5IDxrZXZpbi5qLndoZWF0bGV5QGdtYWlsLmNvbT4K PiAgICogQ29weXJpZ2h0IChjKSAyMDE2IFJvbmFsZCBTLiBCdWx0amUgPHJzYnVsdGplQGdtYWls LmNvbT4KPiArICogQ29weXJpZ2h0IChjKSAyMDIzIExlbyBJemVuIDxsZW8uaXplbkBnbWFpbC5j b20+Cj4gKyAqCj4gICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiAgICoKPiAgICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ IEBAIC0yOSw2ICszMiw3IEBACj4gICAqIEBpbmdyb3VwIGxhdnVfbWF0aF9jc3AKPiAgICogQGF1 dGhvciBSb25hbGQgUy4gQnVsdGplIDxyc2J1bHRqZUBnbWFpbC5jb20+Cj4gICAqIEBhdXRob3Ig TGVvIEl6ZW4gPGxlby5pemVuQGdtYWlsLmNvbT4KPiArICogQGF1dGhvciBLZXZpbiBXaGVhdGxl eSA8a2V2aW4uai53aGVhdGxleUBnbWFpbC5jb20+Cj4gICAqLwo+IAo+ICAvKioKPiBAQCAtNzYs NiArODAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQVZDb2xvclByaW1hcmllc0Rlc2Mgewo+ICAgICAg QVZQcmltYXJ5Q29lZmZpY2llbnRzIHByaW07Cj4gIH0gQVZDb2xvclByaW1hcmllc0Rlc2M7Cj4g Cj4gKy8qKgo+ICsgKiBGdW5jdGlvbiBwb2ludGVyIHJlcHJlc2VudGluZyBhIGRvdWJsZSAtPiBk b3VibGUgdHJhbnNmZXIgZnVuY3Rpb24gdGhhdCBwZXJmb3Jtcwo+ICsgKiBhbiBFT1RGIHRyYW5z ZmVyIGludmVyc2lvbi4gVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGxpbmVhciBsaWdodC4KPiArICov Cj4gK3R5cGVkZWYgZG91YmxlICgqYXZfY3NwX3RyY19mdW5jdGlvbikoZG91YmxlKTsKPiArCj4g IC8qKgo+ICAgKiBSZXRyaWV2ZXMgdGhlIEx1bWEgY29lZmZpY2llbnRzIG5lY2Vzc2FyeSB0byBj b25zdHJ1Y3QgYSBjb252ZXJzaW9uIG1hdHJpeAo+ICAgKiBmcm9tIGFuIGVudW0gY29uc3RhbnQg ZGVzY3JpYmluZyB0aGUgY29sb3JzcGFjZS4KPiBAQCAtMTA0LDYgKzExNCwzNSBAQCBjb25zdCBB VkNvbG9yUHJpbWFyaWVzRGVzYyAqYXZfY3NwX3ByaW1hcmllc19kZXNjX2Zyb21faWQoZW51bSBB VkNvbG9yUHJpbWFyaWVzCj4gICAqLwo+ICBlbnVtIEFWQ29sb3JQcmltYXJpZXMgYXZfY3NwX3By aW1hcmllc19pZF9mcm9tX2Rlc2MoY29uc3QgQVZDb2xvclByaW1hcmllc0Rlc2MgKnBybSk7Cj4g Cj4gKy8qKgo+ICsgKiBEZXRlcm1pbmUgYSBzdWl0YWJsZSAnZ2FtbWEnIHZhbHVlIHRvIG1hdGNo IHRoZSBzdXBwbGllZAo+ICsgKiBBVkNvbG9yVHJhbnNmZXJDaGFyYWN0ZXJpc3RpYy4KPiArICoK PiArICogU2VlIEFwcGxlIFRlY2huaWNhbCBOb3RlIFROMjI1NyAoaHR0cHM6Ly9kZXZlbG9wZXIu YXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIyNTcvX2luZGV4Lmh0bWwpCj4gKyAq Cj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZ2FtbWEgZXhwb25lbnQgZm9yIHRoZSBP RVRGLiBGb3IgZXhhbXBsZSwgc1JHQiBpcyBhcHByb3hpbWF0ZWQKPiArICogYnkgZ2FtbWEgMi4y LCBub3QgYnkgZ2FtbWEgMC40NTQ1NS4KPiArICoKPiArICogQHJldHVybiBXaWxsIHJldHVybiBh biBhcHByb3hpbWF0aW9uIHRvIHRoZSBzaW1wbGUgZ2FtbWEgZnVuY3Rpb24gbWF0Y2hpbmcKPiAr ICogICAgICAgICB0aGUgc3VwcGxpZWQgVHJhbnNmZXIgQ2hhcmFjdGVyaXN0aWMsIFdpbGwgcmV0 dXJuIDAuMCBmb3IgYW55Cj4gKyAqICAgICAgICAgd2UgY2Fubm90IHJlYXNvbmFibHkgbWF0Y2gg YWdhaW5zdC4KPiArICovCj4gK2RvdWJsZSBhdl9jc3BfYXBwcm94aW1hdGVfdHJjX2dhbW1hKGVu dW0gQVZDb2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdHJjKTsKPiArCj4gKy8qKgo+ICsgKiBE ZXRlcm1pbmUgdGhlIGZ1bmN0aW9uIG5lZWRlZCB0byBhcHBseSB0aGUgZ2l2ZW4KPiArICogQVZD b2xvclRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdG8gbGluZWFyIGlucHV0Lgo+ICsgKgo+ICsgKiBU aGUgZnVuY3Rpb24gcmV0dXJuZWQgc2hvdWxkIGV4cGVjdCBhIG5vbWluYWwgZG9tYWluIGFuZCBy YW5nZSBvZiBbMC4wLTEuMF0KPiArICogdmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSBtYXli ZSB2YWxpZCBkZXBlbmRpbmcgb24gdGhlIGNob3Nlbgo+ICsgKiBjaGFyYWN0ZXJpc3RpYyBmdW5j dGlvbi4KPiArICoKPiArICogQHJldHVybiBXaWxsIHJldHVybiBwb2ludGVyIHRvIHRoZSBmdW5j dGlvbiBtYXRjaGluZyB0aGUKPiArICogICAgICAgICBzdXBwbGllZCBUcmFuc2ZlciBDaGFyYWN0 ZXJpc3RpYy4gSWYgdW5zcGVjaWZpZWQgd2lsbAo+ICsgKiAgICAgICAgIHJldHVybiBOVUxMOgo+ ICsgKi8KPiArYXZfY3NwX3RyY19mdW5jdGlvbiBhdl9jc3BfdHJjX2Z1bmNfZnJvbV9pZChlbnVt IEFWQ29sb3JUcmFuc2ZlckNoYXJhY3RlcmlzdGljIHRyYyk7Cj4gKwo+ICAvKioKPiAgICogQH0K PiAgICovCj4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC90ZXN0cy9jb2xvcl91dGlscy5jIGIvbGli YXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMKPiBpbmRleCA0YmRjNTUwMzMwLi45NWZiM2MxZDU2 IDEwMDY0NAo+IC0tLSBhL2xpYmF2dXRpbC90ZXN0cy9jb2xvcl91dGlscy5jCj4gKysrIGIvbGli YXZ1dGlsL3Rlc3RzL2NvbG9yX3V0aWxzLmMKPiBAQCAtMTksNyArMTksNyBAQAo+ICAgKi8KPiAK PiAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvY29sb3JfdXRpbHMu YyIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jc3AuaCIKPiAgI2luY2x1ZGUgImxpYmF2dXRpbC9t YWNyb3MuaCIKPiAKPiAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiBAQCAtMzIs NyArMzIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgIH07Cj4gCj4g ICAgZm9yKGkgPSAwOyBpIDwgQVZDT0xfVFJDX05COyBpKyspIHsKPiAtICAgICAgYXZwcml2X3Ry Y19mdW5jdGlvbiBmdW5jID0gYXZwcml2X2dldF90cmNfZnVuY3Rpb25fZnJvbV90cmMoaSk7Cj4g KyAgICAgIGF2X2NzcF90cmNfZnVuY3Rpb24gZnVuYyA9IGF2X2NzcF90cmNfZnVuY19mcm9tX2lk KGkpOwo+ICAgICAgICBmb3IoaiA9IDA7IGogPCBGRl9BUlJBWV9FTEVNUyh0ZXN0X2RhdGEpOyBq KyspIHsKPiAgICAgICAgICAgIGlmKGZ1bmMgIT0gTlVMTCkgewo+ICAgICAgICAgICAgICAgIGRv dWJsZSByZXN1bHQgPSBmdW5jKHRlc3RfZGF0YVtqXSk7Cj4gLS0KPiAyLjM5LjEKPiAKPiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZl bCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVn Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+IAo+IFRvIHVuc3Vic2NyaWJlLCB2 aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==