From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rex Zhu Subject: [PATCH 2/2] drm/amd/pp: Add custom power profile mode support on Vega10 Date: Tue, 16 Jan 2018 19:50:04 +0800 Message-ID: <1516103404-24914-2-git-send-email-Rex.Zhu@amd.com> References: <1516103404-24914-1-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1516103404-24914-1-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Rex Zhu djI6IGRlbGV0ZSB1bmNlc3NhcnkgYmxhbmsgbGluZS4KICAgIEFkZCBzdGF0aWMgY29uc3QgbW9k aWZpZXJzIHRvIGFuIGFycmF5CgpTaWduZWQtb2ZmLWJ5OiBSZXggWmh1IDxSZXguWmh1QGFtZC5j b20+CgpDaGFuZ2UtSWQ6IElmNmI4MWFkZTc0MmVmNDM0NzE3MDEwY2EwNzgzZDJhZjkxNDVjOTc1 Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jICAgICAg fCAzOCArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVn YTEwX2h3bWdyLmMgfCA3OCArKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v YW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBfaHdtZ3IuaCB8ICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2luYy9od21nci5oICAgICAgICAgIHwgIDMgKwogNCBmaWxlcyBjaGFu Z2VkLCAxMjAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv cG93ZXJwbGF5L2FtZF9wb3dlcnBsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5 L2FtZF9wb3dlcnBsYXkuYwppbmRleCA4ODU5YjY3Li41ZTIyNTIxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRfcG93ZXJwbGF5LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jCkBAIC0xMDgxLDYgKzEwODEsNDIg QEAgc3RhdGljIGludCBwcF9kcG1fZ2V0X3Bvd2VyX3Byb2ZpbGVfc3RhdGUodm9pZCAqaGFuZGxl LAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBwX2dldF9wb3dlcl9wcm9maWxlX21vZGUo dm9pZCAqaGFuZGxlLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBwX2h3bWdyICpod21ncjsKKwlz dHJ1Y3QgcHBfaW5zdGFuY2UgKnBwX2hhbmRsZSA9IChzdHJ1Y3QgcHBfaW5zdGFuY2UgKiloYW5k bGU7CisKKwlpZiAoIWJ1ZiB8fCBwcF9jaGVjayhwcF9oYW5kbGUpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWh3bWdyID0gcHBfaGFuZGxlLT5od21ncjsKKworCWlmIChod21nci0+aHdtZ3JfZnVu Yy0+Z2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSA9PSBOVUxMKSB7CisJCXByX2luZm8oIiVzIHdhcyBu b3QgaW1wbGVtZW50ZWQuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBzbnByaW50ZihidWYsIFBB R0VfU0laRSwgIlxuIik7CisJfQorCisJcmV0dXJuIGh3bWdyLT5od21ncl9mdW5jLT5nZXRfcG93 ZXJfcHJvZmlsZV9tb2RlKGh3bWdyLCBidWYpOworfQorCitzdGF0aWMgaW50IHBwX3NldF9wb3dl cl9wcm9maWxlX21vZGUodm9pZCAqaGFuZGxlLCBsb25nICppbnB1dCwgdWludDMyX3Qgc2l6ZSkK K3sKKwlzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyOworCXN0cnVjdCBwcF9pbnN0YW5jZSAqcHBfaGFu ZGxlID0gKHN0cnVjdCBwcF9pbnN0YW5jZSAqKWhhbmRsZTsKKworCWlmIChwcF9jaGVjayhwcF9o YW5kbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWh3bWdyID0gcHBfaGFuZGxlLT5od21ncjsK KworCWlmIChod21nci0+aHdtZ3JfZnVuYy0+c2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSA9PSBOVUxM KSB7CisJCXByX2luZm8oIiVzIHdhcyBub3QgaW1wbGVtZW50ZWQuXG4iLCBfX2Z1bmNfXyk7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBod21nci0+aHdtZ3JfZnVuYy0+c2V0X3Bv d2VyX3Byb2ZpbGVfbW9kZShod21nciwgaW5wdXQsIHNpemUpOworfQorCiBzdGF0aWMgaW50IHBw X2RwbV9zZXRfcG93ZXJfcHJvZmlsZV9zdGF0ZSh2b2lkICpoYW5kbGUsCiAJCXN0cnVjdCBhbWRf cHBfcHJvZmlsZSAqcmVxdWVzdCkKIHsKQEAgLTE0NjQsNiArMTUwMCw4IEBAIHN0YXRpYyBpbnQg cHBfZ2V0X2Rpc3BsYXlfbW9kZV92YWxpZGF0aW9uX2Nsb2Nrcyh2b2lkICpoYW5kbGUsCiAJLnN3 aXRjaF9wb3dlcl9wcm9maWxlID0gcHBfZHBtX3N3aXRjaF9wb3dlcl9wcm9maWxlLAogCS5zZXRf Y2xvY2tnYXRpbmdfYnlfc211ID0gcHBfc2V0X2Nsb2NrZ2F0aW5nX2J5X3NtdSwKIAkubm90aWZ5 X3NtdV9tZW1vcnlfaW5mbyA9IHBwX2RwbV9ub3RpZnlfc211X21lbW9yeV9pbmZvLAorCS5nZXRf cG93ZXJfcHJvZmlsZV9tb2RlID0gcHBfZ2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSwKKwkuc2V0X3Bv d2VyX3Byb2ZpbGVfbW9kZSA9IHBwX3NldF9wb3dlcl9wcm9maWxlX21vZGUsCiAvKiBleHBvcnQg dG8gREMgKi8KIAkuZ2V0X3NjbGsgPSBwcF9kcG1fZ2V0X3NjbGssCiAJLmdldF9tY2xrID0gcHBf ZHBtX2dldF9tY2xrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkv aHdtZ3IvdmVnYTEwX2h3bWdyLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci92ZWdhMTBfaHdtZ3IuYwppbmRleCA3ZTZmZWVkLi5kNWFiZDQ2IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBfaHdtZ3IuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBfaHdtZ3IuYwpAQCAtNzYwLDYg Kzc2MCw4IEBAIHN0YXRpYyBpbnQgdmVnYTEwX2h3bWdyX2JhY2tlbmRfaW5pdChzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyKQogCiAJaHdtZ3ItPmJhY2tlbmQgPSBkYXRhOwogCisJaHdtZ3ItPnBvd2Vy X3Byb2ZpbGVfbW9kZSA9IFBQX1NNQ19QT1dFUl9QUk9GSUxFX1ZJREVPOworCiAJdmVnYTEwX3Nl dF9kZWZhdWx0X3JlZ2lzdHJ5X2RhdGEoaHdtZ3IpOwogCiAJZGF0YS0+ZGlzYWJsZV9kcG1fbWFz ayA9IDB4ZmY7CkBAIC0zOTYzLDYgKzM5NjUsNyBAQCBzdGF0aWMgaW50IHZlZ2ExMF9yZWFkX3Nl bnNvcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBpbnQgaWR4LAogCQlyZXQgPSAtRUlOVkFMOwog CQlicmVhazsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDIxLDYgKzUwMjQsNzkgQEAg c3RhdGljIGludCB2ZWdhMTBfcmVnaXN0ZXJfdGhlcm1hbF9pbnRlcnJ1cHQoc3RydWN0IHBwX2h3 bWdyICpod21nciwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2ZWdhMTBfZ2V0X3Bvd2Vy X3Byb2ZpbGVfbW9kZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBjaGFyICpidWYpCit7CisJc3Ry dWN0IHZlZ2ExMF9od21nciAqZGF0YSA9IChzdHJ1Y3QgdmVnYTEwX2h3bWdyICopKGh3bWdyLT5i YWNrZW5kKTsKKwl1aW50MzJfdCBpLCBzaXplID0gMDsKKwlzdGF0aWMgY29uc3QgdWludDhfdCBw cm9maWxlX21vZGVfc2V0dGluZ1s1XVs0XSA9IHt7NzAsIDYwLCAxLCAzLH0sCisJCQkJCQl7OTAs IDYwLCAwLCAwLH0sCisJCQkJCQl7NzAsIDYwLCAwLCAwLH0sCisJCQkJCQl7NzAsIDkwLCAwLCAw LH0sCisJCQkJCQl7MzAsIDYwLCAwLCA2LH0sCisJCQkJCQl9OworCXN0YXRpYyBjb25zdCBjaGFy ICpwcm9maWxlX25hbWVbNl0gPSB7IjNEX0ZVTExfU0NSRUVOIiwKKwkJCQkJIlBPV0VSX1NBVklO RyIsCisJCQkJCSJWSURFTyIsCisJCQkJCSJWUiIsCisJCQkJCSJDT01QVVRFUiIsCisJCQkJCSJD VVNUT00ifTsKKwlzdGF0aWMgY29uc3QgY2hhciAqdGl0bGVbNl0gPSB7Ik5VTSIsCisJCQkiTU9E RV9OQU1FIiwKKwkJCSJCVVNZX1NFVF9QT0lOVCIsCisJCQkiRlBTIiwKKwkJCSJVU0VfUkxDX0JV U1kiLAorCQkJIk1JTl9BQ1RJVkVfTEVWRUwifTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCXNpemUgKz0gc3ByaW50ZihidWYgKyBzaXplLCAiJXMgJTE2cyAlcyAlcyAlcyAl c1xuIix0aXRsZVswXSwKKwkJCXRpdGxlWzFdLCB0aXRsZVsyXSwgdGl0bGVbM10sIHRpdGxlWzRd LCB0aXRsZVs1XSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFBfU01DX1BPV0VSX1BST0ZJTEVfQ1VT VE9NOyBpKyspCisJCXNpemUgKz0gc3ByaW50ZihidWYgKyBzaXplLCAiJTNkICUxNHMlczogJTE0 ZCAlM2QgJTEwZCAlMTRkXG4iLAorCQkJaSwgcHJvZmlsZV9uYW1lW2ldLCAoaSA9PSBod21nci0+ cG93ZXJfcHJvZmlsZV9tb2RlKSA/ICIqIiA6ICIgIiwKKwkJCXByb2ZpbGVfbW9kZV9zZXR0aW5n W2ldWzBdLCBwcm9maWxlX21vZGVfc2V0dGluZ1tpXVsxXSwKKwkJCXByb2ZpbGVfbW9kZV9zZXR0 aW5nW2ldWzJdLCBwcm9maWxlX21vZGVfc2V0dGluZ1tpXVszXSk7CisJc2l6ZSArPSBzcHJpbnRm KGJ1ZiArIHNpemUsICIlM2QgJTE0cyVzOiAlMTRkICUzZCAlMTBkICUxNGRcbiIsIGksCisJCQlw cm9maWxlX25hbWVbaV0sIChpID09IGh3bWdyLT5wb3dlcl9wcm9maWxlX21vZGUpID8gIioiIDog IiAiLAorCQkJZGF0YS0+Y3VzdG9tX3Byb2ZpbGVfbW9kZVswXSwgZGF0YS0+Y3VzdG9tX3Byb2Zp bGVfbW9kZVsxXSwKKwkJCWRhdGEtPmN1c3RvbV9wcm9maWxlX21vZGVbMl0sIGRhdGEtPmN1c3Rv bV9wcm9maWxlX21vZGVbM10pOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHZlZ2Ex MF9zZXRfcG93ZXJfcHJvZmlsZV9tb2RlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIGxvbmcgKmlu cHV0LCB1aW50MzJfdCBzaXplKQoreworCXN0cnVjdCB2ZWdhMTBfaHdtZ3IgKmRhdGEgPSAoc3Ry dWN0IHZlZ2ExMF9od21nciAqKShod21nci0+YmFja2VuZCk7CisJdWludDhfdCBidXN5X3NldF9w b2ludDsKKwl1aW50OF90IEZQUzsKKwl1aW50OF90IHVzZV9ybGNfYnVzeTsKKwl1aW50OF90IG1p bl9hY3RpdmVfbGV2ZWw7CisKKwlod21nci0+cG93ZXJfcHJvZmlsZV9tb2RlID0gaW5wdXRbc2l6 ZV07CisKKwlzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nciwgUFBTTUNf TVNHX1NldFdvcmtsb2FkTWFzaywKKwkJCQkJCTE8PGh3bWdyLT5wb3dlcl9wcm9maWxlX21vZGUp OworCisJaWYgKGh3bWdyLT5wb3dlcl9wcm9maWxlX21vZGUgPT0gUFBfU01DX1BPV0VSX1BST0ZJ TEVfQ1VTVE9NKSB7CisJCWlmIChzaXplID09IDAgfHwgc2l6ZSA+IDQpCisJCQlyZXR1cm4gLUVJ TlZBTDsKKworCQlkYXRhLT5jdXN0b21fcHJvZmlsZV9tb2RlWzBdID0gYnVzeV9zZXRfcG9pbnQg PSBpbnB1dFswXTsKKwkJZGF0YS0+Y3VzdG9tX3Byb2ZpbGVfbW9kZVsxXSA9IEZQUyA9IGlucHV0 WzFdOworCQlkYXRhLT5jdXN0b21fcHJvZmlsZV9tb2RlWzJdID0gdXNlX3JsY19idXN5ID0gaW5w dXRbMl07CisJCWRhdGEtPmN1c3RvbV9wcm9maWxlX21vZGVbM10gPSBtaW5fYWN0aXZlX2xldmVs ID0gaW5wdXRbM107CisJCXNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdy LAorCQkJCQlQUFNNQ19NU0dfU2V0Q3VzdG9tR2Z4RHBtUGFyYW1ldGVycywKKwkJCQkJYnVzeV9z ZXRfcG9pbnQgfCBGUFM8PDggfAorCQkJCQl1c2VfcmxjX2J1c3kgPDwgMTYgfCBtaW5fYWN0aXZl X2xldmVsPDwyNCk7CisJCQkJcHJfaW5mbygic2l6ZSBpcyAlZCB2YWx1ZSBpcyAleCBcbiIsIHNp emUsIGJ1c3lfc2V0X3BvaW50IHwgRlBTPDw4IHwKKwkJCQkJdXNlX3JsY19idXN5IDw8IDE2IHwg bWluX2FjdGl2ZV9sZXZlbDw8MjQpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29u c3Qgc3RydWN0IHBwX2h3bWdyX2Z1bmMgdmVnYTEwX2h3bWdyX2Z1bmNzID0gewogCS5iYWNrZW5k X2luaXQgPSB2ZWdhMTBfaHdtZ3JfYmFja2VuZF9pbml0LAogCS5iYWNrZW5kX2ZpbmkgPSB2ZWdh MTBfaHdtZ3JfYmFja2VuZF9maW5pLApAQCAtNTA3OCw2ICs1MTU0LDggQEAgc3RhdGljIGludCB2 ZWdhMTBfcmVnaXN0ZXJfdGhlcm1hbF9pbnRlcnJ1cHQoc3RydWN0IHBwX2h3bWdyICpod21nciwK IAkuZ2V0X3RoZXJtYWxfdGVtcGVyYXR1cmVfcmFuZ2UgPSB2ZWdhMTBfZ2V0X3RoZXJtYWxfdGVt cGVyYXR1cmVfcmFuZ2UsCiAJLnJlZ2lzdGVyX2ludGVybmFsX3RoZXJtYWxfaW50ZXJydXB0ID0g dmVnYTEwX3JlZ2lzdGVyX3RoZXJtYWxfaW50ZXJydXB0LAogCS5zdGFydF90aGVybWFsX2NvbnRy b2xsZXIgPSB2ZWdhMTBfc3RhcnRfdGhlcm1hbF9jb250cm9sbGVyLAorCS5nZXRfcG93ZXJfcHJv ZmlsZV9tb2RlID0gdmVnYTEwX2dldF9wb3dlcl9wcm9maWxlX21vZGUsCisJLnNldF9wb3dlcl9w cm9maWxlX21vZGUgPSB2ZWdhMTBfc2V0X3Bvd2VyX3Byb2ZpbGVfbW9kZSwKIH07CiAKIGludCB2 ZWdhMTBfaHdtZ3JfaW5pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTEwX2h3bWdyLmggYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci92ZWdhMTBfaHdtZ3IuaAppbmRleCBlODUwN2Zm Li42ODlmZTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci92ZWdhMTBfaHdtZ3IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21n ci92ZWdhMTBfaHdtZ3IuaApAQCAtMzg5LDYgKzM4OSw3IEBAIHN0cnVjdCB2ZWdhMTBfaHdtZ3Ig ewogCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfdGVsZW1ldHJ5OwogCXVp bnQzMl90ICAgICAgICAgICAgICAgICAgICAgICBhY2dfbG9vcF9zdGF0ZTsKIAl1aW50MzJfdCAg ICAgICAgICAgICAgICAgICAgICAgbWVtX2NoYW5uZWxzOworCXVpbnQ4X3QgICAgICAgICAgICAg ICAgICAgICAgIGN1c3RvbV9wcm9maWxlX21vZGVbNF07CiB9OwogCiAjZGVmaW5lIFZFR0ExMF9E UE0yX05FQVJfVERQX0RFQyAgICAgICAgICAgICAgICAgICAgICAxMApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2h3bWdyLmggYi9kcml2ZXJzL2dwdS9kcm0v YW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaAppbmRleCBmMzdmMjExLi44MDBkNzczIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvaHdtZ3IuaApAQCAtMzQyLDYgKzM0Miw4IEBA IHN0cnVjdCBwcF9od21ncl9mdW5jIHsKIAkJCQkJdWludDMyX3Qgc2l6ZSk7CiAJaW50ICgqZ2V0 X3RoZXJtYWxfdGVtcGVyYXR1cmVfcmFuZ2UpKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCiAJCQkJ CXN0cnVjdCBQUF9UZW1wZXJhdHVyZVJhbmdlICpyYW5nZSk7CisJaW50ICgqZ2V0X3Bvd2VyX3By b2ZpbGVfbW9kZSkoc3RydWN0IHBwX2h3bWdyICpod21nciwgY2hhciAqYnVmKTsKKwlpbnQgKCpz ZXRfcG93ZXJfcHJvZmlsZV9tb2RlKShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBsb25nICppbnB1 dCwgdWludDMyX3Qgc2l6ZSk7CiB9OwogCiBzdHJ1Y3QgcHBfdGFibGVfZnVuYyB7CkBAIC03NTAs NiArNzUyLDcgQEAgc3RydWN0IHBwX2h3bWdyIHsKIAlzdHJ1Y3QgYW1kX3BwX3Byb2ZpbGUgZGVm YXVsdF9jb21wdXRlX3Bvd2VyX3Byb2ZpbGU7CiAJZW51bSBhbWRfcHBfcHJvZmlsZV90eXBlIGN1 cnJlbnRfcG93ZXJfcHJvZmlsZTsKIAlib29sIGVuX3VtZF9wc3RhdGU7CisJdWludDMyX3QgcG93 ZXJfcHJvZmlsZV9tb2RlOwogfTsKIAogc3RydWN0IGNnc19pcnFfc3JjX2Z1bmNzIHsKLS0gCjEu OS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQt Z2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK