From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 62D072097215D for ; Wed, 4 Jul 2018 14:51:04 -0700 (PDT) Subject: [PATCH v5 08/11] mm, memory_failure: Teach memory_failure() about dev_pagemap pages From: Dan Williams Date: Wed, 04 Jul 2018 14:41:06 -0700 Message-ID: <153074046610.27838.329669845580014251.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <153074042316.27838.17319837331947007626.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153074042316.27838.17319837331947007626.stgit@dwillia2-desk3.amr.corp.intel.com> MIME-Version: 1.0 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: linux-nvdimm@lists.01.org Cc: jack@suse.cz, Matthew Wilcox , linux-kernel@vger.kernel.org, linux-mm@kvack.org, =?utf-8?b?SsOpcsO0bWU=?= Glisse , linux-fsdevel@vger.kernel.org, Naoya Horiguchi , hch@lst.de List-ID: ICAgIG1jZTogVW5jb3JyZWN0ZWQgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluIHVzZXItYWNjZXNz IGF0IGFmMzQyMTQyMDAKICAgIHsxfVtIYXJkd2FyZSBFcnJvcl06IEl0IGhhcyBiZWVuIGNvcnJl Y3RlZCBieSBoL3cgYW5kIHJlcXVpcmVzIG5vIGZ1cnRoZXIgYWN0aW9uCiAgICBtY2U6IFtIYXJk d2FyZSBFcnJvcl06IE1hY2hpbmUgY2hlY2sgZXZlbnRzIGxvZ2dlZAogICAgezF9W0hhcmR3YXJl IEVycm9yXTogZXZlbnQgc2V2ZXJpdHk6IGNvcnJlY3RlZAogICAgTWVtb3J5IGZhaWx1cmU6IDB4 YWYzNDIxNDogcmVzZXJ2ZWQga2VybmVsIHBhZ2Ugc3RpbGwgcmVmZXJlbmNlZCBieSAxIHVzZXJz CiAgICBbLi5dCiAgICBNZW1vcnkgZmFpbHVyZTogMHhhZjM0MjE0OiByZWNvdmVyeSBhY3Rpb24g Zm9yIHJlc2VydmVkIGtlcm5lbCBwYWdlOiBGYWlsZWQKICAgIG1jZTogTWVtb3J5IGVycm9yIG5v dCByZWNvdmVyZWQKCkluIGNvbnRyYXN0IHRvIHR5cGljYWwgbWVtb3J5LCBkZXZfcGFnZW1hcCBw YWdlcyBtYXkgYmUgZGF4IG1hcHBlZC4gV2l0aApkYXggdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkg dG8gbWFwIGluIGFub3RoZXIgcGFnZSBkeW5hbWljYWxseSBzaW5jZSBkYXgKZXN0YWJsaXNoZXMg MToxIHBoeXNpY2FsIGFkZHJlc3MgdG8gZmlsZSBvZmZzZXQgYXNzb2NpYXRpb25zLiBBbHNvCmRl dl9wYWdlbWFwIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBOVkRJTU0gLyBwZXJzaXN0ZW50IG1lbW9y eSBkZXZpY2VzIGNhbgppbnRlcm5hbCByZW1hcC9yZXBhaXIgYWRkcmVzc2VzIHdpdGggcG9pc29u LiBXaGlsZSBtZW1vcnlfZmFpbHVyZSgpCmFzc3VtZXMgdGhhdCBpdCBjYW4gZGlzY2FyZCB0eXBp Y2FsIHBvaXNvbmVkIHBhZ2VzIGFuZCBrZWVwIHRoZW0KdW5tYXBwZWQgaW5kZWZpbml0ZWx5LCBk ZXZfcGFnZW1hcCBwYWdlcyBtYXkgYmUgcmV0dXJuZWQgdG8gc2VydmljZQphZnRlciB0aGUgZXJy b3IgaXMgY2xlYXJlZC4KClRlYWNoIG1lbW9yeV9mYWlsdXJlKCkgdG8gZGV0ZWN0IGFuZCBoYW5k bGUgTUVNT1JZX0RFVklDRV9IT1NUCmRldl9wYWdlbWFwIHBhZ2VzIHRoYXQgaGF2ZSBwb2lzb24g Y29uc3VtZWQgYnkgdXNlcnNwYWNlLiBNYXJrIHRoZQptZW1vcnkgYXMgVUMgaW5zdGVhZCBvZiB1 bm1hcHBpbmcgaXQgY29tcGxldGVseSB0byBhbGxvdyBvbmdvaW5nIGFjY2Vzcwp2aWEgdGhlIGRl dmljZSBkcml2ZXIgKG5kX3BtZW0pLiBMYXRlciwgbmRfcG1lbSB3aWxsIGdyb3cgc3VwcG9ydCBm b3IKbWFya2luZyB0aGUgcGFnZSBiYWNrIHRvIFdCIHdoZW4gdGhlIGVycm9yIGlzIGNsZWFyZWQu CgpDYzogSmFuIEthcmEgPGphY2tAc3VzZS5jej4KQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hA bHN0LmRlPgpDYzogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CkNjOiBNYXR0 aGV3IFdpbGNveCA8bWF3aWxjb3hAbWljcm9zb2Z0LmNvbT4KQ2M6IE5hb3lhIEhvcmlndWNoaSA8 bi1ob3JpZ3VjaGlAYWguanAubmVjLmNvbT4KQ2M6IFJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVy QGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxs aWFtc0BpbnRlbC5jb20+Ci0tLQogaW5jbHVkZS9saW51eC9tbS5oICB8ICAgIDEgCiBtbS9tZW1v cnktZmFpbHVyZS5jIHwgIDEyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIzIGluc2VydGlvbnMoKyksIDIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51 eC9tbS5oCmluZGV4IGEwZmJiOWZmZTM4MC4uMzc0ZTVlOTI4NGY3IDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNzI1LDYgKzI3MjUs NyBAQCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgewogCU1GX01TR19UUlVOQ0FURURfTFJVLAog CU1GX01TR19CVUREWSwKIAlNRl9NU0dfQlVERFlfMk5ELAorCU1GX01TR19EQVgsCiAJTUZfTVNH X1VOS05PV04sCiB9OwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVt b3J5LWZhaWx1cmUuYwppbmRleCA0ZDcwNzUzYWY1OWMuLjE2MWFhMWI3MDIxMiAxMDA2NDQKLS0t IGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC01NSw2 ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L21l bW9yeV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CisjaW5jbHVkZSA8 bGludXgvbWVtcmVtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxp bnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCkBAIC0yNjMsNiArMjY0LDM5 IEBAIHZvaWQgc2hha2VfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgaW50IGFjY2VzcykKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKHNoYWtlX3BhZ2UpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXBwaW5n X3NpemUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorewor CXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CisJcGdkX3Qg KnBnZDsKKwlwNGRfdCAqcDRkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAq cHRlOworCisJcGdkID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKKwlpZiAoIXBn ZF9wcmVzZW50KCpwZ2QpKQorCQlyZXR1cm4gMDsKKwlwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRk cmVzcyk7CisJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKKwkJcmV0dXJuIDA7CisJcHVkID0gcHVk X29mZnNldChwNGQsIGFkZHJlc3MpOworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCisJCXJldHVy biAwOworCWlmIChwdWRfZGV2bWFwKCpwdWQpKQorCQlyZXR1cm4gUFVEX1NJWkU7CisJcG1kID0g cG1kX29mZnNldChwdWQsIGFkZHJlc3MpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCisJCXJl dHVybiAwOworCWlmIChwbWRfZGV2bWFwKCpwbWQpKQorCQlyZXR1cm4gUE1EX1NJWkU7CisJcHRl ID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKKwlpZiAoIXB0ZV9wcmVzZW50KCpwdGUp KQorCQlyZXR1cm4gMDsKKwlpZiAocHRlX2Rldm1hcCgqcHRlKSkKKwkJcmV0dXJuIFBBR0VfU0la RTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEZhaWx1cmUgaGFuZGxpbmc6IGlmIHdlIGNhbid0 IGZpbmQgb3IgY2FuJ3Qga2lsbCBhIHByb2Nlc3MgdGhlcmUncwogICogbm90IG11Y2ggd2UgY2Fu IGRvLglXZSBqdXN0IHByaW50IGEgbWVzc2FnZSBhbmQgaWdub3JlIG90aGVyd2lzZS4KQEAgLTI5 Miw3ICszMjYsMTAgQEAgc3RhdGljIHZvaWQgYWRkX3RvX2tpbGwoc3RydWN0IHRhc2tfc3RydWN0 ICp0c2ssIHN0cnVjdCBwYWdlICpwLAogCX0KIAl0ay0+YWRkciA9IHBhZ2VfYWRkcmVzc19pbl92 bWEocCwgdm1hKTsKIAl0ay0+YWRkcl92YWxpZCA9IDE7Ci0JdGstPnNpemVfc2hpZnQgPSBjb21w b3VuZF9vcmRlcihjb21wb3VuZF9oZWFkKHApKSArIFBBR0VfU0hJRlQ7CisJaWYgKGlzX3pvbmVf ZGV2aWNlX3BhZ2UocCkpCisJCXRrLT5zaXplX3NoaWZ0ID0gaWxvZzIobWFwcGluZ19zaXplKHAs IHZtYSkpOworCWVsc2UKKwkJdGstPnNpemVfc2hpZnQgPSBjb21wb3VuZF9vcmRlcihjb21wb3Vu ZF9oZWFkKHApKSArIFBBR0VfU0hJRlQ7CiAKIAkvKgogCSAqIEluIHRoZW9yeSB3ZSBkb24ndCBo YXZlIHRvIGtpbGwgd2hlbiB0aGUgcGFnZSB3YXMKQEAgLTMwMCw3ICszMzcsNyBAQCBzdGF0aWMg dm9pZCBhZGRfdG9fa2lsbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBhZ2UgKnAs CiAJICogbGlrZWx5IHZlcnkgcmFyZSBraWxsIGFueXdheXMganVzdCBvdXQgb2YgcGFyYW5vaWEs IGJ1dCB1c2UKIAkgKiBhIFNJR0tJTEwgYmVjYXVzZSB0aGUgZXJyb3IgaXMgbm90IGNvbnRhaW5l ZCBhbnltb3JlLgogCSAqLwotCWlmICh0ay0+YWRkciA9PSAtRUZBVUxUKSB7CisJaWYgKHRrLT5h ZGRyID09IC1FRkFVTFQgfHwgdGstPnNpemVfc2hpZnQgPT0gMCkgewogCQlwcl9pbmZvKCJNZW1v cnkgZmFpbHVyZTogVW5hYmxlIHRvIGZpbmQgdXNlciBzcGFjZSBhZGRyZXNzICVseCBpbiAlc1xu IiwKIAkJCXBhZ2VfdG9fcGZuKHApLCB0c2stPmNvbW0pOwogCQl0ay0+YWRkcl92YWxpZCA9IDA7 CkBAIC01MTQsNiArNTUxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhY3Rpb25fcGFn ZV90eXBlc1tdID0gewogCVtNRl9NU0dfVFJVTkNBVEVEX0xSVV0JCT0gImFscmVhZHkgdHJ1bmNh dGVkIExSVSBwYWdlIiwKIAlbTUZfTVNHX0JVRERZXQkJCT0gImZyZWUgYnVkZHkgcGFnZSIsCiAJ W01GX01TR19CVUREWV8yTkRdCQk9ICJmcmVlIGJ1ZGR5IHBhZ2UgKDJuZCB0cnkpIiwKKwlbTUZf TVNHX0RBWF0JCQk9ICJkYXggcGFnZSIsCiAJW01GX01TR19VTktOT1dOXQkJPSAidW5rbm93biBw YWdlIiwKIH07CiAKQEAgLTExMTEsNiArMTE0OSw4MyBAQCBzdGF0aWMgaW50IG1lbW9yeV9mYWls dXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAlyZXR1cm4gcmVzOwog fQogCitzdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX2Rldl9wYWdlbWFwKHVuc2lnbmVkIGxvbmcg cGZuLCBpbnQgZmxhZ3MsCisJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCit7CisJc3RydWN0 IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWNvbnN0IGJvb2wgdW5tYXBfc3VjY2Vz cyA9IHRydWU7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwlzdHJ1Y3QgdG9fa2lsbCAqdGs7 CisJTElTVF9IRUFEKHRva2lsbCk7CisJaW50IHJjID0gLUVCVVNZOworCWxvZmZfdCBzdGFydDsK KworCS8qCisJICogUHJldmVudCB0aGUgaW5vZGUgZnJvbSBiZWluZyBmcmVlZCB3aGlsZSB3ZSBh cmUgaW50ZXJyb2dhdGluZworCSAqIHRoZSBhZGRyZXNzX3NwYWNlLCB0eXBpY2FsbHkgdGhpcyB3 b3VsZCBiZSBoYW5kbGVkIGJ5CisJICogbG9ja19wYWdlKCksIGJ1dCBkYXggcGFnZXMgZG8gbm90 IHVzZSB0aGUgcGFnZSBsb2NrLiBUaGlzCisJICogYWxzbyBwcmV2ZW50cyBjaGFuZ2VzIHRvIHRo ZSBtYXBwaW5nIG9mIHRoaXMgcGZuIHVudGlsCisJICogcG9pc29uIHNpZ25hbGluZyBpcyBjb21w bGV0ZS4KKwkgKi8KKwlpZiAoIWRheF9sb2NrX21hcHBpbmdfZW50cnkocGFnZSkpCisJCWdvdG8g b3V0OworCisJaWYgKGh3cG9pc29uX2ZpbHRlcihwYWdlKSkgeworCQlyYyA9IDA7CisJCWdvdG8g dW5sb2NrOworCX0KKworCXN3aXRjaCAocGdtYXAtPnR5cGUpIHsKKwljYXNlIE1FTU9SWV9ERVZJ Q0VfUFJJVkFURToKKwljYXNlIE1FTU9SWV9ERVZJQ0VfUFVCTElDOgorCQkvKgorCQkgKiBUT0RP OiBIYW5kbGUgSE1NIHBhZ2VzIHdoaWNoIG1heSBuZWVkIGNvb3JkaW5hdGlvbgorCQkgKiB3aXRo IGRldmljZS1zaWRlIG1lbW9yeS4KKwkJICovCisJCWdvdG8gdW5sb2NrOworCWRlZmF1bHQ6CisJ CWJyZWFrOworCX0KKworCS8qCisJICogVXNlIHRoaXMgZmxhZyBhcyBhbiBpbmRpY2F0aW9uIHRo YXQgdGhlIGRheCBwYWdlIGhhcyBiZWVuCisJICogcmVtYXBwZWQgVUMgdG8gcHJldmVudCBzcGVj dWxhdGl2ZSBjb25zdW1wdGlvbiBvZiBwb2lzb24uCisJICovCisJU2V0UGFnZUhXUG9pc29uKHBh Z2UpOworCisJLyoKKwkgKiBVbmxpa2UgU3lzdGVtLVJBTSB0aGVyZSBpcyBubyBwb3NzaWJpbGl0 eSB0byBzd2FwIGluIGEKKwkgKiBkaWZmZXJlbnQgcGh5c2ljYWwgcGFnZSBhdCBhIGdpdmVuIHZp cnR1YWwgYWRkcmVzcywgc28gYWxsCisJICogdXNlcnNwYWNlIGNvbnN1bXB0aW9uIG9mIFpPTkVf REVWSUNFIG1lbW9yeSBuZWNlc3NpdGF0ZXMKKwkgKiBTSUdCVVMgKGkuZS4gTUZfTVVTVF9LSUxM KQorCSAqLworCWZsYWdzIHw9IE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX01VU1RfS0lMTDsKKwlj b2xsZWN0X3Byb2NzKHBhZ2UsICZ0b2tpbGwsIGZsYWdzICYgTUZfQUNUSU9OX1JFUVVJUkVEKTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkodGssICZ0b2tpbGwsIG5kKQorCQlpZiAodGstPnNpemVf c2hpZnQpCisJCQlzaXplID0gbWF4KHNpemUsIDFVTCA8PCB0ay0+c2l6ZV9zaGlmdCk7CisJaWYg KHNpemUpIHsKKwkJLyoKKwkJICogVW5tYXAgdGhlIGxhcmdlc3QgbWFwcGluZyB0byBhdm9pZCBi cmVha2luZyB1cAorCQkgKiBkZXZpY2UtZGF4IG1hcHBpbmdzIHdoaWNoIGFyZSBjb25zdGFudCBz aXplLiBUaGUKKwkJICogYWN0dWFsIHNpemUgb2YgdGhlIG1hcHBpbmcgYmVpbmcgdG9ybiBkb3du IGlzCisJCSAqIGNvbW11bmljYXRlZCBpbiBzaWdpbmZvLCBzZWUga2lsbF9wcm9jKCkKKwkJICov CisJCXN0YXJ0ID0gKHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQpICYgfihzaXplIC0gMSk7CisJ CXVubWFwX21hcHBpbmdfcmFuZ2UocGFnZS0+bWFwcGluZywgc3RhcnQsIHN0YXJ0ICsgc2l6ZSwg MCk7CisJfQorCWtpbGxfcHJvY3MoJnRva2lsbCwgZmxhZ3MgJiBNRl9NVVNUX0tJTEwsICF1bm1h cF9zdWNjZXNzLCBwZm4sIGZsYWdzKTsKKwlyYyA9IDA7Cit1bmxvY2s6CisJZGF4X3VubG9ja19t YXBwaW5nX2VudHJ5KHBhZ2UpOworb3V0OgorCS8qIGRyb3AgcGdtYXAgcmVmIGFjcXVpcmVkIGlu IGNhbGxlciAqLworCXB1dF9kZXZfcGFnZW1hcChwZ21hcCk7CisJYWN0aW9uX3Jlc3VsdChwZm4s IE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZfUkVDT1ZFUkVEKTsKKwlyZXR1cm4gcmM7 Cit9CisKIC8qKgogICogbWVtb3J5X2ZhaWx1cmUgLSBIYW5kbGUgbWVtb3J5IGZhaWx1cmUgb2Yg YSBwYWdlLgogICogQHBmbjogUGFnZSBOdW1iZXIgb2YgdGhlIGNvcnJ1cHRlZCBwYWdlCkBAIC0x MTMzLDYgKzEyNDgsNyBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGlu dCBmbGFncykKIAlzdHJ1Y3QgcGFnZSAqcDsKIAlzdHJ1Y3QgcGFnZSAqaHBhZ2U7CiAJc3RydWN0 IHBhZ2UgKm9yaWdfaGVhZDsKKwlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwogCWludCByZXM7 CiAJdW5zaWduZWQgbG9uZyBwYWdlX2ZsYWdzOwogCkBAIC0xMTQ1LDYgKzEyNjEsMTAgQEAgaW50 IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiAJCXJldHVybiAt RU5YSU87CiAJfQogCisJcGdtYXAgPSBnZXRfZGV2X3BhZ2VtYXAocGZuLCBOVUxMKTsKKwlpZiAo cGdtYXApCisJCXJldHVybiBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcChwZm4sIGZsYWdzLCBw Z21hcCk7CisKIAlwID0gcGZuX3RvX3BhZ2UocGZuKTsKIAlpZiAoUGFnZUh1Z2UocCkpCiAJCXJl dHVybiBtZW1vcnlfZmFpbHVyZV9odWdldGxiKHBmbiwgZmxhZ3MpOwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1haWxpbmcgbGlz dApMaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtbnZkaW1tCg==