From mboxrd@z Thu Jan 1 00:00:00 1970 From: akash.goel@intel.com Subject: [PATCH v8] igt/gem_trtt: Exercise the TRTT hardware Date: Tue, 22 Mar 2016 14:07:36 +0530 Message-ID: <1458635856-4737-1-git-send-email-akash.goel@intel.com> References: <20160321101156.GO21717@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 3C5EE6E6F5 for ; Tue, 22 Mar 2016 08:25:40 +0000 (UTC) In-Reply-To: <20160321101156.GO21717@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Akash Goel List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+CgpUaGlzIHBhdGNoIHByb3Zp ZGVzIHRoZSB0ZXN0Y2FzZSB0byBleGVyY2lzZSB0aGUgVFJUVCBoYXJkd2FyZS4KClNvbWUgcGxh dGZvcm1zIGhhdmUgYW4gYWRkaXRpb25hbCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlIHN1 cHBvcnQgaW4KZm9ybSBvZiBUaWxlZCBSZXNvdXJjZSBUcmFuc2xhdGlvbiBUYWJsZSAoVFItVFQp IHdoaWNoIHByb3ZpZGVzIGFuIGV4dHJhIGxldmVsCm9mIGFic3RyYWN0aW9uIG92ZXIgUFBHVFQu ClRoaXMgaXMgdXNlZnVsIGZvciBtYXBwaW5nIFNwYXJzZS9UaWxlZCB0ZXh0dXJlIHJlc291cmNl cy4KClRSLVRUIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIFBQR1RULCBhIG5ldyBpbnN0YW5jZSBv ZiBUUi1UVCB3aWxsIGJlIHJlcXVpcmVkCmZvciBhIG5ldyBQUEdUVCBpbnN0YW5jZSwgYnV0IFRS LVRUIG1heSBub3QgZW5hYmxlZCBmb3IgZXZlcnkgY29udGV4dC4KMS8xNnRoIG9mIHRoZSA0OGJp dCBQUEdUVCBzcGFjZSBpcyBlYXJtYXJrZWQgZm9yIHRoZSB0cmFuc2xhdGlvbiBieSBUUi1UVCwK d2hpY2ggc3VjaCBjaHVuayB0byB1c2UgaXMgY29udmV5ZWQgdG8gSFcgdGhyb3VnaCBhIHJlZ2lz dGVyLgpBbnkgR0ZYIGFkZHJlc3MsIHdoaWNoIGxpZXMgaW4gdGhhdCByZXNlcnZlZCA0NCBiaXQg cmFuZ2Ugd2lsbCBiZSB0cmFuc2xhdGVkCnRocm91Z2ggVFItVFQgZmlyc3QgYW5kIHRoZW4gdGhy b3VnaCBQUEdUVCB0byBnZXQgdGhlIGFjdHVhbCBwaHlzaWNhbCBhZGRyZXNzLgoKVFJUVCBpcyBj b25zdHJ1Y3RlZCBhcyBhIDMgbGV2ZWwgdGlsZSBUYWJsZS4gRWFjaCB0aWxlIGlzIDY0S0IgaXMg c2l6ZSB3aGljaApsZWF2ZXMgYmVoaW5kIDQ0LTE2PTI4IGFkZHJlc3MgYml0cy4gMjhiaXRzIGFy ZSBwYXJ0aXRpb25lZCBhcyA5KzkrMTAsIGFuZAplYWNoIGxldmVsIGlzIGNvbnRhaW5lZCB3aXRo aW4gYSA0S0IgcGFnZSBoZW5jZSBMMyBhbmQgTDIgaXMgY29tcG9zZWQgb2YKNTEyIDY0YiBlbnRy aWVzIGFuZCBMMSBpcyBjb21wb3NlZCBvZiAxMDI0IDMyYiBlbnRyaWVzLgoKVGhlcmUgaXMgYSBw cm92aXNpb24gdG8ga2VlcCBUUi1UVCBUYWJsZXMgaW4gdmlydHVhbCBzcGFjZSwgd2hlcmUgdGhl IHBhZ2VzIG9mClRSVFQgdGFibGVzIHdpbGwgYmUgbWFwcGVkIHRvIFBQR1RULiBUaGlzIGlzIHRo ZSBhZG9wdGVkIG1vZGUsIGFzIGluIHRoaXMgbW9kZQpVTUQgd2lsbCBoYXZlIGEgZnVsbCBjb250 cm9sIG9uIFRSLVRUIG1hbmFnZW1lbnQsIHdpdGggYmFyZSBtaW5pbXVtIHN1cHBvcnQKZnJvbSBL TUQuClNvIHRoZSBlbnRyaWVzIG9mIEwzIHRhYmxlIHdpbGwgY29udGFpbiB0aGUgUFBHVFQgb2Zm c2V0IG9mIEwyIFRhYmxlIHBhZ2VzLApzaW1pbGFybHkgZW50cmllcyBvZiBMMiB0YWJsZSB3aWxs IGNvbnRhaW4gdGhlIFBQR1RUIG9mZnNldCBvZiBMMSBUYWJsZSBwYWdlcy4KVGhlIGVudHJpZXMg b2YgTDEgdGFibGUgd2lsbCBjb250YWluIHRoZSBQUEdUVCBvZmZzZXQgb2YgQk9zIGFjdHVhbGx5 IGJhY2tpbmcKdGhlIFNwYXJzZSByZXNvdXJjZXMuCgpJOTE1X0dFTV9DT05URVhUX1NFVFBBUkFN IGlvY3RsIGlzIHVzZWQgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQgZm9yIGEKY2VydGFp biBjb250ZXh0LCBhIG5ldyBJOTE1X0NPTlRFWFRfUEFSQU1fRU5BQkxFX1RSVFQgcGFyYW0gaGFz IGJlZW4KYWRkZWQgdG8gdGhlIENPTlRFWFRfU0VUUEFSQU0gaW9jdGwgZm9yIHRoYXQgcHVycG9z ZS4KCnYyOgogLSBBZGQgbmV3IHdyYXBwZXIgZnVuY3Rpb24gX19nZW1fY29udGV4dF9yZXF1aXJl X3BhcmFtIGFuZCB1c2VkIHRoYXQKICAgdG8gZGV0ZWN0IHRoZSBUUi1UVCBzdXBwb3J0CiAtIFVz ZSBpZ3RfbWFpbiBtYWNybywgcmVuYW1lIGNlcnRhaW4gZnVuY3Rpb24sIHJlbW92ZSBleHRyYSB3 aGl0ZSBzcGFjZSwKICAgY2xlYW51cCB0aGUgY29kZSAoQ2hyaXMpCiAtIEVuaGFuY2UgdGhlIGJh c2ljIHN1YnRlc3QgdG8gZXhlcmNpc2UgYWxsIHBvc3NpYmxlIFRSLVRUIHNlZ21lbnQgc3RhcnQK ICAgbG9jYXRpb25zIChpLmUuIDE2IG9mIHRoZW0pICYgZm9yIGV2ZXJ5IGl0ZXJhdGlvbiBjcmVh dGUgYSBuZXcgY29udGV4dC4KCnYzOgogLSBHZXQgcmlkIG9mIHNvbWUgc3VwZXJmbHVvdXMgbG9j YWwgdmFyaWFibGVzIChDaHJpcykKIC0gQWRkIGFzc2VydHMgdG8gdmFsaWRhdGUgd2hldGhlciB0 aGUgR0ZYIGFkZHJlc3MgdXNlZCBpbiBNSV9TVE9SRV9EQVRBX0lNTQogICBjb21tYW5kIGlzIGlu IGNhbm9uaWNhbCBmb3JtICYgaXMgY29ycmVjdGx5IGFsaWduZWQgb3Igbm90IChDaHJpcykKIC0g UmVtb3ZlIGNsZWFyaW5nIG9mIGVycm5vIGluIGhhc190cnR0X3N1cHBvcnQgZnVuY3Rpb24gKENo cmlzKQogLSBVc2UgdGhlIDQ4Ql9BRERSRVNTIGZsYWcgZm9yIGJhdGNoIGJ1ZmZlciBCTyBhbHNv IChDaHJpcykKIC0gUmViYXNlZC4KCnY0OgogLSBBZGQgbmV3IHN1YnRlc3QgZm9yIGludmFsaWQg c2V0dGluZ3MuCiAtIEFkZCBuZXcgbG9jYWwgZnVuY3Rpb24gcXVlcnlfdHJ0dCB0byBjaGVjayB0 aGUgRHJpdmVyIHN0YXRlIChDaHJpcykKIC0gQWRkIG5ldyBoZWxwZXIgZnVuY3Rpb24gZ2VtX3Vz ZXNfNjRiX3BwZ3R0IHRvIGRldGVjdCA2NGJpdCBQUEdUVCBzdXBwb3J0CiAtIFJlbW92ZSBsb2Nh bCBmdW5jdGlvbnMgdXNlc19mdWxsX3BwZ3R0ICYgaGFzX3NvZnRwaW5fc3VwcG9ydCwgaW5zdGVh ZCB1c2UKICAgZXhpc3Rpbmcgd3JhcHBlcnMgZ2VtX2hhc19zb2Z0cGluICYgZ2VtX3VzZXNfNjRi X3BwZ3R0IChDaHJpcykuCiAtIFJlbW92ZSByZWR1bmRhbnQgYml0IG1hc2tpbmcgaW4gZW1pdF9z dG9yZV94eHggZnVuY3Rpb25zIChDaHJpcykuCgp2NToKIC0gQWRkIDIgbmV3IHN1YnRlc3RzIGNo ZWNraW5nIHRoZSBmb3JjZWZ1bCBldmljdGlvbiBvZiBhY3RpdmUvaGFuZ2luZwogICBvYmplY3Rz IG92ZXJsYXBwaW5nIHdpdGggdGhlIFRSLVRUIHNlZ21lbnQgKENocmlzKS4KIC0gTW92ZSBnZW44 X2Nhbm9uaWNhbF9hZGRyIHRvIGlndF9hdXggYXMgaXRzIG5lZWRlZCBieSBvdGhlciB0ZXN0cyBh bHNvLAogICB3aGljaCBkb2VzIHNvZnQgcGlubmluZywgYW5kIG5vdCBqdXN0IGdlbV9zb2Z0cGlu IChNaWNoZWwpCgp2NjoKIC0gQWxsb3cgZWFjaCBzdWJ0ZXN0IHRvIGhhdmUgdGhlaXIgb3duIHBy aXZhdGUgZHJtIGZpbGUgaW5zdGFuY2UuCiAtIFVwZGF0ZSB0aGUgYmFzaWMgc3VidGVzdCB0byBj aGVjayBlYWNoIHNlZ21lbnQgbG9jYXRpb24gZm9yIGJvdGggZGVmYXVsdAogICBhbmQgVXNlciBj cmVhdGVkIGNvbnRleHRzIChDaHJpcykuCiAtIFJlb3JkZXIgaWd0X3JlcXVpcmUoc29mdHBpbi82 NGJfcHBndHQvdHJ0dCkgdG8gaGF2ZSB0cnR0IGZpcnN0IChDaHJpcykuCiAtIFVwZGF0ZSB0aGUg aW52YWxpZCBzdWJ0ZXN0IHRvIGNoZWNrIGZvciB0aGUgaW1wcm9wZXIgdmFsdWUgb2YgTnVsbCAm CiAgIEludmFsaWQgdGlsZXMuCgp2NzoKIC0gQWRkIGludGVycnVwdGlibGUgdmVyc2lvbiBvZiB0 aGUgMiBldmljdGlvbiBzdWJ0ZXN0cyAoQ2hyaXMpCiAtIENvcnJlY3QgdGhlIGFsaWdubWVudCBj aGVjayBmb3IgdGhlIE1JIFN0b3JlIHF3b3JkIGNvbW1hbmQgKENocmlzKS4KCnY4OgogLSBVc2Ug bmV3IGlndF9pbnRlcnJ1cHRpYmxlIG1hY3JvIGZvciB0aGUgaW50ZXJydXB0aWJsZSBzdWJ0ZXN0 cywgYXMgaXRzCiAgIG1vcmUgZWZmZWN0aXZlICYgcHJlY2lzZS4KIC0gUmVtb3ZlIGludGVycnVw dGlibGUgdmVyc2lvbiBvZiBldmljdF9oYW5nIHN1YnRlc3QsIGFzIGl0IGRvZXNuJ3QgcHJvdmlk ZQogICBhbnkgYWRkaXRpb25hbCBjb3ZlcmFnZSAoQ2hyaXMpCiAtIFJlYmFzZWQuCgpDYzogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBNaWNoZWwgVGhpZXJyeSA8 bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBBa2FzaCBHb2VsIDxha2Fz aC5nb2VsQGludGVsLmNvbT4KLS0tCiBsaWIvaWd0X2F1eC5jICAgICAgICAgIHwgIDExICsKIGxp Yi9pZ3RfYXV4LmggICAgICAgICAgfCAgIDEgKwogbGliL2lndF9ndC5oICAgICAgICAgICB8ICAg MSArCiBsaWIvaW9jdGxfd3JhcHBlcnMuYyAgIHwgIDM5ICsrLQogbGliL2lvY3RsX3dyYXBwZXJz LmggICB8ICAgMyArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRlc3RzL2dlbV9z b2Z0cGluLmMgICAgfCAgMTggKy0KIHRlc3RzL2dlbV90cnR0LmMgICAgICAgfCA2MzAgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFu Z2VkLCA2ODEgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdHMvZ2VtX3RydHQuYwoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmMgYi9saWIvaWd0 X2F1eC5jCmluZGV4IGRhMjFmMTAuLjk1OGNjNTMgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXV4LmMK KysrIGIvbGliL2lndF9hdXguYwpAQCAtMzk5LDYgKzM5OSwxNyBAQCB2b2lkIGlndF9leGNoYW5n ZV9pbnQodm9pZCAqYXJyYXksIHVuc2lnbmVkIGksIHVuc2lnbmVkIGopCiAJaW50X2FycltqXSA9 IHRtcDsKIH0KIAorLyogaWd0X2Nhbm9uaWNhbF9hZGRyCisgKiBVc2VkIHRvIGNvbnZlcnQgYW55 IGFkZHJlc3MgaW50byBjYW5vbmljYWwgZm9ybSwgaS5lLiBbNjM6NDhdID09IFs0N10uCisgKiBC YXNlZCBvbiBrZXJuZWwncyBzaWduX2V4dGVuZDY0IGltcGxlbWVudGF0aW9uLgorICogQGFkZHJl c3MgLSBhIHZpcnR1YWwgYWRkcmVzcworKi8KK3VpbnQ2NF90IGlndF9jYW5vbmljYWxfYWRkcih1 aW50NjRfdCBhZGRyZXNzKQoreworCV9fdTggc2hpZnQgPSA2MyAtIEdFTjhfSElHSF9BRERSRVNT X0JJVDsKKwlyZXR1cm4gKF9fczY0KShhZGRyZXNzIDw8IHNoaWZ0KSA+PiBzaGlmdDsKK30KKwog c3RhdGljIHVpbnQzMl90CiBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmUodm9pZCkK IHsKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmggYi9saWIvaWd0X2F1eC5oCmluZGV4IDEwMWZh ZDEuLmQxMTU0ZjAgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXV4LmgKKysrIGIvbGliL2lndF9hdXgu aApAQCAtNTYsNiArNTYsNyBAQCB2b2lkIGlndF9wZXJtdXRlX2FycmF5KHZvaWQgKmFycmF5LCB1 bnNpZ25lZCBzaXplLAogdm9pZCBpZ3RfcHJvZ3Jlc3MoY29uc3QgY2hhciAqaGVhZGVyLCB1aW50 NjRfdCBpLCB1aW50NjRfdCB0b3RhbCk7CiB2b2lkIGlndF9wcmludF9hY3Rpdml0eSh2b2lkKTsK IGJvb2wgaWd0X2NoZWNrX2Jvb2xlYW5fZW52X3Zhcihjb25zdCBjaGFyICplbnZfdmFyLCBib29s IGRlZmF1bHRfdmFsdWUpOwordWludDY0X3QgaWd0X2Nhbm9uaWNhbF9hZGRyKHVpbnQ2NF90IGFk ZHJlc3MpOwogCiBib29sIGlndF9hdWJfZHVtcF9lbmFibGVkKHZvaWQpOwogCmRpZmYgLS1naXQg YS9saWIvaWd0X2d0LmggYi9saWIvaWd0X2d0LmgKaW5kZXggZGZlMWNmYi4uMjhmMmUyYSAxMDA2 NDQKLS0tIGEvbGliL2lndF9ndC5oCisrKyBiL2xpYi9pZ3RfZ3QuaApAQCAtMTA4LDUgKzEwOCw2 IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSB7CiAJICAgICBl X18rKykgXAogCQlmb3JfaWYgKGdlbV9oYXNfcmluZyhmZCwgZmxhZ3NfXyA9IGVfXy0+ZXhlY19p ZCB8IGVfXy0+ZmxhZ3MpKQogCisjZGVmaW5lIEdFTjhfSElHSF9BRERSRVNTX0JJVCA0NwogCiAj ZW5kaWYgLyogSUdUX0dUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5jIGIv bGliL2lvY3RsX3dyYXBwZXJzLmMKaW5kZXggMDc2YmNlOC4uYjdjMzhmOSAxMDA2NDQKLS0tIGEv bGliL2lvY3RsX3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKQEAgLTg5Miw2 ICs4OTIsMjIgQEAgdm9pZCBnZW1fY29udGV4dF9zZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9j YWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCkKIAlpZ3RfYXNzZXJ0KF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCBwKSA9PSAwKTsKIH0KIAoraW50IF9fZ2VtX2NvbnRleHRfcmVxdWlyZV9w YXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKQoreworCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9j b250ZXh0X3BhcmFtIHA7CisJaW50IHJldDsKKworCXAuY29udGV4dCA9IDA7CisJcC5wYXJhbSA9 IHBhcmFtOworCXAudmFsdWUgPSAwOworCXAuc2l6ZSA9IDA7CisKKwlyZXQgPSBpZ3RfaW9jdGwo ZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0NPTlRFWFRfR0VUUEFSQU0sICZwKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gLWVycm5vOworCXJldHVybiAwOworfQorCiAvKioKICAqIGdlbV9jb250ZXh0 X3JlcXVpcmVfcGFyYW06CiAgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCkBA IC05MDIsMTQgKzkxOCw3IEBAIHZvaWQgZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGludCBmZCwgc3Ry dWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApCiAgKi8KIHZvaWQgZ2VtX2NvbnRl eHRfcmVxdWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKQogewotCXN0cnVjdCBsb2Nh bF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHA7Ci0KLQlwLmNvbnRleHQgPSAwOwotCXAucGFyYW0g PSBwYXJhbTsKLQlwLnZhbHVlID0gMDsKLQlwLnNpemUgPSAwOwotCi0JaWd0X3JlcXVpcmUoaWd0 X2lvY3RsKGZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9DT05URVhUX0dFVFBBUkFNLCAmcCkgPT0g MCk7CisJaWd0X3JlcXVpcmUoX19nZW1fY29udGV4dF9yZXF1aXJlX3BhcmFtKGZkLCBwYXJhbSkg PT0gMCk7CiB9CiAKIHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9iYW5fcGVyaW9kKGludCBmZCkK QEAgLTEwNzMsNiArMTA4MiwyMCBAQCBib29sIGdlbV91c2VzX2Z1bGxfcHBndHQoaW50IGZkKQog fQogCiAvKioKKyAqIGdlbV91c2VzXzY0Yl9wcGd0dDoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBm aWxlIGRlc2NyaXB0b3IKKyAqCisgKiBGZWF0dXJlIHRlc3QgbWFjcm8gdG8gY2hlY2sgd2hldGhl ciB0aGUga2VybmVsIGludGVybmFsbHkgdXNlcyBmdWxsCisgKiA2NGIgcGVyLXByb2Nlc3MgZ3R0 IHRvIGV4ZWN1dGUgYmF0Y2hlcy4KKyAqCisgKiBSZXR1cm5zOiBXaGV0aGVyIGJhdGNoZXMgYXJl IHJ1biB0aHJvdWdoIGZ1bGwgNjRiIHBwZ3R0LgorICovCitib29sIGdlbV91c2VzXzY0Yl9wcGd0 dChpbnQgZmQpCit7CisJcmV0dXJuIGdlbV9ndHRfdHlwZShmZCkgPiAyOworfQorCisvKioKICAq IGdlbV9hdmFpbGFibGVfZmVuY2VzOgogICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3Jp cHRvcgogICoKZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5oIGIvbGliL2lvY3RsX3dy YXBwZXJzLmgKaW5kZXggZDk4NmY2MS4uYzdhMjM0OCAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dy YXBwZXJzLmgKKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmgKQEAgLTEwOSw5ICsxMDksMTEgQEAg c3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gewogI2RlZmluZSBMT0NBTF9DT05U RVhUX1BBUkFNX0JBTl9QRVJJT0QJMHgxCiAjZGVmaW5lIExPQ0FMX0NPTlRFWFRfUEFSQU1fTk9f WkVST01BUAkweDIKICNkZWZpbmUgTE9DQUxfQ09OVEVYVF9QQVJBTV9HVFRfU0laRQkweDMKKyNk ZWZpbmUgTE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUCTB4NAogCXVpbnQ2NF90IHZhbHVlOwogfTsK IHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9iYW5fcGVyaW9kKGludCBmZCk7CitpbnQgX19nZW1f Y29udGV4dF9yZXF1aXJlX3BhcmFtKGludCBmZCwgdWludDY0X3QgcGFyYW0pOwogdm9pZCBnZW1f Y29udGV4dF9yZXF1aXJlX3BhcmFtKGludCBmZCwgdWludDY0X3QgcGFyYW0pOwogdm9pZCBnZW1f Y29udGV4dF9nZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9w YXJhbSAqcCk7CiB2b2lkIGdlbV9jb250ZXh0X3NldF9wYXJhbShpbnQgZmQsIHN0cnVjdCBsb2Nh bF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICpwKTsKQEAgLTE0Myw2ICsxNDUsNyBAQCBib29sIGdl bV9oYXNfYnNkMihpbnQgZmQpOwogaW50IGdlbV9ndHRfdHlwZShpbnQgZmQpOwogYm9vbCBnZW1f dXNlc19wcGd0dChpbnQgZmQpOwogYm9vbCBnZW1fdXNlc19mdWxsX3BwZ3R0KGludCBmZCk7Citi b29sIGdlbV91c2VzXzY0Yl9wcGd0dChpbnQgZmQpOwogaW50IGdlbV9hdmFpbGFibGVfZmVuY2Vz KGludCBmZCk7CiB1aW50NjRfdCBnZW1fYXZhaWxhYmxlX2FwZXJ0dXJlX3NpemUoaW50IGZkKTsK IHVpbnQ2NF90IGdlbV9hcGVydHVyZV9zaXplKGludCBmZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA1YjExOWFmLi4x MGU3ODBjIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKQEAgLTc1LDYgKzc1LDcgQEAgVEVTVFNfcHJvZ3NfTSA9IFwKIAlnZW1f c3RyZWFtaW5nX3dyaXRlcyBcCiAJZ2VtX3RpbGVkX2JsaXRzIFwKIAlnZW1fdGlsZWRfcGFydGlh bF9wd3JpdGVfcHJlYWQgXAorCWdlbV90cnR0IFwKIAlnZW1fdXNlcnB0cl9ibGl0cyBcCiAJZ2Vt X3dyaXRlX3JlYWRfcmluZ19zd2l0Y2ggXAogCWttc19hZGRmYl9iYXNpYyBcCmRpZmYgLS1naXQg YS90ZXN0cy9nZW1fc29mdHBpbi5jIGIvdGVzdHMvZ2VtX3NvZnRwaW4uYwppbmRleCAxYTllZjAy Li5lN2E3OTZhIDEwMDY0NAotLS0gYS90ZXN0cy9nZW1fc29mdHBpbi5jCisrKyBiL3Rlc3RzL2dl bV9zb2Z0cGluLmMKQEAgLTMxLDE4ICszMSw2IEBACiAjZGVmaW5lIEVYRUNfT0JKRUNUX1BJTk5F RAkoMTw8NCkKICNkZWZpbmUgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8PDMp CiAKLS8qIGdlbjhfY2Fub25pY2FsX2FkZHIKLSAqIFVzZWQgdG8gY29udmVydCBhbnkgYWRkcmVz cyBpbnRvIGNhbm9uaWNhbCBmb3JtLCBpLmUuIFs2Mzo0OF0gPT0gWzQ3XS4KLSAqIEJhc2VkIG9u IGtlcm5lbCdzIHNpZ25fZXh0ZW5kNjQgaW1wbGVtZW50YXRpb24uCi0gKiBAYWRkcmVzcyAtIGEg dmlydHVhbCBhZGRyZXNzCi0qLwotI2RlZmluZSBHRU44X0hJR0hfQUREUkVTU19CSVQgNDcKLXN0 YXRpYyB1aW50NjRfdCBnZW44X2Nhbm9uaWNhbF9hZGRyKHVpbnQ2NF90IGFkZHJlc3MpCi17Ci0J X191OCBzaGlmdCA9IDYzIC0gR0VOOF9ISUdIX0FERFJFU1NfQklUOwotCXJldHVybiAoX19zNjQp KGFkZHJlc3MgPDwgc2hpZnQpID4+IHNoaWZ0OwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0X2ludmFs aWQoaW50IGZkKQogewogCWNvbnN0IHVpbnQzMl90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7 CkBAIC03MCw3ICs1OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZChpbnQgZmQpCiAKIAkv KiBDaGVjayBiZXlvbmQgYm91bmRzIG9mIGFwZXJ0dXJlICovCiAJb2JqZWN0Lm9mZnNldCA9IGdl bV9hcGVydHVyZV9zaXplKGZkKSAtIDQwOTY7Ci0Jb2JqZWN0Lm9mZnNldCA9IGdlbjhfY2Fub25p Y2FsX2FkZHIob2JqZWN0Lm9mZnNldCk7CisJb2JqZWN0Lm9mZnNldCA9IGlndF9jYW5vbmljYWxf YWRkcihvYmplY3Qub2Zmc2V0KTsKIAlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZl eGVjYnVmKSwgLUVJTlZBTCk7CiAKIAkvKiBDaGVjayBnZW44IGNhbm9uaWNhbCBhZGRyZXNzaW5n ICovCkBAIC03OCw3ICs2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZChpbnQgZmQpCiAJ CW9iamVjdC5vZmZzZXQgPSAxdWxsIDw8IEdFTjhfSElHSF9BRERSRVNTX0JJVDsKIAkJaWd0X2Fz c2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwogCi0JCW9iamVj dC5vZmZzZXQgPSBnZW44X2Nhbm9uaWNhbF9hZGRyKG9iamVjdC5vZmZzZXQpOworCQlvYmplY3Qu b2Zmc2V0ID0gaWd0X2Nhbm9uaWNhbF9hZGRyKG9iamVjdC5vZmZzZXQpOwogCQlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgMCk7CiAJfQogCkBAIC04OCw3ICs3Niw3 IEBAIHN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZChpbnQgZmQpCiAJCW9iamVjdC5vZmZzZXQgPSAx dWxsPDwzMjsKIAkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1F SU5WQUwpOwogCi0JCW9iamVjdC5vZmZzZXQgPSBnZW44X2Nhbm9uaWNhbF9hZGRyKG9iamVjdC5v ZmZzZXQpOworCQlvYmplY3Qub2Zmc2V0ID0gaWd0X2Nhbm9uaWNhbF9hZGRyKG9iamVjdC5vZmZz ZXQpOwogCQlvYmplY3QuZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1M7 CiAJCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAwKTsKIAl9CmRp ZmYgLS1naXQgYS90ZXN0cy9nZW1fdHJ0dC5jIGIvdGVzdHMvZ2VtX3RydHQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjhlMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMvZ2VtX3RydHQuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGlu dGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorCisjZGVmaW5lIEJPX1NJWkUg NDA5NgorI2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCisjZGVmaW5lIEVYRUNfT0JK RUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQorCisvKiBoYXNfdHJ0dF9zdXBwb3J0Cisg KiBGaW5kcyBpZiB0cnR0IGh3IGlzIHByZXNlbnQKKyAqIEBmZCBEUk0gZmQKKyAqLworc3RhdGlj IGJvb2wgaGFzX3RydHRfc3VwcG9ydChpbnQgZmQpCit7CisJaW50IHJldCA9IF9fZ2VtX2NvbnRl eHRfcmVxdWlyZV9wYXJhbShmZCwgTE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUKTsKKworCXJldHVy biAocmV0ID09IDApOworfQorCisvKiBtbWFwX2JvCisgKiBoZWxwZXIgZm9yIGNyZWF0aW5nIGEg Q1BVIG1tYXBwaW5nIG9mIHRoZSBidWZmZXIKKyAqIEBmZCAtIGRybSBmZAorICogQGhhbmRsZSAt IGhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIG1tYXAKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBidWZm ZXIKKyAqLworc3RhdGljIHZvaWQqIG1tYXBfYm8oaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVp bnQ2NF90IHNpemUpCit7CisJdWludDMyX3QgKnB0ciA9IGdlbV9tbWFwX19jcHUoZmQsIGhhbmRs ZSwgMCwgc2l6ZSwgUFJPVF9SRUFEKTsKKwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxlLCBJOTE1 X0dFTV9ET01BSU5fQ1BVLCAwKTsKKwlyZXR1cm4gcHRyOworfQorCisvKiBlbWl0X3N0b3JlX2R3 b3JkCisgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29t bWFuZAorICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAY21kX2J1ZjogYmF0Y2ggYnVm ZmVyCisgKiBAZHdfb2Zmc2V0OiB3cml0ZSBvZmZzZXQgaW4gYmF0Y2ggYnVmZmVyCisgKiBAdmFk ZHI6IGRlc3RpbmF0aW9uIFZpcnR1YWwgYWRkcmVzcworICogQGRhdGE6IHUzMiBkYXRhIHRvIGJl IHN0b3JlZCBhdCBkZXN0aW5hdGlvbgorICovCitzdGF0aWMgaW50IGVtaXRfc3RvcmVfZHdvcmQo aW50IGZkLCB1aW50MzJfdCAqY21kX2J1ZiwgdWludDMyX3QgZHdfb2Zmc2V0LAorCQkJICAgIHVp bnQ2NF90IHZhZGRyLCB1aW50MzJfdCBkYXRhKQoreworCS8qIENoZWNrIHRoYXQgc29mdHBpbiBh ZGRyZXNzZXMgYXJlIGluIHRoZSBjb3JyZWN0IGZvcm0gKi8KKwlpZ3RfYXNzZXJ0X2VxX3U2NCh2 YWRkciwgaWd0X2Nhbm9uaWNhbF9hZGRyKHZhZGRyKSk7CisKKwkvKiBTREkgY2Fubm90IHdyaXRl IHRvIHVuYWxpZ25lZCBhZGRyZXNzZXMgKi8KKwlpZ3RfYXNzZXJ0KCh2YWRkciAmIDMpID09IDAp OworCisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBNSV9TVE9SRV9EV09SRF9JTU07CisJY21kX2J1 Zltkd19vZmZzZXQrK10gPSAodWludDMyX3QpdmFkZHI7CisJY21kX2J1Zltkd19vZmZzZXQrK10g PSAodWludDMyX3QpKHZhZGRyID4+IDMyKTsKKwljbWRfYnVmW2R3X29mZnNldCsrXSA9IGRhdGE7 CisKKwlyZXR1cm4gZHdfb2Zmc2V0OworfQorCisvKiBlbWl0X3N0b3JlX3F3b3JkCisgKiBwb3B1 bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAorICogQGZk OiBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAY21kX2J1ZjogYmF0Y2ggYnVmZmVyCisgKiBAZHdf b2Zmc2V0OiB3cml0ZSBvZmZzZXQgaW4gYmF0Y2ggYnVmZmVyCisgKiBAdmFkZHI6IGRlc3RpbmF0 aW9uIFZpcnR1YWwgYWRkcmVzcworICogQGRhdGE6IHU2NCBkYXRhIHRvIGJlIHN0b3JlZCBhdCBk ZXN0aW5hdGlvbgorICovCitzdGF0aWMgaW50IGVtaXRfc3RvcmVfcXdvcmQoaW50IGZkLCB1aW50 MzJfdCAqY21kX2J1ZiwgdWludDMyX3QgZHdfb2Zmc2V0LAorCQkJICAgIHVpbnQ2NF90IHZhZGRy LCB1aW50NjRfdCBkYXRhKQoreworCS8qIENoZWNrIHRoYXQgc29mdHBpbiBhZGRyZXNzZXMgYXJl IGluIHRoZSBjb3JyZWN0IGZvcm0gKi8KKwlpZ3RfYXNzZXJ0X2VxX3U2NCh2YWRkciwgaWd0X2Nh bm9uaWNhbF9hZGRyKHZhZGRyKSk7CisKKwkvKiBTREkgY2Fubm90IHdyaXRlIHRvIHVuYWxpZ25l ZCBhZGRyZXNzZXMgKi8KKwlpZ3RfYXNzZXJ0KCh2YWRkciAmIDcpID09IDApOworCisJY21kX2J1 Zltkd19vZmZzZXQrK10gPSBNSV9TVE9SRV9EV09SRF9JTU0gfCAweDM7CisJY21kX2J1Zltkd19v ZmZzZXQrK10gPSAodWludDMyX3QpdmFkZHI7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSAodWlu dDMyX3QpKHZhZGRyID4+IDMyKTsKKwljbWRfYnVmW2R3X29mZnNldCsrXSA9IGRhdGE7CisJY21k X2J1Zltkd19vZmZzZXQrK10gPSBkYXRhID4+IDMyOworCisJcmV0dXJuIGR3X29mZnNldDsKK30K KworLyogZW1pdF9iYl9lbmQKKyAqIHBvcHVsYXRlIGJhdGNoIGJ1ZmZlciB3aXRoIE1JX0JBVENI X0JVRkZFUl9FTkQgY29tbWFuZAorICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAY21k X2J1ZjogYmF0Y2ggYnVmZmVyCisgKiBAZHdfb2Zmc2V0OiB3cml0ZSBvZmZzZXQgaW4gYmF0Y2gg YnVmZmVyCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9iYl9lbmQoaW50IGZkLCB1aW50MzJfdCAqY21k X2J1ZiwgdWludDMyX3QgZHdfb2Zmc2V0KQoreworCWR3X29mZnNldCA9IEFMSUdOKGR3X29mZnNl dCwgMik7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWR3 X29mZnNldCsrOworCisJcmV0dXJuIGR3X29mZnNldDsKK30KKworLyogc2V0dXBfZXhlY2J1ZmZl cgorICogaGVscGVyIGZvciBidWZmZXIgZXhlY3V0aW9uCisgKiBAZXhlY2J1ZiAtIHBvaW50ZXIg dG8gZXhlY2J1ZmZlcgorICogQGV4ZWNfb2JqZWN0IC0gcG9pbnRlciB0byBleGVjIG9iamVjdDIg c3RydWN0CisgKiBAcmluZyAtIHJpbmcgdG8gYmUgdXNlZAorICogQGJ1ZmZlcl9jb3VudCAtIGhv dyBtYW51IGJ1ZmZlcnMgdG8gc3VibWl0CisgKiBAYmF0Y2hfbGVuZ3RoIC0gbGVuZ3RoIG9mIGJh dGNoIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBzZXR1cF9leGVjYnVmZmVyKHN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCisJCQkgICAgIHN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyICpleGVjX29iamVjdCwKKwkJCSAgICAgdWludDMyX3QgY3R4X2lkLCBp bnQgcmluZywgaW50IGJ1ZmZlcl9jb3VudCwgaW50IGJhdGNoX2xlbmd0aCkKK3sKKwltZW1zZXQo ZXhlY2J1ZiwgMCwgc2l6ZW9mKCpleGVjYnVmKSk7CisKKwlleGVjYnVmLT5idWZmZXJzX3B0ciA9 ICh1bnNpZ25lZCBsb25nKWV4ZWNfb2JqZWN0OworCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCA9IGJ1 ZmZlcl9jb3VudDsKKwlleGVjYnVmLT5iYXRjaF9sZW4gPSBiYXRjaF9sZW5ndGg7CisJZXhlY2J1 Zi0+ZmxhZ3MgPSByaW5nOworCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoKmV4ZWNi dWYsIGN0eF9pZCk7Cit9CisKKyNkZWZpbmUgVEFCTEVfU0laRSAweDEwMDAKKyNkZWZpbmUgVElM RV9TSVpFIDB4MTAwMDAKKworI2RlZmluZSBUUlRUX1NFR01FTlRfU0laRSAoMVVMTCA8PCA0NCkK KyNkZWZpbmUgUFBHVFRfU0laRSAoMVVMTCA8PCA0OCkKKworI2RlZmluZSBOVUxMX1RJTEVfUEFU VEVSTiAgICAweEZGRkZGRkZGCisjZGVmaW5lIElOVkFMSURfVElMRV9QQVRURVJOIDB4RkZGRkZG RkUKKworc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfdHJ0dF9wYXJhbSB7CisJdWludDY0 X3Qgc2VnbWVudF9iYXNlX2FkZHI7CisJdWludDY0X3QgbDNfdGFibGVfYWRkcmVzczsKKwl1aW50 MzJfdCBpbnZkX3RpbGVfdmFsOworCXVpbnQzMl90IG51bGxfdGlsZV92YWw7Cit9OworCisvKiBx dWVyeV90cnR0CisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIFRSLVRUIHNldHRp bmdzIHN0b3JlZCB3aXRoIHRoZSBLTUQsCisgKiBmb3IgYSBjb250ZXh0LCBoYXZlIHRoZSBleHBl Y3RlZCB2YWx1ZXMgKHNldCBwcmV2aW91c2x5KS4KKyAqIEBmZCAtIGRybSBmZAorICogQGN0eF9p ZCAtIGlkIG9mIHRoZSBjb250ZXh0IGZvciB3aGljaCBUUlRUIGlzIHRvIGJlIGVuYWJsZWQKKyAq IEBsM190YWJsZV9hZGRyZXNzIC0gR0ZYIGFkZHJlc3Mgb2YgdGhlIEwzIHRhYmxlCisgKiBAc2Vn bWVudF9iYXNlX2FkZHIgLSBvZmZzZXQgb2YgdGhlIFRSVFQgc2VnbWVudCBpbiBQUEdUVCBzcGFj ZQorICovCitzdGF0aWMgdm9pZAorcXVlcnlfdHJ0dChpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCwg dWludDY0X3QgbDNfdGFibGVfYWRkcmVzcywKKwkgICB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRk cikKK3sKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSBjdHhfcGFyYW07CisJ c3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfdHJ0dF9wYXJhbSB0cnR0X3BhcmFtOworCisJ Y3R4X3BhcmFtLmNvbnRleHQgPSBjdHhfaWQ7CisJY3R4X3BhcmFtLnNpemUgPSBzaXplb2YodHJ0 dF9wYXJhbSk7CisJY3R4X3BhcmFtLnBhcmFtID0gTE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUOwor CWN0eF9wYXJhbS52YWx1ZSA9ICh1aW50NjRfdCkmdHJ0dF9wYXJhbTsKKworCWdlbV9jb250ZXh0 X2dldF9wYXJhbShmZCwgJmN0eF9wYXJhbSk7CisKKwlpZ3RfYXNzZXJ0X2VxX3U2NCh0cnR0X3Bh cmFtLmwzX3RhYmxlX2FkZHJlc3MsIGwzX3RhYmxlX2FkZHJlc3MpOworCWlndF9hc3NlcnRfZXFf dTY0KHRydHRfcGFyYW0uc2VnbWVudF9iYXNlX2FkZHIsIHNlZ21lbnRfYmFzZV9hZGRyKTsKKwlp Z3RfYXNzZXJ0X2VxX3UzMih0cnR0X3BhcmFtLmludmRfdGlsZV92YWwsIElOVkFMSURfVElMRV9Q QVRURVJOKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMih0cnR0X3BhcmFtLm51bGxfdGlsZV92YWwsIE5V TExfVElMRV9QQVRURVJOKTsKK30KKworc3RhdGljIGludAorX19zZXR1cF90cnR0KGludCBmZCwg dWludDMyX3QgY3R4X2lkLCB1aW50NjRfdCBsM190YWJsZV9hZGRyZXNzLAorCSAgICAgdWludDY0 X3Qgc2VnbWVudF9iYXNlX2FkZHIsIHVpbnQzMl90IG51bGxfdGlsZV92YWwsCisJICAgICB1aW50 MzJfdCBpbnZkX3RpbGVfdmFsKQoreworCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtIGN0eF9wYXJhbTsKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF90cnR0X3BhcmFt IHRydHRfcGFyYW07CisKKwl0cnR0X3BhcmFtLm51bGxfdGlsZV92YWwgPSBudWxsX3RpbGVfdmFs OworCXRydHRfcGFyYW0uaW52ZF90aWxlX3ZhbCA9IGludmRfdGlsZV92YWw7CisJdHJ0dF9wYXJh bS5sM190YWJsZV9hZGRyZXNzID0gbDNfdGFibGVfYWRkcmVzczsKKwl0cnR0X3BhcmFtLnNlZ21l bnRfYmFzZV9hZGRyID0gc2VnbWVudF9iYXNlX2FkZHI7CisKKwljdHhfcGFyYW0uY29udGV4dCA9 IGN0eF9pZDsKKwljdHhfcGFyYW0uc2l6ZSA9IHNpemVvZih0cnR0X3BhcmFtKTsKKwljdHhfcGFy YW0ucGFyYW0gPSBMT0NBTF9DT05URVhUX1BBUkFNX1RSVFQ7CisJY3R4X3BhcmFtLnZhbHVlID0g KHVpbnQ2NF90KSZ0cnR0X3BhcmFtOworCisJcmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGZkLCAmY3R4X3BhcmFtKTsKK30KKworLyogc2V0dXBfdHJ0dAorICogSGVscGVyIGZ1bmN0aW9u IHRvIHJlcXVlc3QgS01EIHRvIGVuYWJsZSBUUlRUCisgKiBAZmQgLSBkcm0gZmQKKyAqIEBjdHhf aWQgLSBpZCBvZiB0aGUgY29udGV4dCBmb3Igd2hpY2ggVFJUVCBpcyB0byBiZSBlbmFibGVkCisg KiBAbDNfdGFibGVfYWRkcmVzcyAtIEdGWCBhZGRyZXNzIG9mIHRoZSBMMyB0YWJsZQorICogQHNl Z21lbnRfYmFzZV9hZGRyIC0gb2Zmc2V0IG9mIHRoZSBUUlRUIHNlZ21lbnQgaW4gUFBHVFQgc3Bh Y2UKKyAqLworc3RhdGljIGludAorc2V0dXBfdHJ0dChpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCwg dWludDY0X3QgbDNfdGFibGVfYWRkcmVzcywKKwkgICB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRk cikKK3sKKwlyZXR1cm4gX19zZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX3RhYmxlX2FkZHJlc3Ms IHNlZ21lbnRfYmFzZV9hZGRyLAorCQkJTlVMTF9USUxFX1BBVFRFUk4sIElOVkFMSURfVElMRV9Q QVRURVJOKTsKK30KKworLyogYm9fYWxsb2Nfc2V0dXAKKyAqIGFsbG9jYXRlIGJvIGFuZCBwb3B1 bGF0ZSBleGVjIG9iamVjdAorICogQGV4ZWNfb2JqZWN0MiAtIHBvaW50ZXIgdG8gZXhlYyBvYmpl Y3QKKyAqIEBib19zaXplZSAtIGJ1ZmZlciBzaXplCisgKiBAZmxhZ3MgLSBleGVjIGZsYWdzCisg KiBAYm9fb2Zmc2V0IC0gcG9pbnRlciB0byB0aGUgY3VycmVudCBQUEdUVCBvZmZzZXQKKyAqLwor c3RhdGljIHZvaWQgYm9fYWxsb2Nfc2V0dXAoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiAqZXhlY19vYmplY3QyLAorCQkJICAgdWludDY0X3QgYm9fc2l6ZSwgdWludDY0 X3QgZmxhZ3MsIHVpbnQ2NF90ICpib19vZmZzZXQpCit7CisJbWVtc2V0KGV4ZWNfb2JqZWN0Miwg MCwgc2l6ZW9mKCpleGVjX29iamVjdDIpKTsKKwlleGVjX29iamVjdDItPmhhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIGJvX3NpemUpOworCWV4ZWNfb2JqZWN0Mi0+ZmxhZ3MgPSBmbGFnczsKKworCWlm IChib19vZmZzZXQpCisJeworCQlleGVjX29iamVjdDItPm9mZnNldCA9ICpib19vZmZzZXQ7CisJ CSpib19vZmZzZXQgKz0gYm9fc2l6ZTsKKwl9Cit9CisKKy8qIGJ1c3lfYmF0Y2gKKyAqIFRoaXMg aGVscGVyIGZ1bmN0aW9uIHdpbGwgcHJlcGFyZSAmIHN1Ym1pdCBhIGJhdGNoIG9uIHRoZSBCQ1Mg cmluZywKKyAqIHdoaWNoIHdpbGwga2VlcCB0aGUgcmluZyBidXN5IGZvciBzb21ldGltZSwgbG9u ZyBlbm91Z2ggdG8gc3VibWl0CisgKiBzb21lIG90aGVyIHdvcmsgd2hpY2ggY2FuIHRyaWdnZXIg dGhlIGV2aWN0aW9uIG9mIHRoYXQgYmF0Y2ggb2JqZWN0CisgKiB3aGlsZSBpdCBpcyBzdGlsbCBn ZXR0aW5nIGV4ZWN1dGVkIG9uIHRoZSByaW5nLgorICovCitzdGF0aWMgdWludDY0X3QgYnVzeV9i YXRjaChpbnQgZmQsIHVpbnQzMl90IGN0eF9pZCkKK3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxf Z2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKTsKKwljb25zdCBpbnQgaGFzXzY0Yml0X3JlbG9j ID0gZ2VuID49IDg7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iamVjdFsyXTsKKwl1aW50MzJfdCAq bWFwOworCWludCBmYWN0b3IgPSAxMDsKKwlpbnQgaSA9IDA7CisKKwkvKiBVbnRpbCB0aGUga2Vy bmVsIEFCSSBpcyBmaXhlZCwgb25seSBkZWZhdWx0IGNvbnRleHRzIGNhbiBiZSB1c2VkCisJICog b24gIVJDUyByaW5ncyAqLworCWlndF9yZXF1aXJlKGN0eF9pZCA9PSAwKTsKKworCW1lbXNldChv YmplY3QsIDAsIHNpemVvZihvYmplY3QpKTsKKwlvYmplY3RbMF0uaGFuZGxlID0gZ2VtX2NyZWF0 ZShmZCwgMTAyNCoxMDI0KTsKKwlvYmplY3RbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5 Nik7CisJbWFwID0gZ2VtX21tYXBfX2NwdShmZCwgb2JqZWN0WzFdLmhhbmRsZSwgMCwgNDA5Niwg UFJPVF9XUklURSk7CisJZ2VtX3NldF9kb21haW4oZmQsIG9iamVjdFsxXS5oYW5kbGUsCisJCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKworCXNldHVw X2V4ZWNidWZmZXIoJmV4ZWNidWYsIG9iamVjdCwgY3R4X2lkLCBJOTE1X0VYRUNfQkxULCAyLAor CQkJIGVtaXRfYmJfZW5kKGZkLCBtYXAsIDApKjQpOworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1 Zik7CisKKwlpZ3RfZGVidWcoIkFjdGl2ZSBvZmZzZXRzID0gWyUwOGxseCwgJTA4bGx4XVxuIiwK KwkJICBvYmplY3RbMF0ub2Zmc2V0LCBvYmplY3RbMV0ub2Zmc2V0KTsKKworI2RlZmluZSBDT1BZ X0JMVF9DTUQJCSgyPDwyOXwweDUzPDwyMnwweDYpCisjZGVmaW5lIEJMVF9XUklURV9BTFBIQQkJ KDE8PDIxKQorI2RlZmluZSBCTFRfV1JJVEVfUkdCCQkoMTw8MjApCisJZ2VtX3NldF9kb21haW4o ZmQsIG9iamVjdFsxXS5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1 X0dFTV9ET01BSU5fQ1BVKTsKKwl3aGlsZSAoZmFjdG9yLS0pIHsKKwkJLyogWFlfU1JDX0NPUFkg Ki8KKwkJbWFwW2krK10gPSBDT1BZX0JMVF9DTUQgfCBCTFRfV1JJVEVfQUxQSEEgfCBCTFRfV1JJ VEVfUkdCOworCQlpZiAoaGFzXzY0Yml0X3JlbG9jKQorCQkJbWFwW2ktMV0gKz0gMjsKKwkJbWFw W2krK10gPSAweGNjIDw8IDE2IHwgMSA8PCAyNSB8IDEgPDwgMjQgfCAoNCoxMDI0KTsKKwkJbWFw W2krK10gPSAwOworCQltYXBbaSsrXSA9IDI1NiA8PCAxNiB8IDEwMjQ7CisJCW1hcFtpKytdID0g b2JqZWN0WzBdLm9mZnNldDsKKwkJaWYgKGhhc182NGJpdF9yZWxvYykKKwkJCW1hcFtpKytdID0g b2JqZWN0WzBdLm9mZnNldCA+PiAzMjsKKwkJbWFwW2krK10gPSAwOworCQltYXBbaSsrXSA9IDQw OTY7CisJCW1hcFtpKytdID0gb2JqZWN0WzBdLm9mZnNldDsKKwkJaWYgKGhhc182NGJpdF9yZWxv YykKKwkJCW1hcFtpKytdID0gb2JqZWN0WzBdLm9mZnNldCA+PiAzMjsKKwl9CisJaSA9IGVtaXRf YmJfZW5kKGZkLCBtYXAsIGkpOworCW11bm1hcChtYXAsIDQwOTYpOworCisJb2JqZWN0WzBdLmZs YWdzID0gRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhFQ19PQkpFQ1RfV1JJVEU7CisJb2JqZWN0WzFd LmZsYWdzID0gRVhFQ19PQkpFQ1RfUElOTkVEOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gaSo0Owor CWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisJZ2VtX2Nsb3NlKGZkLCBvYmplY3RbMF0uaGFu ZGxlKTsKKwlnZW1fY2xvc2UoZmQsIG9iamVjdFsxXS5oYW5kbGUpOworCisJcmV0dXJuIG9iamVj dFsxXS5vZmZzZXQ7Cit9CisKKy8qIGFjdGl2ZSBvYmplY3QgZXZpY3Rpb24gdGVzdAorICogVGhp cyB0ZXN0IHdpbGwgZm9yY2UgdGhlIGV2aWN0aW9uIG9mIGFuIGFjdGl2ZSBvYmplY3QsIGJ5IGNo b29zaW5nIHRoZQorICogVFItVFQgc2VnbWVudCBsb2NhdGlvbiB3aGljaCB3aWxsIG92ZXJsYXAg d2l0aCB0aGUgb2JqZWN0J3MgbG9jYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHRlc3RfZXZpY3Rf YWN0aXZlKHZvaWQpCit7CisJaW50IGZkOworCXVpbnQ2NF90IGV4cGVjdGVkOworCXVpbnQ2NF90 IHNlZ21lbnRfYmFzZV9hZGRyOworCXVpbnQ2NF90IGwzX29mZnNldDsKKworCWZkID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisKKwlleHBlY3RlZCA9IGJ1c3lfYmF0Y2goZmQsIDAp OworCisJLyogRGV0ZXJtaW5lIHRoZSBzZWdtZW50X2Jhc2VfYWRkciBhY2NvcmRpbmcgdG8gdGhl IG9mZnNldCBvZiBhY3RpdmUKKwkgKiBidWZmZXIsIGZvcmNpbmcgaXRzIGV2aWN0aW9uCisJICov CisJc2VnbWVudF9iYXNlX2FkZHIgPSBleHBlY3RlZCAmICh+KFRSVFRfU0VHTUVOVF9TSVpFIC0g MSkpOworCisJLyogS2VlcCB0aGUgbDMgdGFibGUgb3V0c2lkZSB0aGUgc2VnbWVudCB0byBhdm9p ZCB0aGUgY29uZmxpY3QgKi8KKwlsM19vZmZzZXQgPSBzZWdtZW50X2Jhc2VfYWRkciA/IDAgOiBU UlRUX1NFR01FTlRfU0laRTsKKworCWlndF9hc3NlcnQoc2V0dXBfdHJ0dChmZCwgMCwgbDNfb2Zm c2V0LCBzZWdtZW50X2Jhc2VfYWRkcikgPT0gMCk7CisKKwlxdWVyeV90cnR0KGZkLCAwLCBsM19v ZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKTsKKwljbG9zZShmZCk7Cit9CisKKy8qIGhhbmdpbmcg b2JqZWN0IGV2aWN0aW9uIHRlc3QKKyAqIFRoaXMgdGVzdCB3aWxsIGZvcmNlIHRoZSBldmljdGlv biBvZiBhIGhhbmdpbmcgb2JqZWN0LCBieSBjaG9vc2luZyB0aGUKKyAqIFRSLVRUIHNlZ21lbnQg bG9jYXRpb24gd2hpY2ggd2lsbCBvdmVybGFwIHdpdGggdGhlIG9iamVjdCdzIGxvY2F0aW9uLgor ICovCitzdGF0aWMgdm9pZCB0ZXN0X2V2aWN0X2hhbmcodm9pZCkKK3sKKwlpbnQgZmQ7CisJdWlu dDMyX3QgY3R4X2lkOworCXVpbnQ2NF90IHNlZ21lbnRfYmFzZV9hZGRyOworCXVpbnQ2NF90IGwz X29mZnNldDsKKwl1aW50NjRfdCBleHBlY3RlZDsKKworCWZkID0gZHJtX29wZW5fZHJpdmVyKERS SVZFUl9JTlRFTCk7CisJY3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKworCWlndF9o YW5nX2N0eChmZCwgY3R4X2lkLCBJOTE1X0VYRUNfUkVOREVSLCAwLCAodWludDY0X3QgKikmZXhw ZWN0ZWQpOworCisJLyogRGV0ZXJtaW5lIHRoZSBzZWdtZW50X2Jhc2VfYWRkciBhY2NvcmRpbmcg dG8gdGhlIG9mZnNldCBvZiBoYW5naW5nCisJICogYnVmZmVyLCBmb3JjaW5nIGl0cyBldmljdGlv bgorCSAqLworCXNlZ21lbnRfYmFzZV9hZGRyID0gZXhwZWN0ZWQgJiAofihUUlRUX1NFR01FTlRf U0laRSAtIDEpKTsKKworCS8qIEtlZXAgdGhlIGwzIHRhYmxlIG91dHNpZGUgdGhlIHNlZ21lbnQg dG8gYXZvaWQgdGhlIGNvbmZsaWN0ICovCisJbDNfb2Zmc2V0ID0gc2VnbWVudF9iYXNlX2FkZHIg PyAwIDogVFJUVF9TRUdNRU5UX1NJWkU7CisKKwlpZ3RfYXNzZXJ0KHNldHVwX3RydHQoZmQsIGN0 eF9pZCwgbDNfb2Zmc2V0LCBzZWdtZW50X2Jhc2VfYWRkcikgPT0gMCk7CisKKwlxdWVyeV90cnR0 KGZkLCBjdHhfaWQsIGwzX29mZnNldCwgc2VnbWVudF9iYXNlX2FkZHIpOworCWdlbV9jb250ZXh0 X2Rlc3Ryb3koZmQsIGN0eF9pZCk7CisJY2xvc2UgKGZkKTsKK30KKworLyogc3VibWl0X3RydHRf Y29udGV4dAorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgY29udGV4 dCBpZiB0aGUgVFItVFQgc2VnbWVudAorICogYmFzZSBhZGRyZXNzIGlzIG5vdCB6ZXJvLCBhbGxv Y2F0ZSBhIEwzIHRhYmxlIHBhZ2UsIDIgcGFnZXMgYXBpZWNlCisgKiBmb3IgTDIvTDEgdGFibGVz IGFuZCBjb3VwbGUgb2YgZGF0YSBidWZmZXJzIG9mIDY0S0IgaW4gc2l6ZSwgbWF0Y2hpbmcgdGhl CisgKiBUaWxlIHNpemUuIFRoZSAyIGRhdGEgYnVmZmVycyB3aWxsIGJlIG1hcHBlZCB0byB0aGUg MiBlbmRzIG9mIFRSVFQgdmlydHVhbAorICogc3BhY2UuIFNlcmllcyBvZiBNSV9TVE9SRV9EV09S RF9JTU0gY29tbWFuZHMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgYmF0Y2gKKyAqIGJ1ZmZlciB0byBm aXJzdCB1cGRhdGUgdGhlIFRSLVRUIHRhYmxlIGVudHJpZXMgYW5kIHRoZW4gdG8gdXBkYXRlIHRo ZSBkYXRhCisgKiBidWZmZXJzIHVzaW5nIHRoZWlyIFRSLVRUIFZBLCBleGVyY2lzaW5nIHRoZSB0 YWJsZSBwcm9ncmFtbWluZyBkb25lCisgKiBwcmV2aW91c2x5LgorICogSW52b2tlIENPTlRFWFRf U0VUUEFSQU0gaW9jdGwgdG8gcmVxdWVzdCBLTUQgdG8gZW5hYmxlIFRSVFQuCisgKiBJbnZva2Ug ZXhlY2J1ZmZlciB0byBzdWJtaXQgdGhlIGJhdGNoIGJ1ZmZlci4KKyAqIFZlcmlmeSB2YWx1ZSBv ZiBmaXJzdCBEV09SRCBpbiB0aGUgMiBkYXRhIGJ1ZmZlciBtYXRjaGVzIHRoZSBkYXRhIGFza2Vk CisgKiB0byBiZSB3cml0dGVuIGJ5IHRoZSBHUFUuCisgKi8KK3N0YXRpYyB2b2lkIHN1Ym1pdF90 cnR0X2NvbnRleHQoaW50IGZkLCB1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkciwgdWludDMyX3Qg Y3R4X2lkKQoreworCWVudW0geworCQlMM19UQkwsCisJCUwyX1RCTDEsCisJCUwyX1RCTDIsCisJ CUwxX1RCTDEsCisJCUwxX1RCTDIsCisJCURBVEExLAorCQlEQVRBMiwKKwkJQkFUQ0gsCisJCU5V TV9CVUZGRVJTLAorCX07CisKKwlpbnQgcmluZywgbGVuID0gMDsKKwl1aW50MzJfdCAqcHRyOwor CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0JVRkZFUlNdOworCXVpbnQzMl90 IGJhdGNoX2J1ZmZlcltCT19TSVpFXTsKKwl1aW50MzJfdCBkYXRhLCBsYXN0X2VudHJ5X29mZnNl dDsKKwl1aW50NjRfdCBjdXJfcHBndHRfb2ZmLCBleGVjX2ZsYWdzOworCXVpbnQ2NF90IGZpcnN0 X3RpbGVfYWRkciwgbGFzdF90aWxlX2FkZHI7CisKKwlmaXJzdF90aWxlX2FkZHIgPSBzZWdtZW50 X2Jhc2VfYWRkcjsKKwlsYXN0X3RpbGVfYWRkciAgPSBmaXJzdF90aWxlX2FkZHIgKyBUUlRUX1NF R01FTlRfU0laRSAtIFRJTEVfU0laRTsKKworCS8qIFRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhl IFRSLVRUIHNlZ21lbnQgKi8KKwljdXJfcHBndHRfb2ZmID0gc2VnbWVudF9iYXNlX2FkZHIgPyAw IDogVFJUVF9TRUdNRU5UX1NJWkU7CisKKwlleGVjX2ZsYWdzID0gRVhFQ19PQkpFQ1RfU1VQUE9S VFNfNDhCX0FERFJFU1M7CisKKwkvKiBmaXJzdCBhbGxvY2F0ZSBCYXRjaCBidWZmZXIgQk8gKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltCQVRDSF0sIEJPX1NJWkUsIGV4ZWNf ZmxhZ3MsIE5VTEwpOworCisJLyogdGFibGUgQk9zIGFuZCBkYXRhIGJ1ZmZlciBCT3MgYXJlIHdy aXR0ZW4gYnkgR1BVIGFuZCBhcmUgc29mdCBwaW5uZWQgKi8KKwlleGVjX2ZsYWdzIHw9IChFWEVD X09CSkVDVF9XUklURSB8IEVYRUNfT0JKRUNUX1BJTk5FRCk7CisKKwkvKiBBbGxvY2F0ZSBhIEwz IHRhYmxlIEJPICovCisJYm9fYWxsb2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDNfVEJMXSwg VEFCTEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCisJLyogQWxsb2NhdGUg dHdvIEwyIHRhYmxlIEJPcyAqLworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0wy X1RCTDFdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisJYm9fYWxs b2Nfc2V0dXAoZmQsICZleGVjX29iamVjdDJbTDJfVEJMMl0sIFRBQkxFX1NJWkUsIGV4ZWNfZmxh Z3MsICZjdXJfcHBndHRfb2ZmKTsKKworCS8qIEFsbG9jYXRlIHR3byBMMSB0YWJsZSBCT3MgKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMMV9UQkwxXSwgVEFCTEVfU0laRSwg ZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19v YmplY3QyW0wxX1RCTDJdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7 CisKKwkvKiBBbGlnbiB0aGUgUFBHVFQgb2Zmc2V0cyBmb3IgdGhlIDIgZGF0YSBidWZmZXJzIHRv IG5leHQgNjQgS0IgYm91bmRhcnkgKi8KKwljdXJfcHBndHRfb2ZmID0gQUxJR04oY3VyX3BwZ3R0 X29mZiwgVElMRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIHR3byBEYXRhIGJ1ZmZlciBCT3MgKi8K Kwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltEQVRBMV0sIFRJTEVfU0laRSwgZXhl Y19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmpl Y3QyW0RBVEEyXSwgVElMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3BwZ3R0X29mZik7CisKKwkv KiBBZGQgY29tbWFuZHMgdG8gdXBkYXRlIHRoZSB0d28gTDMgdGFibGUgZW50cmllcyB0byBwb2lu dCB0aGVtIHRvIHRoZSBMMiB0YWJsZXMqLworCWxhc3RfZW50cnlfb2Zmc2V0ID0gNTExKnNpemVv Zih1aW50NjRfdCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIs IGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDNfVEJMXS5vZmZzZXQsCisJCQkgICAgICAg ZXhlY19vYmplY3QyW0wyX1RCTDFdLm9mZnNldCk7CisKKwlsZW4gPSBlbWl0X3N0b3JlX3F3b3Jk KGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDNfVEJMXS5v ZmZzZXQgKyBsYXN0X2VudHJ5X29mZnNldCwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDJfVEJM Ml0ub2Zmc2V0KTsKKworCS8qIEFkZCBjb21tYW5kcyB0byB1cGRhdGUgYW4gZW50cnkgb2YgMiBM MiB0YWJsZXMgdG8gcG9pbnQgdGhlbSB0byB0aGUgTDEgdGFibGVzKi8KKwlsZW4gPSBlbWl0X3N0 b3JlX3F3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJb TDJfVEJMMV0ub2Zmc2V0LAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMV9UQkwxXS5vZmZzZXQp OworCisJbGVuID0gZW1pdF9zdG9yZV9xd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkg ICAgICAgZXhlY19vYmplY3QyW0wyX1RCTDJdLm9mZnNldCArIGxhc3RfZW50cnlfb2Zmc2V0LAor CQkJICAgICAgIGV4ZWNfb2JqZWN0MltMMV9UQkwyXS5vZmZzZXQpOworCisJLyogQWRkIGNvbW1h bmRzIHRvIHVwZGF0ZSBhbiBlbnRyeSBvZiAyIEwxIHRhYmxlcyB0byBwb2ludCB0aGVtIHRvIHRo ZSBkYXRhIGJ1ZmZlcnMqLworCWxhc3RfZW50cnlfb2Zmc2V0ID0gMTAyMypzaXplb2YodWludDMy X3QpOworCisJbGVuID0gZW1pdF9zdG9yZV9kd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJ CQkgICAgICAgZXhlY19vYmplY3QyW0wxX1RCTDFdLm9mZnNldCwKKwkJCSAgICAgICBleGVjX29i amVjdDJbREFUQTFdLm9mZnNldCA+PiAxNik7CisKKwlsZW4gPSBlbWl0X3N0b3JlX2R3b3JkKGZk LCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDFfVEJMMl0ub2Zm c2V0ICsgbGFzdF9lbnRyeV9vZmZzZXQsCisJCQkgICAgICAgZXhlY19vYmplY3QyW0RBVEEyXS5v ZmZzZXQgPj4gMTYpOworCisJLyogQWRkIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgMiBkYXRhIGJ1 ZmZlcnMsIHVzaW5nIHRoZWlyIFRSVFQgVkEgKi8KKwlkYXRhID0gMHgxMjM0NTY3ODsKKwlsZW4g PSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBpZ3Rf Y2Fub25pY2FsX2FkZHIoZmlyc3RfdGlsZV9hZGRyKSwKKwkJCSAgICAgICBkYXRhKTsKKwlsZW4g PSBlbWl0X3N0b3JlX2R3b3JkKGZkLCBiYXRjaF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBpZ3Rf Y2Fub25pY2FsX2FkZHIobGFzdF90aWxlX2FkZHIpLAorCQkJICAgICAgIGRhdGEpOworCisJbGVu ID0gZW1pdF9iYl9lbmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuKTsKKwlnZW1fd3JpdGUoZmQsIGV4 ZWNfb2JqZWN0MltCQVRDSF0uaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbio0KTsKKworCS8q IFJlcXVlc3QgS01EIHRvIHNldHVwIHRoZSBUUi1UVCAqLworCWlndF9hc3NlcnQoc2V0dXBfdHJ0 dChmZCwgY3R4X2lkLCBleGVjX29iamVjdDJbTDNfVEJMXS5vZmZzZXQsIGZpcnN0X3RpbGVfYWRk cikgPT0gMCk7CisKKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKKwlzZXR1cF9leGVjYnVmZmVy KCZleGVjYnVmLCBleGVjX29iamVjdDIsIGN0eF9pZCwgcmluZywgTlVNX0JVRkZFUlMsIGxlbio0 KTsKKworCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLworCWdlbV9leGVjYnVmKGZkLCAmZXhl Y2J1Zik7CisKKwkvKiByZWFkIHRoZSAyIGRhdGEgYnVmZmVycyB0byBjaGVjayBmb3IgdGhlIHZh bHVlIHdyaXR0ZW4gYnkgdGhlIEdQVSAqLworCXB0ciA9IG1tYXBfYm8oZmQsIGV4ZWNfb2JqZWN0 MltEQVRBMV0uaGFuZGxlLCBUSUxFX1NJWkUpOworCWlndF9hc3NlcnRfZXFfdTMyKHB0clswXSwg ZGF0YSk7CisKKwlwdHIgPSBtbWFwX2JvKGZkLCBleGVjX29iamVjdDJbREFUQTJdLmhhbmRsZSwg VElMRV9TSVpFKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMF0sIGRhdGEpOworCisJZ2VtX2Ns b3NlKGZkLCBleGVjX29iamVjdDJbTDNfVEJMXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhl Y19vYmplY3QyW0wyX1RCTDFdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJb TDJfVEJMMl0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltMMV9UQkwxXS5o YW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wxX1RCTDJdLmhhbmRsZSk7CisJ Z2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJbREFUQTFdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZk LCBleGVjX29iamVjdDJbREFUQTJdLmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVj dDJbQkFUQ0hdLmhhbmRsZSk7CisKKwkvKiBDaGVjayBpZiB0aGUgVFJUVCBwYXJhbXMgc3RvcmVk IHdpdGggdGhlIERyaXZlciBhcmUgaW50YWN0IG9yIG5vdCAqLworCXF1ZXJ5X3RydHQoZmQsIGN0 eF9pZCwgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zmc2V0LCBmaXJzdF90aWxlX2FkZHIpOworfQor CisvKiBiYXNpYyB0cnR0IHRlc3QKKyAqIFRoaXMgd2lsbCB0ZXN0IHRoZSBiYXNpYyBUUi1UVCBm dW5jdGlvbmFsaXR5IGJ5IGRvaW5nIGNvdXBsZSBvZiBzdG9yZQorICogb3BlcmF0aW9ucyB0aHJv dWdoIGl0LiBBbHNvIGl0IHdpbGwgZXhlcmNpc2UgYWxsIHBvc3NpYmxlIFRSLVRUIHNlZ21lbnQK KyAqIHN0YXJ0IGxvY2F0aW9ucyAoaS5lLiAxNiBvZiB0aGVtKSBmb3IgYm90aCBkZWZhdWx0ICYg VXNlciBjcmVhdGVkIGNvbnRleHRzLgorICovCitzdGF0aWMgdm9pZCB0ZXN0X2Jhc2ljX3RydHRf dXNlKHZvaWQpCit7CisJaW50IGZkOworCXVpbnQzMl90IGN0eF9pZDsKKwl1aW50NjRfdCBzZWdt ZW50X2Jhc2VfYWRkcjsKKworCWZvciAoc2VnbWVudF9iYXNlX2FkZHIgPSAwOworCSAgICAgc2Vn bWVudF9iYXNlX2FkZHIgPCBQUEdUVF9TSVpFOworCSAgICAgc2VnbWVudF9iYXNlX2FkZHIgKz0g VFJUVF9TRUdNRU5UX1NJWkUpCisJeworCQkvKiBJbiBvcmRlciB0byB0ZXN0IHRoZSBkZWZhdWx0 IGNvbnRleHQgZm9yIGFsbCBzZWdtZW50IHN0YXJ0CisJCSAqIGxvY2F0aW9ucywgbmVlZCB0byBv cGVuIGEgbmV3IGZpbGUgaW5zdGFuY2Ugb24gZXZlcnkgaXRlcmF0aW9uCisJCSAqIGFzIFRSVFQg c2V0dGluZ3MgYXJlIGltbXV0YWJsZSBvbmNlIHNldCBmb3IgYSBjb250ZXh0LgorCQkgKi8KKwkJ ZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKworCQlzdWJtaXRfdHJ0dF9jb250 ZXh0KGZkLCBzZWdtZW50X2Jhc2VfYWRkciwgMCk7CisKKwkJY3R4X2lkID0gZ2VtX2NvbnRleHRf Y3JlYXRlKGZkKTsKKwkJc3VibWl0X3RydHRfY29udGV4dChmZCwgc2VnbWVudF9iYXNlX2FkZHIs IGN0eF9pZCk7CisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9pZCk7CisKKwkJY2xvc2Uo ZmQpOworCX0KK30KKworc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkKHZvaWQpCit7CisJaW50IGZk OworCXVpbnQzMl90IGN0eF9pZDsKKwl1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcjsKKwl1aW50 NjRfdCBsM19vZmZzZXQ7CisKKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwor CWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisKKwkvKiBDaGVjayBmb3IgYW4gaW5j b3JyZWN0bHkgYWxpZ25lZCBiYXNlIGxvY2F0aW9uIGZvciBUUi1UVCBzZWdtZW50ICovCisJc2Vn bWVudF9iYXNlX2FkZHIgPSBUUlRUX1NFR01FTlRfU0laRSArIDB4MTAwMDsKKwlsM19vZmZzZXQg PSBUSUxFX1NJWkU7CisJaWd0X2Fzc2VydF9lcShzZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX29m ZnNldCwgc2VnbWVudF9iYXNlX2FkZHIpLCAtRUlOVkFMKTsKKworCS8qIENvcnJlY3QgdGhlIHNl Z21lbnRfYmFzZV9hZGRyIHZhbHVlICovCisJc2VnbWVudF9iYXNlX2FkZHIgPSBUUlRUX1NFR01F TlRfU0laRTsKKworCS8qIENoZWNrIGZvciB0aGUgc2FtZS9jb25mbGljdGluZyB2YWx1ZSBmb3Ig TDMgdGFibGUgYW5kIFRSLVRUIHNlZ21lbnQgbG9jYXRpb24gKi8KKwlsM19vZmZzZXQgPSBzZWdt ZW50X2Jhc2VfYWRkcjsKKwlpZ3RfYXNzZXJ0X2VxKHNldHVwX3RydHQoZmQsIGN0eF9pZCwgbDNf b2Zmc2V0LCBzZWdtZW50X2Jhc2VfYWRkciksIC1FSU5WQUwpOworCisJLyogQ2hlY2sgZm9yIGFu IGluY29ycmVjdGx5IGFsaWduZWQgbG9jYXRpb24gZm9yIEwzIHRhYmxlICovCisJbDNfb2Zmc2V0 ID0gVElMRV9TSVpFICsgMHgxMDAwOworCWlndF9hc3NlcnRfZXEoc2V0dXBfdHJ0dChmZCwgY3R4 X2lkLCBsM19vZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKSwgLUVJTlZBTCk7CisKKwkvKiBDb3Jy ZWN0IHRoZSBsM19vZmZzZXQgdmFsdWUgKi8KKwlsM19vZmZzZXQgPSBUSUxFX1NJWkU7CisKKwkv KiBDaGVjayBmb3IgdGhlIHNhbWUgdmFsdWUgZm9yIE51bGwgJiBJbnZhbGlkIHRpbGUgcGF0dGVy bnMgKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fc2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM19vZmZzZXQs IHNlZ21lbnRfYmFzZV9hZGRyLAorCQkJCSAgIE5VTExfVElMRV9QQVRURVJOLCBOVUxMX1RJTEVf UEFUVEVSTiksIC1FSU5WQUwpOworCisJLyogVXNlIHRoZSBjb3JyZWN0IHNldHRpbmdzIG5vdyAq LworCWlndF9hc3NlcnQoc2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM19vZmZzZXQsIHNlZ21lbnRf YmFzZV9hZGRyKSA9PSAwKTsKKwkvKiBDaGVjayB0aGUgb3ZlcnJpZGluZyBvZiBUUi1UVCBzZXR0 aW5ncyBmb3IgdGhlIHNhbWUgY29udGV4dCAqLworCXNlZ21lbnRfYmFzZV9hZGRyICs9IFRSVFRf U0VHTUVOVF9TSVpFOworCWwzX29mZnNldCArPSBUSUxFX1NJWkU7CisJaWd0X2Fzc2VydF9lcShz ZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX29mZnNldCwgc2VnbWVudF9iYXNlX2FkZHIpLCAtRUVY SVNUKTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9pZCk7CisJY2xvc2UoZmQpOwor fQorCitpZ3RfbWFpbgoreworCWludCBmZCA9IC0xOworCisJaWd0X2ZpeHR1cmUgeworCQlmZCA9 IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOworCisJCWlndF9yZXF1aXJlKGhhc190cnR0 X3N1cHBvcnQoZmQpKTsKKwkJLyogdGVzdCBhbHNvIG5lZWRzIDQ4IFBQR1RUICYgU29mdCBQaW4g c3VwcG9ydCAqLworCQlpZ3RfcmVxdWlyZShnZW1faGFzX3NvZnRwaW4oZmQpKTsKKwkJaWd0X3Jl cXVpcmUoZ2VtX3VzZXNfNjRiX3BwZ3R0KGZkKSk7CisJfQorCisJLyogRWFjaCBzdWJ0ZXN0IHdp bGwgb3BlbiBpdHMgb3duIHByaXZhdGUgZmlsZSBpbnN0YW5jZSB0byBhdm9pZAorCSAqIGFueSBp bnRlcmZlcmVuY2UuIE90aGVyd2lzZSBvbmNlIFRSVFQgaXMgZW5hYmxlZCBmb3IgdGhlIGRlZmF1 bHQKKwkgKiBjb250ZXh0IHdpdGggc2VnbWVudF9iYXNlX2FkZHIgdmFsdWUgb2YgMCwgYWxsIHRo ZSBvdGhlciB0ZXN0cyB3aGljaAorCSAqIGFyZSBpbXBsaWNpdGx5IGRvbmUsIHN1Y2ggYXMgcXVp ZXNjZW50X2dwdSwgd2lsbCBicmVhayBhcyB0aGV5IG9ubHkKKwkgKiB1c2UgdGhlIGRlZmF1bHQg Y29udGV4dCBhbmQgZG8gbm90IHVzZSB0aGUgNDhCX0FERFJFU1MgZmxhZyBmb3IgaXQuCisJICov CisKKwlpZ3Rfc3VidGVzdCgiaW52YWxpZCIpCisJCXRlc3RfaW52YWxpZCgpOworCisJaWd0X3N1 YnRlc3QoImJhc2ljIikKKwkJdGVzdF9iYXNpY190cnR0X3VzZSgpOworCisJaWd0X3N1YnRlc3Qo ImV2aWN0X2FjdGl2ZSIpCisJCXRlc3RfZXZpY3RfYWN0aXZlKCk7CisKKwlpZ3Rfc3VidGVzdCgi ZXZpY3RfaGFuZyIpCisJCXRlc3RfZXZpY3RfaGFuZygpOworCisJaWd0X3N1YnRlc3QoImV2aWN0 X2FjdGl2ZS1pbnRlcnJ1cHRpYmxlIikKKwkJaWd0X2ludGVycnVwdGlibGUodHJ1ZSkgdGVzdF9l dmljdF9hY3RpdmUoKTsKKworCWlndF9maXh0dXJlCisJCWNsb3NlKGZkKTsKK30KKwotLSAKMS45 LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=