Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp3689814rwi; Wed, 2 Nov 2022 01:51:27 -0700 (PDT) X-Google-Smtp-Source: AMsMyM64EolxppTVpACnzDkzTzcYVnvl4iheesUGq3SLoOkoen58Ar6OstvuW49j5V8b+jyhD+UK X-Received: by 2002:a17:907:a087:b0:7ad:a2ec:1afa with SMTP id hu7-20020a170907a08700b007ada2ec1afamr22305015ejc.151.1667379086893; Wed, 02 Nov 2022 01:51:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667379086; cv=none; d=google.com; s=arc-20160816; b=BIxtNe+P1+xZHgggMHXx5TpdJ/na38HassnOERd3k2aACgiNsNZwuLCeKRWp9J66u+ 2arOtgvKerS3dQ5fxbdSkLyRIx91ZQuJuirutRDrbbmYad1SaSPNN83zOCBqtJ7XEZSw 9x+0J0c04DGusX98D+IXKayzyoxpWTPyHOrFtLegjKMBvOI3C+IroKQVHc4CXRDHEnrf 3Ao6J4GkslH60R+VsPb1U2sRKBOIOYieQPUySbqA5tevE0YWWX4DBxlEr2FJH7mVmjJs LwgR1CNXKddCSwTu6r8Cbgz6UuvtZXUvbGANP0c9fotgwqmUv6ngTnfvpPkvJIBWZXB9 1Qpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=ICj6S/erRxOEaRS2tSmdU+hQ5mILejFGsJyRo2kbUrc=; b=ikHYI5NyYpqDYemMXmNyIa7qIgiVnWwySVtJFrjTu0dW+5vt8HBXeLcre60Tjri4rt +RMHpfVzbgG4H2FGEmPD0an86Amxfr0eFfLTVD3Q+P6FJSiPEIagXa1CNrYZ+LE4KzcP xCKfIVigoa2tHkOYefTefJDIpitm52Or6r7NKR/FDFMbyomWAqtHYNFztJ3z6c0Vog5z nY+HA0nN8K9ZqIazdapqQIj+ryBh0IRCM1oxtGnYyZVMCbYdifUQ6p+jMzcGREbInCHS VIOJk9gMOJ87V8TayLVUoUxfilD/SRYuwhR/orac9GjPJaxoYYFpGTrTTD7TRAMYi9nL aK3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@dylanvanassche.be header.s=MBO0001 header.b=EykJrJ92; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=dylanvanassche.be Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dt21-20020a170907729500b007adca5853c4si12800384ejc.279.2022.11.02.01.51.02; Wed, 02 Nov 2022 01:51:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@dylanvanassche.be header.s=MBO0001 header.b=EykJrJ92; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=dylanvanassche.be Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230064AbiKBIOt (ORCPT + 96 others); Wed, 2 Nov 2022 04:14:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229700AbiKBIOm (ORCPT ); Wed, 2 Nov 2022 04:14:42 -0400 Received: from mout-p-101.mailbox.org (mout-p-101.mailbox.org [IPv6:2001:67c:2050:0:465::101]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C6EE1F9D3; Wed, 2 Nov 2022 01:14:37 -0700 (PDT) Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4N2KRt1XYQz9sNb; Wed, 2 Nov 2022 09:14:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dylanvanassche.be; s=MBO0001; t=1667376874; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ICj6S/erRxOEaRS2tSmdU+hQ5mILejFGsJyRo2kbUrc=; b=EykJrJ92nsZCwKn2qNKJ7hDr+CcZNE1H89Yb9bI4hLtN2/vKmUrk8NjProB4PZEKk6Y8b6 bOHsrJl4ETwsheuWktCTFljk3OTWy7Y41/KTdT9HfsTLd2f77/Flx8HBIC0mgzvZP5aBuu xFuaOJWpGVGicxNeFAkwIdvrzR91+jVXJw9Nclf+EgEfEMoZ200pUHNa2EOwgdFiCBB1ky oWBIgmFmkzMw2SQ6/+V9fzhCU0UYDWxvqrUmR/mTIbYGVj9NhqxEmKieU1CQnyZ/7pJC7U 5/sDkvppAql6WZyvRzimFXpiKYn4bII2Mq/+w48gOzFnd4YFU1P7a9KYybaakQ== Message-ID: Subject: Re: [PATCH v4 1/2] leds: flash: add driver to support flash LED module in QCOM PMICs From: Dylan Van Assche To: Fenglin Wu , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, krzysztof.kozlowski@linaro.org, Pavel Machek , Gene Chen , Jacek Anaszewski , linux-leds@vger.kernel.org Cc: quic_collinsd@quicinc.com, quic_subbaram@quicinc.com, Luca Weiss Date: Wed, 02 Nov 2022 09:14:31 +0100 In-Reply-To: References: <20221025073802.2662564-1-quic_fenglinw@quicinc.com> <20221025073802.2662564-2-quic_fenglinw@quicinc.com> <0212be2972991ef2803c7f92c01217443def3dfd.camel@dylanvanassche.be> <578b6d6c-7a66-949c-c18f-3a962f9d37ff@quicinc.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CkhpIEZlbmdsaW4sCgo+IEhpIER5bGFuLAo+IAo+IAo+IE9uIDIwMjIvMTEvMiAxOjM5LCBEeWxh biBWYW4gQXNzY2hlIHdyb3RlOgo+ID4gCj4gPiBIaSBGZW5nbGluLAo+ID4gCj4gPiA+IE9uIDIw MjIvMTAvMzEgMTg6MzQsIER5bGFuIFZhbiBBc3NjaGUgd3JvdGU6Cj4gPiA+ID4gCj4gPiA+ID4g SGkgRmVuZ2xpbiwKPiA+ID4gPiAKPiA+ID4gPiBUaGFua3MgZm9yIHN1Ym1pdHRpbmcgdGhlc2Ug cGF0Y2hlcyEgVGhleSBhcmUgcmVhbGx5IG5pY2UhCj4gPiA+ID4gSSB0ZXN0ZWQgdGhlc2UgcGF0 Y2hlcyBvbiBhbiBTRE04NDUgYmFzZWQgZGV2aWNlIGFzIHRoZQo+ID4gPiA+IGRvd25zdHJlYW0K PiA+ID4gPiBkcml2ZXIgaXMgdGhlIHNhbWUgZm9yIHRoZSBQTUk4OTk4IGNvbXBhcmVkIHRvIHRo ZSBtZW50aW9uZWQKPiA+ID4gPiBQTUlDcwo+ID4gPiA+IGluCj4gPiA+ID4gdGhpcyBwYXRjaHNl cmllcy4KPiA+ID4gPiAKPiA+ID4gPiBUZXN0ZWQtYnk6IER5bGFuIFZhbiBBc3NjaGUgPG1lQGR5 bGFudmFuYXNzY2hlLmJlPiAjIHNkbTg0NS0KPiA+ID4gPiBzaGlmdC0KPiA+ID4gPiBheG9sb3Rs ICsgcG1pODk5OAo+ID4gPiA+IAo+ID4gPiBUaGFua3MgZm9yIHRlc3RpbmcgdGhlIHBhdGNoIGF0 IHlvdXIgc2lkZSwgRHlsYW4hCj4gPiA+IAo+ID4gPiA+ID4gPiBBZGQgaW5pdGlhbCBkcml2ZXIg dG8gc3VwcG9ydCBmbGFzaCBMRUQgbW9kdWxlIGZvdW5kIGluCj4gPiA+ID4gPiA+IFF1YWxjb21t Cj4gPiA+ID4gPiA+IFRlY2hub2xvZ2llcywgSW5jLiBQTUlDcy4gVGhlIGZsYXNoIG1vZHVsZSBj YW4gaGF2ZSAzIG9yIDQKPiA+ID4gPiA+ID4gY2hhbm5lbHMKPiA+ID4gPiA+ID4gYW5kIGVhY2gg Y2hhbm5lbCBjYW4gYmUgY29udHJvbGxlZCBpbmRlcGVkZW50bHkgYW5kIHN1cHBvcnQKPiA+ID4g PiA+ID4gZnVsbCA+Cj4gPiA+ID4gPiA+IHNjYWxlCj4gPiA+ID4gPiA+IGN1cnJlbnQgdXAgdG8g MS41IEEuIEl0IGFsc28gc3VwcG9ydHMgY29ubmVjdGluZyB0d28KPiA+ID4gPiA+ID4gY2hhbm5l bHMgPgo+ID4gPiA+ID4gPiB0b2dldGhlcgo+ID4gPiA+ID4gPiB0byBzdXBwbHkgb25lIExFRCBj b21wb25lbnQgd2l0aCBmdWxsIHNjYWxlIGN1cnJlbnQgdXAgdG8gMgo+ID4gPiA+ID4gPiBBLgo+ ID4gPiA+ID4gPiBJbiA+Cj4gPiA+ID4gPiA+IHRoYXQKPiA+ID4gPiA+ID4gY2FzZSwgdGhlIGN1 cnJlbnQgd2lsbCBiZSBzcGxpdCBvbiBlYWNoIGNoYW5uZWwKPiA+ID4gPiA+ID4gc3ltbWV0cmlj YWxseQo+ID4gPiA+ID4gPiBhbmQKPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+IGNoYW5uZWxz IHdpbGwgYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYXQgdGhlIHNhbWUgdGltZS4KPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEZlbmdsaW4gV3UgPHF1aWNfZmVuZ2xpbndA cXVpY2luYy5jb20+Cj4gPiA+ID4gPiA+IFRlc3RlZC1ieTogTHVjYSBXZWlzcyA8bHVjYS53ZWlz c0BmYWlycGhvbmUuY29tPiAjID4KPiA+ID4gPiA+ID4gc203MjI1LQo+ID4gPiA+ID4gPiBmYWly cGhvbmUtZnA0ICsgcG02MTUwbAo+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gwqDCoMKgZHJp dmVycy9sZWRzL2ZsYXNoL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTUgKwo+ID4g PiA+ID4gPiDCoMKgwqBkcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqAgfMKgwqAgMSArCj4gPiA+ID4gPiA+IMKgwqDCoGRyaXZlcnMvbGVkcy9mbGFzaC9sZWRzLXFj b20tZmxhc2guYyB8IDcwMCA+Cj4gPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ID4gPiA+ID4gPiDCoMKgwqAzIGZpbGVzIGNoYW5nZWQsIDcxNiBpbnNlcnRpb25zKCspCj4g PiA+ID4gPiA+IMKgwqDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xlZHMvZmxhc2gvbGVk cy1xY29tLWZsYXNoLmMKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwo+ID4gPiA+ID4gPiBiL2RyaXZlcnMvbGVkcy9mbGFzaC9L Y29uZmlnCj4gPiA+ID4gPiA+IGluZGV4IGQzZWI2ODliMTkzYy4uZjM2YTYwNDA5MjkwIDEwMDY0 NAo+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwo+ID4gPiA+ID4g PiArKysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwo+ID4gPiA+ID4gPiBAQCAtNjEsNiAr NjEsMjEgQEAgY29uZmlnIExFRFNfTVQ2MzYwCj4gPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSW5kZXBlbmRlbnQgY3VycmVudCBzb3VyY2VzIHN1cHBseSBmb3IgZWFjaAo+ID4gPiA+ ID4gPiBmbGFzaAo+ID4gPiA+ID4gPiBMRUQgPgo+ID4gPiA+ID4gPiBzdXBwb3J0IHRvcmNoCj4g PiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW5kIHN0cm9iZSBtb2RlLgo+ID4gPiA+ ID4gPiDCoMKgIAo+ID4gPiA+ID4gPiArY29uZmlnIExFRFNfUUNPTV9GTEFTSAo+ID4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIGZsYXNoIG1vZHVsZSBp bnNpZGUKPiA+ID4gPiA+ID4gUXVhbGNvbW0KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gVGVj aG5vbG9naWVzLCBJbmMuIFBNSUMiCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMg b24gTUZEX1NQTUlfUE1JQyB8fCBDT01QSUxFX1RFU1QKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE9GCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oGRlcGVuZHMgb24gVjRMMl9GTEFTSF9MRURfQ0xBU1MgfHwKPiA+ID4gPiA+ID4gIVY0TDJfRkxB U0hfTEVEX0NMQVNTCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBSRUdNQVAKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaGVscAo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oCBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBmbGFzaCBtb2R1bGUKPiA+ID4g PiA+ID4gZm91bmQgaW4KPiA+ID4gPiA+ID4gPiBRdWFsY29tbQo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoCBUZWNobm9sb2dpZXMsIEluYy4gUE1JQ3MuIFRoZSBmbGFzaCBtb2R1bGUgY2Fu Cj4gPiA+ID4gPiA+IGhhdmUgMwo+ID4gPiA+ID4gPiBvcgo+ID4gPiA+ID4gPiA0ID4gZmxhc2gg TEVECj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWxzIGFuZCBlYWNoIGNoYW5u ZWwgaXMgcHJvZ3JhbW1hYmxlIHRvCj4gPiA+ID4gPiA+IHN1cHBvcnQKPiA+ID4gPiA+ID4gdXAK PiA+ID4gPiA+ID4gdG8gPiAxLjUgQSBmdWxsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg IHNjYWxlIGN1cnJlbnQuIEl0IGFsc28gc3VwcG9ydHMgY29ubmVjdGluZyB0d28KPiA+ID4gPiA+ ID4gY2hhbm5lbHMnCj4gPiA+ID4gPiA+ID4gb3V0cHV0IHRvZ2V0aGVyCj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgIHRvIHN1cHBseSBvbmUgTEVEIGNvbXBvbmVudCB0byBhY2hpZXZlIGN1 cnJlbnQgdXAKPiA+ID4gPiA+ID4gdG8KPiA+ID4gPiA+ID4gMiBBLgo+ID4gPiA+ID4gPiA+IElu IHN1Y2ggY2FzZSwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgdGhlIHRvdGFsIExFRCBj dXJyZW50d2lsbCBiZSBzcGxpdCBzeW1tZXRyaWNhbGx5Cj4gPiA+ID4gPiA+IG9uCj4gPiA+ID4g PiA+IGVhY2gKPiA+ID4gPiA+ID4gPiBjaGFubmVsIGFuZAo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoCB0aGV5IHdpbGwgYmUgZW5hYmxlZC9kaXNhYmxlZCBhdCB0aGUgc2FtZSB0aW1lLgo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+IMKgwqDCoGNvbmZpZyBMRURTX1JUNDUwNQo+ID4gPiA+ ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgUlQ0NTA1 IGZsYXNobGlnaHQKPiA+ID4gPiA+ID4gY29udHJvbGxlciIKPiA+ID4gPiA+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXBlbmRzIG9uIEkyQyAmJiBPRgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9sZWRzL2ZsYXNoL01ha2VmaWxlID4KPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2xlZHMv Zmxhc2gvTWFrZWZpbGUKPiA+ID4gPiA+ID4gaW5kZXggMGFjYmRkYzBiOTFiLi44YTYwOTkzZjFh MjUgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvbGVkcy9mbGFzaC9NYWtlZmlsZQo+ ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUKPiA+ID4gPiA+ID4g QEAgLTYsNiArNiw3IEBAIG9iai0kKENPTkZJR19MRURTX0FTMzY0NUEpwqDCoMKgwqDCoMKgKz0g bGVkcy0KPiA+ID4gPiA+ID4gYXMzNjQ1YS5vCj4gPiA+ID4gPiA+IMKgwqDCoG9iai0kKENPTkZJ R19MRURTX0tURDI2OTIpwqDCoMKgwqDCoCs9IGxlZHMta3RkMjY5Mi5vCj4gPiA+ID4gPiA+IMKg wqDCoG9iai0kKENPTkZJR19MRURTX0xNMzYwMVgpwqDCoMKgwqDCoCs9IGxlZHMtbG0zNjAxeC5v Cj4gPiA+ID4gPiA+IMKgwqDCoG9iai0kKENPTkZJR19MRURTX01BWDc3NjkzKcKgwqDCoMKgKz0g bGVkcy1tYXg3NzY5My5vCj4gPiA+ID4gPiA+ICtvYmotJChDT05GSUdfTEVEU19RQ09NX0ZMQVNI KcKgwqArPSBsZWRzLXFjb20tZmxhc2gubwo+ID4gPiA+ID4gPiDCoMKgwqBvYmotJChDT05GSUdf TEVEU19SVDQ1MDUpwqDCoMKgwqDCoMKgKz0gbGVkcy1ydDQ1MDUubwo+ID4gPiA+ID4gPiDCoMKg wqBvYmotJChDT05GSUdfTEVEU19SVDg1MTUpwqDCoMKgwqDCoMKgKz0gbGVkcy1ydDg1MTUubwo+ ID4gPiA+ID4gPiDCoMKgwqBvYmotJChDT05GSUdfTEVEU19TR00zMTQwKcKgwqDCoMKgwqArPSBs ZWRzLXNnbTMxNDAubwo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2ZsYXNo L2xlZHMtcWNvbS1mbGFzaC5jID4KPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2xlZHMvZmxhc2gvbGVk cy1xY29tLWZsYXNoLmMKPiA+ID4gPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gPiA+ ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hOWZjZjYxNjAwYzMKPiA+ID4gPiA+ID4gLS0tIC9kZXYv bnVsbAo+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvbGVkcy1xY29tLWZsYXNo LmMKPiA+ID4gPiA+ID4gQEAgLTAsMCArMSw3MDAgQEAKPiA+ID4gPiA+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiA+ID4gPiA+ID4gKy8qCj4gPiA+ID4gPiA+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4g QWxsCj4gPiA+ID4gPiA+IHJpZ2h0cwo+ID4gPiA+ID4gPiA+IHJlc2VydmVkLgo+ID4gPiA+ID4g PiArICovCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVs ZC5oPgo+ID4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4KPiA+ID4gPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9sZWRzLmg+Cj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbGVkLWNs YXNzLWZsYXNoLmg+Cj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiA+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiA+ID4gPiA+ICsj aW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9y ZWdtYXAuaD4KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWZsYXNoLWxlZC1jbGFz cy5oPgo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsvKiByZWdpc3RlcnMgZGVmaW5pdGlvbnMg Ki8KPiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfVFlQRV9SRUfCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgwNAo+ID4gPiA+ID4gPiArI2RlZmluZSBGTEFTSF9UWVBFX1ZBTMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDE4Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKyNkZWZpbmUgRkxBU0hfU1VCVFlQRV9SRUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgwNQo+ID4gPiA+ID4gPiArI2RlZmluZSBGTEFTSF9TVUJUWVBFXzNDSF9WQUzCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MDQKPiA+ID4gPiAKPiA+ID4gPiBQTUk4OTk4IGhhcyBhbHNvIGEgMyBj aGFubmVsIGZsYXNoIHN1YnR5cGUsIGJ1dCByZXBvcnRzIDB4MDMgYXMKPiA+ID4gPiBzdWJ0eXBl LiBUaGUgZHJpdmVyIHdvbid0IHByb2JlIGJlY2F1c2Ugb2YgdGhpcyBzaW5jZSB0aGUKPiA+ID4g PiBzdWJ0eXBlCj4gPiA+ID4gZGlkCj4gPiA+ID4gbm90IG1hdGNoLiBDaGFuZ2luZyB0aGlzIHZh bHVlIHRvIDB4MDMgbWFkZSB0aGlzIGRyaXZlciB3b3JrIG9uCj4gPiA+ID4gU0RNODQ1Cj4gPiA+ ID4gYmFzZWQgZGV2aWNlIGFzIHdlbGwgd2l0aCBQTUk4OTk4LiBXb3VsZCB5b3UgY29uc2lkZXIK PiA+ID4gPiBzdXBwb3J0aW5nCj4gPiA+ID4gU0RNODQ1K1BNSTg5OTggYXMgd2VsbD8KPiA+ID4g PiAKPiA+ID4gSSBqdXN0IGRvdWJsZSBjaGVja2VkLCBmbGFzaCBtb2R1bGUgaW4gUE1JODk5OCAo d2l0aCBzdWJ0eXBlIDB4MykKPiA+ID4gaGFzCj4gPiA+IHZlcnkgc2ltaWxhciByZWdpc3RlciBk ZWZpbml0aW9uIGFzIHRoZSBmbGFzaCBtb2R1bGUgaW4gUE04MTUwQwo+ID4gPiAod2l0aAo+ID4g PiBzdWJ0eXBlIDB4NCkgdGhhdCB0aGUgZHJpdmVyIGlzIGludGVuZGVkIHRvIHN1cHBvcnQsIGl0 J3MgZ29vZAo+ID4gPiBrbm93Cj4gPiA+IHRoYXQKPiA+ID4gaXQncyA5OSUgd29yay4KPiA+ID4g SSBjYW4gYWRkIHRoZSAweDMgc3VidHlwZSBzdXBwb3J0IGJ1dCB0aGUgb25seSBwcm9ibGVtIGlz IEkKPiA+ID4gY291bGRuJ3QKPiA+ID4gZmluZCBhIGRldmljZSB3aXRoIFBNSTg5OTggdG8gdGVz dCBpdCBvdXQuIFdvdWxkIGl0IGJlIGdvb2QgaWYgSQo+ID4gPiBhZGQKPiA+ID4gdGhlCj4gPiA+ IHN1cHBvcnQgYW5kIHJlbHkgb24geW91ciB0ZXN0IHJlc3VsdD8KPiA+IAo+ID4gU3VyZSEgSSBh bHJlYWR5IGhhdmUgYSBicmFuY2ggbG9jYWxseSB0byB0ZXN0IHlvdXIgcGF0Y2hlcywgaGFwcHkK PiA+IHRvCj4gPiBoZWxwISBJIGhhdmUgYW4gU0RNODQ1IGRldmljZSBoZXJlIHdpdGggUE1JODk5 OCB3aXRoIDIgTEVEczogY29sZAo+ID4gYW5kCj4gPiB3YXJtIHdoaXRlLgo+ID4gCj4gVGhhbmsg eW91IGZvciB0aGUgaGVscCEKPiA+ID4gCj4gPiA+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX1NVQlRZ UEVfNENIX1ZBTMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwNwo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICsjZGVmaW5lIEZMQVNIX1RJTUVSX0VOX0JJVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDcpCj4gPiA+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX1RJTUVSX1ZBTF9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoEdFTk1BU0soNiwgMCkKPiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfVElN RVJfU1RFUF9NU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEwCj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKyNkZWZpbmUgRkxBU0hfU1RST0JFX0hXX1NXX1NFTF9CSVTCoMKgwqDCoMKgQklUKDIp Cj4gPiA+ID4gPiA+ICsjZGVmaW5lIFNXX1NUUk9CRV9WQUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAwCj4gPiA+ID4gPiA+ICsjZGVmaW5lIEhXX1NUUk9CRV9WQUzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxCj4gPiA+ID4gPiA+ICsjZGVmaW5lIEZMQVNI X0hXX1NUUk9CRV9UUklHR0VSX1NFTF9CSVTCoMKgwqDCoMKgwqDCoMKgQklUKDEpCj4gPiA+ID4g PiA+ICsjZGVmaW5lIFNUUk9CRV9MRVZFTF9UUklHR0VSX1ZBTMKgwqDCoMKgwqDCoMKgMAo+ID4g PiA+ID4gPiArI2RlZmluZSBTVFJPQkVfRURHRV9UUklHR0VSX1ZBTMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMQo+ID4gPiA+ID4gPiArI2RlZmluZSBGTEFTSF9TVFJPQkVfUE9MQVJJ VFlfQklUwqDCoMKgwqDCoMKgQklUKDApCj4gPiA+ID4gPiA+ICsjZGVmaW5lIFNUUk9CRV9BQ1RJ VkVfSElHSF9WQUzCoMKgwqDCoMKgwqDCoMKgwqAxCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4g KyNkZWZpbmUgRkxBU0hfSVJFU19NQVNLXzRDSMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgw KQo+ID4gPiA+ID4gPiArI2RlZmluZSBGTEFTSF9JUkVTX01BU0tfM0NIwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgR0VOTUFTSygxLCAwKQo+ID4gPiA+ID4gPiArI2RlZmluZSBGTEFTSF9JUkVTXzEy UDVNQV9WQUzCoMKgwqDCoMKgwqDCoMKgwqDCoDAKPiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxBU0hf SVJFU181TUFfVkFMXzRDSMKgwqDCoMKgwqDCoMKgwqDCoDEKPiA+ID4gPiA+ID4gKyNkZWZpbmUg RkxBU0hfSVJFU181TUFfVkFMXzNDSMKgwqDCoMKgwqDCoMKgwqDCoDMKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArLyogY29uc3RhbnRzICovCj4gPiA+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX0NV UlJFTlRfTUFYX1VBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE1MDAwMDAKPiA+ID4gPiA+ID4gKyNk ZWZpbmUgVE9SQ0hfQ1VSUkVOVF9NQVhfVUHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNTAwMDAwCj4g PiA+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX1RPVEFMX0NVUlJFTlRfTUFYX1VBwqDCoMKgwqDCoDIw MDAwMDAKPiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfQ1VSUkVOVF9ERUZBVUxUX1VBwqDCoMKg wqDCoMKgwqAxMDAwMDAwCj4gPiA+ID4gPiA+ICsjZGVmaW5lIFRPUkNIX0NVUlJFTlRfREVGQVVM VF9VQcKgwqDCoMKgwqDCoMKgMjAwMDAwCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyNkZWZp bmUgVE9SQ0hfSVJFU19VQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDUwMDAK PiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfSVJFU19VQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDEyNTAwCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyNkZWZpbmUgRkxB U0hfVElNRU9VVF9NQVhfVVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTI4MDAwMAo+ID4gPiA+ID4g PiArI2RlZmluZSBGTEFTSF9USU1FT1VUX1NURVBfVVPCoMKgwqDCoMKgwqDCoMKgwqDCoDEwMDAw Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK2VudW0gaHdfdHlwZSB7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoFFDT01fTVZGTEFTSF8zQ0gsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oFFDT01fTVZGTEFTSF80Q0gsCj4gPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICtlbnVtIGxlZF9tb2RlIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgRkxBU0hfTU9E RSwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgVE9SQ0hfTU9ERSwKPiA+ID4gPiA+ID4gK307 Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK2VudW0gbGVkX3N0cm9iZSB7Cj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoFNXX1NUUk9CRSwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgSFdf U1RST0JFLAo+ID4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArZW51bSB7 Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19TVEFUVVMxLAo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBSRUdfU1RBVFVTMiwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX1NU QVRVUzMsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19DSEFOX1RJTUVSLAo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfSVRBUkdFVCwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgUkVHX01PRFVMRV9FTiwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0lSRVNPTFVU SU9OLAo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfQ0hBTl9TVFJPQkUsCj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoFJFR19DSEFOX0VOLAo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBSRUdfTUFYX0NPVU5ULAo+ID4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArc3RydWN0IHJlZ19maWVsZCBtdmZsYXNoXzNjaF9yZWdzW1JFR19NQVhfQ09VTlRdID0gewo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHgwOCwgMCwgNykswqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ID4gc3RhdHVzMcKgwqDCoMKg wqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDA5LCAwLCA3KSzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4gPiA+IHN0YXR1czLC oMKgwqDCoMKgwqAqLwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHgwYSwg MCwgNykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gPiA+ID4gPiBz dGF0dXMzwqDCoMKgwqDCoMKgKi8KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxE X0lEKDB4NDAsIDAsIDcsIDMsIDEpLMKgwqDCoMKgwqDCoMKgwqAgLyoKPiA+ID4gPiA+ID4gY2hh bl90aW1lcsKgwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgw eDQzLCAwLCA2LCAzLCAxKSzCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4gPiA+IGl0YXJnZXTC oMKgwqDCoMKgwqAqLwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0Niwg NywgNykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gPiA+ID4gPiBt b2R1bGVfZW7CoMKgwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgw eDQ3LCAwLCA1KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4g PiA+IGlyZXNvbHV0aW9uwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVM RF9JRCgweDQ5LCAwLCAyLCAzLCAxKSzCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4gPiA+IGNo YW5fc3Ryb2JlwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDRj LCAwLCAyKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4gPiA+ IGNoYW5fZW7CoMKgwqDCoMKgwqAqLwo+ID4gPiA+ID4gPiArfTsKPiA+ID4gPiAKPiA+ID4gPiBU aGVzZSByZWdpc3RlcnMgbWFwIHBlcmZlY3RseSBmb3IgU0RNODQ1IHdpdGggUE1JODk5OCBhcyB3 ZWxsLAo+ID4gPiA+IGFkZGluZwo+ID4gPiA+IHN1cHBvcnQgZm9yIHRoaXMgc3VidHlwZSAoMHgw Mykgd291bGQgYmUgZ3JlYXQuCj4gPiA+ID4gCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0 cnVjdCByZWdfZmllbGQgbXZmbGFzaF80Y2hfcmVnc1tSRUdfTUFYX0NPVU5UXSA9IHsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEKDB4MDYsIDAsIDcpLMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiA+ID4gPiA+IHN0YXR1czHCoMKgwqDCoMKgwqAq Lwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHgwNywgMCwgNikswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ID4gc3RhdHVzMsKgwqDC oMKgwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDA5LCAwLCA3 KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+ID4gPiBzdGF0 dXMzwqDCoMKgwqDCoMKgKi8KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEX0lE KDB4M2UsIDAsIDcsIDQsIDEpLMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiA+ID4gPiA+IGNoYW5f dGltZXLCoMKgwqAqLwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTERfSUQoMHg0 MiwgMCwgNiwgNCwgMSkswqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ID4gaXRhcmdldMKg wqDCoMKgwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDQ2LCA3 LCA3KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+ID4gPiBt b2R1bGVfZW7CoMKgwqDCoCovCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgw eDQ5LCAwLCAzKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+ ID4gPiBpcmVzb2x1dGlvbsKgwqAqLwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklF TERfSUQoMHg0YSwgMCwgNiwgNCwgMSkswqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiA+ID4g Y2hhbl9zdHJvYmXCoMKgKi8KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEKDB4 NGUsIDAsIDMpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiA+ID4g PiA+IGNoYW5fZW7CoMKgwqDCoMKgwqAqLwo+ID4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArc3RydWN0IHFjb21fZmxhc2hfbGVkIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IHFjb21fZmxhc2hfY2hpcMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNoaXA7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2jCoMKgwqDC oMKgwqDCoGZsYXNoOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdjRsMl9mbGFz aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2NGwyX2ZsYXNoOwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbWF4X2ZsYXNoX2N1cnJlbnRfbQo+ID4gPiA+ID4gPiBhOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWF4X3RvcmNoX2N1cnJlbnRfbQo+ID4gPiA+ID4g PiBhOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWF4X3RpbWVvdXRfbXM7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFzaF9jdXJyZW50X21hOwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZmxhc2hfdGltZW91dF9tczsKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAqY2hhbl9pZDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTjCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFu X2NvdW50Owo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBib29swqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmFibGVkOwo+ID4gPiA+ID4g PiArfTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RydWN0IHFjb21fZmxhc2hfY2hpcCB7 Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZMKgwqDCoCps ZWRzOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFwX2ZpZWxkwqDCoMKg wqAgKnJfZmllbGRzW1JFR19NQVhfQ09VTlRdOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZGV2aWNlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpkZXY7Cj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBtdXRleMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvY2s7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGVudW0gaHdfdHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGh3X3R5cGU7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZWRzX2NvdW50Owo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWF4 X2NoYW5uZWxzOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9lbl9iaXRzOwo+ID4gPiA+ID4gPiArfTsK PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIGludCBzZXRfZmxhc2hfbW9kdWxlX2Vu KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLAo+ID4gPiA+ID4gPiBib29sCj4gPiA+ID4gPiA+ IGVuKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNv bV9mbGFzaF9jaGlwICpjaGlwPSBsZWQtPmNoaXA7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHU4IGxlZF9tYXNrID0gMCwgdmFsOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwg cmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsg aSA8IGxlZC0+Y2hhbl9jb3VudDsgaSsrKQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbGVkX21hc2sgfD0gQklUKGxlZC0+Y2hhbl9pZFtpXSAtIDEpOwo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJmNoaXAtPmxvY2sp Owo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZW4pCj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGlwLT5jaGFuX2VuX2JpdHMgfD0gbGVkX21hc2s7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNoaXAtPmNoYW5fZW5fYml0cyAmPSB+bGVkX21hc2s7Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdmFsID0gISFjaGlwLT5jaGFuX2VuX2Jp dHM7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX2ZpZWxkX3dyaXRlKGNo aXAtCj4gPiA+ID4gPiA+ID5yX2ZpZWxkc1tSRUdfTU9EVUxFX0VOXSwKPiA+ID4gPiA+ID4gdmFs KTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hpcC0+ZGV2LCAid3JpdGUgbW9k dWxlX2VuIGZhaWxlZCwKPiA+ID4gPiA+ID4gcmM9JWRcbiIsID4gcmMpOwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwo+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiA+ID4gK30KPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIGludCBzZXRfZmxhc2hfY3VycmVudChzdHJ1Y3Qg cWNvbV9mbGFzaF9sZWQgKmxlZCwKPiA+ID4gPiA+ID4gdTMyID4KPiA+ID4gPiA+ID4gY3VycmVu dF9tYSwgZW51bSBsZWRfbW9kZSBtb2RlKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9jaGlwICpjaGlwPSBsZWQtPmNoaXA7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBpdGFyZ191YSA9IGN1cnJlbnRfbWEgKiAxMDAwIC8g bGVkLT5jaGFuX2NvdW50Cj4gPiA+ID4gPiA+ICsgMTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgdTMyIGlyZXNfdWEgPSAobW9kZSA9PUZMQVNIX01PREUpID8gRkxBU0hfSVJFU19VQSA6Cj4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVE9SQ0hfSVJFU19VQTsKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgdTggdmFsLCBzaGlmdCwgaXJlc19tYXNrID0wLCBpcmVzX3ZhbCA9IDAsIGNoYW5f aWQ7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByYzsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAg KiBTcGxpdCB0aGUgY3VycmVudCBhY3Jvc3MgdGhlIGNoYW5uZWxzIGFuZCBzZXQKPiA+ID4gPiA+ ID4gdGhlCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIElSRVNPTFVUSU9OIGFuZCBJVEFS R0VUIHJlZ2lzdGVycyBhY2NvcmRpbmdseS4KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgICov Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsZWQtPmNoYW5fY291 bnQ7IGkrKykgewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hh bl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChpdGFyZ191YSA8IGlyZXNfdWEpCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gMDsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpdGFyZ191YSAvIGly ZXNfdWEgLSAxOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByYyA9IHJlZ21hcF9maWVsZHNfd3JpdGUoY2hpcC0KPiA+ID4gPiA+ID4gPiBy X2ZpZWxkc1tSRUdfSVRBUkdFVF0sID4gY2hhbl9pZCAtIDEsIHZhbCk7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybnJjOwo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo Y2hpcC0+aHdfdHlwZSA9PSBRQ09NX01WRkxBU0hfM0NIKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2hpZnQgPSAoY2hhbl9pZCAt IDEpICogMjsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpcmVzX21hc2sgfD0gRkxBU0hfSVJFU19NQVNLXzNDSCA8PAo+ID4gPiA+ID4g PiBzaGlmdDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpcmVzX3ZhbCB8PSAoKG1vZGUgPT0gRkxBU0hfTU9ERSkgPwo+ID4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAoRkxBU0hfSVJFU18xMlA1TUFfVkFMIDw8Cj4gPiA+ID4gPiA+IHNoaWZ0KSA6Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoChGTEFTSF9JUkVTXzVNQV9WQUxfM0NIIDw8Cj4gPiA+ID4gPiA+IHNo aWZ0KSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ug aWYgKGNoaXAtPmh3X3R5cGUgPT0KPiA+ID4gPiA+ID4gUUNPTV9NVkZMQVNIXzRDSCkgewo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNo aWZ0ID0gY2hhbl9pZCAtIDE7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJlc19tYXNrIHw9IEZMQVNIX0lSRVNfTUFTS180Q0ggPDwK PiA+ID4gPiA+ID4gc2hpZnQ7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJlc192YWwgfD0gKChtb2RlID09IEZMQVNIX01PREUpID8K PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKEZMQVNIX0lSRVNfMTJQNU1BX1ZBTCA8PAo+ID4gPiA+ID4gPiBz aGlmdCkgOgo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRkxBU0hfSVJFU181TUFfVkFMXzRDSCA8PAo+ID4g PiA+ID4gPiBzaGlmdCkpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuID4gcmVnbWFwX2ZpZWxkX3VwZGF0ZV9iaXRzKGNoaXAt Cj4gPiA+ID4gPiA+ID4gcl9maWVsZHNbUkVHX0lSRVNPTFVUSU9OXSwgaXJlc19tYXNrLCA+IGly ZXNfdmFsKTsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGlj IGludCBzZXRfZmxhc2hfdGltZW91dChzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCwKPiA+ID4g PiA+ID4gdTMyID4KPiA+ID4gPiA+ID4gdGltZW91dF9tcykKPiA+ID4gPiA+ID4gK3sKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfY2hpcCAqY2hpcD0gbGVkLT5j aGlwOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCB2YWwsIGNoYW5faWQ7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGludCByYywgaTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAvKiBzZXQgU0FGRVRZX1RJTUVSIGZvciBhbGwgdGhlIGNoYW5uZWxzIGNv bm5lY3RlZAo+ID4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gPiB0aGUgPgo+ID4gPiA+ID4gPiBzYW1l IExFRCAqLwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB0aW1lb3V0X21zID0gbWluX3QodTMy LCB0aW1lb3V0X21zLCBsZWQtCj4gPiA+ID4gPiA+ID4gbWF4X3RpbWVvdXRfbXMpOwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50OyBpKysp IHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5faWQgPSBs ZWQtPmNoYW5faWRbaV07Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2YWwgPSB0aW1lb3V0X21zIC8gRkxBU0hfVElNRVJfU1RFUF9NUzsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGNsYW1wX3QodTgsIHZhbCwgMCwKPiA+ ID4gPiA+ID4gRkxBU0hfVElNRVJfVkFMX01BU0spOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHRpbWVvdXRfbXMpCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsIHw9IEZMQVNIX1RJTUVSX0VO X0JJVDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmMgPSA+IHJlZ21hcF9maWVsZHNfd3JpdGUoY2hpcC0KPiA+ID4gPiA+ID4gPiByX2Zp ZWxkc1tSRUdfQ0hBTl9USU1FUl0sIGNoYW5faWQgLSAxLCA+IHZhbCk7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybnJjOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gK3N0YXRpYyBpbnQgc2V0X2ZsYXNoX3N0cm9iZShzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxl ZCwKPiA+ID4gPiA+ID4gZW51bSA+Cj4gPiA+ID4gPiA+IGxlZF9zdHJvYmUgc3Ryb2JlLCBib29s IHN0YXRlKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg cWNvbV9mbGFzaF9jaGlwICpjaGlwPSBsZWQtPmNoaXA7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHU4IG1hc2ssIHZhbCwgY2hhbl9pZCA9IDAsY2hhbl9tYXNrID0gMDsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgaW50IHJjLCBpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoC8qIFNldCBTVyBzdHJvYmUgY29uZmlnIGZvciBhbGwgY2hhbm5lbHMgY29ubmVj dGVkCj4gPiA+ID4gPiA+IHRvCj4gPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiBMRUQgPiAqLwo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50 OyBpKyspIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5f aWQgPSBsZWQtPmNoYW5faWRbaV07Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoc3Ryb2JlID09IFNXX1NUUk9CRSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPQo+ID4gPiA+ID4gPiBGSUVM RF9QUkVQKEZMQVNIX1NUUk9CRV9IV19TV19TRUxfQklULCA+IFNXX1NUUk9CRV9WQUwpOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9Cj4gPiA+ ID4gPiA+IEZJRUxEX1BSRVAoRkxBU0hfU1RST0JFX0hXX1NXX1NFTF9CSVQsID4gSFdfU1RST0JF X1ZBTCk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhbCB8PQo+ID4gPiA+ID4gPiBGSUVMRF9QUkVQKEZMQVNIX0hXX1NUUk9CRV9UUklH R0VSX1NFTF9CSVQsCj4gPiA+ID4gPiA+ID4gU1RST0JFX0xFVkVMX1RSSUdHRVJfVkFMKSB8Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg RklFTERfUFJFUChGTEFTSF9TVFJPQkVfUE9MQVJJVFlfQkkKPiA+ID4gPiA+ID4gVCwgPgo+ID4g PiA+ID4gPiBTVFJPQkVfQUNUSVZFX0hJR0hfVkFMKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gPiByZWdtYXBfZmllbGRzX3dyaXRlKGNoaXAtCj4gPiA+ ID4gPiA+ID4gcl9maWVsZHNbUkVHX0NIQU5fU1RST0JFXSwgY2hhbl9pZCAtIDEsID4gdmFsKTsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJucmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNoYW5fbWFzayB8PSBCSVQoY2hhbl9pZCAtIDEpOwo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyog ZW5hYmxlL2Rpc2FibGUgZmxhc2ggY2hhbm5lbHMgKi8KPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgbWFzayA9IGNoYW5fbWFzazsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdmFsID0gc3Rh dGUgPyBtYXNrIDogMDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfZmll bGRfdXBkYXRlX2JpdHMoY2hpcC0KPiA+ID4gPiA+ID4gPiByX2ZpZWxkc1tSRUdfQ0hBTl9FTl0s Cj4gPiA+ID4gPiA+ID4gbWFzaywgdmFsKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByYzsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPmVuYWJs ZWQgPSBzdGF0ZTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4g PiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9i cmlnaHRuZXNzX3NldChzdHJ1Y3QKPiA+ID4gPiA+ID4gbGVkX2NsYXNzZGV2X2ZsYXNoCj4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ICpmbGVkX2NkZXYsIHUzMiBicmlnaHRuZXNzKQo+ID4gPiA+ ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg KmxlZCA9Cj4gPiA+ID4gPiA+IGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsCj4gPiA+ID4gPiA+IHN0 cnVjdAo+ID4gPiA+ID4gPiA+IHFjb21fZmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbGVkLT5mbGFzaF9jdXJyZW50X21hID0gbWluX3Qo dTMyLCBsZWQtCj4gPiA+ID4gPiA+ID4gbWF4X2ZsYXNoX2N1cnJlbnRfbWEsID4gYnJpZ2h0bmVz cyAvIDEwMDApOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ ID4gK30KPiA+ID4gPiAKPiA+ID4gPiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIHRvcmNo IG1vZGUgZm9yIG1lIG9uIFBNSTg5OTguIElmCj4gPiA+ID4gdGhlCj4gPiA+ID4gYnJpZ2h0bmVz cyBpcyAwLCB0aGUgdG9yY2ggaXMgT0ZGIGFzIGV4cGVjdGVkLCBidXQgd2hlbiB0aGUKPiA+ID4g PiB0b3JjaAo+ID4gPiA+IGlzCj4gPiA+ID4gT04sIHlvdSBjYW5ub3QgY29udHJvbCB0aGUgYnJp Z2h0bmVzcy4gVGhlIGJyaWdodG5lc3MgaXMgdGhlCj4gPiA+ID4gc2FtZQo+ID4gPiA+IGZvcgo+ ID4gPiA+IFsxLCAyNTVdLiBJZiB0aGUgaGFyZHdhcmUgY2Fubm90IGNoYW5nZSB0aGUgYnJpZ2h0 bmVzcyBpbiB0b3JjaAo+ID4gPiA+IG1vZGUsCj4gPiA+ID4gaXQgd291bGQgYmUgbmljZSB0byBy ZXBvcnQgYSBtYXhfYnJpZ2h0bmVzcyB2YWx1ZSBvZiAxIGluc3RlYWQKPiA+ID4gPiBvZgo+ID4g PiA+IDI1NQo+ID4gPiA+IGZvciB1c2Vyc3BhY2UuIFRoaXMgY291bGQgYmUgYSBsaW1pdGF0aW9u IG9mIHRoZSBQTUk4OTk4LCBub3QKPiA+ID4gPiBzdXJlLgo+ID4gPiA+IERvIHlvdSBoYXZlIGFu eSBpbnNpZ2h0cyBoZXJlPyBUaGlzIGRyaXZlciBpcyBhbHJlYWR5IDk5JQo+ID4gPiA+IHdvcmtp bmcKPiA+ID4gPiBmb3IKPiA+ID4gPiBTRE04NDUrUE1JODk5OC4KPiA+ID4gPiAKPiA+ID4gPiBG bGFzaCBtb2RlIHdvcmtzIGdyZWF0LCB0aW1lb3V0ICYgYnJpZ2h0bmVzcyBjYW4gYmUgY29uZmln dXJlZAo+ID4gPiA+IGp1c3QKPiA+ID4gPiBmaW5lLgo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gSGVy ZSwgZnVuY3Rpb24gcWNvbV9mbGFzaF9icmlnaHRuZXNzX3NldCgpIGlzIHVzZWQgZm9yIHNldHRp bmcKPiA+ID4gYnJpZ2h0bmVzcyBpbiBmbGFzaCBtb2RlIGFuZCBpdCB3YXMgc3VwcG9zZWQgdG8g YmUgd29ya2luZyB3aXRoCj4gPiA+IGZvbGxvd2luZyBjb21tYW5kcyBjb21iaW5hdGlvbjoKPiA+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgZWNobyB4eHggPiBmbGFzaF9icmlnaHRuZXNzCj4gPiA+IMKg wqDCoMKgwqDCoMKgwqDCoGVjaG8gMSA+IGZsYXNoX3N0cm9iZcKgICh5b3Ugd2lsbCBuZWVkIHRv IHRvZ2dsZQo+ID4gPiBmbGFzaF9zdHJvYmUKPiA+ID4gd2hlbiB5b3UKPiA+ID4gZW5hYmxpbmcg aXQgYWdhaW4pCj4gPiA+IAo+ID4gPiBDYW4geW91IGNoZWNrIGlmIHlvdSBjYW4gc2VlIHRoZSBi cmlnaHRuZXNzIGNoYW5nZSBpbiBmbGFzaCBtb2RlCj4gPiA+IHdoZW4KPiA+ID4geW91IHVwZGF0 aW5nIHRoZSBmbGFzaF9icmlnaHRuZXNzIHZhbHVlIHdpdGggdGhlc2UgY29tbWFuZHM/Cj4gPiA+ IAo+ID4gPiBZb3UgY2FuIGVjaG8gYW55IHZhbHVlIGJldHdlZW4gWzAsIG1heF9mbGFzaF9icmln aHRuZXNzXSBpbnRvIHRoZQo+ID4gPiBmbGFzaF9icmlnaHRuZXNzLCB0aGVyZSBpcyBhICJtYXhf Zmxhc2hfYnJpZ2h0bmVzcyIgc3lzZnMgbm9kZQo+ID4gPiBhbmQKPiA+ID4gdGhlCj4gPiA+IHZh bHVlIGNvbWVzIGZyb20gRFQgcHJvcGVydHkgImZsYXNoLW1heC1taWNyb2FtcCIsIGV4LiBteSBk dHNpCj4gPiA+IG5vZGUKPiA+ID4gaGFzCj4gPiA+ICJmbGFzaC1tYXgtbWljcm9hbXAgPSA8MjAw MDAwMD47IiBkZWZpbmVkIHNvIEkgYW0gaGF2aW5nCj4gPiA+IGZvbGxvd2luZwo+ID4gPiB2YWx1 ZQo+ID4gPiBmb3IgbWF4X2ZsYXNoX2JyaWdodG5lc3M6Cj4gPiA+IAo+ID4gPiBrYWxhbWE6L3N5 cy9jbGFzcy9sZWRzL3doaXRlOmZsYXNoLTAgIyBjYXQgbWF4X2ZsYXNoX2JyaWdodG5lc3MKPiA+ ID4gMjAwMDAwMAo+ID4gPiAKPiA+ID4gQW5kIGJ5IGRlZmF1bHQgZmxhc2ggbW9kZSB1c2VzIDEy NTAwdUEgcmVzb2x1dGlvbiBzbyB5b3Ugd29uJ3QKPiA+ID4gc2VlCj4gPiA+IGJyaWdodG5lc3Mg Y2hhbmdlIHdoZW4geW91IHVwZGF0ZSBpdCB3aXRoIHZhbHVlcyBiZXR3ZWVuIFsxLAo+ID4gPiAx MjUwMF0uCj4gPiAKPiA+IFllcywgdGhpcyB3b3JrcyBwZXJmZWN0bHkgZmluZSBvbiBQTUk4OTk4 LiBJIGNhbiBhZGp1c3QgdGhlIGZsYXNoCj4gPiBicmlnaHRuZXNzIGFuZCBmbGFzaCB0aW1lb3V0 IHBlcmZlY3RseS4KPiA+IAo+ID4gPiAKPiA+ID4gSWYgeW91IHdhbnQgdG8gdXBkYXRlIHRoZSBi cmlnaHRuZXNzIGZvciB0b3JjaCBub2RlLCB5b3UgY2FuCj4gPiA+IGRpcmVjdGx5Cj4gPiA+IHVw ZGF0ZSB0aGUgImJyaWdodG5lc3MiIG5vZGUgd2l0aCB2YWx1ZXMgYmV0d2VlbiBbMCwgMjU1XSwg YW5kCj4gPiA+IGl0J3MKPiA+ID4gbWFwcGluZyB0byB0aGUgdG9yY2ggY3VycmVudCBiZXR3ZWVu IFswLCBsZWQtbWF4LW1pY3JvYW1wXS4KPiA+ID4gImxlZC1tYXgtbWljcm9hbXAiIGlzIGFsc28g aGFzIHZhbHVlIGNvbWluZyBmcm9tIHRoZSBEVCBwcm9wZXJ0eS4KPiA+ID4gCj4gPiA+IFRoaXMg d29ya2VkIGF0IG15IHNpZGUgb24gYm90aCBwbTgxNTBDIGFuZCBwbTg1NTAuSSB0aGluayBpdAo+ ID4gPiBzaG91bGQKPiA+ID4gd29yawo+ID4gPiBvbiBQTUk4OTk4IGFzIHdlbGwgYmVjYXVzZSB0 aGUgZmxhc2ggbW9kdWxlIGluIGl0IGlzIHZlcnkgc2ltaWxhcgo+ID4gPiB0bwo+ID4gPiB0aGUK PiA+ID4gb25lIGluIFBNODE1MGMuIExldCBtZSBrbm93IGlmIHlvdSBzdGlsbCBzZWUgc3VjaCBp c3N1ZXMgYXQgeW91cgo+ID4gPiBzaWRlLgo+ID4gPiBUaGFua3MKPiA+IAo+ID4gT25seSBoZXJl IEkgaGF2ZSBhbiBpc3N1ZSB3aXRoIFBNSTg5OTg6IHRoZSAiYnJpZ2h0bmVzcyIgbm9kZXMKPiA+ IHNob3VsZAo+ID4gY2hhbmdlIHRoZSBicmlnaHRuZXNzIG9mIHRoZSB0b3JjaCwgYnV0IGl0IGRv ZXNuJ3QgbWFrZSBhCj4gPiBkaWZmZXJlbmNlCj4gPiBoZXJlLiBXaGVuIEkgZG86Cj4gPiAKPiA+ IC0gZWNobyAwID4gYnJpZ2h0bmVzcyAtLT4gTEVEIHR1cm5zIE9GRgo+ID4gLSBlY2hvIDI1NSA+ IGJyaWdodG5lc3MgLS0+IExFRCB0dXJucyBPTgo+ID4gLSBlY2hvIDEwMCA+IGJyaWdodG5lc3Mg LS0+IExFRCBpcyBzdGlsbCBPTiwgYnV0IGJyaWdodG5lc3MgaXMgdGhlCj4gPiBzYW1lCj4gPiBh cyB3aXRoIDI1NS4KPiA+IAo+ID4gQ291bGQgaXQgYmUgdGhhdCBQTUk4OTk4IGlzIHNsaWdodGx5 IGRpZmZlcmVudCBoZXJlIHRoYW4gd2l0aAo+ID4gUE04MTUwYwo+ID4gZm9yIGV4YW1wbGU/IE1h eWJlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBicmlnaHRuZXNzIGZvciB0b3JjaD8KPiA+IAo+ID4gSGVy ZSdzIG15IERUUzoKPiA+IAo+ID4gKlBNSTg5OTgqCj4gPiAKPiA+IHBtaTg5OThfZmxhc2g6IGxl ZC1jb250cm9sbGVyQGQzMDAgewo+ID4gwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAicWNv bSxwbTYxNTBsLWZsYXNoLWxlZCIsICJxY29tLHNwbWktZmxhc2gtCj4gPiBsZWQiOwo+ID4gwqDC oMKgwqDCoMKgwqDCoHJlZyA9IDwweGQzMDA+Owo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyA9 ICJkaXNhYmxlZCI7Cj4gPiB9Owo+ID4gCj4gPiAqU0RNODQ1IFNISUZUIGF4b2xvdGwqCj4gPiAK PiA+ICZwbWk4OTk4X2ZsYXNoIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSAib2theSI7 Cj4gPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqBsZWQtMCB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0ZMQVNIOwo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb2xvciA9IDxMRURfQ09MT1JfSURfV0hJVEU+Owo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZWQtc291cmNlcyA9IDwxPjsKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLW1heC1taWNyb2FtcCA9IDwxODAwMDA+ Owo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFzaC1tYXgtbWljcm9hbXAg PSA8MTAwMDAwMD47Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYXNoLW1h eC10aW1lb3V0LXVzID0gPDEyODAwMDA+Owo+ID4gwqDCoMKgwqDCoMKgwqDCoH07Cj4gPiAKPiA+ IMKgwqDCoMKgwqDCoMKgwqBsZWQtMSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0ZMQVNIOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjb2xvciA9IDxMRURfQ09MT1JfSURfWUVMTE9XPjsKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLXNvdXJjZXMgPSA8Mj47Cj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC1tYXgtbWljcm9hbXAgPSA8MTgwMDAwPjsKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhc2gtbWF4LW1pY3JvYW1wID0gPDEwMDAw MDA+Owo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFzaC1tYXgtdGltZW91 dC11cyA9IDwxMjgwMDAwPjsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Owo+ID4gfTsKPiA+IAo+IFRo YW5rIHlvdSBmb3IgZ2V0dGluZyBiYWNrIGFsbCB0aGUgZGV0YWlscy4gVGhlIGRldmljZXRyZWUg bm9kZSBsb29rcwo+IGdvb2QgdG8gbWUuCj4gCj4gSSBjaGVja2VkIGFnYWluIGFuZCBjb25maXJt ZWQgdGhhdCB0aGUgZmxhc2ggbW9kdWxlcyBpbiBQTUk4OTk4IGFuZCAKPiBQTTgxNTBDIGhhdmUg dGhlIHNhbWUgcmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgSVRBUkdFVHggKDB4RDM0MyArIHgpCj4g YW5kIAo+IElSRVNPTFVUSU9OICgweEQzNDcpLCB0aGVzZSBhcmUgdGhlIG9ubHkgMiBzZXR0aW5n cyB3b3VsZCBpbXBhY3QgTEVEIAo+IGJyaWdodG5lc3MsIGFuZCBpbiB0b3JjaCBtb2RlLCBJUkVT T0xVVElPTiBpcyBmaXhlZCB0byA1bUEgYW5kIG9ubHkgCj4gSVRBUkdFVCBpcyB1cGRhdGVkIGFj Y29yZGluZ2x5Lgo+IAo+IEkgdXBkYXRlZCBteSB3b3Jrc3BhY2UgdG8gdXNlIHRoZSBzYW1lIGN1 cnJlbnQgZm9yIHRvcmNoIG1vZGUgYXMgeW91cgo+IHNldHRpbmdzIGluIGRldmljZXRyZWUgYW5k IHRyaWVkIGFnYWluIG9uIG15IFBNODE1MEMgZGV2aWNlLEkgY291bGQgCj4gbm90aWNlIHRoZSBi cmlnaHRuZXNzIGNoYW5nZSB3aGVuIGVjaG9pbmcgZGlmZmVyZW50IHZhbHVlcyB0byB0aGUgCj4g YnJpZ2h0bmVzcyBzeXNmcyBub2RlLCBob3dldmVyLCB3aGVuIEkgdXBkYXRpbmcgdmFsdWVzIGJl dHdlZW4gMjU1Cj4gYW5kIAo+IDIwMCwgaXQgd2Fzbid0IGEgdmVyeSBub3RpY2VhYmxlIGJyaWdo dG5lc3MgY2hhbmdlIHdpdGggbmFrZWQgZXlzLAo+IGJ1dCBJIAo+IGNvdWxkIHNlZSB0aGUgSVRS QUdFVHggcmVnaXN0ZXIgY2hhbmdlZCBhY2NvcmRpbmdseSB3aGVuIHJlYWRpbmcgaXRzIAo+IHZh bHVlIGJhY2sgZnJvbSB0aGUgcmVnbWFwIGRlYnVnZnMgbm9kZS4KPiAKPiBDYW4geW91IHRyeSB0 aGUgc2FtZSBhbmQgc2VlIGlmIHRoZSByZWdpc3RlciBnb3QgdXBkYXRlZCBhY2NvcmRpbmdseSAK PiB3aGVuIHlvdSB1cGRhdGluZyBicmlnaHRuZXNzIHZhbHVlcz8gSWYgeWVzLCBJIHdvdWxkIHdv bmRlciBpZiB0aGUKPiBMRUQgCj4gY29tcG9uZW50IG9uIHlvdXIgZGV2aWNlIGhhcyB1cHBlciBj dXJyZW50IGxpbWl0IGluIHRvcmNoIG1vZGUgY2xvc2UKPiB0byAKPiAoMTAwIC8gMjU1ICkgKiAx ODBtQSBzbyB5b3UgdGhhdCB5b3UgY2FuJ3Qgb2JzZXJ2ZSB0aGUgYnJpZ2h0bmVzcwo+IGNoYW5n ZSAKPiB3aGVuIHVwZGF0aW5nIGJldHdlZW4gMTAwIHRvIDI1NS4gQW5vdGhlciBlYXNpZXIgdGhp bmcgdG8gdHJ5LCBjYW4KPiB5b3UgCj4gZWNobyBhIGxvd2VyIGJyaWdodG5lc3MgdmFsdWUsIHN1 Y2ggYXMgMTAsIHRvIHNlZSBpZiB5b3UgY2FuIG5vdGljZQo+IHRoZSAKPiBicmlnaHRuZXNzIGNo YW5nZT8KPiAKCkFoYSEgSXQgZG9lcyBzZWVtIHRvIHdvcmsgcGFydGlhbGx5IQoKSSB0cmllZCBp dCB3aXRoIGJyaWdodG5lc3MgMCAtLT4gMjU1IC0tPiAxLiBUaGlzIG9yZGVyIGtlZXBzIHRoZQpo aWdoZXN0IGJyaWdodG5lc3MgYXQgYWxsIHRpbWVzLCBtYXRjaGluZyAyNTUuIFRoZSBvdGhlciB3 YXkgYXJvdW5kOiAwCi0tPiAxIC0tPiAyNTUga2VlcHMgdGhlIGxvd2VzdCBicmlnaHRuZXNzLCBt YXRjaGluZyAxLgpDaGFuZ2luZyB0aGUgYnJpZ2h0bmVzcyBvbmx5IHdvcmtzIGlmIHRoZSBMRUQg d2FzIHR1cm5lZCBPRkYgZmlyc3Q6CgowIC0tPiAyNTUgLS0+IDAgLS0+IDEgCjAgLS0+IDEgLS0+ IDAgLS0+IDI1NSAKCmJvdGggd29yayBmaW5lLCB2ZXJpZmllZCBpdCB3aXRoIHRoZSBmb2xsb3dp bmcgc2hlbGwgY29tbWFuZHMgKGFzc3VtZWQKdGhhdCB0aGUgTEVEIHdhcyB0dXJuZWQgT0ZGIHRv IHN0YXJ0KToKCmVjaG8gMSA+IGJyaWdodG5lc3MgJiYgc2xlZXAgMyAmJiBlY2hvIDAgPiBicmln aHRuZXNzICYmIGVjaG8gMjU1ID4KYnJpZ2h0bmVzcwplY2hvIDI1NSA+IGJyaWdodG5lc3MgJiYg c2xlZXAgMyAmJiAgZWNobyAwID4gYnJpZ2h0bmVzcyAmJiBlY2hvIDEgPgpicmlnaHRuZXNzCgpN YXliZSBhIHJlZ2lzdGVyIG5lZWRzIHRvIGJlIHJlc2V0IHdoZW4gdGhlIGJyaWdodG5lc3MgY2hh bmdlcz8KCj4gPiAKPiA+ID4gCj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQg cWNvbV9mbGFzaF90aW1lb3V0X3NldChzdHJ1Y3QKPiA+ID4gPiA+ID4gbGVkX2NsYXNzZGV2X2Zs YXNoID4KPiA+ID4gPiA+ID4gKmZsZWRfY2RldiwgdTMyIHRpbWVvdXQpCj4gPiA+ID4gPiA+ICt7 Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0K PiA+ID4gPiA+ID4gY29udGFpbmVyX29mKGZsZWRfY2RldiwKPiA+ID4gPiA+ID4gc3RydWN0Cj4g PiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPmZsYXNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0IC8gMTAw MDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ICt9Cj4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zdHJvYmVfc2V0 KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2gKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAqZmxl ZF9jZGV2LCBib29sIHN0YXRlKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9Cj4gPiA+ID4gPiA+IGNvbnRhaW5lcl9v ZihmbGVkX2NkZXYsCj4gPiA+ID4gPiA+IHN0cnVjdAo+ID4gPiA+ID4gPiA+IHFjb21fZmxhc2hf bGVkLCBmbGFzaCk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByYzsKPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF9jdXJyZW50KGxl ZCwgbGVkLT5mbGFzaF9jdXJyZW50X21hLAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEZMQVNI X01PREUpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gc2V0X2ZsYXNoX3RpbWVvdXQobGVkLCBs ZWQtPmZsYXNoX3RpbWVvdXRfbXMpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMg PCAwKQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJj Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gc2V0X2ZsYXNo X21vZHVsZV9lbihsZWQsIHN0YXRlKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJj IDwgMCkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy YzsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X2Zs YXNoX3N0cm9iZShsZWQsU1dfU1RST0JFLCBzdGF0ZSk7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zdHJvYmVfZ2V0KHN0cnVj dCBsZWRfY2xhc3NkZXZfZmxhc2gKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAqZmxlZF9jZGV2 LCBib29sICpzdGF0ZSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPQo+ID4gPiA+ID4gPiBjb250YWluZXJfb2YoZmxl ZF9jZGV2LAo+ID4gPiA+ID4gPiBzdHJ1Y3QKPiA+ID4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCwg Zmxhc2gpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCpzdGF0ZSA9 IGxlZC0+ZW5hYmxlZDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFz aF9mYXVsdF9nZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaAo+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ICpmbGVkX2NkZXYsIHUzMiAqZmF1bHQpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0KPiA+ID4gPiA+ID4g Y29udGFpbmVyX29mKGZsZWRfY2RldiwKPiA+ID4gPiA+ID4gc3RydWN0Cj4gPiA+ID4gPiA+ID4g cWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHFjb21fZmxhc2hfY2hpcCAqY2hpcD0gbGVkLT5jaGlwOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB1OCBzaGlmdCwgY2hhbl9pZCA9IDAsIGNoYW5fbWFzayA9IDA7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHU4IG90X21hc2sgPSAwLCBvY19tYXNrID0gMCwgdXZfbWFzayA9IDA7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiB2YWwsIGZhdWx0X3N0cyA9IDA7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByYzsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqByYyA9IHJlZ21hcF9maWVsZF9yZWFkKGNoaXAtPnJfZmllbGRzW1JFR19T VEFUVVMxXSwKPiA+ID4gPiA+ID4gJnZhbCk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyYyA8IDApCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0g MDsgaSA8IGxlZC0+Y2hhbl9jb3VudDsgaSsrKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjaGFuX2lkID0gbGVkLT5jaGFuX2lkW2ldOwo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2hpZnQgPSAoY2hhbl9pZCAtIDEpICogMjsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBCSVQo c2hpZnQpKQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGZhdWx0X3N0cyB8PQo+ID4gPiA+ID4gPiBMRURfRkFVTFRfU0hPUlRfQ0lSQ1VJ VDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5fbWFzayB8 PSBCSVQoY2hhbl9pZCAtIDEpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfZmllbGRfcmVhZChj aGlwLT5yX2ZpZWxkc1tSRUdfU1RBVFVTMl0sCj4gPiA+ID4gPiA+ICZ2YWwpOwo+ID4gPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChjaGlwLT5od190eXBlID09IFFDT01fTVZGTEFTSF8zQ0gpIHsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG90X21hc2sgPSAweDBmOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2NfbWFzayA9IDB4ZTA7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1dl9tYXNrID0gMHgxMDsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChjaGlwLT5od190eXBlID09IFFD T01fTVZGTEFTSF80Q0gpIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG90X21hc2sgPSAweDcwOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgb2NfbWFzayA9IDB4MGU7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB1dl9tYXNrID0gMHgwMTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBvdF9tYXNrKQo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmF1bHRfc3RzIHw9IExF RF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo dmFsICYgb2NfbWFzaykKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGZhdWx0X3N0cyB8PSBMRURfRkFVTFRfT1ZFUl9DVVJSRU5UOwo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBpZiAodmFsICYgdXZfbWFzaykKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGZhdWx0X3N0cyB8PSBMRURfRkFVTFRfSU5QVVRfVk9MVEFHRTsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHJlZ21hcF9maWVsZF9yZWFk KGNoaXAtPnJfZmllbGRzW1JFR19TVEFUVVMzXSwKPiA+ID4gPiA+ID4gJnZhbCk7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKGNoaXAtPmh3X3R5cGUgPT0gUUNPTV9NVkZMQVNIXzNDSCkgewo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZhbCAmIGNoYW5fbWFz aykKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX1RJTUVPVVQ7Cj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoH0gZWxzZSBpZiAoY2hpcC0+aHdfdHlwZSA9PSBRQ09NX01WRkxBU0hfNENIKSB7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwg bGVkLT5jaGFuX2NvdW50OyBpKyspIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFuX2lkID0gbGVkLT5jaGFuX2lkW2ldOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNo aWZ0ID0gKGNoYW5faWQgLSAxKSAqIDI7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZhbCAmIEJJVChzaGlmdCkpCj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGZhdWx0X3N0cyB8PQo+ID4gPiA+ID4gPiBMRURfRkFVTFRfVElNRU9VVDsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCpm YXVsdCA9IGZhdWx0X3N0czsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4g PiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9m bGFzaF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0Cj4gPiA+ID4gPiA+IGxlZF9jbGFzc2RldiA+ Cj4gPiA+ID4gPiA+ICpsZWRfY2RldiwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVudW0gbGVkX2JyaWdodG5lc3MKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBicmlnaHRuZXNz KQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2Ns YXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYgPQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QKPiA+ID4gPiA+ID4gbGVk X2NsYXNzZGV2X2ZsYXNoLCA+Cj4gPiA+ID4gPiA+IGxlZF9jZGV2KTsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPQo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGFpbmVyX29mKGZsZWRfY2Rldiwgc3RydWN0 Cj4gPiA+ID4gPiA+IHFjb21fZmxhc2hfbGVkLAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBm bGFzaCk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBjdXJyZW50X21hID0gYnJpZ2h0 bmVzcyAqIGxlZC0KPiA+ID4gPiA+ID4gPm1heF90b3JjaF9jdXJyZW50X21hCj4gPiA+ID4gPiA+ IC8gPgo+ID4gPiA+ID4gPiBMRURfRlVMTDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgYm9v bCBlbmFibGUgPSAhIWJyaWdodG5lc3M7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBy YzsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFz aF9jdXJyZW50KGxlZCwgY3VycmVudF9tYSwKPiA+ID4gPiA+ID4gVE9SQ0hfTU9ERSk7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgLyogZGlzYWJsZSBmbGFzaCB0aW1lb3V0IGZvcnRvcmNoIExFRCAqLwo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF90aW1lb3V0KGxlZCwgMCk7 Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBzZXRfZmxhc2hfbW9kdWxlX2VuKGxlZCwgZW5hYmxl KTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X2ZsYXNoX3N0cm9iZShsZWQsU1dfU1RS T0JFLCBlbmFibGUpOwo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGxlZF9mbGFzaF9vcHMgcWNvbV9mbGFzaF9vcHMgPSB7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5mbGFzaF9icmlnaHRuZXNzX3NldCA9IHFjb21fZmxhc2hf YnJpZ2h0bmVzc19zZXQsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5zdHJvYmVfc2V0ID0g cWNvbV9mbGFzaF9zdHJvYmVfc2V0LAo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAuc3Ryb2Jl X2dldCA9IHFjb21fZmxhc2hfc3Ryb2JlX2dldCwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg LnRpbWVvdXRfc2V0ID0gcWNvbV9mbGFzaF90aW1lb3V0X3NldCwKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgLmZhdWx0X2dldCA9IHFjb21fZmxhc2hfZmF1bHRfZ2V0LAo+ID4gPiA+ID4gPiAr fTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX1Y0TDJf RkxBU0hfTEVEX0NMQVNTKQo+ID4gPiA+ID4gPiArc3RhdGljIGludCBxY29tX2ZsYXNoX2V4dGVy bmFsX3N0cm9iZV9zZXQoc3RydWN0Cj4gPiA+ID4gPiA+IHY0bDJfZmxhc2ggPgo+ID4gPiA+ID4g PiAqdjRsMl9mbGFzaCwgYm9vbCBlbmFibGUpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsYXNoID0gdjRsMl9mbGFz aC0KPiA+ID4gPiA+ID4gPiBmbGVkX2NkZXY7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGZsYXNoLAo+ID4gPiA+ID4g PiBzdHJ1Y3QKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWQsIGZsYXNo KTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJjOwo+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gc2V0X2ZsYXNoX21vZHVsZV9lbihsZWQsIGVuYWJs ZSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGVuYWJsZSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzZXRfZmxhc2hfc3Ryb2JlKGxlZCwgSFdfU1RS T0JFLAo+ID4gPiA+ID4gPiB0cnVlKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHNldF9mbGFz aF9zdHJvYmUobGVkLCBTV19TVFJPQkUsCj4gPiA+ID4gPiA+IGZhbHNlKTsKPiA+ID4gPiA+ID4g K30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MK PiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9pbnRlbnNpdHlfdG9fbGVkX2JyaWdodG5lc3MoCj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdjRsMl9mbGFzaCAq djRsMl9mbGFzaCwgczMyCj4gPiA+ID4gPiA+IGludGVuc2l0eSkKPiA+ID4gPiA+ID4gK3sKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCAqZmxhc2gg PSB2NGwyX2ZsYXNoLQo+ID4gPiA+ID4gPiA+IGZsZWRfY2RldjsKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxhc2gs Cj4gPiA+ID4gPiA+IHN0cnVjdAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBxY29tX2ZsYXNo X2xlZCwgZmxhc2gpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgY3VycmVudF9tYSA9 IGludGVuc2l0eS8gMTAwMDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBjdXJyZW50X21hID0gbWluX3QodTMyLCBjdXJyZW50X21hLCA+IGxlZC0KPiA+ID4gPiA+ID4g PiBtYXhfdG9yY2hfY3VycmVudF9tYSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgh Y3VycmVudF9tYSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBMRURfT0ZGOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBjdXJyZW50X21hICogTEVEX0ZVTEwvIGxlZC0KPiA+ID4gPiA+ID4gPiBtYXhfdG9yY2hf Y3VycmVudF9tYTsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3Rh dGljIHMzMiBxY29tX2ZsYXNoX2JyaWdodG5lc3NfdG9fbGVkX2ludGVuc2l0eShzdHJ1Y3QKPiA+ ID4gPiA+ID4gdjRsMl9mbGFzaCA+ICp2NGwyX2ZsYXNoLAo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZW51bSBsZWRfYnJpZ2h0bmVzcwo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IGJyaWdodG5lc3MpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsYXNoID0gdjRsMl9mbGFzaC0KPiA+ID4gPiA+ID4g PiBmbGVkX2NkZXY7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNo X2xlZCAqbGVkID0gY29udGFpbmVyX29mKGZsYXNoLAo+ID4gPiA+ID4gPiBzdHJ1Y3QKPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gKGJyaWdodG5lc3MgKiBsZWQtPm1h eF90b3JjaF9jdXJyZW50X21hICoKPiA+ID4gPiA+ID4gMTAwMCkKPiA+ID4gPiA+ID4gLyA+Cj4g PiA+ID4gPiA+IExFRF9GVUxMOwo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmxhc2hfb3BzIHFjb21fdjRsMl9mbGFzaF9v cHMgPSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5leHRlcm5hbF9zdHJvYmVfc2V0ID0K PiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9leHRlcm5hbF9zdHJvYmVfc2V0LAo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqAuaW50ZW5zaXR5X3RvX2xlZF9icmlnaHRuZXNzPSA+Cj4gPiA+ID4gPiA+ IHFjb21fZmxhc2hfaW50ZW5zaXR5X3RvX2xlZF9icmlnaHRuZXNzLAo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqAubGVkX2JyaWdodG5lc3NfdG9faW50ZW5zaXR5PSA+Cj4gPiA+ID4gPiA+IHFj b21fZmxhc2hfYnJpZ2h0bmVzc190b19sZWRfaW50ZW5zaXR5LAo+ID4gPiA+ID4gPiArfTsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIGludCBxY29tX2ZsYXNoX3Y0bDJfaW5pdChz dHJ1Y3QgcWNvbV9mbGFzaF9sZWQKPiA+ID4gPiA+ID4gKmxlZCwKPiA+ID4gPiA+ID4gc3RydWN0 Cj4gPiA+ID4gPiA+ID4gZndub2RlX2hhbmRsZSAqZndub2RlKQo+ID4gPiA+ID4gPiArewo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdjRsMl9mbGFzaF9jb25maWcgdjRsMl9jZmcg PSB7MH07Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfZmxhc2hfc2V0dGlu ZyAqcyA9ICZ2NGwyX2NmZy5pbnRlbnNpdHk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKCEobGVkLT5mbGFzaC5sZWRfY2Rldi5mbGFncyAmCj4gPiA+ID4gPiA+ IExFRF9ERVZfQ0FQX0ZMQVNIKSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oHMtPm1pbiA9IHMtPnN0ZXAgPSBUT1JDSF9JUkVTX1VBICogbGVkLT5jaGFuX2NvdW50Owo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzLT5tYXggPSBsZWQtPm1heF90b3JjaF9jdXJyZW50X21h ICogMTAwMDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcy0+dmFsID0gbWluX3QodTMyLCBz LT5tYXgsCj4gPiA+ID4gPiA+IFRPUkNIX0NVUlJFTlRfREVGQVVMVF9VQSk7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ryc2NweSh2NGwyX2NmZy5kZXZfbmFtZSwg PmxlZC0KPiA+ID4gPiA+ID4gPmZsYXNoLmxlZF9jZGV2LmRldi0KPiA+ID4gPiA+ID4gPiBrb2Jq Lm5hbWUsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplb2YodjRsMl9jZmcu ZGV2Cj4gPiA+ID4gPiA+IF9uYW0KPiA+ID4gPiA+ID4gZSkpOwo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB2NGwyX2NmZy5oYXNfZXh0ZXJuYWxfc3Ryb2JlPSAxOwo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqB2NGwyX2NmZy5mbGFzaF9mYXVsdHMgPSBMRURfRkFVTFRfSU5QVVRfVk9MVEFH RSB8ID4KPiA+ID4gPiA+ID4gTEVEX0ZBVUxUX09WRVJfQ1VSUkVOVCB8Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBMRURfRkFVTFRfU0hPUlRfQ0lSQ1VJVCB8Cj4g PiA+ID4gPiA+IExFRF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFID4gfCBMRURfRkFVTFRfVElNRU9V VDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPnY0bDJfZmxh c2ggPSB2NGwyX2ZsYXNoX2luaXQobGVkLT5jaGlwLT5kZXYsCj4gPiA+ID4gPiA+IGZ3bm9kZSwg Pgo+ID4gPiA+ID4gPiAmbGVkLT5mbGFzaCwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCZxY29tX3Y0bDJfZmxhc2hfb3AKPiA+ID4gPiA+ID4gcywgPgo+ID4gPiA+ID4gPiAmdjRs Ml9jZmcpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUl9PUl9aRVJP KGxlZC0+djRsMl9mbGFzaCk7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsjIGVsc2UKPiA+ ID4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF92NGwyX2luaXQoc3RydWN0IHFjb21fZmxh c2hfbGVkCj4gPiA+ID4gPiA+ICpsZWQsCj4gPiA+ID4gPiA+IHN0cnVjdAo+ID4gPiA+ID4gPiA+ IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ICsjZW5kaWYKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArc3RhdGljIGludCBxY29tX2ZsYXNoX3JlZ2lzdGVyX2xl ZF9kZXZpY2Uoc3RydWN0IGRldmljZQo+ID4gPiA+ID4gPiAqcGFyZW50LAo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUs IHN0cnVjdAo+ID4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCA+Cj4gPiA+ID4gPiA+ICpsZWQpCj4g PiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNo X2NoaXAgKmNoaXA9IGxlZC0+Y2hpcDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGFzaDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGxlZF9mbGFzaF9zZXR0aW5nICpzOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1 MzIgY291bnQsIHZhbDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGNoYW5uZWxzWzRd Owo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgcmM7Cj4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZmxhc2ggPSAmbGVkLT5mbGFzaDsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgY291bnQgPSBmd25vZGVfcHJvcGVydHlfY291bnRfdTMyKG5vZGUsICJs ZWQtCj4gPiA+ID4gPiA+IHNvdXJjZXMiKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KGNvdW50IDw9IDApIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9lcnIoY2hpcC0+ZGV2LCAiTm8gbGVkLXNvdXJjZXMKPiA+ID4gPiA+ID4gc3BlY2lmaWVk XG4iKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RU5PREVWOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNvdW50ID4gY2hpcC0+bWF4X2NoYW5uZWxzKSB7Cj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGNoaXAtPmRl diwgImxlZC1zb3VyY2VzIGNvdW50ICV1Cj4gPiA+ID4gPiA+IGV4Y2VlZHMgPgo+ID4gPiA+ID4g PiBtYXhpbXVtIGNoYW5uZWwgY291bnQgJXVcbiIsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvdW50LCBj aGlwLT5tYXhfY2hhbm5lbHMpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9y ZWFkX3UzMl9hcnJheShub2RlLCAibGVkLQo+ID4gPiA+ID4gPiBzb3VyY2VzIiwgPgo+ID4gPiA+ ID4gPiBjaGFubmVscywgY291bnQpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMg PCAwKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KGNoaXAtPmRldiwgImdldCBsZWQtc291cmNlcyBmYWlsZWQsCj4gPiA+ID4gPiA+IHJjPSVkXG4i LCA+IHJjKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByYzsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoGxlZC0+Y2hhbl9jb3VudCA9IGNvdW50Owo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBsZWQtPmNoYW5faWQgPSBkZXZtX2tjYWxsb2MoY2hpcC0+ZGV2LCBjb3Vu dCwKPiA+ID4gPiA+ID4gc2l6ZW9mKHU4KSwgPgo+ID4gPiA+ID4gPiBHRlBfS0VSTkVMKTsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFsZWQtPmNoYW5faWQpCj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykg ewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW5uZWxz W2ldID4gY2hpcC0+bWF4X2NoYW5uZWxzKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJsZWQtc291 cmNlIG91dAo+ID4gPiA+ID4gPiBvZgo+ID4gPiA+ID4gPiBIVyA+Cj4gPiA+ID4gPiA+IHN1cHBv cnQgcmFuZ2UgWzEtJXVdXG4iLAo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hp cC0KPiA+ID4gPiA+ID4gPm1heF9jaGFubmVscyk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuLUVJTlZBTDsKPiA+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLT5jaGFuX2lkW2ldID0gY2hh bm5lbHNbaV07Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2Rl LCAibGVkLW1heC0KPiA+ID4gPiA+ID4gbWljcm9hbXAiLAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiAmdmFsKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYs ICJHZXQgbGVkLW1heC1taWNyb2FtcAo+ID4gPiA+ID4gPiBmYWlsZWQsID4KPiA+ID4gPiA+ID4g cmM9JWRcbiIsIHJjKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiByYzsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghdmFsKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGNoaXAtPmRldiwgImxlZC1tYXgtbWljcm9h bXAKPiA+ID4gPiA+ID4gc2hvdWxkbid0Cj4gPiA+ID4gPiA+IGJlID4KPiA+ID4gPiA+ID4gMFxu Iik7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJ TlZBTDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IG1pbl90KHUzMiwgdmFsLCBUT1JDSF9DVVJSRU5UX01B WF9VQSAqID4gbGVkLQo+ID4gPiA+ID4gPiA+IGNoYW5fY291bnQpOwo+ID4gPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBsZWQtPm1heF90b3JjaF9jdXJyZW50X21hID0gdmFsIC8gMTAwMDsKPiA+ID4g PiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZndub2RlX3Byb3BlcnR5X3By ZXNlbnQobm9kZSwgImZsYXNoLW1heC0KPiA+ID4gPiA+ID4gbWljcm9hbXAiKSkgewo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhc2gtPmxlZF9jZGV2LmZsYWdz IHw9IExFRF9ERVZfQ0FQX0ZMQVNIOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgPgo+ID4gPiA+ID4g PiAiZmxhc2gtCj4gPiA+ID4gPiA+IG1heC0KPiA+ID4gPiA+ID4gbWljcm9hbXAiLCAmdmFsKTsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZXJyKGNoaXAtPmRldiwgIkdldCBmbGFzaC1tYXgtCj4gPiA+ID4gPiA+IG1pY3JvYW1w Cj4gPiA+ID4gPiA+ID4gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybnJjOwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBtaW5fdCh1MzIsIHZh bCwgRkxBU0hfQ1VSUkVOVF9NQVhfVUEKPiA+ID4gPiA+ID4gKiA+Cj4gPiA+ID4gPiA+IGxlZC0K PiA+ID4gPiA+ID4gPiBjaGFuX2NvdW50KTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHZhbCA9IG1pbl90KHUzMiwgdmFsLAo+ID4gPiA+ID4gPiBGTEFTSF9UT1RB TF9DVVJSRU5UX01BWF9VQSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzID0gJmZsYXNoLT5icmlnaHRuZXNzOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcy0+bWluID0gcy0+c3RlcCA9IEZMQVNIX0lSRVNfVUEgKiBsZWQtCj4g PiA+ID4gPiA+ID4gY2hhbl9jb3VudDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHMtPm1heCA9IHZhbDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHMtPnZhbCA9IG1pbl90KHUzMiwgdmFsLAo+ID4gPiA+ID4gPiBGTEFTSF9DVVJS RU5UX0RFRkFVTFRfVUEpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbGVkLT5tYXhfZmxhc2hfY3VycmVudF9tYSA9IHZhbCAvIDEwMDA7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZWQtPmZsYXNoX2N1cnJlbnRfbWEgPSBzLT52 YWwgLyAxMDAwOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCA+Cj4gPiA+ID4g PiA+ICJmbGFzaC0KPiA+ID4gPiA+ID4gbWF4LQo+ID4gPiA+ID4gPiB0aW1lb3V0LXVzIiwgJnZh bCk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAw KSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJHZXQgZmxhc2gtbWF4LQo+ID4gPiA+ID4gPiB0aW1l b3V0LQo+ID4gPiA+ID4gPiB1cyA+IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm5yYzsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gbWluX3Qo dTMyLCB2YWwsCj4gPiA+ID4gPiA+IEZMQVNIX1RJTUVPVVRfTUFYX1VTKTsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMgPSAmZmxhc2gtPnRpbWVvdXQ7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5taW4gPSBzLT5zdGVwID0g RkxBU0hfVElNRU9VVF9TVEVQX1VTOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcy0+dmFsID0gcy0+bWF4ID0gdmFsOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbGVkLT5tYXhfdGltZW91dF9tcyA9IGxlZC0+Zmxhc2hfdGltZW91 dF9tcwo+ID4gPiA+ID4gPiA9Cj4gPiA+ID4gPiA+IHZhbCAvCj4gPiA+ID4gPiA+ID4gMTAwMDsK PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Zmxhc2gtPm9wcyA9ICZxY29tX2ZsYXNoX29wczsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZsYXNoLT5sZWRfY2Rl di5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9ID4KPiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWRf YnJpZ2h0bmVzc19zZXQ7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGluaXRfZGF0YS5md25v ZGUgPSBub2RlOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbml0X2RhdGEuZGV2aWNlbmFt ZSA9IE5VTEw7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGluaXRfZGF0YS5kZWZhdWx0X2xh YmVsID0gTlVMTDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdF9kYXRhLmRldm5hbWVf bWFuZGF0b3J5ID0gZmFsc2U7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gZGV2bV9s ZWRfY2xhc3NkZXZfZmxhc2hfcmVnaXN0ZXJfZXh0KHBhcmVudCwKPiA+ID4gPiA+ID4gZmxhc2gs ID4KPiA+ID4gPiA+ID4gJmluaXRfZGF0YSk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyYyA8IDApIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoY2hpcC0+ZGV2LCAiUmVnaXN0ZXIgZmxhc2ggTEVECj4gPiA+ID4gPiA+IGNsYXNzZGV2 Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBxY29tX2ZsYXNoX3Y0bDJfaW5pdChsZWQsIG5vZGUpOwo+ID4gPiA+ID4gPiAr fQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfbGVkX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UKPiA+ID4gPiA+ID4gKnBkZXYpCj4gPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNo aXA7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVk Owo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQ7 Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdtYXAgKm1hcDsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ19maWVsZCAqcmVnczsKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgaW50IGNvdW50LCBpLCByYzsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgdTMyIHZhbCwgcmVnX2Jhc2U7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgY2hpcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2hpcCksCj4gPiA+ID4gPiA+ IEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNoaXApCj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtYXAgPSBkZXZfZ2V0X3JlZ21h cChkZXYtPnBhcmVudCwgTlVMTCk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghbWFw KSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgcGFyZW50Cj4gPiA+ID4gPiA+IHJlZ21hcFxuIik7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHJjID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+Zndub2RlLCAicmVnIiwK PiA+ID4gPiA+ID4gJnJlZ19iYXNlKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJj IDwgMCkgewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gZ2V0IHJlZ2lzdGVyIGJhc2UKPiA+ID4gPiA+ID4gYWRkcmVzcywK PiA+ID4gPiA+ID4gPiByYz0lZFxuIiwgcmMpOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfcmVhZCht YXAsIHJlZ19iYXNlICsgRkxBU0hfVFlQRV9SRUcsCj4gPiA+ID4gPiA+ICZ2YWwpOwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIlJlYWQgZmxhc2ggbW9kdWxlIHR5cGUK PiA+ID4gPiA+ID4gZmFpbGVkLCA+Cj4gPiA+ID4gPiA+IHJjPSVkXG4iLCByYyk7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBpZiAodmFsICE9IEZMQVNIX1RZUEVfVkFMKXsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAidHlwZSAlI3ggaXMgbm90IGEgZmxhc2gKPiA+ ID4gPiA+ID4gbW9kdWxlXG4iLCA+Cj4gPiA+ID4gPiA+IHZhbCk7Cj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJj ID0gcmVnbWFwX3JlYWQobWFwLCByZWdfYmFzZSArIEZMQVNIX1NVQlRZUEVfUkVHLAo+ID4gPiA+ ID4gPiAmdmFsKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJSZWFk IGZsYXNoIG1vZHVsZSBzdWJ0eXBlCj4gPiA+ID4gPiA+IGZhaWxlZCwKPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gcmM9JWRcbiIsIHJjKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWwgPT0gRkxBU0hfU1VC VFlQRV8zQ0hfVkFMKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjaGlwLT5od190eXBlID0gUUNPTV9NVkZMQVNIXzNDSDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoaXAtPm1heF9jaGFubmVscyA9IDM7Cj4gPiA+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdzID0gbXZmbGFzaF8zY2hfcmVnczsK PiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICh2YWwgPT0gRkxBU0hfU1VCVFlQ RV80Q0hfVkFMKSB7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj aGlwLT5od190eXBlID0gUUNPTV9NVkZMQVNIXzRDSDsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNoaXAtPm1heF9jaGFubmVscyA9IDQ7Cj4gPiA+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdzID0gbXZmbGFzaF80Y2hfcmVnczsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiZmxhc2ggc3VidHlwZSAlI3ggaXMgbm90 IHlldAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IHN1cHBvcnRlZFxuIiwgdmFsKTsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IFJFR19NQVhfQ09VTlQ7IGkrKykKPiA+ID4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ3NbaV0ucmVnICs9IHJlZ19iYXNlOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gZGV2bV9yZWdtYXBf ZmllbGRfYnVsa19hbGxvYyhkZXYsIG1hcCwgY2hpcC0KPiA+ID4gPiA+ID4gPiByX2ZpZWxkcywK PiA+ID4gPiA+ID4gPiByZWdzLCBSRUdfTUFYX0NPVU5UKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHJjIDwgMCkgewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2MgcmVnbWFwIGZpbGVkLAo+ID4gPiA+ ID4gPiByYz0lZFxuIiwgPiByYyk7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBjaGlwLT5kZXYgPSBkZXY7Cj4gPiA+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNoaXApOwo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9pbml0KCZjaGlwLT5sb2NrKTsKPiA+ID4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgY291bnQgPSBkZXZpY2VfZ2V0X2NoaWxkX25vZGVfY291bnQoZGV2 KTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNvdW50ID09IDAgfHwgY291bnQgPiBj aGlwLT5tYXhfY2hhbm5lbHMpIHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIoZGV2LCAiTm8gY2hpbGQgb3IgY2hpbGQgY291bnQKPiA+ID4gPiA+ID4g ZXhjZWVkcwo+ID4gPiA+ID4gPiAlZFxuIiwgPiBjaGlwLT5tYXhfY2hhbm5lbHMpOwo+ID4gPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBjaGlwLT5sZWRzID0gZGV2bV9rY2FsbG9jKGRldiwgY291bnQsIHNpemVvZigqY2hp cC0KPiA+ID4gPiA+ID4gPiBsZWRzKSwKPiA+ID4gPiA+ID4gPiBHRlBfS0VSTkVMKTsKPiA+ID4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFjaGlwLT5sZWRzKQo+ID4gPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGUoZGV2LCBj aGlsZCkgewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkID0g JmNoaXAtPmxlZHNbY2hpcC0+bGVkc19jb3VudF07Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBsZWQtPmNoaXAgPSBjaGlwOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBxY29tX2ZsYXNoX3JlZ2lzdGVyX2xlZF9kZXZpY2Uo ZGV2LAo+ID4gPiA+ID4gPiBjaGlsZCwKPiA+ID4gPiA+ID4gbGVkKTsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byByZWxlYXNlOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj aGlwLT5sZWRzX2NvdW50Kys7Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ID4gK3Jl bGVhc2U6Cj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChjaGlwLT5sZWRzICYmIGNo aXAtPmxlZHNfY291bnQtLSkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHY0bDJfZmxhc2hfcmVsZWFzZShjaGlwLT5sZWRzW2NoaXAtCj4gPiA+ID4gPiA+ID4gbGVk c19jb3VudF0udjRsMl8+IGZsYXNoKTsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IHJjOwo+ID4gPiA+ID4gPiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW50 IHFjb21fZmxhc2hfbGVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCj4gPiA+ID4gPiA+ ICpwZGV2KQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg cWNvbV9mbGFzaF9jaGlwICpjaGlwPQo+ID4gPiA+ID4gPiBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB3aGlsZSAoY2hp cC0+bGVkc19jb3VudC0tKQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdjRsMl9mbGFzaF9yZWxlYXNlKGNoaXAtPmxlZHNbY2hpcC0KPiA+ID4gPiA+ID4gPiBsZWRz X2NvdW50XS52NGwyXz4gZmxhc2gpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoG11dGV4X2Rlc3Ryb3koJmNoaXAtPmxvY2spOwo+ID4gPiA+ID4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQKPiA+ID4gPiA+ID4gcWNvbV9mbGFzaF9s ZWRfbWF0Y2hfdGFibGVbXQo+ID4gPiA+ID4gPiA9IHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgeyAuY29tcGF0aWJsZSA9ICJxY29tLHNwbWktZmxhc2gtbGVkIiB9LAo+ID4gPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqB7IH0KPiA+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHFjb21fZmxhc2hfbGVkX2RyaXZlciA9 IHsKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLmRyaXZlciA9IHsKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gImxlZHMtcWNvbS1mbGFzaCIsCj4g PiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAub2ZfbWF0Y2hfdGFibGUg PQo+ID4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZF9tYXRjaF90YWJsZSwKPiA+ID4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfSwKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnByb2JlID0gcWNvbV9m bGFzaF9sZWRfcHJvYmUsCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5yZW1vdmUgPSBxY29t X2ZsYXNoX2xlZF9yZW1vdmUsCj4gPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHFjb21fZmxhc2hfbGVkX2RyaXZlcik7Cj4gPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ID4gK01PRFVMRV9ERVNDUklQVElPTigiUUNPTSBGbGFzaCBMRUQg ZHJpdmVyIik7Cj4gPiA+ID4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiA+ID4gCj4g PiA+ID4gS2luZCByZWdhcmRzLAo+ID4gPiA+IER5bGFuIFZhbiBBc3NjaGUKPiA+IAo+ID4gS2lu ZCByZWdhcmRzLAo+ID4gRHlsYW4gVmFuIEFzc2NoZQo+ID4gCgpLaW5kIHJlZ2FyZHMsCkR5bGFu IFZhbiBBc3NjaGUKCg==