From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH v5 6/7] xen/arm: zynqmp: implement zynqmp_eemi Date: Wed, 12 Dec 2018 15:56:30 -0800 (PST) Message-ID: References: <1543871021-315-6-git-send-email-sstabellini@kernel.org> <5d6b9c12-fff1-cf9f-8fb8-e3237c98b47f@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall Cc: edgar.iglesias@xilinx.com, Stefano Stabellini , Stefano Stabellini , saeed.nowshadi@xilinx.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAxMiBEZWMgMjAxOCwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IE9uIDExLzEyLzIwMTgg MjI6MjMsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPiA+IE9uIFR1ZSwgMTEgRGVjIDIwMTgs IEp1bGllbiBHcmFsbCB3cm90ZToKPiA+ID4gSGkgU3RlZmFubywKPiA+ID4gCj4gPiA+IE9uIDAz LzEyLzIwMTggMjE6MDMsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPiA+ID4gPiBGcm9tOiAi RWRnYXIgRS4gSWdsZXNpYXMiIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29tPgo+ID4gPiA+IAo+ ID4gPiA+IEZyb206IEVkZ2FyIEUuIElnbGVzaWFzIDxlZGdhci5pZ2xlc2lhc0B4aWxpbnguY29t Pgo+ID4gPiA+IAo+ID4gPiA+IHp5bnFtcF9lZW1pIHVzZXMgdGhlIGRlZmluZWQgZnVuY3Rpb25z IGFuZCBzdHJ1Y3RzIHRvIGRlY2lkZSB3aGV0aGVyIHRvCj4gPiA+ID4gbWFrZSBhIGNhbGwgdG8g dGhlIGZpcm13YXJlLCBvciB0byBzaW1wbHkgcmV0dXJuIGEgcHJlZGVmaW5lZCB2YWx1ZS4KPiA+ ID4gPiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBFZGdhciBFLiBJZ2xlc2lhcyA8ZWRnYXIuaWds ZXNpYXNAeGlsaW54LmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW5vIFN0YWJlbGxp bmkgPHN0ZWZhbm9zQHhpbGlueC5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gQ2hhbmdlcyBpbiB2 NToKPiA+ID4gPiAtIHJlbW92ZSBtbWlvX2FjY2VzcyBoYW5kbGluZwo+ID4gPiA+IAo+ID4gPiA+ IENoYW5nZXMgaW4gdjQ6Cj4gPiA+ID4gLSBhZGQgI2luY2x1ZGUgYXMgbmVlZGVkCj4gPiA+ID4g LSBpbXByb3ZlIGNvbW1lbnQKPiA+ID4gPiAtIGNvZGUgc3R5bGUKPiA+ID4gPiAtLS0KPiA+ID4g PiAgICB4ZW4vYXJjaC9hcm0vcGxhdGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jIHwgMTgxCj4g PiA+ID4gKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+ID4gPiA+ICAgIDEgZmlsZSBjaGFu Z2VkLCAxMjUgaW5zZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCj4gPiA+ID4gCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMK PiA+ID4gPiBiL3hlbi9hcmNoL2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPiA+ ID4gPiBpbmRleCA5MmEwMmRmLi45ZWNmMjg2IDEwMDY0NAo+ID4gPiA+IC0tLSBhL3hlbi9hcmNo L2FybS9wbGF0Zm9ybXMveGlsaW54LXp5bnFtcC1lZW1pLmMKPiA+ID4gPiArKysgYi94ZW4vYXJj aC9hcm0vcGxhdGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5jCj4gPiA+ID4gQEAgLTc2LDEwICs3 NiwxMCBAQAo+ID4gPiA+ICAgICAgI2luY2x1ZGUgPHhlbi9pb2NhcC5oPgo+ID4gPiA+ICAgICNp bmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGFzbS9zbWNjYy5oPgo+ID4g PiA+ICAgICNpbmNsdWRlIDxhc20vcmVncy5oPgo+ID4gPiA+ICAgICNpbmNsdWRlIDxhc20vcGxh dGZvcm1zL3hpbGlueC16eW5xbXAtZWVtaS5oPgo+ID4gPiA+ICAgIC0jaWYgMAo+ID4gPiA+ICAg IHN0cnVjdCBwbV9hY2Nlc3MKPiA+ID4gPiAgICB7Cj4gPiA+ID4gICAgICAgIG1mbl90IG1mbjsK PiA+ID4gPiBAQCAtMzA5LDY3ICszMDksMTM2IEBAIHN0YXRpYyBib29sIGRvbWFpbl9oYXNfcmVz ZXRfYWNjZXNzKHN0cnVjdCBkb21haW4KPiA+ID4gPiAqZCwKPiA+ID4gPiB1aW50MzJfdCByc3Qp Cj4gPiA+ID4gICAgICAgIHJldHVybiBwbV9jaGVja19hY2Nlc3MocG1fcmVzZXRfYWNjZXNzLCBk LCByc3QpOwo+ID4gPiA+ICAgIH0KPiA+ID4gPiAgICAtLyoKPiA+ID4gPiAtICogQ2hlY2sgaWYg YSBnaXZlbiBkb21haW4gaGFzIGFjY2VzcyB0byBwZXJmb3JtIGFuIGluZGlyZWN0Cj4gPiA+ID4g LSAqIE1NSU8gYWNjZXNzLgo+ID4gPiA+IC0gKgo+ID4gPiA+IC0gKiBJZiB0aGUgcHJvdmlkZWQg bWFzayBpcyBpbnZhbGlkLCBpdCB3aWxsIGJlIGZpeGVkIHVwLgo+ID4gPiA+IC0gKi8KPiA+ID4g PiAtc3RhdGljIGJvb2wgZG9tYWluX2hhc19tbWlvX2FjY2VzcyhzdHJ1Y3QgZG9tYWluICpkLAo+ ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGUsIHBh ZGRyX3QgYWRkciwKPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCAqbWFzaykKPiA+ID4gCj4gPiA+IFdoeSBkbyB5b3UgcmVtb3ZlIGNvZGUgdGhhdCB5 b3UganVzdCBpbnRyb2R1Y2VkPwo+ID4gCj4gPiBJIGFtIHJlYWxseSBzb3JyeSBhYm91dCB0aGlz LCBpdCB3YXMgZXJyb3IgYXBwbHlpbmcgYSBwYXRjaC4gVGhpcyBjb2RlCj4gPiBzaG91bGQgbmV2 ZXIgaGF2ZSBiZWVuIGludHJvZHVjZWQ6IHRoZSBjb2RlIHNob3VsZCBiZSByZW1vdmVkIGZyb20g dGhlCj4gPiBwcmV2aW91cyBwYXRjaC4gSSdsbCBmaXggaXQuCj4gPiAKPiA+IAo+ID4gPiA+ICti b29sIHp5bnFtcF9lZW1pKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ID4gPiA+ICAgIHsK PiA+ID4gPiAtICAgIHVuc2lnbmVkIGludCBpOwo+ID4gPiA+IC0gICAgYm9vbCByZXQgPSBmYWxz ZTsKPiA+ID4gPiAtICAgIHVpbnQzMl90IHByb3RfbWFzayA9IDA7Cj4gPiA+ID4gLQo+ID4gPiA+ IC0gICAgLyoKPiA+ID4gPiAtICAgICAqIFRoZSBoYXJkd2FyZSBkb21haW4gZ2V0cyByZWFkIGFj Y2VzcyB0byBldmVyeXRoaW5nLgo+ID4gPiA+IC0gICAgICogTG93ZXIgbGF5ZXJzIHdpbGwgZG8g ZnVydGhlciBmaWx0ZXJpbmcuCj4gPiA+ID4gLSAgICAgKi8KPiA+ID4gPiAtICAgIGlmICggIXdy aXRlICYmIGlzX2hhcmR3YXJlX2RvbWFpbihkKSApCj4gPiA+ID4gLSAgICAgICAgcmV0dXJuIHRy dWU7Cj4gPiA+ID4gKyAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7Cj4gPiA+ID4gKyAgICB1 aW50MzJfdCBmaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMCk7Cj4gPiA+ID4gKyAgICB1aW50MzJf dCBub2RlaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMSk7Cj4gPiA+IAo+ID4gPiBZb3UgZGlkbid0 IGFkZHJlc3MgbXkgY29uY2VybiByZWdhcmRpbmcgU01DMzIgdnMgU01DNjQgY29udmVudGlvbi4g QXMgSQo+ID4gPiBzYWlkCj4gPiA+IGVhcmxpZXIgb24sIGF0IGxlYXN0IENBTExfQ09VTlQsIFVJ RCBhbmQgVkVSU0lPTiBhcmUgb25seSBhY2Nlc3NpYmxlIHVzaW5nCj4gPiA+IHRoZQo+ID4gPiBT TUMzMiBjb252ZW50aW9uLgo+ID4gPiAKPiA+ID4gSSBjYW4ndCB0ZWxsIGZvciB0aGUgb3RoZXIg YXMgdGhlIEVFTUkgc3BlYyBkb2VzIG5vdCBzZWVtIHRvIHNwZWNpZnkgaXQuIEkKPiA+ID4gd291 bGQgYmUgc3VycHJpc2VkIHRoYXQgRUVNSSB3b3VsZCAgaWdub3JlIHRvcHMgYml0cyBvZiB0aGUg SUQgZ2l2ZW4gdGhleQo+ID4gPiBjb252ZXkgZGlmZmVyZW50IGluZm9ybWF0aW9uIChlLmcgIGZh c3QveWllbGRpbmcgY2FsbCwgMzIvNjQtYml0Cj4gPiA+IGNvbnZlbnRpb24pLgo+ID4gPiAKPiA+ ID4gTG9va2luZyBhdCB0aGUgYnJhbmNoIHlvdSBtZW50aW9uZWQgZWFybGllciBvbiwgenlucW1w X3BtX2ludm9rZV9mbgo+ID4gPiAoZHJpdmVycy9maXJtd2FyZS94aWxpbngvenlucW1wLmMpIGlz IGRlZmluaXRlbHkgdXNpbmcgdGhlIFNNQzY0IGNhbGxpbmcKPiA+ID4gY29udmVudGlvbiBhcyBk ZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYWJvdmUgdGhlIGZ1bmN0aW9uLgo+ID4gPiAK PiA+ID4gU28gdGhpcyBuZWVkcyB0byBiZSBmaXhlZCBwcm9wZXJseS4KPiA+IAo+ID4gT0ssIEkn bGwgYWRkIGEgY2hlY2sgZm9yIHRoZSBtYW5kYXRvcnkgc21jMzIgY2FsbHMgYW5kIGZvcndhcmQg dGhlbSB0bwo+ID4gZmlybXdhcmUgcHJvcGVybHkuCj4gCj4gc21jMzIgaXMgb25seSBwYXJ0IG9m IHRoZSBwcm9ibGVtIEkgbWVudGlvbmVkLiBUaGUgbWFpbiBwcm9ibGVtIGlzIHlvdSBvbmx5Cj4g bG9vayBhdCB0aGUgZnVuY3Rpb24gbnVtYmVyIChiaXRzIDAtMTUpLiBUaGlzIGlzIG5vdCBlbm91 Z2ggdG8ga25vdyB3aGljaAo+IGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNhbGxlZC4gWW91IHdh bnQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGZ1bGwKPiBmdW5jdGlvbiBpZGVudGlmaWVyLiBX ZSBwcm92aWRlIGhlbHBlcnMgdG8gY3JlYXRlIHRoZW0gKHNlZQo+IEFSTV9TTUNDQ19DQUxMX1ZB TCkuCgpZZXMsIEkgZ2V0IHdoYXQgeW91IGFyZSBzYXlpbmcuIEkgbWFkZSBhIGZldyBjaGFuZ2Vz IGluIHRoYXQgZGlyZWN0aW9uLgoKICAgCj4gPiA+ID4gKyAgICB1bnNpZ25lZCBpbnQgcG1fZm4g PSBmaWQgJiAweEZGRkY7Cj4gPiA+ID4gKyAgICBlbnVtIHBtX3JldF9zdGF0dXMgcmV0Owo+ID4g PiA+ICAgIC0gICAgLyogU2NhbiB0aGUgQUNMLiAgKi8KPiA+ID4gPiAtICAgIGZvciAoIGkgPSAw OyBpIDwgQVJSQVlfU0laRShwbV9tbWlvX2FjY2Vzcyk7IGkrKyApCj4gPiA+ID4gKyAgICBzd2l0 Y2ggKCBwbV9mbiApCj4gPiA+ID4gICAgICAgIHsKPiA+ID4gPiAtICAgICAgICBBU1NFUlQocG1f bW1pb19hY2Nlc3NbaV0uc3RhcnQgKyBwbV9tbWlvX2FjY2Vzc1tpXS5zaXplID49Cj4gPiA+ID4g LSAgICAgICAgICAgICAgIHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0KTsKPiA+ID4gPiAtCj4gPiA+ ID4gLSAgICAgICAgaWYgKCBhZGRyIDwgcG1fbW1pb19hY2Nlc3NbaV0uc3RhcnQgKQo+ID4gPiA+ IC0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gLSAgICAgICAgaWYgKCBhZGRyID49 IHBtX21taW9fYWNjZXNzW2ldLnN0YXJ0ICsgcG1fbW1pb19hY2Nlc3NbaV0uc2l6ZSApCj4gPiA+ ID4gLSAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiA+IC0KPiA+ID4gPiAtICAgICAgICBpZiAo IHdyaXRlICYmIHBtX21taW9fYWNjZXNzW2ldLnJlYWRvbmx5ICkKPiA+ID4gPiAtICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwo+ID4gPiA+IC0gICAgICAgIGlmICggcG1fbW1pb19hY2Nlc3NbaV0u aHdkb21fYWNjZXNzICYmICFpc19oYXJkd2FyZV9kb21haW4oZCkgKQo+ID4gPiA+IC0gICAgICAg ICAgICByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gLSAgICAgICAgaWYgKCAhZG9tYWluX2hhc19ub2Rl X2FjY2VzcyhkLCBwbV9tbWlvX2FjY2Vzc1tpXS5ub2RlKSApCj4gPiA+ID4gLSAgICAgICAgICAg IHJldHVybiBmYWxzZTsKPiA+ID4gPiAtCj4gPiA+ID4gLSAgICAgICAgLyogV2UndmUgZ290IGFj Y2VzcyB0byB0aGlzIHJlZyAob3IgcGFydHMgb2YgaXQpLiAgKi8KPiA+ID4gPiAtICAgICAgICBy ZXQgPSB0cnVlOwo+ID4gPiA+IC0KPiA+ID4gPiAtICAgICAgICAvKiBQZXJtaXQgd3JpdGUgYWNj ZXNzIHRvIHNlbGVjdGVkIGJpdHMuICAqLwo+ID4gPiA+IC0gICAgICAgIHByb3RfbWFzayB8PSBw bV9tbWlvX2FjY2Vzc1tpXS5tYXNrID86IEdFTk1BU0soMzEsIDApOwo+ID4gPiA+IC0gICAgICAg IGJyZWFrOwo+ID4gPiA+IC0gICAgfQo+ID4gPiA+IC0KPiA+ID4gPiAgICAgICAgLyoKPiA+ID4g PiAtICAgICAqIE1hc2tpbmcgb25seSBhcHBsaWVzIHRvIHdyaXRlczogdmFsdWVzIGFyZSBzYWZl IHRvIHJlYWQsIGJ1dCBub3QKPiA+ID4gPiAtICAgICAqIGFsbCBiaXRzIGFyZSB3cml0ZWFibGUu Cj4gPiA+ID4gKyAgICAgKiBXZSBjYW4ndCBhbGxvdyBDUFVzIHRvIHN1c3BlbmQgd2l0aG91dCBY ZW4ga25vd2luZyBhYm91dCBpdC4KPiA+ID4gPiArICAgICAqIFdlIGFjY2VwdCBidXQgaWdub3Jl IHRoZSByZXF1ZXN0IGFuZCB3YWl0IGZvciB0aGUgZ3Vlc3QgdG8gaXNzdWUKPiA+ID4gPiArICAg ICAqIGEgV0ZJIG9yIFBTQ0kgY2FsbCB3aGljaCBYZW4gd2lsbCB0cmFwIGFuZCBhY3QgYWNjb3Jk aW5nbHkgdXBvbi4KPiA+ID4gPiAgICAgICAgICovCj4gPiA+ID4gLSAgICBpZiAoIHdyaXRlICkK PiA+ID4gPiAtICAgICAgICAqbWFzayAmPSBwcm90X21hc2s7Cj4gPiA+ID4gLQo+ID4gPiA+IC0g ICAgcmV0dXJuIHJldDsKPiA+ID4gPiAtfQo+ID4gPiA+IC0jZW5kaWYKPiA+ID4gPiArICAgIGNh c2UgUE1fU0VMRl9TVVNQRU5EOgo+ID4gPiA+ICsgICAgICAgIHJldCA9IFhTVF9QTV9TVUNDRVNT Owo+ID4gPiA+ICsgICAgICAgIGdvdG8gZG9uZTsKPiA+ID4gPiArCj4gPiA+ID4gKyAgICBjYXNl IFBNX0dFVF9OT0RFX1NUQVRVUzoKPiA+ID4gPiArICAgIC8qIEFQSSBmb3IgUFVzLiAgKi8KPiA+ ID4gPiArICAgIGNhc2UgUE1fUkVRX1NVU1BFTkQ6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0ZPUkNF X1BPV0VSRE9XTjoKPiA+ID4gPiArICAgIGNhc2UgUE1fQUJPUlRfU1VTUEVORDoKPiA+ID4gPiAr ICAgIGNhc2UgUE1fUkVRX1dBS0VVUDoKPiA+ID4gPiArICAgIGNhc2UgUE1fU0VUX1dBS0VVUF9T T1VSQ0U6Cj4gPiA+ID4gKyAgICAvKiBBUEkgZm9yIHNsYXZlcy4gICovCj4gPiA+ID4gKyAgICBj YXNlIFBNX1JFUV9OT0RFOgo+ID4gPiA+ICsgICAgY2FzZSBQTV9SRUxFQVNFX05PREU6Cj4gPiA+ ID4gKyAgICBjYXNlIFBNX1NFVF9SRVFVSVJFTUVOVDoKPiA+ID4gPiArICAgIGNhc2UgUE1fU0VU X01BWF9MQVRFTkNZOgo+ID4gPiA+ICsgICAgICAgIGlmICggIWRvbWFpbl9oYXNfbm9kZV9hY2Nl c3MoY3VycmVudC0+ZG9tYWluLCBub2RlaWQpICkKPiA+ID4gPiArICAgICAgICB7Cj4gPiA+ID4g KyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgInp5bnFtcC1wbTogZm49JXUgTm8gYWNjZXNzIHRvIG5vZGUgJXVcbiIsIHBtX2Zu LAo+ID4gPiA+IG5vZGVpZCk7Cj4gPiA+ID4gKyAgICAgICAgICAgIHJldCA9IFhTVF9QTV9OT19B Q0NFU1M7Cj4gPiA+ID4gKyAgICAgICAgICAgIGdvdG8gZG9uZTsKPiA+ID4gPiArICAgICAgICB9 Cj4gPiA+ID4gKyAgICAgICAgZ290byBmb3J3YXJkX3RvX2Z3Owo+ID4gPiA+ICsKPiA+ID4gPiAr ICAgIGNhc2UgUE1fUkVTRVRfQVNTRVJUOgo+ID4gPiA+ICsgICAgY2FzZSBQTV9SRVNFVF9HRVRf U1RBVFVTOgo+ID4gPiA+ICsgICAgICAgIGlmICggIWRvbWFpbl9oYXNfcmVzZXRfYWNjZXNzKGN1 cnJlbnQtPmRvbWFpbiwgbm9kZWlkKSApCj4gPiA+ID4gKyAgICAgICAgewo+ID4gPiA+ICsgICAg ICAgICAgICBncHJpbnRrKFhFTkxPR19XQVJOSU5HLAo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICJ6eW5xbXAtcG06IGZuPSV1IE5vIGFjY2VzcyB0byByZXNldCAldVxuIiwgcG1fZm4sCj4g PiA+ID4gbm9kZWlkKTsKPiA+ID4gPiArICAgICAgICAgICAgcmV0ID0gWFNUX1BNX05PX0FDQ0VT UzsKPiA+ID4gPiArICAgICAgICAgICAgZ290byBkb25lOwo+ID4gPiA+ICsgICAgICAgIH0KPiA+ ID4gPiArICAgICAgICBnb3RvIGZvcndhcmRfdG9fZnc7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAg LyogVGhlc2UgY2FsbHMgYXJlIHNhZmUgYW5kIGFsd2F5cyBhbGxvd2VkLiAgKi8KPiA+ID4gPiAr ICAgIGNhc2UgWllOUU1QX1NJUF9TVkNfQ0FMTF9DT1VOVDoKPiA+ID4gPiArICAgIGNhc2UgWllO UU1QX1NJUF9TVkNfVUlEOgo+ID4gPiA+ICsgICAgY2FzZSBaWU5RTVBfU0lQX1NWQ19WRVJTSU9O Ogo+ID4gPiA+ICsgICAgY2FzZSBQTV9HRVRfVFJVU1RaT05FX1ZFUlNJT046Cj4gPiA+ID4gKyAg ICBjYXNlIFBNX0dFVF9BUElfVkVSU0lPTjoKPiA+ID4gPiArICAgIGNhc2UgUE1fR0VUX0NISVBJ RDoKPiA+ID4gPiArICAgICAgICBnb3RvIGZvcndhcmRfdG9fZnc7Cj4gPiA+ID4gKwo+ID4gPiA+ ICsgICAgLyogTm8gTU1JTyBhY2Nlc3MgaXMgYWxsb3dlZCBmcm9tIG5vbi1zZWN1cmUgZG9tYWlu cyAqLwo+ID4gPiA+ICsgICAgY2FzZSBQTV9NTUlPX1dSSVRFOgo+ID4gPiA+ICsgICAgY2FzZSBQ TV9NTUlPX1JFQUQ6Cj4gPiA+ID4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywKPiA+ ID4gPiArICAgICAgICAgICAgICAgICJ6eW5xbXAtcG06IGZuPSV1IE5vIE1NSU8gYWNjZXNzIHRv ICV1XG4iLCBwbV9mbiwKPiA+ID4gPiBub2RlaWQpOwo+ID4gPiA+ICsgICAgICAgIHJldCA9IFhT VF9QTV9OT19BQ0NFU1M7Cj4gPiA+ID4gKyAgICAgICAgZ290byBkb25lOwo+ID4gPiA+ICsKPiA+ ID4gPiArICAgIC8qIEV4Y2x1c2l2ZSB0byB0aGUgaGFyZHdhcmUgZG9tYWluLiAgKi8KPiA+ID4g PiArICAgIGNhc2UgUE1fSU5JVDoKPiA+ID4gPiArICAgIGNhc2UgUE1fU0VUX0NPTkZJR1VSQVRJ T046Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0ZQR0FfTE9BRDoKPiA+ID4gPiArICAgIGNhc2UgUE1f RlBHQV9HRVRfU1RBVFVTOgo+ID4gPiA+ICsgICAgY2FzZSBQTV9TRUNVUkVfU0hBOgo+ID4gPiA+ ICsgICAgY2FzZSBQTV9TRUNVUkVfUlNBOgo+ID4gPiA+ICsgICAgY2FzZSBQTV9QSU5DVFJMX1NF VF9GVU5DVElPTjoKPiA+ID4gPiArICAgIGNhc2UgUE1fUElOQ1RSTF9SRVFVRVNUOgo+ID4gPiA+ ICsgICAgY2FzZSBQTV9QSU5DVFJMX1JFTEVBU0U6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX1BJTkNU UkxfR0VUX0ZVTkNUSU9OOgo+ID4gPiA+ICsgICAgY2FzZSBQTV9QSU5DVFJMX0NPTkZJR19QQVJB TV9HRVQ6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX1BJTkNUUkxfQ09ORklHX1BBUkFNX1NFVDoKPiA+ ID4gPiArICAgIGNhc2UgUE1fSU9DVEw6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX1FVRVJZX0RBVEE6 Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0NMT0NLX0VOQUJMRToKPiA+ID4gPiArICAgIGNhc2UgUE1f Q0xPQ0tfRElTQUJMRToKPiA+ID4gPiArICAgIGNhc2UgUE1fQ0xPQ0tfR0VUU1RBVEU6Cj4gPiA+ ID4gKyAgICBjYXNlIFBNX0NMT0NLX0dFVERJVklERVI6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0NM T0NLX1NFVERJVklERVI6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0NMT0NLX1NFVFJBVEU6Cj4gPiA+ ID4gKyAgICBjYXNlIFBNX0NMT0NLX0dFVFJBVEU6Cj4gPiA+ID4gKyAgICBjYXNlIFBNX0NMT0NL X1NFVFBBUkVOVDoKPiA+ID4gPiArICAgIGNhc2UgUE1fQ0xPQ0tfR0VUUEFSRU5UOgo+ID4gPiA+ ICsgICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZW50LT5kb21haW4pICkKPiA+ ID4gPiArICAgICAgICB7Cj4gPiA+ID4gKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5J TkcsICJlZW1pOiBmbj0ldSBObyBhY2Nlc3MiLCBwbV9mbik7Cj4gPiA+ID4gKyAgICAgICAgICAg IHJldCA9IFhTVF9QTV9OT19BQ0NFU1M7Cj4gPiA+ID4gKyAgICAgICAgICAgIGdvdG8gZG9uZTsK PiA+ID4gPiArICAgICAgICB9Cj4gPiA+ID4gKyAgICAgICAgZ290byBmb3J3YXJkX3RvX2Z3Owo+ ID4gPiA+ICsKPiA+ID4gPiArICAgIC8qIFRoZXNlIGNhbGxzIGFyZSBuZXZlciBhbGxvd2VkLiAg Ki8KPiA+ID4gPiArICAgIGNhc2UgUE1fU1lTVEVNX1NIVVRET1dOOgo+ID4gPiA+ICsgICAgICAg IHJldCA9IFhTVF9QTV9OT19BQ0NFU1M7Cj4gPiA+ID4gKyAgICAgICAgZ290byBkb25lOwo+ID4g PiA+ICsKPiA+ID4gPiArICAgIGRlZmF1bHQ6Cj4gPiA+ID4gKyAgICAgICAgZ3ByaW50ayhYRU5M T0dfV0FSTklORywgInp5bnFtcC1wbTogVW5oYW5kbGVkIFBNIENhbGw6ICV1XG4iLAo+ID4gPiA+ IGZpZCk7Cj4gPiA+ID4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gPiA+ICsgICAgfQo+ID4g PiA+ICAgIC1ib29sIHp5bnFtcF9lZW1pKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ID4g PiA+IC17Cj4gPiA+ID4gLSAgICByZXR1cm4gZmFsc2U7Cj4gPiA+ID4gK2ZvcndhcmRfdG9fZnc6 Cj4gPiA+ID4gKyAgICBhcm1fc21jY2NfMV8xX3NtYyhnZXRfdXNlcl9yZWcocmVncywgMCksCj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgMSksCj4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgMiksdmFsdWUgdG8K PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCAzKSwKPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA0KSwKPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA1KSwKPiA+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA2KSwKPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA3KSwKPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICZyZXMpOwo+ID4gPiAKPiA+ID4gSWYgeW91IHVzZSBhbHdheXMgU01D Q0MgMS4xLCB0aGVuIHlvdSBzaG91bGQgYWRkIGNvZGUgdG8gZGVueSBYZW4gYm9vdCBvbgo+ID4g PiBwbGF0Zm9ybSBub3Qgc3VwcG9ydGluZyBTTUNDQyAxLjEgb3IgbGF0ZXIuCj4gPiAKPiA+IEkg Y2FuIGRvIHRoYXQuCj4gPiAKPiA+IAo+ID4gPiBGdXJ0aGVybW9yZSwgeW91IGFyZSBmb3J3YXJk aW5nIHVuc2FuaXRpemVkIHZhbHVlcyB0byB0aGUgZmlybXdhcmUuIEZvcgo+ID4gPiBpbnN0YW5j ZSwgd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIG9mIHRoZSBj YWxsIGFyZQo+ID4gPiBpbmNyZWFzZWQ/IEhvdyBhcmUgeW91IHN1cmUgdGhpcyB3aWxsIG5vdCBv cGVuIGEgaG9sZT8KPiA+IAo+ID4gRUVNSSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIGFuZCB0aGUg aW1wbGVtZW50YXRpb24gaXMgdGVzdGVkIHdpdGggWGVuCj4gPiByZWd1bGFybHkuIEEgY2hhbmdl IGxpa2UgdGhlIG9uZSB5b3UgZGVzY3JpYmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYQo+ID4gYmFj a3dhcmQgY29tcGF0aWJpbGl0eSBicmVha2FnZS4KPiAKPiBJIGRpc2FncmVlLCB5b3UgY2FuIHN0 aWxsIG1ha2UgYmFja3dhcmQgY29tcGF0aWJsZS4gRm9yIGluc3RhbmNlLCB0aGUgbmV3Cj4gcGFy YW1ldGVycyBjb3VsZCBiZSBnYXRlZCBieSBhIGZsYWcgaW4gYW4gZXhpc3RpbmcgcGFyYW1ldGVy LiBBbm90aGVyIHdheSBpcwo+IFhpbGlueCBwcm9taXNlIHRoYXQgbm9uLWV4aXN0aW5nIGFyZ3Vt ZW50cyBzaG91bGQgYWx3YXlzIGJlIDAgYW5kIHRoZW4KPiByZS1wdXJwb3NlIHRoZSB2YWx1ZSBm b3Igbm9uLXplcm8gY2FzZS4KPiAKPiBXaGlsZSBpdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLCB5 b3UgbWF5IGVuZCB1cCBwYXNzaW5nIHVuc2FuaXRpemVkIHZhbHVlIHRvCj4gdGhlCj4gZmlybXdh cmUuIE5vdCBzdXJlIHRoaXMgaXMgd2hhdCB3ZSB3YW50Li4uCgpCYWNrd2FyZCBjb21wYXRpYmls aXR5IGlzIG5vdCBvbmx5IGFib3V0IGF2b2lkaW5nIGJyZWFraW5nIGV4aXN0aW5nIGNhbGwKcGFy YW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlcy4gSXQgaXMgYWxzbyBhYm91dCBub3QgYnJlYWtpbmcg dGhlCnNlbWFudGljcyBvZiB0aGUgY2FsbHMuCgpJZiBhIGNhbGwgaXMgZGVlbWVkIGd1ZXN0IHNh ZmUgKHdoZW4gYSBndWVzdCBoYXMgYSBkZXZpY2UgYXNzaWduZWQpIHNvClhlbiBmb3J3YXJkcyB0 aGUgY2FsbCB0byBmaXJtd2FyZSwgYnV0IHRoZW4gZmlybXdhcmUgaW50cm9kdWNlcyBhIG5ldwpw YXJhbWV0ZXIgKGJlZm9yZSBpdCB3YXMgaWdub3JlZCkgYW5kIHdpdGggaXQsIGFsbG93cyBtb3Jl IGV4dGVuc2l2ZQpvcGVyYXRpb25zIHRoYXQgZ28gYmV5b25nIGEgc2luZ2xlIGRldmljZSwgSSB0 aGluayB0aGF0IGlzIHNlbWFudGljcwpicmVha2FnZS4KCkluIGFueSBjYXNlLCB0aGlzIGlzIGFs bW9zdCBpbXBvc3NpYmxlIHRvIGRvIHdpdGggRUVNSSBiZWNhdXNlIGNhbGxzCnRha2UgYSBub2Rl X2lkIHBhcmFtZXRlciBvciBzaW1pbGFyIHRoYXQgaWRlbnRpZmllcyB0aGUgYXJlYSBvZiB0aGUK ZWZmZWN0IG9mIHRoZSBvcGVyYXRpb24sIGFuZCB3ZSBhbHJlYWR5IGNoZWNrIG9uIHRoZSBub2Rl X2lkIHRvIHNlZSBpZgp0aGUgZ3Vlc3QgaXMgYWxsb3dlZCB0byBtYWtlIHRoZSBjYWxsLgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54 ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==