From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 3/3] drm/i915/stolen: Deduce base of reserved portion as top-size on vlv Date: Fri, 16 Mar 2018 14:00:45 +0200 Message-ID: <20180316120045.GF5453@intel.com> References: <20180312165206.31772-1-chris@chris-wilson.co.uk> <20180312165206.31772-3-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 284816E111 for ; Fri, 16 Mar 2018 12:00:49 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180312165206.31772-3-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXIgMTIsIDIwMTggYXQgMDQ6NTI6MDZQTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IE9uIFZhbGxleXZpZXcsIHRoZSBIVyBkZWR1Y2VzIHRoZSBiYXNlIG9mIHRoZSByZXNl cnZlZCBwb3J0aW9uIG9mIHN0b2xlbgo+IG1lbW9yeSBhcyBiZWluZyAodG9wIC0gc2l6ZSkgYW5k IHRoZSBhZGRyZXNzIGZpZWxkIHdpdGhpbgo+IEdFTjZfU1RPTEVOX1JFU0VSVkVEIGlzIHNldCB0 byAwLiBBZGQgeWV0IGFub3RoZXIgR0VONl9TVE9MRU5fUkVTRVJWRUQKPiByZWFkZXIgdG8gY29w ZSB3aXRoIHRoZSBzdWJ0bHkgZGlmZmVyZW50IHBhdGggcmVxdWlyZWQgZm9yIHZsdi4KPiAKPiB2 MjogQXZvaWQgdXNpbmcgcmVzZXJ2ZWRfYmFzZSA9IHJlc2VydmVkX3NpemUgPSAwIGFzIHRoZSBp bnZhbGlkCj4gY29uZGl0aW9uIGFzIHRoYXQgdHlwaWNhbGx5IGZhbGxzIG91dHNpZGUgb2YgdGhl IHN0b2xlbiByZWdpb24sCj4gcHJvdm9raW5nIGEgY29uc2lzdGVuY3kgZXJyb3IuCj4gCj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6 IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IElt cmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KCkRpZG4ndCBzcG90IGFueXRoaW5nIHdyb25n LiBTZXJpZXMgaXMKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20+Cgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9z dG9sZW4uYyB8IDEwMyArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxl IGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gaW5kZXggN2NjMjczZTY5MGQwLi42NjRhZmNm ZmM0MWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVu LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IEBAIC0x ODUsMTEgKzE4NSw4IEBAIHN0YXRpYyB2b2lkIGc0eF9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCURSTV9ERUJVR19EUklWRVIoIiVzX1NU T0xFTl9SRVNFUlZFRCA9ICUwOHhcbiIsCj4gIAkJCSBJU19HTTQ1KGRldl9wcml2KSA/ICJDVEci IDogIkVMSyIsIHJlZ192YWwpOwo+ICAKPiAtCWlmICgocmVnX3ZhbCAmIEc0WF9TVE9MRU5fUkVT RVJWRURfRU5BQkxFKSA9PSAwKSB7Cj4gLQkJKmJhc2UgPSAwOwo+IC0JCSpzaXplID0gMDsKPiAr CWlmICgocmVnX3ZhbCAmIEc0WF9TVE9MRU5fUkVTRVJWRURfRU5BQkxFKSA9PSAwKQo+ICAJCXJl dHVybjsKPiAtCX0KPiAgCj4gIAkvKgo+ICAJICogV2hldGhlciBJTEsgcmVhbGx5IHJldXNlcyB0 aGUgRUxLIHJlZ2lzdGVyIGZvciB0aGlzIGlzIHVuY2xlYXIuCj4gQEAgLTE5NywxOCArMTk0LDEz IEBAIHN0YXRpYyB2b2lkIGc0eF9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiAgCSAqLwo+ICAJV0FSTihJU19HRU41KGRldl9wcml2KSwgIklM SyBzdG9sZW4gcmVzZXJ2ZWQgZm91bmQ/IDB4JTA4eFxuIiwgcmVnX3ZhbCk7Cj4gIAo+IC0JKmJh c2UgPSAocmVnX3ZhbCAmIEc0WF9TVE9MRU5fUkVTRVJWRURfQUREUjJfTUFTSykgPDwgMTY7Cj4g KwlpZiAoIShyZWdfdmFsICYgRzRYX1NUT0xFTl9SRVNFUlZFRF9BRERSMl9NQVNLKSkKPiArCQly ZXR1cm47Cj4gIAo+ICsJKmJhc2UgPSAocmVnX3ZhbCAmIEc0WF9TVE9MRU5fUkVTRVJWRURfQURE UjJfTUFTSykgPDwgMTY7Cj4gIAlXQVJOX09OKChyZWdfdmFsICYgRzRYX1NUT0xFTl9SRVNFUlZF RF9BRERSMV9NQVNLKSA8ICpiYXNlKTsKPiAgCj4gLQkvKiBPbiB0aGVzZSBwbGF0Zm9ybXMsIHRo ZSByZWdpc3RlciBkb2Vzbid0IGhhdmUgYSBzaXplIGZpZWxkLCBzbyB0aGUKPiAtCSAqIHNpemUg aXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJhc2UgYW5kIHRoZSB0b3Agb2YgdGhlIHN0b2xl bgo+IC0JICogbWVtb3J5LiBXZSBhbHNvIGhhdmUgdGhlIGdlbnVpbmUgY2FzZSB3aGVyZSBiYXNl IGlzIHplcm8gYW5kIHRoZXJlJ3MKPiAtCSAqIG5vdGhpbmcgcmVzZXJ2ZWQuICovCj4gLQlpZiAo KmJhc2UgPT0gMCkKPiAtCQkqc2l6ZSA9IDA7Cj4gLQllbHNlCj4gLQkJKnNpemUgPSBzdG9sZW5f dG9wIC0gKmJhc2U7Cj4gKwkqc2l6ZSA9IHN0b2xlbl90b3AgLSAqYmFzZTsKPiAgfQo+ICAKPiAg c3RhdGljIHZvaWQgZ2VuNl9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiBAQCAtMjE5LDExICsyMTEsOCBAQCBzdGF0aWMgdm9pZCBnZW42X2dl dF9zdG9sZW5fcmVzZXJ2ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAK PiAgCURSTV9ERUJVR19EUklWRVIoIkdFTjZfU1RPTEVOX1JFU0VSVkVEID0gJTA4eFxuIiwgcmVn X3ZhbCk7Cj4gIAo+IC0JaWYgKChyZWdfdmFsICYgR0VONl9TVE9MRU5fUkVTRVJWRURfRU5BQkxF KSA9PSAwKSB7Cj4gLQkJKmJhc2UgPSAwOwo+IC0JCSpzaXplID0gMDsKPiArCWlmICghKHJlZ192 YWwgJiBHRU42X1NUT0xFTl9SRVNFUlZFRF9FTkFCTEUpKQo+ICAJCXJldHVybjsKPiAtCX0KPiAg Cj4gIAkqYmFzZSA9IHJlZ192YWwgJiBHRU42X1NUT0xFTl9SRVNFUlZFRF9BRERSX01BU0s7Cj4g IAo+IEBAIC0yNDYsNiArMjM1LDMzIEBAIHN0YXRpYyB2b2lkIGdlbjZfZ2V0X3N0b2xlbl9yZXNl cnZlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAl9Cj4gIH0KPiAgCj4g K3N0YXRpYyB2b2lkIHZsdl9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiArCQkJCSAgICByZXNvdXJjZV9zaXplX3QgKmJhc2UsCj4gKwkJCQkg ICAgcmVzb3VyY2Vfc2l6ZV90ICpzaXplKQo+ICt7Cj4gKwl1MzIgcmVnX3ZhbCA9IEk5MTVfUkVB RChHRU42X1NUT0xFTl9SRVNFUlZFRCk7Cj4gKwlyZXNvdXJjZV9zaXplX3Qgc3RvbGVuX3RvcCA9 IGRldl9wcml2LT5kc20uZW5kICsgMTsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHRU42X1NU T0xFTl9SRVNFUlZFRCA9ICUwOHhcbiIsIHJlZ192YWwpOwo+ICsKPiArCWlmICghKHJlZ192YWwg JiBHRU42X1NUT0xFTl9SRVNFUlZFRF9FTkFCTEUpKQo+ICsJCXJldHVybjsKPiArCj4gKwlzd2l0 Y2ggKHJlZ192YWwgJiBHRU43X1NUT0xFTl9SRVNFUlZFRF9TSVpFX01BU0spIHsKPiArCWRlZmF1 bHQ6Cj4gKwkJTUlTU0lOR19DQVNFKHJlZ192YWwgJiBHRU43X1NUT0xFTl9SRVNFUlZFRF9TSVpF X01BU0spOwo+ICsJY2FzZSBHRU43X1NUT0xFTl9SRVNFUlZFRF8xTToKPiArCQkqc2l6ZSA9IDEw MjQgKiAxMDI0Owo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBPbiB2bHYsIHRo ZSBBRERSX01BU0sgcG9ydGlvbiBpcyBsZWZ0IGFzIDAgYW5kIEhXIGRlZHVjZXMgdGhlCj4gKwkg KiByZXNlcnZlZCBsb2NhdGlvbiBhcyAodG9wIC0gc2l6ZSkuCj4gKwkgKi8KPiArCSpiYXNlID0g c3RvbGVuX3RvcCAtICpzaXplOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBnZW43X2dldF9zdG9s ZW5fcmVzZXJ2ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJCQkJICAg ICByZXNvdXJjZV9zaXplX3QgKmJhc2UsCj4gIAkJCQkgICAgIHJlc291cmNlX3NpemVfdCAqc2l6 ZSkKPiBAQCAtMjU0LDExICsyNzAsOCBAQCBzdGF0aWMgdm9pZCBnZW43X2dldF9zdG9sZW5fcmVz ZXJ2ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAKPiAgCURSTV9ERUJV R19EUklWRVIoIkdFTjZfU1RPTEVOX1JFU0VSVkVEID0gJTA4eFxuIiwgcmVnX3ZhbCk7Cj4gIAo+ IC0JaWYgKChyZWdfdmFsICYgR0VONl9TVE9MRU5fUkVTRVJWRURfRU5BQkxFKSA9PSAwKSB7Cj4g LQkJKmJhc2UgPSAwOwo+IC0JCSpzaXplID0gMDsKPiArCWlmICghKHJlZ192YWwgJiBHRU42X1NU T0xFTl9SRVNFUlZFRF9FTkFCTEUpKQo+ICAJCXJldHVybjsKPiAtCX0KPiAgCj4gIAkqYmFzZSA9 IHJlZ192YWwgJiBHRU43X1NUT0xFTl9SRVNFUlZFRF9BRERSX01BU0s7Cj4gIAo+IEBAIC0yODMs MTEgKzI5Niw4IEBAIHN0YXRpYyB2b2lkIGNodl9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCj4gIAlEUk1fREVCVUdfRFJJVkVSKCJHRU42 X1NUT0xFTl9SRVNFUlZFRCA9ICUwOHhcbiIsIHJlZ192YWwpOwo+ICAKPiAtCWlmICgocmVnX3Zh bCAmIEdFTjZfU1RPTEVOX1JFU0VSVkVEX0VOQUJMRSkgPT0gMCkgewo+IC0JCSpiYXNlID0gMDsK PiAtCQkqc2l6ZSA9IDA7Cj4gKwlpZiAoIShyZWdfdmFsICYgR0VONl9TVE9MRU5fUkVTRVJWRURf RU5BQkxFKSkKPiAgCQlyZXR1cm47Cj4gLQl9Cj4gIAo+ICAJKmJhc2UgPSByZWdfdmFsICYgR0VO Nl9TVE9MRU5fUkVTRVJWRURfQUREUl9NQVNLOwo+ICAKPiBAQCAtMzE1LDI4ICszMjUsMTggQEAg c3RhdGljIHZvaWQgYmR3X2dldF9zdG9sZW5fcmVzZXJ2ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICAJCQkJICAgIHJlc291cmNlX3NpemVfdCAqc2l6ZSkKPiAgewo+ICAJ dTMyIHJlZ192YWwgPSBJOTE1X1JFQUQoR0VONl9TVE9MRU5fUkVTRVJWRUQpOwo+IC0JcmVzb3Vy Y2Vfc2l6ZV90IHN0b2xlbl90b3A7Cj4gKwlyZXNvdXJjZV9zaXplX3Qgc3RvbGVuX3RvcCA9IGRl dl9wcml2LT5kc20uZW5kICsgMTsKPiAgCj4gIAlEUk1fREVCVUdfRFJJVkVSKCJHRU42X1NUT0xF Tl9SRVNFUlZFRCA9ICUwOHhcbiIsIHJlZ192YWwpOwo+ICAKPiAtCWlmICgocmVnX3ZhbCAmIEdF TjZfU1RPTEVOX1JFU0VSVkVEX0VOQUJMRSkgPT0gMCkgewo+IC0JCSpiYXNlID0gMDsKPiAtCQkq c2l6ZSA9IDA7Cj4gKwlpZiAoIShyZWdfdmFsICYgR0VONl9TVE9MRU5fUkVTRVJWRURfRU5BQkxF KSkKPiAgCQlyZXR1cm47Cj4gLQl9Cj4gIAo+IC0Jc3RvbGVuX3RvcCA9IGRldl9wcml2LT5kc20u ZW5kICsgMTsKPiArCWlmICghKHJlZ192YWwgJiBHRU42X1NUT0xFTl9SRVNFUlZFRF9BRERSX01B U0spKQo+ICsJCXJldHVybjsKPiAgCj4gIAkqYmFzZSA9IHJlZ192YWwgJiBHRU42X1NUT0xFTl9S RVNFUlZFRF9BRERSX01BU0s7Cj4gLQo+IC0JLyogT24gdGhlc2UgcGxhdGZvcm1zLCB0aGUgcmVn aXN0ZXIgZG9lc24ndCBoYXZlIGEgc2l6ZSBmaWVsZCwgc28gdGhlCj4gLQkgKiBzaXplIGlzIHRo ZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBiYXNlIGFuZCB0aGUgdG9wIG9mIHRoZSBzdG9sZW4KPiAt CSAqIG1lbW9yeS4gV2UgYWxzbyBoYXZlIHRoZSBnZW51aW5lIGNhc2Ugd2hlcmUgYmFzZSBpcyB6 ZXJvIGFuZCB0aGVyZSdzCj4gLQkgKiBub3RoaW5nIHJlc2VydmVkLiAqLwo+IC0JaWYgKCpiYXNl ID09IDApCj4gLQkJKnNpemUgPSAwOwo+IC0JZWxzZQo+IC0JCSpzaXplID0gc3RvbGVuX3RvcCAt ICpiYXNlOwo+ICsJKnNpemUgPSBzdG9sZW5fdG9wIC0gKmJhc2U7Cj4gIH0KPiAgCj4gIGludCBp OTE1X2dlbV9pbml0X3N0b2xlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g QEAgLTM2OSw3ICszNjksNyBAQCBpbnQgaTkxNV9nZW1faW5pdF9zdG9sZW4oc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJR0VNX0JVR19PTihkZXZfcHJpdi0+ZHNtLmVuZCA8 PSBkZXZfcHJpdi0+ZHNtLnN0YXJ0KTsKPiAgCj4gIAlzdG9sZW5fdG9wID0gZGV2X3ByaXYtPmRz bS5lbmQgKyAxOwo+IC0JcmVzZXJ2ZWRfYmFzZSA9IDA7Cj4gKwlyZXNlcnZlZF9iYXNlID0gc3Rv bGVuX3RvcDsKPiAgCXJlc2VydmVkX3NpemUgPSAwOwo+ICAKPiAgCXN3aXRjaCAoSU5URUxfR0VO KGRldl9wcml2KSkgewo+IEBAIC0zODksOCArMzg5LDEyIEBAIGludCBpOTE1X2dlbV9pbml0X3N0 b2xlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gIAkJCQkJICZyZXNlcnZl ZF9iYXNlLCAmcmVzZXJ2ZWRfc2l6ZSk7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIDc6Cj4gLQkJZ2Vu N19nZXRfc3RvbGVuX3Jlc2VydmVkKGRldl9wcml2LAo+IC0JCQkJCSAmcmVzZXJ2ZWRfYmFzZSwg JnJlc2VydmVkX3NpemUpOwo+ICsJCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKPiArCQkJ dmx2X2dldF9zdG9sZW5fcmVzZXJ2ZWQoZGV2X3ByaXYsCj4gKwkJCQkJCSZyZXNlcnZlZF9iYXNl LCAmcmVzZXJ2ZWRfc2l6ZSk7Cj4gKwkJZWxzZQo+ICsJCQlnZW43X2dldF9zdG9sZW5fcmVzZXJ2 ZWQoZGV2X3ByaXYsCj4gKwkJCQkJCSAmcmVzZXJ2ZWRfYmFzZSwgJnJlc2VydmVkX3NpemUpOwo+ ICAJCWJyZWFrOwo+ICAJZGVmYXVsdDoKPiAgCQlpZiAoSVNfTFAoZGV2X3ByaXYpKQo+IEBAIC00 MDIsMTEgKzQwNiwxNiBAQCBpbnQgaTkxNV9nZW1faW5pdF9zdG9sZW4oc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCWJyZWFrOwo+ICAJfQo+ICAKPiAtCS8qIEl0IGlzIHBv c3NpYmxlIGZvciB0aGUgcmVzZXJ2ZWQgYmFzZSB0byBiZSB6ZXJvLCBidXQgdGhlIHJlZ2lzdGVy Cj4gLQkgKiBmaWVsZCBmb3Igc2l6ZSBkb2Vzbid0IGhhdmUgYSB6ZXJvIG9wdGlvbi4gKi8KPiAt CWlmIChyZXNlcnZlZF9iYXNlID09IDApIHsKPiAtCQlyZXNlcnZlZF9zaXplID0gMDsKPiArCS8q Cj4gKwkgKiBPdXIgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgcmVzZXJ2ZWQgc3BhY2UgaXMgYXQg dGhlIHRvcCBvZiB0aGUKPiArCSAqIHN0b2xlbiByZWdpb24gYW5kICpuZXZlciogYXQgdGhlIGJv dHRvbS4gSWYgd2Ugc2VlICFyZXNlcnZlZF9iYXNlLAo+ICsJICogaXQgbGlrZWx5IG1lYW5zIHdl IGZhaWxlZCB0byByZWFkIHRoZSByZWdpc3RlcnMgY29ycmVjdGx5Lgo+ICsJICovCj4gKwlpZiAo IXJlc2VydmVkX2Jhc2UpIHsKPiArCQlEUk1fRVJST1IoImluY29uc2lzdGVudCByZXNlcnZhdGlv biAlcGEgKyAlcGE7IGlnbm9yaW5nXG4iLAo+ICsJCQkgICZyZXNlcnZlZF9iYXNlLCAmcmVzZXJ2 ZWRfc2l6ZSk7Cj4gIAkJcmVzZXJ2ZWRfYmFzZSA9IHN0b2xlbl90b3A7Cj4gKwkJcmVzZXJ2ZWRf c2l6ZSA9IDA7Cj4gIAl9Cj4gIAo+ICAJZGV2X3ByaXYtPmRzbV9yZXNlcnZlZCA9Cj4gLS0gCj4g Mi4xNi4yCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK