From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 4CD554B963 for ; Mon, 26 May 2025 11:36:18 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id EE4E568D545; Mon, 26 May 2025 14:36:14 +0300 (EEST) Received: from mail-vk1-f170.google.com (mail-vk1-f170.google.com [209.85.221.170]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 5B79968CF7B for ; Mon, 26 May 2025 14:36:08 +0300 (EEST) Received: by mail-vk1-f170.google.com with SMTP id 71dfb90a1353d-52b2290e28eso290163e0c.3 for ; Mon, 26 May 2025 04:36:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748259366; x=1748864166; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=oRbKszD2hrVJlEHIkW8x2bp5HrlKseUueFffKA5CwJ4=; b=abReer34IUBAQqH+SmGGTO7Sga7D8idavKqhxX7CXmlXsJYY/jn8YbAPpPjTK6dJV9 E3u5k09PkPrDOC2Krj+N1U6DJ/BcSxViM5jIYBOSG0v54CEgIDWjMn45Hev7yLIssFq6 lUdDLV2yd+QnOhflCxUz6LOyDPLaCiAFk/SGAdh6Fm/3EQSD73cwn7j9OiO792oClJ4J vkqS7rI76gIckgwKbKig7bTRQ3uellQ4c6QenB3ex5E8snS7cbB7bnlZm7XaKrDLAVxd OCsHX4urWe+vSP7tjk+dsruAqMlwlhsoA1JojRvayw3mORwNeft/vLMRixcvMj7yTgKp SvQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748259366; x=1748864166; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oRbKszD2hrVJlEHIkW8x2bp5HrlKseUueFffKA5CwJ4=; b=CIP6Wn56nfzozTBUP+3TIEYGAq6KVqCFMlBDskLOs8Gd8Yft/QM74PifEQecw7If1f Z6ZFfaetZbn4hPaJvUT5XwV5UUITSBaIb00LF3ZiA9+SPm06eEq4M1hcOfRY9cDcU4Pa 7/VRlSTEqKe343g3CM76yriSP6xzIkov0qLRvVJDwDVT+0jpQWtrFIVoRGUjgRdGuvyh sPTQxmi6DxHWFrLfTpJbmN7Ztrjhl3NunECB+/3PPAJkuQfhZyjJ8CE8pfmgC4iJ5Ug0 IdQhy8mZI4Q2Fs9XS+aCW5E18q4Qp4qM0+GsTJHdXy5BzXFbJocdhyTpF3kyMPgQY6cu JXag== X-Gm-Message-State: AOJu0YyHUQR5sPQ4EWHQmOmMtj19Zn/8hKc7/GamK1hn3qPFHS7rFh5n Mfa75o+hdD3lwVA2HmHEbYN2heGPMZw2GF1ivU2SDPUFhXQRrvHEgBpy/x2PinAlqm4p/lO34rE nvcB1RDWPP5ujUaLp2iKVdgyUtY4VwOWPcU/M X-Gm-Gg: ASbGncvP0LDyeBQiI4G4/QbQ2xuxCi4e5KL0ptzChWOXtBycDDJTPA+33Jfk2Z+V3Sx CazagQIvZ7ICbEn23pDCz/tslp6qAs2sxNjOkLD5u5uK+kuSOuOUXWoLGN01WyUbsgdQoQBr7+N gvtnvYdbny5N7HGo3I3P8yeJ26bF9IrQ83KixBXfGy+uQVI9F/9o1LxKCYzMIJhqD4HQ== X-Google-Smtp-Source: AGHT+IEbyFZYcYWLgTRvUhkn8dYeaqtK4iW8okIWaZxYwxglxUNnHYecBiDGDaW4t170du6e+/AeqeEeffRyDJ/Fm4g= X-Received: by 2002:a05:6122:2189:b0:526:2210:5b64 with SMTP id 71dfb90a1353d-52f2c58c9e7mr5850724e0c.9.1748259366243; Mon, 26 May 2025 04:36:06 -0700 (PDT) MIME-Version: 1.0 References: <20250523215814.365246-1-f1k2faeez@gmail.com> In-Reply-To: <20250523215814.365246-1-f1k2faeez@gmail.com> From: faeez kadiri Date: Mon, 26 May 2025 17:05:54 +0530 X-Gm-Features: AX0GCFtcx0HhsN_Q_nmkCoLgNNulcbQSByrJuqFJcadz41KBg9ndvGI_GoB3IY0 Message-ID: To: ffmpeg-devel@ffmpeg.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add CUDA stack filters (hstack_cuda, vstack_cuda, xstack_cuda) 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: SGkgYWxsLAoKRnJpZW5kbHkgcGluZyBvbiB0aGUgcGF0Y2ggYmVsb3cgKHNlbnQgMjMgTWF5LCBs aW5rIGluIFBhdGNod29yazoKaHR0cHM6Ly9wYXRjaHdvcmsuZmZtcGVnLm9yZy9wcm9qZWN0L2Zm bXBlZy9wYXRjaC8yMDI1MDUyMzIxNTgxNC4zNjUyNDYtMS1mMWsyZmFlZXpAZ21haWwuY29tLwop LgoKUGF0Y2ggc3VtbWFyeQotLS0tLS0tLS0tLS0tCiogQWRkcyBhIENVREEgaW1wbGVtZW50YXRp b24gb2YgdGhlIGV4aXN0aW5nIHN0YWNrXyogZmlsdGVyIGZhbWlseQoocGFyYWxsZWxzIHN0YWNr X3FzdiAvIHN0YWNrX3ZhYXBpKS4KKiBTdXBwb3J0cyB1cCB0byAxNiBpbnB1dHMgYW5kIGJvdGgg aG9yaXpvbnRhbC92ZXJ0aWNhbCBsYXlvdXRzLgoKSWYgYW55dGhpbmcgbmVlZHMgYWRqdXN0bWVu dCAoY29kaW5nLXN0eWxlLCBmYXRlIG5hbWluZywgZXRjLikgcGxlYXNlIGxldAptZSBrbm93IGFu ZCBJ4oCZbGwgcmVzZW5kIGFuIHVwZGF0ZWQgdjIuCgpNYW55IHRoYW5rcyBmb3IgeW91ciB0aW1l IQoKQmVzdCByZWdhcmRzLApGYWVleiBLYWRpcmkKCk9uIFNhdCwgTWF5IDI0LCAyMDI1IGF0IDM6 MjjigK9BTSBGYWVleiBLYWRpcmkgPGYxazJmYWVlekBnbWFpbC5jb20+IHdyb3RlOgoKPiBBZGQg aGFyZHdhcmUtYWNjZWxlcmF0ZWQgc3RhY2sgZmlsdGVycyBmb3IgQ1VEQSB0aGF0IHByb3ZpZGUg ZXF1aXZhbGVudAo+IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHNvZnR3YXJlIHN0YWNrIGZpbHRlcnMg YnV0IHdpdGggR1BVIGFjY2VsZXJhdGlvbi4KPgo+IEZlYXR1cmVzOgo+IC0gU3VwcG9ydCBmb3Ig aHN0YWNrLCB2c3RhY2ssIGFuZCB4c3RhY2sgb3BlcmF0aW9ucwo+IC0gQ29tcGF0aWJsZSBwaXhl bCBmb3JtYXRzIHN1Y2ggYXM6Cj4gICB5dXY0MjBwLCBudjEyLCB5dXY0NDRwLCBwMDEwbGUsIHAw MTZsZSwgeXV2NDQ0cDE2bGUsIHJnYjAsIGJncjAsIHJnYmEsCj4gYmdyYQo+IC0gRmlsbCBjb2xv ciBzdXBwb3J0IHdpdGggYXV0b21hdGljIFJHQiB0byBZVVYgY29udmVyc2lvbiBmb3IgWVVWIGZv cm1hdHMKPiAtIFByb3BlciBjaHJvbWEgc3Vic2FtcGxpbmcgaGFuZGxpbmcgZm9yIGFsbCBzdXBw b3J0ZWQgZm9ybWF0cwo+IC0gSW50ZWdyYXRpb24gd2l0aCBleGlzdGluZyBzdGFjayBmaWx0ZXIg aW5mcmFzdHJ1Y3R1cmUgdmlhCj4gc3RhY2tfaW50ZXJuYWwuaAo+Cj4gVGhlIGltcGxlbWVudGF0 aW9uIGZvbGxvd3MgdGhlIGVzdGFibGlzaGVkIENVREEgZmlsdGVyIHBhdHRlcm4gZnJvbQo+IHZm X3NjYWxlX2N1ZGEuYywgdXNpbmcgUFRYIG1vZHVsZXMgZm9yIGtlcm5lbCBleGVjdXRpb24gYW5k IHByb3Blcgo+IENVREEgY29udGV4dCBtYW5hZ2VtZW50LiBDb3B5IG9wZXJhdGlvbnMgaGFuZGxl IGZyYW1lIHBsYWNlbWVudCB3aGlsZQo+IGNvbG9yIG9wZXJhdGlvbnMgZmlsbCBiYWNrZ3JvdW5k IGFyZWFzIHdoZW4gdXNpbmcgZmlsbCBjb2xvcnMuCj4KPiBUaGlzIGVuYWJsZXMgZWZmaWNpZW50 IHZpZGVvIGNvbXBvc2l0aW9uIHdvcmtmbG93cyBlbnRpcmVseSBvbiBHUFUKPiB3aXRob3V0IENQ VS1HUFUgbWVtb3J5IHRyYW5zZmVycywgc2lnbmlmaWNhbnRseSBpbXByb3ZpbmcgcGVyZm9ybWFu Y2UKPiBmb3IgbXVsdGktaW5wdXQgdmlkZW8gcHJvY2Vzc2luZyBwaXBlbGluZXMuCj4KPiBFeGFt cGxlczoKPiAkIGZmbXBlZyAtaHdhY2NlbCBjdWRhIC1pIGlucHV0LmgyNjUgLWZpbHRlcl9jb21w bGV4Cj4gIlswOnZdWzA6dl1oc3RhY2tfY3VkYSIgLWM6diBoZXZjX252ZW5jIG91dC5oMjY1Cj4K PiAkIGZmbXBlZyBcCj4gICAtaHdhY2NlbCBjdWRhIC1pIGlucHV0MS5tcDQgXAo+ICAgLWh3YWNj ZWwgY3VkYSAtaSBpbnB1dDIubXA0IFwKPiAgIC1od2FjY2VsIGN1ZGEgLWkgaW5wdXQzLm1wNCBc Cj4gICAtaHdhY2NlbCBjdWRhIC1pIGlucHV0NC5tcDQgXAo+ICAgLWZpbHRlcl9jb21wbGV4Cj4g IlswOnZdaHd1cGxvYWRfY3VkYVswdl07WzE6dl1od3VwbG9hZF9jdWRhWzF2XTtbMjp2XWh3dXBs b2FkX2N1ZGFbMnZdO1szOnZdaHd1cGxvYWRfY3VkYVszdl07WzB2XVsxdl1bMnZdWzN2XXhzdGFj a19jdWRhPWlucHV0cz00OmZpbGw9YmxhY2s6bGF5b3V0PTBfMHx3MF8wfDBfaDB8dzBfaDAiCj4g XAo+ICAgLWM6diBoZXZjX252ZW5jIG91dC5tcDQKPgo+IFNpZ25lZC1vZmYtYnk6IEZhZWV6IEth ZGlyaSA8ZjFrMmZhZWV6QGdtYWlsLmNvbT4KPiAtLS0KPiAgQ2hhbmdlbG9nICAgICAgICAgICAg ICAgICAgICB8ICAgMSArCj4gIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ ICBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgICAgIHwgIDc4ICsrKysrCj4gIGxpYmF2ZmlsdGVy L01ha2VmaWxlICAgICAgICAgfCAgIDMgKwo+ICBsaWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgICAg IHwgICAzICsKPiAgbGliYXZmaWx0ZXIvdmZfc3RhY2tfY3VkYS5jICB8IDU4OSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdmZpbHRlci92Zl9zdGFja19jdWRhLmN1 IHwgMzg5ICsrKysrKysrKysrKysrKysrKysrKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgMTA2OSBp bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92Zl9zdGFja19j dWRhLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX3N0YWNrX2N1ZGEuY3UK Pgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKPiBpbmRleCA0MjE3NDQ5NDM4 Li4wZGVjMzQ0M2Q0IDEwMDY0NAo+IC0tLSBhL0NoYW5nZWxvZwo+ICsrKyBiL0NoYW5nZWxvZwo+ IEBAIC0xOCw2ICsxOCw3IEBAIHZlcnNpb24gPG5leHQ+Ogo+ICAtIEFQViBlbmNvZGluZyBzdXBw b3J0IHRocm91Z2ggYSBsaWJvcGVuYXB2IHdyYXBwZXIKPiAgLSBWVkMgZGVjb2RlciBzdXBwb3J0 cyBhbGwgY29udGVudCBvZiBTQ0MgKFNjcmVlbiBDb250ZW50IENvZGluZyk6Cj4gICAgSUJDIChJ bnRlciBCbG9jayBDb3B5KSwgUGFsZXR0ZSBNb2RlIGFuZCBBQ1QgKEFkYXB0aXZlIENvbG9yIFRy YW5zZm9ybQo+ICstIGhzdGFja19jdWRhLCB2c3RhY2tfY3VkYSBhbmQgeHN0YWNrX2N1ZGEgZmls dGVycwo+Cj4KPiAgdmVyc2lvbiA3LjE6Cj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZp Z3VyZQo+IGluZGV4IDM3MzBiMDUyNGMuLjVjMmQ2ZTEzMmQgMTAwNzU1Cj4gLS0tIGEvY29uZmln dXJlCj4gKysrIGIvY29uZmlndXJlCj4gQEAgLTQwMzMsNiArNDAzMywxMiBAQCB4ZmFkZV92dWxr YW5fZmlsdGVyX2RlcHM9InZ1bGthbiBzcGlydl9jb21waWxlciIKPiAgeWFkaWZfY3VkYV9maWx0 ZXJfZGVwcz0iZmZudmNvZGVjIgo+ICB5YWRpZl9jdWRhX2ZpbHRlcl9kZXBzX2FueT0iY3VkYV9u dmNjIGN1ZGFfbGx2bSIKPiAgeWFkaWZfdmlkZW90b29sYm94X2ZpbHRlcl9kZXBzPSJtZXRhbCBj b3JldmlkZW8gdmlkZW90b29sYm94Igo+ICtoc3RhY2tfY3VkYV9maWx0ZXJfZGVwcz0iZmZudmNv ZGVjIgo+ICtoc3RhY2tfY3VkYV9maWx0ZXJfZGVwc19hbnk9ImN1ZGFfbnZjYyBjdWRhX2xsdm0i Cj4gK3ZzdGFja19jdWRhX2ZpbHRlcl9kZXBzPSJmZm52Y29kZWMiCj4gK3ZzdGFja19jdWRhX2Zp bHRlcl9kZXBzX2FueT0iY3VkYV9udmNjIGN1ZGFfbGx2bSIKPiAreHN0YWNrX2N1ZGFfZmlsdGVy X2RlcHM9ImZmbnZjb2RlYyIKPiAreHN0YWNrX2N1ZGFfZmlsdGVyX2RlcHNfYW55PSJjdWRhX252 Y2MgY3VkYV9sbHZtIgo+ICBoc3RhY2tfdmFhcGlfZmlsdGVyX2RlcHM9InZhYXBpXzEiCj4gIHZz dGFja192YWFwaV9maWx0ZXJfZGVwcz0idmFhcGlfMSIKPiAgeHN0YWNrX3ZhYXBpX2ZpbHRlcl9k ZXBzPSJ2YWFwaV8xIgo+IGRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRl cnMudGV4aQo+IGluZGV4IDZkMmRmMDc1MDguLjFjOWFmYWM5ZWIgMTAwNjQ0Cj4gLS0tIGEvZG9j L2ZpbHRlcnMudGV4aQo+ICsrKyBiL2RvYy9maWx0ZXJzLnRleGkKPiBAQCAtMjY4NTAsNiArMjY4 NTAsODQgQEAgT25seSBkZWludGVybGFjZSBmcmFtZXMgbWFya2VkIGFzIGludGVybGFjZWQuCj4g IFRoZSBkZWZhdWx0IHZhbHVlIGlzIEBjb2Rle2FsbH0uCj4gIEBlbmQgdGFibGUKPgo+ICtAc2Vj dGlvbiBoc3RhY2tfY3VkYQo+ICtTdGFjayBpbnB1dCB2aWRlb3MgaG9yaXpvbnRhbGx5Lgo+ICsK PiArVGhpcyBpcyB0aGUgQ1VEQSB2YXJpYW50IG9mIHRoZSBAcmVme3ZzdGFja30gZmlsdGVyLCBl YWNoIGlucHV0IHN0cmVhbSBtYXkKPiAraGF2ZSBkaWZmZXJlbnQgd2lkdGgsIHRoaXMgZmlsdGVy IHdpbGwgc2NhbGUgZG93bi91cCBlYWNoIGlucHV0IHN0cmVhbQo+IHdoaWxlCj4gK2tlZXBpbmcg dGhlIG9yaWduYWwgYXNwZWN0Lgo+ICsKPiArSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlv bnM6Cj4gKwo+ICtAdGFibGUgQG9wdGlvbgo+ICtAaXRlbSBpbnB1dHMKPiArU2VlIEByZWZ7aHN0 YWNrfS4KPiArCj4gK0BpdGVtIHNob3J0ZXN0Cj4gK1NlZSBAcmVme2hzdGFja30uCj4gKwo+ICtA aXRlbSBoZWlnaHQKPiArU2V0IGhlaWdodCBvZiBvdXRwdXQuIElmIHNldCB0byAwLCB0aGlzIGZp bHRlciB3aWxsIHNldCBoZWlnaHQgb2Ygb3V0cHV0Cj4gdG8KPiAraGVpZ2h0IG9mIHRoZSBmaXJz dCBpbnB1dCBzdHJlYW0uIERlZmF1bHQgdmFsdWUgaXMgMC4KPiArQGVuZCB0YWJsZQo+ICsKPiAr QHNlY3Rpb24gdnN0YWNrX2N1ZGEKPiArU3RhY2sgaW5wdXQgdmlkZW9zIHZlcnRpY2FsbHkuCj4g Kwo+ICtUaGlzIGlzIHRoZSBDVURBIHZhcmlhbnQgb2YgdGhlIEByZWZ7dnN0YWNrfSBmaWx0ZXIs IGVhY2ggaW5wdXQgc3RyZWFtIG1heQo+ICtoYXZlIGRpZmZlcmVudCB3aWR0aCwgdGhpcyBmaWx0 ZXIgd2lsbCBzY2FsZSBkb3duL3VwIGVhY2ggaW5wdXQgc3RyZWFtCj4gd2hpbGUKPiAra2VlcGlu ZyB0aGUgb3JpZ25hbCBhc3BlY3QuCj4gKwo+ICtJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0 aW9uczoKPiArCj4gK0B0YWJsZSBAb3B0aW9uCj4gK0BpdGVtIGlucHV0cwo+ICtTZWUgQHJlZnt2 c3RhY2t9Lgo+ICsKPiArQGl0ZW0gc2hvcnRlc3QKPiArU2VlIEByZWZ7dnN0YWNrfS4KPiArCj4g K0BpdGVtIHdpZHRoCj4gK1NldCB3aWR0aCBvZiBvdXRwdXQuIElmIHNldCB0byAwLCB0aGlzIGZp bHRlciB3aWxsIHNldCB3aWR0aCBvZiBvdXRwdXQgdG8KPiArd2lkdGggb2YgdGhlIGZpcnN0IGlu cHV0IHN0cmVhbS4gRGVmYXVsdCB2YWx1ZSBpcyAwLgo+ICtAZW5kIHRhYmxlCj4gKwo+ICtAc2Vj dGlvbiB4c3RhY2tfY3VkYQo+ICtTdGFjayB2aWRlbyBpbnB1dHMgaW50byBjdXN0b20gbGF5b3V0 Lgo+ICsKPiArVGhpcyBpcyB0aGUgQ1VEQSB2YXJpYW50IG9mIHRoZSBAcmVme3hzdGFja30gZmls dGVyLCAgZWFjaCBpbnB1dCBzdHJlYW0KPiBtYXkKPiAraGF2ZSBkaWZmZXJlbnQgc2l6ZSwgdGhp cyBmaWx0ZXIgd2lsbCBzY2FsZSBkb3duL3VwIGVhY2ggaW5wdXQgc3RyZWFtIHRvCj4gdGhlCj4g K2dpdmVuIG91dHB1dCBzaXplLCBvciB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgaW5wdXQgc3RyZWFt Lgo+ICsKPiArSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Cj4gKwo+ICtAdGFibGUg QG9wdGlvbgo+ICtAaXRlbSBpbnB1dHMKPiArU2VlIEByZWZ7eHN0YWNrfS4KPiArCj4gK0BpdGVt IHNob3J0ZXN0Cj4gK1NlZSBAcmVme3hzdGFja30uCj4gKwo+ICtAaXRlbSBsYXlvdXQKPiArU2Vl IEByZWZ7eHN0YWNrfS4KPiArTW9yZW92ZXIsIHRoaXMgcGVybWl0cyB0aGUgdXNlciB0byBzdXBw bHkgb3V0cHV0IHNpemUgZm9yIGVhY2ggaW5wdXQKPiBzdHJlYW0uCj4gK0BleGFtcGxlCj4KPiAr eHN0YWNrX2N1ZGE9aW5wdXRzPTQ6bGF5b3V0PTBfMF8xOTIweDEwODB8MF9oMF8xOTIweDEwODB8 dzBfMF8xOTIweDEwODB8dzBfaDBfMTkyMHgxMDgwCj4gK0BlbmQgZXhhbXBsZQo+ICsKPiArQGl0 ZW0gZ3JpZAo+ICtTZWUgQHJlZnt4c3RhY2t9Lgo+ICsKPiArQGl0ZW0gZ3JpZF90aWxlX3NpemUK PiArU2V0IG91dHB1dCBzaXplIGZvciBlYWNoIGlucHV0IHN0cmVhbSB3aGVuIEBvcHRpb257Z3Jp ZH0gaXMgc2V0LiBJZiB0aGlzCj4gb3B0aW9uCj4gK2lzIG5vdCBzZXQsIHRoaXMgZmlsdGVyIHdp bGwgc2V0IG91dHB1dCBzaXplIGJ5IGRlZmF1bHQgdG8gdGhlIHNpemUgb2YgdGhlCj4gK2ZpcnN0 IGlucHV0IHN0cmVhbS4gRm9yIHRoZSBzeW50YXggb2YgdGhpcyBvcHRpb24sIGNoZWNrIHRoZQo+ ICtAcmVme3ZpZGVvIHNpemUgc3ludGF4LCwiVmlkZW8gc2l6ZSIgc2VjdGlvbiBpbiB0aGUgZmZt cGVnLXV0aWxzCj4gbWFudWFsLGZmbXBlZy11dGlsc30uCj4gKwo+ICtAaXRlbSBmaWxsCj4gK1Nl ZSBAcmVme3hzdGFja30uCj4gK0BlbmQgdGFibGUKPiArCj4gIEBhbmNob3J7Q1VEQSBOUFB9Cj4g IEBzZWN0aW9uIENVREEgTlBQCj4gIEJlbG93IGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJl bnRseSBhdmFpbGFibGUgTlZJRElBIFBlcmZvcm1hbmNlCj4gUHJpbWl0aXZlcyAobGlibnBwKSB2 aWRlbyBmaWx0ZXJzLgo+IGRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2 ZmlsdGVyL01ha2VmaWxlCj4gaW5kZXggMGVmZmU0MTI3Zi4uYWQ4NzZjY2Q1MyAxMDA2NDQKPiAt LS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCj4g QEAgLTU4Myw2ICs1ODMsOSBAQCBPQkpTLSQoQ09ORklHX1lBRVBCTFVSX0ZJTFRFUikgICAgICAg ICAgICAgICArPQo+IHZmX3lhZXBibHVyLm8KPiAgT0JKUy0kKENPTkZJR19aTVFfRklMVEVSKSAg ICAgICAgICAgICAgICAgICAgKz0gZl96bXEubwo+ICBPQkpTLSQoQ09ORklHX1pPT01QQU5fRklM VEVSKSAgICAgICAgICAgICAgICArPSB2Zl96b29tcGFuLm8KPiAgT0JKUy0kKENPTkZJR19aU0NB TEVfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfenNjYWxlLm8KPiArT0JKUy0kKENPTkZJ R19IU1RBQ0tfQ1VEQV9GSUxURVIpICAgICAgICAgICAgKz0gdmZfc3RhY2tfY3VkYS5vCj4gZnJh bWVzeW5jLm8gdmZfc3RhY2tfY3VkYS5wdHgubyBjdWRhL2xvYWRfaGVscGVyLm8KPiArT0JKUy0k KENPTkZJR19WU1RBQ0tfQ1VEQV9GSUxURVIpICAgICAgICAgICAgKz0gdmZfc3RhY2tfY3VkYS5v Cj4gZnJhbWVzeW5jLm8gdmZfc3RhY2tfY3VkYS5wdHgubyBjdWRhL2xvYWRfaGVscGVyLm8KPiAr T0JKUy0kKENPTkZJR19YU1RBQ0tfQ1VEQV9GSUxURVIpICAgICAgICAgICAgKz0gdmZfc3RhY2tf Y3VkYS5vCj4gZnJhbWVzeW5jLm8gdmZfc3RhY2tfY3VkYS5wdHgubyBjdWRhL2xvYWRfaGVscGVy Lm8KPiAgT0JKUy0kKENPTkZJR19IU1RBQ0tfVkFBUElfRklMVEVSKSAgICAgICAgICAgKz0gdmZf c3RhY2tfdmFhcGkubwo+IGZyYW1lc3luYy5vIHZhYXBpX3ZwcC5vCj4gIE9CSlMtJChDT05GSUdf VlNUQUNLX1ZBQVBJX0ZJTFRFUikgICAgICAgICAgICs9IHZmX3N0YWNrX3ZhYXBpLm8KPiBmcmFt ZXN5bmMubyB2YWFwaV92cHAubwo+ICBPQkpTLSQoQ09ORklHX1hTVEFDS19WQUFQSV9GSUxURVIp ICAgICAgICAgICArPSB2Zl9zdGFja192YWFwaS5vCj4gZnJhbWVzeW5jLm8gdmFhcGlfdnBwLm8K PiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxs ZmlsdGVycy5jCj4gaW5kZXggNWVhMzNjZGYwMS4uODlhN2ZiOTI3NyAxMDA2NDQKPiAtLS0gYS9s aWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKPiArKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMK PiBAQCAtNTQ1LDYgKzU0NSw5IEBAIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl95YWVwYmx1 cjsKPiAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3ptcTsKPiAgZXh0ZXJuIGNvbnN0IEZG RmlsdGVyIGZmX3ZmX3pvb21wYW47Cj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl96c2Nh bGU7Cj4gK2V4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9oc3RhY2tfY3VkYTsKPiArZXh0ZXJu IGNvbnN0IEZGRmlsdGVyIGZmX3ZmX3ZzdGFja19jdWRhOwo+ICtleHRlcm4gY29uc3QgRkZGaWx0 ZXIgZmZfdmZfeHN0YWNrX2N1ZGE7Cj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl9oc3Rh Y2tfdmFhcGk7Cj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl92c3RhY2tfdmFhcGk7Cj4g IGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl94c3RhY2tfdmFhcGk7Cj4gZGlmZiAtLWdpdCBh L2xpYmF2ZmlsdGVyL3ZmX3N0YWNrX2N1ZGEuYyBiL2xpYmF2ZmlsdGVyL3ZmX3N0YWNrX2N1ZGEu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uMDAyNjAyYjJiZgo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJhdmZpbHRlci92Zl9zdGFja19jdWRhLmMKPiBAQCAt MCwwICsxLDU4OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIEZhZWV6IEthZGly aSA8IGYxazJmYWVleiBhdCBnbWFpbCBkb3QgY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiAi U29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1YmxpY2Vu c2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZQo+IGluY2x1ZGVkIGluCj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPiBFWFBSRVNTIE9SCj4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiBN RVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVAo+IFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S Cj4gT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgo+ICsgKiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIEBmaWxlCj4gKyAq IEhhcmR3YXJlIGFjY2VsZXJhdGVkIGhzdGFjaywgdnN0YWNrIGFuZCB4c3RhY2sgZmlsdGVycyBi YXNlZCBvbiBDVURBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImNvbmZpZ19jb21wb25lbnRzLmgi Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L2NvbW1vbi5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiArI2luY2x1ZGUg ImxpYmF2dXRpbC9ldmFsLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0LmgiCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2N1ZGFfaW50ZXJuYWwuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9jdWRhX2NoZWNrLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJp bmcuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL2ltZ3V0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbWF0aGVtYXRpY3MuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9wYXJzZXV0aWxzLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0 aWwvY29sb3JzcGFjZS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICsKPiArI2lu Y2x1ZGUgImZpbHRlcnMuaCIKPiArI2luY2x1ZGUgImZvcm1hdHMuaCIKPiArI2luY2x1ZGUgInZp ZGVvLmgiCj4gKwo+ICsjaW5jbHVkZSAiZnJhbWVzeW5jLmgiCj4gKyNpbmNsdWRlICJjdWRhL2xv YWRfaGVscGVyLmgiCj4gKwo+ICtzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHN1cHBv cnRlZF9mb3JtYXRzW10gPSB7Cj4gKyAgICBBVl9QSVhfRk1UX1lVVjQyMFAsCj4gKyAgICBBVl9Q SVhfRk1UX05WMTIsCj4gKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAsCj4gKyAgICBBVl9QSVhfRk1U X1AwMTAsCj4gKyAgICBBVl9QSVhfRk1UX1AwMTYsCj4gKyAgICBBVl9QSVhfRk1UX1lVVjQ0NFAx NiwKPiArICAgIEFWX1BJWF9GTVRfMFJHQjMyLAo+ICsgICAgQVZfUElYX0ZNVF8wQkdSMzIsCj4g KyAgICBBVl9QSVhfRk1UX1JHQjMyLAo+ICsgICAgQVZfUElYX0ZNVF9CR1IzMiwKPiArfTsKPiAr Cj4gKyNkZWZpbmUgRElWX1VQKGEsIGIpICggKChhKSArIChiKSAtIDEpIC8gKGIpICkKPiArI2Rl ZmluZSBCTE9DS1ggMzIKPiArI2RlZmluZSBCTE9DS1kgMTYKPiArCj4gKyNkZWZpbmUgQ0hFQ0tf Q1UoeCkgRkZfQ1VEQV9DSEVDS19ETChjdHgsIHMtPmh3Y3R4LT5pbnRlcm5hbC0+Y3VkYV9kbCwg eCkKPiArCj4gK3R5cGVkZWYgc3RydWN0IENVREFTdGFja0NvbnRleHQgewo+ICsgICAgQVZDVURB RGV2aWNlQ29udGV4dCAqaHdjdHg7Cj4gKyAgICBDdWRhRnVuY3Rpb25zICpjdWRhX2RsOwo+ICsK PiArICAgIENVY29udGV4dCAgIGN1X2N0eDsKPiArICAgIENVbW9kdWxlICAgIGN1X21vZHVsZTsK PiArICAgIENVc3RyZWFtICAgIGN1X3N0cmVhbTsKPiArCj4gKyAgICAvLyBGb3IgY29weSBvcGVy YXRpb25zCj4gKyAgICBDVWZ1bmN0aW9uICBjdV9mdW5jX2NvcHk7Cj4gKyAgICBDVWZ1bmN0aW9u ICBjdV9mdW5jX2NvcHlfdXY7Cj4gKwo+ICsgICAgLy8gRm9yIGNvbG9yIG9wZXJhdGlvbnMKPiAr ICAgIENVZnVuY3Rpb24gIGN1X2Z1bmNfY29sb3I7Cj4gKyAgICBDVWZ1bmN0aW9uICBjdV9mdW5j X2NvbG9yX3V2Owo+ICsKPiArICAgIGVudW0gQVZQaXhlbEZvcm1hdCBpbl9mbXQ7Cj4gKyAgICBj b25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmluX2Rlc2M7Cj4gKyAgICBpbnQgaW5fcGxhbmVzOwo+ ICsgICAgaW50IGluX3BsYW5lX2RlcHRoc1s0XTsKPiArICAgIGludCBpbl9wbGFuZV9jaGFubmVs c1s0XTsKPiArCj4gKyAgICB1aW50OF90IGZpbGxjb2xvcl9yZ2JhWzRdOwo+ICsgICAgdWludDhf dCBmaWxsY29sb3JfeXV2WzRdOwo+ICt9IENVREFTdGFja0NvbnRleHQ7Cj4gKwo+ICsjZGVmaW5l IEhTVEFDS19OQU1FICAgICAgICAgICAgICJoc3RhY2tfY3VkYSIKPiArI2RlZmluZSBWU1RBQ0tf TkFNRSAgICAgICAgICAgICAidnN0YWNrX2N1ZGEiCj4gKyNkZWZpbmUgWFNUQUNLX05BTUUgICAg ICAgICAgICAgInhzdGFja19jdWRhIgo+ICsjZGVmaW5lIEhXQ29udGV4dCAgICAgICAgICAgICAg IENVREFTdGFja0NvbnRleHQKPiArI2RlZmluZSBTdGFja0hXQ29udGV4dCAgICAgICAgICBTdGFj a0N1ZGFDb250ZXh0Cj4gKyNpbmNsdWRlICJzdGFja19pbnRlcm5hbC5oIgo+ICsKPiArdHlwZWRl ZiBzdHJ1Y3QgU3RhY2tDdWRhQ29udGV4dCB7Cj4gKyAgICBTdGFja0Jhc2VDb250ZXh0IGJhc2U7 Cj4gKyAgICBDVURBU3RhY2tDb250ZXh0IGN1ZGE7Cj4gK30gU3RhY2tDdWRhQ29udGV4dDsKPiAr Cj4gK3N0YXRpYyBpbnQgZm9ybWF0X2lzX3N1cHBvcnRlZChlbnVtIEFWUGl4ZWxGb3JtYXQgZm10 KQo+ICt7Cj4gKyAgICBpbnQgaTsKPiArCj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgRkZfQVJSQVlf RUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpOyBpKyspCj4gKyAgICAgICAgaWYgKHN1cHBvcnRlZF9m b3JtYXRzW2ldID09IGZtdCkKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmdiMnl1dihmbG9hdCByLCBmbG9hdCBnLCBmbG9h dCBiLCBpbnQgKnksIGludCAqdSwgaW50ICp2LAo+IGludCBkZXB0aCkKPiArewo+ICsgICAgKnkg PSAoKDAuMjEyNjAqMjE5LjAvMjU1LjApICogciArICgwLjcxNTIwKjIxOS4wLzI1NS4wKSAqIGcg Kwo+ICsgICAgICAgICAoMC4wNzIyMCoyMTkuMC8yNTUuMCkgKiBiKSAqICgoMSA8PCBkZXB0aCkg LSAxKTsKPiArICAgICp1ID0gKC0oMC4xMTQ1NyoyMjQuMC8yNTUuMCkgKiByIC0gKDAuMzg1NDMq MjI0LjAvMjU1LjApICogZyArCj4gKyAgICAgICAgICgwLjUwMDAwKjIyNC4wLzI1NS4wKSAqIGIg KyAwLjUpICogKCgxIDw8IGRlcHRoKSAtIDEpOwo+ICsgICAgKnYgPSAoKDAuNTAwMDAqMjI0LjAv MjU1LjApICogciAtICgwLjQ1NDE1KjIyNC4wLzI1NS4wKSAqIGcgLQo+ICsgICAgICAgICAoMC4w NDU4NSoyMjQuMC8yNTUuMCkgKiBiICsgMC41KSAqICgoMSA8PCBkZXB0aCkgLSAxKTsKPiArfQo+ ICsKPiArc3RhdGljIGF2X2NvbGQgaW50IGN1ZGFfc3RhY2tfbG9hZF9mdW5jdGlvbnMoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIGVudW0KPiBBVlBpeGVsRm9ybWF0IGZvcm1hdCkKPiArewo+ICsgICAg U3RhY2tDdWRhQ29udGV4dCAqc2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIENVREFTdGFja0NvbnRl eHQgKnMgPSAmc2N0eC0+Y3VkYTsKPiArICAgIENVY29udGV4dCBkdW1teSwgY3VkYV9jdHggPSBz LT5od2N0eC0+Y3VkYV9jdHg7Cj4gKyAgICBDdWRhRnVuY3Rpb25zICpjdSA9IHMtPmN1ZGFfZGw7 Cj4gKyAgICBpbnQgcmV0Owo+ICsgICAgY2hhciBidWZbMTI4XTsKPiArCj4gKyAgICBjb25zdCBj aGFyICpmbXRfbmFtZSA9IGF2X2dldF9waXhfZm10X25hbWUoZm9ybWF0KTsKPiArCj4gKyAgICBl eHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBmZl92Zl9zdGFja19jdWRhX3B0eF9kYXRhW107Cj4g KyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGZmX3ZmX3N0YWNrX2N1ZGFfcHR4X2xlbjsK PiArCj4gKyAgICByZXQgPSBDSEVDS19DVShjdS0+Y3VDdHhQdXNoQ3VycmVudChjdWRhX2N0eCkp Owo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBy ZXQgPSBmZl9jdWRhX2xvYWRfbW9kdWxlKGN0eCwgcy0+aHdjdHgsICZzLT5jdV9tb2R1bGUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmX3ZmX3N0YWNrX2N1ZGFfcHR4X2RhdGEs Cj4gZmZfdmZfc3RhY2tfY3VkYV9wdHhfbGVuKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAg ICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAvLyBMb2FkIGNvcHkgZnVuY3Rpb25zCj4gKyAgICBz bnByaW50ZihidWYsIHNpemVvZihidWYpLCAiU3RhY2tDb3B5XyVzXyVzIiwgZm10X25hbWUsIGZt dF9uYW1lKTsKPiArICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdU1vZHVsZUdldEZ1bmN0aW9uKCZz LT5jdV9mdW5jX2NvcHksCj4gcy0+Y3VfbW9kdWxlLCBidWYpKTsKPiArICAgIGlmIChyZXQgPCAw KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0ZBVEFMLCAiVW5zdXBwb3J0ZWQgZm9y bWF0IGZvciBjb3B5OiAlc1xuIiwKPiBmbXRfbmFtZSk7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJP UihFTk9TWVMpOwo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPiArCj4gKyAgICBzbnBy aW50ZihidWYsIHNpemVvZihidWYpLCAiU3RhY2tDb3B5XyVzXyVzX3V2IiwgZm10X25hbWUsIGZt dF9uYW1lKTsKPiArICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdU1vZHVsZUdldEZ1bmN0aW9uKCZz LT5jdV9mdW5jX2NvcHlfdXYsCj4gcy0+Y3VfbW9kdWxlLCBidWYpKTsKPiArICAgIGlmIChyZXQg PCAwKQo+ICsgICAgICAgIGdvdG8gZmFpbDsKPiArCj4gKyAgICAvLyBMb2FkIGNvbG9yIGZ1bmN0 aW9ucwo+ICsgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlNldENvbG9yXyVzIiwgZm10 X25hbWUpOwo+ICsgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1TW9kdWxlR2V0RnVuY3Rpb24oJnMt PmN1X2Z1bmNfY29sb3IsCj4gcy0+Y3VfbW9kdWxlLCBidWYpKTsKPiArICAgIGlmIChyZXQgPCAw KSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0ZBVEFMLCAiVW5zdXBwb3J0ZWQgZm9y bWF0IGZvciBjb2xvcjogJXNcbiIsCj4gZm10X25hbWUpOwo+ICsgICAgICAgIHJldCA9IEFWRVJS T1IoRU5PU1lTKTsKPiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc25w cmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlNldENvbG9yXyVzX3V2IiwgZm10X25hbWUpOwo+ICsg ICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1TW9kdWxlR2V0RnVuY3Rpb24oJnMtPmN1X2Z1bmNfY29s b3JfdXYsCj4gcy0+Y3VfbW9kdWxlLCBidWYpKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAg ICAgIGdvdG8gZmFpbDsKPiArCj4gK2ZhaWw6Cj4gKyAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BD dXJyZW50KCZkdW1teSkpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGF2 X2NvbGQgaW50IGN1ZGFfc3RhY2tfY29sb3Jfa2VybmVsKEFWRmlsdGVyQ29udGV4dCAqY3R4LAo+ IENVZnVuY3Rpb24gZnVuYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUg Km91dF9mcmFtZSwgY29uc3QgdWludDhfdCAqY29sb3IsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZHN0X3gsIGludCBkc3RfeSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBkc3Rfd2lkdGgsIGludCBkc3RfaGVpZ2h0LCBpbnQgZHN0X3BpdGNoKQo+ICt7Cj4gKyAg ICBTdGFja0N1ZGFDb250ZXh0ICpzY3R4ID0gY3R4LT5wcml2Owo+ICsgICAgQ1VEQVN0YWNrQ29u dGV4dCAqcyA9ICZzY3R4LT5jdWRhOwo+ICsgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRh X2RsOwo+ICsKPiArICAgIENVZGV2aWNlcHRyIGRzdF9kZXZwdHJbNF0gPSB7Cj4gKyAgICAgICAg KENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVswXSwgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ ZGF0YVsxXSwKPiArICAgICAgICAoQ1VkZXZpY2VwdHIpb3V0X2ZyYW1lLT5kYXRhWzJdLCAoQ1Vk ZXZpY2VwdHIpb3V0X2ZyYW1lLT5kYXRhWzNdCj4gKyAgICB9Owo+ICsKPiArICAgIHZvaWQgKmFy Z3NbXSA9IHsKPiArICAgICAgICAmZHN0X2RldnB0clswXSwgJmRzdF9kZXZwdHJbMV0sICZkc3Rf ZGV2cHRyWzJdLCAmZHN0X2RldnB0clszXSwKPiArICAgICAgICAmd2lkdGgsICZoZWlnaHQsICZk c3RfcGl0Y2gsCj4gKyAgICAgICAgJmRzdF94LCAmZHN0X3ksCj4gKyAgICAgICAgKHZvaWQgKikm Y29sb3JbMF0sICh2b2lkICopJmNvbG9yWzFdLCAodm9pZCAqKSZjb2xvclsyXSwgKHZvaWQKPiAq KSZjb2xvclszXSwKPiArICAgICAgICAmZHN0X3dpZHRoLCAmZHN0X2hlaWdodCwKPiArICAgIH07 Cj4gKwo+ICsgICAgcmV0dXJuIENIRUNLX0NVKGN1LT5jdUxhdW5jaEtlcm5lbChmdW5jLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElWX1VQKHdpZHRoLCBCTE9DS1gp LAo+IERJVl9VUChoZWlnaHQsIEJMT0NLWSksIDEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCTE9DS1gsIEJMT0NLWSwgMSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIHMtPmN1X3N0cmVhbSwgYXJncywgTlVMTCkpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgYXZfY29sZCBpbnQgY3VkYV9zdGFja19jb3B5X2tlcm5lbChBVkZpbHRlckNvbnRl eHQgKmN0eCwKPiBDVWZ1bmN0aW9uIGZ1bmMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDVXRleE9iamVjdCBzcmNfdGV4WzRdLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZGcmFtZSAqb3V0X2ZyYW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdF94 LCBpbnQgZHN0X3ksIGludCBkc3RfcGl0Y2gsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCkKPiArewo+ICsgICAgU3RhY2tDdWRhQ29u dGV4dCAqc2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIENVREFTdGFja0NvbnRleHQgKnMgPSAmc2N0 eC0+Y3VkYTsKPiArICAgIEN1ZGFGdW5jdGlvbnMgKmN1ID0gcy0+Y3VkYV9kbDsKPiArCj4gKyAg ICBDVWRldmljZXB0ciBkc3RfZGV2cHRyWzRdID0gewo+ICsgICAgICAgIChDVWRldmljZXB0cilv dXRfZnJhbWUtPmRhdGFbMF0sIChDVWRldmljZXB0cilvdXRfZnJhbWUtPmRhdGFbMV0sCj4gKyAg ICAgICAgKENVZGV2aWNlcHRyKW91dF9mcmFtZS0+ZGF0YVsyXSwgKENVZGV2aWNlcHRyKW91dF9m cmFtZS0+ZGF0YVszXQo+ICsgICAgfTsKPiArCj4gKyAgICB2b2lkICphcmdzW10gPSB7Cj4gKyAg ICAgICAgJnNyY190ZXhbMF0sICZzcmNfdGV4WzFdLCAmc3JjX3RleFsyXSwgJnNyY190ZXhbM10s Cj4gKyAgICAgICAgJmRzdF9kZXZwdHJbMF0sICZkc3RfZGV2cHRyWzFdLCAmZHN0X2RldnB0clsy XSwgJmRzdF9kZXZwdHJbM10sCj4gKyAgICAgICAgJndpZHRoLCAmaGVpZ2h0LCAmZHN0X3BpdGNo LAo+ICsgICAgICAgICZkc3RfeCwgJmRzdF95LAo+ICsgICAgICAgICZzcmNfd2lkdGgsICZzcmNf aGVpZ2h0LAo+ICsgICAgICAgICZvdXRfZnJhbWUtPndpZHRoLCAmb3V0X2ZyYW1lLT5oZWlnaHQK PiArICAgIH07Cj4gKwo+ICsgICAgcmV0dXJuIENIRUNLX0NVKGN1LT5jdUxhdW5jaEtlcm5lbChm dW5jLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElWX1VQKHdpZHRo LCBCTE9DS1gpLAo+IERJVl9VUChoZWlnaHQsIEJMT0NLWSksIDEsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCTE9DS1gsIEJMT0NLWSwgMSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHMtPmN1X3N0cmVhbSwgYXJncywgTlVMTCkpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGN1ZGFfc3RhY2tfY29sb3Jfb3AoQVZGaWx0ZXJDb250ZXh0 ICpjdHgsIFN0YWNrSXRlbVJlZ2lvbgo+ICpyZWdpb24sIEFWRnJhbWUgKm91dCwgY29uc3QgdWlu dDhfdCAqY29sb3IpIHsKPiArICAgIFN0YWNrQ3VkYUNvbnRleHQgKnNjdHggPSBjdHgtPnByaXY7 Cj4gKyAgICBDVURBU3RhY2tDb250ZXh0ICpzID0gJnNjdHgtPmN1ZGE7Cj4gKyAgICBDdWRhRnVu Y3Rpb25zICpjdSA9IHMtPmN1ZGFfZGw7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIENVY29u dGV4dCBkdW1teTsKPiArCj4gKyAgICAvLyBQdXNoIENVREEgY29udGV4dAo+ICsgICAgcmV0ID0g Q0hFQ0tfQ1UoY3UtPmN1Q3R4UHVzaEN1cnJlbnQocy0+aHdjdHgtPmN1ZGFfY3R4KSk7Cj4gKyAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIHJldCA9IGN1 ZGFfc3RhY2tfY29sb3Jfa2VybmVsKGN0eCwgcy0+Y3VfZnVuY19jb2xvciwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXQsIGNvbG9yLCByZWdpb24tPndpZHRoLCByZWdpb24t PmhlaWdodCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPngsIHJl Z2lvbi0+eSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQtPndpZHRoLCBv dXQtPmhlaWdodCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQtPmxpbmVz aXplWzBdKTsKPiArICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5nIGNvbG9yIG9wZXJhdGlvbjogJWRcbiIsCj4gcmV0KTsK PiArICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHMtPmluX3BsYW5l cyA+IDEpIHsKPiArICAgICAgICByZXQgPSBjdWRhX3N0YWNrX2NvbG9yX2tlcm5lbChjdHgsIHMt PmN1X2Z1bmNfY29sb3JfdXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG91dCwgY29sb3IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0NF SUxfUlNISUZUKHJlZ2lvbi0+d2lkdGgsCj4gcy0+aW5fZGVzYy0+bG9nMl9jaHJvbWFfdyksCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0NFSUxfUlNISUZUKHJlZ2lv bi0+aGVpZ2h0LAo+IHMtPmluX2Rlc2MtPmxvZzJfY2hyb21hX2gpLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVl9DRUlMX1JTSElGVChyZWdpb24tPngsCj4gcy0+aW5f ZGVzYy0+bG9nMl9jaHJvbWFfdyksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFWX0NFSUxfUlNISUZUKHJlZ2lvbi0+eSwKPiBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV9o KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT53aWR0aCwgb3V0 LT5oZWlnaHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC0+bGlu ZXNpemVbMV0pOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkdXJpbmcgY29sb3IgVVYgb3BlcmF0aW9uOgo+ICVk XG4iLCByZXQpOwo+ICsgICAgfQo+ICsKPiArZmFpbDoKPiArICAgIENIRUNLX0NVKGN1LT5jdUN0 eFBvcEN1cnJlbnQoJmR1bW15KSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGN1ZGFfc3RhY2tfY29weV9vcChBVkZpbHRlckNvbnRleHQgKmN0eCwgU3RhY2tJdGVt UmVnaW9uCj4gKnJlZ2lvbiwgQVZGcmFtZSAqaW4sIEFWRnJhbWUgKm91dCkgewo+ICsgICAgU3Rh Y2tDdWRhQ29udGV4dCAqc2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIENVREFTdGFja0NvbnRleHQg KnMgPSAmc2N0eC0+Y3VkYTsKPiArICAgIEN1ZGFGdW5jdGlvbnMgKmN1ID0gcy0+Y3VkYV9kbDsK PiArICAgIENVdGV4T2JqZWN0IHRleFs0XSA9IHsgMCwgMCwgMCwgMCB9Owo+ICsgICAgaW50IHJl dCA9IDA7Cj4gKyAgICBpbnQgaTsKPiArICAgIENVY29udGV4dCBkdW1teTsKPiArCj4gKyAgICAv LyBQdXNoIENVREEgY29udGV4dAo+ICsgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1Q3R4UHVzaEN1 cnJlbnQocy0+aHdjdHgtPmN1ZGFfY3R4KSk7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiArICAgICAg ICByZXR1cm4gcmV0Owo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBzLT5pbl9wbGFuZXM7IGkr Kykgewo+ICsgICAgICAgIENVREFfVEVYVFVSRV9ERVNDIHRleF9kZXNjID0gewo+ICsgICAgICAg ICAgICAuZmlsdGVyTW9kZSA9IENVX1RSX0ZJTFRFUl9NT0RFX1BPSU5ULAo+ICsgICAgICAgICAg ICAuZmxhZ3MgPSBDVV9UUlNGX1JFQURfQVNfSU5URUdFUiwKPiArICAgICAgICB9Owo+ICsKPiAr ICAgICAgICBDVURBX1JFU09VUkNFX0RFU0MgcmVzX2Rlc2MgPSB7Cj4gKyAgICAgICAgICAgIC5y ZXNUeXBlID0gQ1VfUkVTT1VSQ0VfVFlQRV9QSVRDSDJELAo+ICsgICAgICAgICAgICAucmVzLnBp dGNoMkQuZm9ybWF0ID0gcy0+aW5fcGxhbmVfZGVwdGhzW2ldIDw9IDggPwo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ1VfQURfRk9STUFUX1VOU0lHTkVEX0lOVDggOgo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1VfQURfRk9STUFUX1VOU0lHTkVEX0lO VDE2LAo+ICsgICAgICAgICAgICAucmVzLnBpdGNoMkQubnVtQ2hhbm5lbHMgPSBzLT5pbl9wbGFu ZV9jaGFubmVsc1tpXSwKPiArICAgICAgICAgICAgLnJlcy5waXRjaDJELnBpdGNoSW5CeXRlcyA9 IGluLT5saW5lc2l6ZVtpXSwKPiArICAgICAgICAgICAgLnJlcy5waXRjaDJELmRldlB0ciA9IChD VWRldmljZXB0cilpbi0+ZGF0YVtpXSwKPiArICAgICAgICB9Owo+ICsKPiArICAgICAgICBpZiAo aSA9PSAxIHx8IGkgPT0gMikgewo+ICsgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0Y2gyRC53 aWR0aCA9IEFWX0NFSUxfUlNISUZUKGluLT53aWR0aCwKPiBzLT5pbl9kZXNjLT5sb2cyX2Nocm9t YV93KTsKPiArICAgICAgICAgICAgcmVzX2Rlc2MucmVzLnBpdGNoMkQuaGVpZ2h0ID0gQVZfQ0VJ TF9SU0hJRlQoaW4tPmhlaWdodCwKPiBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV9oKTsKPiArICAg ICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICByZXNfZGVzYy5yZXMucGl0Y2gyRC53aWR0aCA9 IGluLT53aWR0aDsKPiArICAgICAgICAgICAgcmVzX2Rlc2MucmVzLnBpdGNoMkQuaGVpZ2h0ID0g aW4tPmhlaWdodDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJldCA9IENIRUNLX0NVKGN1 LT5jdVRleE9iamVjdENyZWF0ZSgmdGV4W2ldLCAmcmVzX2Rlc2MsCj4gJnRleF9kZXNjLCBOVUxM KSk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPiAr ICAgIH0KPiArCj4gKyAgICByZXQgPSBjdWRhX3N0YWNrX2NvcHlfa2VybmVsKGN0eCwgcy0+Y3Vf ZnVuY19jb3B5LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleCwgb3V0LCByZWdp b24tPndpZHRoLCByZWdpb24tPmhlaWdodCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZWdpb24tPngsIHJlZ2lvbi0+eSwgb3V0LT5saW5lc2l6ZVswXSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbi0+d2lkdGgsIGluLT5oZWlnaHQpOwo+ICsgICAgaWYg KHJldCA8IDApIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBk dXJpbmcgY29weSBvcGVyYXRpb246ICVkXG4iLAo+IHJldCk7Cj4gKyAgICAgICAgZ290byBmYWls Owo+ICsgICAgfQo+ICsKPiArICAgIGlmIChzLT5pbl9wbGFuZXMgPiAxKSB7Cj4gKyAgICAgICAg cmV0ID0gY3VkYV9zdGFja19jb3B5X2tlcm5lbChjdHgsIHMtPmN1X2Z1bmNfY29weV91diwgdGV4 LCBvdXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0NFSUxfUlNI SUZUKHJlZ2lvbi0+d2lkdGgsCj4gcy0+aW5fZGVzYy0+bG9nMl9jaHJvbWFfdyksCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0NFSUxfUlNISUZUKHJlZ2lvbi0+aGVp Z2h0LAo+IHMtPmluX2Rlc2MtPmxvZzJfY2hyb21hX2gpLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBVl9DRUlMX1JTSElGVChyZWdpb24tPngsCj4gcy0+aW5fZGVzYy0+ bG9nMl9jaHJvbWFfdyksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW X0NFSUxfUlNISUZUKHJlZ2lvbi0+eSwKPiBzLT5pbl9kZXNjLT5sb2cyX2Nocm9tYV9oKSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LT5saW5lc2l6ZVsxXSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfQ0VJTF9SU0hJRlQoaW4tPndp ZHRoLAo+IHMtPmluX2Rlc2MtPmxvZzJfY2hyb21hX3cpLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBVl9DRUlMX1JTSElGVChpbi0+aGVpZ2h0LAo+IHMtPmluX2Rlc2Mt PmxvZzJfY2hyb21hX2gpKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5nIGNvcHkgVVYgb3BlcmF0aW9u Ogo+ICVkXG4iLCByZXQpOwo+ICsgICAgfQo+ICsKPiArZmFpbDoKPiArICAgIGZvciAoaSA9IDA7 IGkgPCBGRl9BUlJBWV9FTEVNUyh0ZXgpOyBpKyspCj4gKyAgICAgICAgaWYgKHRleFtpXSkKPiAr ICAgICAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1VGV4T2JqZWN0RGVzdHJveSh0ZXhbaV0pKTsKPiAr Cj4gKyAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOwo+ICsgICAgcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwcm9jZXNzX2ZyYW1lKEZGRnJhbWVTeW5j ICpmcykKPiArewo+ICsgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBmcy0+cGFyZW50Owo+ICsg ICAgU3RhY2tDdWRhQ29udGV4dCAqc2N0eCA9IGZzLT5vcGFxdWU7Cj4gKyAgICBDVURBU3RhY2tD b250ZXh0ICpzID0gJnNjdHgtPmN1ZGE7Cj4gKyAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBj dHgtPm91dHB1dHNbMF07Cj4gKyAgICBBVkZyYW1lICpvdXRfZnJhbWUgPSBOVUxMOwo+ICsgICAg QVZGcmFtZSAqaW5fZnJhbWUgPSBOVUxMOwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAg b3V0X2ZyYW1lID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRs aW5rLT5oKTsKPiArICAgIGlmICghb3V0X2ZyYW1lKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Cj4gKwo+ICsgICAgLy8gRmlsbCB0aGUgZW50aXJlIG91dHB1dCBmcmFtZSB3aXRo IGZpbGwgY29sb3IgaWYgZW5hYmxlZAo+ICsgICAgaWYgKHNjdHgtPmJhc2UuZmlsbGNvbG9yX2Vu YWJsZSkgewo+ICsgICAgICAgIFN0YWNrSXRlbVJlZ2lvbiBmdWxsX3JlZ2lvbiA9IHsKPiArICAg ICAgICAgICAgLnggPSAwLAo+ICsgICAgICAgICAgICAueSA9IDAsCj4gKyAgICAgICAgICAgIC53 aWR0aCA9IG91dGxpbmstPncsCj4gKyAgICAgICAgICAgIC5oZWlnaHQgPSBvdXRsaW5rLT5oCj4g KyAgICAgICAgfTsKPiArCj4gKyAgICAgICAgcmV0ID0gY3VkYV9zdGFja19jb2xvcl9vcChjdHgs ICZmdWxsX3JlZ2lvbiwgb3V0X2ZyYW1lLAo+IHMtPmZpbGxjb2xvcl95dXYpOwo+ICsgICAgICAg IGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBmaWxsIGJhY2tncm91bmQKPiBjb2xvclxuIik7Cj4gKyAgICAgICAgICAgIGdv dG8gZmFpbDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBjdHgtPm5iX2lucHV0czsgaSsrKSB7Cj4gKyAgICAgICAgcmV0ID0gZmZfZnJhbWVzeW5j X2dldF9mcmFtZShmcywgaSwgJmluX2ZyYW1lLCAwKTsKPiArICAgICAgICBpZiAocmV0KQo+ICsg ICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgICAgICAgIGlmIChpID09IDApIHsKPiArICAg ICAgICAgICAgcmV0ID0gYXZfZnJhbWVfY29weV9wcm9wcyhvdXRfZnJhbWUsIGluX2ZyYW1lKTsK PiArICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7 Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICByZXQgPSBjdWRhX3N0YWNrX2NvcHlfb3AoY3R4 LCAmc2N0eC0+YmFzZS5yZWdpb25zW2ldLCBpbl9mcmFtZSwKPiBvdXRfZnJhbWUpOwo+ICsgICAg ICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgb3V0X2ZyYW1lLT5wdHMgPSBhdl9yZXNjYWxlX3Eoc2N0eC0+YmFzZS5mcy5wdHMsCj4g c2N0eC0+YmFzZS5mcy50aW1lX2Jhc2UsIG91dGxpbmstPnRpbWVfYmFzZSk7Cj4gKyAgICBvdXRf ZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSBvdXRsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlv Owo+ICsKPiArICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0X2ZyYW1lKTsK PiArCj4gK2ZhaWw6Cj4gKyAgICBhdl9mcmFtZV9mcmVlKCZvdXRfZnJhbWUpOwo+ICsgICAgcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjb25maWdfb3V0cHV0KEFWRmlsdGVyTGlu ayAqb3V0bGluaykKPiArewo+ICsgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBvdXRsaW5rLT5z cmM7Cj4gKyAgICBTdGFja0N1ZGFDb250ZXh0ICpzY3R4ID0gY3R4LT5wcml2Owo+ICsgICAgQ1VE QVN0YWNrQ29udGV4dCAqcyA9ICZzY3R4LT5jdWRhOwo+ICsgICAgQVZGaWx0ZXJMaW5rICppbmxp bmswID0gY3R4LT5pbnB1dHNbMF07Cj4gKyAgICBGaWx0ZXJMaW5rICAgICAgKmlubDAgPSBmZl9m aWx0ZXJfbGluayhpbmxpbmswKTsKPiArICAgIEZpbHRlckxpbmsgICAgICAqb3V0bCA9IGZmX2Zp bHRlcl9saW5rKG91dGxpbmspOwo+ICsgICAgZW51bSBBVlBpeGVsRm9ybWF0IGluX2Zvcm1hdDsK PiArICAgIGludCBkZXB0aCA9IDgsIHJldDsKPiArICAgIEFWSFdGcmFtZXNDb250ZXh0ICppbl9m cmFtZXNfY3R4Owo+ICsgICAgQVZCdWZmZXJSZWYgKmh3X2ZyYW1lc19jdHg7Cj4gKyAgICBBVkhX RnJhbWVzQ29udGV4dCAqb3V0X2ZyYW1lc19jdHg7Cj4gKwo+ICsgICAgaWYgKGlubGluazAtPmZv cm1hdCAhPSBBVl9QSVhfRk1UX0NVREEgfHwgIWlubDAtPmh3X2ZyYW1lc19jdHggfHwKPiAhaW5s MC0+aHdfZnJhbWVzX2N0eC0+ZGF0YSkgewo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIlNvZnR3YXJlIHBpeGVsIGZvcm1hdCBpcyBub3QKPiBzdXBwb3J0ZWQuXG4iKTsKPiAr ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgfQo+ICsKPiArICAgIGluX2Zy YW1lc19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWlubDAtPmh3X2ZyYW1lc19jdHgtPmRhdGE7 Cj4gKyAgICBpbl9mb3JtYXQgPSBpbl9mcmFtZXNfY3R4LT5zd19mb3JtYXQ7Cj4gKwo+ICsgICAg aWYgKCFmb3JtYXRfaXNfc3VwcG9ydGVkKGluX2Zvcm1hdCkpIHsKPiArICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCBpbnB1dCBmb3JtYXQ6ICVzXG4iLAo+ICsg ICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKGluX2Zvcm1hdCkpOwo+ICsgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcy0+aW5fZm10ID0g aW5fZm9ybWF0Owo+ICsgICAgcy0+aW5fZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+aW5f Zm10KTsKPiArICAgIHMtPmluX3BsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPmlu X2ZtdCk7Cj4gKwo+ICsgICAgLy8gU2V0IHVwIHBsYW5lIGluZm9ybWF0aW9uCj4gKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IHMtPmluX2Rlc2MtPm5iX2NvbXBvbmVudHM7IGkrKykgewo+ICsgICAg ICAgIGludCBkID0gKHMtPmluX2Rlc2MtPmNvbXBbaV0uZGVwdGggKyA3KSAvIDg7Cj4gKyAgICAg ICAgaW50IHAgPSBzLT5pbl9kZXNjLT5jb21wW2ldLnBsYW5lOwo+ICsgICAgICAgIHMtPmluX3Bs YW5lX2NoYW5uZWxzW3BdID0gRkZNQVgocy0+aW5fcGxhbmVfY2hhbm5lbHNbcF0sCj4gcy0+aW5f ZGVzYy0+Y29tcFtpXS5zdGVwIC8gZCk7Cj4gKyAgICAgICAgcy0+aW5fcGxhbmVfZGVwdGhzW3Bd ID0gcy0+aW5fZGVzYy0+Y29tcFtpXS5kZXB0aDsKPiArICAgIH0KPiArCj4gKyAgICBzLT5od2N0 eCA9IGluX2ZyYW1lc19jdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+ICsgICAgcy0+Y3VkYV9kbCA9 IHMtPmh3Y3R4LT5pbnRlcm5hbC0+Y3VkYV9kbDsKPiArICAgIHMtPmN1X3N0cmVhbSA9IHMtPmh3 Y3R4LT5zdHJlYW07Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzY3R4LT5iYXNlLm5i X2lucHV0czsgaSsrKSB7Cj4gKyAgICAgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlu cHV0c1tpXTsKPiArICAgICAgICBGaWx0ZXJMaW5rICAgICAgKmlubCA9IGZmX2ZpbHRlcl9saW5r KGlubGluayk7Cj4gKyAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMgPSBOVUxMOwo+ICsK PiArICAgICAgICBpZiAoaW5saW5rLT5mb3JtYXQgIT0gQVZfUElYX0ZNVF9DVURBIHx8ICFpbmwt Pmh3X2ZyYW1lc19jdHggfHwKPiAhaW5sLT5od19mcmFtZXNfY3R4LT5kYXRhKSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlNvZnR3YXJlIHBpeGVsIGZvcm1hdCBp cyBub3QKPiBzdXBwb3J0ZWQuXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRl eHQgKilpbmwtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Cj4gKwo+ICsgICAgICAgIGlmIChpbl9mcmFt ZXNfY3R4LT5zd19mb3JtYXQgIT0gaHdmYy0+c3dfZm9ybWF0KSB7Cj4gKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkFsbCBpbnB1dHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUK PiB1bmRlcmx5aW5nIHNvZnR3YXJlIHBpeGVsIGZvcm1hdC5cbiIpOwo+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBp ZiAoaW5fZm9ybWF0ID09IEFWX1BJWF9GTVRfUDAxMCkKPiArICAgICAgICBkZXB0aCA9IDEwOwo+ ICsKPiArICAgIGlmIChzY3R4LT5iYXNlLmZpbGxjb2xvcl9lbmFibGUpIHsKPiArICAgICAgICAv LyBDaGVjayBpZiB0aGlzIGlzIGFuIFJHQiBmb3JtYXQKPiArICAgICAgICBpZiAocy0+aW5fZGVz Yy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKSB7Cj4gKyAgICAgICAgICAgIC8vIEZvciBS R0IgZm9ybWF0cywgdXNlIFJHQiB2YWx1ZXMgZGlyZWN0bHkKPiArICAgICAgICAgICAgcy0+Zmls bGNvbG9yX3l1dlswXSA9IHNjdHgtPmJhc2UuZmlsbGNvbG9yWzBdOyAvLyBSCj4gKyAgICAgICAg ICAgIHMtPmZpbGxjb2xvcl95dXZbMV0gPSBzY3R4LT5iYXNlLmZpbGxjb2xvclsxXTsgLy8gRwo+ ICsgICAgICAgICAgICBzLT5maWxsY29sb3JfeXV2WzJdID0gc2N0eC0+YmFzZS5maWxsY29sb3Jb Ml07IC8vIEIKPiArICAgICAgICAgICAgcy0+ZmlsbGNvbG9yX3l1dlszXSA9IHNjdHgtPmJhc2Uu ZmlsbGNvbG9yWzNdOyAvLyBBCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgLy8g Rm9yIFlVViBmb3JtYXRzLCBjb252ZXJ0IFJHQiB0byBZVVYKPiArICAgICAgICAgICAgaW50IFks IFUsIFY7Cj4gKwo+ICsgICAgICAgICAgICByZ2IyeXV2KHNjdHgtPmJhc2UuZmlsbGNvbG9yWzBd IC8gMjU1LjAsCj4gc2N0eC0+YmFzZS5maWxsY29sb3JbMV0gLyAyNTUuMCwKPiArICAgICAgICAg ICAgICAgICAgICBzY3R4LT5iYXNlLmZpbGxjb2xvclsyXSAvIDI1NS4wLCAmWSwgJlUsICZWLCBk ZXB0aCk7Cj4gKyAgICAgICAgICAgIHMtPmZpbGxjb2xvcl95dXZbMF0gPSBZOwo+ICsgICAgICAg ICAgICBzLT5maWxsY29sb3JfeXV2WzFdID0gVTsKPiArICAgICAgICAgICAgcy0+ZmlsbGNvbG9y X3l1dlsyXSA9IFY7Cj4gKyAgICAgICAgICAgIHMtPmZpbGxjb2xvcl95dXZbM10gPSBzY3R4LT5i YXNlLmZpbGxjb2xvclszXTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0g Y29uZmlnX2NvbW1fb3V0cHV0KG91dGxpbmspOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAg ICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBjdWRhX3N0YWNrX2xvYWRfZnVuY3Rpb25z KGN0eCwgaW5fZm9ybWF0KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiBy ZXQ7Cj4gKwo+ICsgICAgLy8gSW5pdGlhbGl6ZSBoYXJkd2FyZSBmcmFtZXMgY29udGV4dCBmb3Ig b3V0cHV0Cj4gKyAgICBod19mcmFtZXNfY3R4ID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MoaW5fZnJh bWVzX2N0eC0+ZGV2aWNlX3JlZik7Cj4gKyAgICBpZiAoIWh3X2ZyYW1lc19jdHgpCj4gKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICBvdXRfZnJhbWVzX2N0eCA9IChB VkhXRnJhbWVzQ29udGV4dCopaHdfZnJhbWVzX2N0eC0+ZGF0YTsKPiArICAgIG91dF9mcmFtZXNf Y3R4LT5mb3JtYXQgPSBBVl9QSVhfRk1UX0NVREE7Cj4gKyAgICBvdXRfZnJhbWVzX2N0eC0+c3df Zm9ybWF0ID0gaW5fZm9ybWF0Owo+ICsgICAgb3V0X2ZyYW1lc19jdHgtPndpZHRoID0gb3V0bGlu ay0+dzsKPiArICAgIG91dF9mcmFtZXNfY3R4LT5oZWlnaHQgPSBvdXRsaW5rLT5oOwo+ICsKPiAr ICAgIHJldCA9IGF2X2h3ZnJhbWVfY3R4X2luaXQoaHdfZnJhbWVzX2N0eCk7Cj4gKyAgICBpZiAo cmV0IDwgMCkgewo+ICsgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmaHdfZnJhbWVzX2N0eCk7Cj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIH0KPiArCj4gKyAgICBhdl9idWZmZXJfdW5yZWYo Jm91dGwtPmh3X2ZyYW1lc19jdHgpOwo+ICsgICAgb3V0bC0+aHdfZnJhbWVzX2N0eCA9IGh3X2Zy YW1lc19jdHg7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY3Vk YV9zdGFja19pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBpbnQgcmV0Owo+ ICsKPiArICAgIHJldCA9IHN0YWNrX2luaXQoY3R4KTsKPiArICAgIGlmIChyZXQpCj4gKyAgICAg ICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGF2 X2NvbGQgdm9pZCBjdWRhX3N0YWNrX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ ICsgICAgU3RhY2tDdWRhQ29udGV4dCAqc2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIENVREFTdGFj a0NvbnRleHQgKnMgPSAmc2N0eC0+Y3VkYTsKPiArCj4gKyAgICBpZiAocy0+aHdjdHggJiYgcy0+ Y3VfbW9kdWxlKSB7Cj4gKyAgICAgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBzLT5jdWRhX2RsOwo+ ICsgICAgICAgIENVY29udGV4dCBkdW1teTsKPiArCj4gKyAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1 Q3R4UHVzaEN1cnJlbnQocy0+aHdjdHgtPmN1ZGFfY3R4KSk7Cj4gKyAgICAgICAgQ0hFQ0tfQ1Uo Y3UtPmN1TW9kdWxlVW5sb2FkKHMtPmN1X21vZHVsZSkpOwo+ICsgICAgICAgIHMtPmN1X21vZHVs ZSA9IE5VTEw7Cj4gKyAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkp KTsKPiArICAgIH0KPiArCj4gKyAgICBzdGFja191bmluaXQoY3R4KTsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBjdWRhX3N0YWNrX3BpeF9mbXRzW10gPSB7Cj4g KyAgICBBVl9QSVhfRk1UX0NVREEsCj4gKyAgICBBVl9QSVhfRk1UX05PTkUsCj4gK307Cj4gKwo+ ICsjaW5jbHVkZSAic3RhY2tfaW50ZXJuYWwuYyIKPiArCj4gKyNpZiBDT05GSUdfSFNUQUNLX0NV REFfRklMVEVSCj4gKwo+ICtERUZJTkVfSFNUQUNLX09QVElPTlMoY3VkYSk7Cj4gK0RFRklORV9T VEFDS19GSUxURVIoaHN0YWNrLCBjdWRhLCAiQ1VEQSIsIDApOwo+ICsKPiArI2VuZGlmCj4gKwo+ ICsjaWYgQ09ORklHX1ZTVEFDS19DVURBX0ZJTFRFUgo+ICsKPiArREVGSU5FX1ZTVEFDS19PUFRJ T05TKGN1ZGEpOwo+ICtERUZJTkVfU1RBQ0tfRklMVEVSKHZzdGFjaywgY3VkYSwgIkNVREEiLCAw KTsKPiArCj4gKyNlbmRpZgo+ICsKPiArI2lmIENPTkZJR19YU1RBQ0tfQ1VEQV9GSUxURVIKPiAr Cj4gK0RFRklORV9YU1RBQ0tfT1BUSU9OUyhjdWRhKTsKPiArREVGSU5FX1NUQUNLX0ZJTFRFUih4 c3RhY2ssIGN1ZGEsICJDVURBIiwgMCk7Cj4gKwo+ICsjZW5kaWYKPiBcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKPiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfc3RhY2tfY3VkYS5jdSBi L2xpYmF2ZmlsdGVyL3ZmX3N0YWNrX2N1ZGEuY3UKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAuLmMxOTU5NWUwYTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliYXZm aWx0ZXIvdmZfc3RhY2tfY3VkYS5jdQo+IEBAIC0wLDAgKzEsMzg5IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoYykgMjAyNSwgRmFlZXogS2FkaXJpIDwgZjFrMmZhZWV6IGF0IGdtYWlsIGRvdCBj b20+Cj4gKyAqCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCj4gaW5jbHVkZWQgaW4KPiArICogYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UCj4gU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKPiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO Rwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCj4gKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiY3VkYS92ZWN0b3JfaGVscGVycy5jdWgiCj4gKwo+ICsvLyAtLS0g Q09OVkVSU0lPTiBMT0dJQyAtLS0KPiArCj4gK3N0YXRpYyBjb25zdCB1c2hvcnQgbWFza18xMGJp dCA9IDB4RkZDMDsKPiArc3RhdGljIGNvbnN0IHVzaG9ydCBtYXNrXzE2Yml0ID0gMHhGRkZGOwo+ ICsKPiArc3RhdGljIGlubGluZSBfX2RldmljZV9fIHVzaG9ydCBjb252Xzh0bzE2KHVjaGFyIGlu LCB1c2hvcnQgbWFzaykKPiArewo+ICsgICAgcmV0dXJuICgodXNob3J0KWluIHwgKCh1c2hvcnQp aW4gPDwgOCkpICYgbWFzazsKPiArfQo+ICsKPiArLy8gRkZtcGVnIHBhc3NlcyBwaXRjaCBpbiBi eXRlcywgQ1VEQSB1c2VzIHBvdGVudGlhbGx5IGxhcmdlciB0eXBlcwo+ICsjZGVmaW5lIEZJWEVE X1BJVENIIFwKPiArICAgIChkc3RfcGl0Y2gvc2l6ZW9mKCpkc3RbMF0pKQo+ICsKPiArI2RlZmlu ZSBERUZBVUxUX0RTVChuKSBcCj4gKyAgICBkc3Rbbl1beW8qRklYRURfUElUQ0greG9dCj4gKwo+ ICsjZGVmaW5lIE9GRlNFVF9EU1QobikgXAo+ICsgICAgZHN0W25dWyh5bytkc3RfeSkqRklYRURf UElUQ0grKHhvK2RzdF94KV0KPiArCj4gKy8vIC0tLSBDT01NT04gQk9VTkRTIENIRUNLSU5HIC0t LQo+ICsKPiArI2RlZmluZSBCT1VORFNfQ0hFQ0soKSBcCj4gKyAgICBpZiAoeG8gPj0gd2lkdGgg fHwgeW8gPj0gaGVpZ2h0KSBcCj4gKyAgICAgICAgcmV0dXJuOyBcCj4gKyAgICBpbnQgdGFyZ2V0 X3ggPSB4byArIGRzdF94OyBcCj4gKyAgICBpbnQgdGFyZ2V0X3kgPSB5byArIGRzdF95OyBcCj4g KyAgICBpZiAodGFyZ2V0X3ggPCAwIHx8IHRhcmdldF95IDwgMCB8fCB0YXJnZXRfeCA+PSBmcmFt ZV93aWR0aCB8fAo+IHRhcmdldF95ID49IGZyYW1lX2hlaWdodCkgXAo+ICsgICAgICAgIHJldHVy bjsKPiArCj4gKyNkZWZpbmUgQk9VTkRTX0NIRUNLX1VWKGNocm9tYV9zaGlmdCkgXAo+ICsgICAg aWYgKHhvID49IHdpZHRoIHx8IHlvID49IGhlaWdodCkgXAo+ICsgICAgICAgIHJldHVybjsgXAo+ ICsgICAgaW50IHRhcmdldF94ID0geG8gKyBkc3RfeDsgXAo+ICsgICAgaW50IHRhcmdldF95ID0g eW8gKyBkc3RfeTsgXAo+ICsgICAgaW50IGZyYW1lX3V2X2hlaWdodCA9IGZyYW1lX2hlaWdodCA+ PiBjaHJvbWFfc2hpZnQ7IFwKPiArICAgIGlmICh0YXJnZXRfeCA8IDAgfHwgdGFyZ2V0X3kgPCAw IHx8IHRhcmdldF94ID49IGZyYW1lX3dpZHRoIHx8Cj4gdGFyZ2V0X3kgPj0gZnJhbWVfdXZfaGVp Z2h0KSBcCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArI2RlZmluZSBDT1BZX0JPVU5EU19DSEVD SygpIFwKPiArICAgIGludCB0YXJnZXRfeCA9IHhvICsgZHN0X3g7IFwKPiArICAgIGludCB0YXJn ZXRfeSA9IHlvICsgZHN0X3k7IFwKPiArICAgIGlmICh0YXJnZXRfeCA8IDAgfHwgdGFyZ2V0X3kg PCAwIHx8IHRhcmdldF94ID49IGZyYW1lX3dpZHRoIHx8Cj4gdGFyZ2V0X3kgPj0gZnJhbWVfaGVp Z2h0KSBcCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArI2RlZmluZSBDT1BZX0JPVU5EU19DSEVD S19VVihjaHJvbWFfc2hpZnQpIFwKPiArICAgIGludCB0YXJnZXRfeCA9IHhvICsgZHN0X3g7IFwK PiArICAgIGludCB0YXJnZXRfeSA9IHlvICsgZHN0X3k7IFwKPiArICAgIGludCBmcmFtZV91dl93 aWR0aCA9IGZyYW1lX3dpZHRoID4+IGNocm9tYV9zaGlmdDsgXAo+ICsgICAgaW50IGZyYW1lX3V2 X2hlaWdodCA9IGZyYW1lX2hlaWdodCA+PiBjaHJvbWFfc2hpZnQ7IFwKPiArICAgIGlmICh0YXJn ZXRfeCA8IDAgfHwgdGFyZ2V0X3kgPCAwIHx8IHRhcmdldF94ID49IGZyYW1lX3V2X3dpZHRoIHx8 Cj4gdGFyZ2V0X3kgPj0gZnJhbWVfdXZfaGVpZ2h0KSBcCj4gKyAgICAgICAgcmV0dXJuOwo+ICsK PiArLy8gLS0tIENPTE9SIE9QRVJBVElPTlMgLS0tCj4gKwo+ICsjZGVmaW5lIENPTE9SX0RFRl9G KE4sIFQpIFwKPiArICAgIF9fZGV2aWNlX18gc3RhdGljIGlubGluZSB2b2lkIE4oVCAqZHN0WzRd LCBpbnQgeG8sIGludCB5bywgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQKPiBkc3RfcGl0Y2gsIFwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RfeCwgaW50IGRzdF95LCBcCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHlfY29sb3Is IHVuc2lnbmVkIGNoYXIKPiB1X2NvbG9yLCBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHZfY29sb3IsIHVuc2lnbmVkIGNoYXIKPiBhX2NvbG9y LCBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfd2lk dGgsIGludCBmcmFtZV9oZWlnaHQpCj4gKwo+ICsvLyBNYWNybyBmb3IgWVVWIHBsYW5hciBmb3Jt YXRzICg0MjBwLCA0NDRwLCBldGMuKQo+ICsjZGVmaW5lIERFRklORV9TRVRDT0xPUl9ZVVZfUExB TkFSKG5hbWUsIG91dF90eXBlLCBvdXRfdHlwZV91diwgeV9hc3NpZ24sCj4gdXZfYXNzaWduKSBc Cj4gK3N0cnVjdCBTZXRDb2xvcl8jI25hbWUgXAo+ICt7IFwKPiArICAgIHR5cGVkZWYgb3V0X3R5 cGUgb3V0X1Q7IFwKPiArICAgIHR5cGVkZWYgb3V0X3R5cGVfdXYgb3V0X1RfdXY7IFwKPiArICAg IFwKPiArICAgIENPTE9SX0RFRl9GKFNldENvbG9yLCBvdXRfVCkgXAo+ICsgICAgeyBcCj4gKyAg ICAgICAgQk9VTkRTX0NIRUNLKCk7IFwKPiArICAgICAgICBPRkZTRVRfRFNUKDApID0geV9hc3Np Z247IFwKPiArICAgIH0gXAo+ICsgICAgXAo+ICsgICAgQ09MT1JfREVGX0YoU2V0Q29sb3JfdXYs IG91dF9UX3V2KSBcCj4gKyAgICB7IFwKPiArICAgICAgICBCT1VORFNfQ0hFQ0soKTsgXAo+ICsg ICAgICAgIHV2X2Fzc2lnbjsgXAo+ICsgICAgfSBcCj4gK307Cj4gKwo+ICsvLyBNYWNybyBmb3Ig TlYxMi1zdHlsZSBmb3JtYXRzIChpbnRlcmxlYXZlZCBVVikKPiArI2RlZmluZSBERUZJTkVfU0VU Q09MT1JfTlYobmFtZSwgb3V0X3R5cGUsIG91dF90eXBlX3V2LCB5X2Fzc2lnbiwKPiB1dl9hc3Np Z24pIFwKPiArc3RydWN0IFNldENvbG9yXyMjbmFtZSBcCj4gK3sgXAo+ICsgICAgdHlwZWRlZiBv dXRfdHlwZSBvdXRfVDsgXAo+ICsgICAgdHlwZWRlZiBvdXRfdHlwZV91diBvdXRfVF91djsgXAo+ ICsgICAgXAo+ICsgICAgQ09MT1JfREVGX0YoU2V0Q29sb3IsIG91dF9UKSBcCj4gKyAgICB7IFwK PiArICAgICAgICBCT1VORFNfQ0hFQ0soKTsgXAo+ICsgICAgICAgIE9GRlNFVF9EU1QoMCkgPSB5 X2Fzc2lnbjsgXAo+ICsgICAgfSBcCj4gKyAgICBcCj4gKyAgICBDT0xPUl9ERUZfRihTZXRDb2xv cl91diwgb3V0X1RfdXYpIFwKPiArICAgIHsgXAo+ICsgICAgICAgIEJPVU5EU19DSEVDS19VVigx KTsgXAo+ICsgICAgICAgIE9GRlNFVF9EU1QoMSkgPSB1dl9hc3NpZ247IFwKPiArICAgIH0gXAo+ ICt9Owo+ICsKPiArLy8gTWFjcm8gZm9yIFJHQiBmb3JtYXRzCj4gKyNkZWZpbmUgREVGSU5FX1NF VENPTE9SX1JHQihuYW1lLCBvdXRfdHlwZSwgY29sb3JfYXNzaWduKSBcCj4gK3N0cnVjdCBTZXRD b2xvcl8jI25hbWUgXAo+ICt7IFwKPiArICAgIHR5cGVkZWYgb3V0X3R5cGUgb3V0X1Q7IFwKPiAr ICAgIHR5cGVkZWYgdWNoYXIgb3V0X1RfdXY7IFwKPiArICAgIFwKPiArICAgIENPTE9SX0RFRl9G KFNldENvbG9yLCBvdXRfVCkgXAo+ICsgICAgeyBcCj4gKyAgICAgICAgQk9VTkRTX0NIRUNLKCk7 IFwKPiArICAgICAgICBPRkZTRVRfRFNUKDApID0gY29sb3JfYXNzaWduOyBcCj4gKyAgICB9IFwK PiArICAgIFwKPiArICAgIENPTE9SX0RFRl9GKFNldENvbG9yX3V2LCBvdXRfVF91dikgXAo+ICsg ICAgeyBcCj4gKyAgICAgICAgLyogTm8gVVYgcGxhbmUgZm9yIFJHQiBmb3JtYXRzICovIFwKPiAr ICAgIH0gXAo+ICt9Owo+ICsKPiArLy8gRGVmaW5lIGFsbCBTZXRDb2xvciBzdHJ1Y3RzIHVzaW5n IG1hY3Jvcwo+ICtERUZJTkVfU0VUQ09MT1JfWVVWX1BMQU5BUih5dXY0MjBwLCB1Y2hhciwgdWNo YXIsIHlfY29sb3IsCj4gKyAgICBPRkZTRVRfRFNUKDEpID0gdV9jb2xvcjsgT0ZGU0VUX0RTVCgy KSA9IHZfY29sb3IpCj4gKwo+ICtERUZJTkVfU0VUQ09MT1JfTlYobnYxMiwgdWNoYXIsIHVjaGFy MiwgeV9jb2xvciwKPiArICAgIG1ha2VfdWNoYXIyKHVfY29sb3IsIHZfY29sb3IpKQo+ICsKPiAr REVGSU5FX1NFVENPTE9SX1lVVl9QTEFOQVIoeXV2NDQ0cCwgdWNoYXIsIHVjaGFyLCB5X2NvbG9y LAo+ICsgICAgT0ZGU0VUX0RTVCgxKSA9IHVfY29sb3I7IE9GRlNFVF9EU1QoMikgPSB2X2NvbG9y KQo+ICsKPiArREVGSU5FX1NFVENPTE9SX05WKHAwMTBsZSwgdXNob3J0LCB1c2hvcnQyLCBjb252 Xzh0bzE2KHlfY29sb3IsCj4gbWFza18xMGJpdCksCj4gKyAgICBtYWtlX3VzaG9ydDIoY29udl84 dG8xNih1X2NvbG9yLCBtYXNrXzEwYml0KSwgY29udl84dG8xNih2X2NvbG9yLAo+IG1hc2tfMTBi aXQpKSkKPiArCj4gK0RFRklORV9TRVRDT0xPUl9OVihwMDE2bGUsIHVzaG9ydCwgdXNob3J0Miwg Y29udl84dG8xNih5X2NvbG9yLAo+IG1hc2tfMTZiaXQpLAo+ICsgICAgbWFrZV91c2hvcnQyKGNv bnZfOHRvMTYodV9jb2xvciwgbWFza18xNmJpdCksIGNvbnZfOHRvMTYodl9jb2xvciwKPiBtYXNr XzE2Yml0KSkpCj4gKwo+ICtERUZJTkVfU0VUQ09MT1JfWVVWX1BMQU5BUih5dXY0NDRwMTZsZSwg dXNob3J0LCB1c2hvcnQsCj4gY29udl84dG8xNih5X2NvbG9yLCBtYXNrXzE2Yml0KSwKPiArICAg IE9GRlNFVF9EU1QoMSkgPSBjb252Xzh0bzE2KHVfY29sb3IsIG1hc2tfMTZiaXQpOyBPRkZTRVRf RFNUKDIpID0KPiBjb252Xzh0bzE2KHZfY29sb3IsIG1hc2tfMTZiaXQpKQo+ICsKPiArREVGSU5F X1NFVENPTE9SX1JHQihyZ2IwLCB1Y2hhcjQsIG1ha2VfdWNoYXI0KHlfY29sb3IsIHVfY29sb3Is IHZfY29sb3IsCj4gMCkpCj4gK0RFRklORV9TRVRDT0xPUl9SR0IoYmdyMCwgdWNoYXI0LCBtYWtl X3VjaGFyNCh2X2NvbG9yLCB1X2NvbG9yLCB5X2NvbG9yLAo+IDApKQo+ICtERUZJTkVfU0VUQ09M T1JfUkdCKHJnYmEsIHVjaGFyNCwgbWFrZV91Y2hhcjQoeV9jb2xvciwgdV9jb2xvciwgdl9jb2xv ciwKPiBhX2NvbG9yKSkKPiArREVGSU5FX1NFVENPTE9SX1JHQihiZ3JhLCB1Y2hhcjQsIG1ha2Vf dWNoYXI0KHZfY29sb3IsIHVfY29sb3IsIHlfY29sb3IsCj4gYV9jb2xvcikpCj4gKwo+ICsvLyAt LS0gQ09QWSBPUEVSQVRJT05TIC0tLQo+ICsKPiArdGVtcGxhdGU8dHlwZW5hbWUgVD4KPiArdXNp bmcgY29weV9mdW5jdGlvbl90ID0gVCAoKikoY3VkYVRleHR1cmVPYmplY3RfdCB0ZXgsIGludCB4 bywgaW50IHlvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRzdF93aWR0 aCwgaW50IGRzdF9oZWlnaHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg c3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBiaXRfZGVwdGgpOwo+ICsKPiArI2RlZmluZSBDT1BZX0RFRl9GKE4sIFQpIFwKPiAr ICAgIHRlbXBsYXRlPGNvcHlfZnVuY3Rpb25fdDxpbl9UPiBjb3B5X2Z1bmNfeSwKPiAgICAgICAg ICAgICAgICAgIFwKPiArICAgICAgICAgICAgIGNvcHlfZnVuY3Rpb25fdDxpbl9UX3V2PiBjb3B5 X2Z1bmNfdXY+Cj4gICAgICAgICAgICAgICAgICBcCj4gKyAgICBfX2RldmljZV9fIHN0YXRpYyBp bmxpbmUgdm9pZCBOKGN1ZGFUZXh0dXJlT2JqZWN0X3Qgc3JjX3RleFs0XSwgVAo+ICpkc3RbNF0s IGludCB4bywgaW50IHlvLCBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwKPiBpbnQgZHN0X3BpdGNoLCAgICAg ICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0 X3gsIGludCBkc3RfeSwKPiAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY193aWR0aCwgaW50IHNyY19oZWlnaHQs Cj4gICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZnJhbWVfd2lkdGgsIGludCBmcmFtZV9oZWlnaHQpCj4gKwo+ICsjZGVm aW5lIENPUFlfU1VCX0YobSwgcGxhbmUpIFwKPiArICAgIGNvcHlfZnVuY18jI20oc3JjX3RleFtw bGFuZV0sIHhvLCB5bywgXAo+ICsgICAgICAgICAgICAgICAgICBkc3Rfd2lkdGgsIGRzdF9oZWln aHQsICBcCj4gKyAgICAgICAgICAgICAgICAgIHNyY193aWR0aCwgc3JjX2hlaWdodCwgIFwKPiAr ICAgICAgICAgICAgICAgICAgaW5fYml0X2RlcHRoKQo+ICsKPiArLy8gTWFjcm8gZm9yIFlVViBw bGFuYXIgY29weSBvcGVyYXRpb25zCj4gKyNkZWZpbmUgREVGSU5FX1NUQUNLQ09QWV9ZVVZfUExB TkFSKG5hbWUsIGJpdF9kZXB0aCwgaW5fdHlwZSwgaW5fdHlwZV91diwKPiBvdXRfdHlwZSwgb3V0 X3R5cGVfdXYsIGNocm9tYV9zaGlmdCkgXAo+ICtzdHJ1Y3QgU3RhY2tDb3B5XyMjbmFtZSBcCj4g K3sgXAo+ICsgICAgc3RhdGljIGNvbnN0IGludCBpbl9iaXRfZGVwdGggPSBiaXRfZGVwdGg7IFwK PiArICAgIHR5cGVkZWYgaW5fdHlwZSBpbl9UOyBcCj4gKyAgICB0eXBlZGVmIGluX3R5cGVfdXYg aW5fVF91djsgXAo+ICsgICAgdHlwZWRlZiBvdXRfdHlwZSBvdXRfVDsgXAo+ICsgICAgdHlwZWRl ZiBvdXRfdHlwZV91diBvdXRfVF91djsgXAo+ICsgICAgXAo+ICsgICAgQ09QWV9ERUZfRihTdGFj a0NvcHksIG91dF9UKSBcCj4gKyAgICB7IFwKPiArICAgICAgICBDT1BZX0JPVU5EU19DSEVDSygp OyBcCj4gKyAgICAgICAgT0ZGU0VUX0RTVCgwKSA9IENPUFlfU1VCX0YoeSwgMCk7IFwKPiArICAg IH0gXAo+ICsgICAgXAo+ICsgICAgQ09QWV9ERUZfRihTdGFja0NvcHlfdXYsIG91dF9UX3V2KSBc Cj4gKyAgICB7IFwKPiArICAgICAgICBDT1BZX0JPVU5EU19DSEVDS19VVihjaHJvbWFfc2hpZnQp OyBcCj4gKyAgICAgICAgT0ZGU0VUX0RTVCgxKSA9IENPUFlfU1VCX0YodXYsIDEpOyBcCj4gKyAg ICAgICAgT0ZGU0VUX0RTVCgyKSA9IENPUFlfU1VCX0YodXYsIDIpOyBcCj4gKyAgICB9IFwKPiAr fTsKPiArCj4gKy8vIE1hY3JvIGZvciBOVjEyLXN0eWxlIGNvcHkgb3BlcmF0aW9ucwo+ICsjZGVm aW5lIERFRklORV9TVEFDS0NPUFlfTlYobmFtZSwgYml0X2RlcHRoLCBpbl90eXBlLCBpbl90eXBl X3V2LAo+IG91dF90eXBlLCBvdXRfdHlwZV91dikgXAo+ICtzdHJ1Y3QgU3RhY2tDb3B5XyMjbmFt ZSBcCj4gK3sgXAo+ICsgICAgc3RhdGljIGNvbnN0IGludCBpbl9iaXRfZGVwdGggPSBiaXRfZGVw dGg7IFwKPiArICAgIHR5cGVkZWYgaW5fdHlwZSBpbl9UOyBcCj4gKyAgICB0eXBlZGVmIGluX3R5 cGVfdXYgaW5fVF91djsgXAo+ICsgICAgdHlwZWRlZiBvdXRfdHlwZSBvdXRfVDsgXAo+ICsgICAg dHlwZWRlZiBvdXRfdHlwZV91diBvdXRfVF91djsgXAo+ICsgICAgXAo+ICsgICAgQ09QWV9ERUZf RihTdGFja0NvcHksIG91dF9UKSBcCj4gKyAgICB7IFwKPiArICAgICAgICBDT1BZX0JPVU5EU19D SEVDSygpOyBcCj4gKyAgICAgICAgT0ZGU0VUX0RTVCgwKSA9IENPUFlfU1VCX0YoeSwgMCk7IFwK PiArICAgIH0gXAo+ICsgICAgXAo+ICsgICAgQ09QWV9ERUZfRihTdGFja0NvcHlfdXYsIG91dF9U X3V2KSBcCj4gKyAgICB7IFwKPiArICAgICAgICBDT1BZX0JPVU5EU19DSEVDS19VVigxKTsgXAo+ ICsgICAgICAgIE9GRlNFVF9EU1QoMSkgPSBDT1BZX1NVQl9GKHV2LCAxKTsgXAo+ICsgICAgfSBc Cj4gK307Cj4gKwo+ICsvLyBNYWNybyBmb3IgUkdCIGNvcHkgb3BlcmF0aW9ucwo+ICsjZGVmaW5l IERFRklORV9TVEFDS0NPUFlfUkdCKG5hbWUsIGJpdF9kZXB0aCwgaW5fdHlwZSwgb3V0X3R5cGUp IFwKPiArc3RydWN0IFN0YWNrQ29weV8jI25hbWUgXAo+ICt7IFwKPiArICAgIHN0YXRpYyBjb25z dCBpbnQgaW5fYml0X2RlcHRoID0gYml0X2RlcHRoOyBcCj4gKyAgICB0eXBlZGVmIGluX3R5cGUg aW5fVDsgXAo+ICsgICAgdHlwZWRlZiB1Y2hhciBpbl9UX3V2OyBcCj4gKyAgICB0eXBlZGVmIG91 dF90eXBlIG91dF9UOyBcCj4gKyAgICB0eXBlZGVmIHVjaGFyIG91dF9UX3V2OyBcCj4gKyAgICBc Cj4gKyAgICBDT1BZX0RFRl9GKFN0YWNrQ29weSwgb3V0X1QpIFwKPiArICAgIHsgXAo+ICsgICAg ICAgIENPUFlfQk9VTkRTX0NIRUNLKCk7IFwKPiArICAgICAgICBPRkZTRVRfRFNUKDApID0gQ09Q WV9TVUJfRih5LCAwKTsgXAo+ICsgICAgfSBcCj4gKyAgICBcCj4gKyAgICBDT1BZX0RFRl9GKFN0 YWNrQ29weV91diwgb3V0X1RfdXYpIFwKPiArICAgIHsgXAo+ICsgICAgICAgIC8qIE5vIFVWIHBs YW5lIGZvciBSR0IgZm9ybWF0cyAqLyBcCj4gKyAgICB9IFwKPiArfTsKPiArCj4gKy8vIERlZmlu ZSBhbGwgU3RhY2tDb3B5IHN0cnVjdHMgdXNpbmcgbWFjcm9zCj4gK0RFRklORV9TVEFDS0NPUFlf WVVWX1BMQU5BUih5dXY0MjBwX3l1djQyMHAsIDgsIHVjaGFyLCB1Y2hhciwgdWNoYXIsCj4gdWNo YXIsIDEpCj4gK0RFRklORV9TVEFDS0NPUFlfTlYobnYxMl9udjEyLCA4LCB1Y2hhciwgdWNoYXIy LCB1Y2hhciwgdWNoYXIyKQo+ICtERUZJTkVfU1RBQ0tDT1BZX1lVVl9QTEFOQVIoeXV2NDQ0cF95 dXY0NDRwLCA4LCB1Y2hhciwgdWNoYXIsIHVjaGFyLAo+IHVjaGFyLCAwKQo+ICtERUZJTkVfU1RB Q0tDT1BZX05WKHAwMTBsZV9wMDEwbGUsIDEwLCB1c2hvcnQsIHVzaG9ydDIsIHVzaG9ydCwgdXNo b3J0MikKPiArREVGSU5FX1NUQUNLQ09QWV9OVihwMDE2bGVfcDAxNmxlLCAxNiwgdXNob3J0LCB1 c2hvcnQyLCB1c2hvcnQsIHVzaG9ydDIpCj4gK0RFRklORV9TVEFDS0NPUFlfWVVWX1BMQU5BUih5 dXY0NDRwMTZsZV95dXY0NDRwMTZsZSwgMTYsIHVzaG9ydCwgdXNob3J0LAo+IHVzaG9ydCwgdXNo b3J0LCAwKQo+ICtERUZJTkVfU1RBQ0tDT1BZX1JHQihyZ2IwX3JnYjAsIDgsIHVjaGFyNCwgdWNo YXI0KQo+ICtERUZJTkVfU1RBQ0tDT1BZX1JHQihiZ3IwX2JncjAsIDgsIHVjaGFyNCwgdWNoYXI0 KQo+ICtERUZJTkVfU1RBQ0tDT1BZX1JHQihyZ2JhX3JnYmEsIDgsIHVjaGFyNCwgdWNoYXI0KQo+ ICtERUZJTkVfU1RBQ0tDT1BZX1JHQihiZ3JhX2JncmEsIDgsIHVjaGFyNCwgdWNoYXI0KQo+ICsK PiArLy8gLS0tIENPUFkgTE9HSUMgLS0tCj4gKwo+ICt0ZW1wbGF0ZTx0eXBlbmFtZSBUPgo+ICtf X2RldmljZV9fIHN0YXRpYyBpbmxpbmUgVCBTdGFja0NvcHlQaXhlbChjdWRhVGV4dHVyZU9iamVj dF90IHRleCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 bywgaW50IHlvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGRzdF93aWR0aCwgaW50IGRzdF9oZWlnaHQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc3JjX3dpZHRoLCBpbnQgc3JjX2hlaWdodCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRfZGVwdGgpCj4gK3sKPiArICAg IGZsb2F0IGhzY2FsZSA9IChmbG9hdClzcmNfd2lkdGggLyAoZmxvYXQpZHN0X3dpZHRoOwo+ICsg ICAgZmxvYXQgdnNjYWxlID0gKGZsb2F0KXNyY19oZWlnaHQgLyAoZmxvYXQpZHN0X2hlaWdodDsK PiArICAgIGZsb2F0IHhpID0gKHhvICsgMC41ZikgKiBoc2NhbGU7Cj4gKyAgICBmbG9hdCB5aSA9 ICh5byArIDAuNWYpICogdnNjYWxlOwo+ICsKPiArICAgIHJldHVybiB0ZXgyRDxUPih0ZXgsIHhp LCB5aSk7Cj4gK30KPiArCj4gKy8vLyAtLS0gRlVOQ1RJT04gRVhQT1JUUyAtLS0KPiArCj4gKyNk ZWZpbmUgQ09MT1JfS0VSTkVMX0FSR1MoVCkgXAo+ICsgICAgVCAqZHN0XzAsIFQgKmRzdF8xLCBU ICpkc3RfMiwgVCAqZHN0XzMsICAgICAgICAgICAgIFwKPiArICAgIGludCB3aWR0aCwgaW50IGhl aWdodCwgaW50IGRzdF9waXRjaCwgICAgICAgICAgICAgICBcCj4gKyAgICBpbnQgZHN0X3gsIGlu dCBkc3RfeSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgdW5zaWduZWQg Y2hhciB5X2NvbG9yLCB1bnNpZ25lZCBjaGFyIHVfY29sb3IsICAgICAgIFwKPiArICAgIHVuc2ln bmVkIGNoYXIgdl9jb2xvciwgdW5zaWduZWQgY2hhciBhX2NvbG9yLCAgICAgICBcCj4gKyAgICBp bnQgZnJhbWVfd2lkdGgsIGludCBmcmFtZV9oZWlnaHQKPiArCj4gKyNkZWZpbmUgQ09MT1JfRlVO QyhTZXRDb2xvckZ1bmMsIFQpIFwKPiArICAgIFQgKmRzdFs0XSA9IHsgZHN0XzAsIGRzdF8xLCBk c3RfMiwgZHN0XzMgfTsgICAgICAgICAgIFwKPiArICAgIGludCB4byA9IGJsb2NrSWR4LnggKiBi bG9ja0RpbS54ICsgdGhyZWFkSWR4Lng7ICAgICAgIFwKPiArICAgIGludCB5byA9IGJsb2NrSWR4 LnkgKiBibG9ja0RpbS55ICsgdGhyZWFkSWR4Lnk7ICAgICAgIFwKPiArICAgIGlmICh5byA+PSBo ZWlnaHQgfHwgeG8gPj0gd2lkdGgpIHJldHVybjsgICAgICAgICAgICAgIFwKPiArICAgIFNldENv bG9yRnVuYyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAg ICAgICBkc3QsIHhvLCB5bywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICB3aWR0aCwgaGVpZ2h0LCBkc3RfcGl0Y2gsICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiArICAgICAgICBkc3RfeCwgZHN0X3ksIHlfY29sb3IsIHVfY29sb3IsIHZfY29sb3Is IGFfY29sb3IsIFwKPiArICAgICAgICBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0KTsKPiArCj4g KyNkZWZpbmUgQ09QWV9LRVJORUxfQVJHUyhUKSBcCj4gKyAgICBjdWRhVGV4dHVyZU9iamVjdF90 IHNyY190ZXhfMCwgY3VkYVRleHR1cmVPYmplY3RfdCBzcmNfdGV4XzEsIFwKPiArICAgIGN1ZGFU ZXh0dXJlT2JqZWN0X3Qgc3JjX3RleF8yLCBjdWRhVGV4dHVyZU9iamVjdF90IHNyY190ZXhfMywg XAo+ICsgICAgVCAqZHN0XzAsIFQgKmRzdF8xLCBUICpkc3RfMiwgVCAqZHN0XzMsICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICBpbnQgZHN0X3dpZHRoLCBpbnQgZHN0X2hlaWdodCwgaW50 IGRzdF9waXRjaCwgICAgICAgICAgICAgICAgIFwKPiArICAgIGludCBkc3RfeCwgaW50IGRzdF95 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgaW50IHNy Y193aWR0aCwgaW50IHNyY19oZWlnaHQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gKyAgICBpbnQgZnJhbWVfd2lkdGgsIGludCBmcmFtZV9oZWlnaHQKPiArCj4gKyNkZWZpbmUg Q09QWV9GVU5DKFN0YWNrQ29weUZ1bmMsIFQpIFwKPiArICAgIGN1ZGFUZXh0dXJlT2JqZWN0X3Qg c3JjX3RleFs0XSA9ICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgeyBzcmNfdGV4XzAs IHNyY190ZXhfMSwgc3JjX3RleF8yLCBzcmNfdGV4XzMgfTsgXAo+ICsgICAgVCAqZHN0WzRdID0g eyBkc3RfMCwgZHN0XzEsIGRzdF8yLCBkc3RfMyB9OyAgICAgICAgIFwKPiArICAgIGludCB4byA9 IGJsb2NrSWR4LnggKiBibG9ja0RpbS54ICsgdGhyZWFkSWR4Lng7ICAgICBcCj4gKyAgICBpbnQg eW8gPSBibG9ja0lkeC55ICogYmxvY2tEaW0ueSArIHRocmVhZElkeC55OyAgICAgXAo+ICsgICAg aWYgKHlvID49IGRzdF9oZWlnaHQgfHwgeG8gPj0gZHN0X3dpZHRoKSByZXR1cm47ICAgXAo+ICsg ICAgU3RhY2tDb3B5RnVuYyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICBzcmNfdGV4LCBkc3QsIHhvLCB5bywgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCj4gKyAgICAgICAgZHN0X3dpZHRoLCBkc3RfaGVpZ2h0LCBkc3RfcGl0Y2gsICAgICAgICAg ICAgICAgXAo+ICsgICAgICAgIGRzdF94LCBkc3RfeSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKPiArICAgICAgICBzcmNfd2lkdGgsIHNyY19oZWlnaHQsICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCk7Cj4g Kwo+ICtleHRlcm4gIkMiIHsKPiArCj4gKyNkZWZpbmUgQ09MT1JfS0VSTkVMKEMsIFMpIFwKPiAr ICAgIF9fZ2xvYmFsX18gdm9pZCBTZXRDb2xvcl8jI0MjI1MoICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICBDT0xPUl9LRVJORUxfQVJHUyhTZXRDb2xvcl8jI0M6 Om91dF9UIyNTKSkgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAg ICAgICBDT0xPUl9GVU5DKFNldENvbG9yXyMjQzo6U2V0Q29sb3IjI1MsIFNldENvbG9yXyMjQzo6 b3V0X1QjI1MpIFwKPiArICAgIH0KPiArCj4gKyNkZWZpbmUgQ09MT1JfS0VSTkVMX1JBVyhDKSBc Cj4gKyAgICBDT0xPUl9LRVJORUwoQywpICAgICAgICBcCj4gKyAgICBDT0xPUl9LRVJORUwoQyxf dXYpCj4gKwo+ICsvLyBEZWZpbmUgY29sb3Iga2VybmVscyBmb3IgYWxsIHN1cHBvcnRlZCBmb3Jt YXRzCj4gK0NPTE9SX0tFUk5FTF9SQVcoeXV2NDIwcCkKPiArQ09MT1JfS0VSTkVMX1JBVyhudjEy KQo+ICtDT0xPUl9LRVJORUxfUkFXKHl1djQ0NHApCj4gK0NPTE9SX0tFUk5FTF9SQVcocDAxMGxl KQo+ICtDT0xPUl9LRVJORUxfUkFXKHAwMTZsZSkKPiArQ09MT1JfS0VSTkVMX1JBVyh5dXY0NDRw MTZsZSkKPiArQ09MT1JfS0VSTkVMX1JBVyhyZ2IwKQo+ICtDT0xPUl9LRVJORUxfUkFXKGJncjAp Cj4gK0NPTE9SX0tFUk5FTF9SQVcocmdiYSkKPiArQ09MT1JfS0VSTkVMX1JBVyhiZ3JhKQo+ICsK PiArI2RlZmluZSBDT1BZX0tFUk5FTChDLCBTKSBcCj4gKyAgICBfX2dsb2JhbF9fIHZvaWQgU3Rh Y2tDb3B5XyMjQyMjUyggICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgIENPUFlfS0VS TkVMX0FSR1MoU3RhY2tDb3B5XyMjQzo6b3V0X1QjI1MpKSAgICAgICAgICAgICAgICAgXAo+ICsg ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAgIENPUFlfRlVOQygoU3RhY2tDb3B5XyMjQzo6U3RhY2tDb3B5IyNTPCAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgIFN0YWNrQ29weVBpeGVsPFN0YWNr Q29weV8jI0M6OmluX1Q+LCAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICBTdGFja0Nv cHlQaXhlbDxTdGFja0NvcHlfIyNDOjppbl9UX3V2PiA+KSwgICAgIFwKPiArICAgICAgICAgICAg ICAgICAgU3RhY2tDb3B5XyMjQzo6b3V0X1QjI1MpICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICB9Cj4gKwo+ICsjZGVmaW5lIENPUFlfS0VSTkVMX1JBVyhDKSBcCj4gKyAgICBDT1BZX0tFUk5F TChDLCkgICBcCj4gKyAgICBDT1BZX0tFUk5FTChDLF91dikKPiArCj4gKy8vIERlZmluZSBjb3B5 IGtlcm5lbHMgZm9yIGFsbCBzdXBwb3J0ZWQgZm9ybWF0cwo+ICtDT1BZX0tFUk5FTF9SQVcoeXV2 NDIwcF95dXY0MjBwKQo+ICtDT1BZX0tFUk5FTF9SQVcobnYxMl9udjEyKQo+ICtDT1BZX0tFUk5F TF9SQVcoeXV2NDQ0cF95dXY0NDRwKQo+ICtDT1BZX0tFUk5FTF9SQVcocDAxMGxlX3AwMTBsZSkK PiArQ09QWV9LRVJORUxfUkFXKHAwMTZsZV9wMDE2bGUpCj4gK0NPUFlfS0VSTkVMX1JBVyh5dXY0 NDRwMTZsZV95dXY0NDRwMTZsZSkKPiArQ09QWV9LRVJORUxfUkFXKHJnYjBfcmdiMCkKPiArQ09Q WV9LRVJORUxfUkFXKGJncjBfYmdyMCkKPiArQ09QWV9LRVJORUxfUkFXKHJnYmFfcmdiYSkKPiAr Q09QWV9LRVJORUxfUkFXKGJncmFfYmdyYSkKPiArCj4gK30KPiBcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKPiAtLQo+IDIuMzQuMQo+Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=