From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH] xen/arm: gicv2: Export GICv2m register frames to domain0 by device tree Date: Fri, 22 Apr 2016 19:29:30 +0100 Message-ID: <571A6D8A.4000404@arm.com> References: <1461227040-6105-1-git-send-email-Wei.Chen@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1461227040-6105-1-git-send-email-Wei.Chen@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Wei Chen , xen-devel@lists.xen.org Cc: sstabellini@kernel.org, suravee.suthikulpanit@amd.com, steve.capper@arm.com List-Id: xen-devel@lists.xenproject.org SGkgV2VpLAoKT24gMjEvMDQvMTYgMDk6MjQsIFdlaSBDaGVuIHdyb3RlOgo+IFRoaXMgcGF0Y2gg YWRkcyB2Mm0gZXh0ZW5zaW9uIHN1cHBvcnQgaW4gR0lDLXYyIGRyaXZlci4gVGhlIEdJQ3YyIGRy aXZlcgo+IGRldGVjdHMgdGhlIE1TSSBmcmFtZXMgZnJvbSBkZXZpY2UgdHJlZSBhbmQgY3JlYXRl cyBjb3JyZXNwb25kaW5nIGRldmljZQo+IHRyZWUgbm9kZXMgaW4gRG9tYWluMCdzIERUQi4gSXQg YWxzbyBwcm92aWRlcyBvbmUgaHdfb3BzIGNhbGxiYWNrIHRvIG1hcAo+IHYybSBNTUlPIHJlZ2lv bnMgdG8gZG9tYWluMCBhbmQgcm91dGUgdjJtIFNQSXMgdG8gZG9tYWluMC4KPgo+IFdpdGggdGhp cyBHSUN2Mm0gZXh0ZW5zaW9uIHN1cHBvcnQsIHRoZSBkb21haW4wIGtlcm5lbCBjYW4gZG8gR0lD djJtCj4gZnJhbWUgc2V0dXAgYW5kIGluaXRpYWxpemF0aW9uLgo+Cj4gVGhpcyBwYXRjaCBpcyBi YXNlZCBvbiB0aGUgR0lDdjJtIHBhdGNoIG9mIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdDoKPiBbUEFU Q0ggMi8yXSB4ZW4vYXJtOiBnaWN2MjogQWRkaW5nIHN1cHBvcnQgZm9yIEdJQ3YybSBpbiBEb20w Cj4gaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNS0wNC9t c2cwMjYxMy5odG1sCj4KPiBTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8V2VpLkNoZW5AbGluYXJv Lm9yZz4KPiAtLS0KPiAgIHhlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYyB8ICAgNSArCj4gICB4 ZW4vYXJjaC9hcm0vZ2ljLXYyLmMgICAgICAgfCAyODUgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgIHhlbi9hcmNoL2FybS9naWMuYyAgICAgICAgICB8ICAg OSArKwo+ICAgeGVuL2luY2x1ZGUvYXNtLWFybS9naWMuaCAgIHwgICAzICsKPiAgIDQgZmlsZXMg Y2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0v ZG9tYWluX2J1aWxkLmMgYi94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMKPiBpbmRleCBhYmE3 MTRjLi5iNWQ4MmZjIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwo+ ICsrKyBiL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwo+IEBAIC0yMTc2LDYgKzIxNzYsMTEg QEAgaW50IGNvbnN0cnVjdF9kb20wKHN0cnVjdCBkb21haW4gKmQpCj4gICAgICAgaWYgKCByYyA8 IDAgKQo+ICAgICAgICAgICByZXR1cm4gcmM7Cj4KPiArICAgIC8qIE1hcCBleHRyYSBHSUMgTU1J TywgaXJxcyBhbmQgb3RoZXIgaHcgc3R1ZmZzIHRvIGRvbWFpbjAuICovCgpOSVQ6IHMvZG9tYWlu MC9kb20wLwoKPiArICAgIHJjID0gZ2ljX21hcF9od2RvbV9leHRyYV9tYXBwaW5ncyhkKTsKPiAr ICAgIGlmICggcmMgPCAwICkKPiArICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICAgICAgIHJjID0g cGxhdGZvcm1fc3BlY2lmaWNfbWFwcGluZyhkKTsKPiAgICAgICBpZiAoIHJjIDwgMCApCj4gICAg ICAgICAgIHJldHVybiByYzsKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2dpYy12Mi5jIGIv eGVuL2FyY2gvYXJtL2dpYy12Mi5jCj4gaW5kZXggNDUwNzU1Zi4uNGE3ZDY1YSAxMDA2NDQKPiAt LS0gYS94ZW4vYXJjaC9hcm0vZ2ljLXYyLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vZ2ljLXYyLmMK PiBAQCAtMjEsNiArMjEsNyBAQAo+ICAgI2luY2x1ZGUgPHhlbi9saWIuaD4KPiAgICNpbmNsdWRl IDx4ZW4vaW5pdC5oPgo+ICAgI2luY2x1ZGUgPHhlbi9tbS5oPgo+ICsjaW5jbHVkZSA8eGVuL3Zt YXAuaD4KCldoeSBkbyB5b3UgbmVlZCB0byBpbmNsdWRlIHRoaXMgaGVhZGVyPwoKPiAgICNpbmNs dWRlIDx4ZW4vaXJxLmg+Cj4gICAjaW5jbHVkZSA8eGVuL2lvY2FwLmg+Cj4gICAjaW5jbHVkZSA8 eGVuL3NjaGVkLmg+Cj4gQEAgLTY2LDYgKzY3LDQxIEBACj4gICAjZGVmaW5lIEdJQ0hfVjJfVk1D Ul9QUklPUklUWV9NQVNLICAgMHgxZgo+ICAgI2RlZmluZSBHSUNIX1YyX1ZNQ1JfUFJJT1JJVFlf U0hJRlQgIDI3Cj4KPiArLyogR0lDdjJtIGV4dGVuc2lvbiByZWdpc3RlciBkZWZpbml0aW9ucy4g Ki8KPiArLyoKPiArKiBNU0lfVFlQRVI6Cj4gKyogICAgIFszMToyNl0gUmVzZXJ2ZWQKPiArKiAg ICAgWzI1OjE2XSBsb3dlc3QgU1BJIGFzc2lnbmVkIHRvIE1TSQo+ICsqICAgICBbMTU6MTBdIFJl c2VydmVkCj4gKyogICAgIFs5OjBdICAgTnVtYmVyIG9mIFNQSXMgYXNzaWduZWQgdG8gTVNJCj4g KyovCj4gKyNkZWZpbmUgVjJNX01TSV9UWVBFUiAgICAgICAgICAgICAgIDB4MDA4Cj4gKyNkZWZp bmUgVjJNX01TSV9UWVBFUl9CQVNFX1NISUZUICAgIDE2Cj4gKyNkZWZpbmUgVjJNX01TSV9UWVBF Ul9CQVNFX01BU0sgICAgIDB4M0ZGCj4gKyNkZWZpbmUgVjJNX01TSV9UWVBFUl9OVU1fTUFTSyAg ICAgIDB4M0ZGCj4gKyNkZWZpbmUgVjJNX01TSV9TRVRTUElfTlMgICAgICAgICAgIDB4MDQwCj4g KyNkZWZpbmUgVjJNX01JTl9TUEkgICAgICAgICAgICAgICAgIDMyCj4gKyNkZWZpbmUgVjJNX01B WF9TUEkgICAgICAgICAgICAgICAgIDEwMTkKPiArI2RlZmluZSBWMk1fTVNJX0lJRFIgICAgICAg ICAgICAgICAgMHhGQ0MKPiArCj4gKyNkZWZpbmUgVjJNX01TSV9UWVBFUl9CQVNFX1NQSSh4KSAg IFwKPiArICAgICAgICAgICAgICAgICgoKHgpID4+IFYyTV9NU0lfVFlQRVJfQkFTRV9TSElGVCkg JiBWMk1fTVNJX1RZUEVSX0JBU0VfTUFTSykKPiArCj4gKyNkZWZpbmUgVjJNX01TSV9UWVBFUl9O VU1fU1BJKHgpICAgICgoeCkgJiBWMk1fTVNJX1RZUEVSX05VTV9NQVNLKQo+ICsKPiArc3RydWN0 IHYybV9kYXRhIHsKPiArICAgIHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cj4gKyAgICAvKiBQb2lu dGVyIHRvIHRoZSBEVCBub2RlIHJlcHJlc2VudGluZyB0aGUgdjJtIGZyYW1lICovCj4gKyAgICBj b25zdCBzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKmR0X25vZGU7Cj4gKyAgICBwYWRkcl90IGFkZHI7 IC8qIFJlZ2lzdGVyIGZyYW1lIGJhc2UgKi8KPiArICAgIHBhZGRyX3Qgc2l6ZTsgLyogUmVnaXN0 ZXIgZnJhbWUgc2l6ZSAqLwo+ICsgICAgdTMyIHNwaV9zdGFydDsgLyogVGhlIFNQSSBudW1iZXIg dGhhdCBNU0lzIHN0YXJ0ICovCj4gKyAgICB1MzIgbnJfc3BpczsgLyogVGhlIG51bWJlciBvZiBT UElzIGZvciBNU0lzICovCj4gK307Cj4gKwo+ICsvKiB2Mm0gZXh0ZW5zaW9uIHJlZ2lzdGVyIGZy YW1lIGluZm9ybWF0aW9uIGxpc3QgKi8KPiArc3RhdGljIExJU1RfSEVBRChnaWN2Mm1faW5mbyk7 Cj4gKwo+ICAgLyogR2xvYmFsIHN0YXRlICovCj4gICBzdGF0aWMgc3RydWN0IHsKPiAgICAgICB2 b2lkIF9faW9tZW0gKiBtYXBfZGJhc2U7IC8qIElPIG1hcHBlZCBBZGRyZXNzIG9mIGRpc3RyaWJ1 dG9yIHJlZ2lzdGVycyAqLwo+IEBAIC01NTEsNiArNTg3LDE3MyBAQCBzdGF0aWMgdm9pZCBnaWN2 Ml9pcnFfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3QgY3B1bWFza190 ICpjcHVfbQo+ICAgICAgIHNwaW5fdW5sb2NrKCZnaWN2Mi5sb2NrKTsKPiAgIH0KPgo+ICtzdGF0 aWMgaW50IGdpY3YyX21hcF9od2Rvd25fZXh0cmFfbWFwcGluZ3Moc3RydWN0IGRvbWFpbiAqZCkK PiArewo+ICsgICAgY29uc3Qgc3RydWN0IHYybV9kYXRhICp2Mm1fZGF0YTsKPiArCj4gKyAgICAv Kgo+ICsgICAgICogRm9yIHRoZSBtb21lbnQsIHdlJ2xsIGFzc2lnbiBhbGwgdjJtIGZyYW1lcyB0 byBhIHNpbmdsZSBkb21haW4KPiArICAgICAqIChpLmUgRG9tYWluMCkuCgpOSVQ6IHMvRG9tYWlu MC9oYXJkd2FyZSBkb21haW4vCgpBbHNvLCBJIHdvdWxkIGRyb3AgdGhlIGkuZSBhbmQgc2F5ICIu Li4gZnJhbWVzIHRvIHRoZSBoYXJkd2FyZSBkb21haW4uIgoKPiArICAgICAqLwo+ICsgICAgbGlz dF9mb3JfZWFjaF9lbnRyeSggdjJtX2RhdGEsICZnaWN2Mm1faW5mbywgZW50cnkgKQo+ICsgICAg ewo+ICsgICAgICAgIGludCByZXQsIHNwaTsKClBsZWFzZSB1c2UgInUzMiIgZm9yIHRoZSB2YXJp YWJsZSBzcGkuCgo+ICsKPiArICAgICAgICBwcmludGsoIkdJQ3YyOiBNYXBwaW5nIHYybSBmcmFt ZSB0byBkb21haW4lZDogYWRkcj0weCVseCBzaXplPTB4JWx4IHNwaV9iYXNlPSV1IG51bV9zcGlz PSV1XG4iLAoKTklUOiBZb3UgY2FuIHNob3J0ZW4gZG9tYWluJWQgdG8gZCVkCgo+ICsgICAgICAg ICAgICAgICBkLT5kb21haW5faWQsIHYybV9kYXRhLT5hZGRyLCB2Mm1fZGF0YS0+c2l6ZSwKPiAr ICAgICAgICAgICAgICAgdjJtX2RhdGEtPnNwaV9zdGFydCwgdjJtX2RhdGEtPm5yX3NwaXMpOwo+ ICsKPiArICAgICAgICByZXQgPSBtYXBfbW1pb19yZWdpb25zKGQsIHBhZGRyX3RvX3Bmbih2Mm1f ZGF0YS0+YWRkciksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVZfUk9VTkRf VVAodjJtX2RhdGEtPnNpemUsIFBBR0VfU0laRSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYWRkcl90b19wZm4odjJtX2RhdGEtPmFkZHIpKTsKPiArICAgICAgICBpZiAoIHJl dCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUgo+ICsgICAg ICAgICAgICAgICAgICAiR0lDdjI6IE1hcCB2Mm0gZnJhbWUgdG8gZG9tYWluJWQgZmFpbGVkLlxu IiwKCkRpdHRvLgoKQWxzbyB0aGUgaW5kZW50YXRpb24gbG9va3Mgd3JvbmcuCgo+ICsgICAgICAg ICAgICAgICAgICAgZC0+ZG9tYWluX2lkKTsKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogTWFwIGFsbCBTUElzIHRo YXQgYXJlIGFsbG9jYXRlZCB0byBNU0lzIGluIGEgc2luZ2xlIGZyYW1lIHRvIHRoZQoKcy9pbiBh IHNpbmdsZSBmcmFtZS9mb3IgdGhlIGZyYW1lLwoKPiArICAgICAgICAgKiBkb21haW4uCj4gKyAg ICAgICAgICovCj4gKyAgICAgICAgZm9yICggc3BpID0gdjJtX2RhdGEtPnNwaV9zdGFydDsKPiAr ICAgICAgICAgICAgICBzcGkgPCAodjJtX2RhdGEtPnNwaV9zdGFydCArIHYybV9kYXRhLT5ucl9z cGlzKTsgc3BpKysgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLyoKPiArICAgICAgICAg ICAgICogTVNJcyBhcmUgYWx3YXlzIGVkZ2UtdHJpZ2dlcmVkLiBDb25maWd1cmUgdGhlIGFzc29j aWF0ZWQgU1BJcwo+ICsgICAgICAgICAgICAgKiB0byBiZSBlZGdlLXJpc2luZy4KPiArICAgICAg ICAgICAgICovCj4gKyAgICAgICAgICAgIHJldCA9IGlycV9zZXRfc3BpX3R5cGUoc3BpLCBJUlFf VFlQRV9FREdFX1JJU0lORyk7Cj4gKyAgICAgICAgICAgIGlmICggcmV0ICkKPiArICAgICAgICAg ICAgewo+ICsgICAgICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIKPiArICAgICAgICAgICAg ICAgICAgICAgICAiR0lDdjI6IEZhaWxlZCB0byBzZXQgdjJtIE1TSSBTUElbJWRdIHR5cGUuXG4i LCBzcGkpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgfQo+ ICsKPiArICAgICAgICAgICAgLyogUm91dGUgYSBTUEkgdGhhdCBpcyBhbGxvY2F0ZWQgdG8gTVNJ IHRvIHRoZSBkb21haW4uICovCj4gKyAgICAgICAgICAgIHJldCA9IHJvdXRlX2lycV90b19ndWVz dChkLCBzcGksIHNwaSwgInYybSIpOwo+ICsgICAgICAgICAgICBpZiAoIHJldCApCj4gKyAgICAg ICAgICAgIHsKPiArICAgICAgICAgICAgICAgIHByaW50ayhYRU5MT0dfRVJSCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIkdJQ3YyOiBGYWlsZWQgdG8gcm91dGUgdjJtIE1TSSBTUElbJWRdIHRv IERvbSVkLlxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgc3BpLCBkLT5kb21haW5faWQp Owo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICAgICAgfQo+ICsKPiAr ICAgICAgICAgICAgLyogUmVzZXJ2ZSBhIFNQSSB0aGF0IGlzIGFsbG9jYXRlZCB0byBNU0kgZm9y IHRoZSBkb21haW4uICovCj4gKyAgICAgICAgICAgIGlmICggIXZnaWNfcmVzZXJ2ZV92aXJxKGQs IHNwaSkgKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBwcmludGsoWEVOTE9H X0VSUgo+ICsgICAgICAgICAgICAgICAgICAgICAgICJHSUN2MjogRmFpbGVkIHRvIHJlc2VydmUg djJtIE1TSSBTUElbJWRdIGZvciBEb20lZC5cbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IHNwaSwgZC0+ZG9tYWluX2lkKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBTZXQgdXAgZ2ljIHYybSBEVCBzdWItbm9kZS4KPiArICog UGxlYXNlIHJlZmVyIHRvIHRoZSBiaW5kaW5nIGRvY3VtZW50Ogo+ICsgKiBodHRwczovL3d3dy5r ZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0 LWNvbnRyb2xsZXIvYXJtLGdpYy50eHQKPiArICovCj4gK3N0YXRpYyBpbnQgZ2ljdjJtX21ha2Vf ZHRfbm9kZShjb25zdCBzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgZHRfZGV2aWNlX25vZGUgKmdpYywKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqZmR0KQoKVGhlIGluZGVudGF0aW9uIGxvb2tzIHdyb25n IHRvIG1lLiBJdCBzaG91bGQgYmU6Cgpmb28oY29uc3Qgc3RydWN0IC4uLiwKICAgICBjb25zdCBz dHJ1Y3QgLi4uCiAgICAgdm9pZCAqLi4uKQoKPiArewo+ICsgICAgdTMyIGxlbjsKPiArICAgIGlu dCByZXM7Cj4gKyAgICBjb25zdCB2b2lkICpwcm9wID0gTlVMTDsKPiArICAgIGNvbnN0IHN0cnVj dCBkdF9kZXZpY2Vfbm9kZSAqdjJtID0gTlVMTDsKPiArICAgIGNvbnN0IHN0cnVjdCB2Mm1fZGF0 YSAqdjJtX2RhdGE7Cj4gKwo+ICsgICAgLyogVGhlIHN1Yi1ub2RlcyByZXF1aXJlIHRoZSByYW5n ZXMgcHJvcGVydHkgKi8KPiArICAgIHByb3AgPSBkdF9nZXRfcHJvcGVydHkoZ2ljLCAicmFuZ2Vz IiwgJmxlbik7Cj4gKyAgICBpZiAoICFwcm9wICkKPiArICAgIHsKPiArICAgICAgICBwcmludGso WEVOTE9HX0VSUiAiQ2FuJ3QgZmluZCByYW5nZXMgcHJvcGVydHkgZm9yIHRoZSBnaWMgbm9kZVxu Iik7Cj4gKyAgICAgICAgcmV0dXJuIC1GRFRfRVJSX1hFTihFTk9FTlQpOwo+ICsgICAgfQo+ICsK PiArICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJyYW5nZXMiLCBwcm9wLCBsZW4pOwo+ICsg ICAgaWYgKCByZXMgKQo+ICsgICAgICAgIHJldHVybiByZXM7Cj4gKwo+ICsgICAgbGlzdF9mb3Jf ZWFjaF9lbnRyeSggdjJtX2RhdGEsICZnaWN2Mm1faW5mbywgZW50cnkgKQo+ICsgICAgewo+ICsg ICAgICAgIHYybSA9IHYybV9kYXRhLT5kdF9ub2RlOwo+ICsKPiArICAgICAgICBwcmludGsoIkdJ Q3YyOiBDcmVhdGluZyB2Mm0gRFQgbm9kZSBmb3IgZG9tYWluJWQ6IGFkZHI9MHglbHggc2l6ZT0w eCVseCBzcGlfYmFzZT0ldSBudW1fc3Bpcz0ldVxuIiwKCk5JVDogcy9kb21haW4lZC9kJWQvCgo+ ICsgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHYybV9kYXRhLT5hZGRyLCB2Mm1fZGF0YS0+ c2l6ZSwKPiArICAgICAgICAgICAgICAgdjJtX2RhdGEtPnNwaV9zdGFydCwgdjJtX2RhdGEtPm5y X3NwaXMpOwo+ICsKPiArICAgICAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQsIHYybS0+bmFt ZSk7Cj4gKyAgICAgICAgaWYgKCByZXMgKQo+ICsgICAgICAgICAgICByZXR1cm4gcmVzOwo+ICsK PiArICAgICAgICByZXMgPSBmZHRfcHJvcGVydHlfc3RyaW5nKGZkdCwgImNvbXBhdGlibGUiLCAi YXJtLGdpYy12Mm0tZnJhbWUiKTsKPiArICAgICAgICBpZiAoIHJlcyApCj4gKyAgICAgICAgICAg IHJldHVybiByZXM7Cj4gKwo+ICsgICAgICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJtc2kt Y29udHJvbGxlciIsIE5VTEwsIDApOwo+ICsgICAgICAgIGlmICggcmVzICkKPiArICAgICAgICAg ICAgcmV0dXJuIHJlczsKPiArCj4gKyAgICAgICAgaWYgKCB2Mm0tPnBoYW5kbGUgKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgcmVzID0gZmR0X3Byb3BlcnR5X2NlbGwoZmR0LCAicGhhbmRs ZSIsIHYybS0+cGhhbmRsZSk7Cj4gKyAgICAgICAgICAgIGlmICggcmVzICkKPiArICAgICAgICAg ICAgICAgIHJldHVybiByZXM7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKiBVc2UgdGhl IHNhbWUgcmVnIHJlZ2lvbnMgYXMgdjJtIG5vZGUgaW4gRFRCLiAqLwoKcy9EVEIvaG9zdCBEVEIv IHRvIG1ha2UgY2xlYXIgd2UgYXJlIHNwZWFraW5nIGFib3V0IHRoZSBob3N0IG9uZSBhbmQgbm90 IAp0aGUgZ3Vlc3Qgb25lLgoKPiArICAgICAgICBwcm9wID0gZHRfZ2V0X3Byb3BlcnR5KHYybSwg InJlZyIsICZsZW4pOwo+ICsgICAgICAgIGlmICggIXByb3AgKQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgIkdJQ3YyOiBDYW4ndCBmaW5kIHYybSByZWcgcHJv cGVydHkuXG4iKTsKPiArICAgICAgICAgICAgcmVzID0gLUZEVF9FUlJfWEVOKEVOT0VOVCk7Cj4g KyAgICAgICAgICAgIHJldHVybiByZXM7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICByZXMg PSBmZHRfcHJvcGVydHkoZmR0LCAicmVnIiwgcHJvcCwgbGVuKTsKPiArICAgICAgICBpZiAoIHJl cyApCj4gKyAgICAgICAgICAgIHJldHVybiByZXM7Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAg ICAgICogQ3JlYXRlIG1zaS1iYXNlLXNwaSBhbmQgbXNpLW51bS1zcGlzIHByb3BlcnRpZXMgaW4g R3Vlc3QgRFQgdG8KPiArICAgICAgICAgKiBvdmVycmlkZSB0aGUgaGFyZHdhcmUgc2V0dGluZy4g RnJvbSB0aGUgYmluZGluZyBkb2N1bWVudCwgd2UgY2FuCj4gKyAgICAgICAgICogZmluZCB0aGF0 IHRoZXNlIHR3byBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4gQnV0IGlmIHRoZXNlIHR3bwo+ICsg ICAgICAgICAqIHByb3BlcnRpZXMgYXJlIHByZXNlbnQgaW4gdGhlIHYybSBEVCBub2RlLCB0aGUg Z3Vlc3QgdjJtIGRyaXZlcgo+ICsgICAgICAgICAqIHNob3VsZCByZWFkIHRoZSBjb25maWd1cmF0 aW9uIGZyb20gdGhlc2UgdHdvIHByb3BlcnRpZXMgaW5zdGVhZAo+ICsgICAgICAgICAqIG9mIHJl YWRpbmcgZnJvbSBoYXJkd2FyZSByZWdpc3Rlci4KClRoaXMgcGFyYWdyYXBoIGlzIG5vdCBjbGVh ci4gSSB3b3VsZCByZXdvcmQ7CgoiVGhlIHByb3BlcnRpZXMgbXNpLWJhc2Utc3BpIGFuZCBtc2kt bnVtLXNwaXMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIApoYXJkd2FyZSBzZXR0aW5ncy4gVGhl cmVmb3JlIGl0IGlzIGZpbmUgdG8gYWx3YXlzIHdyaXRlIHRoZW0gaW4gdGhlIApndWVzdCBEVC4i LgoKPiArICAgICAgICAgKi8KPiArICAgICAgICByZXMgPSBmZHRfcHJvcGVydHlfdTMyKGZkdCwg ImFybSxtc2ktYmFzZS1zcGkiLCB2Mm1fZGF0YS0+c3BpX3N0YXJ0KTsKPiArICAgICAgICBpZiAo IHJlcyApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUgo+ICsg ICAgICAgICAgICAgICAgICAgIkdJQ3YyOiBGYWlsZWQgdG8gY3JlYXRlIHYybSBtc2ktYmFzZS1z cGkgaW4gR3Vlc3QgRFQuXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIHJlczsKPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIHJlcyA9IGZkdF9wcm9wZXJ0eV91MzIoZmR0LCAiYXJtLG1zaS1u dW0tc3BpcyIsIHYybV9kYXRhLT5ucl9zcGlzKTsKPiArICAgICAgICBpZiAoIHJlcyApCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX0VSUgo+ICsgICAgICAgICAgICAg ICAgICAgIkdJQ3YyOiBGYWlsZWQgdG8gY3JlYXRlIHYybSBtc2ktbnVtLXNwaXMgaW4gR3Vlc3Qg RFQuXG4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIHJlczsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGZkdF9lbmRfbm9kZShmZHQpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiByZXM7 Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IGdpY3YyX21ha2VfaHdkb21fZHRfbm9kZShjb25zdCBz dHJ1Y3QgZG9tYWluICpkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGR0X2RldmljZV9ub2RlICpnaWMsCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICpmZHQpCj4gQEAgLTU4Nyw2ICs3OTAsMTAgQEAgc3RhdGlj IGludCBnaWN2Ml9tYWtlX2h3ZG9tX2R0X25vZGUoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwKPiAg ICAgICBsZW4gKj0gMjsKPgo+ICAgICAgIHJlcyA9IGZkdF9wcm9wZXJ0eShmZHQsICJyZWciLCBy ZWdzLCBsZW4pOwo+ICsgICAgaWYgKCByZXMgKQo+ICsgICAgICAgIHJldHVybiByZXM7Cj4gKwo+ ICsgICAgcmVzID0gZ2ljdjJtX21ha2VfZHRfbm9kZShkLCBnaWMsIGZkdCk7Cj4KPiAgICAgICBy ZXR1cm4gcmVzOwo+ICAgfQo+IEBAIC02MzIsNiArODM5LDc3IEBAIHN0YXRpYyBib29sX3QgZ2lj djJfaXNfYWxpYXNlZChwYWRkcl90IGNiYXNlLCBwYWRkcl90IGNzaXplKQo+ICAgICAgIHJldHVy biAoKHZhbF9sb3cgJiAweGZmZjBmZmYpID09IDB4MDIwMjA0M0IgJiYgdmFsX2xvdyA9PSB2YWxf aGlnaCk7Cj4gICB9Cj4KPiArc3RhdGljIHZvaWQgZ2ljdjJfZXh0ZW5zaW9uX2R0X2luaXQoY29u c3Qgc3RydWN0IGR0X2RldmljZV9ub2RlICpub2RlKQo+ICt7Cj4gKyAgICBpbnQgcmVzOwo+ICsg ICAgdTMyIHNwaV9zdGFydCwgbnJfc3BpczsKPiArICAgIHBhZGRyX3QgYWRkciwgc2l6ZTsKPiAr ICAgIGNvbnN0IHN0cnVjdCBkdF9kZXZpY2Vfbm9kZSAqdjJtID0gTlVMTDsKPiArCj4gKyAgICAv Kgo+ICsgICAgICogQ2hlY2sgd2hldGhlciB0aGlzIEdJQyBpbXBsZW1lbnRzIHRoZSB2Mm0gZXh0 ZW5zaW9uLiBJZiBzbywKPiArICAgICAqIGFkZCB2Mm0gcmVnaXN0ZXIgZnJhbWVzIHRvIGdpY3Yy bV9pbmZvLgo+ICsgICAgICovCj4gKyAgICBkdF9mb3JfZWFjaF9jaGlsZF9ub2RlKG5vZGUsIHYy bSkKPiArICAgIHsKPiArICAgICAgICBzdHJ1Y3QgdjJtX2RhdGEgKnYybV9kYXRhOwo+ICsKPiAr ICAgICAgICBpZiAoICFkdF9kZXZpY2VfaXNfY29tcGF0aWJsZSh2Mm0sICJhcm0sZ2ljLXYybS1m cmFtZSIpICkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIHYybV9kYXRh ID0geHphbGxvY19ieXRlcyhzaXplb2Yoc3RydWN0IHYybV9kYXRhKSk7Cj4gKyAgICAgICAgaWYg KCAhdjJtX2RhdGEgKQo+ICsgICAgICAgICAgICBwYW5pYygiR0lDdjI6IENhbm5vdCBhbGxvY2F0 ZSBtZW1vcnkgZm9yIHYybSBmcmFtZSIpOwo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAq IENoZWNrIHdoZXRoZXIgRFQgdXNlcyBtc2ktYmFzZS1zcGkgYW5kIG1zaS1udW0tc3BpcyBwcm9w ZXJ0aWVzIHRvCj4gKyAgICAgICAgICogb3ZlcnJpZGUgdGhlIGhhcmR3YXJlIHNldHRpbmcuCj4g KyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCAhZHRfcHJvcGVydHlfcmVhZF91MzIodjJtLCAi YXJtLG1zaS1iYXNlLXNwaSIsICZzcGlfc3RhcnQpIHx8Cj4gKyAgICAgICAgICAgICAhZHRfcHJv cGVydHlfcmVhZF91MzIodjJtLCAiYXJtLG1zaS1udW0tc3BpcyIsICZucl9zcGlzKSApCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICB1MzIgbXNpX3R5cGVyOwo+ICsgICAgICAgICAgICB2b2lk IF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsgICAgICAgICAgICAvKgo+ICsgICAgICAgICAgICAqIERU IGRvZXMgbm90IG92ZXJyaWRlIHRoZSBoYXJkd2FyZSBzZXR0aW5nLCBzbyB3ZSBoYXZlIHRvIHJl YWQKPiArICAgICAgICAgICAgKiBiYXNlX3NwaSBhbmQgbnVtX3NwaXMgZnJvbSBoYXJkd2FyZSBy ZWdpc3RlcnMgdG8gcmVzZXJ2ZSBpcnFzLgo+ICsgICAgICAgICAgICAqLwo+ICsgICAgICAgICAg ICByZXMgPSBkdF9kZXZpY2VfZ2V0X2FkZHJlc3ModjJtLCAwLCAmYWRkciwgJnNpemUpOwo+ICsg ICAgICAgICAgICBpZiAoIHJlcyApCj4gKyAgICAgICAgICAgICAgICBwYW5pYygiR0lDdjI6IENh bm5vdCBmaW5kIGEgdmFsaWQgdjJtIGZyYW1lIGFkZHJlc3MiKTsKPiArCj4gKyAgICAgICAgICAg IGJhc2UgPSBpb3JlbWFwX25vY2FjaGUoYWRkciwgc2l6ZSk7Cj4gKyAgICAgICAgICAgIGlmICgg IWJhc2UgKQo+ICsgICAgICAgICAgICAgICAgcGFuaWMoIkdJQ3YyOiBDYW5ub3QgcmVtYXAgdjJt IHJlZ2lzdGVyIGZyYW1lIik7Cj4gKwo+ICsgICAgICAgICAgICBtc2lfdHlwZXIgPSByZWFkbF9y ZWxheGVkKGJhc2UgKyBWMk1fTVNJX1RZUEVSKTsKPiArICAgICAgICAgICAgc3BpX3N0YXJ0ID0g VjJNX01TSV9UWVBFUl9CQVNFX1NQSShtc2lfdHlwZXIpOwo+ICsgICAgICAgICAgICBucl9zcGlz ID0gVjJNX01TSV9UWVBFUl9OVU1fU1BJKG1zaV90eXBlcik7Cj4gKwo+ICsgICAgICAgICAgICBp b3VubWFwKGJhc2UpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogSW5pdGlhbGl6ZSBh IG5ldyBlbnRyeSB0byByZWNvcmQgbmV3IGZyYW1lIGluZm9tYXRpb24uICovCj4gKyAgICAgICAg SU5JVF9MSVNUX0hFQUQoJnYybV9kYXRhLT5lbnRyeSk7Cj4gKyAgICAgICAgdjJtX2RhdGEtPmFk ZHIgPSBhZGRyOwo+ICsgICAgICAgIHYybV9kYXRhLT5zaXplID0gc2l6ZTsKPiArICAgICAgICB2 Mm1fZGF0YS0+c3BpX3N0YXJ0ID0gc3BpX3N0YXJ0Owo+ICsgICAgICAgIHYybV9kYXRhLT5ucl9z cGlzID0gbnJfc3BpczsKPiArICAgICAgICB2Mm1fZGF0YS0+ZHRfbm9kZSA9IHYybTsKPiArCj4g KyAgICAgICAgcHJpbnRrKCJHSUN2Mm0gZXh0ZW5zaW9uIHJlZ2lzdGVyIGZyYW1lOlxuIgo+ICsg ICAgICAgICAgICAgICAiICAgICAgICBnaWNfdjJtX2FkZHI9JSJQUklwYWRkciJcbiIKPiArICAg ICAgICAgICAgICAgIiAgICAgICAgZ2ljX3YybV9zaXplPSUiUFJJcGFkZHIiXG4iCj4gKyAgICAg ICAgICAgICAgICIgICAgICAgIGdpY192Mm1fc3BpX2Jhc2U9JXVcbiIKPiArICAgICAgICAgICAg ICAgIiAgICAgICAgZ2ljX3YybV9udW1fc3Bpcz0ldVxuIiwKPiArICAgICAgICAgICAgICAgdjJt X2RhdGEtPmFkZHIsIHYybV9kYXRhLT5zaXplLAo+ICsgICAgICAgICAgICAgICB2Mm1fZGF0YS0+ c3BpX3N0YXJ0LCB2Mm1fZGF0YS0+bnJfc3Bpcyk7Cj4gKwo+ICsgICAgICAgIGxpc3RfYWRkX3Rh aWwoJnYybV9kYXRhLT5lbnRyeSwgJmdpY3YybV9pbmZvKTsKCkkgd291bGQgcHVsbCBub24tRFQg Y29kZSBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBzbyB3ZSBjYW4gcmUtdXNlIHRoZSAKY29kZSBs YXRlciBmb3IgdGhlIHN1cHBvcnQgb2YgR0lDdjJtIHdpdGggQUNQSS4KCj4gKyAgICB9Cj4gK30K PiArCj4gICBzdGF0aWMgcGFkZHJfdCBfX2luaXRkYXRhIGhiYXNlLCBkYmFzZSwgY2Jhc2UsIGNz aXplLCB2YmFzZTsKPgo+ICAgc3RhdGljIHZvaWQgX19pbml0IGdpY3YyX2R0X2luaXQodm9pZCkK PiBAQCAtNjgzLDYgKzk2MSwxMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljdjJfZHRfaW5pdCh2 b2lkKQo+ICAgICAgIGlmICggY3NpemUgIT0gdnNpemUgKQo+ICAgICAgICAgICBwYW5pYygiR0lD djI6IFNpemVzIG9mIEdJQ0MgKCUjIlBSSXBhZGRyIikgYW5kIEdJQ1YgKCUjIlBSSXBhZGRyIikg ZG9uJ3QgbWF0Y2hcbiIsCj4gICAgICAgICAgICAgICAgICBjc2l6ZSwgdnNpemUpOwo+ICsKPiAr ICAgIC8qCj4gKyAgICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgR0lDIGltcGxlbWVudHMgdGhlIHYy bSBleHRlbnNpb24uIElmIHNvLAo+ICsgICAgICogYWRkIHYybSByZWdpc3RlciBmcmFtZXMgdG8g Z2ljdjJfZXh0ZW5zaW9uX2luZm8uCj4gKyAgICAgKi8KPiArICAgIGdpY3YyX2V4dGVuc2lvbl9k dF9pbml0KG5vZGUpOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IGdpY3YyX2lvbWVtX2RlbnlfYWNj ZXNzKGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCj4gQEAgLTkzNiw2ICsxMjIwLDcgQEAgY29uc3Qg c3RhdGljIHN0cnVjdCBnaWNfaHdfb3BlcmF0aW9ucyBnaWN2Ml9vcHMgPSB7Cj4gICAgICAgLnJl YWRfYXByICAgICAgICAgICAgPSBnaWN2Ml9yZWFkX2FwciwKPiAgICAgICAubWFrZV9od2RvbV9k dF9ub2RlICA9IGdpY3YyX21ha2VfaHdkb21fZHRfbm9kZSwKPiAgICAgICAubWFrZV9od2RvbV9t YWR0ICAgICA9IGdpY3YyX21ha2VfaHdkb21fbWFkdCwKPiArICAgIC5tYXBfaHdkb21fZXh0cmFf bWFwcGluZ3MgPSBnaWN2Ml9tYXBfaHdkb3duX2V4dHJhX21hcHBpbmdzLAo+ICAgICAgIC5pb21l bV9kZW55X2FjY2VzcyAgID0gZ2ljdjJfaW9tZW1fZGVueV9hY2Nlc3MsCj4gICB9Owo+Cj4gZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9naWMuYyBiL3hlbi9hcmNoL2FybS9naWMuYwo+IGluZGV4 IDJiZmU0ZGUuLjEyYmIwYWIgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL2dpYy5jCj4gKysr IGIveGVuL2FyY2gvYXJtL2dpYy5jCj4gQEAgLTIzMCw2ICsyMzAsMTUgQEAgaW50IGdpY19pcnFf eGxhdGUoY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKPiAgICAgICBy ZXR1cm4gMDsKPiAgIH0KPgo+ICsvKiBNYXAgZXh0cmEgR0lDIE1NSU8sIGlycXMgYW5kIG90aGVy IGh3IHN0dWZmcyB0byB0aGUgaGFyZHdhcmUgZG9tYWluLiAqLwo+ICtpbnQgZ2ljX21hcF9od2Rv bV9leHRyYV9tYXBwaW5ncyhzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICBpZiAoIGdpY19o d19vcHMtPm1hcF9od2RvbV9leHRyYV9tYXBwaW5ncyApCj4gKyAgICAgICAgcmV0dXJuIGdpY19o d19vcHMtPm1hcF9od2RvbV9leHRyYV9tYXBwaW5ncyhkKTsKPiArCj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfZHRfcHJlaW5pdCh2b2lkKQo+ICAg ewo+ICAgICAgIGludCByYzsKPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWMu aCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgKPiBpbmRleCBjZDk3YmIyLi44MzZmMWFkIDEw MDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgKPiArKysgYi94ZW4vaW5jbHVk ZS9hc20tYXJtL2dpYy5oCj4gQEAgLTM2MCw2ICszNjAsOCBAQCBzdHJ1Y3QgZ2ljX2h3X29wZXJh dGlvbnMgewo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGR0 X2RldmljZV9ub2RlICpnaWMsIHZvaWQgKmZkdCk7Cj4gICAgICAgLyogQ3JlYXRlIE1BRFQgdGFi bGUgZm9yIHRoZSBoYXJkd2FyZSBkb21haW4gKi8KPiAgICAgICBpbnQgKCptYWtlX2h3ZG9tX21h ZHQpKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIHUzMiBvZmZzZXQpOwo+ICsgICAgLyogTWFwIGV4 dHJhIEdJQyBNTUlPLCBpcnFzIGFuZCBvdGhlciBodyBzdHVmZnMgdG8gdGhlIGhhcmR3YXJlIGRv bWFpbi4gKi8KPiArICAgIGludCAoKm1hcF9od2RvbV9leHRyYV9tYXBwaW5ncykoc3RydWN0IGRv bWFpbiAqZCk7Cj4gICAgICAgLyogRGVueSBhY2Nlc3MgdG8gR0lDIHJlZ2lvbnMgKi8KPiAgICAg ICBpbnQgKCppb21lbV9kZW55X2FjY2VzcykoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCk7Cj4gICB9 Owo+IEBAIC0zNjksNiArMzcxLDcgQEAgaW50IGdpY19tYWtlX2h3ZG9tX2R0X25vZGUoY29uc3Qg c3RydWN0IGRvbWFpbiAqZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBkdF9kZXZpY2Vfbm9kZSAqZ2ljLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqZmR0KTsKPiAgIGludCBnaWNfbWFrZV9od2RvbV9tYWR0KGNvbnN0IHN0cnVjdCBkb21h aW4gKmQsIHUzMiBvZmZzZXQpOwo+ICtpbnQgZ2ljX21hcF9od2RvbV9leHRyYV9tYXBwaW5ncyhz dHJ1Y3QgZG9tYWluICpkKTsKPiAgIGludCBnaWNfaW9tZW1fZGVueV9hY2Nlc3MoY29uc3Qgc3Ry dWN0IGRvbWFpbiAqZCk7Cj4KPiAgICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KPgoKUmVnYXJk cywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==