From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 277E7C148 for ; Tue, 29 Apr 2025 02:59:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.29.241.158 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745895566; cv=none; b=QqTNUn7uwV4Szl4ERKXMT63/LYnwgsTbkmc6pkMbAWdSUHPFEgJ67Most3U7VaOx+A+ZtGACXEZOOq+O7kaVcYQ7cbhQANyXqh1QvCdo4sgV+DljpRps9pMHia429/Sv38hR4PTFpGxnQaB7uIlZQgxmsjCvFlM3WlvL2XFajoI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745895566; c=relaxed/simple; bh=TxYmlGOCCmEKw0sHRcyMEVHyqknpZQpl5p4rKgPFEl8=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=iPTdlOSMwv+38fMpgOW0wCLKkERTbuZ7wBO7Mj6dlTfJ5jlAfGfr8IpS3IN3VMFY7YGDkThQJNa2WhcUDAAYGqRTNtubv+px8HbTXZfcxzHjg8DlBT5riai+D6QGtbnwOoetQWOLh7/nKZiigRsJt4Ev6Og3zCelqdy2hvX+vaU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au; spf=pass smtp.mailfrom=codeconstruct.com.au; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b=LaFl7zMN; arc=none smtp.client-ip=203.29.241.158 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b="LaFl7zMN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1745895553; bh=TxYmlGOCCmEKw0sHRcyMEVHyqknpZQpl5p4rKgPFEl8=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=LaFl7zMNQz8Q4PuT0o8WcPqp5s+HNNwtYQxqKyAdG0Y5ESt1RzGy44FWtKLSWn8qQ m7IfbOTfmtdK1Q/OwqZxc/gd1phVIVelb3qkY8UqzFbc+6VGKHyKt7S6p0RL4+QD9o lF20HKdcrskAKVo1pCOuyWMqXIkvobQ1i97PVJaVbEqxQmeubXNRhvqqyr9sy2hwIi OVJdD6hcHxbiR+lgqCfuJuXgKz/gJPYgrK/lDiZfKQ8/WrxAT4iHuTSBb8P5iSfZrl wQA/1WosI4HRkErfVXAluiztnmMGYIlzltNz/bl7Q5wl22z3qgisfJlwIdXprFKIwz KwL/d2w/+/bcg== Received: from [192.168.72.170] (210-10-213-150.per.static-ipl.aapt.com.au [210.10.213.150]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 913D76448E; Tue, 29 Apr 2025 10:59:11 +0800 (AWST) Message-ID: Subject: Re: [PATCH 7/7] soc: aspeed: lpc-snoop: Lift channel config to const structs From: Andrew Jeffery To: Jean Delvare Cc: Joel Stanley , Henry Martin , Patrick Rudolph , Andrew Geissler , Ninad Palsule , Patrick Venture , Robert Lippert , linux-kernel@vger.kernel.org Date: Tue, 29 Apr 2025 10:58:35 +0800 In-Reply-To: <20250417124914.77f80975@endymion> References: <20250411-aspeed-lpc-snoop-fixes-v1-0-64f522e3ad6f@codeconstruct.com.au> <20250411-aspeed-lpc-snoop-fixes-v1-7-64f522e3ad6f@codeconstruct.com.au> <20250417124914.77f80975@endymion> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4-2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 SGkgSmVhbiwKClRoYW5rcyBmb3IgdGhlIHJlc3BvbnNlIGFuZCBzb3JyeSBmb3IgdGhlIGRlbGF5 ZWQgcmVwbHksIEkndmUgYmVlbiBvbgpsZWF2ZS4KCk9uIFRodSwgMjAyNS0wNC0xNyBhdCAxMjo0 OSArMDIwMCwgSmVhbiBEZWx2YXJlIHdyb3RlOgo+IEhpIEFuZHJldywKPiAKPiBPbiBGcmksIDEx IEFwciAyMDI1IDEwOjM4OjM3ICswOTMwLCBBbmRyZXcgSmVmZmVyeSB3cm90ZToKPiA+IFRoZSBz aGlmdHMgYW5kIG1hc2tzIGZvciBlYWNoIGNoYW5uZWwgYXJlIGRlZmluZWQgYnkgaGFyZHdhcmUg YW5kCj4gPiBhcmUgbm90IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgYXQgcnVudGltZS4gQWNjb3Jk aW5nbHksIGRlc2NyaWJlCj4gPiB0aGUKPiA+IGluZm9ybWF0aW9uIGluIGFuIGFycmF5IG9mIGNv bnN0IHN0cnVjdHMgYW5kIGFzc29jaWF0ZSBlbGVtZW50cwo+ID4gd2l0aAo+ID4gZWFjaCBjaGFu bmVsIGluc3RhbmNlLCByZW1vdmluZyB0aGUgbmVlZCBmb3IgdGhlIHN3aXRjaCBhbmQKPiA+IGhh bmRsaW5nIG9mCj4gPiBpdHMgZGVmYXVsdCBjYXNlLgo+IAo+IEkgbGlrZSB0aGUgaWRlYSB2ZXJ5 IG11Y2guIEEgZmV3IGNvbW1lbnRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbnMKPiBiZWxvdy4KPiAK PiA+IFNpZ25lZC1vZmYtYnk6IEFuZHJldyBKZWZmZXJ5IDxhbmRyZXdAY29kZWNvbnN0cnVjdC5j b20uYXU+Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1scGMtc25vb3Au YyB8IDgyICsrKysrKysrKysrKysrKysrLS0tLS0tCj4gPiAtLS0tLS0tLS0tLS0KPiA+IMKgMSBm aWxlIGNoYW5nZWQsIDQxIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1scGMtc25vb3AuYwo+ID4gYi9k cml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWxwYy1zbm9vcC5jCj4gPiBpbmRleAo+ID4gMGIyMDQ0 ZmQ3OWIxYmUwOGRmYTMzYmZjYWYyNDliMDIwYzkwOWJiOS4uYjU0ZDhmYmY3YjgzZWJhZGQ0ZmUx YjE2Ywo+ID4gYmRkZjA3YTBiZmFjODY4IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9zb2MvYXNw ZWVkL2FzcGVlZC1scGMtc25vb3AuYwo+ID4gKysrIGIvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVl ZC1scGMtc25vb3AuYwo+ID4gQEAgLTEwLDYgKzEwLDcgQEAKPiA+IMKgICogMHg4MCB3cml0ZXMg bWFkZSBieSB0aGUgQklPUyBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4KPiA+IMKgICovCj4gPiDC oAo+ID4gKyNpbmNsdWRlICJsaW51eC9yYXRlbGltaXQuaCIKPiA+IMKgI2luY2x1ZGUgPGxpbnV4 L2JpdG9wcy5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gPiDCoCNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KPiA+IEBAIC01Nyw3ICs1OCwxNSBAQCBzdHJ1Y3QgYXNwZWVkX2xw Y19zbm9vcF9tb2RlbF9kYXRhIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgaGFz X2hpY3JiX2Vuc25wOwo+ID4gwqB9Owo+ID4gwqAKPiA+ICtzdHJ1Y3QgYXNwZWVkX2xwY19zbm9v cF9jaGFubmVsX2NmZyB7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgaGljcjVfZW47Cj4gPiArwqDC oMKgwqDCoMKgwqB1MzIgc25wd2Fkcl9tYXNrOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHNucHdh ZHJfc2hpZnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgaGljcmJfZW47Cj4gPiArfTsKPiA+ICsK PiA+IMKgc3RydWN0IGFzcGVlZF9scGNfc25vb3BfY2hhbm5lbCB7Cj4gPiArwqDCoMKgwqDCoMKg wqBjb25zdCBzdHJ1Y3QgYXNwZWVkX2xwY19zbm9vcF9jaGFubmVsX2NmZyAqY2ZnOwo+ID4gwqDC oMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxlZDsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qga2Zp Zm/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmaWZvOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHdhaXRf cXVldWVfaGVhZF90wqDCoMKgwqDCoMKgwqB3cTsKPiA+IEBAIC0xODgsNyArMTk3LDYgQEAgc3Rh dGljIGludCBhc3BlZWRfbHBjX2VuYWJsZV9zbm9vcChzdHJ1Y3QKPiA+IGFzcGVlZF9scGNfc25v b3AgKmxwY19zbm9vcCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBpbmRleCwgdTE2IGxwY19wb3J0KQo+ ID4gwqB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFzcGVlZF9scGNfc25vb3Bf bW9kZWxfZGF0YSAqbW9kZWxfZGF0YTsKPiA+IC3CoMKgwqDCoMKgwqDCoHUzMiBoaWNyNV9lbiwg c25wd2Fkcl9tYXNrLCBzbnB3YWRyX3NoaWZ0LCBoaWNyYl9lbjsKPiA+IMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgYXNwZWVkX2xwY19zbm9vcF9jaGFubmVsICpjaGFubmVsOwo+ID4gwqDCoMKgwqDC oMKgwqDCoGludCByYyA9IDA7Cj4gPiDCoAo+ID4gQEAgLTIwMCw2ICsyMDgsOSBAQCBzdGF0aWMg aW50IGFzcGVlZF9scGNfZW5hYmxlX3Nub29wKHN0cnVjdAo+ID4gYXNwZWVkX2xwY19zbm9vcCAq bHBjX3Nub29wLAo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChjaGFubmVsLT5lbmFibGVkKQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4gwqAKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChXQVJOX09OQ0UoIWNoYW5uZWwtPmNmZywgInNub29wIGNoYW5u ZWwgJWQgbGFja3MKPiA+IHJlcXVpcmVkIGNvbmZpZyIsIGluZGV4KSkKPiAKPiBXaHkgbm90IGp1 c3QgV0FSTj8gV0FSTl9PTkNFIGhhcyBhIGhpZ2hlciBjb3N0LCBhbmQgSSBkb24ndCBleHBlY3QK PiB0aGlzCj4gY29kZSBwYXRoIHRvIGJlIHRha2VuIG1vcmUgdGhhbiB0d2ljZS4KCkhhcHB5IHRv IGNoYW5nZSBpdC4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IC1FSU5WQUw7Cj4gPiArCj4gPiDCoMKgwqDCoMKgwqDCoMKgaW5pdF93YWl0cXVldWVfaGVhZCgm Y2hhbm5lbC0+d3EpOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBjaGFubmVsLT5taXNjZGV2 Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOwo+ID4gQEAgLTIyMCwzOSArMjMxLDIwIEBAIHN0 YXRpYyBpbnQgYXNwZWVkX2xwY19lbmFibGVfc25vb3Aoc3RydWN0Cj4gPiBhc3BlZWRfbHBjX3Nu b29wICpscGNfc25vb3AsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8g ZXJyX2ZyZWVfZmlmbzsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyogRW5hYmxlIExQQyBz bm9vcCBjaGFubmVsIGF0IHJlcXVlc3RlZCBwb3J0ICovCj4gPiAtwqDCoMKgwqDCoMKgwqBzd2l0 Y2ggKGluZGV4KSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjYXNlIDA6Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaGljcjVfZW4gPSBISUNSNV9FTl9TTlAwVyB8IEhJQ1I1X0VOSU5U X1NOUDBXOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNucHdhZHJfbWFzayA9 IFNOUFdBRFJfQ0gwX01BU0s7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25w d2Fkcl9zaGlmdCA9IFNOUFdBRFJfQ0gwX1NISUZUOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGhpY3JiX2VuID0gSElDUkJfRU5TTlAwRDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBicmVhazsKPiA+IC3CoMKgwqDCoMKgwqDCoGNhc2UgMToKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoaWNyNV9lbiA9IEhJQ1I1X0VOX1NOUDFXIHwgSElD UjVfRU5JTlRfU05QMVc7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25wd2Fk cl9tYXNrID0gU05QV0FEUl9DSDFfTUFTSzsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzbnB3YWRyX3NoaWZ0ID0gU05QV0FEUl9DSDFfU0hJRlQ7Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaGljcmJfZW4gPSBISUNSQl9FTlNOUDFEOwo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gLcKgwqDCoMKgwqDCoMKgZGVmYXVsdDoK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IC1FSU5WQUw7Cj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnJfbWlzY19kZXJlZ2lzdGVyOwo+ID4g LcKgwqDCoMKgwqDCoMKgfQo+ID4gLQo+ID4gLcKgwqDCoMKgwqDCoMKgLyogRW5hYmxlIExQQyBz bm9vcCBjaGFubmVsIGF0IHJlcXVlc3RlZCBwb3J0ICovCj4gCj4gU3RyYW5nZSB0aGF0IHlvdSBk aXNjYXJkIGEgY29tbWVudCB3aGljaCB5b3UgYWRkZWQgeW91cnNlbGYgaW4gdGhlCj4gcHJldmlv dXMgcGF0Y2guCgpUaGF0IG1heSBoYXZlIGJlZW4gdGhlIHJlc3VsdCBvZiBzaHVmZmxpbmcgdGhl IHBhdGNoZXMgd2hpbGUgb3JnYW5pc2luZwp0aGUgc2VyaWVzLiBJJ2xsIHB1dCBpdCBiYWNrLgoK PiAKPiA+IC3CoMKgwqDCoMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhscGNfc25vb3AtPnJlZ21h cCwgSElDUjUsIGhpY3I1X2VuLAo+ID4gaGljcjVfZW4pOwo+ID4gLcKgwqDCoMKgwqDCoMKgcmVn bWFwX3VwZGF0ZV9iaXRzKGxwY19zbm9vcC0+cmVnbWFwLCBTTlBXQURSLAo+ID4gc25wd2Fkcl9t YXNrLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGxwY19wb3J0IDw8IHNucHdhZHJfc2hpZnQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFw X3VwZGF0ZV9iaXRzKGxwY19zbm9vcC0+cmVnbWFwLCBISUNSNSwgY2hhbm5lbC0+Y2ZnLQo+ID4g PmhpY3I1X2VuLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5uZWwtPmNm Zy0+aGljcjVfZW4pOwo+IAo+IE5vdCBjYXVzZWQgYnkgeW91ciBwYXRjaCwgYnV0IEkgdGhpbmsg cmVnbWFwX3NldF9iaXRzKCkgY291bGQgYmUgdXNlZAo+IGhlcmUgdG8gaW1wcm92ZSByZWFkYWJp bGl0eS4KCkFjay4KCj4gCj4gPiArwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMobHBj X3Nub29wLT5yZWdtYXAsIFNOUFdBRFIsIGNoYW5uZWwtCj4gPiA+Y2ZnLT5zbnB3YWRyX21hc2ss Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbHBjX3BvcnQgPDwgY2hhbm5lbC0+ Y2ZnLT5zbnB3YWRyX3NoaWZ0KTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgbW9kZWxfZGF0 YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGlm IChtb2RlbF9kYXRhICYmIG1vZGVsX2RhdGEtPmhhc19oaWNyYl9lbnNucCkKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMobHBjX3Nub29wLT5yZWdt YXAsIEhJQ1JCLAo+ID4gaGljcmJfZW4sIGhpY3JiX2VuKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMobHBjX3Nub29wLT5yZWdtYXAsIEhJQ1JC LAo+ID4gY2hhbm5lbC0+Y2ZnLT5oaWNyYl9lbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbm5lbC0+Y2ZnLT5oaWNyYl9lbik7Cj4gCj4gQ291 bGQgYWxzbyB1c2UgcmVnbWFwX3NldF9iaXRzKCkuCgpBY2suCgo+IAo+ID4gwqAKPiA+IMKgwqDC oMKgwqDCoMKgwqBjaGFubmVsLT5lbmFibGVkID0gdHJ1ZTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gPiDCoAo+ID4gLWVycl9taXNjX2RlcmVnaXN0ZXI6Cj4gPiAtwqDC oMKgwqDCoMKgwqBtaXNjX2RlcmVnaXN0ZXIoJmxwY19zbm9vcC0+Y2hhbltpbmRleF0ubWlzY2Rl dik7Cj4gPiDCoGVycl9mcmVlX2ZpZm86Cj4gPiDCoMKgwqDCoMKgwqDCoMKga2ZpZm9fZnJlZSgm bHBjX3Nub29wLT5jaGFuW2luZGV4XS5maWZvKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmM7Cj4gPiBAQCAtMjcyLDIxICsyNjQsNyBAQCBzdGF0aWMgdm9pZCBhc3BlZWRfbHBjX2Rpc2Fi bGVfc25vb3Aoc3RydWN0Cj4gPiBhc3BlZWRfbHBjX3Nub29wICpscGNfc25vb3AsCj4gPiDCoMKg wqDCoMKgwqDCoMKgaWYgKCFjaGFubmVsLT5lbmFibGVkKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgLyogRGlzYWJs ZSBpbnRlcnJ1cHRzIGFsb25nIHdpdGggdGhlIGRldmljZSAqLwo+IAo+IEFueSByZWFzb24gZm9y IGtpbGxpbmcgdGhpcyBwb29yIGlubm9jZW50IGNvbW1lbnQ/IF5eCgpOb25lLCBhZ2FpbiwgbWln aHQndmUgYmVlbiBsb3N0IGluIHNvbWUgc2h1ZmZsaW5nLgoKPiAKPiA+IC3CoMKgwqDCoMKgwqDC oHN3aXRjaCAoaW5kZXgpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoGNhc2UgMDoKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMobHBjX3Nub29wLT5yZWdt YXAsIEhJQ1I1LAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBISUNSNV9FTl9TTlAwVyB8Cj4gPiBISUNSNV9FTklO VF9TTlAwVywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gPiAtwqDCoMKgwqDCoMKgwqBjYXNlIDE6Cj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0ZV9iaXRzKGxwY19zbm9vcC0+cmVnbWFwLCBI SUNSNSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgSElDUjVfRU5fU05QMVcgfAo+ID4gSElDUjVfRU5JTlRfU05Q MVcsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDApOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+ID4gLcKgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiAtwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDC oMKgwqByZWdtYXBfdXBkYXRlX2JpdHMobHBjX3Nub29wLT5yZWdtYXAsIEhJQ1I1LCBjaGFubmVs LT5jZmctCj4gPiA+aGljcjVfZW4sIDApOwo+IAo+IENvdWxkIHVzZSByZWdtYXBfY2xlYXJfYml0 cygpIGlmIEknbSBub3QgbWlzdGFrZW4uCgpBZ3JlZWQuCgo+IAo+ID4gwqAKPiA+IMKgwqDCoMKg wqDCoMKgwqBjaGFubmVsLT5lbmFibGVkID0gZmFsc2U7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgLyog Q29uc2lkZXIgaW1wcm92aW5nIHNhZmV0eSB3cnQgY29uY3VycmVudCByZWFkZXIocykgKi8KPiA+ IEBAIC0yOTQsNiArMjcyLDIxIEBAIHN0YXRpYyB2b2lkIGFzcGVlZF9scGNfZGlzYWJsZV9zbm9v cChzdHJ1Y3QKPiA+IGFzcGVlZF9scGNfc25vb3AgKmxwY19zbm9vcCwKPiA+IMKgwqDCoMKgwqDC oMKgwqBrZmlmb19mcmVlKCZjaGFubmVsLT5maWZvKTsKPiA+IMKgfQo+ID4gwqAKPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGFzcGVlZF9scGNfc25vb3BfY2hhbm5lbF9jZmcgY2hhbm5lbF9jZmdz W10gPQo+ID4gewo+ID4gK8KgwqDCoMKgwqDCoMKgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5oaWNyNV9lbiA9IEhJQ1I1X0VOX1NOUDBXIHwgSElDUjVfRU5JTlRfU05QMFcs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNucHdhZHJfbWFzayA9IFNOUFdB RFJfQ0gwX01BU0ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNucHdhZHJf c2hpZnQgPSBTTlBXQURSX0NIMF9TSElGVCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuaGljcmJfZW4gPSBISUNSQl9FTlNOUDBELAo+ID4gK8KgwqDCoMKgwqDCoMKgfSwKPiA+ ICvCoMKgwqDCoMKgwqDCoHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaGlj cjVfZW4gPSBISUNSNV9FTl9TTlAxVyB8IEhJQ1I1X0VOSU5UX1NOUDFXLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zbnB3YWRyX21hc2sgPSBTTlBXQURSX0NIMV9NQVNLLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zbnB3YWRyX3NoaWZ0ID0gU05QV0FE Ul9DSDFfU0hJRlQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmhpY3JiX2Vu ID0gSElDUkJfRU5TTlAxRCwKPiA+ICvCoMKgwqDCoMKgwqDCoH0sCj4gPiArfTsKPiA+ICsKPiA+ IMKgc3RhdGljIGludCBhc3BlZWRfbHBjX3Nub29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gPiDCoHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYXNwZWVkX2xwY19z bm9vcCAqbHBjX3Nub29wOwo+ID4gQEAgLTMwOCw2ICszMDEsMTMgQEAgc3RhdGljIGludCBhc3Bl ZWRfbHBjX3Nub29wX3Byb2JlKHN0cnVjdAo+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4g wqDCoMKgwqDCoMKgwqDCoGlmICghbHBjX3Nub29wKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+IMKgCj4gPiArwqDCoMKgwqDCoMKgwqBzdGF0 aWNfYXNzZXJ0KEFSUkFZX1NJWkUoY2hhbm5lbF9jZmdzKSA9PQo+ID4gQVJSQVlfU0laRShscGNf c25vb3AtPmNoYW4pLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJCcm9rZW4g aW1wbGVtZW50YXRpb24gYXNzdW1wdGlvbiByZWdhcmRpbmcgY2ZnCj4gPiBjb3VudCIpOwo+ID4g K8KgwqDCoMKgwqDCoMKgc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGxwY19zbm9vcC0+Y2hhbikg PT0gMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiQnJva2VuIGltcGxlbWVu dGF0aW9uIGFzc3VtcHRpb24gcmVnYXJkaW5nIGNoYW5uZWwKPiA+IGNvdW50Iik7Cj4gCj4gV291 bGRuJ3QgaXQgYmUgZ29vZCAoYW5kIG1heWJlIHN1ZmZpY2llbnQpIHRvIGRlY2xhcmUKPiBhc3Bl ZWRfbHBjX3Nub29wX2NoYW5uZWxfY2ZnIGFzIGNoYW5uZWxfY2Znc1tOVU1fU05PT1BfQ0hBTk5F TFNdPwo+IAo+IElmIHlvdSBpbnNpc3Qgb24ga2VlcGluZyB0aGUgc2Vjb25kIGFzc2VydCB0aGVu IHlvdSBzaG91bGQgYXQgbGVhc3QKPiB1c2UKPiBOVU1fU05PT1BfQ0hBTk5FTFMgaW5zdGVhZCBv ZiBoYXJkLWNvZGluZyAyLgoKSSB1c2VkIHRoZSBsaXRlcmFsIDIgaGVyZSBhcyBpdCByZWZsZWN0 ZWQgdGhlIHR3byBhc3NpZ25tZW50cyBiZWxvdy4uLgoKPiAKPiA+ICvCoMKgwqDCoMKgwqDCoGxw Y19zbm9vcC0+Y2hhblswXS5jZmcgPSAmY2hhbm5lbF9jZmdzWzBdOwo+ID4gK8KgwqDCoMKgwqDC oMKgbHBjX3Nub29wLT5jaGFuWzFdLmNmZyA9ICZjaGFubmVsX2NmZ3NbMV07Cj4gCj4gQ291bGQg dGhpcyBiZSBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgYXNwZWVkX2xwY19lbmFibGVfc25vb3Ao KT8gU28KPiB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGR1cGxpY2F0ZSB0aGUgc3RhdGVtZW50IChh bmQgZG9uJ3Qgc2V0Cj4gbHBjX3Nub29wLT5jaGFuWzFdLmNmZyBpZiB0aGVyZSdzIG5vIHNlY29u ZCBwb3J0KS4gV291bGQgc2F2ZSBhIFdBUk4KPiBhcwo+IHdlbGwuCgouLi4gYnV0IGltcGxlbWVu dGluZyB5b3VyIHN1Z2dlc3Rpb24gaGVyZSB3aWxsIGhlbHAuIExldCBtZSByZXdvcmsgaXQuCgpU aGFua3MsCgpBbmRyZXcK