From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-3134603-1522401233-3-4475087914938171244 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.249, RCVD_IN_DNSWL_MED -2.3, SPF_PASS -0.001, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='140.211.166.136', Host='smtp3.osuosl.org', Country='US', FromHeader='org', MailFrom='org' X-Spam-charsets: plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: driverdev-devel-bounces@linuxdriverproject.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm2; t= 1522401232; b=h5Ci75vw3IyeskOiDgDaw4iZuZlQQAiANMJivQ+adEhHXlJhAj 7xPyF3uFyXTmZvcDSPaP37MhT2Hpg6AaFKi/mQN8kGLqwCREb4zZ9ciW/TOdnLy4 RojLJm7bAlm71iwarbDRa3DWKd3GF3Bje00od3nhFtioHeiCILVV6qSBBxMZho+/ 4gkWoDtedzh9iIkfanMJ0sS1pVhLAGIXp3ty5sJvw37e+ausdufobc8Qfdck/4KN F8MKuE9WheCgUHr+zD+14860Lp/ojG3W3c9A7lG4fYxI41Dw/xkO1CLMQzwDqAg3 IH3mKYwkuSKhmTPJpLBgUh0dM5Z+8YOcs18Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:subject:message-id :in-reply-to:references:mime-version:list-id:list-unsubscribe :list-archive:list-post:list-help:list-subscribe:cc:content-type :content-transfer-encoding:sender; s=fm2; t=1522401232; bh=+Vph3 BdPppo7yEbWhmhbKHm1CC9kJHBIjIBhoq1CDRo=; b=LtjUD7ByxEdUjR2jxLayV OVazUxagoJw4WgupHO35PBaV9n3XvSgnLNLqoxXwpoqfXDuy215ogF9GRZ6CUZSk q4Hy7+jd2oabPwzMW56KzynriP/EGbbc8HmPZ8YcCiy+4/FkTKBTBFIXEiXOCBhc MLAHo09EkwL6Rnv5c2MC9k6hcrhWzpBFBPdiOqq7eJRXRbeyCWCAuRHsH9DqgA3B rjZ+vyRhZR00omrNy1+dPnV2AipuscUdWhcfLbyiLVz4AuBSmbs7EPBvavAUulOT 3Tx+n2aDA23L8ftR5ZqP1Z5yWDc+RmaAdn9SWMkCy+I0NqCh8FrxZ9J3K1yQZMNb Q== ARC-Authentication-Results: i=1; mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.136 (smtp3.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=silver.osuosl.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=fail x-ptr-helo=silver.osuosl.org x-ptr-lookup=smtp3.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128; x-vs=clean score=-100 state=0 Authentication-Results: mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=none (p=none,has-list-id=yes,d=none) header.from=kernel.org; iprev=pass policy.iprev=140.211.166.136 (smtp3.osuosl.org); spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org smtp.helo=silver.osuosl.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=fail x-ptr-helo=silver.osuosl.org x-ptr-lookup=smtp3.osuosl.org; x-return-mx=pass smtp.domain=linuxdriverproject.org smtp.result=pass smtp_is_org_domain=yes header.domain=kernel.org header.result=pass header_is_org_domain=yes; x-tls=pass version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128; x-vs=clean score=-100 state=0 X-ME-VSCategory: clean X-CM-Envelope: MS4wfIRl2fToEXChJORK19RO6O6vt+zLq9MrcafP6kC0ld+uXv8NGCd5czcTsAgf2NXaIC2S73eyfSjhFYek8IonfuMk/Xu1IqU1NR+SC6mbWlKdPFegGYjr uvLhSnV4GsClxbaUTFf26XaGBJLAbLsqQ1O/uSGCZHQ/hBJWT3OLlFai0Ke+C59jS4SK/2UacN1rOl49k8Ugx0kpHIel3huzaRWX82AtAADaUlICKcPLTyXH cKCiD6XekQxGED6boyVpMg== X-CM-Analysis: v=2.3 cv=FKU1Odgs c=1 sm=1 tr=0 a=FmzrR3azffoSx43hyxYGHg==:117 a=FmzrR3azffoSx43hyxYGHg==:17 a=IkcTkHD0fZMA:10 a=v2DPQv5-lfwA:10 a=-uNXE31MpBQA:10 a=jJxKW8Ag-pUA:10 a=pGLkceISAAAA:8 a=VwQbUJbxAAAA:8 a=8b9GpE9nAAAA:8 a=JOA0iUbgAAAA:8 a=jtbBNqsHAAAA:8 a=XYAwZIGsAAAA:8 a=8AirrxEcAAAA:8 a=yC-0_ovQAAAA:8 a=DDOyTI_5AAAA:8 a=hLaCA-7ODhTW-bIc2LoA:9 a=gPT-JFiBhUCMOxS2:21 a=-z6eNua5abzaG1io:21 a=QEXdDO2ut3YA:10 a=aTf_0Hi-Eh8A:10 a=pwgGltORyH8A:10 a=AjGcO6oz07-iQ99wixmX:22 a=T3LWEMljR5ZiDmsYVIUa:22 a=nG9pSErA777cby-CJFl-:22 a=RWaeYqt-Cn-VcsFsiLGo:22 a=E8ToXWR_bxluHZ7gmE-Z:22 a=ST-jHhOKWsTCqRlWije3:22 a=QsnFDINu91a9xkgZirup:22 a=_BcfOz0m4U4ohdxiHPKc:22 cc=dsc X-ME-CMScore: 0 X-ME-CMCategory: none X-Remote-Delivered-To: driverdev-devel@osuosl.org DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5C13820838 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=jic23@kernel.org Date: Fri, 30 Mar 2018 10:13:37 +0100 From: Jonathan Cameron To: John Syne Subject: Re: meter ABI: (was Re: [PATCH v2 1/3] staging:iio:meter: Replaces IIO_DEV_ATTR_CH_OFF by IIO_DEVICE_ATTR) Message-ID: <20180330101337.73d3413c@archlinux> In-Reply-To: References: <3af0e5a795059a8418cf08ff29f05f8d5e00da9b.1520382753.git.rodrigosiqueiramelo@gmail.com> <20180307200730.08ed3c2f@archlinux> <20180309003733.aichruo53vqryafg@smtp.gmail.com> <20180310151045.4570e85d@archlinux> <79D3051B-FF2F-4DD3-AF75-F6A4BAD81838@gmail.com> <20180317203037.1093cc11@archlinux> <20180318122312.0d395367@archlinux> <20180324150205.709aa211@archlinux> <20180325172911.39c0e42f@archlinux> X-Mailer: Claws Mail 3.16.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.24 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, Lars-Peter Clausen , Michael Hennerich , Rodrigo Siqueira , linux-iio@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Peter Meerwald-Stadler , Hartmut Knaack , daniel.baluta@nxp.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: T24gU3VuLCAyNSBNYXIgMjAxOCAxMzozNjo0MCAtMDcwMApKb2huIFN5bmUgPGpvaG4zOTA5QGdt YWlsLmNvbT4gd3JvdGU6Cgo+ID4gT24gTWFyIDI1LCAyMDE4LCBhdCA5OjI5IEFNLCBKb25hdGhh biBDYW1lcm9uIDxqaWMyM0BrZXJuZWwub3JnPiB3cm90ZToKPiA+IAo+ID4gT24gU2F0LCAyNCBN YXIgMjAxOCAxNTo0NToyMSAtMDcwMAo+ID4gSm9obiBTeW5lIDxqb2huMzkwOUBnbWFpbC5jb20+ IHdyb3RlOgo+ID4gICAKPiA+Pj4gT24gTWFyIDI0LCAyMDE4LCBhdCA4OjAyIEFNLCBKb25hdGhh biBDYW1lcm9uIDxqaWMyM0BrZXJuZWwub3JnPiB3cm90ZToKPiA+Pj4gCj4gPj4+IE9uIE1vbiwg MTkgTWFyIDIwMTggMjI6NTc6MTYgLTA3MDAKPiA+Pj4gSm9obiBTeW5lIDxqb2huMzkwOUBnbWFp bC5jb20+IHdyb3RlOgo+ID4+PiAgIAo+ID4+Pj4gSGkgSm9uYXRoYW4sCj4gPj4+PiAKPiA+Pj4+ IFRoYW5rIHlvdSBmb3IgYWxsIHlvdXIgaGFyZCB3b3JrLiBZb3VyIGZlZWRiYWNrIGlzIHJlYWxs eSBoZWxwZnVsLiBJ4oCZbSBzdXJwcmlzZWQgdGhhdCBubyBvbmUgZnJvbSBBbmFsb2cgRGV2aWNl IGhhcyBvZmZlcmVkIGFueSBzdWdnZXN0aW9ucy4KPiA+Pj4+ICAgCj4gPj4+IAo+ID4+PiBTYWRs eSB0aG9zZSBhY3RpdmUgaW4gdGhlIG1haW5saW5lIGxpbnV4IGtlcm5lbCBmcm9tIEFESSBhcmUg Zm9jdXNlZCBpbgo+ID4+PiBvdGhlciBhcmVhcyBjdXJyZW50bHkgOiggICAgCj4gPj4gR29vZCBw b2ludC4gSSB3aWxsIHJlYWNoIG91dCB0byBBbmFsb2cgRGV2aWNlcyBhbmQgZ2V0IGEgbmFtZSBv ZiBzb21lb25lIAo+ID4+IHdobyBpcyBrbm93bGVkZ2VhYmxlIGluIHRoaXMgYXJlYS4gUGVyaGFw cyBMYXJzLVBldGVycyBoYXMgYSBzdWdnZXN0aW9uLiAgIAo+ID4gWWVzLCBMYXJzIG9yIE1pY2hh ZWwgSGVubmVyaWNoICgrQ0MpIGFyZSBteSBub3JtYWwgY29udGFjdCBwb2ludHMuCj4gPiBJIGJl bGlldmUgdGhpcyBpcyBvdXRzaWRlIGJvdGggb2YgdGhlaXIgYXJlYXMsIGJ1dCB0aGV5IG1heSBi ZSBhYmxlIHRvCj4gPiBwdXQgeW91IGluIGNvbnRhY3Qgd2l0aCB0aGUgcmlnaHQgcGVyc29uLiAg SWYgbm90aGluZyBlbHNlIGl0IHdvdWxkIGJlCj4gPiBnb29kIHRvIG1ha2Ugc29tZW9uZSBpbiBB REkgYXdhcmUgdGhhdCBwZW9wbGUgY2FyZSBhYm91dCBsaW51eCBzdXBwb3J0IGZvcgo+ID4gdGhl c2UgcGFydHMhICAKPiBJIHNlbnQgaW4gYSByZXF1ZXN0IHRvIEFESSBmb3IgYSBjb250YWN0IHBl cnNvbiB0byBoZWxwIHdpdGggdGhlIHJldmlldy4KCkNvb2wuCgo+ID4gICAKPiA+Pj4+IEFueXdh eSwgcGxlYXNlIHNlZSBteSBjb21tZW50cyBpbmxpbmUgYmVsb3cKPiA+Pj4+IAo+ID4+Pj4gUmVn YXJkcywKPiA+Pj4+IEpvaG4KPiA+Pj4+IAo+ID4+Pj4gCj4gPj4+PiAKPiA+Pj4+IAo+ID4+Pj4g ICAKPiA+Pj4+PiBPbiBNYXIgMTgsIDIwMTgsIGF0IDU6MjMgQU0sIEpvbmF0aGFuIENhbWVyb24g PGppYzIzQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4+Pj4+IAo+ID4+Pj4+IE9uIFNhdCwgMTcgTWFy IDIwMTggMjM6MTE6NDUgLTA3MDAKPiA+Pj4+PiBKb2huIFN5bmUgPGpvaG4zOTA5QGdtYWlsLmNv bT4gd3JvdGU6Cj4gPj4+Pj4gICAKPiA+Pj4+Pj4gSGkgSm9uYXRoYW4sICAgICAgCj4gPj4+Pj4g SGkgSm9obiBhbmQgQWxsLAo+ID4+Pj4+IAo+ID4+Pj4+IEknZCBsb3ZlIHRvIGdldCBzb21lIGFk ZGl0aW9uYWwgaW5wdXQgb24gdGhpcyBmcm9tIGFueW9uZSBpbnRlcmVzdGVkLgo+ID4+Pj4+IFRo ZXJlIGFyZSBhIGxvdCBvZiB3ZWlyZCBhbmQgd29uZGVyZnVsIGRlcml2ZWQgcXVhbnRpdGllcyBp biBhbiBlbmVyZ3kKPiA+Pj4+PiBtZXRlciBhbmQgaXQgc2VlbXMgd2UgbmVlZCB0byBtYWtlIHNv bWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBzdXBwb3J0Cj4gPj4+Pj4gdGhlbSAtIGluY2x1ZGlu ZyBwb3RlbnRpYWxseSBhIHVzZXJzcGFjZSBicmVha2luZyBjaGFuZ2UgdG8gdGhlIGV2ZW50Cj4g Pj4+Pj4gY29kZSBkZXNjcmlwdGlvbi4KPiA+Pj4+PiAgIAo+ID4+Pj4+PiAKPiA+Pj4+Pj4gSGVy ZSBpcyB0aGUgY29tcGxldGUgbGlzdCBvZiByZWdpc3RlcnMgZm9yIHRoZSBBREU3ODc4IHdoaWNo IEkgY29waWVkIGZyb20gdGhlIGRhdGEgc2hlZXQuIEkgYWRkZWQgYSBjb2x1bW4g4oCcSUlPIEF0 dHJpYnV0ZeKAnSB3aGljaCBJIGhvcGUgZm9sbG93cyB5b3VyIElJTyBBQkkuIFBsZWFzZSBtYWtl IGFueSBjaGFuZ2VzIHlvdSBmZWVsIGFyZSBpbmNvcnJlY3QuIEJUVywgdGhlcmUgYXJlIHNldmVy YWwgcmVnaXN0ZXJzIHRoYXQgY2Fubm90IGJlIGdlbmVyYWxpemVkIGFuZCBhcmUgdXNlZCBwdXJl bHkgZm9yIGNoaXAgY29uZmlndXJhdGlvbi4gSSB0aGluayB3ZSBzaG91bGQgYWRkIGEgbmV3IG5h bWluZyBjb252ZW50aW9uLCBuYW1lbHkge3JlZ2lzdGVyfV97PGNoaXAtcmVnaXN0ZXItbmFtZT59 LiBBbHNvLCBJIHNlZSBpbiB0aGUgc3lzX2J1c19paW8gZG9jICAgIAo+ID4gCj4gPiBObywgcmVn aXN0ZXJzIGNhbiBhbHdheXMgYmUgYnJva2VuIHVwIGluIHRvIHJlYWwgbWVhbmluZ2Z1bCB2YWx1 ZXMgaWYKPiA+IHRoZXkgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIGFuZCB1c2Vyc3BhY2UgaGFz IGEgcmVhc29uIHRvIHR3ZWFrCj4gPiB0aGVtLgo+ID4gCj4gPiBXZSBuZXZlciBleHBvc2UgcmF3 IHJlZ2lzdGVycyB0byB1c2Vyc3BhY2UgZXhjZXB0IHRocm91Z2gKPiA+IGRlYnVnZnMgYW5kIHRo ZSBjbHVlIGlzIGluIHRoZSBuYW1lIC0gcHVyZWx5IGZvciBkZWJ1Zy4gIAo+IE9LCj4gPiAKPiA+ ICAgCj4gPj4+IAo+ID4+PiAKPiA+Pj4gCj4gPj4+ICAgCj4gPj4+Pj4+IGluX2FjY2VsX3hfcGVh a19yYXcKPiA+Pj4+Pj4gCj4gPj4+Pj4+IHNvIHNob3VsZG7igJl0IHRoZSBwaGFzZSBiZSByZXBy ZXNlbnRlZCBhcyBmb2xsb3dzOgo+ID4+Pj4+PiAKPiA+Pj4+Pj4gaW5fY3VycmVudF9BX3NjYWxl ICAgICAgCj4gPj4+Pj4gSSdtIHN0aWxsIGNvbmZ1c2VkLiAgV2hhdCBkb2VzIEEgcmVwcmVzZW50 IGhlcmU/ICBJIGFzc3VtZWQgdGhhdCB3YXMgYSB3aWxkCj4gPj4+Pj4gY2FyZCBmb3IgdGhlIGNo YW5uZWwgbnVtYmVyIGJlZm9yZSBidXQgY2xlYXJseSBub3QuCj4gPj4+Pj4gCj4gPj4+Pj4gQWgs IHlvdSBhcmUgbGFiZWxsaW5nIHRoZSAzIHNlcGFyYXRlIHBoYXNlcyBhcyBBLCBCIGFuZCBDLiBI bW0uCj4gPj4+Pj4gSSBndWVzcyB0aGV5IHNvcnQgb2YgbG9vayBsaWtlIGF4aXMsIGFuZCBzb3J0 IG9mIGxpa2UgaW5kZXBlbmRlbnQgY2hhbm5lbHMuCj4gPj4+Pj4gU28gY291bGQgYmUgaW5kZXhl ZCBvciBkb25lIHZpYSBtb2RpZmllcnMgZGVwZW5kaW5nIG9uIGhvdyB5b3UgbG9vayBhdCBpdC4g ICAgICAKPiA+Pj4+IEluIG1ldGVyaW5nIHRlcm1pbm9sb2d5LCB0aGUgdGhyZWUgcGhhc2VzIGFy ZSBjb21tb25seSByZWZlcnJlZCB0byBhcyBSRUQsIEdSRUVOLCBCTFVFIG9yIFBoYXNlQSwgUGhh c2VCLCBQaGFzZUMgYW5kIE5ldXRyYWwuIEFuYWxvZyBEZXZpY2VzIHVzZXMgdGhlIEFCQ04gbm9t ZW5jbGF0dXJlIHNvIGFueW9uZSB1c2luZyB0aGlzIGRyaXZlciB3aWxsIHByb2JhYmx5IGhhdmUg cmVmZXJlbmNlZCB0aGUgQW5hbG9nIERldmljZXMgZGF0YXNoZWV0IHNvIHRoaXMgdGVybWlub2xv Z3kgc2hvdWxkIGJlIGZhbWlsaWFyLiAgICAgCj4gPj4+IFdoaWNoIGlzIG1vcmUgY29tbW9ubHkg dXNlZCBpbiBnZW5lcmFsPyAgV2UgYXJlIGRlc2lnbmluZyB3aGF0IHdlIGhvcGUKPiA+Pj4gd2ls bCBiZSBhIGdlbmVyYWwgaW50ZXJmYWNlIGFuZCBsYXN0IHRoaW5nIHdlIHdhbnQgaXMgdG8gaGF2 ZSBldmVyeW9uZQo+ID4+PiBub3QgdXNpbmcgQURJIHBhcnRzIGNvbmZ1c2VkISAgUGVyc29uYWxs eSBub3QgYXNzaWduaW5nICdjb2xvdXJzJyBtYWtlcwo+ID4+PiBtb3JlIHNlbnNlIHRvIG1lLiAg ICAKPiA+PiBJIGRpZCBhIGxpdHRsZSByZXNlYXJjaCBhbmQgaGVyZSBpcyB0aGUgbmFtaW5nIHVz ZWQgYnkgdmVuZG9yOgo+ID4+IAo+ID4+IFNUIE1pY3JvZWxlY3Ryb25pY3M6IFAxLCBQMiwgUDMs IE4KPiA+PiBodHRwOi8vd3d3LnN0LmNvbS9jb250ZW50L2NjYy9yZXNvdXJjZS90ZWNobmljYWwv ZG9jdW1lbnQvYXBwbGljYXRpb25fbm90ZS81ZS9mNC8yMi80ZC85MC85Ni80Yy9jNC9DRDAwMTUz MjY0LnBkZi9maWxlcy9DRDAwMTUzMjY0LnBkZi9qY3I6Y29udGVudC90cmFuc2xhdGlvbnMvZW4u Q0QwMDE1MzI2NC5wZGYKPiA+PiAKPiA+PiBUZXJpZGlhbjogQUJDTgo+ID4+IGh0dHBzOi8vd3d3 Lm1vdXNlci5jb20vZHMvMi8yNTYvNzFNNjUxMy03MU02NTEzSC0yMjYwMy5wZGYKPiA+PiAKPiA+ PiBNYXhpbSBJbnRlZ3JhdGVkOiBBQkNOCj4gPj4gaHR0cHM6Ly9kYXRhc2hlZXRzLm1heGltaW50 ZWdyYXRlZC5jb20vZW4vZHMvNzhNNjYzMS5wZGYKPiA+PiAKPiA+PiBNaWNyb2NoaXA6IEFCQ04K PiA+PiBodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy81MTY0 M2IucGRmCj4gPj4gCj4gPj4gTlhQOiBMMSwgTDIsIEwzLCBOCj4gPj4gaHR0cHM6Ly93d3cubnhw LmNvbS9zdXBwb3J0L2RldmVsb3Blci1yZXNvdXJjZXMvcmVmZXJlbmNlLWRlc2lnbnMva2luZXRp cy1rbTN4LTI1Ni1tY3UtdGhyZWUtcGhhc2UtbWV0ZXJpbmctcmVmZXJlbmNlLWRlc2lnbjpSRC1L TTN4LTI1Ni0zUEgtTUVURVJJTkcKPiA+PiAKPiA+PiBSZW5lc2FzOiBBQkNOCj4gPj4gaHR0cHM6 Ly93d3cucmVuZXNhcy5jb20vZW4tdXMvc29sdXRpb25zL2hvbWUvbWV0ZXJpbmcvcG93ZXItbWV0 ZXItdGhyZWUuaHRtbAo+ID4+IAo+ID4+IFNvIHRoZSBtb3N0IGNvbnNpc3RlbnQgd291bGQgYmUg QUJDTiAgCj4gPiBDb29sLiAgIE1ha2VzIHNlbnNlIHRvIGdvIHdpdGggdGhhdC4gIFRoYW5rcyBm b3IgY2hlY2tpbmcgdGhpcyBvdXQuCj4gPiAgIAo+ID4+IAo+ID4+IAo+ID4+IEFsbCB2ZW5kb3Ig cHJvdmlkaW5nIHRocmVlIHBoYXNlIGVuZXJneSBtZXRlcmluZyBJQ3MgdXNlIHRoZSBBQkNOIHRl cm1pbm9sb2d5LiAgIAo+ID4+PiAKPiA+Pj4gKGJ0dyBwbGVhc2Ugd3JhcCBhbnkgbGluZXMgdGhh dCBkb24ndCBuZWVkIHRvIGJlIGxvbmcgdG8gYXJvdW5kIDgwIGNoYXJhY3RlcnMpLgo+ID4+PiAg IAo+ID4+Pj4+IAo+ID4+Pj4+IEhtbS4gV2l0aCBuZXV0cmFsIGluIHRoZXJlIGFzIHdlbGwgSSBn dWVzcyB3ZSBuZWVkIHRvIG1ha2UgdGhlbQo+ID4+Pj4+IG1vZGlmaWVycyAoYnV0IG1pZ2h0IGNo YW5nZSBteSBtaW5kIGxhdGVyIDspCj4gPj4+Pj4gCj4gPj4+Pj4gUGFydGljdWxhcmx5IGFzIHdl IGFyZSB1c2luZyB0aGUgdGhlIG1vZGlmaWVyIGZvciBSTVMgdW5kZXIgdGhlIHByZXZpb3VzCj4g Pj4+Pj4gcGxhbi4uLiBJdCBhcHBlYXJzIHdlIHNob3VsZCB0cmVhdCB0aGF0IGluc3RlYWQgbGlr ZSB3ZSBkaWQgZm9yIHBlYWsKPiA+Pj4+PiBhbmQgZG8gaXQgYXMgYW4gYWRkaXRpb25hbCBpbmZv IG1hc2sgZWxlbWVudC4gIFRoZSBwcm9ibGVtIHdpdGggZG9pbmcgdGhhdAo+ID4+Pj4+IG9uIGEg Y29udGludW91cyBtZWFzdXJlbWVudCBpcyB0aGF0IHdlIGNhbid0IHRyZWF0IGl0IGFzIGEgY2hh bm5lbCB0bwo+ID4+Pj4+IGJlIG91dHB1dCB0aHJvdWdoIHRoZSBidWZmZXJlZCBpbnRlcmZhY2Uu ICAgICAgCj4gPj4+PiBJ4oCZdmUgY2hhbmdlZCB0aGUgbGF5b3V0IG9mIHRoZSBzcHJlYWRzaGVl dCB0byBicmVha291dCB0aGUgRGlyZWN0aW9uLCBUeXBlLCBJbmRleCwgTW9kaWZpZXIgYW5kIElu Zm8gTWFzayB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gbWlzcy11bmRlcnN0YW5kaW5nIGFuZCB3 aWxsIGhlbHAgaWRlbnRpZnkgYWxsIHRoZSBpdGVtcyB3ZSBuZWVkIHRvIGFkZC4KPiA+Pj4+IAo+ ID4+Pj4gVGhlIEFERTc4NzggY2hhbm5lbHMgdGhhdCB3aWxsIHVzZSB0aGUgYnVmZmVyIGFyZSBJ QVdWLCBWQVdWLCBJQldWLCBWQldWLCBJQ1dWLCBWQ1dWLCBJTldWLCBBVkEsIEJWQSwgQ1ZBLCBB V0FUVCwgQldBVFQsIENXQVRULCBBVkFSLCBCVkFSLCBhbmQgQ1ZBUi4gU28gSSBndWVzcyB3ZSBo YXZlIHRvIGFkZCBhbiBpbmRleCAgICAKPiA+Pj4gUHJvYmFibHkgYSBnb29kIGlkZWEgYW55d2F5 LCB3ZSBhcmUgc29ydCBvZiBzbG93bHkgbW92aW5nIGF3YXkKPiA+Pj4gZnJvbSBpbmRleCBsZXNz IGNoYW5uZWxzLiAgVGhlIEFCSSBhbHdheXMgYWxsb3dlZCBpbmRleCBhc3NpZ25tZW50Cj4gPj4+ IGFuZCBpdCBtYWtlcyBmb3IgZWFzaWVyIHVzZXJzcGFjZSBjb2RlLgo+ID4+PiAgIAo+ID4+Pj4g Cj4gPj4+PiBBZGRyZXNzIFJlZ2lzdGVyIAlJSU8gQXR0cmlidXRlCQkJCQkJCURpcglUeXBlCQlJ bmRleCAJTW9kaWZpZXIJSW5mbyBNYXNrCVIvVwlCaXQJCUJpdCBMZW5ndGgJVHlwZQlEZWZhdWx0 CURlc2NyaXB0aW9uIAo+ID4+Pj4gCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCUxlbmd0aCAJRHVy aW5nIENvbW0JCQlWYWx1ZQkKPiA+Pj4+IDB4RTUwQwlJQVdWCWluX2N1cnJlbnQwX3BoYXNlQV9p bnN0YW50YW5lb3VzCQlpbgljdXJyZW50CQkJMAlwaGFzZUEJaW5zdGFudGFuZW91cwlSCTI0CQkz MiBTRQkJUwkJTi9BCQlJbnN0YW50YW5lb3VzIHZhbHVlIG9mIFBoYXNlIEEgY3VycmVudC4gICAg Cj4gPj4+IAo+ID4+PiBJJ20gdW5jb252aW5jZWQgYnkgImluc3RhbnRhbmVvdXMiLiAgVGhhdCBp cyB0aGUgZGVmYXVsdCBhc3N1bXB0aW9uIHRoYXQgeW91IGFyZQo+ID4+PiBtZWFzdXJpbmcgY3Vy cmVudCBhdCB0aGlzIHBvaW50IGluIHRpbWUuICBJJ20gc3RpbGwgY29uZnVzZWQgb24gd2hhdCB0 aGlzIGFjdHVhbGx5Cj4gPj4+IGlzLiBJcyBpdCBlZmZlY3RpdmVseSB0aGUgREMgY3VycmVudD8g SS5lLiB0aGUgd2F2ZSBmb3JtIHZhbHVlIGZvciBjdXJyZW50PyAKPiA+Pj4gWW91IGFuc3dlciB0 aGlzIGJlbG93LiAgVGhleSBhcmUgREMgbWVhc3VyZW1lbnRzLi4gICAgCj4gPj4gTm8sIHRoZXkg YXJlIHRoZSBvdXRwdXQgb2YgdGhlIEFEQyBhdCBhIHBvaW50IGluIHRpbWUuIFRoZSBBREMgc2Ft cGxlcyAKPiA+PiBjb250aW51b3VzIGF0IDgsMDAwIHNhbXBsZXMgcGVyIHNlY29uZCwgc28gd2hl biB5b3UgcmVhZCB0aGlzIHJlZ2lzdGVyCj4gPj4geW91IGFyZSBnZXR0aW5nIHRoZSBzYW1wbGUg bWVhc3VyZWQganVzdCBiZWZvcmUgeW91ciByZWFkLiBJIGRvbuKAmXQga25vdwo+ID4+IHdoeSBh bnlvbmUgd291bGQgcmVhZCB0aGlzIHJlZ2lzdGVyLiBUaGUgc2FtcGxlcyBhcmUgc3RyZWFtZWQg dmlhCj4gPj4gdGhlIFNQSSBpbnRlcmZhY2UsIHdpdGggSUFXViwgVkFXViwgSUJXViwgVkJXViwg SUNXViwgVkNXViwgSU5XViwgCj4gPj4gQVZBLCBCVkEsIENWQSwgQVdBVFQsIEJXQVRULCBDV0FU VCwgQVZBUiwgQlZBUiwgYW5kIENWQVIgdHJhbnNtaXR0ZWQgCj4gPj4gZXZlcnkgMTI1dVMuIFBy b2JhYmx5IGJldHRlciBub3QgdG8gZXhwb3NlIHRoZXNlIHJlZ2lzdGVycyB0byB1c2VyIHNwYWNl LiAgCj4gPiBJJ20gaGFwcHkgbm90IHRvIGV4cG9zZSB0aGVtLCBidXQgaWYgdGhleSBhcmUgdGhl IGluc3RhbnRhbmVvdXMgdmFsdWVzCj4gPiB0aGV5IGFyZSB3aGF0IEkgbWVhbiBieSBEQyB2YWx1 ZXMsIGxpdGVyYWxseSB0aGUgbnVtYmVyIHlvdSB3b3VsZAo+ID4gc2VlIG9uIGFuIG9zY2lsbG9z Y29wZSBpZiB5b3Ugd2VyZSB0byBwcm9iZSB0aGVtLiAgCj4gSWYgeW91IGNvdWxkIHJlYWQgdGhl IGluc3RhbnRhbmVvdXMgcmVnaXN0ZXIgYWZ0ZXIgZWFjaCBzYW1wbGUsIHRoZW4geW91IAo+IHdv dWxkIGdldCBhbiBvc2NpbGxvc2NvcGUgZGlzcGxheSBvZiBhIHNpbmUgd2F2ZS4gSG93ZXZlciwg c2luY2UgYSB1c2VyIAo+IHNwYWNlIGFwcCBjYW5ub3QgcmVhZCB0aGlzIG9uIGVhY2ggc2FtcGxl LCB0aGUgb3V0cHV0IHdvdWxkIGxvb2sgcHJldHR5Cj4gcmFuZG9tLiBDZXJ0YWlubHkgbm90IGEg REMgdmFsdWUsIHdoaWNoIGlzIG11Y2ggbW9yZSBjb25zaXN0ZW50LgpXZSBhcmUgdmlvbGVudGx5 IGFncmVlaW5nIGJ5IHRoZSBzb3VuZCBvZiBpdCAtIGp1c3QgaGF2ZSBhIHNsaWdodGx5IGRpZmZl cmVudAp2aWV3IG9mIHRlcm1pbm9sb2d5LCBJJ20gaGFwcHkgdG8gaGF2ZSBhIHJhcGlkbHkgdmFy eWluZyBEQyB2b2x0YWdlIGFzCm15IHZpZXcsIHlvdSB3YW50IHRvIHRoaW5rIG9mIGl0IGRpZmZl cmVudGx5LgoKQW55aG93IHRoZSBvc2NpbGxvc2NvcGUgYml0IG1ha2VzIGl0IGNsZWFyIHdlIGFy ZSB0YWxraW5nIGFib3V0IHRoZSBzYW1lCnRoaW5nIDspICAKIAo+ID4gICAKPiA+PiAKPiA+PiAg IAo+ID4+PiAKPiA+Pj4gV2hpY2ggYWN0dWFsbHkgcmFpc2VzIGEgcG9pbnQgSSdkIGZvcmdvdHRl bi4gIFdlIGhhdmUgYW4gZXhwbGljaXQgdHlwZSAKPiA+Pj4gZm9yIGFsdHZvbHRhZ2UgKGRlZmlu ZWQgZm9yIEREUyBkZXZpY2VzIGFzIHRoZSB3YXZlZm9ybSBhbXBsaXR1ZGUgSUlSQykuCj4gPj4+ IFdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhhdCBpZiBwb3NzaWJsZS4KPiA+Pj4gCj4g Pj4+IFNvIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUuCj4gPj4+IGluX2N1cnJlbnQwX3BoYXNlQV9y YXcgICAgCj4gPj4gWWVhaCwgdGhhdCBzb3VuZHMgY29ycmVjdCwgd2hpY2ggcmVtaW5kcyBtZSBv ZiBhbm90aGVyIGlzc3VlIHRoYXQgZG9lcyBub3QgbWFrZQo+ID4+IHNlbnNlLiBUbyBtZSwgZ2Fp biBpcyBzb21ldGhpbmcgdGhhdCBpcyBoYXJkd2FyZSByZWxhdGVkIGFuZCBpcyB1c2VkIHRvIG1h Z25pZnkgCj4gPj4gYW4gaW5wdXQgc2lnbmFsIG9yIGlzIHVzZWQgdG8gY2FsaWJyYXRlIGEgbWVh c3VyZW1lbnQuIFNjYWxlIG9uIHRoZSBvdGhlciBoYWQgaXMgCj4gPj4gc29tZXRoaW5nIHRoYXQg aXMgdXNlZCB0byBjb252ZXJ0IGEgcmF3IG1lYXN1cmVtZW50IGludG8gc29tZXRoaW5nIHRoYXQg aXMgbW9yZSAKPiA+PiBtZWFuaW5nZnVsLCBzdWNoIGFzIDB4ODIwMDAwID0gMjIwVi4gU28gZXZl cnl3aGVyZSB3ZSBoYXZlIHVzZWQgc2NhbGUgYW5kIGdhaW4gCj4gPj4gaW50ZXJjaGFuZ2VhYmxl IGlzIGNvbmZ1c2luZy4gIAo+ID4gCj4gPiBBZ3JlZWQgLSB1cCB0byBhIHBvaW50LiAgSWYgeW91 IGhhdmUgYSBoYXJkd2FyZSBnYWluIGNvbnRyb2wgd2hpY2ggZm9yIHdoYXRldmVyCj4gPiByZWFz b24gcmVzdWx0cyBpbiBhIGRpZmZlcmVudCBzY2FsaW5nIG5lZWRpbmcgdG8gYmUgYXBwbGllZCB0 byBnbyBmcm9tIHVzZXJzcGFjZQo+ID4gdmFsdWUgdG8gcmVhbCB3b3JsZCB2YWx1ZSAoc29tZXRp bWVzIGhhcHBlbnMgd2l0aCBtdWx0aSByYW5nZSBkZXZpY2VzKSB0aGVuIHdlCj4gPiBleHBvc2Ug aXQgb25seSBvbmNlIC0gYXMgc2NhbGUuCj4gPiAKPiA+IFdlIGhhdmUgaGFyZHdhcmVnYWluIGFu ZCBjYWxpYmdhaW4gZm9yIHR3ZWFraW5nIHRoZSBnYWluIHRvIGFjY291bnQgZm9yIGNhc2VzCj4g PiB3aGVyZSBpdCBpc24ndCBhcHBhcmVudCBpbiB0aGUgb3V0cHV0IHZhbHVlIChoYXJkd2FyZSBn YWluIC0gbm9ybWFsbHkgdXNlZAo+ID4gd2hlbiB3ZSBhcmUgbWVhc3VyaW5nIHNvbWV0aGluZyBh Ym91dCB0aGUgc2lnbmFsIHRoYXQgaXNuJ3QgaXQncyBtYWduaXR1ZGUpLAo+ID4gb3IgaXMgY29t cGVuc2F0aW5nIGZvciBpbmFjY3VyYWNpZXMgaW4gdGhlIGNpcmN1aXRyeSBvciBzZW5zb3IgKGNh bGliZ2FpbikgIAo+IFRoYXQgaXMgd2hhdCB3ZSBoYXZlLCB0aGUgQURFNzg1NCBoYXMgYSBoYXJk d2FyZWdhaW4gYmVmb3JlIHRoZSBBREMgdG8gYWxsb3cKPiB2YXJpb3VzIGlucHV0IHZvbHRhZ2Ug YW5kIGN1cnJlbnQgcmFuZ2VzOiAwLTI1MG1WLCAwLTAuNVYsIGV0Yy4gQWxzbywgd2UgaGF2ZQo+ IGNhbGliZ2Fpbiwgd2hpY2ggaXMgdXNlZCB0byBjb21wZW5zYXRlIGZvciB0aGUgc2VsZWN0ZWQg Y3VycmVudCB0cmFuc2Zvcm1lciBvciAKPiByb2dvd3NraSBjb2lsIGFuZCB0aGUgdGVybWluYXRp b24gcmVzaXN0b3JzLiAKPiAKPiBNYXliZSB3ZSBzaG91bGQgYWRkIGFkZGl0aW9uYWwgYXR0cmli dXRlcyBmb3Igc2NhbGUgYW5kIHRoZSByZWFsIHdvcmxkIHZhbHVlcz8KPiBUaGUgc2NhbGUgYXR0 cmlidXRlIHdvdWxkIGNvbnZlcnQgdGhlIHJhdyB2YWx1ZSB0byByZWFsIHdvcmxkIHZhbHVlICgy MjBWLCAxMDBBCj4gMjVLV2gsIGV0YykKClNvIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkZWZp bmUgZXZlcnl0aGluZyB1c2luZyBleGlzdGluZyBhdHRyaWJ1dGVzIGFuZCBJCndvdWxkIHJlYWxs eSBsaWtlIHRvIGF2b2lkIGFkZGluZyBtb3JlIGlmIHdlIHBvc3NpYmx5IGNhbi4gSXQncyB3YXkg dG8gZWFzeQp0byBlbmQgdXAgd2l0aCBtb3JlIHRoYW4gb25lIHdheSBvZiBkZXNjcmliaW5nIHRo aW5ncy4KCmNhbGliZ2FpbiBpcyBnb29kIGZvciBtYXBwaW5nIGZyb20gc29tZSBtZWFzdXJlbWVu dCB0byBhbiBleHBlY3RlZCBnYWluLgpUaGF0IGhhcmR3YXJlZ2FpbiBoYXMgdHdvIG9wdGlvbnMu CjEpIFRoZSBkZXZpY2UgaXMgaW50ZXJuYWxseSBjb21wZW5zYXRpbmcgZm9yIGl0IHNvIGlmIHlv dSB3ZXJlIHRvIGhhdmUgYSAyNTBtVgp2YWx1ZSBpdCB3b3VsZCBoYXZlIHRoZSBzYW1lIHJhdyBj b3VudHMgdmFsdWUgKHNlZW1zIHVubGlrZWx5IGJ1dCB0aGVyZSBhcmUKZGV2aWNlcyB0aGF0IGRv IHRoaXMpCjIpIFRoZSBkZXZpY2UgaXMgbm90IGNvbXBlbnNhdGluZyBmb3IgaXQsIGluIHdoaWNo IGNhc2UgaXQgaXMgc2ltcGx5ICdzY2FsZScuCgpTbyB3ZSB0d2VhayB0aGUgY2FsaWJnYWluIHRv IGFkanVzdCBmb3IgdGhlIGFuYWxvZyBjaXJjdWl0IHRoZW4gc2V0IHRoZQp0aGUgc2NhbGUgdG8g dGhlIHJpZ2h0IHJhbmdlLiAgQXQgdGhhdCBwb2ludCBpbiB1c2Vyc3BhY2Ugd2UgdGFrZQpfcmF3 ICogX3NjYWxlIGFuZCBnZXQgdGhlIHJlYWwgd29ybGQgdmFsdWUgb2YgdGhlIHJlbGV2YW50IHRo aW5nLgoKSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGlzIGlzbid0IHBvc3NpYmxlICh1c3VhbGx5 IGEgbm9uIGxpbmVhciB0cmFuc2Zvcm0KZnJvbSB0aGUgYWRjIHJlYWRpbmcgdG8gcmVhbCB3b3Js ZCkgdGhlbiB3ZSBkbyBoYXZlIHRoZSBvcHRpb24gb2YgcHJvdmlkaW5nCl9QUk9DRVNTRUQgb3V0 cHV0cyB3aGljaCBhcmUgaW4gdGhlIGJhc2UgdW5pdHMgb2YgdGhlIHJlbGV2YW50IElJTyB1bml0 LgpIb3dldmVyLCB3ZSBvbmx5IGRvIHRoaXMgaWYgd2UgJ2Nhbid0JyBkbyB0aGUgY29udmVyc2lv biBpbiB1c2Vyc3BhY2UuCgoKPiA+PiBTVEFUVVMwOjYJUkVWQVBBCUFDQ01PREUgaGFzIGNoYW5n ZWQgc2lnbi4gUG93ZXIgaXMgZXhwb3J0ZWQgcmF0aGVyCj4gPj4gdGhhbiBpbXBvcnRlZC4gVXNl ciBzcGFjZSBhcHBsaWNhdGlvbiB3b3VsZCB1c2UgdGhpcyB0byBpbmRpY2F0ZSB0aGUgZGlyZWN0 aW9uCj4gPj4gb2YgcG93ZXIgZmxvdy4gIAo+ID4gVGhpcyBpcyB3aGVyZSB3ZSBzdGFydCB0byBy dW4gaW50byBhIHByb2JsZW0gLSBtb3N0bHkgSUlPIG9ubHkgYWxsb3dzIGZvcgo+ID4gYSBzaW5n bGUgdGhyZXNob2xkIGZvciByaXNpbmcgYW5kIGZhbGxpbmcgb24gYSBnaXZlbiBjaGFubmVsLiAg Tm8gd2F5IHRvCj4gPiB0ZWxsIHdoaWNoIG9uZSB0cmlnZ2VyZWQgaW4gdGhlIEFCSSAtIGV2ZW4g Y29kZSBzYXlzIHdoYXQgYW5kIG9uIHdoYXQgY2hhbm5lbAo+ID4gaXQgZG9lc24ndCBkaXN0aW5n dWlzaCBtdWx0aXBsZSBsZXZlbHMuICAKPiBZZWFoLCB0aGVyZSBpcyBubyB0aHJlc2hvbGQgaGVy ZS4gSXQgb2NjdXJzIHdpdGggdGhlIHBoYXNlIGV4Y2VlZHMgOTAgZGVnLAo+IHdoaWNoIGluZGlj YXRlcyB0aGF0IHRoZSBwb3dlciBpcyBub3cgYmVpbmcgZXhwb3J0ZWQgdG8gdGhlIGdyaWQuCldl IGNvdWxkIHBlcmhhcHMgdXNlIGEgZml4ZWQgdGhyZXNob2xkIHRvIHJlcHJlc2VudCB0aGlzIHRo ZW4uCldvdWxkIG5lZWQgYSBwaGFzZSBjaGFubmVsIHRvIGFzc29jaWF0ZSBpdCB3aXRoIGJ1dCB0 aGF0IHNob3VsZCBiZSBmaW5lLgpOb3RoaW5nIHNheXMgYSB0aHJlc2hvbGQgbmVlZHMgdG8gYmUg Y2hhbmdlYWJsZSA6KQoKaW5fcGhhc2UwX3RocmVzaF9laXRoZXJfdmFsdWUgPSA5MCBkZWdyZWVz Cgo+ID4gCj4gPiBXZSBjYW4gcGxheSBnYW1lcyB3aXRoIGRlZmluaW5nIGFkZGl0aW9uYWwgY2hh bm5lbHMgYnV0IGl0IGlzbid0IHRoYXQgZWxlZ2FudC4KPiA+IE5vdyBhc3N1bWluZyB3ZSB3YW50 IHRvIGRvIGJvdGggZGlyZWN0aW9ucyBvZiBjaGFuZ2UuLiAgCj4gQ29ycmVjdCwgd2UgbmVlZCB0 byBrbm93IHdoZW4gdGhlIHBvd2VyIGlzIGZsb3dpbmcgZnJvbSB0aGUgcG93ZXIgZ3JpZCBvcgo+ IGZsb3dpbmcgdG8gdGhlIHBvd2VyIGdyaWQuIFRoaXMgaXMgY29tbW9uIHdpdGggRGlzdHJpYnV0 ZWQgRW5lcmd5IFJlc291cmNlcwo+IChERVIpIHN1Y2ggYXMgc29sYXIgcGFuZWxzIG9yIHdpbmQg ZmFybXMuIAo+ID4gCj4gPiBpbl9wb3dlcjBfdGhyZXNoX2VpdGhlcl92YWx1ZSA9IDAKPiA+ICh0 byBpbmRpY2F0ZSBhIHRyYW5zaXRpb24gYWNyb3NzIDAgcG93ZXIgLSBJIGFzc3VtZSB0aGUgb3Ro ZXIgZGlyZWN0aW9uIGlzCj4gPiBuZWdhdGl2ZT8pCj4gPiBhbmQgYXNzb2NpYXRlZCBldmVudCBj b2RlLgo+ID4gICAKPiA+PiAKPiA+PiBTVEFUVVMxOjAJTkxPQUQJQXQgbGVhc3Qgb25lIHBoYXNl IGhhcyBlbnRlcmVkIG5vIGxvYWQgY29uZGl0aW9uLiBVc2VyIAo+ID4+IHNwYWNlIGFwcCB3b3Vs ZCBwcm9iYWJseSBhbGVydCB0aGUgdXNlciBvZiBhIGZhdWx0eSBjb25kaXRpb24uICAKPiA+IE5v dCBzdXJlIHdoYXQgdGhpcyBtYXBzIHRvIC0gYnV0IHdvdWxkIGJlIGJhc2VkIG9uIGhvdyBpdCB3 YXMgZGV0ZWN0ZWQuCj4gPiBJcyB0aGlzIGVmZmVjdGl2ZWx5IDAgY3VycmVudD8gIAo+IFRoZSBB REMgaXMgbm9pc3kgYW5kIGRvZXNu4oCZdCBvdXRwdXQgMHgwMDAgd2hlbiB0aGUgY3VycmVudCBp cyAwQSwgc28gYW55dGhpbmcgCj4gYmVsb3cgYSBkZWZpbmVkIHRocmVzaG9sZCBpcyBjb25zaWRl cmVkIHRvIGJlIE5vTG9hZC4KU28gdGhhdCdzIGEgc2ltcGxlIGxvdyBjdXJyZW50IHRocmVzaG9s ZCAtIGFnYWluIHdpdGggYSBmaXhlZCB2YWx1ZSB3aGljaCBpcwpmaW5lIHRvIHJlcHJlc2VudCBh cyB3aXRoIHRoZSBwaGFzZSBvbmUgYWJvdmUuCgo+ID4gICAKPiA+PiAKPiA+PiBTVEFUVVMxOjMJ WlhUT1ZBCUluZGljYXRlcyBQaGFzZSBBIHZvbHRhZ2UgemVybyBjcm9zc2luZyBpcyBtaXNzaW5n LiBUaGlzIAo+ID4+IGlzIGFub3RoZXIgZmF1bHQgY29uZGl0aW9uLiAgCj4gPiAKPiA+IFNpbWls YXIgdG8gdGhlIHJhdGUgb2YgY2hhbmdlIGRldGVjdGlvbiBpbiBzb21lIHdheXMsIGJ1dCBvbmx5 IGV4cGxpY2l0bHkgbG9va3MKPiA+IGF0IHRoZSAwIHBvaW50LiAgV2Ugd291bGQgbmVlZCBzb21l dGhpbmcgbmV3IHRvIHJlcHJlc2VudCB0aGlzIEkgdGhpbmvigKYgIAo+IFRoaXMgb2NjdXJzIHdo ZW4gd2UgaGF2ZSBhIHBoYXNlIGZhaWx1cmUgKHRyYW5zZm9ybWVyIGZhaWx1cmUsIGV0Yykgb3Ig YSBzZW5zb3IgCj4gZmFpbHVyZSAod2lyaW5nIGZhaWx1cmUsIGV0YykuIElmIHBoYXNlIGZhaWx1 cmUgb2NjdXJzLCBpdCBjb3VsZCBjYXVzZSBkYW1hZ2UgdG8gCj4gZXF1aXBtZW50IGxpa2UgYSBt b3Rvci4KClRoaXMgbmVlZHMgc29tZSB0aG91Z2h0LiAgQ291bGQgYmUgdGhlIGtlcm5lbCdzIFJB UyBpbmZyYXN0cnVjdHVyZSBpcyB0aGUgd2F5CnRvIGdvIGJ1dCB0aGlzIGlzIGFuIG9kZCB0aGlu ZyB0byBtYXAgdG8gaXQgKGFuZCB0aGF0IGlzIGEgcmF0aGVyIGNvbnNlcnZhdGl2ZQpwYXJ0IG9m IHRoZSBrZXJuZWwgLSBpdCdzIGhhcmQgZW5vdWdoIGdldHRpbmcgcGVvcGxlIHRvIGFncmVlIG9u IGNvbXB1dGVyIGhhcmR3YXJlCmZhdWx0IGRlc2NyaXB0aW9ucykuCj4gPiAgIAo+ID4+IAouLgo+ ID4+Pj4+IE9LLCB0aGlzIGlzIGdldHRpbmcgc2lsbHkuICBJIHByZXN1bWUgdGhpcyBtZWFucyB0 aGUgdmFsdWVzIGFib3ZlIGFyZSBmaWx0ZXJlZCBhbmQgdGhlc2UKPiA+Pj4+PiBhcmVuJ3Q/ICBJ ZiBzbyB5b3UgbmVlZCB0byBoYXZlIGNoYW5uZWxzIGZvciBib3RoIGFuZCBkaWZmZXJlbnQgZmls dGVyIHZhbHVlcy4gICAgICAKPiA+Pj4+IFRoZXNlIGFyZSB0aGUgYWN0dWFsIHNhbXBsZXMgZnJv bSB0aGUgQURDIGFuZCBub3QgYSBjYWxjdWxhdGVkIG1lYXN1cmVtZW50IG92ZXIgMTAvMTIgY3lj bGVzLiBUaGVzZSBhcmUgdGhlIHNhbXBsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHRoZSBidWZmZXIu ICAgIAo+ID4+PiBPSywgc28gREMgdmFsdWVzIHdoaWNoIGFuc3dlcnMgbXkgcXVlc3Rpb24gYWJv dmUuCj4gPj4+IFNvIHRoaXMgaXMgdGhlICdub3JtYWwnIG1lYXN1cmVtZW50LiAgRm9yIHRoZSBt dWx0aSBjeWNsZSBvbmVzIHdlIG5lZWQgdG8KPiA+Pj4gcmVwcmVzZW50IHRoZW0gYXMgYWRkaXRp b25hbCBtZWFzdXJlbWVudHMgdXNpbmcgdGhlIGluZGV4IGFuZCBkZXNjcmliZSB0aGUKPiA+Pj4g ZmlsdGVyaW5nIGFwcGxpZWQgdG8gdGhlbSAob3IgdXNlIGFsdHZvbHRhZ2UgZXRjIHRvIHNheSB3 ZSBhcmUgbG9va2luZwo+ID4+PiBhdCBtZWFzdXJlbWVudHMgcmVsYXRlZCB0byB0aGUgZmFjdCB0 aGV5IGFyZSBhbHRlcm5hdGluZyByYXRoZXIgdGhhbiBEQy4gICAgCj4gPj4gSSBhbnN3ZXJlZCB0 aGlzIGFib3ZlLiBJIHRoaW5rIHdlIHNob3VsZCByZW1vdmUgdGhlc2UgcmVnaXN0ZXJzIGFzIEkg Y2Fubm90IHNlZSBob3cgYW55b25lIHdvdWxkIHVzZSAKPiA+PiB0aGVtICAKPiA+IENvb2wuIEV2 ZW4gZWFzaWVyLiAgIFRob3VnaCBpZiB3ZSBoYXZlIGEgZGV2aWNlIHRoYXQgd2lsbCBhbGxvdyB1 cyB0byBwdXNoIHRoZXNlCj4gPiB0aHJvdWdoIHRoZSBidWZmZXJlZCBpbnRlcmZhY2UgKHJhdGhl ciB0aGFuIHRoZSBTUEkgbWFzdGVyIHN0dWZmIG9uIGhlcmUpCj4gPiB0aGVuIHdlIHdvdWxkIGhh dmUgdGhlIGNoYW5uZWxzLCBidXQgbm90IGV4cG9ydCB0aGUgX1JBVyBhdHRyaWJ1dGUgLSB0aHVz Cj4gPiBtYWtpbmcgdGhlbSByZWFkYWJsZSBvbmx5IGFzIGEgc3RyZWFtIG9mIGRhdGEuICAKPiBU aGVyZSBpcyBubyB3YXkgdG8gcmVhZCBhbGwgdGhlc2UgaW5zdGFudGFuZW91cyByZWdpc3RlcnMg ZXZlcnkgMTI1dVMuIFRoZSAKPiBTUEkgbWFzdGVyIGludGVyZmFjZSBpcyB0aGUgb25seSB3YXkg dG8gcmV0cmlldmUgdGhlc2UgbWVhc3VyZW1lbnRzLCAKPiBydW5uaW5nIGF0IGFib3V0IDRNYnBz LiAKU291bmRzIGxpa2UgYmVzdCBwbGFuIGlzIGRvbid0IGhhdmUgdXNlcnNwYWNlIGFjY2VzcyB0 byB0aGVtIC0ganVzdCBoYXZlIHRoZSBjaGFubmVscwpmb3IgYXNzb2NpYXRlZCBldmVudHMgaWYg dGhlcmUgYXJlIGFueS4KCi4uLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkZXZlbCBtYWlsaW5nIGxpc3QKZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9y ZwpodHRwOi8vZHJpdmVyZGV2LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcml2ZXJkZXYtZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.kernel.org ([198.145.29.99]:56560 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750764AbeC3JNn (ORCPT ); Fri, 30 Mar 2018 05:13:43 -0400 Date: Fri, 30 Mar 2018 10:13:37 +0100 From: Jonathan Cameron To: John Syne Cc: Rodrigo Siqueira , devel@driverdev.osuosl.org, Lars-Peter Clausen , linux-iio@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Peter Meerwald-Stadler , Hartmut Knaack , daniel.baluta@nxp.com, Michael Hennerich Subject: Re: meter ABI: (was Re: [PATCH v2 1/3] staging:iio:meter: Replaces IIO_DEV_ATTR_CH_OFF by IIO_DEVICE_ATTR) Message-ID: <20180330101337.73d3413c@archlinux> In-Reply-To: References: <3af0e5a795059a8418cf08ff29f05f8d5e00da9b.1520382753.git.rodrigosiqueiramelo@gmail.com> <20180307200730.08ed3c2f@archlinux> <20180309003733.aichruo53vqryafg@smtp.gmail.com> <20180310151045.4570e85d@archlinux> <79D3051B-FF2F-4DD3-AF75-F6A4BAD81838@gmail.com> <20180317203037.1093cc11@archlinux> <20180318122312.0d395367@archlinux> <20180324150205.709aa211@archlinux> <20180325172911.39c0e42f@archlinux> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-iio-owner@vger.kernel.org List-Id: linux-iio@vger.kernel.org On Sun, 25 Mar 2018 13:36:40 -0700 John Syne wrote: > > On Mar 25, 2018, at 9:29 AM, Jonathan Cameron wrote: > > > > On Sat, 24 Mar 2018 15:45:21 -0700 > > John Syne wrote: > > > >>> On Mar 24, 2018, at 8:02 AM, Jonathan Cameron wrote: > >>> > >>> On Mon, 19 Mar 2018 22:57:16 -0700 > >>> John Syne wrote: > >>> > >>>> Hi Jonathan, > >>>> > >>>> Thank you for all your hard work. Your feedback is really helpful. I’m surprised that no one from Analog Device has offered any suggestions. > >>>> > >>> > >>> Sadly those active in the mainline linux kernel from ADI are focused in > >>> other areas currently :( > >> Good point. I will reach out to Analog Devices and get a name of someone > >> who is knowledgeable in this area. Perhaps Lars-Peters has a suggestion. > > Yes, Lars or Michael Hennerich (+CC) are my normal contact points. > > I believe this is outside both of their areas, but they may be able to > > put you in contact with the right person. If nothing else it would be > > good to make someone in ADI aware that people care about linux support for > > these parts! > I sent in a request to ADI for a contact person to help with the review. Cool. > > > >>>> Anyway, please see my comments inline below > >>>> > >>>> Regards, > >>>> John > >>>> > >>>> > >>>> > >>>> > >>>> > >>>>> On Mar 18, 2018, at 5:23 AM, Jonathan Cameron wrote: > >>>>> > >>>>> On Sat, 17 Mar 2018 23:11:45 -0700 > >>>>> John Syne wrote: > >>>>> > >>>>>> Hi Jonathan, > >>>>> Hi John and All, > >>>>> > >>>>> I'd love to get some additional input on this from anyone interested. > >>>>> There are a lot of weird and wonderful derived quantities in an energy > >>>>> meter and it seems we need to make some fundamental changes to support > >>>>> them - including potentially a userspace breaking change to the event > >>>>> code description. > >>>>> > >>>>>> > >>>>>> Here is the complete list of registers for the ADE7878 which I copied from the data sheet. I added a column “IIO Attribute” which I hope follows your IIO ABI. Please make any changes you feel are incorrect. BTW, there are several registers that cannot be generalized and are used purely for chip configuration. I think we should add a new naming convention, namely {register}_{}. Also, I see in the sys_bus_iio doc > > > > No, registers can always be broken up in to real meaningful values if > > they are exposed to userspace and userspace has a reason to tweak > > them. > > > > We never expose raw registers to userspace except through > > debugfs and the clue is in the name - purely for debug. > OK > > > > > >>> > >>> > >>> > >>> > >>>>>> in_accel_x_peak_raw > >>>>>> > >>>>>> so shouldn’t the phase be represented as follows: > >>>>>> > >>>>>> in_current_A_scale > >>>>> I'm still confused. What does A represent here? I assumed that was a wild > >>>>> card for the channel number before but clearly not. > >>>>> > >>>>> Ah, you are labelling the 3 separate phases as A, B and C. Hmm. > >>>>> I guess they sort of look like axis, and sort of like independent channels. > >>>>> So could be indexed or done via modifiers depending on how you look at it. > >>>> In metering terminology, the three phases are commonly referred to as RED, GREEN, BLUE or PhaseA, PhaseB, PhaseC and Neutral. Analog Devices uses the ABCN nomenclature so anyone using this driver will probably have referenced the Analog Devices datasheet so this terminology should be familiar. > >>> Which is more commonly used in general? We are designing what we hope > >>> will be a general interface and last thing we want is to have everyone > >>> not using ADI parts confused! Personally not assigning 'colours' makes > >>> more sense to me. > >> I did a little research and here is the naming used by vendor: > >> > >> ST Microelectronics: P1, P2, P3, N > >> http://www.st.com/content/ccc/resource/technical/document/application_note/5e/f4/22/4d/90/96/4c/c4/CD00153264.pdf/files/CD00153264.pdf/jcr:content/translations/en.CD00153264.pdf > >> > >> Teridian: ABCN > >> https://www.mouser.com/ds/2/256/71M6513-71M6513H-22603.pdf > >> > >> Maxim Integrated: ABCN > >> https://datasheets.maximintegrated.com/en/ds/78M6631.pdf > >> > >> Microchip: ABCN > >> http://ww1.microchip.com/downloads/en/DeviceDoc/51643b.pdf > >> > >> NXP: L1, L2, L3, N > >> https://www.nxp.com/support/developer-resources/reference-designs/kinetis-km3x-256-mcu-three-phase-metering-reference-design:RD-KM3x-256-3PH-METERING > >> > >> Renesas: ABCN > >> https://www.renesas.com/en-us/solutions/home/metering/power-meter-three.html > >> > >> So the most consistent would be ABCN > > Cool. Makes sense to go with that. Thanks for checking this out. > > > >> > >> > >> All vendor providing three phase energy metering ICs use the ABCN terminology. > >>> > >>> (btw please wrap any lines that don't need to be long to around 80 characters). > >>> > >>>>> > >>>>> Hmm. With neutral in there as well I guess we need to make them > >>>>> modifiers (but might change my mind later ;) > >>>>> > >>>>> Particularly as we are using the the modifier for RMS under the previous > >>>>> plan... It appears we should treat that instead like we did for peak > >>>>> and do it as an additional info mask element. The problem with doing that > >>>>> on a continuous measurement is that we can't treat it as a channel to > >>>>> be output through the buffered interface. > >>>> I’ve changed the layout of the spreadsheet to breakout the Direction, Type, Index, Modifier and Info Mask to make sure there is no miss-understanding and will help identify all the items we need to add. > >>>> > >>>> The ADE7878 channels that will use the buffer are IAWV, VAWV, IBWV, VBWV, ICWV, VCWV, INWV, AVA, BVA, CVA, AWATT, BWATT, CWATT, AVAR, BVAR, and CVAR. So I guess we have to add an index > >>> Probably a good idea anyway, we are sort of slowly moving away > >>> from index less channels. The ABI always allowed index assignment > >>> and it makes for easier userspace code. > >>> > >>>> > >>>> Address Register IIO Attribute Dir Type Index Modifier Info Mask R/W Bit Bit Length Type Default Description > >>>> Length During Comm Value > >>>> 0xE50C IAWV in_current0_phaseA_instantaneous in current 0 phaseA instantaneous R 24 32 SE S N/A Instantaneous value of Phase A current. > >>> > >>> I'm unconvinced by "instantaneous". That is the default assumption that you are > >>> measuring current at this point in time. I'm still confused on what this actually > >>> is. Is it effectively the DC current? I.e. the wave form value for current? > >>> You answer this below. They are DC measurements.. > >> No, they are the output of the ADC at a point in time. The ADC samples > >> continuous at 8,000 samples per second, so when you read this register > >> you are getting the sample measured just before your read. I don’t know > >> why anyone would read this register. The samples are streamed via > >> the SPI interface, with IAWV, VAWV, IBWV, VBWV, ICWV, VCWV, INWV, > >> AVA, BVA, CVA, AWATT, BWATT, CWATT, AVAR, BVAR, and CVAR transmitted > >> every 125uS. Probably better not to expose these registers to user space. > > I'm happy not to expose them, but if they are the instantaneous values > > they are what I mean by DC values, literally the number you would > > see on an oscilloscope if you were to probe them. > If you could read the instantaneous register after each sample, then you > would get an oscilloscope display of a sine wave. However, since a user > space app cannot read this on each sample, the output would look pretty > random. Certainly not a DC value, which is much more consistent. We are violently agreeing by the sound of it - just have a slightly different view of terminology, I'm happy to have a rapidly varying DC voltage as my view, you want to think of it differently. Anyhow the oscilloscope bit makes it clear we are talking about the same thing ;) > > > >> > >> > >>> > >>> Which actually raises a point I'd forgotten. We have an explicit type > >>> for altvoltage (defined for DDS devices as the waveform amplitude IIRC). > >>> We should be consistent with that if possible. > >>> > >>> So I think this should be. > >>> in_current0_phaseA_raw > >> Yeah, that sounds correct, which reminds me of another issue that does not make > >> sense. To me, gain is something that is hardware related and is used to magnify > >> an input signal or is used to calibrate a measurement. Scale on the other had is > >> something that is used to convert a raw measurement into something that is more > >> meaningful, such as 0x820000 = 220V. So everywhere we have used scale and gain > >> interchangeable is confusing. > > > > Agreed - up to a point. If you have a hardware gain control which for whatever > > reason results in a different scaling needing to be applied to go from userspace > > value to real world value (sometimes happens with multi range devices) then we > > expose it only once - as scale. > > > > We have hardwaregain and calibgain for tweaking the gain to account for cases > > where it isn't apparent in the output value (hardware gain - normally used > > when we are measuring something about the signal that isn't it's magnitude), > > or is compensating for inaccuracies in the circuitry or sensor (calibgain) > That is what we have, the ADE7854 has a hardwaregain before the ADC to allow > various input voltage and current ranges: 0-250mV, 0-0.5V, etc. Also, we have > calibgain, which is used to compensate for the selected current transformer or > rogowski coil and the termination resistors. > > Maybe we should add additional attributes for scale and the real world values? > The scale attribute would convert the raw value to real world value (220V, 100A > 25KWh, etc) So it should be possible to define everything using existing attributes and I would really like to avoid adding more if we possibly can. It's way to easy to end up with more than one way of describing things. calibgain is good for mapping from some measurement to an expected gain. That hardwaregain has two options. 1) The device is internally compensating for it so if you were to have a 250mV value it would have the same raw counts value (seems unlikely but there are devices that do this) 2) The device is not compensating for it, in which case it is simply 'scale'. So we tweak the calibgain to adjust for the analog circuit then set the the scale to the right range. At that point in userspace we take _raw * _scale and get the real world value of the relevant thing. If for whatever reason this isn't possible (usually a non linear transform from the adc reading to real world) then we do have the option of providing _PROCESSED outputs which are in the base units of the relevant IIO unit. However, we only do this if we 'can't' do the conversion in userspace. > >> STATUS0:6 REVAPA ACCMODE has changed sign. Power is exported rather > >> than imported. User space application would use this to indicate the direction > >> of power flow. > > This is where we start to run into a problem - mostly IIO only allows for > > a single threshold for rising and falling on a given channel. No way to > > tell which one triggered in the ABI - even code says what and on what channel > > it doesn't distinguish multiple levels. > Yeah, there is no threshold here. It occurs with the phase exceeds 90 deg, > which indicates that the power is now being exported to the grid. We could perhaps use a fixed threshold to represent this then. Would need a phase channel to associate it with but that should be fine. Nothing says a threshold needs to be changeable :) in_phase0_thresh_either_value = 90 degrees > > > > We can play games with defining additional channels but it isn't that elegant. > > Now assuming we want to do both directions of change.. > Correct, we need to know when the power is flowing from the power grid or > flowing to the power grid. This is common with Distributed Energy Resources > (DER) such as solar panels or wind farms. > > > > in_power0_thresh_either_value = 0 > > (to indicate a transition across 0 power - I assume the other direction is > > negative?) > > and associated event code. > > > >> > >> STATUS1:0 NLOAD At least one phase has entered no load condition. User > >> space app would probably alert the user of a faulty condition. > > Not sure what this maps to - but would be based on how it was detected. > > Is this effectively 0 current? > The ADC is noisy and doesn’t output 0x000 when the current is 0A, so anything > below a defined threshold is considered to be NoLoad. So that's a simple low current threshold - again with a fixed value which is fine to represent as with the phase one above. > > > >> > >> STATUS1:3 ZXTOVA Indicates Phase A voltage zero crossing is missing. This > >> is another fault condition. > > > > Similar to the rate of change detection in some ways, but only explicitly looks > > at the 0 point. We would need something new to represent this I think… > This occurs when we have a phase failure (transformer failure, etc) or a sensor > failure (wiring failure, etc). If phase failure occurs, it could cause damage to > equipment like a motor. This needs some thought. Could be the kernel's RAS infrastructure is the way to go but this is an odd thing to map to it (and that is a rather conservative part of the kernel - it's hard enough getting people to agree on computer hardware fault descriptions). > > > >> .. > >>>>> OK, this is getting silly. I presume this means the values above are filtered and these > >>>>> aren't? If so you need to have channels for both and different filter values. > >>>> These are the actual samples from the ADC and not a calculated measurement over 10/12 cycles. These are the samples that are placed in the buffer. > >>> OK, so DC values which answers my question above. > >>> So this is the 'normal' measurement. For the multi cycle ones we need to > >>> represent them as additional measurements using the index and describe the > >>> filtering applied to them (or use altvoltage etc to say we are looking > >>> at measurements related to the fact they are alternating rather than DC. > >> I answered this above. I think we should remove these registers as I cannot see how anyone would use > >> them > > Cool. Even easier. Though if we have a device that will allow us to push these > > through the buffered interface (rather than the SPI master stuff on here) > > then we would have the channels, but not export the _RAW attribute - thus > > making them readable only as a stream of data. > There is no way to read all these instantaneous registers every 125uS. The > SPI master interface is the only way to retrieve these measurements, > running at about 4Mbps. Sounds like best plan is don't have userspace access to them - just have the channels for associated events if there are any. ...