From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: [PATCH 01/11] dma-buf/sync_file: de-stage sync_file Date: Tue, 26 Jan 2016 16:30:16 -0200 Message-ID: <1453833026-24637-2-git-send-email-gustavo@padovan.org> References: <1453833026-24637-1-git-send-email-gustavo@padovan.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f195.google.com (mail-yk0-f195.google.com [209.85.160.195]) by gabe.freedesktop.org (Postfix) with ESMTPS id 86FE86E27A for ; Tue, 26 Jan 2016 10:30:40 -0800 (PST) Received: by mail-yk0-f195.google.com with SMTP id k129so15377363yke.3 for ; Tue, 26 Jan 2016 10:30:40 -0800 (PST) In-Reply-To: <1453833026-24637-1-git-send-email-gustavo@padovan.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Daniel Stone , Daniel Vetter , Riley Andrews , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Gustavo Padovan , John Harrison List-Id: dri-devel@lists.freedesktop.org RnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvLnVrPgoK c3luY19maWxlIGlzIHVzZWZ1bCB0byBjb25uZWN0IG9uZSBvciBtb3JlIGZlbmNlcyB0byB0aGUg ZmlsZS4gVGhlIGZpbGUgaXMKdXNlZCBieSB1c2Vyc3BhY2UgdG8gdHJhY2sgZmVuY2VzLgoKU2ln bmVkLW9mZi1ieTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNv LnVrPgotLS0KIGRyaXZlcnMvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBk cml2ZXJzL2RtYS1idWYvS2NvbmZpZyAgICAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZG1hLWJ1Zi9zeW5jX2Zp bGUuYyAgICAgICAgICB8IDQ0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyAgICAgIHwgICAxICsKIGRyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3N5bmMuYyAgICAgICB8IDQxOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaCAgICAgICB8IDEwNSArLS0t LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYyB8ICAgMSArCiBkcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmggfCAgNDQgLS0tLQogZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvdWFwaS9zeW5jLmggIHwgIDk3IC0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4L3N5 bmNfZmlsZS5oICAgICAgICAgICAgfCAxMjMgKysrKysrKysrKwogaW5jbHVkZS90cmFjZS9ldmVu dHMvc3luY19maWxlLmggICAgIHwgIDU3ICsrKysrCiBpbmNsdWRlL3VhcGkvbGludXgvc3luYy5o ICAgICAgICAgICAgfCAgOTcgKysrKysrKysKIDEzIGZpbGVzIGNoYW5nZWQsIDczNSBpbnNlcnRp b25zKCspLCA2NjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEt YnVmL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2RtYS1idWYvc3luY19maWxl LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvc3luY19maWxlLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX2ZpbGUuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC9zeW5jLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tj b25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggZDJhYzMzOS4uNDMwZjc2MSAxMDA2NDQKLS0t IGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtMTE0LDYgKzExNCw4 IEBAIHNvdXJjZSAiZHJpdmVycy9ydGMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2RtYS9L Y29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnIgorCiBzb3VyY2UgImRy aXZlcnMvZGNhL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWci CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZyBiL2RyaXZlcnMvZG1hLWJ1Zi9L Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjRiYzQKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitt ZW51ICJETUFCVUYgb3B0aW9ucyIKKworY29uZmlnIFNZTkNfRklMRQorCWJvb2wgInN5bmNfZmls ZSBzdXBwb3J0IGZvciBmZW5jZXMiCisJZGVmYXVsdCBuCisJc2VsZWN0IEFOT05fSU5PREVTCisJ c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5h YmxlcyB0aGUgZmVuY2UgZnJhbWV3b3JrIHN5bmNocm9uaXphdGlvbiB0byBleHBvcnQKKwkgIHN5 bmNfZmlsZXMgdG8gdXNlcnNwYWNlIHRoYXQgY2FuIHJlcHJlc2VudCBvbmUgb3IgbW9yZSBmZW5j ZXMuCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2 ZXJzL2RtYS1idWYvTWFrZWZpbGUKaW5kZXggNTdhNjc1Zi4uNGE0MjRlYyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQpA QCAtMSArMSwyIEBACiBvYmoteSA6PSBkbWEtYnVmLm8gZmVuY2UubyByZXNlcnZhdGlvbi5vIHNl cW5vLWZlbmNlLm8KK29iai0kKENPTkZJR19TWU5DX0ZJTEUpCQkrPSBzeW5jX2ZpbGUubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3N5bmNfZmlsZS5jIGIvZHJpdmVycy9kbWEtYnVmL3N5 bmNfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDc0ZGQKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvc3luY19maWxlLmMKQEAgLTAsMCArMSw0 NDAgQEAKKy8qCisgKiBkcml2ZXJzL2RtYS1idWYvc3luY19maWxlLmMKKyAqCisgKiBDb3B5cmln aHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwu aD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4K KyNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3N5bmMu aD4KKworI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRz L3N5bmNfZmlsZS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5j X2ZpbGVfZm9wczsKKworc3RhdGljIHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9hbGxvYyhp bnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2Zp bGU7CisKKwlzeW5jX2ZpbGUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc3lu Y19maWxlKQorCQlyZXR1cm4gTlVMTDsKKworCXN5bmNfZmlsZS0+ZmlsZSA9IGFub25faW5vZGVf Z2V0ZmlsZSgic3luY19maWxlIiwgJnN5bmNfZmlsZV9mb3BzLAorCQkJCQkgICAgIHN5bmNfZmls ZSwgMCk7CisJaWYgKElTX0VSUihzeW5jX2ZpbGUtPmZpbGUpKQorCQlnb3RvIGVycjsKKworCWty ZWZfaW5pdCgmc3luY19maWxlLT5rcmVmKTsKKwlzdHJsY3B5KHN5bmNfZmlsZS0+bmFtZSwgbmFt ZSwgc2l6ZW9mKHN5bmNfZmlsZS0+bmFtZSkpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3lu Y19maWxlLT53cSk7CisKKwlyZXR1cm4gc3luY19maWxlOworCitlcnI6CisJa2ZyZWUoc3luY19m aWxlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZmVuY2VfY2hlY2tfY2JfZnVu YyhzdHJ1Y3QgZmVuY2UgKmYsIHN0cnVjdCBmZW5jZV9jYiAqY2IpCit7CisJc3RydWN0IHN5bmNf ZmlsZV9jYiAqY2hlY2s7CisJc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOworCisJY2hlY2sg PSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBzeW5jX2ZpbGVfY2IsIGNiKTsKKwlzeW5jX2ZpbGUg PSBjaGVjay0+c3luY19maWxlOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN5bmNfZmls ZS0+c3RhdHVzKSkKKwkJd2FrZV91cF9hbGwoJnN5bmNfZmlsZS0+d3EpOworfQorCisvKiBUT0RP OiBpbXBsZW1lbnQgYSBjcmVhdGUgd2hpY2ggdGFrZXMgbW9yZSB0aGF0IG9uZSBmZW5jZSAqLwor c3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1 Y3QgZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKKworCXN5 bmNfZmlsZSA9IHN5bmNfZmlsZV9hbGxvYyhvZmZzZXRvZihzdHJ1Y3Qgc3luY19maWxlLCBjYnNb MV0pLAorCQkJCSAgICBuYW1lKTsKKwlpZiAoIXN5bmNfZmlsZSkKKwkJcmV0dXJuIE5VTEw7CisK KwlzeW5jX2ZpbGUtPm51bV9mZW5jZXMgPSAxOworCWF0b21pY19zZXQoJnN5bmNfZmlsZS0+c3Rh dHVzLCAxKTsKKworCXN5bmNfZmlsZS0+Y2JzWzBdLmZlbmNlID0gZmVuY2U7CisJc3luY19maWxl LT5jYnNbMF0uc3luY19maWxlID0gc3luY19maWxlOworCWlmIChmZW5jZV9hZGRfY2FsbGJhY2so ZmVuY2UsICZzeW5jX2ZpbGUtPmNic1swXS5jYiwKKwkJCSAgICAgICBmZW5jZV9jaGVja19jYl9m dW5jKSkKKwkJYXRvbWljX2RlYygmc3luY19maWxlLT5zdGF0dXMpOworCisJcmV0dXJuIHN5bmNf ZmlsZTsKK30KK0VYUE9SVF9TWU1CT0woc3luY19maWxlX2NyZWF0ZSk7CisKK3N0cnVjdCBzeW5j X2ZpbGUgKnN5bmNfZmlsZV9mZGdldChpbnQgZmQpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBm Z2V0KGZkKTsKKworCWlmICghZmlsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZmlsZS0+Zl9v cCAhPSAmc3luY19maWxlX2ZvcHMpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIGZpbGUtPnByaXZh dGVfZGF0YTsKKworZXJyOgorCWZwdXQoZmlsZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRf U1lNQk9MKHN5bmNfZmlsZV9mZGdldCk7CisKK3ZvaWQgc3luY19maWxlX3B1dChzdHJ1Y3Qgc3lu Y19maWxlICpzeW5jX2ZpbGUpCit7CisJZnB1dChzeW5jX2ZpbGUtPmZpbGUpOworfQorRVhQT1JU X1NZTUJPTChzeW5jX2ZpbGVfcHV0KTsKKwordm9pZCBzeW5jX2ZpbGVfaW5zdGFsbChzdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGUsIGludCBmZCkKK3sKKwlmZF9pbnN0YWxsKGZkLCBzeW5jX2Zp bGUtPmZpbGUpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfaW5zdGFsbCk7CisKK3N0YXRp YyB2b2lkIHN5bmNfZmlsZV9hZGRfZmVuY2Uoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBp bnQgKmksCisJCQkJc3RydWN0IGZlbmNlICpmZW5jZSkKK3sKKwlzeW5jX2ZpbGUtPmNic1sqaV0u ZmVuY2UgPSBmZW5jZTsKKwlzeW5jX2ZpbGUtPmNic1sqaV0uc3luY19maWxlID0gc3luY19maWxl OworCisJaWYgKCFmZW5jZV9hZGRfY2FsbGJhY2soZmVuY2UsICZzeW5jX2ZpbGUtPmNic1sqaV0u Y2IsCisJCQkJZmVuY2VfY2hlY2tfY2JfZnVuYykpIHsKKwkJZmVuY2VfZ2V0KGZlbmNlKTsKKwkJ KCppKSsrOworCX0KK30KKworc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlX21lcmdlKGNvbnN0 IGNoYXIgKm5hbWUsCisJCQkJICBzdHJ1Y3Qgc3luY19maWxlICphLCBzdHJ1Y3Qgc3luY19maWxl ICpiKQoreworCWludCBudW1fZmVuY2VzID0gYS0+bnVtX2ZlbmNlcyArIGItPm51bV9mZW5jZXM7 CisJc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOworCWludCBpLCBpX2EsIGlfYjsKKwl1bnNp Z25lZCBsb25nIHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgc3luY19maWxlLCBjYnNbbnVtX2ZlbmNl c10pOworCisJc3luY19maWxlID0gc3luY19maWxlX2FsbG9jKHNpemUsIG5hbWUpOworCWlmICgh c3luY19maWxlKQorCQlyZXR1cm4gTlVMTDsKKworCWF0b21pY19zZXQoJnN5bmNfZmlsZS0+c3Rh dHVzLCBudW1fZmVuY2VzKTsKKworCS8qCisJICogQXNzdW1lIHN5bmNfZmlsZSBhIGFuZCBiIGFy ZSBib3RoIG9yZGVyZWQgYW5kIGhhdmUgbm8KKwkgKiBkdXBsaWNhdGVzIHdpdGggdGhlIHNhbWUg Y29udGV4dC4KKwkgKgorCSAqIElmIGEgc3luY19maWxlIGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0 aCBzeW5jX2ZpbGVfbWVyZ2UKKwkgKiBhbmQgc3luY19maWxlX2NyZWF0ZSwgdGhpcyBpcyBhIHJl YXNvbmFibGUgYXNzdW1wdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSBpX2EgPSBpX2IgPSAwOyBpX2Eg PCBhLT5udW1fZmVuY2VzICYmIGlfYiA8IGItPm51bV9mZW5jZXM7ICkgeworCQlzdHJ1Y3QgZmVu Y2UgKnB0X2EgPSBhLT5jYnNbaV9hXS5mZW5jZTsKKwkJc3RydWN0IGZlbmNlICpwdF9iID0gYi0+ Y2JzW2lfYl0uZmVuY2U7CisKKwkJaWYgKHB0X2EtPmNvbnRleHQgPCBwdF9iLT5jb250ZXh0KSB7 CisJCQlzeW5jX2ZpbGVfYWRkX2ZlbmNlKHN5bmNfZmlsZSwgJmksIHB0X2EpOworCisJCQlpX2Er KzsKKwkJfSBlbHNlIGlmIChwdF9hLT5jb250ZXh0ID4gcHRfYi0+Y29udGV4dCkgeworCQkJc3lu Y19maWxlX2FkZF9mZW5jZShzeW5jX2ZpbGUsICZpLCBwdF9iKTsKKworCQkJaV9iKys7CisJCX0g ZWxzZSB7CisJCQlpZiAocHRfYS0+c2Vxbm8gLSBwdF9iLT5zZXFubyA8PSBJTlRfTUFYKQorCQkJ CXN5bmNfZmlsZV9hZGRfZmVuY2Uoc3luY19maWxlLCAmaSwgcHRfYSk7CisJCQllbHNlCisJCQkJ c3luY19maWxlX2FkZF9mZW5jZShzeW5jX2ZpbGUsICZpLCBwdF9iKTsKKworCQkJaV9hKys7CisJ CQlpX2IrKzsKKwkJfQorCX0KKworCWZvciAoOyBpX2EgPCBhLT5udW1fZmVuY2VzOyBpX2ErKykK KwkJc3luY19maWxlX2FkZF9mZW5jZShzeW5jX2ZpbGUsICZpLCBhLT5jYnNbaV9hXS5mZW5jZSk7 CisKKwlmb3IgKDsgaV9iIDwgYi0+bnVtX2ZlbmNlczsgaV9iKyspCisJCXN5bmNfZmlsZV9hZGRf ZmVuY2Uoc3luY19maWxlLCAmaSwgYi0+Y2JzW2lfYl0uZmVuY2UpOworCisJaWYgKG51bV9mZW5j ZXMgPiBpKQorCQlhdG9taWNfc3ViKG51bV9mZW5jZXMgLSBpLCAmc3luY19maWxlLT5zdGF0dXMp OworCXN5bmNfZmlsZS0+bnVtX2ZlbmNlcyA9IGk7CisKKwlyZXR1cm4gc3luY19maWxlOworfQor RVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfbWVyZ2UpOworCitpbnQgc3luY19maWxlX3dhaXQoc3Ry dWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBsb25nIHRpbWVvdXQpCit7CisJbG9uZyByZXQ7CisJ aW50IGk7CisKKwlpZiAodGltZW91dCA8IDApCisJCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElN RU9VVDsKKwllbHNlCisJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCisJ dHJhY2Vfc3luY193YWl0KHN5bmNfZmlsZSwgMSk7CisJZm9yIChpID0gMDsgaSA8IHN5bmNfZmls ZS0+bnVtX2ZlbmNlczsgKytpKQorCQl0cmFjZV9mZW5jZShzeW5jX2ZpbGUtPmNic1tpXS5mZW5j ZSk7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3luY19maWxlLT53 cSwKKwkJCQkJICAgICAgIGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cykgPD0gMCwKKwkJ CQkJICAgICAgIHRpbWVvdXQpOworCXRyYWNlX3N5bmNfd2FpdChzeW5jX2ZpbGUsIDApOworCisJ aWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CisJ CWlmICh0aW1lb3V0KQorCQkJcHJfaW5mbygic3luY19maWxlIHRpbWVvdXQgb24gWyVwXSBhZnRl ciAlZG1zXG4iLAorCQkJCXN5bmNfZmlsZSwgamlmZmllc190b19tc2Vjcyh0aW1lb3V0KSk7CisJ CXJldHVybiAtRVRJTUU7CisJfQorCisJcmV0ID0gYXRvbWljX3JlYWQoJnN5bmNfZmlsZS0+c3Rh dHVzKTsKKwlpZiAocmV0KQorCQlwcl9pbmZvKCJzeW5jX2ZpbGUgZXJyb3IgJWxkIG9uIFslcF1c biIsIHJldCwgc3luY19maWxlKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHN5 bmNfZmlsZV93YWl0KTsKKworc3RhdGljIHZvaWQgc3luY19maWxlX2ZyZWUoc3RydWN0IGtyZWYg KmtyZWYpCit7CisJc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlID0gY29udGFpbmVyX29mKGty ZWYsIHN0cnVjdCBzeW5jX2ZpbGUsCisJCQkJCQkgICAgIGtyZWYpOworCWludCBpOworCisJZm9y IChpID0gMDsgaSA8IHN5bmNfZmlsZS0+bnVtX2ZlbmNlczsgKytpKSB7CisJCWZlbmNlX3JlbW92 ZV9jYWxsYmFjayhzeW5jX2ZpbGUtPmNic1tpXS5mZW5jZSwKKwkJCQkgICAgICAmc3luY19maWxl LT5jYnNbaV0uY2IpOworCQlmZW5jZV9wdXQoc3luY19maWxlLT5jYnNbaV0uZmVuY2UpOworCX0K KworCWtmcmVlKHN5bmNfZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgc3luY19maWxlX3JlbGVhc2Uo c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHN5bmNf ZmlsZSAqc3luY19maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJa3JlZl9wdXQoJnN5bmNf ZmlsZS0+a3JlZiwgc3luY19maWxlX2ZyZWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5z aWduZWQgaW50IHN5bmNfZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3 YWl0KQoreworCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKKwlpbnQgc3RhdHVzOworCisJcG9sbF93YWl0KGZpbGUsICZzeW5jX2ZpbGUtPndxLCB3YWl0 KTsKKworCXN0YXR1cyA9IGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cyk7CisKKwlpZiAo IXN0YXR1cykKKwkJcmV0dXJuIFBPTExJTjsKKwllbHNlIGlmIChzdGF0dXMgPCAwKQorCQlyZXR1 cm4gUE9MTEVSUjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgc3luY19maWxlX2lvY3Rs X3dhaXQoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLAorCQkJCSB1bnNpZ25lZCBsb25nIGFy ZykKK3sKKwlfX3MzMiB2YWx1ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsICh2b2lk IF9fdXNlciAqKWFyZywgc2l6ZW9mKHZhbHVlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0 dXJuIHN5bmNfZmlsZV93YWl0KHN5bmNfZmlsZSwgdmFsdWUpOworfQorCitzdGF0aWMgbG9uZyBz eW5jX2ZpbGVfaW9jdGxfbWVyZ2Uoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLAorCQkJCSAg dW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NM T0VYRUMpOworCWludCBlcnI7CisJc3RydWN0IHN5bmNfZmlsZSAqZmVuY2UyLCAqZmVuY2UzOwor CXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiBm ZDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgX191c2VyICopYXJnLCBzaXpl b2YoZGF0YSkpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX3B1dF9mZDsKKwl9CisK KwlmZW5jZTIgPSBzeW5jX2ZpbGVfZmRnZXQoZGF0YS5mZDIpOworCWlmICghZmVuY2UyKSB7CisJ CWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX3B1dF9mZDsKKwl9CisKKwlkYXRhLm5hbWVbc2l6 ZW9mKGRhdGEubmFtZSkgLSAxXSA9ICdcMCc7CisJZmVuY2UzID0gc3luY19maWxlX21lcmdlKGRh dGEubmFtZSwgc3luY19maWxlLCBmZW5jZTIpOworCWlmICghZmVuY2UzKSB7CisJCWVyciA9IC1F Tk9NRU07CisJCWdvdG8gZXJyX3B1dF9mZW5jZTI7CisJfQorCisJZGF0YS5mZW5jZSA9IGZkOwor CWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmZGF0YSwgc2l6ZW9mKGRhdGEp KSkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGVycl9wdXRfZmVuY2UzOworCX0KKworCXN5 bmNfZmlsZV9pbnN0YWxsKGZlbmNlMywgZmQpOworCXN5bmNfZmlsZV9wdXQoZmVuY2UyKTsKKwly ZXR1cm4gMDsKKworZXJyX3B1dF9mZW5jZTM6CisJc3luY19maWxlX3B1dChmZW5jZTMpOworCitl cnJfcHV0X2ZlbmNlMjoKKwlzeW5jX2ZpbGVfcHV0KGZlbmNlMik7CisKK2Vycl9wdXRfZmQ6CisJ cHV0X3VudXNlZF9mZChmZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzeW5jX2Zp bGxfcHRfaW5mbyhzdHJ1Y3QgZmVuY2UgKmZlbmNlLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sK KwlzdHJ1Y3QgZmVuY2VfaW5mbyAqaW5mbyA9IGRhdGE7CisJaW50IHJldDsKKworCWlmIChzaXpl IDwgc2l6ZW9mKHN0cnVjdCBmZW5jZV9pbmZvKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZv LT5sZW4gPSBzaXplb2Yoc3RydWN0IGZlbmNlX2luZm8pOworCisJaWYgKGZlbmNlLT5vcHMtPmZp bGxfZHJpdmVyX2RhdGEpIHsKKwkJcmV0ID0gZmVuY2UtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShm ZW5jZSwgaW5mby0+ZHJpdmVyX2RhdGEsCisJCQkJCQkgICBzaXplIC0gc2l6ZW9mKCppbmZvKSk7 CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlpbmZvLT5sZW4gKz0gcmV0Owor CX0KKworCXN0cmxjcHkoaW5mby0+b2JqX25hbWUsIGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9u YW1lKGZlbmNlKSwKKwkJc2l6ZW9mKGluZm8tPm9ial9uYW1lKSk7CisJc3RybGNweShpbmZvLT5k cml2ZXJfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X2RyaXZlcl9uYW1lKGZlbmNlKSwKKwkJc2l6ZW9m KGluZm8tPmRyaXZlcl9uYW1lKSk7CisJaWYgKGZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKKwkJ aW5mby0+c3RhdHVzID0gZmVuY2UtPnN0YXR1cyA+PSAwID8gMSA6IGZlbmNlLT5zdGF0dXM7CisJ ZWxzZQorCQlpbmZvLT5zdGF0dXMgPSAwOworCWluZm8tPnRpbWVzdGFtcF9ucyA9IGt0aW1lX3Rv X25zKGZlbmNlLT50aW1lc3RhbXApOworCisJcmV0dXJuIGluZm8tPmxlbjsKK30KKworc3RhdGlj IGxvbmcgc3luY19maWxlX2lvY3RsX2ZlbmNlX2luZm8oc3RydWN0IHN5bmNfZmlsZSAqc3luY19m aWxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc3luY19maWxl X2luZm9fZGF0YSAqZGF0YTsKKwlfX3UzMiBzaXplOworCV9fdTMyIGxlbiA9IDA7CisJaW50IHJl dCwgaTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmc2l6ZSwgKHZvaWQgX191c2VyICopYXJnLCBz aXplb2Yoc2l6ZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaXplIDwgc2l6ZW9mKHN0 cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc2l6 ZSA+IDQwOTYpCisJCXNpemUgPSA0MDk2OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0cmxjcHkoZGF0YS0+ bmFtZSwgc3luY19maWxlLT5uYW1lLCBzaXplb2YoZGF0YS0+bmFtZSkpOworCWRhdGEtPnN0YXR1 cyA9IGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cyk7CisJaWYgKGRhdGEtPnN0YXR1cyA+ PSAwKQorCQlkYXRhLT5zdGF0dXMgPSAhZGF0YS0+c3RhdHVzOworCisJbGVuID0gc2l6ZW9mKHN0 cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhKTsKKworCWZvciAoaSA9IDA7IGkgPCBzeW5jX2ZpbGUt Pm51bV9mZW5jZXM7ICsraSkgeworCQlzdHJ1Y3QgZmVuY2UgKmZlbmNlID0gc3luY19maWxlLT5j YnNbaV0uZmVuY2U7CisKKwkJcmV0ID0gc3luY19maWxsX3B0X2luZm8oZmVuY2UsICh1OCAqKWRh dGEgKyBsZW4sIHNpemUgLSBsZW4pOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisK KwkJbGVuICs9IHJldDsKKwl9CisKKwlkYXRhLT5sZW4gPSBsZW47CisKKwlpZiAoY29weV90b191 c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgZGF0YSwgbGVuKSkKKwkJcmV0ID0gLUVGQVVMVDsKKwll bHNlCisJCXJldCA9IDA7CisKK291dDoKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBsb25nIHN5bmNfZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWdu ZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc3luY19m aWxlICpzeW5jX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgewor CWNhc2UgU1lOQ19JT0NfV0FJVDoKKwkJcmV0dXJuIHN5bmNfZmlsZV9pb2N0bF93YWl0KHN5bmNf ZmlsZSwgYXJnKTsKKworCWNhc2UgU1lOQ19JT0NfTUVSR0U6CisJCXJldHVybiBzeW5jX2ZpbGVf aW9jdGxfbWVyZ2Uoc3luY19maWxlLCBhcmcpOworCisJY2FzZSBTWU5DX0lPQ19GRU5DRV9JTkZP OgorCQlyZXR1cm4gc3luY19maWxlX2lvY3RsX2ZlbmNlX2luZm8oc3luY19maWxlLCBhcmcpOwor CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2ZpbGVfZm9wcyA9IHsKKwkucmVsZWFzZSA9IHN5bmNf ZmlsZV9yZWxlYXNlLAorCS5wb2xsID0gc3luY19maWxlX3BvbGwsCisJLnVubG9ja2VkX2lvY3Rs ID0gc3luY19maWxlX2lvY3RsLAorCS5jb21wYXRfaW9jdGwgPSBzeW5jX2ZpbGVfaW9jdGwsCit9 OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVy cy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZwppbmRleCBiZDkwZDIwLi4yNzU2OTg4IDEwMDY0NAot LS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL0tjb25maWcKQEAgLTUyLDYgKzUyLDcgQEAgY29uZmlnIFNXX1NZTkMKIAlib29s ICJTb2Z0d2FyZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0cyIKIAlkZWZhdWx0IG4KIAlkZXBlbmRz IG9uIFNZTkMKKwlkZXBlbmRzIG9uIFNZTkNfRklMRQogCS0tLWhlbHAtLS0KIAkgIEEgc3luYyBv YmplY3QgZHJpdmVyIHRoYXQgdXNlcyBhIDMyYml0IGNvdW50ZXIgdG8gY29vcmRpbmF0ZQogCSAg c3luY2hyb25pemF0aW9uLiAgVXNlZnVsIHdoZW4gdGhlcmUgaXMgbm8gaGFyZHdhcmUgcHJpbWl0 aXZlIGJhY2tpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYyBi L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYwppbmRleCA1ZmE0Nzc5Li4xZTFjMDA5IDEw MDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKKysrIGIvZHJpdmVycy9z dGFnaW5nL2FuZHJvaWQvc3luYy5jCkBAIC0xNiwxMCArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGlu dXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4 L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2lu Y2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIs NyArMjksNiBAQAogI2luY2x1ZGUgInRyYWNlL3N5bmMuaCIKIAogc3RhdGljIGNvbnN0IHN0cnVj dCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBzeW5jX2ZpbGVfZm9wczsKIAogc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNf dGltZWxpbmVfY3JlYXRlKGNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAogCQkJ CQkgICBpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTEzNiwyMDggKzEzMiw2IEBAIHN0 cnVjdCBmZW5jZSAqc3luY19wdF9jcmVhdGUoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaiwgaW50 IHNpemUpCiB9CiBFWFBPUlRfU1lNQk9MKHN5bmNfcHRfY3JlYXRlKTsKIAotc3RhdGljIHN0cnVj dCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9hbGxvYyhpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkK LXsKLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Ci0KLQlzeW5jX2ZpbGUgPSBremFsbG9j KHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghc3luY19maWxlKQotCQlyZXR1cm4gTlVMTDsKLQot CXN5bmNfZmlsZS0+ZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZSgic3luY19maWxlIiwgJnN5bmNf ZmlsZV9mb3BzLAotCQkJCQkgICAgIHN5bmNfZmlsZSwgMCk7Ci0JaWYgKElTX0VSUihzeW5jX2Zp bGUtPmZpbGUpKQotCQlnb3RvIGVycjsKLQotCWtyZWZfaW5pdCgmc3luY19maWxlLT5rcmVmKTsK LQlzdHJsY3B5KHN5bmNfZmlsZS0+bmFtZSwgbmFtZSwgc2l6ZW9mKHN5bmNfZmlsZS0+bmFtZSkp OwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmc3luY19maWxlLT53cSk7Ci0KLQlyZXR1cm4gc3lu Y19maWxlOwotCi1lcnI6Ci0Ja2ZyZWUoc3luY19maWxlKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQot c3RhdGljIHZvaWQgZmVuY2VfY2hlY2tfY2JfZnVuYyhzdHJ1Y3QgZmVuY2UgKmYsIHN0cnVjdCBm ZW5jZV9jYiAqY2IpCi17Ci0Jc3RydWN0IHN5bmNfZmlsZV9jYiAqY2hlY2s7Ci0Jc3RydWN0IHN5 bmNfZmlsZSAqc3luY19maWxlOwotCi0JY2hlY2sgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBz eW5jX2ZpbGVfY2IsIGNiKTsKLQlzeW5jX2ZpbGUgPSBjaGVjay0+c3luY19maWxlOwotCi0JaWYg KGF0b21pY19kZWNfYW5kX3Rlc3QoJnN5bmNfZmlsZS0+c3RhdHVzKSkKLQkJd2FrZV91cF9hbGwo JnN5bmNfZmlsZS0+d3EpOwotfQotCi0vKiBUT0RPOiBpbXBsZW1lbnQgYSBjcmVhdGUgd2hpY2gg dGFrZXMgbW9yZSB0aGF0IG9uZSBmZW5jZSAqLwotc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxl X2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVj dCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKLQotCXN5bmNfZmlsZSA9IHN5bmNfZmlsZV9hbGxvYyhv ZmZzZXRvZihzdHJ1Y3Qgc3luY19maWxlLCBjYnNbMV0pLAotCQkJCSAgICBuYW1lKTsKLQlpZiAo IXN5bmNfZmlsZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzeW5jX2ZpbGUtPm51bV9mZW5jZXMgPSAx OwotCWF0b21pY19zZXQoJnN5bmNfZmlsZS0+c3RhdHVzLCAxKTsKLQotCXN5bmNfZmlsZS0+Y2Jz WzBdLmZlbmNlID0gZmVuY2U7Ci0Jc3luY19maWxlLT5jYnNbMF0uc3luY19maWxlID0gc3luY19m aWxlOwotCWlmIChmZW5jZV9hZGRfY2FsbGJhY2soZmVuY2UsICZzeW5jX2ZpbGUtPmNic1swXS5j YiwKLQkJCSAgICAgICBmZW5jZV9jaGVja19jYl9mdW5jKSkKLQkJYXRvbWljX2RlYygmc3luY19m aWxlLT5zdGF0dXMpOwotCi0Jc3luY19maWxlX2RlYnVnX2FkZChzeW5jX2ZpbGUpOwotCi0JcmV0 dXJuIHN5bmNfZmlsZTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19maWxlX2NyZWF0ZSk7Ci0KLXN0 cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9mZGdldChpbnQgZmQpCi17Ci0Jc3RydWN0IGZpbGUg KmZpbGUgPSBmZ2V0KGZkKTsKLQotCWlmICghZmlsZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAo ZmlsZS0+Zl9vcCAhPSAmc3luY19maWxlX2ZvcHMpCi0JCWdvdG8gZXJyOwotCi0JcmV0dXJuIGZp bGUtPnByaXZhdGVfZGF0YTsKLQotZXJyOgotCWZwdXQoZmlsZSk7Ci0JcmV0dXJuIE5VTEw7Ci19 Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZmlsZV9mZGdldCk7Ci0KLXZvaWQgc3luY19maWxlX3B1dChz dHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUpCi17Ci0JZnB1dChzeW5jX2ZpbGUtPmZpbGUpOwot fQotRVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfcHV0KTsKLQotdm9pZCBzeW5jX2ZpbGVfaW5zdGFs bChzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsIGludCBmZCkKLXsKLQlmZF9pbnN0YWxsKGZk LCBzeW5jX2ZpbGUtPmZpbGUpOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfaW5zdGFsbCk7 Ci0KLXN0YXRpYyB2b2lkIHN5bmNfZmlsZV9hZGRfcHQoc3RydWN0IHN5bmNfZmlsZSAqc3luY19m aWxlLCBpbnQgKmksCi0JCQkgICAgIHN0cnVjdCBmZW5jZSAqZmVuY2UpCi17Ci0Jc3luY19maWxl LT5jYnNbKmldLmZlbmNlID0gZmVuY2U7Ci0Jc3luY19maWxlLT5jYnNbKmldLnN5bmNfZmlsZSA9 IHN5bmNfZmlsZTsKLQotCWlmICghZmVuY2VfYWRkX2NhbGxiYWNrKGZlbmNlLCAmc3luY19maWxl LT5jYnNbKmldLmNiLAotCQkJCWZlbmNlX2NoZWNrX2NiX2Z1bmMpKSB7Ci0JCWZlbmNlX2dldChm ZW5jZSk7Ci0JCSgqaSkrKzsKLQl9Ci19Ci0KLXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9t ZXJnZShjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgc3RydWN0IHN5bmNfZmlsZSAqYSwgc3RydWN0 IHN5bmNfZmlsZSAqYikKLXsKLQlpbnQgbnVtX2ZlbmNlcyA9IGEtPm51bV9mZW5jZXMgKyBiLT5u dW1fZmVuY2VzOwotCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKLQlpbnQgaSwgaV9hLCBp X2I7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmlsZSwgY2Jz W251bV9mZW5jZXNdKTsKLQotCXN5bmNfZmlsZSA9IHN5bmNfZmlsZV9hbGxvYyhzaXplLCBuYW1l KTsKLQlpZiAoIXN5bmNfZmlsZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhdG9taWNfc2V0KCZzeW5j X2ZpbGUtPnN0YXR1cywgbnVtX2ZlbmNlcyk7Ci0KLQkvKgotCSAqIEFzc3VtZSBzeW5jX2ZpbGUg YSBhbmQgYiBhcmUgYm90aCBvcmRlcmVkIGFuZCBoYXZlIG5vCi0JICogZHVwbGljYXRlcyB3aXRo IHRoZSBzYW1lIGNvbnRleHQuCi0JICoKLQkgKiBJZiBhIHN5bmNfZmlsZSBjYW4gb25seSBiZSBj cmVhdGVkIHdpdGggc3luY19maWxlX21lcmdlCi0JICogYW5kIHN5bmNfZmlsZV9jcmVhdGUsIHRo aXMgaXMgYSByZWFzb25hYmxlIGFzc3VtcHRpb24uCi0JICovCi0JZm9yIChpID0gaV9hID0gaV9i ID0gMDsgaV9hIDwgYS0+bnVtX2ZlbmNlcyAmJiBpX2IgPCBiLT5udW1fZmVuY2VzOyApIHsKLQkJ c3RydWN0IGZlbmNlICpwdF9hID0gYS0+Y2JzW2lfYV0uZmVuY2U7Ci0JCXN0cnVjdCBmZW5jZSAq cHRfYiA9IGItPmNic1tpX2JdLmZlbmNlOwotCi0JCWlmIChwdF9hLT5jb250ZXh0IDwgcHRfYi0+ Y29udGV4dCkgewotCQkJc3luY19maWxlX2FkZF9wdChzeW5jX2ZpbGUsICZpLCBwdF9hKTsKLQot CQkJaV9hKys7Ci0JCX0gZWxzZSBpZiAocHRfYS0+Y29udGV4dCA+IHB0X2ItPmNvbnRleHQpIHsK LQkJCXN5bmNfZmlsZV9hZGRfcHQoc3luY19maWxlLCAmaSwgcHRfYik7Ci0KLQkJCWlfYisrOwot CQl9IGVsc2UgewotCQkJaWYgKHB0X2EtPnNlcW5vIC0gcHRfYi0+c2Vxbm8gPD0gSU5UX01BWCkK LQkJCQlzeW5jX2ZpbGVfYWRkX3B0KHN5bmNfZmlsZSwgJmksIHB0X2EpOwotCQkJZWxzZQotCQkJ CXN5bmNfZmlsZV9hZGRfcHQoc3luY19maWxlLCAmaSwgcHRfYik7Ci0KLQkJCWlfYSsrOwotCQkJ aV9iKys7Ci0JCX0KLQl9Ci0KLQlmb3IgKDsgaV9hIDwgYS0+bnVtX2ZlbmNlczsgaV9hKyspCi0J CXN5bmNfZmlsZV9hZGRfcHQoc3luY19maWxlLCAmaSwgYS0+Y2JzW2lfYV0uZmVuY2UpOwotCi0J Zm9yICg7IGlfYiA8IGItPm51bV9mZW5jZXM7IGlfYisrKQotCQlzeW5jX2ZpbGVfYWRkX3B0KHN5 bmNfZmlsZSwgJmksIGItPmNic1tpX2JdLmZlbmNlKTsKLQotCWlmIChudW1fZmVuY2VzID4gaSkK LQkJYXRvbWljX3N1YihudW1fZmVuY2VzIC0gaSwgJnN5bmNfZmlsZS0+c3RhdHVzKTsKLQlzeW5j X2ZpbGUtPm51bV9mZW5jZXMgPSBpOwotCi0Jc3luY19maWxlX2RlYnVnX2FkZChzeW5jX2ZpbGUp OwotCXJldHVybiBzeW5jX2ZpbGU7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZmlsZV9tZXJnZSk7 Ci0KLWludCBzeW5jX2ZpbGVfd2FpdChzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsIGxvbmcg dGltZW91dCkKLXsKLQlsb25nIHJldDsKLQlpbnQgaTsKLQotCWlmICh0aW1lb3V0IDwgMCkKLQkJ dGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCWVsc2UKLQkJdGltZW91dCA9IG1zZWNz X3RvX2ppZmZpZXModGltZW91dCk7Ci0KLQl0cmFjZV9zeW5jX3dhaXQoc3luY19maWxlLCAxKTsK LQlmb3IgKGkgPSAwOyBpIDwgc3luY19maWxlLT5udW1fZmVuY2VzOyArK2kpCi0JCXRyYWNlX2Zl bmNlKHN5bmNfZmlsZS0+Y2JzW2ldLmZlbmNlKTsKLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVw dGlibGVfdGltZW91dChzeW5jX2ZpbGUtPndxLAotCQkJCQkgICAgICAgYXRvbWljX3JlYWQoJnN5 bmNfZmlsZS0+c3RhdHVzKSA8PSAwLAotCQkJCQkgICAgICAgdGltZW91dCk7Ci0JdHJhY2Vfc3lu Y193YWl0KHN5bmNfZmlsZSwgMCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlyZXR1cm4gcmV0Owot CX0gZWxzZSBpZiAocmV0ID09IDApIHsKLQkJaWYgKHRpbWVvdXQpIHsKLQkJCXByX2luZm8oInN5 bmNfZmlsZSB0aW1lb3V0IG9uIFslcF0gYWZ0ZXIgJWRtc1xuIiwKLQkJCQlzeW5jX2ZpbGUsIGpp ZmZpZXNfdG9fbXNlY3ModGltZW91dCkpOwotCQkJc3luY19kdW1wKCk7Ci0JCX0KLQkJcmV0dXJu IC1FVElNRTsKLQl9Ci0KLQlyZXQgPSBhdG9taWNfcmVhZCgmc3luY19maWxlLT5zdGF0dXMpOwot CWlmIChyZXQpIHsKLQkJcHJfaW5mbygic3luY19maWxlIGVycm9yICVsZCBvbiBbJXBdXG4iLCBy ZXQsIHN5bmNfZmlsZSk7Ci0JCXN5bmNfZHVtcCgpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotRVhQ T1JUX1NZTUJPTChzeW5jX2ZpbGVfd2FpdCk7Ci0KIHN0YXRpYyBjb25zdCBjaGFyICphbmRyb2lk X2ZlbmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQogewogCXN0cnVjdCBz eW5jX3RpbWVsaW5lICpwYXJlbnQgPSBmZW5jZV9wYXJlbnQoZmVuY2UpOwpAQCAtNDM3LDIxNiAr MjMxLDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHMg PSB7CiAJLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IGFuZHJvaWRfZmVuY2VfdGltZWxpbmVfdmFsdWVf c3RyLAogfTsKIAotc3RhdGljIHZvaWQgc3luY19maWxlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYp Ci17Ci0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlID0gY29udGFpbmVyX29mKGtyZWYsIHN0 cnVjdCBzeW5jX2ZpbGUsCi0JCQkJCQkgICAgIGtyZWYpOwotCWludCBpOwotCi0JZm9yIChpID0g MDsgaSA8IHN5bmNfZmlsZS0+bnVtX2ZlbmNlczsgKytpKSB7Ci0JCWZlbmNlX3JlbW92ZV9jYWxs YmFjayhzeW5jX2ZpbGUtPmNic1tpXS5mZW5jZSwKLQkJCQkgICAgICAmc3luY19maWxlLT5jYnNb aV0uY2IpOwotCQlmZW5jZV9wdXQoc3luY19maWxlLT5jYnNbaV0uZmVuY2UpOwotCX0KLQotCWtm cmVlKHN5bmNfZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19maWxlX3JlbGVhc2Uoc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHN5bmNfZmlsZSAq c3luY19maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3luY19maWxlX2RlYnVnX3JlbW92 ZShzeW5jX2ZpbGUpOwotCi0Ja3JlZl9wdXQoJnN5bmNfZmlsZS0+a3JlZiwgc3luY19maWxlX2Zy ZWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN5bmNfZmlsZV9wb2xs KHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXN0cnVjdCBzeW5jX2Zp bGUgKnN5bmNfZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgc3RhdHVzOwotCi0JcG9s bF93YWl0KGZpbGUsICZzeW5jX2ZpbGUtPndxLCB3YWl0KTsKLQotCXN0YXR1cyA9IGF0b21pY19y ZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cyk7Ci0KLQlpZiAoIXN0YXR1cykKLQkJcmV0dXJuIFBPTExJ TjsKLQllbHNlIGlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gUE9MTEVSUjsKLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGxvbmcgc3luY19maWxlX2lvY3RsX3dhaXQoc3RydWN0IHN5bmNfZmlsZSAq c3luY19maWxlLAotCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JX19zMzIgdmFsdWU7Ci0K LQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZih2 YWx1ZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBzeW5jX2ZpbGVfd2FpdChzeW5j X2ZpbGUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGxvbmcgc3luY19maWxlX2lvY3RsX21lcmdlKHN0 cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKLXsK LQlpbnQgZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7Ci0JaW50IGVycjsKLQlz dHJ1Y3Qgc3luY19maWxlICpmZW5jZTIsICpmZW5jZTM7Ci0Jc3RydWN0IHN5bmNfbWVyZ2VfZGF0 YSBkYXRhOwotCi0JaWYgKGZkIDwgMCkKLQkJcmV0dXJuIGZkOwotCi0JaWYgKGNvcHlfZnJvbV91 c2VyKCZkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihkYXRhKSkpIHsKLQkJZXJyID0g LUVGQVVMVDsKLQkJZ290byBlcnJfcHV0X2ZkOwotCX0KLQotCWZlbmNlMiA9IHN5bmNfZmlsZV9m ZGdldChkYXRhLmZkMik7Ci0JaWYgKCFmZW5jZTIpIHsKLQkJZXJyID0gLUVOT0VOVDsKLQkJZ290 byBlcnJfcHV0X2ZkOwotCX0KLQotCWRhdGEubmFtZVtzaXplb2YoZGF0YS5uYW1lKSAtIDFdID0g J1wwJzsKLQlmZW5jZTMgPSBzeW5jX2ZpbGVfbWVyZ2UoZGF0YS5uYW1lLCBzeW5jX2ZpbGUsIGZl bmNlMik7Ci0JaWYgKCFmZW5jZTMpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcHV0 X2ZlbmNlMjsKLQl9Ci0KLQlkYXRhLmZlbmNlID0gZmQ7Ci0JaWYgKGNvcHlfdG9fdXNlcigodm9p ZCBfX3VzZXIgKilhcmcsICZkYXRhLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7 Ci0JCWdvdG8gZXJyX3B1dF9mZW5jZTM7Ci0JfQotCi0Jc3luY19maWxlX2luc3RhbGwoZmVuY2Uz LCBmZCk7Ci0Jc3luY19maWxlX3B1dChmZW5jZTIpOwotCXJldHVybiAwOwotCi1lcnJfcHV0X2Zl bmNlMzoKLQlzeW5jX2ZpbGVfcHV0KGZlbmNlMyk7Ci0KLWVycl9wdXRfZmVuY2UyOgotCXN5bmNf ZmlsZV9wdXQoZmVuY2UyKTsKLQotZXJyX3B1dF9mZDoKLQlwdXRfdW51c2VkX2ZkKGZkKTsKLQly ZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHN5bmNfZmlsbF9wdF9pbmZvKHN0cnVjdCBmZW5j ZSAqZmVuY2UsIHZvaWQgKmRhdGEsIGludCBzaXplKQotewotCXN0cnVjdCBzeW5jX3B0X2luZm8g KmluZm8gPSBkYXRhOwotCWludCByZXQ7Ci0KLQlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc3lu Y19wdF9pbmZvKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbmZvLT5sZW4gPSBzaXplb2Yoc3Ry dWN0IHN5bmNfcHRfaW5mbyk7Ci0KLQlpZiAoZmVuY2UtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YSkg ewotCQlyZXQgPSBmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9kYXRhKGZlbmNlLCBpbmZvLT5kcml2 ZXJfZGF0YSwKLQkJCQkJCSAgIHNpemUgLSBzaXplb2YoKmluZm8pKTsKLQkJaWYgKHJldCA8IDAp Ci0JCQlyZXR1cm4gcmV0OwotCi0JCWluZm8tPmxlbiArPSByZXQ7Ci0JfQotCi0Jc3RybGNweShp bmZvLT5vYmpfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUoZmVuY2UpLAotCQlz aXplb2YoaW5mby0+b2JqX25hbWUpKTsKLQlzdHJsY3B5KGluZm8tPmRyaXZlcl9uYW1lLCBmZW5j ZS0+b3BzLT5nZXRfZHJpdmVyX25hbWUoZmVuY2UpLAotCQlzaXplb2YoaW5mby0+ZHJpdmVyX25h bWUpKTsKLQlpZiAoZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2UpKQotCQlpbmZvLT5zdGF0dXMgPSBm ZW5jZS0+c3RhdHVzID49IDAgPyAxIDogZmVuY2UtPnN0YXR1czsKLQllbHNlCi0JCWluZm8tPnN0 YXR1cyA9IDA7Ci0JaW5mby0+dGltZXN0YW1wX25zID0ga3RpbWVfdG9fbnMoZmVuY2UtPnRpbWVz dGFtcCk7Ci0KLQlyZXR1cm4gaW5mby0+bGVuOwotfQotCi1zdGF0aWMgbG9uZyBzeW5jX2ZpbGVf aW9jdGxfZmVuY2VfaW5mbyhzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsCi0JCQkJCXVuc2ln bmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhICpkYXRhOwotCV9f dTMyIHNpemU7Ci0JX191MzIgbGVuID0gMDsKLQlpbnQgcmV0LCBpOwotCi0JaWYgKGNvcHlfZnJv bV91c2VyKCZzaXplLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzaXplKSkpCi0JCXJldHVy biAtRUZBVUxUOwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfZmlsZV9pbmZvX2Rh dGEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzaXplID4gNDA5NikKLQkJc2l6ZSA9IDQw OTY7Ci0KLQlkYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0J CXJldHVybiAtRU5PTUVNOwotCi0Jc3RybGNweShkYXRhLT5uYW1lLCBzeW5jX2ZpbGUtPm5hbWUs IHNpemVvZihkYXRhLT5uYW1lKSk7Ci0JZGF0YS0+c3RhdHVzID0gYXRvbWljX3JlYWQoJnN5bmNf ZmlsZS0+c3RhdHVzKTsKLQlpZiAoZGF0YS0+c3RhdHVzID49IDApCi0JCWRhdGEtPnN0YXR1cyA9 ICFkYXRhLT5zdGF0dXM7Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHN5bmNfZmlsZV9pbmZvX2Rh dGEpOwotCi0JZm9yIChpID0gMDsgaSA8IHN5bmNfZmlsZS0+bnVtX2ZlbmNlczsgKytpKSB7Ci0J CXN0cnVjdCBmZW5jZSAqZmVuY2UgPSBzeW5jX2ZpbGUtPmNic1tpXS5mZW5jZTsKLQotCQlyZXQg PSBzeW5jX2ZpbGxfcHRfaW5mbyhmZW5jZSwgKHU4ICopZGF0YSArIGxlbiwgc2l6ZSAtIGxlbik7 Ci0KLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlsZW4gKz0gcmV0OwotCX0KLQot CWRhdGEtPmxlbiA9IGxlbjsKLQotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJn LCBkYXRhLCBsZW4pKQotCQlyZXQgPSAtRUZBVUxUOwotCWVsc2UKLQkJcmV0ID0gMDsKLQotb3V0 OgotCWtmcmVlKGRhdGEpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGxvbmcgc3luY19m aWxlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgICB1 bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUgPSBmaWxl LT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1lOQ19JT0NfV0FJVDoK LQkJcmV0dXJuIHN5bmNfZmlsZV9pb2N0bF93YWl0KHN5bmNfZmlsZSwgYXJnKTsKLQotCWNhc2Ug U1lOQ19JT0NfTUVSR0U6Ci0JCXJldHVybiBzeW5jX2ZpbGVfaW9jdGxfbWVyZ2Uoc3luY19maWxl LCBhcmcpOwotCi0JY2FzZSBTWU5DX0lPQ19GRU5DRV9JTkZPOgotCQlyZXR1cm4gc3luY19maWxl X2lvY3RsX2ZlbmNlX2luZm8oc3luY19maWxlLCBhcmcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJu IC1FTk9UVFk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBz eW5jX2ZpbGVfZm9wcyA9IHsKLQkucmVsZWFzZSA9IHN5bmNfZmlsZV9yZWxlYXNlLAotCS5wb2xs ID0gc3luY19maWxlX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsID0gc3luY19maWxlX2lvY3RsLAot CS5jb21wYXRfaW9jdGwgPSBzeW5jX2ZpbGVfaW9jdGwsCi19OwotCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5j LmgKaW5kZXggODk4MGI1NS4uZmIyMDlmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fu ZHJvaWQvc3luYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaApAQCAtMTgs MTMgKzE4LDExIEBACiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9s aXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0 Lmg+CiAjaW5jbHVkZSA8bGludXgvZmVuY2UuaD4KLQotI2luY2x1ZGUgInVhcGkvc3luYy5oIgor I2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvc3luYy5o PgogCiBzdHJ1Y3Qgc3luY190aW1lbGluZTsKLXN0cnVjdCBzeW5jX2ZpbGU7CiAKIC8qKgogICog c3RydWN0IHN5bmNfdGltZWxpbmVfb3BzIC0gc3luYyBvYmplY3QgaW1wbGVtZW50YXRpb24gb3Bz CkBAIC05NCwzOCArOTIsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpm ZW5jZV9wYXJlbnQoc3RydWN0IGZlbmNlICpmZW5jZSkKIAkJCSAgICBjaGlsZF9saXN0X2xvY2sp OwogfQogCi1zdHJ1Y3Qgc3luY19maWxlX2NiIHsKLQlzdHJ1Y3QgZmVuY2VfY2IgY2I7Ci0Jc3Ry dWN0IGZlbmNlICpmZW5jZTsKLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Ci19OwotCi0v KioKLSAqIHN0cnVjdCBzeW5jX2ZpbGUgLSBzeW5jIGZpbGUgdG8gZXhwb3J0IHRvIHRoZSB1c2Vy c3BhY2UKLSAqIEBmaWxlOgkJZmlsZSByZXByZXNlbnRpbmcgdGhpcyBmZW5jZQotICogQGtyZWY6 CQlyZWZlcmVuY2UgY291bnQgb24gZmVuY2UuCi0gKiBAbmFtZToJCW5hbWUgb2Ygc3luY19maWxl LiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSAqIEBzeW5jX2ZpbGVfbGlzdDoJbWVtYmVyc2hpcCBp biBnbG9iYWwgZmlsZSBsaXN0Ci0gKiBAbnVtX2ZlbmNlcwkJbnVtYmVyIG9mIHN5bmNfcHRzIGlu IHRoZSBmZW5jZQotICogQHdxOgkJCXdhaXQgcXVldWUgZm9yIGZlbmNlIHNpZ25hbGluZwotICog QHN0YXR1czoJCTA6IHNpZ25hbGVkLCA+MDphY3RpdmUsIDwwOiBlcnJvcgotICogQGNiczoJCXN5 bmNfcHRzIGNhbGxiYWNrIGluZm9ybWF0aW9uCi0gKi8KLXN0cnVjdCBzeW5jX2ZpbGUgewotCXN0 cnVjdCBmaWxlCQkqZmlsZTsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQljaGFyCQkJbmFtZVszMl07 Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0Jc3RydWN0IGxpc3RfaGVhZAlzeW5jX2ZpbGVfbGlz dDsKLSNlbmRpZgotCWludCBudW1fZmVuY2VzOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJd3E7Ci0J YXRvbWljX3QJCXN0YXR1czsKLQotCXN0cnVjdCBzeW5jX2ZpbGVfY2IJY2JzW107Ci19OwotCiAv KgogICogQVBJIGZvciBzeW5jX3RpbWVsaW5lIGltcGxlbWVudGVycwogICovCkBAIC0xNzUsNzMg KzE0MSw2IEBAIHZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3RydWN0IHN5bmNfdGltZWxpbmUg Km9iaik7CiAgKi8KIHN0cnVjdCBmZW5jZSAqc3luY19wdF9jcmVhdGUoc3RydWN0IHN5bmNfdGlt ZWxpbmUgKnBhcmVudCwgaW50IHNpemUpOwogCi0vKioKLSAqIHN5bmNfZmVuY2VfY3JlYXRlKCkg LSBjcmVhdGVzIGEgc3luYyBmZW5jZQotICogQG5hbWU6CW5hbWUgb2YgZmVuY2UgdG8gY3JlYXRl Ci0gKiBAZmVuY2U6CWZlbmNlIHRvIGFkZCB0byB0aGUgc3luY19mZW5jZQotICoKLSAqIENyZWF0 ZXMgYSBzeW5jX2ZpbGUgY29udGFpbmcgQGZlbmNlLiBPbmNlIHRoaXMgaXMgY2FsbGVkLCB0aGUg c3luY19maWxlCi0gKiB0YWtlcyBvd25lcnNoaXAgb2YgQGZlbmNlLgotICovCi1zdHJ1Y3Qgc3lu Y19maWxlICpzeW5jX2ZpbGVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBmZW5jZSAq ZmVuY2UpOwotCi0vKgotICogQVBJIGZvciBzeW5jX2ZpbGUgY29uc3VtZXJzCi0gKi8KLQotLyoq Ci0gKiBzeW5jX2ZpbGVfbWVyZ2UoKSAtIG1lcmdlIHR3byBzeW5jX2ZpbGVzCi0gKiBAbmFtZToJ bmFtZSBvZiBuZXcgZmVuY2UKLSAqIEBhOgkJc3luY19maWxlIGEKLSAqIEBiOgkJc3luY19maWxl IGIKLSAqCi0gKiBDcmVhdGVzIGEgbmV3IHN5bmNfZmlsZSB3aGljaCBjb250YWlucyBjb3BpZXMg b2YgYWxsIHRoZSBmZW5jZXMgaW4gYm90aAotICogQGEgYW5kIEBiLiAgQGEgYW5kIEBiIHJlbWFp biB2YWxpZCwgaW5kZXBlbmRlbnQgc3luY19maWxlLiBSZXR1cm5zIHRoZQotICogbmV3IG1lcmdl ZCBzeW5jX2ZpbGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgotICovCi1zdHJ1Y3Qgc3luY19m aWxlICpzeW5jX2ZpbGVfbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgc3RydWN0IHN5 bmNfZmlsZSAqYSwgc3RydWN0IHN5bmNfZmlsZSAqYik7Ci0KLS8qKgotICogc3luY19maWxlX2Zk Z2V0KCkgLSBnZXQgYSBzeW5jX2ZpbGUgZnJvbSBhbiBmZAotICogQGZkOgkJZmQgcmVmZXJlbmNp bmcgYSBmZW5jZQotICoKLSAqIEVuc3VyZXMgQGZkIHJlZmVyZW5jZXMgYSB2YWxpZCBzeW5jX2Zp bGUsIGluY3JlbWVudHMgdGhlIHJlZmNvdW50IG9mIHRoZQotICogYmFja2luZyBmaWxlLiBSZXR1 cm5zIHRoZSBzeW5jX2ZpbGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgotICovCi1zdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGVfZmRnZXQoaW50IGZkKTsKLQotLyoqCi0gKiBzeW5jX2ZpbGVf cHV0KCkgLSBwdXRzIGEgcmVmZXJlbmNlIG9mIGEgc3luY19maWxlCi0gKiBAc3luY19maWxlOglz eW5jX2ZpbGUgdG8gcHV0Ci0gKgotICogUHV0cyBhIHJlZmVyZW5jZSBvbiBAc3luY19mZW5jZS4g IElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUKLSAqIHN5bmNfZmlsIGFuZCBhbGwg aXQncyBzeW5jX3B0cyB3aWxsIGJlIGZyZWVkCi0gKi8KLXZvaWQgc3luY19maWxlX3B1dChzdHJ1 Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUpOwotCi0vKioKLSAqIHN5bmNfZmlsZV9pbnN0YWxsKCkg LSBpbnN0YWxscyBhIHN5bmNfZmlsZSBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yCi0gKiBAc3luY19m aWxlOglzeW5jX2ZpbGUgdG8gaW5zdGFsbAotICogQGZkOgkJZmlsZSBkZXNjcmlwdG9yIGluIHdo aWNoIHRvIGluc3RhbGwgdGhlIGZlbmNlCi0gKgotICogSW5zdGFsbHMgQHN5bmNfZmlsZSBpbnRv IEBmZC4gIEBmZCdzIHNob3VsZCBiZSBhY3F1aXJlZCB0aHJvdWdoCi0gKiBnZXRfdW51c2VkX2Zk X2ZsYWdzKE9fQ0xPRVhFQykuCi0gKi8KLXZvaWQgc3luY19maWxlX2luc3RhbGwoc3RydWN0IHN5 bmNfZmlsZSAqc3luY19maWxlLCBpbnQgZmQpOwotCi0vKioKLSAqIHN5bmNfZmlsZV93YWl0KCkg LSB3YWl0IG9uIHN5bmMgZmlsZQotICogQHN5bmNfZmlsZToJZmlsZSB0byB3YWl0IG9uCi0gKiBA dGllbW91dDoJdGltZW91dCBpbiBtcwotICoKLSAqIFdhaXQgZm9yIEBzeW5jX2ZpbGUgdG8gYmUg c2lnbmFsZWQgb3IgaGF2ZSBhbiBlcnJvci4gV2FpdHMgaW5kZWZpbml0ZWx5Ci0gKiBpZiBAdGlt ZW91dCA8IDAuCi0gKgotICogUmV0dXJucyAwIGlmIGZlbmNlIHNpZ25hbGVkLCA+IDAgaWYgaXQg aXMgc3RpbGwgYWN0aXZlIGFuZCA8MCBvbiBlcnJvcgotICovCi1pbnQgc3luY19maWxlX3dhaXQo c3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBsb25nIHRpbWVvdXQpOwotCiAjaWZkZWYgQ09O RklHX0RFQlVHX0ZTCiAKIHZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19hZGQoc3RydWN0IHN5bmNf dGltZWxpbmUgKm9iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5j X2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMKaW5kZXggN2U1 M2RhNy4uYjM3NDEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19k ZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYwpAQCAtMjcs NiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9h bm9uX2lub2Rlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5oPgorI2luY2x1ZGUgPGxpbnV4 L3N5bmNfZmlsZS5oPgogI2luY2x1ZGUgInN3X3N5bmMuaCIKIAogI2lmZGVmIENPTkZJR19ERUJV R19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oIGIv ZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oCmluZGV4IDg3YzYwZTkuLmEwZjgw ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNlL3N5bmMuaAorKysg Yi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKQEAgLTMyLDUwICszMiw2IEBA IFRSQUNFX0VWRU5UKHN5bmNfdGltZWxpbmUsCiAJVFBfcHJpbnRrKCJuYW1lPSVzIHZhbHVlPSVz IiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT52YWx1ZSkKICk7CiAKLVRSQUNFX0VWRU5UKHN5 bmNfd2FpdCwKLQlUUF9QUk9UTyhzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsIGludCBiZWdp biksCi0KLQlUUF9BUkdTKHN5bmNfZmlsZSwgYmVnaW4pLAotCi0JVFBfU1RSVUNUX19lbnRyeSgK LQkJCV9fc3RyaW5nKG5hbWUsIHN5bmNfZmlsZS0+bmFtZSkKLQkJCV9fZmllbGQoczMyLCBzdGF0 dXMpCi0JCQlfX2ZpZWxkKHUzMiwgYmVnaW4pCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQkJ X19hc3NpZ25fc3RyKG5hbWUsIHN5bmNfZmlsZS0+bmFtZSk7Ci0JCQlfX2VudHJ5LT5zdGF0dXMg PSBhdG9taWNfcmVhZCgmc3luY19maWxlLT5zdGF0dXMpOwotCQkJX19lbnRyeS0+YmVnaW4gPSBi ZWdpbjsKLQkpLAotCi0JVFBfcHJpbnRrKCIlcyBuYW1lPSVzIHN0YXRlPSVkIiwgX19lbnRyeS0+ YmVnaW4gPyAiYmVnaW4iIDogImVuZCIsCi0JCQlfX2dldF9zdHIobmFtZSksIF9fZW50cnktPnN0 YXR1cykKLSk7Ci0KLVRSQUNFX0VWRU5UKGZlbmNlLAotCVRQX1BST1RPKHN0cnVjdCBmZW5jZSAq ZmVuY2UpLAotCi0JVFBfQVJHUyhmZW5jZSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX3N0 cmluZyh0aW1lbGluZSwgZmVuY2UtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUoZmVuY2UpKQotCQlf X2FycmF5KGNoYXIsIHZhbHVlLCAzMikKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fYXNz aWduX3N0cih0aW1lbGluZSwgZmVuY2UtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUoZmVuY2UpKTsK LQkJaWYgKGZlbmNlLT5vcHMtPmZlbmNlX3ZhbHVlX3N0cikgewotCQkJZmVuY2UtPm9wcy0+ZmVu Y2VfdmFsdWVfc3RyKGZlbmNlLCBfX2VudHJ5LT52YWx1ZSwKLQkJCQkJCQlzaXplb2YoX19lbnRy eS0+dmFsdWUpKTsKLQkJfSBlbHNlIHsKLQkJCV9fZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKLQkJ fQotCSksCi0KLQlUUF9wcmludGsoIm5hbWU9JXMgdmFsdWU9JXMiLCBfX2dldF9zdHIodGltZWxp bmUpLCBfX2VudHJ5LT52YWx1ZSkKLSk7Ci0KICNlbmRpZiAvKiBpZiAhZGVmaW5lZChfVFJBQ0Vf U1lOQ19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKSAqLwogCiAvKiBUaGlz IHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9hbmRyb2lkL3VhcGkvc3luYy5oIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFw aS9zeW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGViNjkuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zeW5jLmgKKysrIC9kZXYvbnVsbApA QCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX1VBUElfTElOVVhf U1lOQ19ICi0jZGVmaW5lIF9VQVBJX0xJTlVYX1NZTkNfSAotCi0jaW5jbHVkZSA8bGludXgvaW9j dGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKioKLSAqIHN0cnVjdCBzeW5jX21l cmdlX2RhdGEgLSBkYXRhIHBhc3NlZCB0byBtZXJnZSBpb2N0bAotICogQGZkMjoJZmlsZSBkZXNj cmlwdG9yIG9mIHNlY29uZCBmZW5jZQotICogQG5hbWU6CW5hbWUgb2YgbmV3IGZlbmNlCi0gKiBA ZmVuY2U6CXJldHVybnMgdGhlIGZkIG9mIHRoZSBuZXcgZmVuY2UgdG8gdXNlcnNwYWNlCi0gKi8K LXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgewotCV9fczMyCWZkMjsgLyogZmQgb2Ygc2Vjb25kIGZl bmNlICovCi0JY2hhcgluYW1lWzMyXTsgLyogbmFtZSBvZiBuZXcgZmVuY2UgKi8KLQlfX3MzMglm ZW5jZTsgLyogZmQgb24gbmV3bHkgY3JlYXRlZCBmZW5jZSAqLwotfTsKLQotLyoqCi0gKiBzdHJ1 Y3Qgc3luY19wdF9pbmZvIC0gZGV0YWlsZWQgc3luY19wdCBpbmZvcm1hdGlvbgotICogQGxlbjoJ CWxlbmd0aCBvZiBzeW5jX3B0X2luZm8gaW5jbHVkaW5nIGFueSBkcml2ZXJfZGF0YQotICogQG9i al9uYW1lOgkJbmFtZSBvZiBwYXJlbnQgc3luY190aW1lbGluZQotICogQGRyaXZlcl9uYW1lOglu YW1lIG9mIGRyaXZlciBpbXBsZW1lbnRpbmcgdGhlIHBhcmVudAotICogQHN0YXR1czoJCXN0YXR1 cyBvZiB0aGUgc3luY19wdCAwOmFjdGl2ZSAxOnNpZ25hbGVkIDwwOmVycm9yCi0gKiBAdGltZXN0 YW1wX25zOgl0aW1lc3RhbXAgb2Ygc3RhdHVzIGNoYW5nZSBpbiBuYW5vc2Vjb25kcwotICogQGRy aXZlcl9kYXRhOglhbnkgZHJpdmVyIGRlcGVuZGVudCBkYXRhCi0gKi8KLXN0cnVjdCBzeW5jX3B0 X2luZm8gewotCV9fdTMyCWxlbjsKLQljaGFyCW9ial9uYW1lWzMyXTsKLQljaGFyCWRyaXZlcl9u YW1lWzMyXTsKLQlfX3MzMglzdGF0dXM7Ci0JX191NjQJdGltZXN0YW1wX25zOwotCi0JX191OAlk cml2ZXJfZGF0YVswXTsKLX07Ci0KLS8qKgotICogc3RydWN0IHN5bmNfZmlsZV9pbmZvX2RhdGEg LSBkYXRhIHJldHVybmVkIGZyb20gZmVuY2UgaW5mbyBpb2N0bAotICogQGxlbjoJaW9jdGwgY2Fs bGVyIHdyaXRlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGl0cyBwYXNzaW5nIGluLgotICoJCWlv Y3RsIHJldHVybnMgbGVuZ3RoIG9mIHN5bmNfZmlsZV9pbmZvX2RhdGEgcmV0dXJuZWQgdG8KLSAq CQl1c2Vyc3BhY2UgaW5jbHVkaW5nIHB0X2luZm8uCi0gKiBAbmFtZToJbmFtZSBvZiBmZW5jZQot ICogQHN0YXR1czoJc3RhdHVzIG9mIGZlbmNlLiAxOiBzaWduYWxlZCAwOmFjdGl2ZSA8MDplcnJv cgotICogQHB0X2luZm86CWEgc3luY19wdF9pbmZvIHN0cnVjdCBmb3IgZXZlcnkgc3luY19wdCBp biB0aGUgZmVuY2UKLSAqLwotc3RydWN0IHN5bmNfZmlsZV9pbmZvX2RhdGEgewotCV9fdTMyCWxl bjsKLQljaGFyCW5hbWVbMzJdOwotCV9fczMyCXN0YXR1czsKLQotCV9fdTgJcHRfaW5mb1swXTsK LX07Ci0KLSNkZWZpbmUgU1lOQ19JT0NfTUFHSUMJCSc+JwotCi0vKioKLSAqIERPQzogU1lOQ19J T0NfV0FJVCAtIHdhaXQgZm9yIGEgZmVuY2UgdG8gc2lnbmFsCi0gKgotICogcGFzcyB0aW1lb3V0 IGluIG1pbGxpc2Vjb25kcy4gIFdhaXRzIGluZGVmaW5pdGVseSB0aW1lb3V0IDwgMC4KLSAqLwot I2RlZmluZSBTWU5DX0lPQ19XQUlUCQlfSU9XKFNZTkNfSU9DX01BR0lDLCAwLCBfX3MzMikKLQot LyoqCi0gKiBET0M6IFNZTkNfSU9DX01FUkdFIC0gbWVyZ2UgdHdvIGZlbmNlcwotICoKLSAqIFRh a2VzIGEgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YS4gIENyZWF0ZXMgYSBuZXcgZmVuY2UgY29udGFp bmluZyBjb3BpZXMgb2YKLSAqIHRoZSBzeW5jX3B0cyBpbiBib3RoIHRoZSBjYWxsaW5nIGZkIGFu ZCBzeW5jX21lcmdlX2RhdGEuZmQyLiAgUmV0dXJucyB0aGUKLSAqIG5ldyBmZW5jZSdzIGZkIGlu IHN5bmNfbWVyZ2VfZGF0YS5mZW5jZQotICovCi0jZGVmaW5lIFNZTkNfSU9DX01FUkdFCQlfSU9X UihTWU5DX0lPQ19NQUdJQywgMSwgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSkKLQotLyoqCi0gKiBE T0M6IFNZTkNfSU9DX0ZFTkNFX0lORk8gLSBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gYSBm ZW5jZQotICoKLSAqIFRha2VzIGEgc3RydWN0IHN5bmNfZmlsZV9pbmZvX2RhdGEgd2l0aCBleHRy YSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHB0X2luZm8uCi0gKiBDYWxsZXIgc2hvdWxkIHdyaXRlIHRo ZSBzaXplIG9mIHRoZSBidWZmZXIgaW50byBsZW4uICBPbiByZXR1cm4sIGxlbiBpcwotICogdXBk YXRlZCB0byByZWZsZWN0IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBzeW5jX2ZpbGVfaW5mb19kYXRh IGluY2x1ZGluZwotICogcHRfaW5mby4KLSAqCi0gKiBwdF9pbmZvIGlzIGEgYnVmZmVyIGNvbnRh aW5pbmcgc3luY19wdF9pbmZvcyBmb3IgZXZlcnkgc3luY19wdCBpbiB0aGUgZmVuY2UuCi0gKiBU byBpdGVyYXRlIG92ZXIgdGhlIHN5bmNfcHRfaW5mb3MsIHVzZSB0aGUgc3luY19wdF9pbmZvLmxl biBmaWVsZC4KLSAqLwotI2RlZmluZSBTWU5DX0lPQ19GRU5DRV9JTkZPCV9JT1dSKFNZTkNfSU9D X01BR0lDLCAyLFwKLQlzdHJ1Y3Qgc3luY19maWxlX2luZm9fZGF0YSkKLQotI2VuZGlmIC8qIF9V QVBJX0xJTlVYX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jX2ZpbGUu aCBiL2luY2x1ZGUvbGludXgvc3luY19maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYWMyYjRjNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3luY19m aWxlLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L3N5bmNfZmlsZS5o CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZTkNfRklMRV9ICisjZGVmaW5l IF9MSU5VWF9TWU5DX0ZJTEVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRl IDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93 YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZmVuY2UuaD4KKworc3RydWN0IHN5bmNfZmlsZV9jYiB7 CisJc3RydWN0IGZlbmNlX2NiIGNiOworCXN0cnVjdCBmZW5jZSAqZmVuY2U7CisJc3RydWN0IHN5 bmNfZmlsZSAqc3luY19maWxlOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY19maWxlIC0gc3lu YyBmaWxlIHRvIGV4cG9ydCB0byB0aGUgdXNlcnNwYWNlCisgKiBAZmlsZToJCWZpbGUgcmVwcmVz ZW50aW5nIHRoaXMgZmVuY2UKKyAqIEBrcmVmOgkJcmVmZXJlbmNlIGNvdW50IG9uIGZlbmNlLgor ICogQG5hbWU6CQluYW1lIG9mIHN5bmNfZmlsZS4gIFVzZWZ1bCBmb3IgZGVidWdnaW5nCisgKiBA c3luY19maWxlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gZ2xvYmFsIGZpbGUgbGlzdAorICogQG51bV9m ZW5jZXMJCW51bWJlciBvZiBzeW5jX3B0cyBpbiB0aGUgZmVuY2UKKyAqIEB3cToJCQl3YWl0IHF1 ZXVlIGZvciBmZW5jZSBzaWduYWxpbmcKKyAqIEBzdGF0dXM6CQkwOiBzaWduYWxlZCwgPjA6YWN0 aXZlLCA8MDogZXJyb3IKKyAqIEBjYnM6CQlzeW5jX3B0cyBjYWxsYmFjayBpbmZvcm1hdGlvbgor ICovCitzdHJ1Y3Qgc3luY19maWxlIHsKKwlzdHJ1Y3QgZmlsZQkJKmZpbGU7CisJc3RydWN0IGty ZWYJCWtyZWY7CisJY2hhcgkJCW5hbWVbMzJdOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0 cnVjdCBsaXN0X2hlYWQJc3luY19maWxlX2xpc3Q7CisjZW5kaWYKKwlpbnQgbnVtX2ZlbmNlczsK KworCXdhaXRfcXVldWVfaGVhZF90CXdxOworCWF0b21pY190CQlzdGF0dXM7CisKKwlzdHJ1Y3Qg c3luY19maWxlX2NiCWNic1tdOworfTsKKworLyoqCisgKiBzeW5jX2ZpbGVfY3JlYXRlKCkgLSBj cmVhdGVzIGEgc3luYyBmZW5jZQorICogQG5hbWU6CW5hbWUgb2YgZmVuY2UgdG8gY3JlYXRlCisg KiBAZmVuY2U6CWZlbmNlIHRvIGFkZCB0byB0aGUgc3luY19mZW5jZQorICoKKyAqIENyZWF0ZXMg YSBzeW5jX2ZpbGUgY29udGFpbmcgQGZlbmNlLiBPbmNlIHRoaXMgaXMgY2FsbGVkLCB0aGUgc3lu Y19maWxlCisgKiB0YWtlcyBvd25lcnNoaXAgb2YgQGZlbmNlLgorICovCitzdHJ1Y3Qgc3luY19m aWxlICpzeW5jX2ZpbGVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBmZW5jZSAqZmVu Y2UpOworCisvKgorICogQVBJIGZvciBzeW5jX2ZpbGUgY29uc3VtZXJzCisgKi8KKworLyoqCisg KiBzeW5jX2ZpbGVfbWVyZ2UoKSAtIG1lcmdlIHR3byBzeW5jX2ZpbGVzCisgKiBAbmFtZToJbmFt ZSBvZiBuZXcgZmVuY2UKKyAqIEBhOgkJc3luY19maWxlIGEKKyAqIEBiOgkJc3luY19maWxlIGIK KyAqCisgKiBDcmVhdGVzIGEgbmV3IHN5bmNfZmlsZSB3aGljaCBjb250YWlucyBjb3BpZXMgb2Yg YWxsIHRoZSBmZW5jZXMgaW4gYm90aAorICogQGEgYW5kIEBiLiAgQGEgYW5kIEBiIHJlbWFpbiB2 YWxpZCwgaW5kZXBlbmRlbnQgc3luY19maWxlLiBSZXR1cm5zIHRoZQorICogbmV3IG1lcmdlZCBz eW5jX2ZpbGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitzdHJ1Y3Qgc3luY19maWxl ICpzeW5jX2ZpbGVfbWVyZ2UoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc3RydWN0IHN5bmNf ZmlsZSAqYSwgc3RydWN0IHN5bmNfZmlsZSAqYik7CisKKy8qKgorICogc3luY19maWxlX2ZkZ2V0 KCkgLSBnZXQgYSBzeW5jX2ZpbGUgZnJvbSBhbiBmZAorICogQGZkOgkJZmQgcmVmZXJlbmNpbmcg YSBmZW5jZQorICoKKyAqIEVuc3VyZXMgQGZkIHJlZmVyZW5jZXMgYSB2YWxpZCBzeW5jX2ZpbGUs IGluY3JlbWVudHMgdGhlIHJlZmNvdW50IG9mIHRoZQorICogYmFja2luZyBmaWxlLiBSZXR1cm5z IHRoZSBzeW5jX2ZpbGUgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitzdHJ1Y3Qgc3lu Y19maWxlICpzeW5jX2ZpbGVfZmRnZXQoaW50IGZkKTsKKworLyoqCisgKiBzeW5jX2ZpbGVfcHV0 KCkgLSBwdXRzIGEgcmVmZXJlbmNlIG9mIGEgc3luY19maWxlCisgKiBAc3luY19maWxlOglzeW5j X2ZpbGUgdG8gcHV0CisgKgorICogUHV0cyBhIHJlZmVyZW5jZSBvbiBAc3luY19mZW5jZS4gIElm IHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUKKyAqIHN5bmNfZmlsIGFuZCBhbGwgaXQn cyBzeW5jX3B0cyB3aWxsIGJlIGZyZWVkCisgKi8KK3ZvaWQgc3luY19maWxlX3B1dChzdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGUpOworCisvKioKKyAqIHN5bmNfZmlsZV9pbnN0YWxsKCkgLSBp bnN0YWxscyBhIHN5bmNfZmlsZSBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yCisgKiBAc3luY19maWxl OglzeW5jX2ZpbGUgdG8gaW5zdGFsbAorICogQGZkOgkJZmlsZSBkZXNjcmlwdG9yIGluIHdoaWNo IHRvIGluc3RhbGwgdGhlIGZlbmNlCisgKgorICogSW5zdGFsbHMgQHN5bmNfZmlsZSBpbnRvIEBm ZC4gIEBmZCdzIHNob3VsZCBiZSBhY3F1aXJlZCB0aHJvdWdoCisgKiBnZXRfdW51c2VkX2ZkX2Zs YWdzKE9fQ0xPRVhFQykuCisgKi8KK3ZvaWQgc3luY19maWxlX2luc3RhbGwoc3RydWN0IHN5bmNf ZmlsZSAqc3luY19maWxlLCBpbnQgZmQpOworCisvKioKKyAqIHN5bmNfZmlsZV93YWl0KCkgLSB3 YWl0IG9uIHN5bmMgZmlsZQorICogQHN5bmNfZmlsZToJZmlsZSB0byB3YWl0IG9uCisgKiBAdGll bW91dDoJdGltZW91dCBpbiBtcworICoKKyAqIFdhaXQgZm9yIEBzeW5jX2ZpbGUgdG8gYmUgc2ln bmFsZWQgb3IgaGF2ZSBhbiBlcnJvci4gV2FpdHMgaW5kZWZpbml0ZWx5CisgKiBpZiBAdGltZW91 dCA8IDAuCisgKgorICogUmV0dXJucyAwIGlmIGZlbmNlIHNpZ25hbGVkLCA+IDAgaWYgaXQgaXMg c3RpbGwgYWN0aXZlIGFuZCA8MCBvbiBlcnJvcgorICovCitpbnQgc3luY19maWxlX3dhaXQoc3Ry dWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBsb25nIHRpbWVvdXQpOworCisjZW5kaWYgLyogX0xJ TlVYX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvc3luY19maWxl LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42NTliNWYzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFj ZS9ldmVudHMvc3luY19maWxlLmgKQEAgLTAsMCArMSw1NyBAQAorI3VuZGVmIFRSQUNFX1NZU1RF TQorI2RlZmluZSBUUkFDRV9TWVNURU0gc3luY19maWxlCisKKyNpZiAhZGVmaW5lZChfVFJBQ0Vf U1lOQ19GSUxFX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5l IF9UUkFDRV9TWU5DX0ZJTEVfSAorCisjaW5jbHVkZSA8bGludXgvc3luYy5oPgorI2luY2x1ZGUg PGxpbnV4L3RyYWNlcG9pbnQuaD4KKworVFJBQ0VfRVZFTlQoc3luY193YWl0LAorCVRQX1BST1RP KHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwgaW50IGJlZ2luKSwKKworCVRQX0FSR1Moc3lu Y19maWxlLCBiZWdpbiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQkJX19zdHJpbmcobmFtZSwg c3luY19maWxlLT5uYW1lKQorCQkJX19maWVsZChzMzIsIHN0YXR1cykKKwkJCV9fZmllbGQodTMy LCBiZWdpbikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCQlfX2Fzc2lnbl9zdHIobmFtZSwg c3luY19maWxlLT5uYW1lKTsKKwkJCV9fZW50cnktPnN0YXR1cyA9IGF0b21pY19yZWFkKCZzeW5j X2ZpbGUtPnN0YXR1cyk7CisJCQlfX2VudHJ5LT5iZWdpbiA9IGJlZ2luOworCSksCisKKwlUUF9w cmludGsoIiVzIG5hbWU9JXMgc3RhdGU9JWQiLCBfX2VudHJ5LT5iZWdpbiA/ICJiZWdpbiIgOiAi ZW5kIiwKKwkJCV9fZ2V0X3N0cihuYW1lKSwgX19lbnRyeS0+c3RhdHVzKQorKTsKKworVFJBQ0Vf RVZFTlQoZmVuY2UsCisJVFBfUFJPVE8oc3RydWN0IGZlbmNlICpmZW5jZSksCisKKwlUUF9BUkdT KGZlbmNlKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKHRpbWVsaW5lLCBmZW5j ZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSkpCisJCV9fYXJyYXkoY2hhciwgdmFsdWUs IDMyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKHRpbWVsaW5lLCBm ZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSkpOworCQlpZiAoZmVuY2UtPm9wcy0+ ZmVuY2VfdmFsdWVfc3RyKSB7CisJCQlmZW5jZS0+b3BzLT5mZW5jZV92YWx1ZV9zdHIoZmVuY2Us IF9fZW50cnktPnZhbHVlLAorCQkJCQkJCXNpemVvZihfX2VudHJ5LT52YWx1ZSkpOworCQl9IGVs c2UgeworCQkJX19lbnRyeS0+dmFsdWVbMF0gPSAnXDAnOworCQl9CisJKSwKKworCVRQX3ByaW50 aygibmFtZT0lcyB2YWx1ZT0lcyIsIF9fZ2V0X3N0cih0aW1lbGluZSksIF9fZW50cnktPnZhbHVl KQorKTsKKworI2VuZGlmIC8qIGlmICFkZWZpbmVkKF9UUkFDRV9TWU5DX0ZJTEVfSCkgfHwgZGVm aW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkgKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUg b3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvc3luYy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThhYjA0Ci0tLSAv ZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3N5bmMuaApAQCAtMCwwICsxLDk3IEBA CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX1VBUElfTElOVVhfU1lOQ19ICisjZGVmaW5l IF9VQVBJX0xJTlVYX1NZTkNfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorCisvKioKKyAqIHN0cnVjdCBzeW5jX21lcmdlX2RhdGEgLSBkYXRh IHBhc3NlZCB0byBtZXJnZSBpb2N0bAorICogQGZkMjoJZmlsZSBkZXNjcmlwdG9yIG9mIHNlY29u ZCBmZW5jZQorICogQG5hbWU6CW5hbWUgb2YgbmV3IGZlbmNlCisgKiBAZmVuY2U6CXJldHVybnMg dGhlIGZkIG9mIHRoZSBuZXcgZmVuY2UgdG8gdXNlcnNwYWNlCisgKi8KK3N0cnVjdCBzeW5jX21l cmdlX2RhdGEgeworCV9fczMyCWZkMjsgLyogZmQgb2Ygc2Vjb25kIGZlbmNlICovCisJY2hhcglu YW1lWzMyXTsgLyogbmFtZSBvZiBuZXcgZmVuY2UgKi8KKwlfX3MzMglmZW5jZTsgLyogZmQgb24g bmV3bHkgY3JlYXRlZCBmZW5jZSAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmVuY2VfaW5mbyAt IGRldGFpbGVkIGZlbmNlIGluZm9ybWF0aW9uCisgKiBAbGVuOgkJbGVuZ3RoIG9mIGZlbmNlX2lu Zm8gaW5jbHVkaW5nIGFueSBkcml2ZXJfZGF0YQorICogQG9ial9uYW1lOgkJbmFtZSBvZiBwYXJl bnQgc3luY190aW1lbGluZQorICogQGRyaXZlcl9uYW1lOgluYW1lIG9mIGRyaXZlciBpbXBsZW1l bnRpbmcgdGhlIHBhcmVudAorICogQHN0YXR1czoJCXN0YXR1cyBvZiB0aGUgZmVuY2UgMDphY3Rp dmUgMTpzaWduYWxlZCA8MDplcnJvcgorICogQHRpbWVzdGFtcF9uczoJdGltZXN0YW1wIG9mIHN0 YXR1cyBjaGFuZ2UgaW4gbmFub3NlY29uZHMKKyAqIEBkcml2ZXJfZGF0YToJYW55IGRyaXZlciBk ZXBlbmRlbnQgZGF0YQorICovCitzdHJ1Y3QgZmVuY2VfaW5mbyB7CisJX191MzIJbGVuOworCWNo YXIJb2JqX25hbWVbMzJdOworCWNoYXIJZHJpdmVyX25hbWVbMzJdOworCV9fczMyCXN0YXR1czsK KwlfX3U2NAl0aW1lc3RhbXBfbnM7CisKKwlfX3U4CWRyaXZlcl9kYXRhWzBdOworfTsKKworLyoq CisgKiBzdHJ1Y3Qgc3luY19maWxlX2luZm9fZGF0YSAtIGRhdGEgcmV0dXJuZWQgZnJvbSBmZW5j ZSBpbmZvIGlvY3RsCisgKiBAbGVuOglpb2N0bCBjYWxsZXIgd3JpdGVzIHRoZSBzaXplIG9mIHRo ZSBidWZmZXIgaXRzIHBhc3NpbmcgaW4uCisgKgkJaW9jdGwgcmV0dXJucyBsZW5ndGggb2Ygc3lu Y19maWxlX2luZm9fZGF0YSByZXR1cm5lZCB0bworICoJCXVzZXJzcGFjZSBpbmNsdWRpbmcgcHRf aW5mby4KKyAqIEBuYW1lOgluYW1lIG9mIGZlbmNlCisgKiBAc3RhdHVzOglzdGF0dXMgb2YgZmVu Y2UuIDE6IHNpZ25hbGVkIDA6YWN0aXZlIDwwOmVycm9yCisgKiBAZmVuY2VfaW5mbzoJYSBmZW5j ZV9pbmZvIHN0cnVjdCBmb3IgZXZlcnkgZmVuY2UgaW4gdGhlIHN5bmNfZmlsZQorICovCitzdHJ1 Y3Qgc3luY19maWxlX2luZm9fZGF0YSB7CisJX191MzIJbGVuOworCWNoYXIJbmFtZVszMl07CisJ X19zMzIJc3RhdHVzOworCisJX191OAlmZW5jZV9pbmZvWzBdOworfTsKKworI2RlZmluZSBTWU5D X0lPQ19NQUdJQwkJJz4nCisKKy8qKgorICogRE9DOiBTWU5DX0lPQ19XQUlUIC0gd2FpdCBmb3Ig YSBmZW5jZSB0byBzaWduYWwKKyAqCisgKiBwYXNzIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiAg V2FpdHMgaW5kZWZpbml0ZWx5IHRpbWVvdXQgPCAwLgorICovCisjZGVmaW5lIFNZTkNfSU9DX1dB SVQJCV9JT1coU1lOQ19JT0NfTUFHSUMsIDAsIF9fczMyKQorCisvKioKKyAqIERPQzogU1lOQ19J T0NfTUVSR0UgLSBtZXJnZSB0d28gZmVuY2VzCisgKgorICogVGFrZXMgYSBzdHJ1Y3Qgc3luY19t ZXJnZV9kYXRhLiAgQ3JlYXRlcyBhIG5ldyBmZW5jZSBjb250YWluaW5nIGNvcGllcyBvZgorICog dGhlIHN5bmNfcHRzIGluIGJvdGggdGhlIGNhbGxpbmcgZmQgYW5kIHN5bmNfbWVyZ2VfZGF0YS5m ZDIuICBSZXR1cm5zIHRoZQorICogbmV3IGZlbmNlJ3MgZmQgaW4gc3luY19tZXJnZV9kYXRhLmZl bmNlCisgKi8KKyNkZWZpbmUgU1lOQ19JT0NfTUVSR0UJCV9JT1dSKFNZTkNfSU9DX01BR0lDLCAx LCBzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhKQorCisvKioKKyAqIERPQzogU1lOQ19JT0NfRkVOQ0Vf SU5GTyAtIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBhIGZlbmNlCisgKgorICogVGFrZXMg YSBzdHJ1Y3Qgc3luY19maWxlX2luZm9fZGF0YSB3aXRoIGV4dHJhIHNwYWNlIGFsbG9jYXRlZCBm b3IgcHRfaW5mby4KKyAqIENhbGxlciBzaG91bGQgd3JpdGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZl ciBpbnRvIGxlbi4gIE9uIHJldHVybiwgbGVuIGlzCisgKiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhl IHRvdGFsIHNpemUgb2YgdGhlIHN5bmNfZmlsZV9pbmZvX2RhdGEgaW5jbHVkaW5nCisgKiBwdF9p bmZvLgorICoKKyAqIHB0X2luZm8gaXMgYSBidWZmZXIgY29udGFpbmluZyBzeW5jX3B0X2luZm9z IGZvciBldmVyeSBzeW5jX3B0IGluIHRoZSBmZW5jZS4KKyAqIFRvIGl0ZXJhdGUgb3ZlciB0aGUg c3luY19wdF9pbmZvcywgdXNlIHRoZSBzeW5jX3B0X2luZm8ubGVuIGZpZWxkLgorICovCisjZGVm aW5lIFNZTkNfSU9DX0ZFTkNFX0lORk8JX0lPV1IoU1lOQ19JT0NfTUFHSUMsIDIsXAorCXN0cnVj dCBzeW5jX2ZpbGVfaW5mb19kYXRhKQorCisjZW5kaWYgLyogX1VBUElfTElOVVhfU1lOQ19IICov Ci0tIAoyLjUuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK