From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Ekstrand Subject: [PATCH 4/7] drm/syncobj: add sync obj wait interface. (v8) Date: Tue, 15 Aug 2017 21:13:52 -0700 Message-ID: <1502856835-9433-5-git-send-email-jason.ekstrand@intel.com> References: <1502856835-9433-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 5B2E36E05C for ; Wed, 16 Aug 2017 04:14:11 +0000 (UTC) Received: by mail-pf0-x242.google.com with SMTP id t86so274097pfe.1 for ; Tue, 15 Aug 2017 21:14:11 -0700 (PDT) In-Reply-To: <1502856835-9433-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 bmV0PgpBY2tlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaCB8ICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vZHJtX2lvY3RsLmMgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2RybV9zeW5jb2Jq LmMgIHwgMTQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNs dWRlL3VhcGkvZHJtL2RybS5oICAgICAgICAgfCAgMTIgKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAx NTggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJu YWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAppbmRleCA0ZTkwNmI4Li41MzRl NWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCkBAIC0xNjcsMyArMTY3LDUgQEAgaW50IGRybV9z eW5jb2JqX2hhbmRsZV90b19mZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIGludCBkcm1fc3lu Y29ial9mZF90b19oYW5kbGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKIAkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7CitpbnQgZHJtX3N5bmNv Ympfd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCmluZGV4IDhiZmVi MzIuLjJhYjBmZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCkBAIC02NTcsNiArNjU3LDggQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBkcm1faW9jdGxzW10gPSB7CiAJCSAgICAgIERS TV9VTkxPQ0tFRHxEUk1fUkVOREVSX0FMTE9XKSwKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9T WU5DT0JKX0ZEX1RPX0hBTkRMRSwgZHJtX3N5bmNvYmpfZmRfdG9faGFuZGxlX2lvY3RsLAogCQkg ICAgICBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRihEUk1f SU9DVExfU1lOQ09CSl9XQUlULCBkcm1fc3luY29ial93YWl0X2lvY3RsLAorCQkgICAgICBEUk1f VU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCiB9OwogCiAjZGVmaW5lIERSTV9DT1JFX0lPQ1RM X0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9zeW5jb2JqLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwppbmRleCBl ZWEzOGQ4Li40ZTg1NjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmou YworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYwpAQCAtMSw1ICsxLDcgQEAKIC8q CiAgKiBDb3B5cmlnaHQgMjAxNyBSZWQgSGF0CisgKiBQYXJ0cyBwb3J0ZWQgZnJvbSBhbWRncHUg KGZlbmNlIHdhaXQgY29kZSkuCisgKiBDb3B5cmlnaHQgMjAxNiBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuCiAgKgogICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCkBA IC0zMSw2ICszMyw5IEBACiAgKiB0aGF0IGNvbnRhaW4gYW4gb3B0aW9uYWwgZmVuY2UuIFRoZSBm ZW5jZSBjYW4gYmUgdXBkYXRlZCB3aXRoIGEgbmV3CiAgKiBmZW5jZSwgb3IgYmUgTlVMTC4KICAq CisgKiBzeW5jb2JqJ3MgY2FuIGJlIHdhaXRlZCB1cG9uLCB3aGVyZSBpdCB3aWxsIHdhaXQgZm9y IHRoZSB1bmRlcmx5aW5nCisgKiBmZW5jZS4KKyAqCiAgKiBzeW5jb2JqJ3MgY2FuIGJlIGV4cG9y dCB0byBmZCdzIGFuZCBiYWNrLCB0aGVzZSBmZCdzIGFyZSBvcGFxdWUgYW5kCiAgKiBoYXZlIG5v IG90aGVyIHVzZSBjYXNlLCBleGNlcHQgcGFzc2luZyB0aGUgc3luY29iaiBiZXR3ZWVuIHByb2Nl c3Nlcy4KICAqCkBAIC00NDcsMyArNDUyLDE0MCBAQCBkcm1fc3luY29ial9mZF90b19oYW5kbGVf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlyZXR1cm4gZHJtX3N5 bmNvYmpfZmRfdG9faGFuZGxlKGZpbGVfcHJpdmF0ZSwgYXJncy0+ZmQsCiAJCQkJCSZhcmdzLT5o YW5kbGUpOwogfQorCisvKioKKyAqIGRybV90aW1lb3V0X2Fic190b19qaWZmaWVzIC0gY2FsY3Vs YXRlIGppZmZpZXMgdGltZW91dCBmcm9tIGFic29sdXRlIHZhbHVlCisgKgorICogQHRpbWVvdXRf bnNlYzogdGltZW91dCBuc2VjIGNvbXBvbmVudCBpbiBucywgMCBmb3IgcG9sbAorICoKKyAqIENh bGN1bGF0ZSB0aGUgdGltZW91dCBpbiBqaWZmaWVzIGZyb20gYW4gYWJzb2x1dGUgdGltZSBpbiBz ZWMvbnNlYy4KKyAqLworc3RhdGljIHNpZ25lZCBsb25nIGRybV90aW1lb3V0X2Fic190b19qaWZm aWVzKGludDY0X3QgdGltZW91dF9uc2VjKQoreworCWt0aW1lX3QgYWJzX3RpbWVvdXQsIG5vdzsK Kwl1NjQgdGltZW91dF9ucywgdGltZW91dF9qaWZmaWVzNjQ7CisKKwkvKiBtYWtlIDAgdGltZW91 dCBtZWFucyBwb2xsIC0gYWJzb2x1dGUgMCBkb2Vzbid0IHNlZW0gdmFsaWQgKi8KKwlpZiAodGlt ZW91dF9uc2VjID09IDApCisJCXJldHVybiAwOworCisJYWJzX3RpbWVvdXQgPSBuc190b19rdGlt ZSh0aW1lb3V0X25zZWMpOworCW5vdyA9IGt0aW1lX2dldCgpOworCisJaWYgKCFrdGltZV9hZnRl cihhYnNfdGltZW91dCwgbm93KSkKKwkJcmV0dXJuIDA7CisKKwl0aW1lb3V0X25zID0ga3RpbWVf dG9fbnMoa3RpbWVfc3ViKGFic190aW1lb3V0LCBub3cpKTsKKworCXRpbWVvdXRfamlmZmllczY0 ID0gbnNlY3NfdG9famlmZmllczY0KHRpbWVvdXRfbnMpOworCS8qICBjbGFtcCB0aW1lb3V0IHRv IGF2b2lkIGluZmluaXRlIHRpbWVvdXQgKi8KKwlpZiAodGltZW91dF9qaWZmaWVzNjQgPj0gTUFY X1NDSEVEVUxFX1RJTUVPVVQgLSAxKQorCQlyZXR1cm4gTUFYX1NDSEVEVUxFX1RJTUVPVVQgLSAx OworCisJcmV0dXJuIHRpbWVvdXRfamlmZmllczY0ICsgMTsKK30KKworc3RhdGljIGludCBkcm1f c3luY29ial93YWl0X2ZlbmNlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlLAorCQkJCSAgIHN0cnVjdCBkcm1fc3luY29ial93YWl0 ICp3YWl0LAorCQkJCSAgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXMpCit7CisJc2lnbmVkIGxv bmcgdGltZW91dCA9IGRybV90aW1lb3V0X2Fic190b19qaWZmaWVzKHdhaXQtPnRpbWVvdXRfbnNl Yyk7CisJc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwl1aW50MzJfdCBmaXJzdCA9IH4wOworCisJaWYg KHdhaXQtPmZsYWdzICYgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTCkgeworCQl1aW50 MzJfdCBpOworCQlmb3IgKGkgPSAwOyBpIDwgd2FpdC0+Y291bnRfaGFuZGxlczsgaSsrKSB7CisJ CQlyZXQgPSBkbWFfZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlc1tpXSwgdHJ1ZSwgdGltZW91dCk7 CisKKwkJCS8qIFZhcmlvdXMgZG1hX2ZlbmNlIHdhaXQgY2FsbGJhY2tzIHdpbGwgcmV0dXJuCisJ CQkgKiBFTk9FTlQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmVuY2UgaGFzIGFscmVhZHkKKwkJCSAq IGJlZW4gc2lnbmFsZWQuICBXZSBuZWVkIHRvIHNhbml0aXplIHRoaXMgdG8gMCBzbworCQkJICog d2UgZG9uJ3QgcmV0dXJuIGVhcmx5IGFuZCB0aGUgY2xpZW50IGRvZXNuJ3Qgc2VlCisJCQkgKiBh biB1bmV4cGVjdGVkIGVycm9yLgorCQkJICovCisJCQlpZiAocmV0ID09IC1FTk9FTlQpCisJCQkJ cmV0ID0gMDsKKworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmIChyZXQg PT0gMCkKKwkJCQlicmVhazsKKwkJCXRpbWVvdXQgPSByZXQ7CisJCX0KKwkJZmlyc3QgPSAwOwor CX0gZWxzZSB7CisJCXJldCA9IGRtYV9mZW5jZV93YWl0X2FueV90aW1lb3V0KGZlbmNlcywKKwkJ CQkJCSB3YWl0LT5jb3VudF9oYW5kbGVzLAorCQkJCQkJIHRydWUsIHRpbWVvdXQsCisJCQkJCQkg JmZpcnN0KTsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdhaXQtPmZp cnN0X3NpZ25hbGVkID0gZmlyc3Q7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVUSU1FOwor CXJldHVybiAwOworfQorCitpbnQKK2RybV9zeW5jb2JqX3dhaXRfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2YXRlKQoreworCXN0cnVjdCBkcm1fc3luY29ial93YWl0ICphcmdzID0gZGF0YTsKKwl1aW50 MzJfdCAqaGFuZGxlczsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2VzOworCWludCByZXQgPSAw OworCXVpbnQzMl90IGk7CisKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklW RVJfU1lOQ09CSikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGFyZ3MtPmZsYWdzICE9IDAg JiYgYXJncy0+ZmxhZ3MgIT0gRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0FMTCkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJncy0+Y291bnRfaGFuZGxlcyA9PSAwKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCS8qIEdldCB0aGUgaGFuZGxlcyBmcm9tIHVzZXJzcGFjZSAqLworCWhhbmRs ZXMgPSBrbWFsbG9jX2FycmF5KGFyZ3MtPmNvdW50X2hhbmRsZXMsIHNpemVvZih1aW50MzJfdCks CisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGhhbmRsZXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoaGFuZGxlcywKKwkJCSAgIHU2NF90b191c2VyX3B0 cihhcmdzLT5oYW5kbGVzKSwKKwkJCSAgIHNpemVvZih1aW50MzJfdCkgKiBhcmdzLT5jb3VudF9o YW5kbGVzKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVycl9mcmVlX2hhbmRsZXM7CisJ fQorCisJZmVuY2VzID0ga2NhbGxvYyhhcmdzLT5jb3VudF9oYW5kbGVzLAorCQkJIHNpemVvZihz dHJ1Y3QgZG1hX2ZlbmNlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlcykgeworCQlyZXQg PSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2hhbmRsZXM7CisJfQorCisJZm9yIChpID0gMDsg aSA8IGFyZ3MtPmNvdW50X2hhbmRsZXM7IGkrKykgeworCQlyZXQgPSBkcm1fc3luY29ial9maW5k X2ZlbmNlKGZpbGVfcHJpdmF0ZSwgaGFuZGxlc1tpXSwKKwkJCQkJICAgICAmZmVuY2VzW2ldKTsK KwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2ZyZWVfZmVuY2VfYXJyYXk7CisJfQorCisJcmV0ID0g ZHJtX3N5bmNvYmpfd2FpdF9mZW5jZXMoZGV2LCBmaWxlX3ByaXZhdGUsCisJCQkJICAgICAgYXJn cywgZmVuY2VzKTsKKworZXJyX2ZyZWVfZmVuY2VfYXJyYXk6CisJZm9yIChpID0gMDsgaSA8IGFy Z3MtPmNvdW50X2hhbmRsZXM7IGkrKykKKwkJZG1hX2ZlbmNlX3B1dChmZW5jZXNbaV0pOworCWtm cmVlKGZlbmNlcyk7CitlcnJfZnJlZV9oYW5kbGVzOgorCWtmcmVlKGhhbmRsZXMpOworCisJcmV0 dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmggYi9pbmNsdWRl L3VhcGkvZHJtL2RybS5oCmluZGV4IDEwMTU5M2EuLjA3NTdjMWEgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvdWFwaS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm0uaApAQCAtNzE4LDYg KzcxOCwxNyBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlIHsKIAlfX3UzMiBwYWQ7CiB9Owog CisjZGVmaW5lIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9BTEwgKDEgPDwgMCkKK3N0cnVj dCBkcm1fc3luY29ial93YWl0IHsKKwlfX3U2NCBoYW5kbGVzOworCS8qIGFic29sdXRlIHRpbWVv dXQgKi8KKwlfX3M2NCB0aW1lb3V0X25zZWM7CisJX191MzIgY291bnRfaGFuZGxlczsKKwlfX3Uz MiBmbGFnczsKKwlfX3UzMiBmaXJzdF9zaWduYWxlZDsgLyogb25seSB2YWxpZCB3aGVuIG5vdCB3 YWl0aW5nIGFsbCAqLworCV9fdTMyIHBhZDsKK307CisKICNpZiBkZWZpbmVkKF9fY3BsdXNwbHVz KQogfQogI2VuZGlmCkBAIC04NDAsNiArODUxLDcgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIERS TV9JT0NUTF9TWU5DT0JKX0RFU1RST1kJRFJNX0lPV1IoMHhDMCwgc3RydWN0IGRybV9zeW5jb2Jq X2Rlc3Ryb3kpCiAjZGVmaW5lIERSTV9JT0NUTF9TWU5DT0JKX0hBTkRMRV9UT19GRAlEUk1fSU9X UigweEMxLCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlKQogI2RlZmluZSBEUk1fSU9DVExfU1lO Q09CSl9GRF9UT19IQU5ETEUJRFJNX0lPV1IoMHhDMiwgc3RydWN0IGRybV9zeW5jb2JqX2hhbmRs ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfV0FJVAkJRFJNX0lPV1IoMHhDMywgc3RydWN0 IGRybV9zeW5jb2JqX3dhaXQpCiAKIC8qKgogICogRGV2aWNlIHNwZWNpZmljIGlvY3RscyBzaG91 bGQgb25seSBiZSBpbiB0aGVpciByZXNwZWN0aXZlIGhlYWRlcnMKLS0gCjIuNS4wLjQwMC5nZmY4 NmZhZgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==