From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Airlie Subject: [PATCH libdrm] libdrm_amdgpu: add kernel semaphore support Date: Thu, 6 Jul 2017 11:17:49 +1000 Message-ID: <20170706011749.4217-1-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgYWRkcyBrZXJuZWwg c2VtYXBob3JlIHN1cHBvcnQgdG8gdGhlIGNvbW1hbmQgc3VibWlzc2lvbgppbnRlcmZhY2UgaW4g d2hhdCBzaG91bGQgYmUgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSBtYW5uZXIsCml0IGFkZHMgYSBu ZXcgY29tbWFuZCBzdWJtaXNzaW9uIEFQSS4KClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxh aXJsaWVkQHJlZGhhdC5jb20+Ci0tLQogYW1kZ3B1L2FtZGdwdS5oICAgIHwgIDI5ICsrKysrKysr KysrKy0KIGFtZGdwdS9hbWRncHVfY3MuYyB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxMzggaW5zZXJ0 aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hbWRncHUvYW1kZ3B1LmggYi9h bWRncHUvYW1kZ3B1LmgKaW5kZXggMTkwMWZhOC4uNjQ5YjY2ZSAxMDA2NDQKLS0tIGEvYW1kZ3B1 L2FtZGdwdS5oCisrKyBiL2FtZGdwdS9hbWRncHUuaApAQCAtMzY5LDYgKzM2OSwxNiBAQCBzdHJ1 Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgewogCXN0cnVjdCBhbWRncHVfY3NfZmVuY2VfaW5mbyBmZW5j ZV9pbmZvOwogfTsKIAorc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0X3N5bmNvYmogeworCS8qCisJ ICoKKwkgKi8KKwl1aW50MzJfdCBudW1iZXJfaW5fc3luY29iajsKKwl1aW50MzJfdCBudW1iZXJf b3V0X3N5bmNvYmo7CisJdWludDMyX3QgKmluX3N5bmNvYmo7CisJdWludDMyX3QgKm91dF9zeW5j b2JqOworfTsKKwogLyoqCiAgKiBTdHJ1Y3R1cmUgd2hpY2ggcHJvdmlkZSBpbmZvcm1hdGlvbiBh Ym91dCBHUFUgVk0gTUMgQWRkcmVzcyBzcGFjZQogICogYWxpZ25tZW50cyByZXF1aXJlbWVudHMK QEAgLTg4Niw2ICs4OTYsMTIgQEAgaW50IGFtZGdwdV9jc19zdWJtaXQoYW1kZ3B1X2NvbnRleHRf aGFuZGxlIGNvbnRleHQsCiAJCSAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0ICppYnNfcmVx dWVzdCwKIAkJICAgICB1aW50MzJfdCBudW1iZXJfb2ZfcmVxdWVzdHMpOwogCitpbnQgYW1kZ3B1 X2NzX3N1Ym1pdF9zeW5jb2JqKGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250ZXh0LAorCQkJICAg ICB1aW50NjRfdCBmbGFncywKKwkJCSAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0ICppYnNf cmVxdWVzdCwKKwkJCSAgICAgc3RydWN0IGFtZGdwdV9jc19yZXF1ZXN0X3N5bmNvYmogKmlic19z eW5jb2JqLAorCQkJICAgICB1aW50MzJfdCBudW1iZXJfb2ZfcmVxdWVzdHMpOworCiAvKioKICAq ICBRdWVyeSBzdGF0dXMgb2YgQ29tbWFuZCBCdWZmZXIgU3VibWlzc2lvbgogICoKQEAgLTEzMjgs OCArMTM0NCwxOSBAQCBpbnQgYW1kZ3B1X2NzX2Rlc3Ryb3lfc2VtYXBob3JlKGFtZGdwdV9zZW1h cGhvcmVfaGFuZGxlIHNlbSk7CiAqLwogY29uc3QgY2hhciAqYW1kZ3B1X2dldF9tYXJrZXRpbmdf bmFtZShhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYpOwogCisKK2ludCBhbWRncHVfY3NfY3JlYXRl X3N5bmNvYmooYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAorCQkJICAgICB1aW50MzJfdCAqc3lu Y29iaik7CitpbnQgYW1kZ3B1X2NzX2V4cG9ydF9zeW5jb2JqKGFtZGdwdV9kZXZpY2VfaGFuZGxl IGRldiwKKwkJCSAgICAgdWludDMyX3Qgc3luY29iaiwKKwkJCSAgICAgaW50ICpzaGFyZWRfZmQp OworaW50IGFtZGdwdV9jc19pbXBvcnRfc3luY29iaihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYs CisJCQkgICAgIGludCBzaGFyZWRfZmQsCisJCQkgICAgIHVpbnQzMl90ICpzeW5jb2JqKTsKK2lu dCBhbWRncHVfY3NfZGVzdHJveV9zeW5jb2JqKGFtZGdwdV9kZXZpY2VfaGFuZGxlIGRldiwKKwkJ CSAgICAgIHVpbnQzMl90IHN5bmNvYmopOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRp ZgotCiAjZW5kaWYgLyogI2lmZGVmIF9BTURHUFVfSF8gKi8KZGlmZiAtLWdpdCBhL2FtZGdwdS9h bWRncHVfY3MuYyBiL2FtZGdwdS9hbWRncHVfY3MuYwppbmRleCA4NjhlYjdiLi4zMzljNWY5IDEw MDY0NAotLS0gYS9hbWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvYW1kZ3B1L2FtZGdwdV9jcy5jCkBA IC0xNjgsNyArMTY4LDggQEAgaW50IGFtZGdwdV9jc19xdWVyeV9yZXNldF9zdGF0ZShhbWRncHVf Y29udGV4dF9oYW5kbGUgY29udGV4dCwKICAqIFxzYSBhbWRncHVfY3Nfc3VibWl0KCkKICovCiBz dGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXRfb25lKGFtZGdwdV9jb250ZXh0X2hhbmRsZSBjb250 ZXh0LAotCQkJCXN0cnVjdCBhbWRncHVfY3NfcmVxdWVzdCAqaWJzX3JlcXVlc3QpCisJCQkJc3Ry dWN0IGFtZGdwdV9jc19yZXF1ZXN0ICppYnNfcmVxdWVzdCwKKwkJCQlzdHJ1Y3QgYW1kZ3B1X2Nz X3JlcXVlc3Rfc3luY29iaiAqc3luY29ial9yZXF1ZXN0KQogewogCXVuaW9uIGRybV9hbWRncHVf Y3MgY3M7CiAJdWludDY0X3QgKmNodW5rX2FycmF5OwpAQCAtMTc2LDEwICsxNzcsMTMgQEAgc3Rh dGljIGludCBhbWRncHVfY3Nfc3VibWl0X29uZShhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4 dCwKIAlzdHJ1Y3QgZHJtX2FtZGdwdV9jc19jaHVua19kYXRhICpjaHVua19kYXRhOwogCXN0cnVj dCBkcm1fYW1kZ3B1X2NzX2NodW5rX2RlcCAqZGVwZW5kZW5jaWVzID0gTlVMTDsKIAlzdHJ1Y3Qg ZHJtX2FtZGdwdV9jc19jaHVua19kZXAgKnNlbV9kZXBlbmRlbmNpZXMgPSBOVUxMOworCXN0cnVj dCBkcm1fYW1kZ3B1X2NzX2NodW5rX3NlbSAqaW5fc3luY29ial9kZXBlbmRlbmNpZXMgPSBOVUxM OworCXN0cnVjdCBkcm1fYW1kZ3B1X2NzX2NodW5rX3NlbSAqb3V0X3N5bmNvYmpfZGVwZW5kZW5j aWVzID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpzZW1fbGlzdDsKIAlhbWRncHVfc2VtYXBo b3JlX2hhbmRsZSBzZW0sIHRtcDsKLQl1aW50MzJfdCBpLCBzaXplLCBzZW1fY291bnQgPSAwOwor CXVpbnQzMl90IGksIGosIHNpemUsIHNlbV9jb3VudCA9IDA7CiAJYm9vbCB1c2VyX2ZlbmNlOwor CXVpbnQzMl90IHNlbV9zaXplID0gMDsKIAlpbnQgciA9IDA7CiAKIAlpZiAoaWJzX3JlcXVlc3Qt PmlwX3R5cGUgPj0gQU1ER1BVX0hXX0lQX05VTSkKQEAgLTE5NCw3ICsxOTgsMTEgQEAgc3RhdGlj IGludCBhbWRncHVfY3Nfc3VibWl0X29uZShhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4dCwK IAl9CiAJdXNlcl9mZW5jZSA9IChpYnNfcmVxdWVzdC0+ZmVuY2VfaW5mby5oYW5kbGUgIT0gTlVM TCk7CiAKLQlzaXplID0gaWJzX3JlcXVlc3QtPm51bWJlcl9vZl9pYnMgKyAodXNlcl9mZW5jZSA/ IDIgOiAxKSArIDE7CisJaWYgKHN5bmNvYmpfcmVxdWVzdCkgeworCQlzZW1fc2l6ZSArPSBzeW5j b2JqX3JlcXVlc3QtPm51bWJlcl9pbl9zeW5jb2JqID8gMSA6IDA7CisJCXNlbV9zaXplICs9IHN5 bmNvYmpfcmVxdWVzdC0+bnVtYmVyX291dF9zeW5jb2JqID8gMSA6IDA7CisJfQorCXNpemUgPSBp YnNfcmVxdWVzdC0+bnVtYmVyX29mX2licyArICh1c2VyX2ZlbmNlID8gMiA6IDEpICsgMSArIHNl bV9zaXplOwogCiAJY2h1bmtfYXJyYXkgPSBhbGxvY2Eoc2l6ZW9mKHVpbnQ2NF90KSAqIHNpemUp OwogCWNodW5rcyA9IGFsbG9jYShzaXplb2Yoc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmspICog c2l6ZSk7CkBAIC0zMDYsNiArMzE0LDQ1IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3N1Ym1pdF9v bmUoYW1kZ3B1X2NvbnRleHRfaGFuZGxlIGNvbnRleHQsCiAJCWNodW5rc1tpXS5jaHVua19kYXRh ID0gKHVpbnQ2NF90KSh1aW50cHRyX3Qpc2VtX2RlcGVuZGVuY2llczsKIAl9CiAKKwlpZiAoc3lu Y29ial9yZXF1ZXN0KSB7CisJCWlmIChzeW5jb2JqX3JlcXVlc3QtPm51bWJlcl9pbl9zeW5jb2Jq KSB7CisJCQlpbl9zeW5jb2JqX2RlcGVuZGVuY2llcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRy bV9hbWRncHVfY3NfY2h1bmtfc2VtKSAqIHN5bmNvYmpfcmVxdWVzdC0+bnVtYmVyX2luX3N5bmNv YmopOworCQkJaWYgKCFpbl9zeW5jb2JqX2RlcGVuZGVuY2llcykgeworCQkJCXIgPSAtRU5PTUVN OworCQkJCWdvdG8gZXJyb3JfdW5sb2NrOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IHN5bmNv YmpfcmVxdWVzdC0+bnVtYmVyX2luX3N5bmNvYmo7IGorKykgeworCQkJCXN0cnVjdCBkcm1fYW1k Z3B1X2NzX2NodW5rX3NlbSAqZGVwID0gJmluX3N5bmNvYmpfZGVwZW5kZW5jaWVzW2pdOworCQkJ CWRlcC0+aGFuZGxlID0gc3luY29ial9yZXF1ZXN0LT5pbl9zeW5jb2JqW2pdOworCQkJfQorCQkJ aSA9IGNzLmluLm51bV9jaHVua3MrKzsKKworCQkJLyogZGVwZW5kZW5jaWVzIGNodW5rICovCisJ CQljaHVua19hcnJheVtpXSA9ICh1aW50NjRfdCkodWludHB0cl90KSZjaHVua3NbaV07CisJCQlj aHVua3NbaV0uY2h1bmtfaWQgPSBBTURHUFVfQ0hVTktfSURfU1lOQ09CSl9JTjsKKwkJCWNodW5r c1tpXS5sZW5ndGhfZHcgPSBzaXplb2Yoc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtfc2VtKSAv IDQgKiBzeW5jb2JqX3JlcXVlc3QtPm51bWJlcl9pbl9zeW5jb2JqOworCQkJY2h1bmtzW2ldLmNo dW5rX2RhdGEgPSAodWludDY0X3QpKHVpbnRwdHJfdClpbl9zeW5jb2JqX2RlcGVuZGVuY2llczsK KwkJfQorCQlpZiAoc3luY29ial9yZXF1ZXN0LT5udW1iZXJfb3V0X3N5bmNvYmopIHsKKwkJCW91 dF9zeW5jb2JqX2RlcGVuZGVuY2llcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGRybV9hbWRncHVf Y3NfY2h1bmtfc2VtKSAqIHN5bmNvYmpfcmVxdWVzdC0+bnVtYmVyX291dF9zeW5jb2JqKTsKKwkJ CWlmICghb3V0X3N5bmNvYmpfZGVwZW5kZW5jaWVzKSB7CisJCQkJciA9IC1FTk9NRU07CisJCQkJ Z290byBlcnJvcl91bmxvY2s7CisJCQl9CisJCQlmb3IgKGogPSAwOyBqIDwgc3luY29ial9yZXF1 ZXN0LT5udW1iZXJfb3V0X3N5bmNvYmo7IGorKykgeworCQkJCXN0cnVjdCBkcm1fYW1kZ3B1X2Nz X2NodW5rX3NlbSAqZGVwID0gJm91dF9zeW5jb2JqX2RlcGVuZGVuY2llc1tqXTsKKwkJCQlkZXAt PmhhbmRsZSA9IHN5bmNvYmpfcmVxdWVzdC0+b3V0X3N5bmNvYmpbal07CisJCQl9CisJCQlpID0g Y3MuaW4ubnVtX2NodW5rcysrOworCisJCQkvKiBkZXBlbmRlbmNpZXMgY2h1bmsgKi8KKwkJCWNo dW5rX2FycmF5W2ldID0gKHVpbnQ2NF90KSh1aW50cHRyX3QpJmNodW5rc1tpXTsKKwkJCWNodW5r c1tpXS5jaHVua19pZCA9IEFNREdQVV9DSFVOS19JRF9TWU5DT0JKX09VVDsKKwkJCWNodW5rc1tp XS5sZW5ndGhfZHcgPSBzaXplb2Yoc3RydWN0IGRybV9hbWRncHVfY3NfY2h1bmtfc2VtKSAvIDQg KiBzeW5jb2JqX3JlcXVlc3QtPm51bWJlcl9vdXRfc3luY29iajsKKwkJCWNodW5rc1tpXS5jaHVu a19kYXRhID0gKHVpbnQ2NF90KSh1aW50cHRyX3Qpb3V0X3N5bmNvYmpfZGVwZW5kZW5jaWVzOwor CQl9CisJfQorCiAJciA9IGRybUNvbW1hbmRXcml0ZVJlYWQoY29udGV4dC0+ZGV2LT5mZCwgRFJN X0FNREdQVV9DUywKIAkJCQkmY3MsIHNpemVvZihjcykpOwogCWlmIChyKQpAQCAtMzE3LDMxICsz NjQsNDggQEAgZXJyb3JfdW5sb2NrOgogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5z ZXF1ZW5jZV9tdXRleCk7CiAJZnJlZShkZXBlbmRlbmNpZXMpOwogCWZyZWUoc2VtX2RlcGVuZGVu Y2llcyk7CisJZnJlZShpbl9zeW5jb2JqX2RlcGVuZGVuY2llcyk7CisJZnJlZShvdXRfc3luY29i al9kZXBlbmRlbmNpZXMpOwogCXJldHVybiByOwogfQogCi1pbnQgYW1kZ3B1X2NzX3N1Ym1pdChh bWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4dCwKLQkJICAgICB1aW50NjRfdCBmbGFncywKLQkJ ICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKmlic19yZXF1ZXN0LAotCQkgICAgIHVpbnQz Ml90IG51bWJlcl9vZl9yZXF1ZXN0cykKK2ludCBhbWRncHVfY3Nfc3VibWl0X3N5bmNvYmooYW1k Z3B1X2NvbnRleHRfaGFuZGxlIGNvbnRleHQsCisJCQkgICAgIHVpbnQ2NF90IGZsYWdzLAorCQkJ ICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKmlic19yZXF1ZXN0LAorCQkJICAgICBzdHJ1 Y3QgYW1kZ3B1X2NzX3JlcXVlc3Rfc3luY29iaiAqaWJzX3N5bmNvYmosCisJCQkgICAgIHVpbnQz Ml90IG51bWJlcl9vZl9yZXF1ZXN0cykKIHsKIAl1aW50MzJfdCBpOwogCWludCByOworCWJvb2wg aGFzX3N5bmNvYmogPSBpYnNfc3luY29iaiA/IHRydWUgOiBmYWxzZTsKIAogCWlmICghY29udGV4 dCB8fCAhaWJzX3JlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJciA9IDA7CiAJZm9yIChp ID0gMDsgaSA8IG51bWJlcl9vZl9yZXF1ZXN0czsgaSsrKSB7Ci0JCXIgPSBhbWRncHVfY3Nfc3Vi bWl0X29uZShjb250ZXh0LCBpYnNfcmVxdWVzdCk7CisJCXIgPSBhbWRncHVfY3Nfc3VibWl0X29u ZShjb250ZXh0LCBpYnNfcmVxdWVzdCwgaGFzX3N5bmNvYmogPyBpYnNfc3luY29iaiA6IE5VTEwp OwogCQlpZiAocikKIAkJCWJyZWFrOwogCQlpYnNfcmVxdWVzdCsrOworCQlpZiAoaGFzX3N5bmNv YmopCisJCQlpYnNfc3luY29iaisrOwogCX0KIAogCXJldHVybiByOwogfQogCitpbnQgYW1kZ3B1 X2NzX3N1Ym1pdChhbWRncHVfY29udGV4dF9oYW5kbGUgY29udGV4dCwKKwkJICAgICB1aW50NjRf dCBmbGFncywKKwkJICAgICBzdHJ1Y3QgYW1kZ3B1X2NzX3JlcXVlc3QgKmlic19yZXF1ZXN0LAor CQkgICAgIHVpbnQzMl90IG51bWJlcl9vZl9yZXF1ZXN0cykKK3sKKwlyZXR1cm4gYW1kZ3B1X2Nz X3N1Ym1pdF9zeW5jb2JqKGNvbnRleHQsIGZsYWdzLAorCQkJCQlpYnNfcmVxdWVzdCwgTlVMTCwK KwkJCQkJbnVtYmVyX29mX3JlcXVlc3RzKTsKK30KKworCiAvKioKICAqIENhbGN1bGF0ZSBhYnNv bHV0ZSB0aW1lb3V0LgogICoKQEAgLTU5NiwzICs2NjAsNDEgQEAgaW50IGFtZGdwdV9jc19kZXN0 cm95X3NlbWFwaG9yZShhbWRncHVfc2VtYXBob3JlX2hhbmRsZSBzZW0pCiB7CiAJcmV0dXJuIGFt ZGdwdV9jc191bnJlZmVyZW5jZV9zZW0oc2VtKTsKIH0KKworaW50IGFtZGdwdV9jc19jcmVhdGVf c3luY29iaihhbWRncHVfZGV2aWNlX2hhbmRsZSBkZXYsCisJCQkgICAgIHVpbnQzMl90ICpoYW5k bGUpCit7CisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBk cm1TeW5jb2JqQ3JlYXRlKGRldi0+ZmQsIDAsIGhhbmRsZSk7Cit9CisKK2ludCBhbWRncHVfY3Nf ZGVzdHJveV9zeW5jb2JqKGFtZGdwdV9kZXZpY2VfaGFuZGxlIGRldiwKKwkJCSAgICAgIHVpbnQz Ml90IGhhbmRsZSkKK3sKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJ cmV0dXJuIGRybVN5bmNvYmpEZXN0cm95KGRldi0+ZmQsIGhhbmRsZSk7Cit9CisKK2ludCBhbWRn cHVfY3NfZXhwb3J0X3N5bmNvYmooYW1kZ3B1X2RldmljZV9oYW5kbGUgZGV2LAorCQkJICAgICB1 aW50MzJfdCBoYW5kbGUsCisJCQkgICAgIGludCAqc2hhcmVkX2ZkKQoreworCWlmIChOVUxMID09 IGRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZHJtU3luY29iakhhbmRsZVRvRkQo ZGV2LT5mZCwgaGFuZGxlLCBzaGFyZWRfZmQpOworfQorCitpbnQgYW1kZ3B1X2NzX2ltcG9ydF9z eW5jb2JqKGFtZGdwdV9kZXZpY2VfaGFuZGxlIGRldiwKKwkJCSAgICAgaW50IHNoYXJlZF9mZCwK KwkJCSAgICAgdWludDMyX3QgKmhhbmRsZSkKK3sKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVy biAtRUlOVkFMOworCisJcmV0dXJuIGRybVN5bmNvYmpGRFRvSGFuZGxlKGRldi0+ZmQsIHNoYXJl ZF9mZCwgaGFuZGxlKTsKK30KLS0gCjIuOS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK