From mboxrd@z Thu Jan 1 00:00:00 1970 From: robert.foss@collabora.com Subject: [PATCH i-g-t v9 01/21] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Tue, 22 Nov 2016 08:28:19 -0500 Message-ID: <20161122132839.26250-2-robert.foss@collabora.com> References: <20161122132839.26250-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 [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id B37CD6E3C5 for ; Tue, 22 Nov 2016 13:28:52 +0000 (UTC) In-Reply-To: <20161122132839.26250-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 Vetter , Marius Vlad , Eric Engestrom , Chris Wilson , Tomeu Vizoso Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CgpCYXNlIGZ1bmN0 aW9ucyB0byBoZWxwIHRlc3RpbmcgdGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgKGV4cGxpY2l0IGZl bmNpbmcKbWVjaGFuaXNtIHBvcnRlZCBmcm9tIEFuZHJvaWQpLgpUaGVzZSBmdW5jdGlvbnMgYWxs b3cgeW91IHRvIGNyZWF0ZSwgdXNlIGFuZCBkZXN0cm95IHRpbWVsaW5lcyBhbmQgZmVuY2VzLgoK U2lnbmVkLW9mZi1ieTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+ClNp Z25lZC1vZmYtYnk6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5j by51az4KUmV2aWV3ZWQtYnk6IEVyaWMgRW5nZXN0cm9tIDxlcmljQGVuZ2VzdHJvbS5jaD4KLS0t CiBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCiBsaWIvc3dfc3luYy5jICAgICAgICB8IDE5 OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp Yi9zd19zeW5jLmggICAgICAgIHwgIDQ4ICsrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MjQ5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvc3dfc3luYy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMuaAoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5z b3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZThlMjc3Yi4uN2FhZjQyZiAxMDA2 NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK QEAgLTYzLDYgKzYzLDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJcmVuZGVyY29weV9nZW44 LmMJXAogCXJlbmRlcmNvcHlfZ2VuOS5jCVwKIAlyZW5kZXJjb3B5LmgJCVwKKwlzd19zeW5jLmMJ CVwKKwlzd19zeW5jLmgJCVwKIAlpbnRlbF9yZWdfbWFwLmMJCVwKIAlpbnRlbF9pb3NmLmMJCVwK IAlpZ3Rfa21zLmMJCVwKZGlmZiAtLWdpdCBhL2xpYi9zd19zeW5jLmMgYi9saWIvc3dfc3luYy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MmY4YzQKLS0tIC9kZXYvbnVs bAorKysgYi9saWIvc3dfc3luYy5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0 IDIwMTIgR29vZ2xlLCBJbmMKKyAqIENvcHlyaWdodCDCqSAyMDE2IENvbGxhYm9yYSwgTHRkLgor ICoKKyAqIEJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBBbmRyb2lkIE9wZW4g U291cmNlIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xs YWJvcmEuY29tPgorICovCisKKyNpZm5kZWYgQU5EUk9JRAorI2RlZmluZSBfR05VX1NPVVJDRQor I2Vsc2UKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj aW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5 bmNfZmlsZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAic3dfc3luYy5o IgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCisj aWZuZGVmIFNXX1NZTkNfSU9DX0lOQworc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEg eworCV9fdTMyCXZhbHVlOworCWNoYXIJbmFtZVszMl07CisJX19zMzIJZmVuY2U7Cit9OworCisj ZGVmaW5lIFNXX1NZTkNfSU9DX01BR0lDCQknVycKKyNkZWZpbmUgU1dfU1lOQ19JT0NfQ1JFQVRF X0ZFTkNFCV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKKwkJCQkJCXN0cnVjdCBzd19zeW5j X2NyZWF0ZV9mZW5jZV9kYXRhKQorI2RlZmluZSBTV19TWU5DX0lPQ19JTkMJCQlfSU9XKFNXX1NZ TkNfSU9DX01BR0lDLCAxLCBfX3UzMikKKyNlbmRpZgorCisjZGVmaW5lIERFVkZTX1NXX1NZTkMg ICAiL2Rldi9zd19zeW5jIgorI2RlZmluZSBERUJVR0ZTX1NXX1NZTkMgIi9zeXMva2VybmVsL2Rl YnVnL3N5bmMvc3dfc3luYyIKKworCitpbnQgc3dfc3luY19mZF9pc192YWxpZChpbnQgZmQpCit7 CisJaW50IHN0YXR1czsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCisJc3RhdHVzID0g ZmNudGwoZmQsIEZfR0VURkQsIDApOworCXJldHVybiBzdGF0dXMgPj0gMDsKK30KKworaW50IHN3 X3N5bmNfdGltZWxpbmVfY3JlYXRlKHZvaWQpCit7CisJaW50IGZkID0gb3BlbihERVZGU19TV19T WU5DLCBPX1JEV1IpOworCisJaWYgKGZkIDwgMCkKKwkJZmQgPSBvcGVuKERFQlVHRlNfU1dfU1lO QywgT19SRFdSKTsKKworCWlndF9hc3NlcnQoc3dfc3luY19mZF9pc192YWxpZChmZCkpOworCisJ cmV0dXJuIGZkOworfQorCitpbnQgX19zd19zeW5jX2ZlbmNlX2NyZWF0ZShpbnQgZmQsIHVpbnQz Ml90IHNlcW5vKQoreworCisJc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEgZGF0YTsK KworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLnZhbHVlID0gc2Vxbm87 CisKKwlpZiAoaWd0X2lvY3RsKGZkLCBTV19TWU5DX0lPQ19DUkVBVEVfRkVOQ0UsICZkYXRhKSkK KwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiBkYXRhLmZlbmNlOworfQorCitpbnQgc3dfc3lu Y19mZW5jZV9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCBzZXFubykKK3sKKwlpbnQgZmVuY2UgPSBf X3N3X3N5bmNfZmVuY2VfY3JlYXRlKGZkLCBzZXFubyk7CisJaWd0X2Fzc2VydChmZW5jZSA+PSAw KTsKKwlyZXR1cm4gZmVuY2U7Cit9CisKK3ZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoaW50IGZk LCB1aW50MzJfdCBjb3VudCkKK3sKKwl1aW50MzJfdCBhcmcgPSBjb3VudDsKKworCWRvX2lvY3Rs KGZkLCBTV19TWU5DX0lPQ19JTkMsICZhcmcpOworfQorCitpbnQgc3luY19tZXJnZShpbnQgZmQx LCBpbnQgZmQyKQoreworCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YSA9IHt9OworCWludCBl cnI7CisKKwlkYXRhLmZkMiA9IGZkMjsKKworCWVyciA9IGlvY3RsKGZkMSwgU1lOQ19JT0NfTUVS R0UsICZkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXN3X3N5bmNf ZmRfaXNfdmFsaWQoZGF0YS5mZW5jZSk7CisKKwlyZXR1cm4gZGF0YS5mZW5jZTsKK30KKworaW50 IHN5bmNfd2FpdChpbnQgZmQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBwb2xsZmQgZmRzID0g ezB9OworCWludCByZXQ7CisKKwlmZHMuZmQgPSBmZDsKKwlmZHMuZXZlbnRzID0gUE9MTElOOwor CisJZG8geworCQkgcmV0ID0gcG9sbCgmZmRzLCAxLCB0aW1lb3V0KTsKKwkJIGlmIChyZXQgPiAw KSB7CisJCQkgIGlmIChmZHMucmV2ZW50cyAmIChQT0xMRVJSIHwgUE9MTE5WQUwpKSB7CisJCQkJ ICAgZXJybm8gPSBFSU5WQUw7CisJCQkJICAgcmV0dXJuIC0xOworCQkJICB9CisJCQkgIHJldHVy biAwOworCQkgfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJICBlcnJubyA9IEVUSU1FOworCQkJ ICByZXR1cm4gLTE7CisJCSB9CisJfSB3aGlsZSAocmV0ID09IC0xICYmIChlcnJubyA9PSBFSU5U UiB8fCBlcnJubyA9PSBFQUdBSU4pKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzeW5jX2Zl bmNlX2NvdW50KGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5mbzsKKworCW1l bXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpZiAoaW9jdGwoZmQsIFNZTkNfSU9DX0ZJ TEVfSU5GTywgJmluZm8pKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGluZm8ubnVtX2Zl bmNlczsKK30KKworc3RhdGljIGludCBfX3N5bmNfZmVuY2VfY291bnRfc3RhdHVzKGludCBmZCwg aW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5mbzsKKwlzdHJ1Y3Qgc3lu Y19mZW5jZV9pbmZvICpmZW5jZV9pbmZvOworCWludCBjb3VudDsKKwlpbnQgaTsKKworCW1lbXNl dCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpZiAoaW9jdGwoZmQsIFNZTkNfSU9DX0ZJTEVf SU5GTywgJmluZm8pKQorCQlyZXR1cm4gLWVycm5vOworCisJZmVuY2VfaW5mbyA9IGNhbGxvYyhp bmZvLm51bV9mZW5jZXMsIHNpemVvZigqZmVuY2VfaW5mbykpOworCWlmICghZmVuY2VfaW5mbykK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLnN5bmNfZmVuY2VfaW5mbyA9ICh1aW50cHRyX3Qp ZmVuY2VfaW5mbzsKKwlpZiAoaW9jdGwoZmQsIFNZTkNfSU9DX0ZJTEVfSU5GTywgJmluZm8pKSB7 CisJCWNvdW50ID0gLWVycm5vOworCX0gZWxzZSB7CisJCWNvdW50ID0gMDsKKwkJZm9yIChpID0g MCA7IGkgPCBpbmZvLm51bV9mZW5jZXMgOyBpKyspCisJCQljb3VudCArPSBmZW5jZV9pbmZvW2ld LnN0YXR1cyA9PSBzdGF0dXM7CisJfQorCisJZnJlZShmZW5jZV9pbmZvKTsKKworCXJldHVybiBj b3VudDsKK30KKworaW50IHN5bmNfZmVuY2VfY291bnRfc3RhdHVzKGludCBmZCwgaW50IHN0YXR1 cykKK3sKKwlpbnQgY291bnQgPSBfX3N5bmNfZmVuY2VfY291bnRfc3RhdHVzKGZkLCBzdGF0dXMp OworCWlndF9hc3NlcnQoY291bnQgPj0gMCk7CisJcmV0dXJuIGNvdW50OworfQpkaWZmIC0tZ2l0 IGEvbGliL3N3X3N5bmMuaCBiL2xpYi9zd19zeW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMWY0N2IyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9zd19zeW5jLmgKQEAg LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIEdvb2dsZSwgSW5jCisgKiBDb3B5 cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiB0aGUgaW1wbGVt ZW50YXRpb24gZnJvbSB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAg ICBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZvc3NAY29sbGFib3JhLmNvbT4KKyAqLworCisjaWZuZGVm IFNXX1NZTkNfSAorI2RlZmluZSBTV19TWU5DX0gKKworI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NU QVRVU19FUlJPUgkJKC0xKQorI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NUQVRVU19BQ1RJVkUJCSgw KQorI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NUQVRVU19TSUdOQUxFRAkoMSkKKworaW50IHN3X3N5 bmNfZmRfaXNfdmFsaWQoaW50IGZkKTsKK2ludCBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSh2b2lk KTsKK2ludCBfX3N3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgdWludDMyX3Qgc2Vxbm8pOwor aW50IHN3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgdWludDMyX3Qgc2Vxbm8pOwordm9pZCBz d19zeW5jX3RpbWVsaW5lX2luYyhpbnQgZmQsIHVpbnQzMl90IGNvdW50KTsKK2ludCBzeW5jX21l cmdlKGludCBmZDEsIGludCBmZDIpOworaW50IHN5bmNfd2FpdChpbnQgZmVuY2UsIGludCB0aW1l b3V0KTsKK2ludCBzeW5jX2ZlbmNlX2NvdW50KGludCBmZCk7CitpbnQgc3luY19mZW5jZV9jb3Vu dF9zdGF0dXMoaW50IGZkLCBpbnQgc3RhdHVzKTsKKworI2VuZGlmCisKLS0gCjIuMTAuMgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==