From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Foss Subject: [PATCH i-g-t v10 01/21] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Tue, 6 Dec 2016 21:51:53 -0500 Message-ID: <20161207025213.11669-2-robert.foss@collabora.com> References: <20161207025213.11669-1-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 68E776E437 for ; Wed, 7 Dec 2016 02:52:44 +0000 (UTC) In-Reply-To: <20161207025213.11669-1-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, Gustavo Padovan , Daniel Stone , Daniel Vetter , Marius Vlad , Eric Engestrom , Chris Wilson , Tomeu Vizoso Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org QmFzZSBmdW5jdGlvbnMgdG8gaGVscCB0ZXN0aW5nIHRoZSBTeW5jIEZpbGUgRnJhbWV3b3JrIChl eHBsaWNpdCBmZW5jaW5nCm1lY2hhbmlzbSBwb3J0ZWQgZnJvbSBBbmRyb2lkKS4KVGhlc2UgZnVu Y3Rpb25zIGFsbG93IHlvdSB0byBjcmVhdGUsIHVzZSBhbmQgZGVzdHJveSB0aW1lbGluZXMgYW5k IGZlbmNlcy4KClNpZ25lZC1vZmYtYnk6IFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJv cmEuY29tPgpTaWduZWQtb2ZmLWJ5OiBHdXN0YXZvIFBhZG92YW4gPGd1c3Rhdm8ucGFkb3ZhbkBj b2xsYWJvcmEuY28udWs+ClJldmlld2VkLWJ5OiBFcmljIEVuZ2VzdHJvbSA8ZXJpY0Blbmdlc3Ry b20uY2g+ClJldmlld2VkLWJ5OiBUb21ldSBWaXpvc28gPHRvbWV1LnZpem9zb0Bjb2xsYWJvcmEu Y29tPgotLS0KIGxpYi9NYWtlZmlsZS5zb3VyY2VzIHwgICAyICsKIGxpYi9zd19zeW5jLmMgICAg ICAgIHwgMTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbGliL3N3X3N5bmMuaCAgICAgICAgfCAgNDQgKysrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDI0MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zd19zeW5jLmgKCmRpZmYgLS1naXQgYS9saWIvTWFr ZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGU4ZTI3N2JkLi43YWFm NDJmOCAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxl LnNvdXJjZXMKQEAgLTYzLDYgKzYzLDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJcmVuZGVy Y29weV9nZW44LmMJXAogCXJlbmRlcmNvcHlfZ2VuOS5jCVwKIAlyZW5kZXJjb3B5LmgJCVwKKwlz d19zeW5jLmMJCVwKKwlzd19zeW5jLmgJCVwKIAlpbnRlbF9yZWdfbWFwLmMJCVwKIAlpbnRlbF9p b3NmLmMJCVwKIAlpZ3Rfa21zLmMJCVwKZGlmZiAtLWdpdCBhL2xpYi9zd19zeW5jLmMgYi9saWIv c3dfc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5hMjE2OGY3OAot LS0gL2Rldi9udWxsCisrKyBiL2xpYi9zd19zeW5jLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBG b3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgorICovCisKKyNpZm5kZWYgQU5EUk9JRAor I2RlZmluZSBfR05VX1NPVVJDRQorI2Vsc2UKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wu aD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4KKyNp bmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2luY2x1ZGUgInN3X3N5bmMuaCIKKyNpbmNsdWRlICJk cm10ZXN0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKworI2lmbmRlZiBTV19TWU5D X0lPQ19JTkMKK3N0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIHsKKwlfX3UzMgl2YWx1 ZTsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCWZlbmNlOworfTsKKworI2RlZmluZSBMT0NBTF9T V19TWU5DX0lPQ19NQUdJQwkJJ1cnCisjZGVmaW5lIExPQ0FMX1NXX1NZTkNfSU9DX0NSRUFURV9G RU5DRQlfSU9XUihMT0NBTF9TV19TWU5DX0lPQ19NQUdJQywgMCxcCisJCQkJCQkgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSkKKyNkZWZpbmUg TE9DQUxfU1dfU1lOQ19JT0NfSU5DCQkJX0lPVyhMT0NBTF9TV19TWU5DX0lPQ19NQUdJQywgMSwg X191MzIpCisjZW5kaWYKKworLyoKKyAqIEtlZXAgdGhlIHBhdGhzIGZvciBzd19zeW5jIGluIG9u ZSBwbGFjZSB1bnRpbAorICogaW4gdGhlIGtlcm5lbCBBUEkuCisgKi8KKyNkZWZpbmUgREVWRlNf U1dfU1lOQyAgICIvZGV2L3N3X3N5bmMiCisjZGVmaW5lIERFQlVHRlNfU1dfU1lOQyAiL3N5cy9r ZXJuZWwvZGVidWcvc3luYy9zd19zeW5jIgorCisKK3N0YXRpYyBib29sIHN3X3N5bmNfZmRfaXNf dmFsaWQoaW50IGZkKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4g MDsKKworCXN0YXR1cyA9IGZjbnRsKGZkLCBGX0dFVEZELCAwKTsKKwlyZXR1cm4gc3RhdHVzID49 IDA7Cit9CisKK2ludCBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSh2b2lkKQoreworCWludCBmZCA9 IG9wZW4oREVWRlNfU1dfU1lOQywgT19SRFdSKTsKKworCWlmIChmZCA8IDApCisJCWZkID0gb3Bl bihERUJVR0ZTX1NXX1NZTkMsIE9fUkRXUik7CisKKwlpZ3RfYXNzZXJ0X2Yoc3dfc3luY19mZF9p c192YWxpZChmZCksICJDcmVhdGVkIGludmFsaWQgdGltZWxpbmUiKTsKKworCXJldHVybiBmZDsK K30KKworaW50IF9fc3dfc3luY19mZW5jZV9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCBzZXFubykK K3sKKworCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhIGRhdGEgPSB7MH07CisJZGF0 YS52YWx1ZSA9IHNlcW5vOworCisJaWYgKGlndF9pb2N0bChmZCwgTE9DQUxfU1dfU1lOQ19JT0Nf Q1JFQVRFX0ZFTkNFLCAmZGF0YSkpCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gZGF0YS5m ZW5jZTsKK30KKworaW50IHN3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgdWludDMyX3Qgc2Vx bm8pCit7CisJaW50IGZlbmNlID0gX19zd19zeW5jX2ZlbmNlX2NyZWF0ZShmZCwgc2Vxbm8pOwor CWlndF9hc3NlcnRfZihzd19zeW5jX2ZkX2lzX3ZhbGlkKGZlbmNlKSwgIkNyZWF0ZWQgaW52YWxp ZCBmZW5jZSIpOworCXJldHVybiBmZW5jZTsKK30KKwordm9pZCBzd19zeW5jX3RpbWVsaW5lX2lu YyhpbnQgZmQsIHVpbnQzMl90IGNvdW50KQoreworCXVpbnQzMl90IGFyZyA9IGNvdW50OworCisJ ZG9faW9jdGwoZmQsIExPQ0FMX1NXX1NZTkNfSU9DX0lOQywgJmFyZyk7Cit9CisKK2ludCBzeW5j X21lcmdlKGludCBmZDEsIGludCBmZDIpCit7CisJc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSBkYXRh ID0ge307CisJaW50IGVycjsKKworCWRhdGEuZmQyID0gZmQyOworCisJZXJyID0gaW9jdGwoZmQx LCBTWU5DX0lPQ19NRVJHRSwgJmRhdGEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLWVycm5v OworCisJcmV0dXJuIGRhdGEuZmVuY2U7Cit9CisKK2ludCBzeW5jX3dhaXQoaW50IGZkLCBpbnQg dGltZW91dCkKK3sKKwlzdHJ1Y3QgcG9sbGZkIGZkcyA9IHswfTsKKwlpbnQgcmV0OworCisJZmRz LmZkID0gZmQ7CisJZmRzLmV2ZW50cyA9IFBPTExJTjsKKworCWRvIHsKKwkJIHJldCA9IHBvbGwo JmZkcywgMSwgdGltZW91dCk7CisJCSBpZiAocmV0ID4gMCkgeworCQkJICBpZiAoZmRzLnJldmVu dHMgJiAoUE9MTEVSUiB8IFBPTExOVkFMKSkgeworCQkJCSAgIGVycm5vID0gRUlOVkFMOworCQkJ CSAgIHJldHVybiAtMTsKKwkJCSAgfQorCQkJICByZXR1cm4gMDsKKwkJIH0gZWxzZSBpZiAocmV0 ID09IDApIHsKKwkJCSAgZXJybm8gPSBFVElNRTsKKwkJCSAgcmV0dXJuIC0xOworCQkgfQorCX0g d2hpbGUgKHJldCA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc3luY19mZW5jZV9jb3VudChpbnQgZmQpCit7CisJ c3RydWN0IHN5bmNfZmlsZV9pbmZvIGluZm8gPSB7MH07CisKKwlpZiAoaW9jdGwoZmQsIFNZTkNf SU9DX0ZJTEVfSU5GTywgJmluZm8pKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGluZm8u bnVtX2ZlbmNlczsKK30KKworc3RhdGljIGludCBfX3N5bmNfZmVuY2VfY291bnRfc3RhdHVzKGlu dCBmZCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5mbyA9IHswfTsK KwlzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvICpmZW5jZV9pbmZvOworCWludCBjb3VudDsKKwlpbnQg aTsKKworCWlmIChpb2N0bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCAmaW5mbykpCisJCXJldHVy biAtZXJybm87CisKKwlmZW5jZV9pbmZvID0gY2FsbG9jKGluZm8ubnVtX2ZlbmNlcywgc2l6ZW9m KCpmZW5jZV9pbmZvKSk7CisJaWYgKCFmZW5jZV9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWluZm8uc3luY19mZW5jZV9pbmZvID0gKHVpbnRwdHJfdClmZW5jZV9pbmZvOworCWlmIChpb2N0 bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCAmaW5mbykpIHsKKwkJY291bnQgPSAtZXJybm87CisJ fSBlbHNlIHsKKwkJY291bnQgPSAwOworCQlmb3IgKGkgPSAwIDsgaSA8IGluZm8ubnVtX2ZlbmNl cyA7IGkrKykKKwkJCWlmIChmZW5jZV9pbmZvW2ldLnN0YXR1cyA9PSBzdGF0dXMpCisJCQkJY291 bnQrKzsKKwl9CisKKwlmcmVlKGZlbmNlX2luZm8pOworCisJcmV0dXJuIGNvdW50OworfQorCitp bnQgc3luY19mZW5jZV9jb3VudF9zdGF0dXMoaW50IGZkLCBpbnQgc3RhdHVzKQoreworCWludCBj b3VudCA9IF9fc3luY19mZW5jZV9jb3VudF9zdGF0dXMoZmQsIHN0YXR1cyk7CisJaWd0X2Fzc2Vy dF9mKGNvdW50ID49IDAsICJObyBmZW5jZXMgd2l0aCBzdXBwbGllZCBzdGF0dXMgZm91bmQiKTsK KwlyZXR1cm4gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9saWIvc3dfc3luYy5oIGIvbGliL3N3X3N5 bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uY2VhNWE2MDMKLS0tIC9k ZXYvbnVsbAorKysgYi9saWIvc3dfc3luYy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBGb3NzIDxy b2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29tPgorICovCisKKyNpZm5kZWYgU1dfU1lOQ19ICisjZGVm aW5lIFNXX1NZTkNfSAorCisjZGVmaW5lIFNXX1NZTkNfRkVOQ0VfU1RBVFVTX0VSUk9SCQkoLTEp CisjZGVmaW5lIFNXX1NZTkNfRkVOQ0VfU1RBVFVTX0FDVElWRQkJKDApCisjZGVmaW5lIFNXX1NZ TkNfRkVOQ0VfU1RBVFVTX1NJR05BTEVECSgxKQorCitpbnQgc3dfc3luY190aW1lbGluZV9jcmVh dGUodm9pZCk7CitpbnQgX19zd19zeW5jX2ZlbmNlX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IHNl cW5vKTsKK2ludCBzd19zeW5jX2ZlbmNlX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IHNlcW5vKTsK K3ZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoaW50IGZkLCB1aW50MzJfdCBjb3VudCk7CitpbnQg c3luY19tZXJnZShpbnQgZmQxLCBpbnQgZmQyKTsKK2ludCBzeW5jX3dhaXQoaW50IGZlbmNlLCBp bnQgdGltZW91dCk7CitpbnQgc3luY19mZW5jZV9jb3VudChpbnQgZmQpOworaW50IHN5bmNfZmVu Y2VfY291bnRfc3RhdHVzKGludCBmZCwgaW50IHN0YXR1cyk7CisKKyNlbmRpZgorCi0tIAoyLjEx LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=