From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC PATCH v2 14/26] ARM: vGICv3: introduce basic ITS emulation bits Date: Tue, 14 Feb 2017 16:02:31 -0800 (PST) Message-ID: References: <20161222182446.18791-1-andre.przywara@arm.com> <20161222182446.18791-15-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cdn3P-00016T-EL for xen-devel@lists.xenproject.org; Wed, 15 Feb 2017 00:02:39 +0000 In-Reply-To: <20161222182446.18791-15-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Vijay Kilari List-Id: xen-devel@lists.xenproject.org T24gVGh1LCAyMiBEZWMgMjAxNiwgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gQ3JlYXRlIGEgbmV3 IGZpbGUgdG8gaG9sZCB0aGUgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBJVFMgd2lkZ2V0Lgo+IEZv ciBub3cgd2UgZW11bGF0ZSB0aGUgbWVtb3J5IG1hcHBlZCBJVFMgcmVnaXN0ZXJzIGFuZCBwcm92 aWRlIGEgc3R1Ygo+IHRvIGludHJvZHVjZSB0aGUgSVRTIGNvbW1hbmQgaGFuZGxpbmcgZnJhbWV3 b3JrIChidXQgd2l0aG91dCBhY3R1YWxseQo+IGVtdWxhdGluZyBhbnkgY29tbWFuZHMgYXQgdGhp cyB0aW1lKS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdh cmFAYXJtLmNvbT4KClBsZWFzZSBzZWUgYWxwaW5lLkRFQi4yLjEwLjE2MTEwODE1MDc0MTAuMzQ5 MUBzc3RhYmVsbGluaS1UaGlua1BhZC1YMjYwCgo+IC0tLQo+ICB4ZW4vYXJjaC9hcm0vTWFrZWZp bGUgICAgICAgICAgICAgfCAgIDEgKwo+ICB4ZW4vYXJjaC9hcm0vdmdpYy1pdHMuYyAgICAgICAg ICAgfCAzNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2Fy Y2gvYXJtL3ZnaWMtdjMuYyAgICAgICAgICAgIHwgICA5IC0KPiAgeGVuL2luY2x1ZGUvYXNtLWFy bS9naWNfdjNfZGVmcy5oIHwgIDE5ICsrCj4gIDQgZmlsZXMgY2hhbmdlZCwgMzk3IGluc2VydGlv bnMoKyksIDkgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0v dmdpYy1pdHMuYwo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUgYi94ZW4v YXJjaC9hcm0vTWFrZWZpbGUKPiBpbmRleCA4MGMyOTUxLi4zNDY0NTRkIDEwMDY0NAo+IC0tLSBh L3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+IEBA IC00NSw2ICs0NSw3IEBAIG9iai15ICs9IHRyYXBzLm8KPiAgb2JqLXkgKz0gdmdpYy5vCj4gIG9i ai15ICs9IHZnaWMtdjIubwo+ICBvYmotJChDT05GSUdfSEFTX0dJQ1YzKSArPSB2Z2ljLXYzLm8K PiArb2JqLSQoQ09ORklHX0hBU19JVFMpICs9IHZnaWMtaXRzLm8KPiAgb2JqLXkgKz0gdm1fZXZl bnQubwo+ICBvYmoteSArPSB2dGltZXIubwo+ICBvYmoteSArPSB2cHNjaS5vCj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS92Z2ljLWl0cy5jIGIveGVuL2FyY2gvYXJtL3ZnaWMtaXRzLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU1ZTlhZTQKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL3ZnaWMtaXRzLmMKPiBAQCAtMCwwICsxLDM3NyBAQAo+ ICsvKgo+ICsgKiB4ZW4vYXJjaC9hcm0vdmdpYy1pdHMuYwo+ICsgKgo+ICsgKiBBUk0gSW50ZXJy dXB0IFRyYW5zbGF0aW9uIFNlcnZpY2UgKElUUykgZW11bGF0aW9uCj4gKyAqCj4gKyAqIEFuZHJl IFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTYgQVJNIEx0ZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiAr ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAr ICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 eGVuL2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8eGVu L2RvbWFpbl9wYWdlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4gKyNpbmNsdWRlIDx4ZW4v aW5pdC5oPgo+ICsjaW5jbHVkZSA8eGVuL3NvZnRpcnEuaD4KPiArI2luY2x1ZGUgPHhlbi9pcnEu aD4KPiArI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8eGVuL3NpemVzLmg+Cj4g KyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgo+ICsjaW5jbHVkZSA8YXNtL21taW8uaD4KPiArI2lu Y2x1ZGUgPGFzbS9naWNfdjNfZGVmcy5oPgo+ICsjaW5jbHVkZSA8YXNtL2dpYy1pdHMuaD4KPiAr I2luY2x1ZGUgPGFzbS92Z2ljLmg+Cj4gKyNpbmNsdWRlIDxhc20vdmdpYy1lbXVsLmg+Cj4gKwo+ ICsvKiBEYXRhIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhIHZpcnR1YWwgSVRTICovCj4gK3N0cnVj dCB2aXJ0X2l0cyB7Cj4gKyAgICBzdHJ1Y3QgZG9tYWluICpkOwo+ICsgICAgc3RydWN0IGhvc3Rf aXRzICpod19pdHM7Cj4gKyAgICBzcGlubG9ja190IHZjbWRfbG9jazsgICAgICAgLyogcHJvdGVj dHMgdGhlIHZpcnR1YWwgY29tbWFuZCBidWZmZXIgKi8KPiArICAgIHVpbnQ2NF90IGNiYXNlcjsK PiArICAgIHVpbnQ2NF90ICpjbWRidWY7Cj4gKyAgICBpbnQgY3dyaXRlcjsKPiArICAgIGludCBj cmVhZHI7Cj4gKyAgICBzcGlubG9ja190IGl0c19sb2NrOyAgICAgICAgLyogcHJvdGVjdHMgdGhl IGNvbGxlY3Rpb24gYW5kIGRldmljZSB0YWJsZXMgKi8KPiArICAgIHVpbnQ2NF90IGJhc2VyMCwg YmFzZXIxOwo+ICsgICAgdWludDE2X3QgKmNvbGxfdGFibGU7Cj4gKyAgICBpbnQgbWF4X2NvbGxl Y3Rpb25zOwo+ICsgICAgdWludDY0X3QgKmRldl90YWJsZTsKPiArICAgIGludCBtYXhfZGV2aWNl czsKPiArICAgIGJvb2wgZW5hYmxlZDsKPiArfTsKPiArCj4gKy8qIEFuIEludGVycnVwdCBUcmFu c2xhdGlvbiBUYWJsZSBFbnRyeTogdGhpcyBpcyBpbmRleGVkIGJ5IGEKPiArICogRGV2aWNlSUQv RXZlbnRJRCBwYWlyIGFuZCBpcyBsb2NhdGVkIGluIGd1ZXN0IG1lbW9yeS4KPiArICovCj4gK3N0 cnVjdCB2aXRzX2l0dGUKPiArewo+ICsgICAgdWludDMyX3QgdmxwaTsKPiArICAgIHVpbnQxNl90 IGNvbGxlY3Rpb247Cj4gK307Cj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKPiArICogRnVuY3Rpb25zIHRoYXQgaGFuZGxlIElUUyBjb21tYW5kcyAqCj4gKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gK3N0YXRpYyB1aW50 NjRfdCBpdHNfY21kX21hc2tfZmllbGQodWludDY0X3QgKml0c19jbWQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdvcmQsIGludCBzaGlmdCwgaW50IHNpemUpCj4g K3sKPiArICAgIHJldHVybiAobGU2NF90b19jcHUoaXRzX2NtZFt3b3JkXSkgPj4gc2hpZnQpICYg KEJJVChzaXplKSAtIDEpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X2NvbW1hbmQo Y21kKSAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMCwgIDAsICA4KQo+ICsjZGVmaW5l IGl0c19jbWRfZ2V0X2RldmljZWlkKGNtZCkgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwg MCwgMzIsIDMyKQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X3NpemUoY21kKSAgICAgICAgICAgaXRz X2NtZF9tYXNrX2ZpZWxkKGNtZCwgMSwgIDAsICA1KQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X2lk KGNtZCkgICAgICAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMSwgIDAsIDMyKQo+ICsj ZGVmaW5lIGl0c19jbWRfZ2V0X3BoeXNpY2FsX2lkKGNtZCkgICAgaXRzX2NtZF9tYXNrX2ZpZWxk KGNtZCwgMSwgMzIsIDMyKQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X2NvbGxlY3Rpb24oY21kKSAg ICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwgIDAsIDE2KQo+ICsjZGVmaW5lIGl0c19jbWRf Z2V0X3RhcmdldF9hZGRyKGNtZCkgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwgMTYsIDMy KQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X3ZhbGlkYml0KGNtZCkgICAgICAgaXRzX2NtZF9tYXNr X2ZpZWxkKGNtZCwgMiwgNjMsICAxKQo+ICsKPiArI2RlZmluZSBJVFNfQ01EX0JVRkZFUl9TSVpF KGJhc2VyKSAgICAgICgoKChiYXNlcikgJiAweGZmKSArIDEpIDw8IDEyKQo+ICsKPiArc3RhdGlj IGludCB2Z2ljX2l0c19oYW5kbGVfY21kcyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlydF9p dHMgKml0cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3cml0 ZXIpCj4gK3sKPiArICAgIHVpbnQ2NF90ICpjbWRwdHI7Cj4gKwo+ICsgICAgaWYgKCAhaXRzLT5j bWRidWYgKQo+ICsgICAgICAgIHJldHVybiAtMTsKPiArCj4gKyAgICBpZiAoIHdyaXRlciA+PSBJ VFNfQ01EX0JVRkZFUl9TSVpFKGl0cy0+Y2Jhc2VyKSApCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ ICsKPiArICAgIHNwaW5fbG9jaygmaXRzLT52Y21kX2xvY2spOwo+ICsKPiArICAgIHdoaWxlICgg aXRzLT5jcmVhZHIgIT0gd3JpdGVyICkKPiArICAgIHsKPiArICAgICAgICBjbWRwdHIgPSBpdHMt PmNtZGJ1ZiArIChpdHMtPmNyZWFkciAvIHNpemVvZigqaXRzLT5jbWRidWYpKTsKPiArICAgICAg ICBzd2l0Y2ggKGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kcHRyKSkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgY2FzZSBHSVRTX0NNRF9TWU5DOgo+ICsgICAgICAgICAgICAvKiBXZSBoYW5kbGUgSVRT IGNvbW1hbmRzIHN5bmNocm9ub3VzbHksIHNvIHdlIGlnbm9yZSBTWU5DLiAqLwo+ICsJICAgIGJy ZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19H X1dBUk5JTkcsICJJVFM6IHVuaGFuZGxlZCBJVFMgY29tbWFuZCAlbGRcbiIsCj4gKyAgICAgICAg ICAgICAgICAgICBpdHNfY21kX2dldF9jb21tYW5kKGNtZHB0cikpOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGl0cy0+Y3JlYWRyICs9IElUU19DTURf U0laRTsKPiArICAgICAgICBpZiAoIGl0cy0+Y3JlYWRyID09IElUU19DTURfQlVGRkVSX1NJWkUo aXRzLT5jYmFzZXIpICkKPiArICAgICAgICAgICAgaXRzLT5jcmVhZHIgPSAwOwo+ICsgICAgfQo+ ICsgICAgaXRzLT5jd3JpdGVyID0gd3JpdGVyOwo+ICsKPiArICAgIHNwaW5fdW5sb2NrKCZpdHMt PnZjbWRfbG9jayk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKgo+ICsgKiBJVFMgcmVnaXN0ZXJzIHJlYWQgYWNjZXNzICoKPiAr ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+ICsKPiArLyogVGhlIHBoeXNpY2FsIGFk ZHJlc3MgaXMgZW5jb2RlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24KPiArICog dGhlIHVzZWQgcGFnZSBzaXplOiB0aGUgaGlnaGVzdCBmb3VyIGJpdHMgYXJlIHN0b3JlZCBpbiB0 aGUgbG93ZXN0Cj4gKyAqIGZvdXIgYml0cyBvZiB0aGUgZmllbGQgZm9yIDY0SyBwYWdlcy4KPiAr ICovCj4gK3N0YXRpYyBwYWRkcl90IGdldF9iYXNlcl9waHlzX2FkZHIodWludDY0X3QgcmVnKQo+ ICt7Cj4gKyAgICBpZiAoIHJlZyAmIEJJVCg5KSApCj4gKyAgICAgICAgcmV0dXJuIChyZWcgJiBH RU5NQVNLKDQ3LCAxNikpIHwgKChyZWcgJiBHRU5NQVNLKDE1LCAxMikpIDw8IDM2KTsKPiArICAg IGVsc2UKPiArICAgICAgICByZXR1cm4gcmVnICYgR0VOTUFTSyg0NywgMTIpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHZnaWNfdjNfaXRzX21taW9fcmVhZChzdHJ1Y3QgdmNwdSAqdiwgbW1pb19p bmZvX3QgKmluZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVy X3QgKnIsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0cnVjdCB2aXJ0X2l0cyAqaXRzID0gcHJp djsKPiArCj4gKyAgICBzd2l0Y2ggKCBpbmZvLT5ncGEgJiAweGZmZmYgKQo+ICsgICAgewo+ICsg ICAgY2FzZSBWUkVHMzIoR0lUU19DVExSKToKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6 ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVn MzJfZXh0cmFjdChpdHMtPmVuYWJsZWQgfCBCSVQoMzEpLCBpbmZvKTsKPiArCWJyZWFrOwo+ICsg ICAgY2FzZSBWUkVHMzIoR0lUU19JSURSKToKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6 ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVn MzJfZXh0cmFjdChHSVRTX0lJRFJfVkFMVUUsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsg ICAgY2FzZSBWUkVHNjQoR0lUU19UWVBFUik6Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0LnNp emUgPCBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVn NjRfZXh0cmFjdCgweDFlZmYxLCBpbmZvKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2Ug VlJFRzY0KEdJVFNfQ0JBU0VSKToKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSA8IERB QlRfV09SRCApIGdvdG8gYmFkX3dpZHRoOwo+ICsgICAgICAgICpyID0gdmdpY19yZWc2NF9leHRy YWN0KGl0cy0+Y2Jhc2VyLCBpbmZvKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVlJF RzY0KEdJVFNfQ1dSSVRFUik6Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgPCBEQUJU X1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFj dChpdHMtPmN3cml0ZXIsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkVH NjQoR0lUU19DUkVBRFIpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9X T1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3Qo aXRzLT5jcmVhZHIsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkVHNjQo R0lUU19CQVNFUjApOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JE ICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRz LT5iYXNlcjAsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lU U19CQVNFUjEpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkg Z290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRzLT5i YXNlcjEsIGluZm8pOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkFOR0U2NChHSVRT X0JBU0VSMiwgR0lUU19CQVNFUjcpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwg REFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4 dHJhY3QoMCwgaW5mbyk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFZSRUczMihHSUNE X1BJRFIyKToKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBn b3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVnMzJfZXh0cmFjdChHSUNWM19H SUNEX1BJRFIyLCBpbmZvKTsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gKyAgICBy ZXR1cm4gMTsKPiArCj4gK2JhZF93aWR0aDoKPiArICAgIGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91 cygpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCj4gKyAqIElUUyByZWdpc3RlcnMgd3JpdGUgYWNjZXNzICoKPiArICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gK3N0YXRpYyBpbnQgaXRzX2Jhc2VyX3Rh YmxlX3NpemUodWludDY0X3QgYmFzZXIpCj4gK3sKPiArICAgIGludCBwYWdlX3NpemUgPSAwOwo+ ICsKPiArICAgIHN3aXRjaCAoIChiYXNlciA+PiA4KSAmIDMgKQo+ICsgICAgewo+ICsgICAgY2Fz ZSAwOiBwYWdlX3NpemUgPSBTWl80SzsgYnJlYWs7Cj4gKyAgICBjYXNlIDE6IHBhZ2Vfc2l6ZSA9 IFNaXzE2SzsgYnJlYWs7Cj4gKyAgICBjYXNlIDI6Cj4gKyAgICBjYXNlIDM6IHBhZ2Vfc2l6ZSA9 IFNaXzY0SzsgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIHBhZ2Vfc2l6ZSAqICgo YmFzZXIgJiBHRU5NQVNLKDcsIDApKSArIDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0c19i YXNlcl9ucl9lbnRyaWVzKHVpbnQ2NF90IGJhc2VyKQo+ICt7Cj4gKyAgICBpbnQgZW50cnlfc2l6 ZSA9ICgoYmFzZXIgJiBHRU5NQVNLKDUyLCA0OCkpID4+IDQ4KSArIDE7Cj4gKwo+ICsgICAgcmV0 dXJuIGl0c19iYXNlcl90YWJsZV9zaXplKGJhc2VyKSAvIGVudHJ5X3NpemU7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdmdpY192M19pdHNfbW1pb193cml0ZShzdHJ1Y3QgdmNwdSAqdiwgbW1pb19p bmZvX3QgKmluZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl cl90IHIsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21h aW47Cj4gKyAgICBzdHJ1Y3QgdmlydF9pdHMgKml0cyA9IHByaXY7Cj4gKyAgICB1aW50NjRfdCBy ZWc7Cj4gKyAgICB1aW50MzJfdCBjdGxyOwo+ICsKPiArICAgIHN3aXRjaCAoIGluZm8tPmdwYSAm IDB4ZmZmZiApCj4gKyAgICB7Cj4gKyAgICBjYXNlIFZSRUczMihHSVRTX0NUTFIpOgo+ICsgICAg ICAgIGN0bHIgPSBpdHMtPmVuYWJsZWQgPyBHSVRTX0NUTFJfRU5BQkxFIDogMDsKPiArICAgICAg ICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiAr CXZnaWNfcmVnMzJfdXBkYXRlKCZjdGxyLCByLCBpbmZvKTsKPiArCWl0cy0+ZW5hYmxlZCA9IGN0 bHIgJiBHSVRTX0NUTFJfRU5BQkxFOwo+ICsJLyogVE9ETzogdHJpZ2dlciBzb21ldGhpbmcgLi4u ICovCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICBjYXNlIFZSRUczMihHSVRTX0lJRFIpOgo+ ICsgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzMyOwo+ICsgICAgY2FzZSBWUkVHMzIoR0lUU19U WVBFUik6Cj4gKyAgICAgICAgZ290byB3cml0ZV9pZ25vcmVfMzI7Cj4gKyAgICBjYXNlIFZSRUc2 NChHSVRTX0NCQVNFUik6Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgPCBEQUJUX1dP UkQgKSBnb3RvIGJhZF93aWR0aDsKPiArCj4gKyAgICAgICAgLyogQ2hhbmdpbmcgYmFzZSByZWdp c3RlcnMgd2l0aCB0aGUgSVRTIGVuYWJsZWQgaXMgVU5QUkVESUNUQUJMRS4gKi8KPiArICAgICAg ICBpZiAoIGl0cy0+ZW5hYmxlZCApCj4gKyAgICAgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAg ICAgICByZWcgPSBpdHMtPmNiYXNlcjsKPiArICAgICAgICB2Z2ljX3JlZzY0X3VwZGF0ZSgmcmVn LCByLCBpbmZvKTsKPiArICAgICAgICAvKiBUT0RPOiBzYW5pdGlzZSEgKi8KPiArICAgICAgICBp dHMtPmNiYXNlciA9IHJlZzsKPiArCj4gKyAgICAgICAgaWYgKCByZWcgJiBCSVQoNjMpICkKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgICAgIGl0cy0+Y21kYnVmID0gbWFwX2d1ZXN0X3BhZ2VzKGQs IHJlZyAmIEdFTk1BU0soNTEsIDEyKSwgMSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGVsc2UK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHVubWFwX2d1ZXN0X3BhZ2VzKGl0cy0+Y21kYnVm LCAxKTsKPiArICAgICAgICAgICAgaXRzLT5jbWRidWYgPSBOVUxMOwo+ICsgICAgICAgIH0KPiAr Cj4gKwlyZXR1cm4gMTsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1dSSVRFUik6Cj4gKyAgICAg ICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgPCBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiAr ICAgICAgICByZWcgPSBpdHMtPmN3cml0ZXI7Cj4gKyAgICAgICAgdmdpY19yZWc2NF91cGRhdGUo JnJlZywgciwgaW5mbyk7Cj4gKyAgICAgICAgdmdpY19pdHNfaGFuZGxlX2NtZHMoZCwgaXRzLCBy ZWcpOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19DUkVBRFIp Ogo+ICsgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzY0Owo+ICsgICAgY2FzZSBWUkVHNjQoR0lU U19CQVNFUjApOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkg Z290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIC8qIENoYW5naW5nIGJhc2UgcmVnaXN0ZXJz IHdpdGggdGhlIElUUyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUuICovCj4gKyAgICAgICAgaWYg KCBpdHMtPmVuYWJsZWQgKQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICAgICAg cmVnID0gaXRzLT5iYXNlcjA7Cj4gKyAgICAgICAgdmdpY19yZWc2NF91cGRhdGUoJnJlZywgciwg aW5mbyk7Cj4gKwo+ICsgICAgICAgIHJlZyAmPSB+R0lUU19CQVNFUl9ST19NQVNLOwo+ICsgICAg ICAgIHJlZyB8PSAoc2l6ZW9mKHVpbnQ2NF90KSAtIDEpIDw8IEdJVFNfQkFTRVJfRU5UUllfU0la RV9TSElGVDsKPiArICAgICAgICByZWcgfD0gR0lUU19CQVNFUl9UWVBFX0RFVklDRSA8PCBHSVRT X0JBU0VSX1RZUEVfU0hJRlQ7Cj4gKyAgICAgICAgLyogVE9ETzogc2FuaXRpc2UhICovCj4gKyAg ICAgICAgLyogVE9ETzogbG9ja2luZyg/KSAqLwo+ICsKPiArICAgICAgICBpZiAoIHJlZyAmIEdJ VFNfQkFTRVJfVkFMSUQgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaXRzLT5kZXZfdGFi bGUgPSBtYXBfZ3Vlc3RfcGFnZXMoZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X2Jhc2VyX3BoeXNfYWRkcihyZWcpLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHNfYmFzZXJfdGFibGVfc2l6ZShyZWcp ID4+IFBBR0VfU0hJRlQpOwo+ICsgICAgICAgICAgICBpdHMtPm1heF9kZXZpY2VzID0gaXRzX2Jh c2VyX25yX2VudHJpZXMocmVnKTsKPiArICAgICAgICAgICAgbWVtc2V0KGl0cy0+ZGV2X3RhYmxl LCAwLCBpdHMtPm1heF9kZXZpY2VzICogc2l6ZW9mKHVpbnQ2NF90KSk7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIGVsc2UKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHVubWFwX2d1ZXN0X3Bh Z2VzKGl0cy0+ZGV2X3RhYmxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHNf YmFzZXJfdGFibGVfc2l6ZShyZWcpID4+IFBBR0VfU0hJRlQpOwo+ICsgICAgICAgICAgICBpdHMt Pm1heF9kZXZpY2VzID0gMDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGl0cy0+YmFzZXIw ID0gcmVnOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19CQVNF UjEpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBi YWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIC8qIENoYW5naW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGgg dGhlIElUUyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUuICovCj4gKyAgICAgICAgaWYgKCBpdHMt PmVuYWJsZWQgKQo+ICsgICAgICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICAgICAgcmVnID0g aXRzLT5iYXNlcjE7Cj4gKyAgICAgICAgdmdpY19yZWc2NF91cGRhdGUoJnJlZywgciwgaW5mbyk7 Cj4gKyAgICAgICAgcmVnICY9IH5HSVRTX0JBU0VSX1JPX01BU0s7Cj4gKyAgICAgICAgcmVnIHw9 IChzaXplb2YodWludDE2X3QpIC0gMSkgPDwgR0lUU19CQVNFUl9FTlRSWV9TSVpFX1NISUZUOwo+ ICsgICAgICAgIHJlZyB8PSBHSVRTX0JBU0VSX1RZUEVfQ09MTEVDVElPTiA8PCBHSVRTX0JBU0VS X1RZUEVfU0hJRlQ7Cj4gKyAgICAgICAgLyogVE9ETzogc2FuaXRpc2UhICovCj4gKwo+ICsgICAg ICAgIC8qIFRPRE86IHNvcnQgb3V0IGxvY2tpbmcgKi8KPiArICAgICAgICAvKiBUT0RPOiByZXBl YXRlZCBjYWxsczogZnJlZSBvbGQgbWFwcGluZyAqLwo+ICsgICAgICAgIGlmICggcmVnICYgR0lU U19CQVNFUl9WQUxJRCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpdHMtPmNvbGxfdGFi bGUgPSBtYXBfZ3Vlc3RfcGFnZXMoZCwgZ2V0X2Jhc2VyX3BoeXNfYWRkcihyZWcpLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRzX2Jhc2VyX3RhYmxl X3NpemUocmVnKSA+PiBQQUdFX1NISUZUKTsKPiArICAgICAgICAgICAgaXRzLT5tYXhfY29sbGVj dGlvbnMgPSBpdHNfYmFzZXJfbnJfZW50cmllcyhyZWcpOwo+ICsgICAgICAgICAgICBtZW1zZXQo aXRzLT5jb2xsX3RhYmxlLCAweGZmLAo+ICsgICAgICAgICAgICAgICAgICAgaXRzLT5tYXhfY29s bGVjdGlvbnMgKiBzaXplb2YodWludDE2X3QpKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxz ZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdW5tYXBfZ3Vlc3RfcGFnZXMoaXRzLT5jb2xs X3RhYmxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHNfYmFzZXJfdGFibGVf c2l6ZShyZWcpID4+IFBBR0VfU0hJRlQpOwo+ICsgICAgICAgICAgICBpdHMtPm1heF9jb2xsZWN0 aW9ucyA9IDA7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGl0cy0+YmFzZXIxID0gcmVnOwo+ICsg ICAgICAgIHJldHVybiAxOwo+ICsgICAgY2FzZSBWUkFOR0U2NChHSVRTX0JBU0VSMiwgR0lUU19C QVNFUjcpOgo+ICsgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzY0Owo+ICsgICAgZGVmYXVsdDoK PiArICAgICAgICBnZHByaW50ayhYRU5MT0dfR19XQVJOSU5HLCAiSVRTOiB1bmhhbmRsZWQgSVRT IHJlZ2lzdGVyIDB4JWx4XG4iLAo+ICsgICAgICAgICAgICAgICAgIGluZm8tPmdwYSAmIDB4ZmZm Zik7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDE7Cj4g Kwo+ICt3cml0ZV9pZ25vcmVfNjQ6Cj4gKyAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVja19hY2Nl c3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgIHJldHVybiAxOwo+ICsKPiAr d3JpdGVfaWdub3JlXzMyOgo+ICsgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgIT0gREFCVF9XT1JE ICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICByZXR1cm4gMTsKPiArCj4gK2JhZF93aWR0aDoKPiAr ICAgIHByaW50ayhYRU5MT0dfR19FUlIgIiVwdiB2R0lDUjogYmFkIHJlYWQgd2lkdGggJWQgciVk IG9mZnNldCAlIzA4bHhcbiIsCj4gKyAgICAgICAgICAgdiwgaW5mby0+ZGFidC5zaXplLCBpbmZv LT5kYWJ0LnJlZywgaW5mby0+Z3BhICYgMHhmZmZmKTsKPiArCj4gKyAgICBkb21haW5fY3Jhc2hf c3luY2hyb25vdXMoKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZnaWNfaXRzX21taW9faGFuZGxlciA9IHsKPiAr ICAgIC5yZWFkICA9IHZnaWNfdjNfaXRzX21taW9fcmVhZCwKPiArICAgIC53cml0ZSA9IHZnaWNf djNfaXRzX21taW9fd3JpdGUsCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6 Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9m ZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ICsgKi8KPiBk aWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3ZnaWMtdjMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLXYz LmMKPiBpbmRleCAyMDZlMDBiLi5hOWIwNGFiIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS92 Z2ljLXYzLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vdmdpYy12My5jCj4gQEAgLTE1OSwxNSArMTU5 LDYgQEAgc3RhdGljIHZvaWQgdmdpY19zdG9yZV9pcm91dGVyKHN0cnVjdCBkb21haW4gKmQsIHN0 cnVjdCB2Z2ljX2lycV9yYW5rICpyYW5rLAo+ICAgICAgcmFuay0+dmNwdVtvZmZzZXRdID0gbmV3 X3ZjcHUtPnZjcHVfaWQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCB2Z2ljX3JlZzY0 X2NoZWNrX2FjY2VzcyhzdHJ1Y3QgaHNyX2RhYnQgZGFidCkKPiAtewo+IC0gICAgLyoKPiAtICAg ICAqIDY0IGJpdHMgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQg NjQtYml0IHVubGVzcwo+IC0gICAgICogc3RhdGVkIG90aGVyd2lzZSAoU2VlIDguMS4zIEFSTSBJ SEkgMDA2OUEpLgo+IC0gICAgICovCj4gLSAgICByZXR1cm4gKCBkYWJ0LnNpemUgPT0gREFCVF9E T1VCTEVfV09SRCB8fCBkYWJ0LnNpemUgPT0gREFCVF9XT1JEICk7Cj4gLX0KPiAtCj4gIHN0YXRp YyBpbnQgX192Z2ljX3YzX3JkaXN0cl9yZF9tbWlvX3JlYWQoc3RydWN0IHZjcHUgKnYsIG1taW9f aW5mb190ICppbmZvLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGdpY3JfcmVnLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlZ2lzdGVyX3QgKnIpCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0v Z2ljX3YzX2RlZnMuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2RlZnMuaAo+IGluZGV4 IGRhNWZiNzcuLjZhOTFmNWIgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWNf djNfZGVmcy5oCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9naWNfdjNfZGVmcy5oCj4gQEAg LTE0Nyw2ICsxNDcsMTYgQEAKPiAgI2RlZmluZSBMUElfUFJPUF9SRVMxICAgICAgICAgICAgICAg ICgxIDw8IDEpCj4gICNkZWZpbmUgTFBJX1BST1BfRU5BQkxFRCAgICAgICAgICAgICAoMSA8PCAw KQo+ICAKPiArLyoKPiArICogUElEUjI6IE9ubHkgYml0c1s3OjRdIGFyZSBub3QgaW1wbGVtZW50 YXRpb24gZGVmaW5lZC4gV2UgYXJlCj4gKyAqIGVtdWxhdGluZyBhIEdJQ3YzIChbNzo0XSA9IDB4 MykuCj4gKyAqCj4gKyAqIFdlIGRvbid0IGVtdWxhdGUgYSBzcGVjaWZpYyByZWdpc3RlcnMgc2No ZW1lIHNvIGltcGxlbWVudCB0aGUgb3RoZXJzCj4gKyAqIGJpdHMgYXMgUkVTMCBhcyByZWNvbW1l bmRlZCBieSB0aGUgc3BlYyAoc2VlIDguMS4xMyBpbiBBUk0gSUhJIDAwNjlBKS4KPiArICovCj4g KyNkZWZpbmUgR0lDVjNfR0lDRF9QSURSMiAgMHgzMAo+ICsjZGVmaW5lIEdJQ1YzX0dJQ1JfUElE UjIgIEdJQ1YzX0dJQ0RfUElEUjIKPiArCj4gICNkZWZpbmUgR0lDSF9WTUNSX0VPSSAgICAgICAg ICAgICAgICAoMSA8PCA5KQo+ICAjZGVmaW5lIEdJQ0hfVk1DUl9WRU5HMSAgICAgICAgICAgICAg KDEgPDwgMSkKPiAgCj4gQEAgLTE5MCw2ICsyMDAsMTUgQEAgc3RydWN0IHJkaXN0X3JlZ2lvbiB7 Cj4gICAgICBib29sIHNpbmdsZV9yZGlzdDsKPiAgfTsKPiAgCj4gKy8qCj4gKyAqIDY0IGJpdHMg cmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQgNjQtYml0IHVubGVz cwo+ICsgKiBzdGF0ZWQgb3RoZXJ3aXNlIChTZWUgOC4xLjMgQVJNIElISSAwMDY5QSkuCj4gKyAq Lwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgdmdpY19yZWc2NF9jaGVja19hY2Nlc3Moc3RydWN0IGhz cl9kYWJ0IGRhYnQpCj4gK3sKPiArICAgIHJldHVybiAoIGRhYnQuc2l6ZSA9PSBEQUJUX0RPVUJM RV9XT1JEIHx8IGRhYnQuc2l6ZSA9PSBEQUJUX1dPUkQgKTsKPiArfQo+ICsKPiAgI2VuZGlmIC8q IF9fQVNNX0FSTV9HSUNfVjNfREVGU19IX18gKi8KPiAgCj4gIC8qCj4gLS0gCj4gMi45LjAKPiAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=