From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v3 4/6] xen/arm: zynqmp: eemi access control Date: Tue, 28 Aug 2018 17:05:55 +0100 Message-ID: <79f450e4-7f96-3f9d-d267-a3aa38b1f26a@arm.com> References: <1533945710-15159-4-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1533945710-15159-4-git-send-email-sstabellini@kernel.org> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Stefano Stabellini , xen-devel@lists.xen.org Cc: edgar.iglesias@xilinx.com, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKCk9uIDExLzA4LzE4IDAxOjAxLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3JvdGU6 Cj4gRnJvbTogIkVkZ2FyIEUuIElnbGVzaWFzIiA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4K PiAKPiBGcm9tOiBFZGdhciBFLiBJZ2xlc2lhcyA8ZWRnYXIuaWdsZXNpYXNAeGlsaW54LmNvbT4K PiAKPiBJbnRyb2R1Y2UgZGF0YSBzdHJ1Y3RzIHRvIGltcGxlbWVudCBiYXNpYyBhY2Nlc3MgY29u dHJvbHMuCj4gSW50cm9kdWNlIHRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zOgo+IAo+IGRv bWFpbl9oYXNfbm9kZV9hY2Nlc3M6IGNoZWNrIGFjY2VzcyB0byB0aGUgbm9kZQo+IGRvbWFpbl9o YXNfcmVzZXRfYWNjZXNzOiBjaGVjayBhY2Nlc3MgdG8gdGhlIHJlc2V0IGxpbmUKPiBkb21haW5f aGFzX21taW9fYWNjZXNzOiBjaGVjayBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVyCj4gCj4gU2lnbmVk LW9mZi1ieTogRWRnYXIgRS4gSWdsZXNpYXMgPGVkZ2FyLmlnbGVzaWFzQHhpbGlueC5jb20+Cj4g U2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgo+ IC0tLQo+ICAgeGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxpbngtenlucW1wLWVlbWkuYyB8IDc4 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAxIGZpbGUgY2hhbmdlZCwgNzgzIGlu c2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3BsYXRmb3Jtcy94aWxp bngtenlucW1wLWVlbWkuYyBiL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1l ZW1pLmMKPiBpbmRleCBjM2ExOWU5Li42MmNjMTVjIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2Fy bS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vcGxh dGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jCj4gQEAgLTE2LDYgKzE2LDc0IEBACj4gICAgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICAgICovCj4gICAK PiArLyoKPiArICogIEVFTUkgUG93ZXIgTWFuYWdlbWVudCBBUEkgYWNjZXNzCj4gKyAqCj4gKyAq IFJlZnM6Cj4gKyAqIGh0dHBzOi8vd3d3LnhpbGlueC5jb20vc3VwcG9ydC9kb2N1bWVudGF0aW9u L3VzZXJfZ3VpZGVzL3VnMTIwMC1lZW1pLWFwaS5wZGYKPiArICoKPiArICogQmFja2dyb3VuZDoK PiArICogVGhlIFp5bnFNUCBoYXMgYSBzdWJzeXN0ZW0gbmFtZWQgdGhlIFBNVSB3aXRoIGEgQ1BV IGFuZCBzcGVjaWFsIGRldmljZXMKPiArICogZGVkaWNhdGVkIHRvIHJ1bm5pbmcgUG93ZXIgTWFu YWdlbWVudCBGaXJtd2FyZS4gT3RoZXIgbWFzdGVycyBpbiB0aGUKPiArICogc3lzdGVtIG5lZWQg dG8gc2VuZCByZXF1ZXN0cyB0byB0aGUgUE1VIGluIG9yZGVyIHRvIGZvciBleGFtcGxlOgo+ICsg KiAqIE1hbmFnZSBwb3dlciBzdGF0ZQo+ICsgKiAqIENvbmZpZ3VyZSBjbG9ja3MKPiArICogKiBQ cm9ncmFtIGJpdHN0cmVhbXMgZm9yIHRoZSBwcm9ncmFtbWFibGUgbG9naWMKPiArICogKiBldGMK PiArICoKPiArICogQWx0aG91Z2ggdGhlIGRldGFpbHMgb2YgdGhlIHNldHVwIGFyZSBjb25maWd1 cmFibGUsIGluIHRoZSBjb21tb24gY2FzZQo+ICsgKiB0aGUgUE1VIGxpdmVzIGluIHRoZSBTZWN1 cmUgd29ybGQuIE5TIFdvcmxkIGNhbm5vdCBkaXJlY3RseSBjb21tdW5pY2F0ZQo+ICsgKiB3aXRo IGl0IGFuZCBtdXN0IHVzZSBwcm94eSBzZXJ2aWNlcyBmcm9tIEFSTSBUcnVzdGVkIEZpcm13YXJl IHRvIHJlYWNoCj4gKyAqIHRoZSBQTVUuCj4gKyAqCj4gKyAqIFBvd2VyIE1hbmFnZW1lbnQgb24g dGhlIFp5bnFNUCBpcyBpbXBsZW1lbnRlZCBpbiBhIGxheWVyZWQgbWFubmVyLgo+ICsgKiBUaGUg UE1VIGtub3dzIGFib3V0IHZhcmlvdXMgbWFzdGVycyBhbmQgd2lsbCBlbmZvcmNlIGFjY2VzcyBj b250cm9scwo+ICsgKiBiYXNlZCBvbiBhIHByZS1jb25maWd1cmVkIHBhcnRpdGlvbmluZy4gVGhp cyBjb25maWd1cmF0aW9uIGRpY3RhdGVzCj4gKyAqIHdoaWNoIGRldmljZXMgYXJlIG93bmVkIGJ5 IHRoZSB2YXJpb3VzIG1hc3RlcnMgYW5kIHRoZSBQTVUgRlcgbWFrZXMgc3VyZQo+ICsgKiB0aGF0 IGEgZ2l2ZW4gbWFzdGVyIGNhbm5vdCB0dXJuIG9mZiBhIGRldmljZSB0aGF0IGl0IGRvZXMgbm90 IG93biBvciB0aGF0Cj4gKyAqIGlzIGluIHVzZSBieSBvdGhlciBtYXN0ZXJzLgo+ICsgKgo+ICsg KiBUaGUgUE1VIGlzIG5vdCBhd2FyZSBvZiBtdWx0aXBsZSBleGVjdXRpb24gc3RhdGVzIGluIG1h c3RlcnMuCj4gKyAqIEZvciBleGFtcGxlLCBpdCB0cmVhdHMgdGhlIEFSTXY4IGNvcmVzIGFzIHNp bmdsZSB1bml0cyBhbmQgZG9lcyBub3QKPiArICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBTZWN1cmUg dnMgTlMgT1MncyBub3IgZG9lcyBpdCBrbm93IGFib3V0IEh5cGVydmlzb3JzCj4gKyAqIGFuZCBt dWx0aXBsZSBndWVzdHMuIEl0IGlzIHVwIHRvIHNvZnR3YXJlIG9uIHRoZSBBUk12OCBjb3JlcyB0 byBwcmVzZW50Cj4gKyAqIGEgdW5pZmllZCB2aWV3IG9mIGl0cyBwb3dlciByZXF1aXJlbWVudHMu Cj4gKyAqCj4gKyAqIFRvIGltcGxlbWVudCB0aGlzIHVuaWZpZWQgdmlldywgQVJNIFRydXN0ZWQg RmlybXdhcmUgYXQgRUwzIHByb3ZpZGVzCj4gKyAqIGFjY2VzcyB0byB0aGUgUE0gQVBJIHZpYSBT TUMgY2FsbHMuIEFSTSBUcnVzdGVkIEZpcm13YXJlIGlzIHJlc3BvbnNpYmxlCj4gKyAqIGZvciBt ZWRpYXRpbmcgYmV0d2VlbiB0aGUgU2VjdXJlIGFuZCB0aGUgTlMgd29ybGQsIHJlamVjdGluZyBT TUMgY2FsbHMKPiArICogdGhhdCByZXF1ZXN0IGNoYW5nZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQu Cj4gKyAqCj4gKyAqIFhlbiBydW5uaW5nIGFib3ZlIEFURiBvd25zIHRoZSBOUyB3b3JsZCBhbmQg aXMgcmVzcG9uc2libGUgZm9yIHByZXNlbnRpbmcKPiArICogdW5pZmllZCBQTSByZXF1ZXN0cyB0 YWtpbmcgYWxsIGd1ZXN0cyBhbmQgdGhlIGh5cGVydmlzb3IgaW50byBhY2NvdW50Lgo+ICsgKgo+ ICsgKiBJbXBsZW1lbnRhdGlvbjoKPiArICogVGhlIFBNIEFQSSBjb250YWlucyBkaWZmZXJlbnQg Y2xhc3NlcyBvZiBjYWxscy4KPiArICogQ2VydGFpbiBjYWxscyBhcmUgaGFybWxlc3MgdG8gZXhw b3NlIHRvIGFueSBndWVzdC4KPiArICogVGhlc2UgaW5jbHVkZSBjYWxscyB0byBnZXQgdGhlIFBN IEFQSSBWZXJzaW9uLCBvciB0byByZWFkIG91dCB0aGUgdmVyc2lvbgo+ICsgKiBvZiB0aGUgY2hp cCB3ZSdyZSBydW5uaW5nIG9uLgo+ICsgKgo+ICsgKiBJbiBvcmRlciB0byBjb3JyZWN0bHkgdmly dHVhbGl6ZSB0aGVzZSBjYWxscywgd2UgbmVlZCB0byBrbm93IGlmCj4gKyAqIGd1ZXN0cyBpc3N1 aW5nIHRoZXNlIGNhbGxzIGhhdmUgb3duZXJzaGlwIG9mIHRoZSBnaXZlbiBkZXZpY2UuCj4gKyAq IFRoZSBhcHByb2FjaCB0YWtlbiBoZXJlIGlzIHRvIG1hcCBQTSBBUEkgTm9kZXMgaWRlbnRpZnlp bmcKPiArICogYSBkZXZpY2UgaW50byBiYXNlIGFkZHJlc3NlcyBmb3IgcmVnaXN0ZXJzIHRoYXQg YmVsb25nIHRvIHRoYXQKPiArICogc2FtZSBkZXZpY2UuCj4gKyAqCj4gKyAqIElmIHRoZSBndWVz dCBoYXMgYWNjZXNzIHRvIGRldmljZXMgcmVnaXN0ZXJzLCB3ZSBnaXZlIHRoZSBndWVzdAo+ICsg KiBhY2Nlc3MgdG8gUE0gQVBJIGNhbGxzIHRoYXQgYWZmZWN0IHRoYXQgZGV2aWNlLiBUaGlzIGlz IGltcGxlbWVudGVkCj4gKyAqIGJ5IHBtX25vZGVfYWNjZXNzIGFuZCBkb21haW5faGFzX25vZGVf YWNjZXNzKCkuCj4gKyAqCj4gKyAqIE1NSU8gYWNjZXNzOgo+ICsgKiBUaGVzZSBjYWxscyBhbGxv dyBndWVzdHMgdG8gYWNjZXNzIGNlcnRhaW4gbWVtb3J5IHJhbmdlcy4gVGhlc2UgcmFuZ2VzCj4g KyAqIGFyZSB0eXBpY2FsbHkgcHJvdGVjdGVkIGZvciBzZWN1cmUtd29ybGQgYWNjZXNzIG9ubHkg YW5kIGFsc28gZnJvbQo+ICsgKiBjZXJ0YWluIG1hc3RlcnMgb25seSwgc28gZ3Vlc3RzIGNhbm5v dCBhY2Nlc3MgdGhlbSBkaXJlY3RseS4KPiArICogUmVnaXN0ZXJzIHdpdGhpbiB0aGUgbWVtb3J5 IHJlZ2lvbnMgYWZmZWN0IGNlcnRhaW4gbm9kZXMuIEluIHRoaXMgY2FzZSwKPiArICogb3VyIGlu cHV0IGlzIGFuIGFkZHJlc3MgYW5kIHdlIG1hcCB0aGF0IGFkZHJlc3MgaW50byBhIG5vZGUuIElm IHRoZQo+ICsgKiBndWVzdCBoYXMgb3duZXJzaGlwIG9mIHRoYXQgbm9kZSwgdGhlIGFjY2VzcyBp cyBhbGxvd2VkLgo+ICsgKiBTb21lIHJlZ2lzdGVycyBjb250YWluIGJpdGZpZWxkcyBhbmQgYSBz aW5nbGUgcmVnaXN0ZXIgbWF5IGNvbnRhaW4KPiArICogYml0cyB0aGF0IGFmZmVjdCBtdWx0aXBs ZSBub2Rlcy4KPiArICovCj4gKwo+ICAgI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgo+ICAgI2luY2x1 ZGUgPHhlbi9zY2hlZC5oPgo+ICAgI2luY2x1ZGUgPHhlbi90eXBlcy5oPgo+IEBAIC0yMyw2ICs5 MSw3MjEgQEAKPiAgICNpbmNsdWRlIDxhc20vcmVncy5oPgo+ICAgI2luY2x1ZGUgPGFzbS9wbGF0 Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmg+Cj4gICAKPiArc3RydWN0IHBtX2FjY2Vzcwo+ICt7 Cj4gKyAgICBwYWRkcl90IGFkZHI7CgpJdCBzZWVtcyB0aGF0IHRoZSBhZGRyZXNzIHdpbGwgYWx3 YXlzIHBhZ2UtYWxpZ25lZC4gU28gY291bGQgd2Ugc3RvcmUgYSAKZnJhbWUgdXNpbmcgbWZuX3Q/ Cgo+ICsgICAgYm9vbCBod2RvbV9hY2Nlc3M7ICAgIC8qIEhXIGRvbWFpbiBnZXRzIGFjY2VzcyBy ZWdhcmRsZXNzLiAgKi8KPiArfTsKPiArCj4gKy8qCj4gKyAqIFRoaXMgdGFibGUgbWFwcyBhIG5v ZGUgaW50byBhIG1lbW9yeSBhZGRyZXNzLgo+ICsgKiBJZiBhIGd1ZXN0IGhhcyBhY2Nlc3MgdG8g dGhlIGFkZHJlc3MsIGl0IGhhcyBlbm91Z2ggY29udHJvbAo+ICsgKiBvdmVyIHRoZSBub2RlIHRv IGdyYW50IGl0IGFjY2VzcyB0byBFRU1JIGNhbGxzIGZvciB0aGF0IG5vZGUuCj4gKyAqLwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHBtX2FjY2VzcyBwbV9ub2RlX2FjY2Vzc1tdID0gewoKWy4uLl0K Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIHRhYmxlIG1hcHMgcmVzZXQgbGluZSBJRHMgaW50byBhIG1l bW9yeSBhZGRyZXNzLgo+ICsgKiBJZiBhIGd1ZXN0IGhhcyBhY2Nlc3MgdG8gdGhlIGFkZHJlc3Ms IGl0IGhhcyBlbm91Z2ggY29udHJvbAo+ICsgKiBvdmVyIHRoZSBhZmZlY3RlZCBub2RlIHRvIGdy YW50IGl0IGFjY2VzcyB0byBFRU1JIGNhbGxzIGZvcgo+ICsgKiByZXNldHRpbmcgdGhhdCBub2Rl Lgo+ICsgKi8KPiArI2RlZmluZSBYSUxQTV9SRVNFVF9JRFgobikgKG4gLSBYSUxQTV9SRVNFVF9Q Q0lFX0NGRykKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgcG1fcmVzZXRfYWNjZXNz W10gPSB7CgpbLi4uXQoKPiArCj4gKy8qCj4gKyAqIFRoaXMgdGFibGUgbWFwcyByZXNldCBsaW5l IElEcyBpbnRvIGEgbWVtb3J5IGFkZHJlc3MuCj4gKyAqIElmIGEgZ3Vlc3QgaGFzIGFjY2VzcyB0 byB0aGUgYWRkcmVzcywgaXQgaGFzIGVub3VnaCBjb250cm9sCj4gKyAqIG92ZXIgdGhlIGFmZmVj dGVkIG5vZGUgdG8gZ3JhbnQgaXQgYWNjZXNzIHRvIEVFTUkgY2FsbHMgZm9yCj4gKyAqIHJlc2V0 dGluZyB0aGF0IG5vZGUuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiArICAgIHBh ZGRyX3Qgc3RhcnQ7Cj4gKyAgICBwYWRkcl90IHNpemU7Cj4gKyAgICB1aW50MzJfdCBtYXNrOyAg IC8qIFplcm8gbWVhbnMgbm8gbWFzaywgaS5lIGFsbCBiaXRzLiAgKi8KPiArICAgIGVudW0gcG1f bm9kZV9pZCBub2RlOwo+ICsgICAgYm9vbCBod2RvbV9hY2Nlc3M7Cj4gKyAgICBib29sIHJlYWRv bmx5Owo+ICt9IHBtX21taW9fYWNjZXNzW10gPSB7CgpUaG9zZSAzIGFycmF5cyBjb250YWlucyBh IGxvdCBvZiBoYXJkY29kZWQgdmFsdWUuIENhbid0IGFueSBvZiB0aGlzIGJlIApkZXRlY3RlZCBm cm9tIHRoZSBkZXZpY2UtdHJlZT8KCkkgd291bGQgYmUgaW50ZXJlc3RlZCB0byBrbm93IGhvdyB0 aGlzIGlzIGdvaW5nIHRvIHdvcmsgd2l0aCB1cHN0cmVhbSAKTGludXguIERvIHlvdSBoYXJkY29k ZSBhbGwgdGhlIHZhbHVlcyB0aGVyZSBhcyB3ZWxsPwoKPiArc3RhdGljIGJvb2wgcG1fY2hlY2tf YWNjZXNzKGNvbnN0IHN0cnVjdCBwbV9hY2Nlc3MgKmFjbCwgc3RydWN0IGRvbWFpbiAqZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlkeCkKPiArewo+ICsgICAgdW5z aWduZWQgbG9uZyBtZm47CgptZm5fdCBwbGVhc2UuIFRoZSBjb2RlIGlzIG5vdCB0aGF0IG5pY2Ug YnV0IGF0IGxlYXN0IGl0IGFkZCBtb3JlIHNhZmV0eSAKaW4gdGhlIGNvZGUuIEhvcGVmdWxseSBp b21tdV9hY2Nlc3NfcGVybWl0dGVkIHdpbGwgYmUgY29udmVydGVkIHRvIAp0eXBlc2FmZSBNRk4g c29vbi4KCj4gKwo+ICsgICAgaWYgKCBhY2xbaWR4XS5od2RvbV9hY2Nlc3MgJiYgaXNfaGFyZHdh cmVfZG9tYWluKGQpICkKPiArICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgICBpZiAoICFh Y2xbaWR4XS5hZGRyICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgbWZuID0g UEZOX0RPV04oYWNsW2lkeF0uYWRkcik7CgptYWRkcl90b19tZm4oLi4uKTsKCj4gKyAgICByZXR1 cm4gaW9tZW1fYWNjZXNzX3Blcm1pdHRlZChkLCBtZm4sIG1mbik7CgpJcyB0aGUgYWRkcmVzcyBz b21ldGhpbmcgdGhhdCBhIGd1ZXN0IHdvdWxkIGJlIGFsbG93ZWQgdG8gcmVhZC93cml0ZSAKZGly ZWN0bHk/IElmIG5vdCwgdGhlbiBpb21lbV9hY2Nlc3NfcGVybWl0dGVkKC4uLikgc2hvdWxkIG5v dCBiZSB1c2VkLgoKPiArfQo+ICsKPiArLyogQ2hlY2sgaWYgYSBkb21haW4gaGFzIGFjY2VzcyB0 byBhIG5vZGUuICAqLwo+ICtzdGF0aWMgYm9vbCBkb21haW5faGFzX25vZGVfYWNjZXNzKHN0cnVj dCBkb21haW4gKmQsIHVpbnQzMl90IG5vZGVpZCkKPiArewo+ICsgICAgaWYgKCBub2RlaWQgPiBB UlJBWV9TSVpFKHBtX25vZGVfYWNjZXNzKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsK PiArICAgIHJldHVybiBwbV9jaGVja19hY2Nlc3MocG1fbm9kZV9hY2Nlc3MsIGQsIG5vZGVpZCk7 Cj4gK30KPiArCj4gKy8qIENoZWNrIGlmIGEgZG9tYWluIGhhcyBhY2Nlc3MgdG8gYSByZXNldCBs aW5lLiAgKi8KPiArc3RhdGljIGJvb2wgZG9tYWluX2hhc19yZXNldF9hY2Nlc3Moc3RydWN0IGRv bWFpbiAqZCwgdWludDMyX3QgcnN0KQo+ICt7Cj4gKyAgICBpZiAoIHJzdCA8IFhJTFBNX1JFU0VU X1BDSUVfQ0ZHICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgcnN0IC09IFhJ TFBNX1JFU0VUX1BDSUVfQ0ZHOwo+ICsKPiArICAgIGlmICggcnN0ID4gQVJSQVlfU0laRShwbV9y ZXNldF9hY2Nlc3MpICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgcmV0dXJu IHBtX2NoZWNrX2FjY2VzcyhwbV9yZXNldF9hY2Nlc3MsIGQsIHJzdCk7Cj4gK30KPiArCj4gKy8q Cj4gKyAqIENoZWNrIGlmIGEgZ2l2ZW4gZG9tYWluIGhhcyBhY2Nlc3MgdG8gcGVyZm9ybSBhbiBp bmRpcmVjdAo+ICsgKiBNTUlPIGFjY2Vzcy4KClRoaXMgc2VudGVuY2Ugc2VlbXMgdG8gY29uZmly bSBhIGRvbWFpbiBjYW5ub3QgZG8gZGlyZWN0IE1NSU8gYWNjZXNzIHRvIAp0aGF0IHJlZ2lvbi4g U28sIGlvbWVtX2FjY2Vzc19wZXJtaXR0ZWQgaXMgZGVmaW5pdGVseSBub3QgYW4gb3B0aW9uIGhl cmUuCgo+ICsgKgo+ICsgKiBJZiB0aGUgcHJvdmlkZWQgbWFzayBpcyBpbnZhbGlkLCBpdCB3aWxs IGJlIGZpeGVkIHVwLgo+ICsgKi8KPiArc3RhdGljIGJvb2wgZG9tYWluX2hhc19tbWlvX2FjY2Vz cyhzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgd3JpdGUsIHBhZGRyX3QgYWRkciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCAqbWFzaykKCkkgZG9uJ3Qgc2VlIHRoaXMgZnVuY3Rpb24gdXNlZCBi ZWxvdywgdGhpcyB3b3VsZCBsZWFkIHRvIGEgY29tcGlsYXRpb24gCmVycm9yLiBDYW4geW91IG1h a2UgdGhlIHNlcmllcyBpcyBiaXNlY3RhYmxlPwoKPiArewo+ICsgICAgdW5zaWduZWQgaW50IGk7 Cj4gKyAgICBib29sIHJldCA9IGZhbHNlOwo+ICsgICAgdWludDMyX3QgcHJvdF9tYXNrID0gMDsK PiArCj4gKyAgICAvKgo+ICsgICAgICogVGhlIGhhcmR3YXJlIGRvbWFpbiBnZXRzIHJlYWQgYWNj ZXNzIHRvIGV2ZXJ5dGhpbmcuCj4gKyAgICAgKiBMb3dlciBsYXllcnMgd2lsbCBkbyBmdXJ0aGVy IGZpbHRlcmluZy4KPiArICAgICAqLwo+ICsgICAgaWYgKCAhd3JpdGUgJiYgaXNfaGFyZHdhcmVf ZG9tYWluKGQpICkKPiArICAgICAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgICAvKiBTY2FuIHRo ZSBBQ0wuICAqLwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtX21taW9fYWNj ZXNzKTsgaSsrICkKPiArICAgIHsKPiArICAgICAgICBpZiAoIGFkZHIgPCBwbV9tbWlvX2FjY2Vz c1tpXS5zdGFydCApCj4gKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgICBpZiAo IGFkZHIgPiBwbV9tbWlvX2FjY2Vzc1tpXS5zdGFydCArIHBtX21taW9fYWNjZXNzW2ldLnNpemUg KQoKSSB3b3VsZCBhZGQgYW4gQVNTRVJUKHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0ID49IHBtX21t aW9fYWNjZXNzW2ldLnNpemUpIAp0byBjYXRjaCB3cmFwcGluZy4KCj4gKyAgICAgICAgICAgIGNv bnRpbnVlOwo+ICsKPiArICAgICAgICBpZiAoIHdyaXRlICYmIHBtX21taW9fYWNjZXNzW2ldLnJl YWRvbmx5ICkKPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgIGlmICggcG1f bW1pb19hY2Nlc3NbaV0uaHdkb21fYWNjZXNzICYmICFpc19oYXJkd2FyZV9kb21haW4oZCkgKQo+ ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICAgaWYgKCAhZG9tYWluX2hhc19u b2RlX2FjY2VzcyhkLCBwbV9tbWlvX2FjY2Vzc1tpXS5ub2RlKSApCj4gKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKPiArCj4gKyAgICAgICAgLyogV2UndmUgZ290IGFjY2VzcyB0byB0aGlzIHJl ZyAob3IgcGFydHMgb2YgaXQpLiAgKi8KPiArICAgICAgICByZXQgPSB0cnVlOwo+ICsKPiArICAg ICAgICAvKiBQZXJtaXQgd3JpdGUgYWNjZXNzIHRvIHNlbGVjdGVkIGJpdHMuICAqLwo+ICsgICAg ICAgIHByb3RfbWFzayB8PSBwbV9tbWlvX2FjY2Vzc1tpXS5tYXNrID86IDB4RkZGRkZGRkY7CkNh biB5b3UgdXNlIEdFTk1BU0sgaGVyZT8KCk5JVDogbmV3bGluZQoKPiArICAgICAgICBicmVhazsK PiArICAgIH0KPiArCj4gKyAgICAvKiBNYXNraW5nIG9ubHkgYXBwbGllcyB0byB3cml0ZXMuICAq Lwo+ICsgICAgaWYgKCB3cml0ZSApCj4gKyAgICAgICAgKm1hc2sgJj0gcHJvdF9tYXNrOwoKU28g Zm9yIHJlYWRpbmcgdGhlcmUgYXJlIG5vIG1hc2tpbmc/IFdoYXQgc2hvdWxkIGJlIHRoZSB2YWx1 ZSBpdD8KCj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgIGJvb2wgenlucW1wX2Vl bWkoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gICB7Cj4gICAgICAgcmV0dXJuIGZhbHNl Owo+IAoKQ2hlZXJzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL3hlbi1kZXZlbA==