From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH i-g-t 05/12] i915: Exercise creating context with shared GTT Date: Wed, 22 May 2019 12:37:05 +0100 Message-ID: <20190522113712.23512-5-chris@chris-wilson.co.uk> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190522113712.23512-1-chris@chris-wilson.co.uk> 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 Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org djI6IFRlc3QgZWFjaCBzaGFyZWQgY29udGV4dCBpcyBpdHMgb3duIHRpbWVsaW5lIGFuZCBhbGxv d3MgcmVxdWVzdApyZW9yZGVyaW5nIGJldHdlZW4gc2hhcmVkIGNvbnRleHRzLgp2MzogVXNlIHRo ZSBtb2Rlcm4gaW50ZXJmYWNlIHRvIHVzZSBwaHlzaWNhbCBlbmdpbmVzIGZvciB0ZXN0aW5nCnNp bmdsZS10aW1lbGluZSBhbG9uZyBlYWNoIHJlYWwgZW5naW5lLgoKU2lnbmVkLW9mZi1ieTogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMgTGFodGluZW4g PGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBs aW51eC5pbnRlbC5jb20+CkNjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGlu dGVsLmNvbT4KLS0tCiBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAgICB8ICA3MCArKysKIGxp Yi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsKIHRlc3RzL01ha2VmaWxlLnNvdXJj ZXMgICAgICAgIHwgICAxICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYyAgIHwgODM4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfd2hp c3Blci5jIHwgIDMyICstCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiA2 IGZpbGVzIGNoYW5nZWQsIDk0NiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwoKZGlmZiAtLWdpdCBhL2xp Yi9pOTE1L2dlbV9jb250ZXh0LmMgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCmluZGV4IGY5NGQ4 OWNiNC4uMGM5MWJmYjUzIDEwMDY0NAotLS0gYS9saWIvaTkxNS9nZW1fY29udGV4dC5jCisrKyBi L2xpYi9pOTE1L2dlbV9jb250ZXh0LmMKQEAgLTI3Miw2ICsyNzIsNzYgQEAgdm9pZCBnZW1fY29u dGV4dF9zZXRfcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBwcmlvKQogCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eF9pZCwgcHJpbyks IDApOwogfQogCitpbnQKK19fZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCSAgICB1aW50 MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKKwkJICAgIHVuc2lnbmVkIGludCBmbGFncywK KwkJICAgIHVpbnQzMl90ICpvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Ny ZWF0ZV9leHRfY2xvbmUgY2xvbmUgPSB7CisJCXsgLm5hbWUgPSBJOTE1X0NPTlRFWFRfQ1JFQVRF X0VYVF9DTE9ORSB9LAorCQkuY2xvbmVfaWQgPSBzcmMsCisJCS5mbGFncyA9IHNoYXJlLAorCX07 CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgYXJnID0geworCQkuZmxh Z3MgPSBmbGFncyB8IEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VYVEVOU0lPTlMsCisJ CS5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKCZjbG9uZSksCisJfTsKKwlpbnQgZXJyID0g MDsKKworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JF QVRFX0VYVCwgJmFyZykpIHsKKwkJZXJyID0gLWVycm5vOworCQlpZ3RfYXNzdW1lKGVycik7CisJ fQorCisJKm91dCA9IGFyZy5jdHhfaWQ7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIGJvb2wgX19nZW1fY29udGV4dF9oYXMoaW50IGk5MTUsIHVpbnQzMl90IHNoYXJl LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdWludDMyX3QgY3R4OworCisJX19nZW1fY29udGV4 dF9jbG9uZShpOTE1LCAwLCBzaGFyZSwgZmxhZ3MsICZjdHgpOworCWlmIChjdHgpCisJCWdlbV9j b250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCWVycm5vID0gMDsKKwlyZXR1cm4gY3R4Owor fQorCitib29sIGdlbV9jb250ZXh0c19oYXNfc2hhcmVkX2d0dChpbnQgaTkxNSkKK3sKKwlyZXR1 cm4gX19nZW1fY29udGV4dF9oYXMoaTkxNSwgSTkxNV9DT05URVhUX0NMT05FX1ZNLCAwKTsKK30K KworYm9vbCBnZW1faGFzX3F1ZXVlcyhpbnQgaTkxNSkKK3sKKwlyZXR1cm4gX19nZW1fY29udGV4 dF9oYXMoaTkxNSwKKwkJCQkgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJCSBJOTE1X0NPTlRF WFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7Cit9CisKK3VpbnQzMl90IGdlbV9jb250 ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hh cmUsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdWludDMyX3QgY3R4OworCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsIHNyYywgc2hhcmUsIGZsYWdzLCAm Y3R4KSwgMCk7CisKKwlyZXR1cm4gY3R4OworfQorCit1aW50MzJfdCBnZW1fcXVldWVfY3JlYXRl KGludCBpOTE1KQoreworCXJldHVybiBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLAorCQkJCSBJ OTE1X0NPTlRFWFRfQ0xPTkVfVk0sCisJCQkJIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lO R0xFX1RJTUVMSU5FKTsKK30KKwogYm9vbCBnZW1fY29udGV4dF9oYXNfZW5naW5lKGludCBmZCwg dWludDMyX3QgY3R4LCB1aW50NjRfdCBlbmdpbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgZXhlYyA9IHt9OwpkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX2NvbnRleHQu aCBiL2xpYi9pOTE1L2dlbV9jb250ZXh0LmgKaW5kZXggYTA1MjcxNGQ0Li44MDQzYzM0MDEgMTAw NjQ0Ci0tLSBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmgKKysrIGIvbGliL2k5MTUvZ2VtX2NvbnRl eHQuaApAQCAtMjksNiArMjksMTkgQEAgaW50IF9fZ2VtX2NvbnRleHRfY3JlYXRlKGludCBmZCwg dWludDMyX3QgKmN0eF9pZCk7CiB2b2lkIGdlbV9jb250ZXh0X2Rlc3Ryb3koaW50IGZkLCB1aW50 MzJfdCBjdHhfaWQpOwogaW50IF9fZ2VtX2NvbnRleHRfZGVzdHJveShpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCk7CiAKK2ludCBfX2dlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJdWludDMy X3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQl1 aW50MzJfdCAqb3V0KTsKK3VpbnQzMl90IGdlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJ ICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCisJCQkgICB1bnNpZ25lZCBpbnQg ZmxhZ3MpOworCit1aW50MzJfdCBnZW1fcXVldWVfY3JlYXRlKGludCBpOTE1KTsKKworYm9vbCBn ZW1fY29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpOworYm9vbCBnZW1faGFzX3F1ZXVl cyhpbnQgaTkxNSk7CisKIGJvb2wgZ2VtX2hhc19jb250ZXh0cyhpbnQgZmQpOwogdm9pZCBnZW1f cmVxdWlyZV9jb250ZXh0cyhpbnQgZmQpOwogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbm5h YmxlKGludCBmZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMv TWFrZWZpbGUuc291cmNlcwppbmRleCA1OTQ5N2ZiNGQuLjVhNTY1MzA3OSAxMDA2NDQKLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0y Miw2ICsyMiw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWRybV9tbSBcCiAJZHJtX3JlYWQgXAogCWk5 MTUvZ2VtX2N0eF9jbG9uZSBcCisJaTkxNS9nZW1fY3R4X3NoYXJlZCBcCiAJaTkxNS9nZW1fdm1f Y3JlYXRlIFwKIAlrbXNfM2QgXAogCWttc19hZGRmYl9iYXNpYyBcCmRpZmYgLS1naXQgYS90ZXN0 cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMgYi90ZXN0cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kNDE1MjJkYWMKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMKQEAgLTAsMCArMSw4MzggQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAi aWd0LmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5j bHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPGRybS5oPgorCisjaW5jbHVkZSAiaWd0X3Jh bmQuaCIKKyNpbmNsdWRlICJpZ3RfdmdlbS5oIgorI2luY2x1ZGUgInN5bmNfZmlsZS5oIgorCisj ZGVmaW5lIExPIDAKKyNkZWZpbmUgSEkgMQorI2RlZmluZSBOT0lTRSAyCisKKyNkZWZpbmUgTUFY X1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZCisjZGVmaW5lIE1JTl9Q UklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWQorCitzdGF0aWMgaW50IHBy aW9yaXRpZXNbXSA9IHsKKwlbTE9dID0gTUlOX1BSSU8gLyAyLAorCVtISV0gPSBNQVhfUFJJTyAv IDIsCit9OworCisjZGVmaW5lIE1BWF9FTFNQX1FMRU4gMTYKKworSUdUX1RFU1RfREVTQ1JJUFRJ T04oIlRlc3Qgc2hhcmVkIGNvbnRleHRzLiIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVk X2d0dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQorI2RlZmluZSBERVRBQ0hFRCAweDEK K3sKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUo aTkxNSwgNDA5NiksCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWYgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZl cl9jb3VudCA9IDEsCisJfTsKKwl1aW50MzJfdCBwYXJlbnQsIGNoaWxkOworCisJZ2VtX3dyaXRl KGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1Zihp OTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwljaGlsZCA9 IGZsYWdzICYgREVUQUNIRUQgPyBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSkgOiAwOworCWlndF91 bnRpbF90aW1lb3V0KDIpIHsKKwkJcGFyZW50ID0gZmxhZ3MgJiBERVRBQ0hFRCA/IGNoaWxkIDog MDsKKwkJY2hpbGQgPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LAorCQkJCQkgIHBhcmVudCwgSTkx NV9DT05URVhUX0NMT05FX1ZNLAorCQkJCQkgIDApOworCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7 CisJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKworCQlpZiAoZmxhZ3MgJiBERVRBQ0hF RCkgeworCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBwYXJlbnQpOworCQkJZ2VtX2V4ZWNi dWYoaTkxNSwgJmV4ZWNidWYpOworCQl9IGVsc2UgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQln ZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIHBhcmVudCk7CisJCX0KKworCQlleGVjYnVmLnJzdmQx ID0gcGFyZW50OworCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp LCAtRU5PRU5UKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsCisJ CQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJCQkJICAwLCAmcGFyZW50 KSwgLUVOT0VOVCk7CisJfQorCWlmIChmbGFncyAmIERFVEFDSEVEKQorCQlnZW1fY29udGV4dF9k ZXN0cm95KGk5MTUsIGNoaWxkKTsKKworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdl bV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgZGlzam9pbnRfdGlt ZWxpbmVzKGludCBpOTE1KQoreworCUlHVF9DT1JLX0hBTkRMRShjb3JrKTsKKwlpZ3Rfc3Bpbl90 ICpzcGluWzJdOworCXVpbnQzMl90IHBsdWcsIGNoaWxkOworCisJaWd0X3JlcXVpcmUoZ2VtX2hh c19leGVjbGlzdHMoaTkxNSkpOworCisJLyoKKwkgKiBFYWNoIGNvbnRleHQsIGFsdGhvdWdoIHRo ZXkgc2hhcmUgYSB2bSwgYXJlIGV4cGVjdGVkIHRvIGJlCisJICogZGlzdGluY3QgdGltZWxpbmVz LiBBIHJlcXVlc3QgcXVldWVkIHRvIG9uZSBjb250ZXh0IHNob3VsZCBiZQorCSAqIGluZGVwZW5k ZW50IG9mIGFueSBzaGFyZWQgY29udGV4dHMuCisJICovCisJY2hpbGQgPSBnZW1fY29udGV4dF9j bG9uZShpOTE1LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOworCXBsdWcgPSBpZ3RfY29y a19wbHVnKCZjb3JrLCBpOTE1KTsKKworCXNwaW5bMF0gPSBfX2lndF9zcGluX25ldyhpOTE1LCAu Y3R4ID0gMCwgLmRlcGVuZGVuY3kgPSBwbHVnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bpbl9uZXco aTkxNSwgLmN0eCA9IGNoaWxkKTsKKworCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmQgc3Bpbm5lciwg d2lsbCBoYW5nIGlmIHN0dWNrIGJlaGluZCB0aGUgZmlyc3QgKi8KKwlpZ3Rfc3Bpbl9lbmQoc3Bp blsxXSk7CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFuZGxlKTsKKworCWlndF9jb3JrX3Vu cGx1ZygmY29yayk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bMV0pOworCWlndF9zcGlu X2ZyZWUoaTkxNSwgc3BpblswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aGF1c3Rfc2hhcmVkX2d0 dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQorI2RlZmluZSBFWEhBVVNUX0xSQyAweDEK K3sKKwlpOTE1ID0gZ2VtX3Jlb3Blbl9kcml2ZXIoaTkxNSk7CisKKwlpZ3RfZm9yayhwaWQsIDEp IHsKKwkJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwkJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkJLmhhbmRsZSA9IGdlbV9jcmVh dGUoaTkxNSwgNDA5NikKKwkJfTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkJ LmJ1ZmZlcl9jb3VudCA9IDEsCisJCX07CisJCXVpbnQzMl90IHBhcmVudCwgY2hpbGQ7CisJCXVu c2lnbmVkIGxvbmcgY291bnQgPSAwOworCQlpbnQgZXJyOworCisJCWdlbV93cml0ZShpOTE1LCBv YmouaGFuZGxlLCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7CisKKwkJY2hpbGQgPSAwOworCQlmb3Ig KDs7KSB7CisJCQlwYXJlbnQgPSBjaGlsZDsKKwkJCWVyciA9IF9fZ2VtX2NvbnRleHRfY2xvbmUo aTkxNSwKKwkJCQkJCSAgcGFyZW50LCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCisJCQkJCQkgIDAs ICZjaGlsZCk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQlpZiAoZmxhZ3MgJiBFWEhB VVNUX0xSQykgeworCQkJCWV4ZWNidWYucnN2ZDEgPSBjaGlsZDsKKwkJCQllcnIgPSBfX2dlbV9l eGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlicmVhazsKKwkJCX0K KworCQkJY291bnQrKzsKKwkJfQorCQlnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsKKworCQlp Z3RfaW5mbygiQ3JlYXRlZCAlbHUgc2hhcmVkIGNvbnRleHRzLCBiZWZvcmUgJWQgKCVzKVxuIiwK KwkJCSBjb3VudCwgZXJyLCBzdHJlcnJvcigtZXJyKSk7CisJfQorCWNsb3NlKGk5MTUpOworCWln dF93YWl0Y2hpbGRyZW4oKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19zaGFyZWRfZ3R0KGludCBp OTE1LCB1bnNpZ25lZCBpbnQgcmluZykKK3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENI X0JVRkZFUl9FTkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewor CQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KQorCX07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3Bv aW50ZXIoJm9iaiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSByaW5nLAorCX07 CisJdWludDMyX3Qgc2NyYXRjaCA9IG9iai5oYW5kbGU7CisJdWludDMyX3QgYmF0Y2hbMTZdOwor CWludCBpOworCisJZ2VtX3JlcXVpcmVfcmluZyhpOTE1LCByaW5nKTsKKwlpZ3RfcmVxdWlyZShn ZW1fY2FuX3N0b3JlX2R3b3JkKGk5MTUsIHJpbmcpKTsKKworCS8qIExvYWQgb2JqZWN0IGludG8g cGxhY2UgaW4gdGhlIEdUVCAqLworCWdlbV93cml0ZShpOTE1LCBvYmouaGFuZGxlLCAwLCAmYmJl LCBzaXplb2YoYmJlKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCisJLyogUHJl c3VtZSBub3RoaW5nIGNhdXNlcyBhbiBldmljdGlvbiBpbiB0aGUgbWVhbnRpbWUgKi8KKworCW9i ai5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOworCisJaSA9IDA7CisJYmF0Y2hbaV0g PSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwgNiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2Vu ID49IDgpIHsKKwkJYmF0Y2hbKytpXSA9IG9iai5vZmZzZXQ7CisJCWJhdGNoWysraV0gPSAwOwor CX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJYmF0Y2hbKytpXSA9IDA7CisJCWJhdGNoWysraV0g PSBvYmoub2Zmc2V0OworCX0gZWxzZSB7CisJCWJhdGNoW2ldLS07CisJCWJhdGNoWysraV0gPSBv Ymoub2Zmc2V0OworCX0KKwliYXRjaFsrK2ldID0gMHhjMGZmZWU7CisJYmF0Y2hbKytpXSA9IE1J X0JBVENIX0JVRkZFUl9FTkQ7CisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsIGJhdGNo LCBzaXplb2YoYmF0Y2gpKTsKKworCW9iai5vZmZzZXQgKz0gNDA5NjsgLyogbWFrZSBzdXJlIHdl IGRvbid0IGNhdXNlIGFuIGV2aWN0aW9uISAqLworCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9Q SU5ORUQ7CisJZXhlY2J1Zi5yc3ZkMSA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIEk5MTVf Q09OVEVYVF9DTE9ORV9WTSwgMCk7CisJaWYgKGdlbiA+IDMgJiYgZ2VuIDwgNikKKwkJZXhlY2J1 Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOworCisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNi dWYpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgZXhlY2J1Zi5yc3ZkMSk7CisJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7IC8qIHdyaXRlIGhhemFyZCBsaWVzICovCisJZ2VtX2Nsb3Nl KGk5MTUsIG9iai5oYW5kbGUpOworCisJZ2VtX3JlYWQoaTkxNSwgc2NyYXRjaCwgMCwgYmF0Y2gs IHNpemVvZih1aW50MzJfdCkpOworCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKKworCWlndF9h c3NlcnRfZXFfdTMyKCpiYXRjaCwgMHhjMGZmZWUpOworfQorCitzdGF0aWMgaW50IG5vcF9zeW5j KGludCBpOTE1LCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGludCByaW5nLCBpbnQ2NF90IHRpbWVv dXQpCit7CisJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCisJCS5i dWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSByaW5nLAorCQkucnN2ZDEgPSBjdHgsCisJfTsK KwlpbnQgZXJyOworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVv ZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZXJyID0gZ2VtX3dhaXQo aTkxNSwgb2JqLmhhbmRsZSwgJnRpbWVvdXQpOworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxl KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIGhhc19zaW5nbGVfdGltZWxpbmUo aW50IGk5MTUpCit7CisJdWludDMyX3QgY3R4OworCisJX19nZW1fY29udGV4dF9jbG9uZShpOTE1 LCAwLCAwLAorCQkJICAgIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5F LAorCQkJICAgICZjdHgpOworCWlmIChjdHgpCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg Y3R4KTsKKworCXJldHVybiBjdHggIT0gMDsKK30KKworc3RhdGljIHZvaWQgc2luZ2xlX3RpbWVs aW5lKGludCBpOTE1KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9F TkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkuaGFuZGxl ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwl9OworCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm8g cmluZ3NbMTZdOworCXN0cnVjdCBzeW5jX2ZpbGVfaW5mbyBzeW5jX2ZpbGVfaW5mbyA9IHsKKwkJ Lm51bV9mZW5jZXMgPSAxLAorCX07CisJdW5zaWduZWQgaW50IGVuZ2luZTsKKwlpbnQgbjsKKwor CWlndF9yZXF1aXJlKGhhc19zaW5nbGVfdGltZWxpbmUoaTkxNSkpOworCisJZ2VtX3dyaXRlKGk5 MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1 LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwkvKgorCSAqIEZv ciBhICJzaW5nbGUgdGltZWxpbmUiIGNvbnRleHQsIGVhY2ggcmluZyBpcyBvbiB0aGUgY29tbW9u CisJICogdGltZWxpbmUsIHVubGlrZSBhIG5vcm1hbCBjb250ZXh0IHdoZXJlIGVhY2ggcmluZyBo YXMgYW4KKwkgKiBpbmRlcGVuZGVudCB0aW1lbGluZS4gVGhhdCBpcyBubyBtYXR0ZXIgd2hpY2gg ZW5naW5lIHdlIHN1Ym1pdAorCSAqIHRvLCBpdCByZXBvcnRzIHRoZSBzYW1lIHRpbWVsaW5lIG5h bWUgYW5kIGZlbmNlIGNvbnRleHQuIEhvd2V2ZXIsCisJICogdGhlIGZlbmNlIGNvbnRleHQgaXMg bm90IHJlcG9ydGVkIHRocm91Z2ggdGhlIHN5bmNfZmVuY2VfaW5mby4KKwkgKi8KKwlleGVjYnVm LnJzdmQxID0KKwkJZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwgMCwKKwkJCQkgIEk5MTVfQ09O VEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5FKTsKKwlleGVjYnVmLmZsYWdzID0gSTkx NV9FWEVDX0ZFTkNFX09VVDsKKwluID0gMDsKKwlmb3JfZWFjaF9lbmdpbmUoaTkxNSwgZW5naW5l KSB7CisJCWdlbV9leGVjYnVmX3dyKGk5MTUsICZleGVjYnVmKTsKKwkJc3luY19maWxlX2luZm8u c3luY19mZW5jZV9pbmZvID0gdG9fdXNlcl9wb2ludGVyKCZyaW5nc1tuXSk7CisJCWRvX2lvY3Rs KGV4ZWNidWYucnN2ZDIgPj4gMzIsIFNZTkNfSU9DX0ZJTEVfSU5GTywgJnN5bmNfZmlsZV9pbmZv KTsKKwkJY2xvc2UoZXhlY2J1Zi5yc3ZkMiA+PiAzMik7CisKKwkJaWd0X2luZm8oInJpbmdbJWRd IGZlbmNlOiAlcyAlc1xuIiwKKwkJCSBuLCByaW5nc1tuXS5kcml2ZXJfbmFtZSwgcmluZ3Nbbl0u b2JqX25hbWUpOworCQluKys7CisJfQorCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdl bV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKKworCWZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsr KSB7CisJCWlndF9hc3NlcnQoIXN0cmNtcChyaW5nc1swXS5kcml2ZXJfbmFtZSwgcmluZ3NbaV0u ZHJpdmVyX25hbWUpKTsKKwkJaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBdLm9ial9uYW1lLCBy aW5nc1tpXS5vYmpfbmFtZSkpOworCX0KK30KKworc3RhdGljIHZvaWQgZXhlY19zaW5nbGVfdGlt ZWxpbmUoaW50IGk5MTUsIHVuc2lnbmVkIGludCBlbmdpbmUpCit7CisJdW5zaWduZWQgaW50IG90 aGVyOworCWlndF9zcGluX3QgKnNwaW47CisJdWludDMyX3QgY3R4OworCisJaWd0X3JlcXVpcmUo Z2VtX3JpbmdfaGFzX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlbmdpbmUpKTsKKwlpZ3RfcmVxdWly ZShoYXNfc2luZ2xlX3RpbWVsaW5lKGk5MTUpKTsKKworCS8qCisJICogT24gYW4gb3JkaW5hcnkg Y29udGV4dCwgYSBibG9ja2FnZSBvbiBvbmUgZW5naW5lIGRvZXNuJ3QgcHJldmVudAorCSAqIGV4 ZWN1dGlvbiBvbiBhbiBvdGhlci4KKwkgKi8KKwljdHggPSAwOworCXNwaW4gPSBOVUxMOworCWZv cl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gZW5n aW5lKQorCQkJY29udGludWU7CisKKwkJaWYgKHNwaW4gPT0gTlVMTCkgeworCQkJc3BpbiA9IF9f aWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBvdGhlcik7CisJCX0gZWxz ZSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCQkJ LmJ1ZmZlcnNfcHRyID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJzX3B0ciwKKwkJCQkuYnVmZmVyX2Nv dW50ID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQsCisJCQkJLmZsYWdzID0gb3RoZXIsCisJ CQkJLnJzdmQxID0gY3R4LAorCQkJfTsKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsK KwkJfQorCX0KKwlpZ3RfcmVxdWlyZShzcGluKTsKKwlpZ3RfYXNzZXJ0X2VxKG5vcF9zeW5jKGk5 MTUsIGN0eCwgZW5naW5lLCBOU0VDX1BFUl9TRUMpLCAwKTsKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUs IHNwaW4pOworCisJLyoKKwkgKiBCdXQgaWYgd2UgY3JlYXRlIGEgY29udGV4dCB3aXRoIGp1c3Qg YSBzaW5nbGUgc2hhcmVkIHRpbWVsaW5lLAorCSAqIHRoZW4gaXQgd2lsbCBibG9jayB3YWl0aW5n IGZvciB0aGUgZWFybGllciByZXF1ZXN0cyBvbiB0aGUKKwkgKiBvdGhlciBlbmdpbmVzLgorCSAq LworCWN0eCA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIDAsCisJCQkJSTkxNV9DT05URVhU X0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOworCXNwaW4gPSBOVUxMOworCWZvcl9lYWNo X3BoeXNpY2FsX2VuZ2luZShpOTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gZW5naW5lKQor CQkJY29udGludWU7CisKKwkJaWYgKHNwaW4gPT0gTlVMTCkgeworCQkJc3BpbiA9IF9faWd0X3Nw aW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBvdGhlcik7CisJCX0gZWxzZSB7CisJ CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCQkJLmJ1ZmZl cnNfcHRyID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJzX3B0ciwKKwkJCQkuYnVmZmVyX2NvdW50ID0g c3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQsCisJCQkJLmZsYWdzID0gb3RoZXIsCisJCQkJLnJz dmQxID0gY3R4LAorCQkJfTsKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJfQor CX0KKwlpZ3RfYXNzZXJ0KHNwaW4pOworCWlndF9hc3NlcnRfZXEobm9wX3N5bmMoaTkxNSwgY3R4 LCBlbmdpbmUsIE5TRUNfUEVSX1NFQyksIC1FVElNRSk7CisJaWd0X3NwaW5fZnJlZShpOTE1LCBz cGluKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfZHdvcmQoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwgdW5zaWduZWQgcmluZywKKwkJCXVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qgb2Zmc2V0LCB1 aW50MzJfdCB2YWx1ZSwKKwkJCXVpbnQzMl90IGNvcmssIHVuc2lnbmVkIHdyaXRlX2RvbWFpbikK K3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkp OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmOworCXVpbnQzMl90IGJhdGNoWzE2XTsKKwlpbnQgaTsKKworCW1l bXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRy ID0gdG9fdXNlcl9wb2ludGVyKG9iaiArICFjb3JrKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDIgKyAhIWNvcms7CisJZXhlY2J1Zi5mbGFncyA9IHJpbmc7CisJaWYgKGdlbiA8IDYpCisJCWV4 ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKwlleGVjYnVmLnJzdmQxID0gY3R4Owor CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBjb3JrOwor CW9ialsxXS5oYW5kbGUgPSB0YXJnZXQ7CisJb2JqWzJdLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkx NSwgNDA5Nik7CisKKwltZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKKwlyZWxvYy50 YXJnZXRfaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKKwlyZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSAw OworCXJlbG9jLm9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7CisJcmVsb2MuZGVsdGEgPSBvZmZz ZXQ7CisJcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OOwor CXJlbG9jLndyaXRlX2RvbWFpbiA9IHdyaXRlX2RvbWFpbjsKKwlvYmpbMl0ucmVsb2NzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOworCW9ialsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsK KworCWkgPSAwOworCWJhdGNoW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAx IDw8IDIyIDogMCk7CisJaWYgKGdlbiA+PSA4KSB7CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJ CWJhdGNoWysraV0gPSAwOworCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJYmF0Y2hbKytpXSA9 IDA7CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJCXJlbG9jLm9mZnNldCArPSBzaXplb2YodWlu dDMyX3QpOworCX0gZWxzZSB7CisJCWJhdGNoW2ldLS07CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7 CisJfQorCWJhdGNoWysraV0gPSB2YWx1ZTsKKwliYXRjaFsrK2ldID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKwlnZW1fd3JpdGUoaTkxNSwgb2JqWzJdLmhhbmRsZSwgMCwgYmF0Y2gsIHNpemVvZihi YXRjaCkpOworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fY2xvc2UoaTkxNSwg b2JqWzJdLmhhbmRsZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVfaGlnaGVzdF9wcmlv cml0eShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkx NSk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIHByaW9yaXR5IHN1cHBvcnQsIGFsbCBjb250 ZXh0cyB3aWxsIGhhdmUgZXF1YWwKKwkgKiBwcmlvcml0eSAoYW5kIHRoZXJlZm9yZSB0aGUgbWF4 IHVzZXIgcHJpb3JpdHkpLCBzbyBubyBjb250ZXh0CisJICogY2FuIG92ZXJ0YWtlIHVzLCBhbmQg d2UgZWZmZWN0aXZlbHkgY2FuIGZvcm0gYSBwbHVnLgorCSAqLworCV9fZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGk5MTUsIGN0eCwgTUFYX1BSSU8pOworCisJcmV0dXJuIGN0eDsKK30KKworc3Rh dGljIHZvaWQgdW5wbHVnX3Nob3dfcXVldWUoaW50IGk5MTUsIHN0cnVjdCBpZ3RfY29yayAqYywg dW5zaWduZWQgaW50IGVuZ2luZSkKK3sKKwlpZ3Rfc3Bpbl90ICpzcGluW01BWF9FTFNQX1FMRU5d OworCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4pOyBuKyspIHsKKwkJY29u c3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKKwkJCS5jdHggPSBjcmVhdGVfaGln aGVzdF9wcmlvcml0eShpOTE1KSwKKwkJCS5lbmdpbmUgPSBlbmdpbmUsCisJCX07CisJCXNwaW5b bl0gPSBfX2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOworCQlnZW1fY29udGV4dF9kZXN0 cm95KGk5MTUsIG9wdHMuY3R4KTsKKwl9CisKKwlpZ3RfY29ya191bnBsdWcoYyk7IC8qIGJhdGNo ZXMgd2lsbCBub3cgYmUgcXVldWVkIG9uIHRoZSBlbmdpbmUgKi8KKwlpZ3RfZGVidWdmc19kdW1w KGk5MTUsICJpOTE1X2VuZ2luZV9pbmZvIik7CisKKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZ X1NJWkUoc3Bpbik7IG4rKykKKwkJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluW25dKTsKK30KKwor c3RhdGljIHVpbnQzMl90IHN0b3JlX3RpbWVzdGFtcChpbnQgaTkxNSwKKwkJCQl1aW50MzJfdCBj dHgsIHVuc2lnbmVkIHJpbmcsCisJCQkJdW5zaWduZWQgbW1pb19iYXNlKQoreworCWNvbnN0IGJv b2wgcjY0YiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4OworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9j cmVhdGUoaTkxNSwgNDA5NiksCisJCS5yZWxvY2F0aW9uX2NvdW50ID0gMSwKKwl9OworCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvYyA9IHsKKwkJLnRhcmdldF9oYW5k bGUgPSBvYmouaGFuZGxlLAorCQkub2Zmc2V0ID0gMiAqIHNpemVvZih1aW50MzJfdCksCisJCS5k ZWx0YSA9IDQwOTIsCisJCS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T04sCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJ CS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZlcl9jb3VudCA9 IDEsCisJCS5mbGFncyA9IHJpbmcsCisJCS5yc3ZkMSA9IGN0eCwKKwl9OworCXVpbnQzMl90IGJh dGNoW10gPSB7CisJCTB4MjQgPDwgMjMgfCAoMSArIHI2NGIpLCAvKiBTUk0gKi8KKwkJbW1pb19i YXNlICsgMHgzNTgsCisJCTQwOTIsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQKKwl9Owor CisJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDcp OworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gp KTsKKwlvYmoucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOworCisJZ2VtX2V4 ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCisJcmV0dXJuIG9iai5oYW5kbGU7Cit9CisKK3N0YXRp YyB2b2lkIGluZGVwZW5kZW50KGludCBpOTE1LCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCBmbGFn cykKK3sKKwl1aW50MzJfdCBoYW5kbGVbQVJSQVlfU0laRShwcmlvcml0aWVzKV07CisJaWd0X3Nw aW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKKwl1bnNpZ25lZCBpbnQgbW1pb19iYXNlOworCisJ LyogWFhYIGk5MTVfcXVlcnkoKSEgKi8KKwlzd2l0Y2ggKHJpbmcpIHsKKwljYXNlIEk5MTVfRVhF Q19ERUZBVUxUOgorCWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKKwkJbW1pb19iYXNlID0gMHgyMDAw OworCQlicmVhazsKKyNpZiAwCisJY2FzZSBJOTE1X0VYRUNfQlNEOgorCQltbWlvX2Jhc2UgPSAw eDEyMDAwOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgSTkxNV9FWEVDX0JMVDoKKwkJbW1pb19i YXNlID0gMHgyMjAwMDsKKwkJYnJlYWs7CisKKwljYXNlIEk5MTVfRVhFQ19WRUJPWDoKKwkJaWYg KGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSAxMSkKKwkJCW1taW9fYmFz ZSA9IDB4MWQ4MDAwOworCQllbHNlCisJCQltbWlvX2Jhc2UgPSAweDFhMDAwOworCQlicmVhazsK KworCWRlZmF1bHQ6CisJCWlndF9za2lwKCJtbWlvIGJhc2Ugbm90IGtub3duXG4iKTsKKwl9CisK Kwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4rKykgeworCQljb25zdCBz dHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0geworCQkJLmN0eCA9IGNyZWF0ZV9oaWdoZXN0 X3ByaW9yaXR5KGk5MTUpLAorCQkJLmVuZ2luZSA9IHJpbmcsCisJCX07CisJCXNwaW5bbl0gPSBf X2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOworCQlnZW1fY29udGV4dF9kZXN0cm95KGk5 MTUsIG9wdHMuY3R4KTsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJp b3JpdGllcyk7IGkrKykgeworCQl1aW50MzJfdCBjdHggPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUp OworCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBwcmlvcml0aWVzW2ldKTsK KwkJaGFuZGxlW2ldID0gc3RvcmVfdGltZXN0YW1wKGk5MTUsIGN0eCwgcmluZywgbW1pb19iYXNl KTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCX0KKworCWZvciAoaW50IG4g PSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKQorCQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNw aW5bbl0pOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaW9yaXRpZXMpOyBp KyspIHsKKwkJdWludDMyX3QgKnB0cjsKKworCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5MTUsIGhh bmRsZVtpXSwgNDA5NiwgUFJPVF9SRUFEKTsKKwkJZ2VtX3NldF9kb21haW4oaTkxNSwgaGFuZGxl W2ldLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJZ2VtX2Nsb3NlKGk5MTUsIGhhbmRsZVtp XSk7CisKKwkJaGFuZGxlW2ldID0gcHRyWzEwMjNdOworCQltdW5tYXAocHRyLCA0MDk2KTsKKwor CQlpZ3RfZGVidWcoImN0eFslZF0gLnByaW89JWQsIHRpbWVzdGFtcD0ldVxuIiwKKwkJCSAgaSwg cHJpb3JpdGllc1tpXSwgaGFuZGxlW2ldKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KChpbnQzMl90KSho YW5kbGVbSEldIC0gaGFuZGxlW0xPXSkgPCAwKTsKK30KKworc3RhdGljIHZvaWQgcmVvcmRlcihp bnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5zaWduZWQgZmxhZ3MpCisjZGVmaW5lIEVRVUFMIDEK K3sKKwlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJf dCAqcHRyOworCXVpbnQzMl90IGN0eFsyXTsKKwl1aW50MzJfdCBwbHVnOworCisJY3R4W0xPXSA9 IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUs IGN0eFtMT10sIE1JTl9QUklPKTsKKworCWN0eFtISV0gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUp OworCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhbSEldLCBmbGFncyAmIEVRVUFM ID8gTUlOX1BSSU8gOiAwKTsKKworCXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwor CXBsdWcgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1KTsKKworCS8qIFdlIGV4cGVjdCB0aGUg aGlnaCBwcmlvcml0eSBjb250ZXh0IHRvIGJlIGV4ZWN1dGVkIGZpcnN0LCBhbmQKKwkgKiBzbyB0 aGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgdmFsdWUgZnJvbSB0aGUgbG93IHByaW9yaXR5IGNvbnRl eHQuCisJICovCisJc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0xPXSwgcmluZywgc2NyYXRjaCwgMCwg Y3R4W0xPXSwgcGx1ZywgMCk7CisJc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0hJXSwgcmluZywgc2Ny YXRjaCwgMCwgY3R4W0hJXSwgcGx1ZywgMCk7CisKKwl1bnBsdWdfc2hvd19xdWV1ZShpOTE1LCAm Y29yaywgcmluZyk7CisJZ2VtX2Nsb3NlKGk5MTUsIHBsdWcpOworCisJZ2VtX2NvbnRleHRfZGVz dHJveShpOTE1LCBjdHhbTE9dKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0p OworCisJcHRyID0gZ2VtX21tYXBfX2d0dChpOTE1LCBzY3JhdGNoLCA0MDk2LCBQUk9UX1JFQUQp OworCWdlbV9zZXRfZG9tYWluKGk5MTUsIHNjcmF0Y2gsIC8qIG5vIHdyaXRlIGhhemFyZCBsaWVz ISAqLworCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7 CisJZ2VtX2Nsb3NlKGk5MTUsIHNjcmF0Y2gpOworCisJaWYgKGZsYWdzICYgRVFVQUwpIC8qIGVx dWFsIHByaW9yaXR5LCByZXN1bHQgd2lsbCBiZSBmaWZvICovCisJCWlndF9hc3NlcnRfZXFfdTMy KHB0clswXSwgY3R4W0hJXSk7CisJZWxzZQorCQlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMF0sIGN0 eFtMT10pOworCW11bm1hcChwdHIsIDQwOTYpOworfQorCitzdGF0aWMgdm9pZCBwcm9tb3Rpb24o aW50IGk5MTUsIHVuc2lnbmVkIHJpbmcpCit7CisJSUdUX0NPUktfSEFORExFKGNvcmspOworCXVp bnQzMl90IHJlc3VsdCwgZGVwOworCXVpbnQzMl90ICpwdHI7CisJdWludDMyX3QgY3R4WzNdOwor CXVpbnQzMl90IHBsdWc7CisKKwljdHhbTE9dID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwln ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0xPXSwgTUlOX1BSSU8pOworCisJY3R4 W0hJXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5 KGk5MTUsIGN0eFtISV0sIDApOworCisJY3R4W05PSVNFXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkx NSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUsIGN0eFtOT0lTRV0sIE1JTl9QUklP LzIpOworCisJcmVzdWx0ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKwlkZXAgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpOworCisJcGx1ZyA9IGlndF9jb3JrX3BsdWcoJmNvcmssIGk5MTUpOwor CisJLyogRXhwZWN0IHRoYXQgSEkgcHJvbW90ZXMgTE8sIHNvIHRoZSBvcmRlciB3aWxsIGJlIExP LCBISSwgTk9JU0UuCisJICoKKwkgKiBmaWZvIHdvdWxkIGJlIE5PSVNFLCBMTywgSEkuCisJICog c3RyaWN0IHByaW9yaXR5IHdvdWxkIGJlICBISSwgTk9JU0UsIExPCisJICovCisJc3RvcmVfZHdv cmQoaTkxNSwgY3R4W05PSVNFXSwgcmluZywgcmVzdWx0LCAwLCBjdHhbTk9JU0VdLCBwbHVnLCAw KTsKKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCByZXN1bHQsIDAsIGN0eFtMT10s IHBsdWcsIDApOworCisJLyogbGluayBMTyA8LT4gSEkgdmlhIGEgZGVwZW5kZW5jeSBvbiBhbm90 aGVyIGJ1ZmZlciAqLworCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtMT10sIHJpbmcsIGRlcCwgMCwg Y3R4W0xPXSwgMCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKTsKKwlzdG9yZV9kd29yZChp OTE1LCBjdHhbSEldLCByaW5nLCBkZXAsIDAsIGN0eFtISV0sIDAsIDApOworCisJc3RvcmVfZHdv cmQoaTkxNSwgY3R4W0hJXSwgcmluZywgcmVzdWx0LCAwLCBjdHhbSEldLCAwLCAwKTsKKworCXVu cGx1Z19zaG93X3F1ZXVlKGk5MTUsICZjb3JrLCByaW5nKTsKKwlnZW1fY2xvc2UoaTkxNSwgcGx1 Zyk7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtOT0lTRV0pOworCWdlbV9jb250 ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W0xPXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHhbSEldKTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgZGVwLCA0MDk2LCBQUk9UX1JF QUQpOworCWdlbV9zZXRfZG9tYWluKGk5MTUsIGRlcCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMh ICovCisJCQlJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1f Y2xvc2UoaTkxNSwgZGVwKTsKKworCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W0hJXSk7 CisJbXVubWFwKHB0ciwgNDA5Nik7CisKKwlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5MTUsIHJlc3Vs dCwgNDA5NiwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihpOTE1LCByZXN1bHQsIC8qIG5v IHdyaXRlIGhhemFyZCBsaWVzISAqLworCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1f RE9NQUlOX0dUVCk7CisJZ2VtX2Nsb3NlKGk5MTUsIHJlc3VsdCk7CisKKwlpZ3RfYXNzZXJ0X2Vx X3UzMihwdHJbMF0sIGN0eFtOT0lTRV0pOworCW11bm1hcChwdHIsIDQwOTYpOworfQorCitzdGF0 aWMgdm9pZCBzbW9rZXRlc3QoaW50IGk5MTUsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIHRpbWVv dXQpCit7CisJY29uc3QgaW50IG5jcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7 CisJdW5zaWduZWQgZW5naW5lc1sxNl07CisJdW5zaWduZWQgbmVuZ2luZTsKKwl1bnNpZ25lZCBl bmdpbmU7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJfdCAqcHRyOworCisJbmVuZ2luZSA9 IDA7CisJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGVuZ2luZSkKKwkJZW5naW5lc1tu ZW5naW5lKytdID0gZW5naW5lOworCWlndF9yZXF1aXJlKG5lbmdpbmUpOworCisJc2NyYXRjaCA9 IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJaWd0X2ZvcmsoY2hpbGQsIG5jcHVzKSB7CisJCXVu c2lnbmVkIGxvbmcgY291bnQgPSAwOworCQl1aW50MzJfdCBjdHg7CisKKwkJaGFyc19wZXRydXNr YV9mNTRfMV9yYW5kb21fcGVydHVyYihjaGlsZCk7CisKKwkJY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0 ZShpOTE1KTsKKwkJaWd0X3VudGlsX3RpbWVvdXQodGltZW91dCkgeworCQkJaW50IHByaW87CisK KwkJCXByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KE1BWF9QUklP IC0gTUlOX1BSSU8pICsgTUlOX1BSSU87CisJCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkx NSwgY3R4LCBwcmlvKTsKKworCQkJZW5naW5lID0gZW5naW5lc1toYXJzX3BldHJ1c2thX2Y1NF8x X3JhbmRvbV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKKwkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwg ZW5naW5lLCBzY3JhdGNoLAorCQkJCSAgICA4KmNoaWxkICsgMCwgfmNoaWxkLAorCQkJCSAgICAw LCAwKTsKKwkJCWZvciAodW5zaWduZWQgaW50IHN0ZXAgPSAwOyBzdGVwIDwgODsgc3RlcCsrKQor CQkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5lLCBzY3JhdGNoLAorCQkJCQkgICAgOCpj aGlsZCArIDQsIGNvdW50KyssCisJCQkJCSAgICAwLCAwKTsKKwkJfQorCQlnZW1fY29udGV4dF9k ZXN0cm95KGk5MTUsIGN0eCk7CisJfQorCWlndF93YWl0Y2hpbGRyZW4oKTsKKworCXB0ciA9IGdl bV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5NiwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2Rv bWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCUk5MTVf R0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWdlbV9jbG9zZShpOTE1LCBz Y3JhdGNoKTsKKworCWZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBuY3B1czsgbisrKSB7CisJCWln dF9hc3NlcnRfZXFfdTMyKHB0clsyKm5dLCB+bik7CisJCS8qCisJCSAqIE5vdGUgdGhpcyBjb3Vu dCBpcyBhcHByb3hpbWF0ZSBkdWUgdG8gdW5jb25zdHJhaW5lZAorCQkgKiBvcmRlcmluZyBvZiB0 aGUgZHdvcmQgd3JpdGVzIGJldHdlZW4gZW5naW5lcy4KKwkJICoKKwkJICogVGFrZSB0aGUgcmVz dWx0IHdpdGggYSBwaW5jaCBvZiBzYWx0LgorCQkgKi8KKwkJaWd0X2luZm8oIkNoaWxkWyVkXSBj b21wbGV0ZWQgJXUgY3ljbGVzXG4iLCAgbiwgcHRyWzIqbisxXSk7CisJfQorCW11bm1hcChwdHIs IDQwOTYpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lICplOworCWludCBpOTE1ID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBk cm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOwor CX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVp cmUoZ2VtX2NvbnRleHRzX2hhc19zaGFyZWRfZ3R0KGk5MTUpKTsKKwkJCWlndF9mb3JrX2hhbmdf ZGV0ZWN0b3IoaTkxNSk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiY3JlYXRlLXNoYXJlZC1ndHQi KQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgMCk7CisKKwkJaWd0X3N1YnRlc3QoImRldGFj aGVkLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgREVUQUNIRUQpOwor CisJCWlndF9zdWJ0ZXN0KCJkaXNqb2ludC10aW1lbGluZXMiKQorCQkJZGlzam9pbnRfdGltZWxp bmVzKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJzaW5nbGUtdGltZWxpbmUiKQorCQkJc2luZ2xl X3RpbWVsaW5lKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQiKQor CQkJZXhoYXVzdF9zaGFyZWRfZ3R0KGk5MTUsIDApOworCisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0 LXNoYXJlZC1ndHQtbHJjIikKKwkJCWV4aGF1c3Rfc2hhcmVkX2d0dChpOTE1LCBFWEhBVVNUX0xS Qyk7CisKKwkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7IGUrKykg eworCQkJaWd0X3N1YnRlc3RfZigiZXhlYy1zaGFyZWQtZ3R0LSVzIiwgZS0+bmFtZSkKKwkJCQll eGVjX3NoYXJlZF9ndHQoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKworCQkJaWd0X3N1 YnRlc3RfZigiZXhlYy1zaW5nbGUtdGltZWxpbmUtJXMiLCBlLT5uYW1lKQorCQkJCWV4ZWNfc2lu Z2xlX3RpbWVsaW5lKGk5MTUsCisJCQkJCQkgICAgIGUtPmV4ZWNfaWQgfCBlLT5mbGFncyk7CisK KwkJCS8qCisJCQkgKiBDaGVjayB0aGF0IHRoZSBzaGFyZWQgY29udGV4dHMgb3BlcmF0ZSBpbmRl cGVuZGVudGx5LAorCQkJICogdGhhdCBpcyByZXF1ZXN0cyBvbiBvbmUgKCJxdWV1ZSIpIGNhbiBi ZSBzY2hlZHVsZWQKKwkJCSAqIGFyb3VuZCBhbm90aGVyIHF1ZXVlLiBXZSBvbmx5IGNoZWNrIHRo ZSBiYXNpY3MgaGVyZSwKKwkJCSAqIGVub3VnaCB0byByZWR1Y2UgdGhlIHF1ZXVlIGludG8ganVz dCBhbm90aGVyIGNvbnRleHQsCisJCQkgKiBhbmQgc28gcmVseSBvbiBnZW1fZXhlY19zY2hlZHVs ZSB0byBwcm92ZSB0aGUgcmVzdC4KKwkJCSAqLworCQkJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQkJ CWlndF9maXh0dXJlIHsKKwkJCQkJZ2VtX3JlcXVpcmVfcmluZyhpOTE1LCBlLT5leGVjX2lkIHwg ZS0+ZmxhZ3MpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0b3JlX2R3b3JkKGk5MTUsIGUt PmV4ZWNfaWQpIHwgZS0+ZmxhZ3MpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2Vu YWJsZWQoaTkxNSkpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hhc19jdHhfcHJp b3JpdHkoaTkxNSkpOworCQkJCX0KKworCQkJCWlndF9zdWJ0ZXN0X2YoIlEtaW5kZXBlbmRlbnQt JXMiLCBlLT5uYW1lKQorCQkJCQlpbmRlcGVuZGVudChpOTE1LCBlLT5leGVjX2lkIHwgZS0+Zmxh Z3MsIDApOworCisJCQkJaWd0X3N1YnRlc3RfZigiUS1pbi1vcmRlci0lcyIsIGUtPm5hbWUpCisJ CQkJCXJlb3JkZXIoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCBFUVVBTCk7CisKKwkJCQlp Z3Rfc3VidGVzdF9mKCJRLW91dC1vcmRlci0lcyIsIGUtPm5hbWUpCisJCQkJCXJlb3JkZXIoaTkx NSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCAwKTsKKworCQkJCWlndF9zdWJ0ZXN0X2YoIlEtcHJv bW90aW9uLSVzIiwgZS0+bmFtZSkKKwkJCQkJcHJvbW90aW9uKGk5MTUsIGUtPmV4ZWNfaWQgfCBl LT5mbGFncyk7CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLXNtb2tldGVzdC0lcyIsIGUtPm5hbWUp CisJCQkJCXNtb2tldGVzdChpOTE1LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MsIDUpOworCQkJfQor CQl9CisKKwkJaWd0X3N1YnRlc3QoIlEtc21va2V0ZXN0LWFsbCIpIHsKKwkJCWlndF9yZXF1aXJl KGdlbV9zY2hlZHVsZXJfZW5hYmxlZChpOTE1KSk7CisJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1 bGVyX2hhc19jdHhfcHJpb3JpdHkoaTkxNSkpOworCQkJc21va2V0ZXN0KGk5MTUsIC0xLCAzMCk7 CisJCX0KKworCQlpZ3RfZml4dHVyZSB7CisJCQlpZ3Rfc3RvcF9oYW5nX2RldGVjdG9yKCk7CisJ CX0KKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9leGVjX3doaXNwZXIuYyBiL3Rl c3RzL2k5MTUvZ2VtX2V4ZWNfd2hpc3Blci5jCmluZGV4IDM5NjYwNGQzMS4uNDgwZDhlODczIDEw MDY0NAotLS0gYS90ZXN0cy9pOTE1L2dlbV9leGVjX3doaXNwZXIuYworKysgYi90ZXN0cy9pOTE1 L2dlbV9leGVjX3doaXNwZXIuYwpAQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlf cmVsb2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCiAjZGVmaW5lIEhBTkcgMHgyMAogI2RlZmlu ZSBTWU5DIDB4NDAKICNkZWZpbmUgUFJJT1JJVFkgMHg4MAorI2RlZmluZSBRVUVVRVMgMHgxMDAK IAogc3RydWN0IGhhbmcgewogCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iajsK QEAgLTE2Miw3ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCBjdHhfc2V0X3JhbmRvbV9wcmlvcml0eShp bnQgZmQsIHVpbnQzMl90IGN0eCkKIHsKIAlpbnQgcHJpbyA9IGhhcnNfcGV0cnVza2FfZjU0XzFf cmFuZG9tX3Vuc2FmZV9tYXgoMTAyNCkgLSA1MTI7CiAJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5 KGZkLCBjdHgsIHByaW8pOwotfTsKK30KIAogc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVu c2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCiB7CkBAIC0yMTcsNiArMjE4LDkgQEAgc3Rh dGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3Mp CiAJaWYgKGZsYWdzICYgQ09OVEVYVFMpCiAJCWdlbV9yZXF1aXJlX2NvbnRleHRzKGZkKTsKIAor CWlmIChmbGFncyAmIFFVRVVFUykKKwkJaWd0X3JlcXVpcmUoZ2VtX2hhc19xdWV1ZXMoZmQpKTsK KwogCWlmIChmbGFncyAmIEhBTkcpCiAJCWluaXRfaGFuZygmaGFuZyk7CiAKQEAgLTI4MSw2ICsy ODUsMTAgQEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5z aWduZWQgZmxhZ3MpCiAJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQljb250ZXh0c1tu XSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CiAJCX0KKwkJaWYgKGZsYWdzICYgUVVFVUVTKSB7 CisJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKKwkJCQljb250ZXh0c1tuXSA9IGdlbV9xdWV1 ZV9jcmVhdGUoZmQpOworCQl9CiAJCWlmIChmbGFncyAmIEZEUykgewogCQkJZm9yIChuID0gMDsg biA8IDY0OyBuKyspCiAJCQkJZmRzW25dID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7 CkBAIC0zOTEsNyArMzk5LDcgQEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVk IGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCiAJCQkJCQlleGVjYnVmLmZsYWdzICY9IH5FTkdJTkVf TUFTSzsKIAkJCQkJCWV4ZWNidWYuZmxhZ3MgfD0gZW5naW5lc1tyYW5kKCkgJSBuZW5naW5lXTsK IAkJCQkJfQotCQkJCQlpZiAoZmxhZ3MgJiBDT05URVhUUykgeworCQkJCQlpZiAoZmxhZ3MgJiAo Q09OVEVYVFMgfCBRVUVVRVMpKSB7CiAJCQkJCQlleGVjYnVmLnJzdmQxID0gY29udGV4dHNbcmFu ZCgpICUgNjRdOwogCQkJCQkJaWYgKGZsYWdzICYgUFJJT1JJVFkpCiAJCQkJCQkJY3R4X3NldF9y YW5kb21fcHJpb3JpdHkodGhpc19mZCwgZXhlY2J1Zi5yc3ZkMSk7CkBAIC00NzQsNyArNDgyLDcg QEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQg ZmxhZ3MpCiAJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQljbG9zZShmZHNbbl0pOwog CQl9Ci0JCWlmIChmbGFncyAmIENPTlRFWFRTKSB7CisJCWlmIChmbGFncyAmIChDT05URVhUUyB8 IFFVRVVFUykpIHsKIAkJCWZvciAobiA9IDA7IG4gPCA2NDsgbisrKQogCQkJCWdlbV9jb250ZXh0 X2Rlc3Ryb3koZmQsIGNvbnRleHRzW25dKTsKIAkJfQpAQCAtNTEwLDE4ICs1MTgsMjQgQEAgaWd0 X21haW4KIAkJeyAiY2hhaW4tZm9ya2VkIiwgQ0hBSU4gfCBGT1JLRUQgfSwKIAkJeyAiY2hhaW4t aW50ZXJydXB0aWJsZSIsIENIQUlOIHwgSU5URVJSVVBUSUJMRSB9LAogCQl7ICJjaGFpbi1zeW5j IiwgQ0hBSU4gfCBTWU5DIH0sCi0JCXsgImNvbnRleHRzIiwgQ09OVEVYVFMgfSwKLQkJeyAiY29u dGV4dHMtaW50ZXJydXB0aWJsZSIsIENPTlRFWFRTIHwgSU5URVJSVVBUSUJMRX0sCi0JCXsgImNv bnRleHRzLWZvcmtlZCIsIENPTlRFWFRTIHwgRk9SS0VEfSwKLQkJeyAiY29udGV4dHMtcHJpb3Jp dHkiLCBDT05URVhUUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0sCi0JCXsgImNvbnRleHRzLWNoYWlu IiwgQ09OVEVYVFMgfCBDSEFJTiB9LAotCQl7ICJjb250ZXh0cy1zeW5jIiwgQ09OVEVYVFMgfCBT WU5DIH0sCiAJCXsgImZkcyIsIEZEUyB9LAogCQl7ICJmZHMtaW50ZXJydXB0aWJsZSIsIEZEUyB8 IElOVEVSUlVQVElCTEV9LAogCQl7ICJmZHMtZm9ya2VkIiwgRkRTIHwgRk9SS0VEfSwKIAkJeyAi ZmRzLXByaW9yaXR5IiwgRkRTIHwgRk9SS0VEIHwgUFJJT1JJVFkgfSwKIAkJeyAiZmRzLWNoYWlu IiwgRkRTIHwgQ0hBSU59LAogCQl7ICJmZHMtc3luYyIsIEZEUyB8IFNZTkN9LAorCQl7ICJjb250 ZXh0cyIsIENPTlRFWFRTIH0sCisJCXsgImNvbnRleHRzLWludGVycnVwdGlibGUiLCBDT05URVhU UyB8IElOVEVSUlVQVElCTEV9LAorCQl7ICJjb250ZXh0cy1mb3JrZWQiLCBDT05URVhUUyB8IEZP UktFRH0sCisJCXsgImNvbnRleHRzLXByaW9yaXR5IiwgQ09OVEVYVFMgfCBGT1JLRUQgfCBQUklP UklUWSB9LAorCQl7ICJjb250ZXh0cy1jaGFpbiIsIENPTlRFWFRTIHwgQ0hBSU4gfSwKKwkJeyAi Y29udGV4dHMtc3luYyIsIENPTlRFWFRTIHwgU1lOQyB9LAorCQl7ICJxdWV1ZXMiLCBRVUVVRVMg fSwKKwkJeyAicXVldWVzLWludGVycnVwdGlibGUiLCBRVUVVRVMgfCBJTlRFUlJVUFRJQkxFfSwK KwkJeyAicXVldWVzLWZvcmtlZCIsIFFVRVVFUyB8IEZPUktFRH0sCisJCXsgInF1ZXVlcy1wcmlv cml0eSIsIFFVRVVFUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0sCisJCXsgInF1ZXVlcy1jaGFpbiIs IFFVRVVFUyB8IENIQUlOIH0sCisJCXsgInF1ZXVlcy1zeW5jIiwgUVVFVUVTIHwgU1lOQyB9LAog CQl7IE5VTEwgfQogCX07CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQg Yi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCA5NDcyMDYxNDkuLmZhYjJhODI4YiAxMDA2NDQKLS0t IGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTExOSw2ICsx MTksNyBAQCBpOTE1X3Byb2dzID0gWwogCSdnZW1fY3R4X2V4ZWMnLAogCSdnZW1fY3R4X2lzb2xh dGlvbicsCiAJJ2dlbV9jdHhfcGFyYW0nLAorCSdnZW1fY3R4X3NoYXJlZCcsCiAJJ2dlbV9jdHhf c3dpdGNoJywKIAknZ2VtX2N0eF90aHJhc2gnLAogCSdnZW1fZG91YmxlX2lycV9sb29wJywKLS0g CjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chris Wilson Date: Wed, 22 May 2019 12:37:05 +0100 Message-Id: <20190522113712.23512-5-chris@chris-wilson.co.uk> In-Reply-To: <20190522113712.23512-1-chris@chris-wilson.co.uk> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 05/12] i915: Exercise creating context with shared GTT List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: intel-gfx@lists.freedesktop.org Cc: Tvrtko Ursulin , igt-dev@lists.freedesktop.org List-ID: djI6IFRlc3QgZWFjaCBzaGFyZWQgY29udGV4dCBpcyBpdHMgb3duIHRpbWVsaW5lIGFuZCBhbGxv d3MgcmVxdWVzdApyZW9yZGVyaW5nIGJldHdlZW4gc2hhcmVkIGNvbnRleHRzLgp2MzogVXNlIHRo ZSBtb2Rlcm4gaW50ZXJmYWNlIHRvIHVzZSBwaHlzaWNhbCBlbmdpbmVzIGZvciB0ZXN0aW5nCnNp bmdsZS10aW1lbGluZSBhbG9uZyBlYWNoIHJlYWwgZW5naW5lLgoKU2lnbmVkLW9mZi1ieTogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMgTGFodGluZW4g PGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBs aW51eC5pbnRlbC5jb20+CkNjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGlu dGVsLmNvbT4KLS0tCiBsaWIvaTkxNS9nZW1fY29udGV4dC5jICAgICAgICB8ICA3MCArKysKIGxp Yi9pOTE1L2dlbV9jb250ZXh0LmggICAgICAgIHwgIDEzICsKIHRlc3RzL01ha2VmaWxlLnNvdXJj ZXMgICAgICAgIHwgICAxICsKIHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYyAgIHwgODM4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2k5MTUvZ2VtX2V4ZWNfd2hp c3Blci5jIHwgIDMyICstCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiA2 IGZpbGVzIGNoYW5nZWQsIDk0NiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvZ2VtX2N0eF9zaGFyZWQuYwoKZGlmZiAtLWdpdCBhL2xp Yi9pOTE1L2dlbV9jb250ZXh0LmMgYi9saWIvaTkxNS9nZW1fY29udGV4dC5jCmluZGV4IGY5NGQ4 OWNiNC4uMGM5MWJmYjUzIDEwMDY0NAotLS0gYS9saWIvaTkxNS9nZW1fY29udGV4dC5jCisrKyBi L2xpYi9pOTE1L2dlbV9jb250ZXh0LmMKQEAgLTI3Miw2ICsyNzIsNzYgQEAgdm9pZCBnZW1fY29u dGV4dF9zZXRfcHJpb3JpdHkoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIGludCBwcmlvKQogCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eF9pZCwgcHJpbyks IDApOwogfQogCitpbnQKK19fZ2VtX2NvbnRleHRfY2xvbmUoaW50IGk5MTUsCisJCSAgICB1aW50 MzJfdCBzcmMsIHVuc2lnbmVkIGludCBzaGFyZSwKKwkJICAgIHVuc2lnbmVkIGludCBmbGFncywK KwkJICAgIHVpbnQzMl90ICpvdXQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2Ny ZWF0ZV9leHRfY2xvbmUgY2xvbmUgPSB7CisJCXsgLm5hbWUgPSBJOTE1X0NPTlRFWFRfQ1JFQVRF X0VYVF9DTE9ORSB9LAorCQkuY2xvbmVfaWQgPSBzcmMsCisJCS5mbGFncyA9IHNoYXJlLAorCX07 CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9leHQgYXJnID0geworCQkuZmxh Z3MgPSBmbGFncyB8IEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfVVNFX0VYVEVOU0lPTlMsCisJ CS5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKCZjbG9uZSksCisJfTsKKwlpbnQgZXJyID0g MDsKKworCWlmIChpZ3RfaW9jdGwoaTkxNSwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfQ1JF QVRFX0VYVCwgJmFyZykpIHsKKwkJZXJyID0gLWVycm5vOworCQlpZ3RfYXNzdW1lKGVycik7CisJ fQorCisJKm91dCA9IGFyZy5jdHhfaWQ7CisKKwllcnJubyA9IDA7CisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIGJvb2wgX19nZW1fY29udGV4dF9oYXMoaW50IGk5MTUsIHVpbnQzMl90IHNoYXJl LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdWludDMyX3QgY3R4OworCisJX19nZW1fY29udGV4 dF9jbG9uZShpOTE1LCAwLCBzaGFyZSwgZmxhZ3MsICZjdHgpOworCWlmIChjdHgpCisJCWdlbV9j b250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKKworCWVycm5vID0gMDsKKwlyZXR1cm4gY3R4Owor fQorCitib29sIGdlbV9jb250ZXh0c19oYXNfc2hhcmVkX2d0dChpbnQgaTkxNSkKK3sKKwlyZXR1 cm4gX19nZW1fY29udGV4dF9oYXMoaTkxNSwgSTkxNV9DT05URVhUX0NMT05FX1ZNLCAwKTsKK30K KworYm9vbCBnZW1faGFzX3F1ZXVlcyhpbnQgaTkxNSkKK3sKKwlyZXR1cm4gX19nZW1fY29udGV4 dF9oYXMoaTkxNSwKKwkJCQkgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJCSBJOTE1X0NPTlRF WFRfQ1JFQVRFX0ZMQUdTX1NJTkdMRV9USU1FTElORSk7Cit9CisKK3VpbnQzMl90IGdlbV9jb250 ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hh cmUsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdWludDMyX3QgY3R4OworCisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsIHNyYywgc2hhcmUsIGZsYWdzLCAm Y3R4KSwgMCk7CisKKwlyZXR1cm4gY3R4OworfQorCit1aW50MzJfdCBnZW1fcXVldWVfY3JlYXRl KGludCBpOTE1KQoreworCXJldHVybiBnZW1fY29udGV4dF9jbG9uZShpOTE1LCAwLAorCQkJCSBJ OTE1X0NPTlRFWFRfQ0xPTkVfVk0sCisJCQkJIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lO R0xFX1RJTUVMSU5FKTsKK30KKwogYm9vbCBnZW1fY29udGV4dF9oYXNfZW5naW5lKGludCBmZCwg dWludDMyX3QgY3R4LCB1aW50NjRfdCBlbmdpbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgZXhlYyA9IHt9OwpkaWZmIC0tZ2l0IGEvbGliL2k5MTUvZ2VtX2NvbnRleHQu aCBiL2xpYi9pOTE1L2dlbV9jb250ZXh0LmgKaW5kZXggYTA1MjcxNGQ0Li44MDQzYzM0MDEgMTAw NjQ0Ci0tLSBhL2xpYi9pOTE1L2dlbV9jb250ZXh0LmgKKysrIGIvbGliL2k5MTUvZ2VtX2NvbnRl eHQuaApAQCAtMjksNiArMjksMTkgQEAgaW50IF9fZ2VtX2NvbnRleHRfY3JlYXRlKGludCBmZCwg dWludDMyX3QgKmN0eF9pZCk7CiB2b2lkIGdlbV9jb250ZXh0X2Rlc3Ryb3koaW50IGZkLCB1aW50 MzJfdCBjdHhfaWQpOwogaW50IF9fZ2VtX2NvbnRleHRfZGVzdHJveShpbnQgZmQsIHVpbnQzMl90 IGN0eF9pZCk7CiAKK2ludCBfX2dlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJdWludDMy X3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCisJCQl1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQl1 aW50MzJfdCAqb3V0KTsKK3VpbnQzMl90IGdlbV9jb250ZXh0X2Nsb25lKGludCBpOTE1LAorCQkJ ICAgdWludDMyX3Qgc3JjLCB1bnNpZ25lZCBpbnQgc2hhcmUsCisJCQkgICB1bnNpZ25lZCBpbnQg ZmxhZ3MpOworCit1aW50MzJfdCBnZW1fcXVldWVfY3JlYXRlKGludCBpOTE1KTsKKworYm9vbCBn ZW1fY29udGV4dHNfaGFzX3NoYXJlZF9ndHQoaW50IGk5MTUpOworYm9vbCBnZW1faGFzX3F1ZXVl cyhpbnQgaTkxNSk7CisKIGJvb2wgZ2VtX2hhc19jb250ZXh0cyhpbnQgZmQpOwogdm9pZCBnZW1f cmVxdWlyZV9jb250ZXh0cyhpbnQgZmQpOwogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbm5h YmxlKGludCBmZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMv TWFrZWZpbGUuc291cmNlcwppbmRleCA1OTQ5N2ZiNGQuLjVhNTY1MzA3OSAxMDA2NDQKLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0y Miw2ICsyMiw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWRybV9tbSBcCiAJZHJtX3JlYWQgXAogCWk5 MTUvZ2VtX2N0eF9jbG9uZSBcCisJaTkxNS9nZW1fY3R4X3NoYXJlZCBcCiAJaTkxNS9nZW1fdm1f Y3JlYXRlIFwKIAlrbXNfM2QgXAogCWttc19hZGRmYl9iYXNpYyBcCmRpZmYgLS1naXQgYS90ZXN0 cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMgYi90ZXN0cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kNDE1MjJkYWMKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0cy9pOTE1L2dlbV9jdHhfc2hhcmVkLmMKQEAgLTAsMCArMSw4MzggQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAi aWd0LmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5j bHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPGRybS5oPgorCisjaW5jbHVkZSAiaWd0X3Jh bmQuaCIKKyNpbmNsdWRlICJpZ3RfdmdlbS5oIgorI2luY2x1ZGUgInN5bmNfZmlsZS5oIgorCisj ZGVmaW5lIExPIDAKKyNkZWZpbmUgSEkgMQorI2RlZmluZSBOT0lTRSAyCisKKyNkZWZpbmUgTUFY X1BSSU8gTE9DQUxfSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZCisjZGVmaW5lIE1JTl9Q UklPIExPQ0FMX0k5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWQorCitzdGF0aWMgaW50IHBy aW9yaXRpZXNbXSA9IHsKKwlbTE9dID0gTUlOX1BSSU8gLyAyLAorCVtISV0gPSBNQVhfUFJJTyAv IDIsCit9OworCisjZGVmaW5lIE1BWF9FTFNQX1FMRU4gMTYKKworSUdUX1RFU1RfREVTQ1JJUFRJ T04oIlRlc3Qgc2hhcmVkIGNvbnRleHRzLiIpOworCitzdGF0aWMgdm9pZCBjcmVhdGVfc2hhcmVk X2d0dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQorI2RlZmluZSBERVRBQ0hFRCAweDEK K3sKKwljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9jcmVhdGUo aTkxNSwgNDA5NiksCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNi dWYgPSB7CisJCS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZl cl9jb3VudCA9IDEsCisJfTsKKwl1aW50MzJfdCBwYXJlbnQsIGNoaWxkOworCisJZ2VtX3dyaXRl KGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1Zihp OTE1LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwljaGlsZCA9 IGZsYWdzICYgREVUQUNIRUQgPyBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSkgOiAwOworCWlndF91 bnRpbF90aW1lb3V0KDIpIHsKKwkJcGFyZW50ID0gZmxhZ3MgJiBERVRBQ0hFRCA/IGNoaWxkIDog MDsKKwkJY2hpbGQgPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LAorCQkJCQkgIHBhcmVudCwgSTkx NV9DT05URVhUX0NMT05FX1ZNLAorCQkJCQkgIDApOworCQlleGVjYnVmLnJzdmQxID0gY2hpbGQ7 CisJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKworCQlpZiAoZmxhZ3MgJiBERVRBQ0hF RCkgeworCQkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBwYXJlbnQpOworCQkJZ2VtX2V4ZWNi dWYoaTkxNSwgJmV4ZWNidWYpOworCQl9IGVsc2UgeworCQkJcGFyZW50ID0gY2hpbGQ7CisJCQln ZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIHBhcmVudCk7CisJCX0KKworCQlleGVjYnVmLnJzdmQx ID0gcGFyZW50OworCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYp LCAtRU5PRU5UKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2Nsb25lKGk5MTUsCisJ CQkJCQkgIHBhcmVudCwgSTkxNV9DT05URVhUX0NMT05FX1ZNLAorCQkJCQkJICAwLCAmcGFyZW50 KSwgLUVOT0VOVCk7CisJfQorCWlmIChmbGFncyAmIERFVEFDSEVEKQorCQlnZW1fY29udGV4dF9k ZXN0cm95KGk5MTUsIGNoaWxkKTsKKworCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdl bV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKK30KKworc3RhdGljIHZvaWQgZGlzam9pbnRfdGlt ZWxpbmVzKGludCBpOTE1KQoreworCUlHVF9DT1JLX0hBTkRMRShjb3JrKTsKKwlpZ3Rfc3Bpbl90 ICpzcGluWzJdOworCXVpbnQzMl90IHBsdWcsIGNoaWxkOworCisJaWd0X3JlcXVpcmUoZ2VtX2hh c19leGVjbGlzdHMoaTkxNSkpOworCisJLyoKKwkgKiBFYWNoIGNvbnRleHQsIGFsdGhvdWdoIHRo ZXkgc2hhcmUgYSB2bSwgYXJlIGV4cGVjdGVkIHRvIGJlCisJICogZGlzdGluY3QgdGltZWxpbmVz LiBBIHJlcXVlc3QgcXVldWVkIHRvIG9uZSBjb250ZXh0IHNob3VsZCBiZQorCSAqIGluZGVwZW5k ZW50IG9mIGFueSBzaGFyZWQgY29udGV4dHMuCisJICovCisJY2hpbGQgPSBnZW1fY29udGV4dF9j bG9uZShpOTE1LCAwLCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sIDApOworCXBsdWcgPSBpZ3RfY29y a19wbHVnKCZjb3JrLCBpOTE1KTsKKworCXNwaW5bMF0gPSBfX2lndF9zcGluX25ldyhpOTE1LCAu Y3R4ID0gMCwgLmRlcGVuZGVuY3kgPSBwbHVnKTsKKwlzcGluWzFdID0gX19pZ3Rfc3Bpbl9uZXco aTkxNSwgLmN0eCA9IGNoaWxkKTsKKworCS8qIFdhaXQgZm9yIHRoZSBzZWNvbmQgc3Bpbm5lciwg d2lsbCBoYW5nIGlmIHN0dWNrIGJlaGluZCB0aGUgZmlyc3QgKi8KKwlpZ3Rfc3Bpbl9lbmQoc3Bp blsxXSk7CisJZ2VtX3N5bmMoaTkxNSwgc3BpblsxXS0+aGFuZGxlKTsKKworCWlndF9jb3JrX3Vu cGx1ZygmY29yayk7CisKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNwaW5bMV0pOworCWlndF9zcGlu X2ZyZWUoaTkxNSwgc3BpblswXSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aGF1c3Rfc2hhcmVkX2d0 dChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdzKQorI2RlZmluZSBFWEhBVVNUX0xSQyAweDEK K3sKKwlpOTE1ID0gZ2VtX3Jlb3Blbl9kcml2ZXIoaTkxNSk7CisKKwlpZ3RfZm9yayhwaWQsIDEp IHsKKwkJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwkJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkJLmhhbmRsZSA9IGdlbV9jcmVh dGUoaTkxNSwgNDA5NikKKwkJfTsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmID0geworCQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAorCQkJ LmJ1ZmZlcl9jb3VudCA9IDEsCisJCX07CisJCXVpbnQzMl90IHBhcmVudCwgY2hpbGQ7CisJCXVu c2lnbmVkIGxvbmcgY291bnQgPSAwOworCQlpbnQgZXJyOworCisJCWdlbV93cml0ZShpOTE1LCBv YmouaGFuZGxlLCAwLCAmYmJlLCBzaXplb2YoYmJlKSk7CisKKwkJY2hpbGQgPSAwOworCQlmb3Ig KDs7KSB7CisJCQlwYXJlbnQgPSBjaGlsZDsKKwkJCWVyciA9IF9fZ2VtX2NvbnRleHRfY2xvbmUo aTkxNSwKKwkJCQkJCSAgcGFyZW50LCBJOTE1X0NPTlRFWFRfQ0xPTkVfVk0sCisJCQkJCQkgIDAs ICZjaGlsZCk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCisJCQlpZiAoZmxhZ3MgJiBFWEhB VVNUX0xSQykgeworCQkJCWV4ZWNidWYucnN2ZDEgPSBjaGlsZDsKKwkJCQllcnIgPSBfX2dlbV9l eGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlicmVhazsKKwkJCX0K KworCQkJY291bnQrKzsKKwkJfQorCQlnZW1fc3luYyhpOTE1LCBvYmouaGFuZGxlKTsKKworCQlp Z3RfaW5mbygiQ3JlYXRlZCAlbHUgc2hhcmVkIGNvbnRleHRzLCBiZWZvcmUgJWQgKCVzKVxuIiwK KwkJCSBjb3VudCwgZXJyLCBzdHJlcnJvcigtZXJyKSk7CisJfQorCWNsb3NlKGk5MTUpOworCWln dF93YWl0Y2hpbGRyZW4oKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19zaGFyZWRfZ3R0KGludCBp OTE1LCB1bnNpZ25lZCBpbnQgcmluZykKK3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENI X0JVRkZFUl9FTkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0gewor CQkuaGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KQorCX07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3Bv aW50ZXIoJm9iaiksCisJCS5idWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSByaW5nLAorCX07 CisJdWludDMyX3Qgc2NyYXRjaCA9IG9iai5oYW5kbGU7CisJdWludDMyX3QgYmF0Y2hbMTZdOwor CWludCBpOworCisJZ2VtX3JlcXVpcmVfcmluZyhpOTE1LCByaW5nKTsKKwlpZ3RfcmVxdWlyZShn ZW1fY2FuX3N0b3JlX2R3b3JkKGk5MTUsIHJpbmcpKTsKKworCS8qIExvYWQgb2JqZWN0IGludG8g cGxhY2UgaW4gdGhlIEdUVCAqLworCWdlbV93cml0ZShpOTE1LCBvYmouaGFuZGxlLCAwLCAmYmJl LCBzaXplb2YoYmJlKSk7CisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCisJLyogUHJl c3VtZSBub3RoaW5nIGNhdXNlcyBhbiBldmljdGlvbiBpbiB0aGUgbWVhbnRpbWUgKi8KKworCW9i ai5oYW5kbGUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOworCisJaSA9IDA7CisJYmF0Y2hbaV0g PSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwgNiA/IDEgPDwgMjIgOiAwKTsKKwlpZiAoZ2Vu ID49IDgpIHsKKwkJYmF0Y2hbKytpXSA9IG9iai5vZmZzZXQ7CisJCWJhdGNoWysraV0gPSAwOwor CX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJYmF0Y2hbKytpXSA9IDA7CisJCWJhdGNoWysraV0g PSBvYmoub2Zmc2V0OworCX0gZWxzZSB7CisJCWJhdGNoW2ldLS07CisJCWJhdGNoWysraV0gPSBv Ymoub2Zmc2V0OworCX0KKwliYXRjaFsrK2ldID0gMHhjMGZmZWU7CisJYmF0Y2hbKytpXSA9IE1J X0JBVENIX0JVRkZFUl9FTkQ7CisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsIGJhdGNo LCBzaXplb2YoYmF0Y2gpKTsKKworCW9iai5vZmZzZXQgKz0gNDA5NjsgLyogbWFrZSBzdXJlIHdl IGRvbid0IGNhdXNlIGFuIGV2aWN0aW9uISAqLworCW9iai5mbGFncyB8PSBFWEVDX09CSkVDVF9Q SU5ORUQ7CisJZXhlY2J1Zi5yc3ZkMSA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIEk5MTVf Q09OVEVYVF9DTE9ORV9WTSwgMCk7CisJaWYgKGdlbiA+IDMgJiYgZ2VuIDwgNikKKwkJZXhlY2J1 Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOworCisJZ2VtX2V4ZWNidWYoaTkxNSwgJmV4ZWNi dWYpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgZXhlY2J1Zi5yc3ZkMSk7CisJZ2VtX3N5 bmMoaTkxNSwgb2JqLmhhbmRsZSk7IC8qIHdyaXRlIGhhemFyZCBsaWVzICovCisJZ2VtX2Nsb3Nl KGk5MTUsIG9iai5oYW5kbGUpOworCisJZ2VtX3JlYWQoaTkxNSwgc2NyYXRjaCwgMCwgYmF0Y2gs IHNpemVvZih1aW50MzJfdCkpOworCWdlbV9jbG9zZShpOTE1LCBzY3JhdGNoKTsKKworCWlndF9h c3NlcnRfZXFfdTMyKCpiYXRjaCwgMHhjMGZmZWUpOworfQorCitzdGF0aWMgaW50IG5vcF9zeW5j KGludCBpOTE1LCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGludCByaW5nLCBpbnQ2NF90IHRpbWVv dXQpCit7CisJY29uc3QgdWludDMyX3QgYmJlID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmogPSB7CisJCS5oYW5kbGUgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpLAorCX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmID0geworCQkuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaiksCisJCS5i dWZmZXJfY291bnQgPSAxLAorCQkuZmxhZ3MgPSByaW5nLAorCQkucnN2ZDEgPSBjdHgsCisJfTsK KwlpbnQgZXJyOworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVv ZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1LCAmZXhlY2J1Zik7CisJZXJyID0gZ2VtX3dhaXQo aTkxNSwgb2JqLmhhbmRsZSwgJnRpbWVvdXQpOworCWdlbV9jbG9zZShpOTE1LCBvYmouaGFuZGxl KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBib29sIGhhc19zaW5nbGVfdGltZWxpbmUo aW50IGk5MTUpCit7CisJdWludDMyX3QgY3R4OworCisJX19nZW1fY29udGV4dF9jbG9uZShpOTE1 LCAwLCAwLAorCQkJICAgIEk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5F LAorCQkJICAgICZjdHgpOworCWlmIChjdHgpCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwg Y3R4KTsKKworCXJldHVybiBjdHggIT0gMDsKK30KKworc3RhdGljIHZvaWQgc2luZ2xlX3RpbWVs aW5lKGludCBpOTE1KQoreworCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9F TkQ7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0geworCQkuaGFuZGxl ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KSwKKwl9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZiA9IHsKKwkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZv YmopLAorCQkuYnVmZmVyX2NvdW50ID0gMSwKKwl9OworCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm8g cmluZ3NbMTZdOworCXN0cnVjdCBzeW5jX2ZpbGVfaW5mbyBzeW5jX2ZpbGVfaW5mbyA9IHsKKwkJ Lm51bV9mZW5jZXMgPSAxLAorCX07CisJdW5zaWduZWQgaW50IGVuZ2luZTsKKwlpbnQgbjsKKwor CWlndF9yZXF1aXJlKGhhc19zaW5nbGVfdGltZWxpbmUoaTkxNSkpOworCisJZ2VtX3dyaXRlKGk5 MTUsIG9iai5oYW5kbGUsIDAsICZiYmUsIHNpemVvZihiYmUpKTsKKwlnZW1fZXhlY2J1ZihpOTE1 LCAmZXhlY2J1Zik7CisJZ2VtX3N5bmMoaTkxNSwgb2JqLmhhbmRsZSk7CisKKwkvKgorCSAqIEZv ciBhICJzaW5nbGUgdGltZWxpbmUiIGNvbnRleHQsIGVhY2ggcmluZyBpcyBvbiB0aGUgY29tbW9u CisJICogdGltZWxpbmUsIHVubGlrZSBhIG5vcm1hbCBjb250ZXh0IHdoZXJlIGVhY2ggcmluZyBo YXMgYW4KKwkgKiBpbmRlcGVuZGVudCB0aW1lbGluZS4gVGhhdCBpcyBubyBtYXR0ZXIgd2hpY2gg ZW5naW5lIHdlIHN1Ym1pdAorCSAqIHRvLCBpdCByZXBvcnRzIHRoZSBzYW1lIHRpbWVsaW5lIG5h bWUgYW5kIGZlbmNlIGNvbnRleHQuIEhvd2V2ZXIsCisJICogdGhlIGZlbmNlIGNvbnRleHQgaXMg bm90IHJlcG9ydGVkIHRocm91Z2ggdGhlIHN5bmNfZmVuY2VfaW5mby4KKwkgKi8KKwlleGVjYnVm LnJzdmQxID0KKwkJZ2VtX2NvbnRleHRfY2xvbmUoaTkxNSwgMCwgMCwKKwkJCQkgIEk5MTVfQ09O VEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xFX1RJTUVMSU5FKTsKKwlleGVjYnVmLmZsYWdzID0gSTkx NV9FWEVDX0ZFTkNFX09VVDsKKwluID0gMDsKKwlmb3JfZWFjaF9lbmdpbmUoaTkxNSwgZW5naW5l KSB7CisJCWdlbV9leGVjYnVmX3dyKGk5MTUsICZleGVjYnVmKTsKKwkJc3luY19maWxlX2luZm8u c3luY19mZW5jZV9pbmZvID0gdG9fdXNlcl9wb2ludGVyKCZyaW5nc1tuXSk7CisJCWRvX2lvY3Rs KGV4ZWNidWYucnN2ZDIgPj4gMzIsIFNZTkNfSU9DX0ZJTEVfSU5GTywgJnN5bmNfZmlsZV9pbmZv KTsKKwkJY2xvc2UoZXhlY2J1Zi5yc3ZkMiA+PiAzMik7CisKKwkJaWd0X2luZm8oInJpbmdbJWRd IGZlbmNlOiAlcyAlc1xuIiwKKwkJCSBuLCByaW5nc1tuXS5kcml2ZXJfbmFtZSwgcmluZ3Nbbl0u b2JqX25hbWUpOworCQluKys7CisJfQorCWdlbV9zeW5jKGk5MTUsIG9iai5oYW5kbGUpOworCWdl bV9jbG9zZShpOTE1LCBvYmouaGFuZGxlKTsKKworCWZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsr KSB7CisJCWlndF9hc3NlcnQoIXN0cmNtcChyaW5nc1swXS5kcml2ZXJfbmFtZSwgcmluZ3NbaV0u ZHJpdmVyX25hbWUpKTsKKwkJaWd0X2Fzc2VydCghc3RyY21wKHJpbmdzWzBdLm9ial9uYW1lLCBy aW5nc1tpXS5vYmpfbmFtZSkpOworCX0KK30KKworc3RhdGljIHZvaWQgZXhlY19zaW5nbGVfdGlt ZWxpbmUoaW50IGk5MTUsIHVuc2lnbmVkIGludCBlbmdpbmUpCit7CisJdW5zaWduZWQgaW50IG90 aGVyOworCWlndF9zcGluX3QgKnNwaW47CisJdWludDMyX3QgY3R4OworCisJaWd0X3JlcXVpcmUo Z2VtX3JpbmdfaGFzX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlbmdpbmUpKTsKKwlpZ3RfcmVxdWly ZShoYXNfc2luZ2xlX3RpbWVsaW5lKGk5MTUpKTsKKworCS8qCisJICogT24gYW4gb3JkaW5hcnkg Y29udGV4dCwgYSBibG9ja2FnZSBvbiBvbmUgZW5naW5lIGRvZXNuJ3QgcHJldmVudAorCSAqIGV4 ZWN1dGlvbiBvbiBhbiBvdGhlci4KKwkgKi8KKwljdHggPSAwOworCXNwaW4gPSBOVUxMOworCWZv cl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gZW5n aW5lKQorCQkJY29udGludWU7CisKKwkJaWYgKHNwaW4gPT0gTlVMTCkgeworCQkJc3BpbiA9IF9f aWd0X3NwaW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBvdGhlcik7CisJCX0gZWxz ZSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCQkJ LmJ1ZmZlcnNfcHRyID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJzX3B0ciwKKwkJCQkuYnVmZmVyX2Nv dW50ID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQsCisJCQkJLmZsYWdzID0gb3RoZXIsCisJ CQkJLnJzdmQxID0gY3R4LAorCQkJfTsKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsK KwkJfQorCX0KKwlpZ3RfcmVxdWlyZShzcGluKTsKKwlpZ3RfYXNzZXJ0X2VxKG5vcF9zeW5jKGk5 MTUsIGN0eCwgZW5naW5lLCBOU0VDX1BFUl9TRUMpLCAwKTsKKwlpZ3Rfc3Bpbl9mcmVlKGk5MTUs IHNwaW4pOworCisJLyoKKwkgKiBCdXQgaWYgd2UgY3JlYXRlIGEgY29udGV4dCB3aXRoIGp1c3Qg YSBzaW5nbGUgc2hhcmVkIHRpbWVsaW5lLAorCSAqIHRoZW4gaXQgd2lsbCBibG9jayB3YWl0aW5n IGZvciB0aGUgZWFybGllciByZXF1ZXN0cyBvbiB0aGUKKwkgKiBvdGhlciBlbmdpbmVzLgorCSAq LworCWN0eCA9IGdlbV9jb250ZXh0X2Nsb25lKGk5MTUsIDAsIDAsCisJCQkJSTkxNV9DT05URVhU X0NSRUFURV9GTEFHU19TSU5HTEVfVElNRUxJTkUpOworCXNwaW4gPSBOVUxMOworCWZvcl9lYWNo X3BoeXNpY2FsX2VuZ2luZShpOTE1LCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gZW5naW5lKQor CQkJY29udGludWU7CisKKwkJaWYgKHNwaW4gPT0gTlVMTCkgeworCQkJc3BpbiA9IF9faWd0X3Nw aW5fbmV3KGk5MTUsIC5jdHggPSBjdHgsIC5lbmdpbmUgPSBvdGhlcik7CisJCX0gZWxzZSB7CisJ CQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJCQkJLmJ1ZmZl cnNfcHRyID0gc3Bpbi0+ZXhlY2J1Zi5idWZmZXJzX3B0ciwKKwkJCQkuYnVmZmVyX2NvdW50ID0g c3Bpbi0+ZXhlY2J1Zi5idWZmZXJfY291bnQsCisJCQkJLmZsYWdzID0gb3RoZXIsCisJCQkJLnJz dmQxID0gY3R4LAorCQkJfTsKKwkJCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwkJfQor CX0KKwlpZ3RfYXNzZXJ0KHNwaW4pOworCWlndF9hc3NlcnRfZXEobm9wX3N5bmMoaTkxNSwgY3R4 LCBlbmdpbmUsIE5TRUNfUEVSX1NFQyksIC1FVElNRSk7CisJaWd0X3NwaW5fZnJlZShpOTE1LCBz cGluKTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfZHdvcmQoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwgdW5zaWduZWQgcmluZywKKwkJCXVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qgb2Zmc2V0LCB1 aW50MzJfdCB2YWx1ZSwKKwkJCXVpbnQzMl90IGNvcmssIHVuc2lnbmVkIHdyaXRlX2RvbWFpbikK K3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkp OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2M7CisJc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiBleGVjYnVmOworCXVpbnQzMl90IGJhdGNoWzE2XTsKKwlpbnQgaTsKKworCW1l bXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKKwlleGVjYnVmLmJ1ZmZlcnNfcHRy ID0gdG9fdXNlcl9wb2ludGVyKG9iaiArICFjb3JrKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9 IDIgKyAhIWNvcms7CisJZXhlY2J1Zi5mbGFncyA9IHJpbmc7CisJaWYgKGdlbiA8IDYpCisJCWV4 ZWNidWYuZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKwlleGVjYnVmLnJzdmQxID0gY3R4Owor CisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5kbGUgPSBjb3JrOwor CW9ialsxXS5oYW5kbGUgPSB0YXJnZXQ7CisJb2JqWzJdLmhhbmRsZSA9IGdlbV9jcmVhdGUoaTkx NSwgNDA5Nik7CisKKwltZW1zZXQoJnJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKKwlyZWxvYy50 YXJnZXRfaGFuZGxlID0gb2JqWzFdLmhhbmRsZTsKKwlyZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSAw OworCXJlbG9jLm9mZnNldCA9IHNpemVvZih1aW50MzJfdCk7CisJcmVsb2MuZGVsdGEgPSBvZmZz ZXQ7CisJcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OOwor CXJlbG9jLndyaXRlX2RvbWFpbiA9IHdyaXRlX2RvbWFpbjsKKwlvYmpbMl0ucmVsb2NzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOworCW9ialsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsK KworCWkgPSAwOworCWJhdGNoW2ldID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgKGdlbiA8IDYgPyAx IDw8IDIyIDogMCk7CisJaWYgKGdlbiA+PSA4KSB7CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJ CWJhdGNoWysraV0gPSAwOworCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsKKwkJYmF0Y2hbKytpXSA9 IDA7CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7CisJCXJlbG9jLm9mZnNldCArPSBzaXplb2YodWlu dDMyX3QpOworCX0gZWxzZSB7CisJCWJhdGNoW2ldLS07CisJCWJhdGNoWysraV0gPSBvZmZzZXQ7 CisJfQorCWJhdGNoWysraV0gPSB2YWx1ZTsKKwliYXRjaFsrK2ldID0gTUlfQkFUQ0hfQlVGRkVS X0VORDsKKwlnZW1fd3JpdGUoaTkxNSwgb2JqWzJdLmhhbmRsZSwgMCwgYmF0Y2gsIHNpemVvZihi YXRjaCkpOworCWdlbV9leGVjYnVmKGk5MTUsICZleGVjYnVmKTsKKwlnZW1fY2xvc2UoaTkxNSwg b2JqWzJdLmhhbmRsZSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcmVhdGVfaGlnaGVzdF9wcmlv cml0eShpbnQgaTkxNSkKK3sKKwl1aW50MzJfdCBjdHggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkx NSk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIHByaW9yaXR5IHN1cHBvcnQsIGFsbCBjb250 ZXh0cyB3aWxsIGhhdmUgZXF1YWwKKwkgKiBwcmlvcml0eSAoYW5kIHRoZXJlZm9yZSB0aGUgbWF4 IHVzZXIgcHJpb3JpdHkpLCBzbyBubyBjb250ZXh0CisJICogY2FuIG92ZXJ0YWtlIHVzLCBhbmQg d2UgZWZmZWN0aXZlbHkgY2FuIGZvcm0gYSBwbHVnLgorCSAqLworCV9fZ2VtX2NvbnRleHRfc2V0 X3ByaW9yaXR5KGk5MTUsIGN0eCwgTUFYX1BSSU8pOworCisJcmV0dXJuIGN0eDsKK30KKworc3Rh dGljIHZvaWQgdW5wbHVnX3Nob3dfcXVldWUoaW50IGk5MTUsIHN0cnVjdCBpZ3RfY29yayAqYywg dW5zaWduZWQgaW50IGVuZ2luZSkKK3sKKwlpZ3Rfc3Bpbl90ICpzcGluW01BWF9FTFNQX1FMRU5d OworCisJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKHNwaW4pOyBuKyspIHsKKwkJY29u c3Qgc3RydWN0IGlndF9zcGluX2ZhY3Rvcnkgb3B0cyA9IHsKKwkJCS5jdHggPSBjcmVhdGVfaGln aGVzdF9wcmlvcml0eShpOTE1KSwKKwkJCS5lbmdpbmUgPSBlbmdpbmUsCisJCX07CisJCXNwaW5b bl0gPSBfX2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOworCQlnZW1fY29udGV4dF9kZXN0 cm95KGk5MTUsIG9wdHMuY3R4KTsKKwl9CisKKwlpZ3RfY29ya191bnBsdWcoYyk7IC8qIGJhdGNo ZXMgd2lsbCBub3cgYmUgcXVldWVkIG9uIHRoZSBlbmdpbmUgKi8KKwlpZ3RfZGVidWdmc19kdW1w KGk5MTUsICJpOTE1X2VuZ2luZV9pbmZvIik7CisKKwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZ X1NJWkUoc3Bpbik7IG4rKykKKwkJaWd0X3NwaW5fZnJlZShpOTE1LCBzcGluW25dKTsKK30KKwor c3RhdGljIHVpbnQzMl90IHN0b3JlX3RpbWVzdGFtcChpbnQgaTkxNSwKKwkJCQl1aW50MzJfdCBj dHgsIHVuc2lnbmVkIHJpbmcsCisJCQkJdW5zaWduZWQgbW1pb19iYXNlKQoreworCWNvbnN0IGJv b2wgcjY0YiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSA4OworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHsKKwkJLmhhbmRsZSA9IGdlbV9j cmVhdGUoaTkxNSwgNDA5NiksCisJCS5yZWxvY2F0aW9uX2NvdW50ID0gMSwKKwl9OworCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvYyA9IHsKKwkJLnRhcmdldF9oYW5k bGUgPSBvYmouaGFuZGxlLAorCQkub2Zmc2V0ID0gMiAqIHNpemVvZih1aW50MzJfdCksCisJCS5k ZWx0YSA9IDQwOTIsCisJCS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T04sCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWYgPSB7CisJ CS5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmb2JqKSwKKwkJLmJ1ZmZlcl9jb3VudCA9 IDEsCisJCS5mbGFncyA9IHJpbmcsCisJCS5yc3ZkMSA9IGN0eCwKKwl9OworCXVpbnQzMl90IGJh dGNoW10gPSB7CisJCTB4MjQgPDwgMjMgfCAoMSArIHI2NGIpLCAvKiBTUk0gKi8KKwkJbW1pb19i YXNlICsgMHgzNTgsCisJCTQwOTIsCisJCTAsCisJCU1JX0JBVENIX0JVRkZFUl9FTkQKKwl9Owor CisJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpID49IDcp OworCisJZ2VtX3dyaXRlKGk5MTUsIG9iai5oYW5kbGUsIDAsIGJhdGNoLCBzaXplb2YoYmF0Y2gp KTsKKwlvYmoucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcmVsb2MpOworCisJZ2VtX2V4 ZWNidWYoaTkxNSwgJmV4ZWNidWYpOworCisJcmV0dXJuIG9iai5oYW5kbGU7Cit9CisKK3N0YXRp YyB2b2lkIGluZGVwZW5kZW50KGludCBpOTE1LCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCBmbGFn cykKK3sKKwl1aW50MzJfdCBoYW5kbGVbQVJSQVlfU0laRShwcmlvcml0aWVzKV07CisJaWd0X3Nw aW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKKwl1bnNpZ25lZCBpbnQgbW1pb19iYXNlOworCisJ LyogWFhYIGk5MTVfcXVlcnkoKSEgKi8KKwlzd2l0Y2ggKHJpbmcpIHsKKwljYXNlIEk5MTVfRVhF Q19ERUZBVUxUOgorCWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKKwkJbW1pb19iYXNlID0gMHgyMDAw OworCQlicmVhazsKKyNpZiAwCisJY2FzZSBJOTE1X0VYRUNfQlNEOgorCQltbWlvX2Jhc2UgPSAw eDEyMDAwOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgSTkxNV9FWEVDX0JMVDoKKwkJbW1pb19i YXNlID0gMHgyMjAwMDsKKwkJYnJlYWs7CisKKwljYXNlIEk5MTVfRVhFQ19WRUJPWDoKKwkJaWYg KGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpKSA+PSAxMSkKKwkJCW1taW9fYmFz ZSA9IDB4MWQ4MDAwOworCQllbHNlCisJCQltbWlvX2Jhc2UgPSAweDFhMDAwOworCQlicmVhazsK KworCWRlZmF1bHQ6CisJCWlndF9za2lwKCJtbWlvIGJhc2Ugbm90IGtub3duXG4iKTsKKwl9CisK Kwlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4rKykgeworCQljb25zdCBz dHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0geworCQkJLmN0eCA9IGNyZWF0ZV9oaWdoZXN0 X3ByaW9yaXR5KGk5MTUpLAorCQkJLmVuZ2luZSA9IHJpbmcsCisJCX07CisJCXNwaW5bbl0gPSBf X2lndF9zcGluX2ZhY3RvcnkoaTkxNSwgJm9wdHMpOworCQlnZW1fY29udGV4dF9kZXN0cm95KGk5 MTUsIG9wdHMuY3R4KTsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJp b3JpdGllcyk7IGkrKykgeworCQl1aW50MzJfdCBjdHggPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUp OworCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4LCBwcmlvcml0aWVzW2ldKTsK KwkJaGFuZGxlW2ldID0gc3RvcmVfdGltZXN0YW1wKGk5MTUsIGN0eCwgcmluZywgbW1pb19iYXNl KTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworCX0KKworCWZvciAoaW50IG4g PSAwOyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKQorCQlpZ3Rfc3Bpbl9mcmVlKGk5MTUsIHNw aW5bbl0pOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaW9yaXRpZXMpOyBp KyspIHsKKwkJdWludDMyX3QgKnB0cjsKKworCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5MTUsIGhh bmRsZVtpXSwgNDA5NiwgUFJPVF9SRUFEKTsKKwkJZ2VtX3NldF9kb21haW4oaTkxNSwgaGFuZGxl W2ldLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJZ2VtX2Nsb3NlKGk5MTUsIGhhbmRsZVtp XSk7CisKKwkJaGFuZGxlW2ldID0gcHRyWzEwMjNdOworCQltdW5tYXAocHRyLCA0MDk2KTsKKwor CQlpZ3RfZGVidWcoImN0eFslZF0gLnByaW89JWQsIHRpbWVzdGFtcD0ldVxuIiwKKwkJCSAgaSwg cHJpb3JpdGllc1tpXSwgaGFuZGxlW2ldKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KChpbnQzMl90KSho YW5kbGVbSEldIC0gaGFuZGxlW0xPXSkgPCAwKTsKK30KKworc3RhdGljIHZvaWQgcmVvcmRlcihp bnQgaTkxNSwgdW5zaWduZWQgcmluZywgdW5zaWduZWQgZmxhZ3MpCisjZGVmaW5lIEVRVUFMIDEK K3sKKwlJR1RfQ09SS19IQU5ETEUoY29yayk7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJf dCAqcHRyOworCXVpbnQzMl90IGN0eFsyXTsKKwl1aW50MzJfdCBwbHVnOworCisJY3R4W0xPXSA9 IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUs IGN0eFtMT10sIE1JTl9QUklPKTsKKworCWN0eFtISV0gPSBnZW1fcXVldWVfY3JlYXRlKGk5MTUp OworCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShpOTE1LCBjdHhbSEldLCBmbGFncyAmIEVRVUFM ID8gTUlOX1BSSU8gOiAwKTsKKworCXNjcmF0Y2ggPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwor CXBsdWcgPSBpZ3RfY29ya19wbHVnKCZjb3JrLCBpOTE1KTsKKworCS8qIFdlIGV4cGVjdCB0aGUg aGlnaCBwcmlvcml0eSBjb250ZXh0IHRvIGJlIGV4ZWN1dGVkIGZpcnN0LCBhbmQKKwkgKiBzbyB0 aGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgdmFsdWUgZnJvbSB0aGUgbG93IHByaW9yaXR5IGNvbnRl eHQuCisJICovCisJc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0xPXSwgcmluZywgc2NyYXRjaCwgMCwg Y3R4W0xPXSwgcGx1ZywgMCk7CisJc3RvcmVfZHdvcmQoaTkxNSwgY3R4W0hJXSwgcmluZywgc2Ny YXRjaCwgMCwgY3R4W0hJXSwgcGx1ZywgMCk7CisKKwl1bnBsdWdfc2hvd19xdWV1ZShpOTE1LCAm Y29yaywgcmluZyk7CisJZ2VtX2Nsb3NlKGk5MTUsIHBsdWcpOworCisJZ2VtX2NvbnRleHRfZGVz dHJveShpOTE1LCBjdHhbTE9dKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtISV0p OworCisJcHRyID0gZ2VtX21tYXBfX2d0dChpOTE1LCBzY3JhdGNoLCA0MDk2LCBQUk9UX1JFQUQp OworCWdlbV9zZXRfZG9tYWluKGk5MTUsIHNjcmF0Y2gsIC8qIG5vIHdyaXRlIGhhemFyZCBsaWVz ISAqLworCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7 CisJZ2VtX2Nsb3NlKGk5MTUsIHNjcmF0Y2gpOworCisJaWYgKGZsYWdzICYgRVFVQUwpIC8qIGVx dWFsIHByaW9yaXR5LCByZXN1bHQgd2lsbCBiZSBmaWZvICovCisJCWlndF9hc3NlcnRfZXFfdTMy KHB0clswXSwgY3R4W0hJXSk7CisJZWxzZQorCQlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMF0sIGN0 eFtMT10pOworCW11bm1hcChwdHIsIDQwOTYpOworfQorCitzdGF0aWMgdm9pZCBwcm9tb3Rpb24o aW50IGk5MTUsIHVuc2lnbmVkIHJpbmcpCit7CisJSUdUX0NPUktfSEFORExFKGNvcmspOworCXVp bnQzMl90IHJlc3VsdCwgZGVwOworCXVpbnQzMl90ICpwdHI7CisJdWludDMyX3QgY3R4WzNdOwor CXVpbnQzMl90IHBsdWc7CisKKwljdHhbTE9dID0gZ2VtX3F1ZXVlX2NyZWF0ZShpOTE1KTsKKwln ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkxNSwgY3R4W0xPXSwgTUlOX1BSSU8pOworCisJY3R4 W0hJXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkxNSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5 KGk5MTUsIGN0eFtISV0sIDApOworCisJY3R4W05PSVNFXSA9IGdlbV9xdWV1ZV9jcmVhdGUoaTkx NSk7CisJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGk5MTUsIGN0eFtOT0lTRV0sIE1JTl9QUklP LzIpOworCisJcmVzdWx0ID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKKwlkZXAgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYpOworCisJcGx1ZyA9IGlndF9jb3JrX3BsdWcoJmNvcmssIGk5MTUpOwor CisJLyogRXhwZWN0IHRoYXQgSEkgcHJvbW90ZXMgTE8sIHNvIHRoZSBvcmRlciB3aWxsIGJlIExP LCBISSwgTk9JU0UuCisJICoKKwkgKiBmaWZvIHdvdWxkIGJlIE5PSVNFLCBMTywgSEkuCisJICog c3RyaWN0IHByaW9yaXR5IHdvdWxkIGJlICBISSwgTk9JU0UsIExPCisJICovCisJc3RvcmVfZHdv cmQoaTkxNSwgY3R4W05PSVNFXSwgcmluZywgcmVzdWx0LCAwLCBjdHhbTk9JU0VdLCBwbHVnLCAw KTsKKwlzdG9yZV9kd29yZChpOTE1LCBjdHhbTE9dLCByaW5nLCByZXN1bHQsIDAsIGN0eFtMT10s IHBsdWcsIDApOworCisJLyogbGluayBMTyA8LT4gSEkgdmlhIGEgZGVwZW5kZW5jeSBvbiBhbm90 aGVyIGJ1ZmZlciAqLworCXN0b3JlX2R3b3JkKGk5MTUsIGN0eFtMT10sIHJpbmcsIGRlcCwgMCwg Y3R4W0xPXSwgMCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKTsKKwlzdG9yZV9kd29yZChp OTE1LCBjdHhbSEldLCByaW5nLCBkZXAsIDAsIGN0eFtISV0sIDAsIDApOworCisJc3RvcmVfZHdv cmQoaTkxNSwgY3R4W0hJXSwgcmluZywgcmVzdWx0LCAwLCBjdHhbSEldLCAwLCAwKTsKKworCXVu cGx1Z19zaG93X3F1ZXVlKGk5MTUsICZjb3JrLCByaW5nKTsKKwlnZW1fY2xvc2UoaTkxNSwgcGx1 Zyk7CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGk5MTUsIGN0eFtOT0lTRV0pOworCWdlbV9jb250 ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4W0xPXSk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHhbSEldKTsKKworCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgZGVwLCA0MDk2LCBQUk9UX1JF QUQpOworCWdlbV9zZXRfZG9tYWluKGk5MTUsIGRlcCwgLyogbm8gd3JpdGUgaGF6YXJkIGxpZXMh ICovCisJCQlJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlnZW1f Y2xvc2UoaTkxNSwgZGVwKTsKKworCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwgY3R4W0hJXSk7 CisJbXVubWFwKHB0ciwgNDA5Nik7CisKKwlwdHIgPSBnZW1fbW1hcF9fZ3R0KGk5MTUsIHJlc3Vs dCwgNDA5NiwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihpOTE1LCByZXN1bHQsIC8qIG5v IHdyaXRlIGhhemFyZCBsaWVzISAqLworCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1f RE9NQUlOX0dUVCk7CisJZ2VtX2Nsb3NlKGk5MTUsIHJlc3VsdCk7CisKKwlpZ3RfYXNzZXJ0X2Vx X3UzMihwdHJbMF0sIGN0eFtOT0lTRV0pOworCW11bm1hcChwdHIsIDQwOTYpOworfQorCitzdGF0 aWMgdm9pZCBzbW9rZXRlc3QoaW50IGk5MTUsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIHRpbWVv dXQpCit7CisJY29uc3QgaW50IG5jcHVzID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7 CisJdW5zaWduZWQgZW5naW5lc1sxNl07CisJdW5zaWduZWQgbmVuZ2luZTsKKwl1bnNpZ25lZCBl bmdpbmU7CisJdWludDMyX3Qgc2NyYXRjaDsKKwl1aW50MzJfdCAqcHRyOworCisJbmVuZ2luZSA9 IDA7CisJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5MTUsIGVuZ2luZSkKKwkJZW5naW5lc1tu ZW5naW5lKytdID0gZW5naW5lOworCWlndF9yZXF1aXJlKG5lbmdpbmUpOworCisJc2NyYXRjaCA9 IGdlbV9jcmVhdGUoaTkxNSwgNDA5Nik7CisJaWd0X2ZvcmsoY2hpbGQsIG5jcHVzKSB7CisJCXVu c2lnbmVkIGxvbmcgY291bnQgPSAwOworCQl1aW50MzJfdCBjdHg7CisKKwkJaGFyc19wZXRydXNr YV9mNTRfMV9yYW5kb21fcGVydHVyYihjaGlsZCk7CisKKwkJY3R4ID0gZ2VtX3F1ZXVlX2NyZWF0 ZShpOTE1KTsKKwkJaWd0X3VudGlsX3RpbWVvdXQodGltZW91dCkgeworCQkJaW50IHByaW87CisK KwkJCXByaW8gPSBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KE1BWF9QUklP IC0gTUlOX1BSSU8pICsgTUlOX1BSSU87CisJCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoaTkx NSwgY3R4LCBwcmlvKTsKKworCQkJZW5naW5lID0gZW5naW5lc1toYXJzX3BldHJ1c2thX2Y1NF8x X3JhbmRvbV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKKwkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwg ZW5naW5lLCBzY3JhdGNoLAorCQkJCSAgICA4KmNoaWxkICsgMCwgfmNoaWxkLAorCQkJCSAgICAw LCAwKTsKKwkJCWZvciAodW5zaWduZWQgaW50IHN0ZXAgPSAwOyBzdGVwIDwgODsgc3RlcCsrKQor CQkJCXN0b3JlX2R3b3JkKGk5MTUsIGN0eCwgZW5naW5lLCBzY3JhdGNoLAorCQkJCQkgICAgOCpj aGlsZCArIDQsIGNvdW50KyssCisJCQkJCSAgICAwLCAwKTsKKwkJfQorCQlnZW1fY29udGV4dF9k ZXN0cm95KGk5MTUsIGN0eCk7CisJfQorCWlndF93YWl0Y2hpbGRyZW4oKTsKKworCXB0ciA9IGdl bV9tbWFwX19ndHQoaTkxNSwgc2NyYXRjaCwgNDA5NiwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2Rv bWFpbihpOTE1LCBzY3JhdGNoLCAvKiBubyB3cml0ZSBoYXphcmQgbGllcyEgKi8KKwkJCUk5MTVf R0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWdlbV9jbG9zZShpOTE1LCBz Y3JhdGNoKTsKKworCWZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBuY3B1czsgbisrKSB7CisJCWln dF9hc3NlcnRfZXFfdTMyKHB0clsyKm5dLCB+bik7CisJCS8qCisJCSAqIE5vdGUgdGhpcyBjb3Vu dCBpcyBhcHByb3hpbWF0ZSBkdWUgdG8gdW5jb25zdHJhaW5lZAorCQkgKiBvcmRlcmluZyBvZiB0 aGUgZHdvcmQgd3JpdGVzIGJldHdlZW4gZW5naW5lcy4KKwkJICoKKwkJICogVGFrZSB0aGUgcmVz dWx0IHdpdGggYSBwaW5jaCBvZiBzYWx0LgorCQkgKi8KKwkJaWd0X2luZm8oIkNoaWxkWyVkXSBj b21wbGV0ZWQgJXUgY3ljbGVzXG4iLCAgbiwgcHRyWzIqbisxXSk7CisJfQorCW11bm1hcChwdHIs IDQwOTYpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lICplOworCWludCBpOTE1ID0gLTE7CisKKwlpZ3RfZml4dHVyZSB7CisJCWk5MTUgPSBk cm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGk5MTUpOwor CX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVp cmUoZ2VtX2NvbnRleHRzX2hhc19zaGFyZWRfZ3R0KGk5MTUpKTsKKwkJCWlndF9mb3JrX2hhbmdf ZGV0ZWN0b3IoaTkxNSk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiY3JlYXRlLXNoYXJlZC1ndHQi KQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgMCk7CisKKwkJaWd0X3N1YnRlc3QoImRldGFj aGVkLXNoYXJlZC1ndHQiKQorCQkJY3JlYXRlX3NoYXJlZF9ndHQoaTkxNSwgREVUQUNIRUQpOwor CisJCWlndF9zdWJ0ZXN0KCJkaXNqb2ludC10aW1lbGluZXMiKQorCQkJZGlzam9pbnRfdGltZWxp bmVzKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJzaW5nbGUtdGltZWxpbmUiKQorCQkJc2luZ2xl X3RpbWVsaW5lKGk5MTUpOworCisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0LXNoYXJlZC1ndHQiKQor CQkJZXhoYXVzdF9zaGFyZWRfZ3R0KGk5MTUsIDApOworCisJCWlndF9zdWJ0ZXN0KCJleGhhdXN0 LXNoYXJlZC1ndHQtbHJjIikKKwkJCWV4aGF1c3Rfc2hhcmVkX2d0dChpOTE1LCBFWEhBVVNUX0xS Qyk7CisKKwkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7IGUrKykg eworCQkJaWd0X3N1YnRlc3RfZigiZXhlYy1zaGFyZWQtZ3R0LSVzIiwgZS0+bmFtZSkKKwkJCQll eGVjX3NoYXJlZF9ndHQoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKworCQkJaWd0X3N1 YnRlc3RfZigiZXhlYy1zaW5nbGUtdGltZWxpbmUtJXMiLCBlLT5uYW1lKQorCQkJCWV4ZWNfc2lu Z2xlX3RpbWVsaW5lKGk5MTUsCisJCQkJCQkgICAgIGUtPmV4ZWNfaWQgfCBlLT5mbGFncyk7CisK KwkJCS8qCisJCQkgKiBDaGVjayB0aGF0IHRoZSBzaGFyZWQgY29udGV4dHMgb3BlcmF0ZSBpbmRl cGVuZGVudGx5LAorCQkJICogdGhhdCBpcyByZXF1ZXN0cyBvbiBvbmUgKCJxdWV1ZSIpIGNhbiBi ZSBzY2hlZHVsZWQKKwkJCSAqIGFyb3VuZCBhbm90aGVyIHF1ZXVlLiBXZSBvbmx5IGNoZWNrIHRo ZSBiYXNpY3MgaGVyZSwKKwkJCSAqIGVub3VnaCB0byByZWR1Y2UgdGhlIHF1ZXVlIGludG8ganVz dCBhbm90aGVyIGNvbnRleHQsCisJCQkgKiBhbmQgc28gcmVseSBvbiBnZW1fZXhlY19zY2hlZHVs ZSB0byBwcm92ZSB0aGUgcmVzdC4KKwkJCSAqLworCQkJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQkJ CWlndF9maXh0dXJlIHsKKwkJCQkJZ2VtX3JlcXVpcmVfcmluZyhpOTE1LCBlLT5leGVjX2lkIHwg ZS0+ZmxhZ3MpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0b3JlX2R3b3JkKGk5MTUsIGUt PmV4ZWNfaWQpIHwgZS0+ZmxhZ3MpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2Vu YWJsZWQoaTkxNSkpOworCQkJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1bGVyX2hhc19jdHhfcHJp b3JpdHkoaTkxNSkpOworCQkJCX0KKworCQkJCWlndF9zdWJ0ZXN0X2YoIlEtaW5kZXBlbmRlbnQt JXMiLCBlLT5uYW1lKQorCQkJCQlpbmRlcGVuZGVudChpOTE1LCBlLT5leGVjX2lkIHwgZS0+Zmxh Z3MsIDApOworCisJCQkJaWd0X3N1YnRlc3RfZigiUS1pbi1vcmRlci0lcyIsIGUtPm5hbWUpCisJ CQkJCXJlb3JkZXIoaTkxNSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCBFUVVBTCk7CisKKwkJCQlp Z3Rfc3VidGVzdF9mKCJRLW91dC1vcmRlci0lcyIsIGUtPm5hbWUpCisJCQkJCXJlb3JkZXIoaTkx NSwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCAwKTsKKworCQkJCWlndF9zdWJ0ZXN0X2YoIlEtcHJv bW90aW9uLSVzIiwgZS0+bmFtZSkKKwkJCQkJcHJvbW90aW9uKGk5MTUsIGUtPmV4ZWNfaWQgfCBl LT5mbGFncyk7CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJRLXNtb2tldGVzdC0lcyIsIGUtPm5hbWUp CisJCQkJCXNtb2tldGVzdChpOTE1LCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MsIDUpOworCQkJfQor CQl9CisKKwkJaWd0X3N1YnRlc3QoIlEtc21va2V0ZXN0LWFsbCIpIHsKKwkJCWlndF9yZXF1aXJl KGdlbV9zY2hlZHVsZXJfZW5hYmxlZChpOTE1KSk7CisJCQlpZ3RfcmVxdWlyZShnZW1fc2NoZWR1 bGVyX2hhc19jdHhfcHJpb3JpdHkoaTkxNSkpOworCQkJc21va2V0ZXN0KGk5MTUsIC0xLCAzMCk7 CisJCX0KKworCQlpZ3RfZml4dHVyZSB7CisJCQlpZ3Rfc3RvcF9oYW5nX2RldGVjdG9yKCk7CisJ CX0KKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9leGVjX3doaXNwZXIuYyBiL3Rl c3RzL2k5MTUvZ2VtX2V4ZWNfd2hpc3Blci5jCmluZGV4IDM5NjYwNGQzMS4uNDgwZDhlODczIDEw MDY0NAotLS0gYS90ZXN0cy9pOTE1L2dlbV9leGVjX3doaXNwZXIuYworKysgYi90ZXN0cy9pOTE1 L2dlbV9leGVjX3doaXNwZXIuYwpAQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgdm9pZCB2ZXJpZnlf cmVsb2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsCiAjZGVmaW5lIEhBTkcgMHgyMAogI2RlZmlu ZSBTWU5DIDB4NDAKICNkZWZpbmUgUFJJT1JJVFkgMHg4MAorI2RlZmluZSBRVUVVRVMgMHgxMDAK IAogc3RydWN0IGhhbmcgewogCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iajsK QEAgLTE2Miw3ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCBjdHhfc2V0X3JhbmRvbV9wcmlvcml0eShp bnQgZmQsIHVpbnQzMl90IGN0eCkKIHsKIAlpbnQgcHJpbyA9IGhhcnNfcGV0cnVza2FfZjU0XzFf cmFuZG9tX3Vuc2FmZV9tYXgoMTAyNCkgLSA1MTI7CiAJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5 KGZkLCBjdHgsIHByaW8pOwotfTsKK30KIAogc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVu c2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCiB7CkBAIC0yMTcsNiArMjE4LDkgQEAgc3Rh dGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQgZmxhZ3Mp CiAJaWYgKGZsYWdzICYgQ09OVEVYVFMpCiAJCWdlbV9yZXF1aXJlX2NvbnRleHRzKGZkKTsKIAor CWlmIChmbGFncyAmIFFVRVVFUykKKwkJaWd0X3JlcXVpcmUoZ2VtX2hhc19xdWV1ZXMoZmQpKTsK KwogCWlmIChmbGFncyAmIEhBTkcpCiAJCWluaXRfaGFuZygmaGFuZyk7CiAKQEAgLTI4MSw2ICsy ODUsMTAgQEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5z aWduZWQgZmxhZ3MpCiAJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQljb250ZXh0c1tu XSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CiAJCX0KKwkJaWYgKGZsYWdzICYgUVVFVUVTKSB7 CisJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKKwkJCQljb250ZXh0c1tuXSA9IGdlbV9xdWV1 ZV9jcmVhdGUoZmQpOworCQl9CiAJCWlmIChmbGFncyAmIEZEUykgewogCQkJZm9yIChuID0gMDsg biA8IDY0OyBuKyspCiAJCQkJZmRzW25dID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7 CkBAIC0zOTEsNyArMzk5LDcgQEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVk IGVuZ2luZSwgdW5zaWduZWQgZmxhZ3MpCiAJCQkJCQlleGVjYnVmLmZsYWdzICY9IH5FTkdJTkVf TUFTSzsKIAkJCQkJCWV4ZWNidWYuZmxhZ3MgfD0gZW5naW5lc1tyYW5kKCkgJSBuZW5naW5lXTsK IAkJCQkJfQotCQkJCQlpZiAoZmxhZ3MgJiBDT05URVhUUykgeworCQkJCQlpZiAoZmxhZ3MgJiAo Q09OVEVYVFMgfCBRVUVVRVMpKSB7CiAJCQkJCQlleGVjYnVmLnJzdmQxID0gY29udGV4dHNbcmFu ZCgpICUgNjRdOwogCQkJCQkJaWYgKGZsYWdzICYgUFJJT1JJVFkpCiAJCQkJCQkJY3R4X3NldF9y YW5kb21fcHJpb3JpdHkodGhpc19mZCwgZXhlY2J1Zi5yc3ZkMSk7CkBAIC00NzQsNyArNDgyLDcg QEAgc3RhdGljIHZvaWQgd2hpc3BlcihpbnQgZmQsIHVuc2lnbmVkIGVuZ2luZSwgdW5zaWduZWQg ZmxhZ3MpCiAJCQlmb3IgKG4gPSAwOyBuIDwgNjQ7IG4rKykKIAkJCQljbG9zZShmZHNbbl0pOwog CQl9Ci0JCWlmIChmbGFncyAmIENPTlRFWFRTKSB7CisJCWlmIChmbGFncyAmIChDT05URVhUUyB8 IFFVRVVFUykpIHsKIAkJCWZvciAobiA9IDA7IG4gPCA2NDsgbisrKQogCQkJCWdlbV9jb250ZXh0 X2Rlc3Ryb3koZmQsIGNvbnRleHRzW25dKTsKIAkJfQpAQCAtNTEwLDE4ICs1MTgsMjQgQEAgaWd0 X21haW4KIAkJeyAiY2hhaW4tZm9ya2VkIiwgQ0hBSU4gfCBGT1JLRUQgfSwKIAkJeyAiY2hhaW4t aW50ZXJydXB0aWJsZSIsIENIQUlOIHwgSU5URVJSVVBUSUJMRSB9LAogCQl7ICJjaGFpbi1zeW5j IiwgQ0hBSU4gfCBTWU5DIH0sCi0JCXsgImNvbnRleHRzIiwgQ09OVEVYVFMgfSwKLQkJeyAiY29u dGV4dHMtaW50ZXJydXB0aWJsZSIsIENPTlRFWFRTIHwgSU5URVJSVVBUSUJMRX0sCi0JCXsgImNv bnRleHRzLWZvcmtlZCIsIENPTlRFWFRTIHwgRk9SS0VEfSwKLQkJeyAiY29udGV4dHMtcHJpb3Jp dHkiLCBDT05URVhUUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0sCi0JCXsgImNvbnRleHRzLWNoYWlu IiwgQ09OVEVYVFMgfCBDSEFJTiB9LAotCQl7ICJjb250ZXh0cy1zeW5jIiwgQ09OVEVYVFMgfCBT WU5DIH0sCiAJCXsgImZkcyIsIEZEUyB9LAogCQl7ICJmZHMtaW50ZXJydXB0aWJsZSIsIEZEUyB8 IElOVEVSUlVQVElCTEV9LAogCQl7ICJmZHMtZm9ya2VkIiwgRkRTIHwgRk9SS0VEfSwKIAkJeyAi ZmRzLXByaW9yaXR5IiwgRkRTIHwgRk9SS0VEIHwgUFJJT1JJVFkgfSwKIAkJeyAiZmRzLWNoYWlu IiwgRkRTIHwgQ0hBSU59LAogCQl7ICJmZHMtc3luYyIsIEZEUyB8IFNZTkN9LAorCQl7ICJjb250 ZXh0cyIsIENPTlRFWFRTIH0sCisJCXsgImNvbnRleHRzLWludGVycnVwdGlibGUiLCBDT05URVhU UyB8IElOVEVSUlVQVElCTEV9LAorCQl7ICJjb250ZXh0cy1mb3JrZWQiLCBDT05URVhUUyB8IEZP UktFRH0sCisJCXsgImNvbnRleHRzLXByaW9yaXR5IiwgQ09OVEVYVFMgfCBGT1JLRUQgfCBQUklP UklUWSB9LAorCQl7ICJjb250ZXh0cy1jaGFpbiIsIENPTlRFWFRTIHwgQ0hBSU4gfSwKKwkJeyAi Y29udGV4dHMtc3luYyIsIENPTlRFWFRTIHwgU1lOQyB9LAorCQl7ICJxdWV1ZXMiLCBRVUVVRVMg fSwKKwkJeyAicXVldWVzLWludGVycnVwdGlibGUiLCBRVUVVRVMgfCBJTlRFUlJVUFRJQkxFfSwK KwkJeyAicXVldWVzLWZvcmtlZCIsIFFVRVVFUyB8IEZPUktFRH0sCisJCXsgInF1ZXVlcy1wcmlv cml0eSIsIFFVRVVFUyB8IEZPUktFRCB8IFBSSU9SSVRZIH0sCisJCXsgInF1ZXVlcy1jaGFpbiIs IFFVRVVFUyB8IENIQUlOIH0sCisJCXsgInF1ZXVlcy1zeW5jIiwgUVVFVUVTIHwgU1lOQyB9LAog CQl7IE5VTEwgfQogCX07CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQg Yi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCA5NDcyMDYxNDkuLmZhYjJhODI4YiAxMDA2NDQKLS0t IGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTExOSw2ICsx MTksNyBAQCBpOTE1X3Byb2dzID0gWwogCSdnZW1fY3R4X2V4ZWMnLAogCSdnZW1fY3R4X2lzb2xh dGlvbicsCiAJJ2dlbV9jdHhfcGFyYW0nLAorCSdnZW1fY3R4X3NoYXJlZCcsCiAJJ2dlbV9jdHhf c3dpdGNoJywKIAknZ2VtX2N0eF90aHJhc2gnLAogCSdnZW1fZG91YmxlX2lycV9sb29wJywKLS0g CjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K aWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2