From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Ekstrand Subject: [PATCH 5/9] drm/syncobj: add sync obj wait interface. (v8) Date: Tue, 8 Aug 2017 15:46:05 -0700 Message-ID: <1502232369-19753-6-git-send-email-jason.ekstrand@intel.com> References: <1502232369-19753-1-git-send-email-jason.ekstrand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf0-x242.google.com (mail-pf0-x242.google.com [IPv6:2607:f8b0:400e:c00::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9C0976E25B for ; Tue, 8 Aug 2017 22:46:37 +0000 (UTC) Received: by mail-pf0-x242.google.com with SMTP id t83so4363119pfj.3 for ; Tue, 08 Aug 2017 15:46:37 -0700 (PDT) In-Reply-To: <1502232369-19753-1-git-send-email-jason.ekstrand@intel.com> 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 Cc: Dave Airlie List-Id: dri-devel@lists.freedesktop.org RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgaW50ZXJmYWNlIHdp bGwgYWxsb3cgc3luYyBvYmplY3QgdG8gYmUgdXNlZCB0byBiYWNrClZ1bGthbiBmZW5jZXMuIFRo aXMgQVBJIGlzIHByZXR0eSBtdWNoIHRoZSB2dWxrYW4gZmVuY2Ugd2FpdGluZwpBUEksIGFuZCBJ J3ZlIHBvcnRlZCB0aGUgY29kZSBmcm9tIGFtZGdwdS4KCnYyOiBhY2NlcHQgcmVsYXRpdmUgdGlt ZW91dCwgcGFzcyByZW1haW5pbmcgdGltZSBiYWNrCnRvIHVzZXJzcGFjZS4KdjM6IHJldHVybiB0 byBhYnNvbHV0ZSB0aW1lb3V0cy4KdjQ6IGFic29sdXRlIHplcm8gPSBwb2xsLAogICAgcmV3cml0 ZSBhbnkvYWxsIGNvZGUgdG8gaGF2ZSBzYW1lIG9wZXJhdGlvbiBmb3IgYXJyYXlzCiAgICByZXR1 cm4gLUVJTlZBTCBmb3IgMCBmZW5jZXMuCnY0LjE6IGZpeHVwIGZlbmNlcyBhbGxvY2F0aW9uIGNo ZWNrLCB1c2UgdTY0X3RvX3VzZXJfcHRyCnY1OiBtb3ZlIHRvIHNlYy9uc2VjLCBhbmQgdXNlIHRp bWVzcGVjNjQgZm9yIGNhbGNzLgp2NjogdXNlIC1FVElNRSBhbmQgZHJvcCB0aGUgb3V0IHN0YXR1 cyBmbGFnLiAoLUVUSU1FCmlzIHN1Z2dlc3RlZCBieSBpY2tsZSwgSSBjYW4gZmVlbCBhIHNoZWQg cGFpbnRpbmcpCnY3OiB0YWxrZWQgdG8gRGFuaWVsL0FybmQsIHVzZSBrdGltZSBhbmQgbnMgZXZl cnl3aGVyZS4Kdjg6IGJlIG1vcmUgY2FyZWZ1bCBpbiB0aGUgdGltZW91dCBjYWxjdWxhdGlvbnMK ICAgIHVzZSB1aW50MzJfdCBmb3IgY291bnRlciB2YXJpYWJsZXMgc28gd2UgZG9uJ3Qgb3ZlcmZs b3cKICAgIGdyYWNpb3VzbHkgaGFuZGxlIC1FTk9JTlQgYmVpbmcgcmV0dXJuZWQgZnJvbSBkbWFf ZmVuY2Vfd2FpdF90aW1lb3V0CgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFpcmxpZSA8YWlybGllZEBy ZWRoYXQuY29tPgpSZXZpZXdlZC1ieTogSmFzb24gRWtzdHJhbmQgPGphc29uQGpsZWtzdHJhbmQu bmV0PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCB8ICAgMiArCiBkcml2ZXJz L2dwdS9kcm0vZHJtX2lvY3RsLmMgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2RybV9zeW5j b2JqLmMgIHwgMTQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBp bmNsdWRlL3VhcGkvZHJtL2RybS5oICAgICAgICAgfCAgMTIgKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCAxNTggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50 ZXJuYWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAppbmRleCAwNjhiNjg1Li5m M2M0ZTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCkBAIC0xNjMsMyArMTYzLDUgQEAgaW50IGRy bV9zeW5jb2JqX2hhbmRsZV90b19mZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAogCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIGludCBkcm1f c3luY29ial9mZF90b19oYW5kbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKIAkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7CitpbnQgZHJtX3N5 bmNvYmpfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJ ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCmluZGV4IGY3 ZjE1MGUuLjMxMGYzZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jdGwuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKQEAgLTY1Nyw2ICs2NTcsOCBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGRybV9pb2N0bHNbXSA9IHsKIAkJICAgICAg RFJNX1VOTE9DS0VEfERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RM X1NZTkNPQkpfRkRfVE9fSEFORExFLCBkcm1fc3luY29ial9mZF90b19oYW5kbGVfaW9jdGwsCiAJ CSAgICAgIERSTV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGKERS TV9JT0NUTF9TWU5DT0JKX1dBSVQsIGRybV9zeW5jb2JqX3dhaXRfaW9jdGwsCisJCSAgICAgIERS TV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKIH07CiAKICNkZWZpbmUgRFJNX0NPUkVfSU9D VExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX3N5bmNvYmouYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCmluZGV4 IDdmZGY3ZTguLjJmMTRlMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29i ai5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCkBAIC0xLDUgKzEsNyBAQAog LyoKICAqIENvcHlyaWdodCAyMDE3IFJlZCBIYXQKKyAqIFBhcnRzIHBvcnRlZCBmcm9tIGFtZGdw dSAoZmVuY2Ugd2FpdCBjb2RlKS4KKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERl dmljZXMsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK QEAgLTMxLDYgKzMzLDkgQEAKICAqIHRoYXQgY29udGFpbiBhbiBvcHRpb25hbCBmZW5jZS4gVGhl IGZlbmNlIGNhbiBiZSB1cGRhdGVkIHdpdGggYSBuZXcKICAqIGZlbmNlLCBvciBiZSBOVUxMLgog ICoKKyAqIHN5bmNvYmoncyBjYW4gYmUgd2FpdGVkIHVwb24sIHdoZXJlIGl0IHdpbGwgd2FpdCBm b3IgdGhlIHVuZGVybHlpbmcKKyAqIGZlbmNlLgorICoKICAqIHN5bmNvYmoncyBjYW4gYmUgZXhw b3J0IHRvIGZkJ3MgYW5kIGJhY2ssIHRoZXNlIGZkJ3MgYXJlIG9wYXF1ZSBhbmQKICAqIGhhdmUg bm8gb3RoZXIgdXNlIGNhc2UsIGV4Y2VwdCBwYXNzaW5nIHRoZSBzeW5jb2JqIGJldHdlZW4gcHJv Y2Vzc2VzLgogICoKQEAgLTQ3MSwzICs0NzYsMTQwIEBAIGRybV9zeW5jb2JqX2ZkX3RvX2hhbmRs ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiBkcm1f c3luY29ial9mZF90b19oYW5kbGUoZmlsZV9wcml2YXRlLCBhcmdzLT5mZCwKIAkJCQkJJmFyZ3Mt PmhhbmRsZSk7CiB9CisKKy8qKgorICogZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXMgLSBjYWxj dWxhdGUgamlmZmllcyB0aW1lb3V0IGZyb20gYWJzb2x1dGUgdmFsdWUKKyAqCisgKiBAdGltZW91 dF9uc2VjOiB0aW1lb3V0IG5zZWMgY29tcG9uZW50IGluIG5zLCAwIGZvciBwb2xsCisgKgorICog Q2FsY3VsYXRlIHRoZSB0aW1lb3V0IGluIGppZmZpZXMgZnJvbSBhbiBhYnNvbHV0ZSB0aW1lIGlu IHNlYy9uc2VjLgorICovCitzdGF0aWMgc2lnbmVkIGxvbmcgZHJtX3RpbWVvdXRfYWJzX3RvX2pp ZmZpZXMoaW50NjRfdCB0aW1lb3V0X25zZWMpCit7CisJa3RpbWVfdCBhYnNfdGltZW91dCwgbm93 OworCXU2NCB0aW1lb3V0X25zLCB0aW1lb3V0X2ppZmZpZXM2NDsKKworCS8qIG1ha2UgMCB0aW1l b3V0IG1lYW5zIHBvbGwgLSBhYnNvbHV0ZSAwIGRvZXNuJ3Qgc2VlbSB2YWxpZCAqLworCWlmICh0 aW1lb3V0X25zZWMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlhYnNfdGltZW91dCA9IG5zX3RvX2t0 aW1lKHRpbWVvdXRfbnNlYyk7CisJbm93ID0ga3RpbWVfZ2V0KCk7CisKKwlpZiAoIWt0aW1lX2Fm dGVyKGFic190aW1lb3V0LCBub3cpKQorCQlyZXR1cm4gMDsKKworCXRpbWVvdXRfbnMgPSBrdGlt ZV90b19ucyhrdGltZV9zdWIoYWJzX3RpbWVvdXQsIG5vdykpOworCisJdGltZW91dF9qaWZmaWVz NjQgPSBuc2Vjc190b19qaWZmaWVzNjQodGltZW91dF9ucyk7CisJLyogIGNsYW1wIHRpbWVvdXQg dG8gYXZvaWQgaW5maW5pdGUgdGltZW91dCAqLworCWlmICh0aW1lb3V0X2ppZmZpZXM2NCA+PSBN QVhfU0NIRURVTEVfVElNRU9VVCAtIDEpCisJCXJldHVybiBNQVhfU0NIRURVTEVfVElNRU9VVCAt IDE7CisKKwlyZXR1cm4gdGltZW91dF9qaWZmaWVzNjQgKyAxOworfQorCitzdGF0aWMgaW50IGRy bV9zeW5jb2JqX3dhaXRfZmVuY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCisJCQkJICAgc3RydWN0IGRybV9zeW5jb2JqX3dh aXQgKndhaXQsCisJCQkJICAgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlcykKK3sKKwlzaWduZWQg bG9uZyB0aW1lb3V0ID0gZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXMod2FpdC0+dGltZW91dF9u c2VjKTsKKwlzaWduZWQgbG9uZyByZXQgPSAwOworCXVpbnQzMl90IGZpcnN0ID0gfjA7CisKKwlp ZiAod2FpdC0+ZmxhZ3MgJiBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMKSB7CisJCXVp bnQzMl90IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3YWl0LT5jb3VudF9oYW5kbGVzOyBpKyspIHsK KwkJCXJldCA9IGRtYV9mZW5jZV93YWl0X3RpbWVvdXQoZmVuY2VzW2ldLCB0cnVlLCB0aW1lb3V0 KTsKKworCQkJLyogVmFyaW91cyBkbWFfZmVuY2Ugd2FpdCBjYWxsYmFja3Mgd2lsbCByZXR1cm4K KwkJCSAqIEVOT0VOVCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmZW5jZSBoYXMgYWxyZWFkeQorCQkJ ICogYmVlbiBzaWduYWxlZC4gIFdlIG5lZWQgdG8gc2FuaXRpemUgdGhpcyB0byAwIHNvCisJCQkg KiB3ZSBkb24ndCByZXR1cm4gZWFybHkgYW5kIHRoZSBjbGllbnQgZG9lc24ndCBzZWUKKwkJCSAq IGFuIHVuZXhwZWN0ZWQgZXJyb3IuCisJCQkgKi8KKwkJCWlmIChyZXQgPT0gLUVOT0VOVCkKKwkJ CQlyZXQgPSAwOworCisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKHJl dCA9PSAwKQorCQkJCWJyZWFrOworCQkJdGltZW91dCA9IHJldDsKKwkJfQorCQlmaXJzdCA9IDA7 CisJfSBlbHNlIHsKKwkJcmV0ID0gZG1hX2ZlbmNlX3dhaXRfYW55X3RpbWVvdXQoZmVuY2VzLAor CQkJCQkJIHdhaXQtPmNvdW50X2hhbmRsZXMsCisJCQkJCQkgdHJ1ZSwgdGltZW91dCwKKwkJCQkJ CSAmZmlyc3QpOworCX0KKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJd2FpdC0+ Zmlyc3Rfc2lnbmFsZWQgPSBmaXJzdDsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiAtRVRJTUU7 CisJcmV0dXJuIDA7Cit9CisKK2ludAorZHJtX3N5bmNvYmpfd2FpdF9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXZhdGUpCit7CisJc3RydWN0IGRybV9zeW5jb2JqX3dhaXQgKmFyZ3MgPSBkYXRhOworCXVp bnQzMl90ICpoYW5kbGVzOworCXN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXM7CisJaW50IHJldCA9 IDA7CisJdWludDMyX3QgaTsKKworCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERS SVZFUl9TWU5DT0JKKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYXJncy0+ZmxhZ3MgIT0g MCAmJiBhcmdzLT5mbGFncyAhPSBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5jb3VudF9oYW5kbGVzID09IDApCisJCXJldHVy biAtRUlOVkFMOworCisJLyogR2V0IHRoZSBoYW5kbGVzIGZyb20gdXNlcnNwYWNlICovCisJaGFu ZGxlcyA9IGttYWxsb2NfYXJyYXkoYXJncy0+Y291bnRfaGFuZGxlcywgc2l6ZW9mKHVpbnQzMl90 KSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoaGFuZGxlcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVO T01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihoYW5kbGVzLAorCQkJICAgdTY0X3RvX3VzZXJf cHRyKGFyZ3MtPmhhbmRsZXMpLAorCQkJICAgc2l6ZW9mKHVpbnQzMl90KSAqIGFyZ3MtPmNvdW50 X2hhbmRsZXMpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsK Kwl9CisKKwlmZW5jZXMgPSBrY2FsbG9jKGFyZ3MtPmNvdW50X2hhbmRsZXMsCisJCQkgc2l6ZW9m KHN0cnVjdCBkbWFfZmVuY2UgKiksIEdGUF9LRVJORUwpOworCWlmICghZmVuY2VzKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfaGFuZGxlczsKKwl9CisKKwlmb3IgKGkgPSAw OyBpIDwgYXJncy0+Y291bnRfaGFuZGxlczsgaSsrKSB7CisJCXJldCA9IGRybV9zeW5jb2JqX2Zp bmRfZmVuY2UoZmlsZV9wcml2YXRlLCBoYW5kbGVzW2ldLAorCQkJCQkgICAgICZmZW5jZXNbaV0p OworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZnJlZV9mZW5jZV9hcnJheTsKKwl9CisKKwlyZXQg PSBkcm1fc3luY29ial93YWl0X2ZlbmNlcyhkZXYsIGZpbGVfcHJpdmF0ZSwKKwkJCQkgICAgICBh cmdzLCBmZW5jZXMpOworCitlcnJfZnJlZV9mZW5jZV9hcnJheToKKwlmb3IgKGkgPSAwOyBpIDwg YXJncy0+Y291bnRfaGFuZGxlczsgaSsrKQorCQlkbWFfZmVuY2VfcHV0KGZlbmNlc1tpXSk7CisJ a2ZyZWUoZmVuY2VzKTsKK2Vycl9mcmVlX2hhbmRsZXM6CisJa2ZyZWUoaGFuZGxlcyk7CisKKwly ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaCBiL2luY2x1 ZGUvdWFwaS9kcm0vZHJtLmgKaW5kZXggMTAxNTkzYS4uMDc1N2MxYSAxMDA2NDQKLS0tIGEvaW5j bHVkZS91YXBpL2RybS9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCkBAIC03MTgs NiArNzE4LDE3IEBAIHN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUgewogCV9fdTMyIHBhZDsKIH07 CiAKKyNkZWZpbmUgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTCAoMSA8PCAwKQorc3Ry dWN0IGRybV9zeW5jb2JqX3dhaXQgeworCV9fdTY0IGhhbmRsZXM7CisJLyogYWJzb2x1dGUgdGlt ZW91dCAqLworCV9fczY0IHRpbWVvdXRfbnNlYzsKKwlfX3UzMiBjb3VudF9oYW5kbGVzOworCV9f dTMyIGZsYWdzOworCV9fdTMyIGZpcnN0X3NpZ25hbGVkOyAvKiBvbmx5IHZhbGlkIHdoZW4gbm90 IHdhaXRpbmcgYWxsICovCisJX191MzIgcGFkOworfTsKKwogI2lmIGRlZmluZWQoX19jcGx1c3Bs dXMpCiB9CiAjZW5kaWYKQEAgLTg0MCw2ICs4NTEsNyBAQCBleHRlcm4gIkMiIHsKICNkZWZpbmUg RFJNX0lPQ1RMX1NZTkNPQkpfREVTVFJPWQlEUk1fSU9XUigweEMwLCBzdHJ1Y3QgZHJtX3N5bmNv YmpfZGVzdHJveSkKICNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfSEFORExFX1RPX0ZECURSTV9J T1dSKDB4QzEsIHN0cnVjdCBkcm1fc3luY29ial9oYW5kbGUpCiAjZGVmaW5lIERSTV9JT0NUTF9T WU5DT0JKX0ZEX1RPX0hBTkRMRQlEUk1fSU9XUigweEMyLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFu ZGxlKQorI2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9XQUlUCQlEUk1fSU9XUigweEMzLCBzdHJ1 Y3QgZHJtX3N5bmNvYmpfd2FpdCkKIAogLyoqCiAgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNo b3VsZCBvbmx5IGJlIGluIHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwotLSAKMi41LjAuNDAwLmdm Zjg2ZmFmCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK