From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mikko Perttunen Subject: [PATCH 04/10] gpu: host1x: Lock classes during job submission Date: Sun, 5 Nov 2017 13:01:12 +0200 Message-ID: <20171105110118.15142-5-mperttunen@nvidia.com> References: <20171105110118.15142-1-mperttunen@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171105110118.15142-1-mperttunen@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com, jonathanh@nvidia.com Cc: linux-tegra@vger.kernel.org, digetx@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Mikko Perttunen List-Id: linux-tegra@vger.kernel.org SG9zdDF4IGhhcyBhIGZlYXR1cmUgY2FsbGVkIE1MT0NLcyB3aGljaCBhbGxvdyBhIGNlcnRhaW4g Y2xhc3MKKH5IVyB1bml0KSB0byBiZSBsb2NrZWQgKGluIHRoZSBtdXRleCBzZW5zZSkgYW5kIHVu bG9ja2VkIGR1cmluZwpjb21tYW5kIGV4ZWN1dGlvbiwgcHJldmVudGluZyBvdGhlciBjaGFubmVs cyBmcm9tIGFjY2Vzc2luZyB0aGUKY2xhc3Mgd2hpbGUgaXQgaXMgbG9ja2VkLiBUaGlzIGlzIG5l Y2Vzc2FyeSB0byBwcmV2ZW50IGNvbmN1cnJlbnQKam9icyBmcm9tIG1lc3NpbmcgdXAgY2xhc3Mg c3RhdGUuCgpUaGlzIGhhcyBub3QgYmVlbiBuZWNlc3Nhcnkgc28gZmFyIHNpbmNlIGR1ZSB0byBv dXIgY2hhbm5lbCBhbGxvY2F0aW9uCm1vZGVsLCB0aGVyZSBoYXMgb25seSBiZWVuIGEgc2luZ2xl IGhhcmR3YXJlIGNoYW5uZWwgc3VibWl0dGluZwpjb21tYW5kcyB0byBlYWNoIGNsYXNzLiBGdXR1 cmUgcGF0Y2hlcywgaG93ZXZlciwgY2hhbmdlIHRoZSBjaGFubmVsCmFsbG9jYXRpb24gbW9kZWwg dG8gYWxsb3cgaGFyZHdhcmUtc2NoZWR1bGVkIGNvbmN1cnJlbmN5LCBhbmQgYXMgc3VjaAp3ZSBu ZWVkIHRvIHN0YXJ0IGxvY2tpbmcuCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgbG9ja2luZyBvbiBh bGwgcGxhdGZvcm1zIGZyb20gVGVncmEyMCB0bwpUZWdyYTE4Ni4KClNpZ25lZC1vZmYtYnk6IE1p a2tvIFBlcnR0dW5lbiA8bXBlcnR0dW5lbkBudmlkaWEuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2hv c3QxeC9jZG1hLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvaG9z dDF4L2NkbWEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9ob3N0 MXgvaHcvY2RtYV9ody5jICAgICAgICAgICAgICAgIHwgMTIyICsrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9jaGFubmVsX2h3LmMgICAgICAgICAgICAgfCAg NzEgKysrKysrKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwMV9oYXJkd2Fy ZS5oICAgICAgfCAgMTAgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwMl9oYXJkd2Fy ZS5oICAgICAgfCAgMTAgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNF9oYXJkd2Fy ZS5oICAgICAgfCAgMTAgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNV9oYXJkd2Fy ZS5oICAgICAgfCAgMTAgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNl9oYXJkd2Fy ZS5oICAgICAgfCAgMTAgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwMV9zeW5j LmggICAgICAgfCAgIDYgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwMl9zeW5j LmggICAgICAgfCAgIDYgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNF9zeW5j LmggICAgICAgfCAgIDYgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNV9zeW5j LmggICAgICAgfCAgIDYgKysKIGRyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNl9oeXBl cnZpc29yLmggfCAgIDUgKwogMTQgZmlsZXMgY2hhbmdlZCwgMjU3IGluc2VydGlvbnMoKyksIDE3 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9jZG1hLmMgYi9k cml2ZXJzL2dwdS9ob3N0MXgvY2RtYS5jCmluZGV4IDI4NTQxYjI4MDczOS4uZjc4N2NmZTY5YzEx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgvY2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1 L2hvc3QxeC9jZG1hLmMKQEAgLTIzMiw2ICsyMzIsNyBAQCBzdGF0aWMgdm9pZCBjZG1hX3N0YXJ0 X3RpbWVyX2xvY2tlZChzdHJ1Y3QgaG9zdDF4X2NkbWEgKmNkbWEsCiAJfQogCiAJY2RtYS0+dGlt ZW91dC5jbGllbnQgPSBqb2ItPmNsaWVudDsKKwljZG1hLT50aW1lb3V0LmNsYXNzID0gam9iLT5j bGFzczsKIAljZG1hLT50aW1lb3V0LnN5bmNwdCA9IGhvc3QxeF9zeW5jcHRfZ2V0KGhvc3QsIGpv Yi0+c3luY3B0X2lkKTsKIAljZG1hLT50aW1lb3V0LnN5bmNwdF92YWwgPSBqb2ItPnN5bmNwdF9l bmQ7CiAJY2RtYS0+dGltZW91dC5zdGFydF9rdGltZSA9IGt0aW1lX2dldCgpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvaG9zdDF4L2NkbWEuaCBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9jZG1hLmgK aW5kZXggMjg2ZDQ5Mzg2YmU5Li5lNzI2NjBmYzgzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2hvc3QxeC9jZG1hLmgKKysrIGIvZHJpdmVycy9ncHUvaG9zdDF4L2NkbWEuaApAQCAtNTksNiAr NTksNyBAQCBzdHJ1Y3QgYnVmZmVyX3RpbWVvdXQgewogCWt0aW1lX3Qgc3RhcnRfa3RpbWU7CQkv KiBzdGFydGluZyB0aW1lICovCiAJLyogY29udGV4dCB0aW1lb3V0IGluZm9ybWF0aW9uICovCiAJ aW50IGNsaWVudDsKKwl1MzIgY2xhc3M7CiB9OwogCiBlbnVtIGNkbWFfZXZlbnQgewpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2NkbWFfaHcuYyBiL2RyaXZlcnMvZ3B1L2hvc3Qx eC9ody9jZG1hX2h3LmMKaW5kZXggY2UzMjA1MzRjYmVkLi40ZDU5NzBkODYzZDUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9jZG1hX2h3LmMKKysrIGIvZHJpdmVycy9ncHUvaG9z dDF4L2h3L2NkbWFfaHcuYwpAQCAtMTYsNiArMTYsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8K IAorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNp bmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5n Lmg+CkBAIC0yNDMsNiArMjQ0LDEyNSBAQCBzdGF0aWMgdm9pZCBjZG1hX3Jlc3VtZShzdHJ1Y3Qg aG9zdDF4X2NkbWEgKmNkbWEsIHUzMiBnZXRwdHIpCiAJY2RtYV90aW1lb3V0X3Jlc3RhcnQoY2Rt YSwgZ2V0cHRyKTsKIH0KIAorc3RhdGljIGludCBtbG9ja19pZF9mb3JfY2xhc3ModW5zaWduZWQg aW50IGNsYXNzKQoreworI2lmIEhPU1QxWF9IVyA+PSA2CisJc3dpdGNoIChjbGFzcykKKwl7CisJ Y2FzZSBIT1NUMVhfQ0xBU1NfSE9TVDFYOgorCQlyZXR1cm4gMDsKKwljYXNlIEhPU1QxWF9DTEFT U19WSUM6CisJCXJldHVybiAxNzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cisj ZWxzZQorCXN3aXRjaCAoY2xhc3MpCisJeworCWNhc2UgSE9TVDFYX0NMQVNTX0hPU1QxWDoKKwkJ cmV0dXJuIDA7CisJY2FzZSBIT1NUMVhfQ0xBU1NfR1IyRDoKKwkJcmV0dXJuIDE7CisJY2FzZSBI T1NUMVhfQ0xBU1NfR1IyRF9TQjoKKwkJcmV0dXJuIDI7CisJY2FzZSBIT1NUMVhfQ0xBU1NfVklD OgorCQlyZXR1cm4gMzsKKwljYXNlIEhPU1QxWF9DTEFTU19HUjNEOgorCQlyZXR1cm4gNDsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQg dGltZW91dF9yZWxlYXNlX21sb2NrKHN0cnVjdCBob3N0MXhfY2RtYSAqY2RtYSkKK3sKKyNpZiBI T1NUMVhfSFcgPj0gNgorCXN0cnVjdCBob3N0MXhfY2hhbm5lbCAqY2ggPSBjZG1hX3RvX2NoYW5u ZWwoY2RtYSk7CisJc3RydWN0IGhvc3QxeCAqaG9zdCA9IGNkbWFfdG9faG9zdDF4KGNkbWEpOwor CXUzMiBwYl9wb3MsIHBiX3RlbXBbM10sIHZhbDsKKwlpbnQgZXJyLCBtbG9ja19pZDsKKworCWlm ICghaG9zdC0+aHZfcmVncykKKwkJcmV0dXJuOworCisJbWxvY2tfaWQgPSBtbG9ja19pZF9mb3Jf Y2xhc3MoY2RtYS0+dGltZW91dC5jbGFzcyk7CisJaWYgKFdBUk4obWxvY2tfaWQgPCAwLCAiSW52 YWxpZCBjbGFzcyBJRCIpKQorCQlyZXR1cm47CisKKwl2YWwgPSBob3N0MXhfaHlwZXJ2aXNvcl9y ZWFkbChob3N0LCBIT1NUMVhfSFZfTUxPQ0sobWxvY2tfaWQpKTsKKwlpZiAoIUhPU1QxWF9IVl9N TE9DS19MT0NLRURfVih2YWwpIHx8CisJICAgIEhPU1QxWF9IVl9NTE9DS19DSF9WKHZhbCkgIT0g Y2gtPmlkKQorCXsKKwkJLyogQ2hhbm5lbCBpcyBub3QgaG9sZGluZyB0aGUgTUxPQ0ssIG5vdGhp bmcgdG8gcmVsZWFzZS4gKi8KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT24gVGVncmExODYs IHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHRvIHVubG9jayBhbiBNTE9DSyAoZG9uJ3QgYXNrIG1lCisJ ICogd2h5KS4gQXMgc3VjaCwgd2UgaGF2ZSB0byBleGVjdXRlIGEgcmVsZWFzZV9tbG9jayBpbnN0 cnVjdGlvbiB0bworCSAqIGRvIGl0LiBXZSBkbyB0aGlzIGJ5IGJhY2tpbmcgdXAgdGhlIGZpcnN0 IHRocmVlIG9wY29kZXMgb2YgdGhlCisJICogcHVzaGJ1ZmZlciBhbmQgcmVwbGFjaW5nIHRoZW0g d2l0aCBvdXIgb3duIHNob3J0IHNlcXVlbmNlIHRvIGRvCisJICogdGhlIHVubG9ja2luZy4gV2Ug c2V0IHRoZSAucG9zIGZpZWxkIHRvIDEyLCB3aGljaCBjYXVzZXMgRE1BRU5ECisJICogdG8gYmUg c2V0IGFjY29yZGluZ2x5IHN1Y2ggdGhhdCBvbmx5IHRoZSB0aHJlZSBvcGNvZGVzIHdlIHNldAor CSAqIGhlcmUgYXJlIGV4ZWN1dGVkIGJlZm9yZSBDRE1BIHN0b3BzLiBGaW5hbGx5IHdlIHJlc3Rv cmUgdGhlIHZhbHVlCisJICogb2YgcG9zIGFuZCBwdXNoYnVmZmVyIGNvbnRlbnRzLgorCSAqLwor CisJcGJfcG9zID0gY2RtYS0+cHVzaF9idWZmZXIucG9zOworCW1lbWNweShwYl90ZW1wLCBjZG1h LT5wdXNoX2J1ZmZlci5tYXBwZWQsIEFSUkFZX1NJWkUocGJfdGVtcCkgKiA0KTsKKworCXsKKwkJ dTMyICpwYiA9IGNkbWEtPnB1c2hfYnVmZmVyLm1hcHBlZDsKKwkJcGJbMF0gPSBob3N0MXhfb3Bj b2RlX2FjcXVpcmVfbWxvY2soY2RtYS0+dGltZW91dC5jbGFzcyk7CisJCXBiWzFdID0gaG9zdDF4 X29wY29kZV9zZXRjbGFzcyhjZG1hLT50aW1lb3V0LmNsYXNzLCAwLCAwKTsKKwkJcGJbMl0gPSBo b3N0MXhfb3Bjb2RlX3JlbGVhc2VfbWxvY2soY2RtYS0+dGltZW91dC5jbGFzcyk7CisJfQorCisJ LyogRmx1c2ggd3JpdGVjb21iaW5lIGJ1ZmZlciAqLworCXdtYigpOworCisJY2RtYS0+cHVzaF9i dWZmZXIucG9zID0gQVJSQVlfU0laRShwYl90ZW1wKSAqIDQ7CisKKwljZG1hX3Jlc3VtZShjZG1h LCAwKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIHJlbGVhc2VfbWxvY2sgb3Bjb2RlIGhhcyBiZWVu IGV4ZWN1dGVkICovCisJZXJyID0gcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoCisJCWhvc3Qt Pmh2X3JlZ3MgKyBIT1NUMVhfSFZfTUxPQ0sobWxvY2tfaWQpLCB2YWwsCisJCSFIT1NUMVhfSFZf TUxPQ0tfTE9DS0VEX1YodmFsKSB8fAorCQkJSE9TVDFYX0hWX01MT0NLX0NIX1YodmFsKSAhPSBj aC0+aWQsCisJCTEwLCAxMDAwMCk7CisJV0FSTihlcnIsICJGYWlsZWQgdG8gdW5sb2NrIG1sb2Nr ICV1XG4iLCBtbG9ja19pZCk7CisKKwljZG1hX2ZyZWV6ZShjZG1hKTsKKworCS8qIFJlc3RvcmUg b3JpZ2luYWwgcHVzaGJ1ZmZlciBzdGF0ZSAqLworCWNkbWEtPnB1c2hfYnVmZmVyLnBvcyA9IHBi X3BvczsKKwltZW1jcHkoY2RtYS0+cHVzaF9idWZmZXIubWFwcGVkLCBwYl90ZW1wLCBBUlJBWV9T SVpFKHBiX3RlbXApICogNCk7CisJd21iKCk7CisjZWxzZQorCXN0cnVjdCBob3N0MXhfY2hhbm5l bCAqY2ggPSBjZG1hX3RvX2NoYW5uZWwoY2RtYSk7CisJc3RydWN0IGhvc3QxeCAqaG9zdCA9IGNk bWFfdG9faG9zdDF4KGNkbWEpOworCWludCBtbG9ja19pZDsKKwl1MzIgdmFsOworCisJbWxvY2tf aWQgPSBtbG9ja19pZF9mb3JfY2xhc3MoY2RtYS0+dGltZW91dC5jbGFzcyk7CisJaWYgKFdBUk4o bWxvY2tfaWQgPCAwLCAiSW52YWxpZCBjbGFzcyBJRCIpKQorCQlyZXR1cm47CisKKwl2YWwgPSBo b3N0MXhfc3luY19yZWFkbChob3N0LCBIT1NUMVhfU1lOQ19NTE9DS19PV05FUihtbG9ja19pZCkp OworCWlmICghSE9TVDFYX1NZTkNfTUxPQ0tfT1dORVJfQ0hfT1dOU19WKHZhbCkgfHwKKwkgICAg SE9TVDFYX1NZTkNfTUxPQ0tfT1dORVJfQ0hJRF9WKHZhbCkgIT0gY2gtPmlkKQorCXsKKwkJLyog Q2hhbm5lbCBpcyBub3QgaG9sZGluZyB0aGUgTUxPQ0ssIG5vdGhpbmcgdG8gcmVsZWFzZS4gKi8K KwkJcmV0dXJuOworCX0KKworCS8qIFVubG9jayBNTE9DSyAqLworCWhvc3QxeF9zeW5jX3dyaXRl bChob3N0LCAweDAsIEhPU1QxWF9TWU5DX01MT0NLKG1sb2NrX2lkKSk7CisjZW5kaWYKK30KKwog LyoKICAqIElmIHRoaXMgdGltZW91dCBmaXJlcywgaXQgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHN5 bmNfcXVldWUgZW50cnkgaGFzCiAgKiBleGNlZWRlZCBpdHMgVFRMIGFuZCB0aGUgdXNlcmN0eCBz aG91bGQgYmUgdGltZWQgb3V0IGFuZCByZW1haW5pbmcKQEAgLTI5Myw2ICs0MTMsOCBAQCBzdGF0 aWMgdm9pZCBjZG1hX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJ Lyogc3RvcCBIVywgcmVzZXR0aW5nIGNoYW5uZWwvbW9kdWxlICovCiAJaG9zdDF4X2h3X2NkbWFf ZnJlZXplKGhvc3QxeCwgY2RtYSk7CiAKKwl0aW1lb3V0X3JlbGVhc2VfbWxvY2soY2RtYSk7CisK IAlob3N0MXhfY2RtYV91cGRhdGVfc3luY19xdWV1ZShjZG1hLCBjaC0+ZGV2KTsKIAltdXRleF91 bmxvY2soJmNkbWEtPmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3 L2NoYW5uZWxfaHcuYyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9jaGFubmVsX2h3LmMKaW5kZXgg MjQ2Yjc4YzQxMjgxLi5mODBmYjhiZTM4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2hvc3Qx eC9ody9jaGFubmVsX2h3LmMKKysrIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2NoYW5uZWxfaHcu YwpAQCAtODksNiArODksMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3N5bmNw dF9iYXNlKHN0cnVjdCBob3N0MXhfam9iICpqb2IpCiAJCQkgSE9TVDFYX1VDTEFTU19MT0FEX1NZ TkNQVF9CQVNFX1ZBTFVFX0YodmFsdWUpKTsKIH0KIAorc3RhdGljIHZvaWQgY2hhbm5lbF9zdWJt aXRfc2VyaWFsaXplKHN0cnVjdCBob3N0MXhfY2hhbm5lbCAqY2gsCisJCQkJICAgICBzdHJ1Y3Qg aG9zdDF4X3N5bmNwdCAqc3ApCit7CisjaWYgSE9TVDFYX0hXID49IDYKKwkvKgorCSAqIE9uIFQx ODYsIGR1ZSB0byBhIGh3IGlzc3VlLCB3ZSBuZWVkIHRvIGlzc3VlIGFuIG1sb2NrIGFjcXVpcmUK KwkgKiBmb3IgSE9TVDFYIGNsYXNzLiBJdCBpcyBzdGlsbCBpbnRlcnByZXRlZCBhcyBhIG5vLW9w IGluCisJICogaGFyZHdhcmUuCisJICovCisJaG9zdDF4X2NkbWFfcHVzaCgmY2gtPmNkbWEsCisJ CWhvc3QxeF9vcGNvZGVfYWNxdWlyZV9tbG9jayhIT1NUMVhfQ0xBU1NfSE9TVDFYKSwKKwkJaG9z dDF4X29wY29kZV9zZXRjbGFzcyhIT1NUMVhfQ0xBU1NfSE9TVDFYLCAwLCAwKSk7CisJaG9zdDF4 X2NkbWFfcHVzaCgmY2gtPmNkbWEsCisJCWhvc3QxeF9vcGNvZGVfbm9uaW5jcihob3N0MXhfdWNs YXNzX3dhaXRfc3luY3B0X3IoKSwgMSksCisJCWhvc3QxeF9jbGFzc19ob3N0X3dhaXRfc3luY3B0 KGhvc3QxeF9zeW5jcHRfaWQoc3ApLAorCQkJCQkgICAgICBob3N0MXhfc3luY3B0X3JlYWRfbWF4 KHNwKSkpOworCWhvc3QxeF9jZG1hX3B1c2goJmNoLT5jZG1hLAorCQlob3N0MXhfb3Bjb2RlX3Jl bGVhc2VfbWxvY2soSE9TVDFYX0NMQVNTX0hPU1QxWCksCisJCUhPU1QxWF9PUENPREVfTk9QKTsK KyNlbHNlCisJaG9zdDF4X2NkbWFfcHVzaCgmY2gtPmNkbWEsCisJCWhvc3QxeF9vcGNvZGVfc2V0 Y2xhc3MoSE9TVDFYX0NMQVNTX0hPU1QxWCwKKwkJCQkgICAgICAgaG9zdDF4X3VjbGFzc193YWl0 X3N5bmNwdF9yKCksIDEpLAorCQlob3N0MXhfY2xhc3NfaG9zdF93YWl0X3N5bmNwdChob3N0MXhf c3luY3B0X2lkKHNwKSwKKwkJCQkJICAgICAgaG9zdDF4X3N5bmNwdF9yZWFkX21heChzcCkpKTsK KyNlbmRpZgorfQorCiBzdGF0aWMgaW50IGNoYW5uZWxfc3VibWl0KHN0cnVjdCBob3N0MXhfam9i ICpqb2IpCiB7CiAJc3RydWN0IGhvc3QxeF9jaGFubmVsICpjaCA9IGpvYi0+Y2hhbm5lbDsKQEAg LTk2LDYgKzEyNCw3IEBAIHN0YXRpYyBpbnQgY2hhbm5lbF9zdWJtaXQoc3RydWN0IGhvc3QxeF9q b2IgKmpvYikKIAl1MzIgdXNlcl9zeW5jcHRfaW5jcnMgPSBqb2ItPnN5bmNwdF9pbmNyczsKIAl1 MzIgcHJldl9tYXggPSAwOwogCXUzMiBzeW5jdmFsOworCXUzMiBtbG9jazsKIAlpbnQgZXJyOwog CXN0cnVjdCBob3N0MXhfd2FpdGxpc3QgKmNvbXBsZXRlZF93YWl0ZXIgPSBOVUxMOwogCXN0cnVj dCBob3N0MXggKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoY2gtPmRldi0+cGFyZW50KTsKQEAgLTEy OCwxNyArMTU3LDEyIEBAIHN0YXRpYyBpbnQgY2hhbm5lbF9zdWJtaXQoc3RydWN0IGhvc3QxeF9q b2IgKmpvYikKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoam9iLT5zZXJpYWxpemUpIHsKLQkJ LyoKLQkJICogRm9yY2Ugc2VyaWFsaXphdGlvbiBieSBpbnNlcnRpbmcgYSBob3N0IHdhaXQgZm9y IHRoZQotCQkgKiBwcmV2aW91cyBqb2IgdG8gZmluaXNoIGJlZm9yZSB0aGlzIG9uZSBjYW4gY29t bWVuY2UuCi0JCSAqLwotCQlob3N0MXhfY2RtYV9wdXNoKCZjaC0+Y2RtYSwKLQkJCQkgaG9zdDF4 X29wY29kZV9zZXRjbGFzcyhIT1NUMVhfQ0xBU1NfSE9TVDFYLAotCQkJCQlob3N0MXhfdWNsYXNz X3dhaXRfc3luY3B0X3IoKSwgMSksCi0JCQkJIGhvc3QxeF9jbGFzc19ob3N0X3dhaXRfc3luY3B0 KGpvYi0+c3luY3B0X2lkLAotCQkJCQlob3N0MXhfc3luY3B0X3JlYWRfbWF4KHNwKSkpOwotCX0K KwkvKgorCSAqIEZvcmNlIHNlcmlhbGl6YXRpb24gYnkgaW5zZXJ0aW5nIGEgaG9zdCB3YWl0IGZv ciB0aGUKKwkgKiBwcmV2aW91cyBqb2IgdG8gZmluaXNoIGJlZm9yZSB0aGlzIG9uZSBjYW4gY29t bWVuY2UuCisJICovCisJaWYgKGpvYi0+c2VyaWFsaXplKQorCQljaGFubmVsX3N1Ym1pdF9zZXJp YWxpemUoY2gsIHNwKTsKIAogCS8qIFN5bmNocm9uaXplIGJhc2UgcmVnaXN0ZXIgdG8gYWxsb3cg dXNpbmcgaXQgZm9yIHJlbGF0aXZlIHdhaXRpbmcgKi8KIAlpZiAoc3AtPmJhc2UpCkBAIC0xNDks MTYgKzE3MywyOSBAQCBzdGF0aWMgaW50IGNoYW5uZWxfc3VibWl0KHN0cnVjdCBob3N0MXhfam9i ICpqb2IpCiAJLyogYXNzaWduIHN5bmNwb2ludCB0byBjaGFubmVsICovCiAJaG9zdDF4X2h3X3N5 bmNwdF9hc3NpZ25fY2hhbm5lbChob3N0LCBzcCwgY2gpOwogCi0Jam9iLT5zeW5jcHRfZW5kID0g c3luY3ZhbDsKLQotCS8qIGFkZCBhIHNldGNsYXNzIGZvciBtb2R1bGVzIHRoYXQgcmVxdWlyZSBp dCAqLwotCWlmIChqb2ItPmNsYXNzKQorCS8qIGFjcXVpcmUgTUxPQ0sgYW5kIHNldCBjaGFubmVs IGNsYXNzIHRvIHNwZWNpZmllZCBjbGFzcyAqLworCW1sb2NrID0gSE9TVDFYX0hXID49IDYgPyBq b2ItPmNsYXNzIDogbWxvY2tfaWRfZm9yX2NsYXNzKGpvYi0+Y2xhc3MpOworCWlmIChqb2ItPmNs YXNzKSB7CiAJCWhvc3QxeF9jZG1hX3B1c2goJmNoLT5jZG1hLAotCQkJCSBob3N0MXhfb3Bjb2Rl X3NldGNsYXNzKGpvYi0+Y2xhc3MsIDAsIDApLAotCQkJCSBIT1NUMVhfT1BDT0RFX05PUCk7CisJ CQkJIGhvc3QxeF9vcGNvZGVfYWNxdWlyZV9tbG9jayhtbG9jayksCisJCQkJIGhvc3QxeF9vcGNv ZGVfc2V0Y2xhc3Moam9iLT5jbGFzcywgMCwgMCkpOworCX0KIAogCXN1Ym1pdF9nYXRoZXJzKGpv Yik7CiAKKwlpZiAoam9iLT5jbGFzcykgeworCQkvKgorCQkgKiBQdXNoIGFkZGl0aW9uYWwgaW5j cmVtZW50IHRvIGNhdGNoIGpvYnMgdGhhdCBjcmFzaCBiZWZvcmUKKwkJICogZmluaXNoaW5nIHRo ZWlyIGdhdGhlciwgbm90IHJlYWNoaW5nIHRoZSB1bmxvY2sgb3Bjb2RlLgorCQkgKi8KKwkJc3lu Y3ZhbCA9IGhvc3QxeF9zeW5jcHRfaW5jcl9tYXgoc3AsIDEpOworCQlob3N0MXhfY2RtYV9wdXNo KCZjaC0+Y2RtYSwKKwkJCWhvc3QxeF9vcGNvZGVfaW1tX2luY3Jfc3luY3B0KDAsIGpvYi0+c3lu Y3B0X2lkKSwKKwkJCWhvc3QxeF9vcGNvZGVfcmVsZWFzZV9tbG9jayhtbG9jaykpOworCX0KKwor CWpvYi0+c3luY3B0X2VuZCA9IHN5bmN2YWw7CisKIAkvKiBlbmQgQ0RNQSBzdWJtaXQgJiBzdGFz aCBwaW5uZWQgaE1lbXMgaW50byBzeW5jIHF1ZXVlICovCiAJaG9zdDF4X2NkbWFfZW5kKCZjaC0+ Y2RtYSwgam9iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDAx X2hhcmR3YXJlLmggYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDFfaGFyZHdhcmUuaApp bmRleCA1ZjBmYjg2NmVmYTguLjZhMmM5ZjkwNWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv aG9zdDF4L2h3L2hvc3QxeDAxX2hhcmR3YXJlLmgKKysrIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3 L2hvc3QxeDAxX2hhcmR3YXJlLmgKQEAgLTEzOCw2ICsxMzgsMTYgQEAgc3RhdGljIGlubGluZSB1 MzIgaG9zdDF4X29wY29kZV9nYXRoZXJfaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNv dW50KQogCXJldHVybiAoNiA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IEJJVCgxNSkgfCBCSVQo MTQpIHwgY291bnQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9vcGNvZGVfYWNxdWly ZV9tbG9jayh1bnNpZ25lZCBpZCkKK3sKKwlyZXR1cm4gKDE0IDw8IDI4KSB8IGlkOworfQorCitz dGF0aWMgaW5saW5lIHUzMiBob3N0MXhfb3Bjb2RlX3JlbGVhc2VfbWxvY2sodW5zaWduZWQgaWQp Cit7CisJcmV0dXJuICgxNCA8PCAyOCkgfCAoMSA8PCAyNCkgfCBpZDsKK30KKwogI2RlZmluZSBI T1NUMVhfT1BDT0RFX05PUCBob3N0MXhfb3Bjb2RlX25vbmluY3IoMCwgMCkKIAogI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDJfaGFyZHdhcmUuaCBiL2Ry aXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwMl9oYXJkd2FyZS5oCmluZGV4IDE1NDkwMTg2MGJj Ni4uYzUyNGM2YzhkODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4 MDJfaGFyZHdhcmUuaAorKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDJfaGFyZHdh cmUuaApAQCAtMTM3LDYgKzEzNywxNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfb3Bjb2Rl X2dhdGhlcl9pbmNyKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCiAJcmV0dXJuICg2 IDw8IDI4KSB8IChvZmZzZXQgPDwgMTYpIHwgQklUKDE1KSB8IEJJVCgxNCkgfCBjb3VudDsKIH0K IAorc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9hY3F1aXJlX21sb2NrKHVuc2lnbmVk IGlkKQoreworCXJldHVybiAoMTQgPDwgMjgpIHwgaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMy IGhvc3QxeF9vcGNvZGVfcmVsZWFzZV9tbG9jayh1bnNpZ25lZCBpZCkKK3sKKwlyZXR1cm4gKDE0 IDw8IDI4KSB8ICgxIDw8IDI0KSB8IGlkOworfQorCiAjZGVmaW5lIEhPU1QxWF9PUENPREVfTk9Q IGhvc3QxeF9vcGNvZGVfbm9uaW5jcigwLCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNF9oYXJkd2FyZS5oIGIvZHJpdmVycy9ncHUvaG9zdDF4 L2h3L2hvc3QxeDA0X2hhcmR3YXJlLmgKaW5kZXggZGUxYTM4MTc1MzI4Li44ZGVkZDc3YjdhMWIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNF9oYXJkd2FyZS5oCisr KyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNF9oYXJkd2FyZS5oCkBAIC0xMzcsNiAr MTM3LDE2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9vcGNvZGVfZ2F0aGVyX2luY3IodW5z aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIAlyZXR1cm4gKDYgPDwgMjgpIHwgKG9mZnNl dCA8PCAxNikgfCBCSVQoMTUpIHwgQklUKDE0KSB8IGNvdW50OwogfQogCitzdGF0aWMgaW5saW5l IHUzMiBob3N0MXhfb3Bjb2RlX2FjcXVpcmVfbWxvY2sodW5zaWduZWQgaWQpCit7CisJcmV0dXJu ICgxNCA8PCAyOCkgfCBpZDsKK30KKworc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9y ZWxlYXNlX21sb2NrKHVuc2lnbmVkIGlkKQoreworCXJldHVybiAoMTQgPDwgMjgpIHwgKDEgPDwg MjQpIHwgaWQ7Cit9CisKICNkZWZpbmUgSE9TVDFYX09QQ09ERV9OT1AgaG9zdDF4X29wY29kZV9u b25pbmNyKDAsIDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9zdDF4L2h3 L2hvc3QxeDA1X2hhcmR3YXJlLmggYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDVfaGFy ZHdhcmUuaAppbmRleCAyOTM3ZWJiNmJlMTEuLjZhYWZjYjVlOTdlNiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvaG9zdDF4L2h3L2hvc3QxeDA1X2hhcmR3YXJlLmgKKysrIGIvZHJpdmVycy9ncHUv aG9zdDF4L2h3L2hvc3QxeDA1X2hhcmR3YXJlLmgKQEAgLTEzNyw2ICsxMzcsMTYgQEAgc3RhdGlj IGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9nYXRoZXJfaW5jcih1bnNpZ25lZCBvZmZzZXQsIHVu c2lnbmVkIGNvdW50KQogCXJldHVybiAoNiA8PCAyOCkgfCAob2Zmc2V0IDw8IDE2KSB8IEJJVCgx NSkgfCBCSVQoMTQpIHwgY291bnQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9vcGNv ZGVfYWNxdWlyZV9tbG9jayh1bnNpZ25lZCBpZCkKK3sKKwlyZXR1cm4gKDE0IDw8IDI4KSB8IGlk OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfb3Bjb2RlX3JlbGVhc2VfbWxvY2sodW5z aWduZWQgaWQpCit7CisJcmV0dXJuICgxNCA8PCAyOCkgfCAoMSA8PCAyNCkgfCBpZDsKK30KKwog I2RlZmluZSBIT1NUMVhfT1BDT0RFX05PUCBob3N0MXhfb3Bjb2RlX25vbmluY3IoMCwgMCkKIAog I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4MDZfaGFyZHdh cmUuaCBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9ob3N0MXgwNl9oYXJkd2FyZS5oCmluZGV4IDMw MzljOTJlYTYwNS4uNjAxNDdkMjZhZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgv aHcvaG9zdDF4MDZfaGFyZHdhcmUuaAorKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaG9zdDF4 MDZfaGFyZHdhcmUuaApAQCAtMTM3LDYgKzEzNywxNiBAQCBzdGF0aWMgaW5saW5lIHUzMiBob3N0 MXhfb3Bjb2RlX2dhdGhlcl9pbmNyKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCiAJ cmV0dXJuICg2IDw8IDI4KSB8IChvZmZzZXQgPDwgMTYpIHwgQklUKDE1KSB8IEJJVCgxNCkgfCBj b3VudDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X29wY29kZV9hY3F1aXJlX21sb2Nr KHVuc2lnbmVkIGlkKQoreworCXJldHVybiAoMTQgPDwgMjgpIHwgaWQ7Cit9CisKK3N0YXRpYyBp bmxpbmUgdTMyIGhvc3QxeF9vcGNvZGVfcmVsZWFzZV9tbG9jayh1bnNpZ25lZCBpZCkKK3sKKwly ZXR1cm4gKDE0IDw8IDI4KSB8ICgxIDw8IDI0KSB8IGlkOworfQorCiAjZGVmaW5lIEhPU1QxWF9P UENPREVfTk9QIGhvc3QxeF9vcGNvZGVfbm9uaW5jcigwLCAwKQogCiAjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwMV9zeW5jLmggYi9kcml2ZXJzL2dw dS9ob3N0MXgvaHcvaHdfaG9zdDF4MDFfc3luYy5oCmluZGV4IDMxMjM4YzI4NWQ0Ni4uNDYzMGZl YzIyMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDFfc3lu Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwMV9zeW5jLmgKQEAgLTEy NSw2ICsxMjUsMTIgQEAgc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X3N5bmNfaXBfYnVzeV90aW1l b3V0X3Iodm9pZCkKIH0KICNkZWZpbmUgSE9TVDFYX1NZTkNfSVBfQlVTWV9USU1FT1VUIFwKIAlo b3N0MXhfc3luY19pcF9idXN5X3RpbWVvdXRfcigpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhf c3luY19tbG9ja19yKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gMHgyYzAgKyBpZCAqIFJF R0lTVEVSX1NUUklERTsKK30KKyNkZWZpbmUgSE9TVDFYX1NZTkNfTUxPQ0soaWQpIFwKKwlob3N0 MXhfc3luY19tbG9ja19yKGlkKQogc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X3N5bmNfbWxvY2tf b3duZXJfcih1bnNpZ25lZCBpbnQgaWQpCiB7CiAJcmV0dXJuIDB4MzQwICsgaWQgKiBSRUdJU1RF Ul9TVFJJREU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDJf c3luYy5oIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3X2hvc3QxeDAyX3N5bmMuaAppbmRleCA1 NDBjN2I2NTk5NWYuLmRlYzhlODEyYTExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvaG9zdDF4 L2h3L2h3X2hvc3QxeDAyX3N5bmMuaAorKysgYi9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9z dDF4MDJfc3luYy5oCkBAIC0xMjUsNiArMTI1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdTMyIGhvc3Qx eF9zeW5jX2lwX2J1c3lfdGltZW91dF9yKHZvaWQpCiB9CiAjZGVmaW5lIEhPU1QxWF9TWU5DX0lQ X0JVU1lfVElNRU9VVCBcCiAJaG9zdDF4X3N5bmNfaXBfYnVzeV90aW1lb3V0X3IoKQorc3RhdGlj IGlubGluZSB1MzIgaG9zdDF4X3N5bmNfbWxvY2tfcih1bnNpZ25lZCBpbnQgaWQpCit7CisJcmV0 dXJuIDB4MmMwICsgaWQgKiBSRUdJU1RFUl9TVFJJREU7Cit9CisjZGVmaW5lIEhPU1QxWF9TWU5D X01MT0NLKGlkKSBcCisJaG9zdDF4X3N5bmNfbWxvY2tfcihpZCkKIHN0YXRpYyBpbmxpbmUgdTMy IGhvc3QxeF9zeW5jX21sb2NrX293bmVyX3IodW5zaWduZWQgaW50IGlkKQogewogCXJldHVybiAw eDM0MCArIGlkICogUkVHSVNURVJfU1RSSURFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvaG9z dDF4L2h3L2h3X2hvc3QxeDA0X3N5bmMuaCBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0 MXgwNF9zeW5jLmgKaW5kZXggM2Q2YzhlYzY1OTM0Li45YTk1MWE0ZGIwN2YgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNF9zeW5jLmgKKysrIGIvZHJpdmVycy9n cHUvaG9zdDF4L2h3L2h3X2hvc3QxeDA0X3N5bmMuaApAQCAtMTI1LDYgKzEyNSwxMiBAQCBzdGF0 aWMgaW5saW5lIHUzMiBob3N0MXhfc3luY19pcF9idXN5X3RpbWVvdXRfcih2b2lkKQogfQogI2Rl ZmluZSBIT1NUMVhfU1lOQ19JUF9CVVNZX1RJTUVPVVQgXAogCWhvc3QxeF9zeW5jX2lwX2J1c3lf dGltZW91dF9yKCkKK3N0YXRpYyBpbmxpbmUgdTMyIGhvc3QxeF9zeW5jX21sb2NrX3IodW5zaWdu ZWQgaW50IGlkKQoreworCXJldHVybiAweDJjMCArIGlkICogUkVHSVNURVJfU1RSSURFOworfQor I2RlZmluZSBIT1NUMVhfU1lOQ19NTE9DSyhpZCkgXAorCWhvc3QxeF9zeW5jX21sb2NrX3IoaWQp CiBzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhfc3luY19tbG9ja19vd25lcl9yKHVuc2lnbmVkIGlu dCBpZCkKIHsKIAlyZXR1cm4gMHgzNDAgKyBpZCAqIFJFR0lTVEVSX1NUUklERTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNV9zeW5jLmggYi9kcml2ZXJzL2dw dS9ob3N0MXgvaHcvaHdfaG9zdDF4MDVfc3luYy5oCmluZGV4IGNhMTBlZWU1MDQ1Yy4uZTI5ZTJl MTlhNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDVfc3lu Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2hvc3QxeC9ody9od19ob3N0MXgwNV9zeW5jLmgKQEAgLTEy NSw2ICsxMjUsMTIgQEAgc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X3N5bmNfaXBfYnVzeV90aW1l b3V0X3Iodm9pZCkKIH0KICNkZWZpbmUgSE9TVDFYX1NZTkNfSVBfQlVTWV9USU1FT1VUIFwKIAlo b3N0MXhfc3luY19pcF9idXN5X3RpbWVvdXRfcigpCitzdGF0aWMgaW5saW5lIHUzMiBob3N0MXhf c3luY19tbG9ja19yKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gMHgyYzAgKyBpZCAqIFJF R0lTVEVSX1NUUklERTsKK30KKyNkZWZpbmUgSE9TVDFYX1NZTkNfTUxPQ0soaWQpIFwKKwlob3N0 MXhfc3luY19tbG9ja19yKGlkKQogc3RhdGljIGlubGluZSB1MzIgaG9zdDF4X3N5bmNfbWxvY2tf b3duZXJfcih1bnNpZ25lZCBpbnQgaWQpCiB7CiAJcmV0dXJuIDB4MzQwICsgaWQgKiBSRUdJU1RF Ul9TVFJJREU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZf aHlwZXJ2aXNvci5oIGIvZHJpdmVycy9ncHUvaG9zdDF4L2h3L2h3X2hvc3QxeDA2X2h5cGVydmlz b3IuaAppbmRleCBjMDVkYWI4YTE3OGIuLmJlNzM1MzBjMzU4NSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvaG9zdDF4L2h3L2h3X2hvc3QxeDA2X2h5cGVydmlzb3IuaAorKysgYi9kcml2ZXJzL2dw dS9ob3N0MXgvaHcvaHdfaG9zdDF4MDZfaHlwZXJ2aXNvci5oCkBAIC0xOCw2ICsxOCwxMSBAQAog I2RlZmluZSBIT1NUMVhfSFZfU1lOQ1BUX1BST1RfRU4JCQkweDFhYzQKICNkZWZpbmUgSE9TVDFY X0hWX1NZTkNQVF9QUk9UX0VOX0NIX0VOCQkJQklUKDEpCiAjZGVmaW5lIEhPU1QxWF9IVl9DSF9L RVJORUxfRklMVEVSX0dCVUZGRVIoeCkJCSgweDIwMjAgKyAoeCAqIDQpKQorI2RlZmluZSBIT1NU MVhfSFZfTUxPQ0soeCkJCQkJKDB4MjAzMCArICh4ICogNCkpCisjZGVmaW5lIEhPU1QxWF9IVl9N TE9DS19DSCh4KQkJCQkoKCh4KSAmIDB4M2YpIDw8IDIpCisjZGVmaW5lIEhPU1QxWF9IVl9NTE9D S19DSF9WKHgpCQkJCSgoKHgpID4+IDIpICYgMHgzZikKKyNkZWZpbmUgSE9TVDFYX0hWX01MT0NL X0xPQ0tFRAkJCQlCSVQoMCkKKyNkZWZpbmUgSE9TVDFYX0hWX01MT0NLX0xPQ0tFRF9WKHgpCQkJ KCh4KSAmIDB4MSkKICNkZWZpbmUgSE9TVDFYX0hWX0NNREZJRk9fUEVFS19DVFJMCQkJMHgyMzNj CiAjZGVmaW5lIEhPU1QxWF9IVl9DTURGSUZPX1BFRUtfQ1RSTF9BRERSKHgpCQkoeCkKICNkZWZp bmUgSE9TVDFYX0hWX0NNREZJRk9fUEVFS19DVFJMX0NIQU5ORUwoeCkJCSgoeCkgPDwgMTYpCi0t IAoyLjE0LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=