From mboxrd@z Thu Jan 1 00:00:00 1970 From: akash.goel@intel.com Subject: [PATCH v6] igt/gem_trtt: Exercise the TRTT hardware Date: Fri, 18 Mar 2016 14:07:40 +0530 Message-ID: <1458290260-15324-1-git-send-email-akash.goel@intel.com> References: <56EA839B.40808@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id AEB606EB62 for ; Fri, 18 Mar 2016 08:24:52 +0000 (UTC) In-Reply-To: <56EA839B.40808@intel.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 CiAgIEludmFsaWQgdGlsZXMuCgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+CkNjOiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBa2FzaCBHb2VsIDxha2FzaC5nb2VsQGludGVsLmNvbT4KLS0tCiBsaWIvaWd0 X2F1eC5jICAgICAgICAgIHwgIDExICsKIGxpYi9pZ3RfYXV4LmggICAgICAgICAgfCAgIDEgKwog bGliL2lndF9ndC5oICAgICAgICAgICB8ICAgMiArCiBsaWIvaW9jdGxfd3JhcHBlcnMuYyAgIHwg IDM5ICsrLQogbGliL2lvY3RsX3dyYXBwZXJzLmggICB8ICAgMyArCiB0ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIHwgICAxICsKIHRlc3RzL2dlbV9zb2Z0cGluLmMgICAgfCAgMTggKy0KIHRlc3RzL2dl bV90cnR0LmMgICAgICAgfCA2MjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NzkgaW5zZXJ0aW9ucygrKSwgMjMgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3RydHQuYwoKZGlmZiAtLWdp dCBhL2xpYi9pZ3RfYXV4LmMgYi9saWIvaWd0X2F1eC5jCmluZGV4IDdkMzU2NjYuLmM1ZmVkYjUg MTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXV4LmMKKysrIGIvbGliL2lndF9hdXguYwpAQCAtMjA2LDYg KzIwNiwxNyBAQCB2b2lkIGlndF9leGNoYW5nZV9pbnQodm9pZCAqYXJyYXksIHVuc2lnbmVkIGks IHVuc2lnbmVkIGopCiAJaW50X2FycltqXSA9IHRtcDsKIH0KIAorLyogaWd0X2Nhbm9uaWNhbF9h ZGRyCisgKiBVc2VkIHRvIGNvbnZlcnQgYW55IGFkZHJlc3MgaW50byBjYW5vbmljYWwgZm9ybSwg aS5lLiBbNjM6NDhdID09IFs0N10uCisgKiBCYXNlZCBvbiBrZXJuZWwncyBzaWduX2V4dGVuZDY0 IGltcGxlbWVudGF0aW9uLgorICogQGFkZHJlc3MgLSBhIHZpcnR1YWwgYWRkcmVzcworKi8KK3Vp bnQ2NF90IGlndF9jYW5vbmljYWxfYWRkcih1aW50NjRfdCBhZGRyZXNzKQoreworCV9fdTggc2hp ZnQgPSA2MyAtIEdFTjhfSElHSF9BRERSRVNTX0JJVDsKKwlyZXR1cm4gKF9fczY0KShhZGRyZXNz IDw8IHNoaWZ0KSA+PiBzaGlmdDsKK30KKwogc3RhdGljIHVpbnQzMl90CiBoYXJzX3BldHJ1c2th X2Y1NF8xX3JhbmRvbV91bnNhZmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4Lmgg Yi9saWIvaWd0X2F1eC5oCmluZGV4IDQyNzcxOWUuLjg1ZmM2NGIgMTAwNjQ0Ci0tLSBhL2xpYi9p Z3RfYXV4LmgKKysrIGIvbGliL2lndF9hdXguaApAQCAtNDgsNiArNDgsNyBAQCB2b2lkIGlndF9w ZXJtdXRlX2FycmF5KHZvaWQgKmFycmF5LCB1bnNpZ25lZCBzaXplLAogdm9pZCBpZ3RfcHJvZ3Jl c3MoY29uc3QgY2hhciAqaGVhZGVyLCB1aW50NjRfdCBpLCB1aW50NjRfdCB0b3RhbCk7CiB2b2lk IGlndF9wcmludF9hY3Rpdml0eSh2b2lkKTsKIGJvb2wgaWd0X2NoZWNrX2Jvb2xlYW5fZW52X3Zh cihjb25zdCBjaGFyICplbnZfdmFyLCBib29sIGRlZmF1bHRfdmFsdWUpOwordWludDY0X3QgaWd0 X2Nhbm9uaWNhbF9hZGRyKHVpbnQ2NF90IGFkZHJlc3MpOwogCiBib29sIGlndF9hdWJfZHVtcF9l bmFibGVkKHZvaWQpOwogCmRpZmYgLS1naXQgYS9saWIvaWd0X2d0LmggYi9saWIvaWd0X2d0LmgK aW5kZXggYjdjNWM0YS4uZDRlOWRiYiAxMDA2NDQKLS0tIGEvbGliL2lndF9ndC5oCisrKyBiL2xp Yi9pZ3RfZ3QuaApAQCAtOTgsNCArOTgsNiBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUgewogCXVuc2lnbmVkIGZsYWdzOwogfSBpbnRlbF9leGVjdXRpb25fZW5n aW5lc1tdOwogCisjZGVmaW5lIEdFTjhfSElHSF9BRERSRVNTX0JJVCA0NworCiAjZW5kaWYgLyog SUdUX0dUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5jIGIvbGliL2lvY3Rs X3dyYXBwZXJzLmMKaW5kZXggNDA3MTI2MC4uZmI1ZGUwNyAxMDA2NDQKLS0tIGEvbGliL2lvY3Rs X3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKQEAgLTg4Miw2ICs4ODIsMjIg QEAgdm9pZCBnZW1fY29udGV4dF9zZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9n ZW1fY29udGV4dF9wYXJhbSAqcCkKIAlpZ3RfYXNzZXJ0KF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGZkLCBwKSA9PSAwKTsKIH0KIAoraW50IF9fZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQg ZmQsIHVpbnQ2NF90IHBhcmFtKQoreworCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3Bh cmFtIHA7CisJaW50IHJldDsKKworCXAuY29udGV4dCA9IDA7CisJcC5wYXJhbSA9IHBhcmFtOwor CXAudmFsdWUgPSAwOworCXAuc2l6ZSA9IDA7CisKKwlyZXQgPSBkcm1Jb2N0bChmZCwgTE9DQUxf SU9DVExfSTkxNV9HRU1fQ09OVEVYVF9HRVRQQVJBTSwgJnApOworCWlmIChyZXQpCisJCXJldHVy biAtZXJybm87CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZ2VtX2NvbnRleHRfcmVxdWlyZV9w YXJhbToKICAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKQEAgLTg5MiwxNCAr OTA4LDcgQEAgdm9pZCBnZW1fY29udGV4dF9zZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxf aTkxNV9nZW1fY29udGV4dF9wYXJhbSAqcCkKICAqLwogdm9pZCBnZW1fY29udGV4dF9yZXF1aXJl X3BhcmFtKGludCBmZCwgdWludDY0X3QgcGFyYW0pCiB7Ci0Jc3RydWN0IGxvY2FsX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW0gcDsKLQotCXAuY29udGV4dCA9IDA7Ci0JcC5wYXJhbSA9IHBhcmFtOwot CXAudmFsdWUgPSAwOwotCXAuc2l6ZSA9IDA7Ci0KLQlpZ3RfcmVxdWlyZShkcm1Jb2N0bChmZCwg TE9DQUxfSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9HRVRQQVJBTSwgJnApID09IDApOworCWlndF9y ZXF1aXJlKF9fZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShmZCwgcGFyYW0pID09IDApOwogfQog CiB2b2lkIGdlbV9jb250ZXh0X3JlcXVpcmVfYmFuX3BlcmlvZChpbnQgZmQpCkBAIC0xMDYzLDYg KzEwNzIsMjAgQEAgYm9vbCBnZW1fdXNlc19mdWxsX3BwZ3R0KGludCBmZCkKIH0KIAogLyoqCisg KiBnZW1fdXNlc182NGJfcHBndHQ6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlw dG9yCisgKgorICogRmVhdHVyZSB0ZXN0IG1hY3JvIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGtlcm5l bCBpbnRlcm5hbGx5IHVzZXMgZnVsbAorICogNjRiIHBlci1wcm9jZXNzIGd0dCB0byBleGVjdXRl IGJhdGNoZXMuCisgKgorICogUmV0dXJuczogV2hldGhlciBiYXRjaGVzIGFyZSBydW4gdGhyb3Vn aCBmdWxsIDY0YiBwcGd0dC4KKyAqLworYm9vbCBnZW1fdXNlc182NGJfcHBndHQoaW50IGZkKQor eworCXJldHVybiBnZW1fZ3R0X3R5cGUoZmQpID4gMjsKK30KKworLyoqCiAgKiBnZW1fYXZhaWxh YmxlX2ZlbmNlczoKICAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKICAqCmRp ZmYgLS1naXQgYS9saWIvaW9jdGxfd3JhcHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCmlu ZGV4IGRjMDgyN2EuLmQyM2ZhOTYgMTAwNjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCisr KyBiL2xpYi9pb2N0bF93cmFwcGVycy5oCkBAIC0xMDcsOSArMTA3LDExIEBAIHN0cnVjdCBsb2Nh bF9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHsKICNkZWZpbmUgTE9DQUxfQ09OVEVYVF9QQVJBTV9C QU5fUEVSSU9ECTB4MQogI2RlZmluZSBMT0NBTF9DT05URVhUX1BBUkFNX05PX1pFUk9NQVAJMHgy CiAjZGVmaW5lIExPQ0FMX0NPTlRFWFRfUEFSQU1fR1RUX1NJWkUJMHgzCisjZGVmaW5lIExPQ0FM X0NPTlRFWFRfUEFSQU1fVFJUVAkweDQKIAl1aW50NjRfdCB2YWx1ZTsKIH07CiB2b2lkIGdlbV9j b250ZXh0X3JlcXVpcmVfYmFuX3BlcmlvZChpbnQgZmQpOworaW50IF9fZ2VtX2NvbnRleHRfcmVx dWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKTsKIHZvaWQgZ2VtX2NvbnRleHRfcmVx dWlyZV9wYXJhbShpbnQgZmQsIHVpbnQ2NF90IHBhcmFtKTsKIHZvaWQgZ2VtX2NvbnRleHRfZ2V0 X3BhcmFtKGludCBmZCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApOwog dm9pZCBnZW1fY29udGV4dF9zZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1f Y29udGV4dF9wYXJhbSAqcCk7CkBAIC0xNDMsNiArMTQ1LDcgQEAgYm9vbCBnZW1faGFzX2JzZDIo aW50IGZkKTsKIGludCBnZW1fZ3R0X3R5cGUoaW50IGZkKTsKIGJvb2wgZ2VtX3VzZXNfcHBndHQo aW50IGZkKTsKIGJvb2wgZ2VtX3VzZXNfZnVsbF9wcGd0dChpbnQgZmQpOworYm9vbCBnZW1fdXNl c182NGJfcHBndHQoaW50IGZkKTsKIGludCBnZW1fYXZhaWxhYmxlX2ZlbmNlcyhpbnQgZmQpOwog dWludDY0X3QgZ2VtX2F2YWlsYWJsZV9hcGVydHVyZV9zaXplKGludCBmZCk7CiB1aW50NjRfdCBn ZW1fYXBlcnR1cmVfc2l6ZShpbnQgZmQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZjhiMThiMC4uZTYwODFmNiAxMDA2 NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzCkBAIC03Myw2ICs3Myw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCiAJZ2VtX3N0cmVhbWluZ193 cml0ZXMgXAogCWdlbV90aWxlZF9ibGl0cyBcCiAJZ2VtX3RpbGVkX3BhcnRpYWxfcHdyaXRlX3By ZWFkIFwKKwlnZW1fdHJ0dCBcCiAJZ2VtX3VzZXJwdHJfYmxpdHMgXAogCWdlbV93cml0ZV9yZWFk X3Jpbmdfc3dpdGNoIFwKIAlrbXNfYWRkZmJfYmFzaWMgXApkaWZmIC0tZ2l0IGEvdGVzdHMvZ2Vt X3NvZnRwaW4uYyBiL3Rlc3RzL2dlbV9zb2Z0cGluLmMKaW5kZXggMWIzZDlkMy4uM2VlZTA4ZiAx MDA2NDQKLS0tIGEvdGVzdHMvZ2VtX3NvZnRwaW4uYworKysgYi90ZXN0cy9nZW1fc29mdHBpbi5j CkBAIC0zMSwxOCArMzEsNiBAQAogI2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCiAj ZGVmaW5lIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQogCi0vKiBnZW44 X2Nhbm9uaWNhbF9hZGRyCi0gKiBVc2VkIHRvIGNvbnZlcnQgYW55IGFkZHJlc3MgaW50byBjYW5v bmljYWwgZm9ybSwgaS5lLiBbNjM6NDhdID09IFs0N10uCi0gKiBCYXNlZCBvbiBrZXJuZWwncyBz aWduX2V4dGVuZDY0IGltcGxlbWVudGF0aW9uLgotICogQGFkZHJlc3MgLSBhIHZpcnR1YWwgYWRk cmVzcwotKi8KLSNkZWZpbmUgR0VOOF9ISUdIX0FERFJFU1NfQklUIDQ3Ci1zdGF0aWMgdWludDY0 X3QgZ2VuOF9jYW5vbmljYWxfYWRkcih1aW50NjRfdCBhZGRyZXNzKQotewotCV9fdTggc2hpZnQg PSA2MyAtIEdFTjhfSElHSF9BRERSRVNTX0JJVDsKLQlyZXR1cm4gKF9fczY0KShhZGRyZXNzIDw8 IHNoaWZ0KSA+PiBzaGlmdDsKLX0KLQogc3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkKGludCBmZCkK IHsKIAljb25zdCB1aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwpAQCAtNzAsNyAr NTgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWQoaW50IGZkKQogCiAJLyogQ2hlY2sgYmV5 b25kIGJvdW5kcyBvZiBhcGVydHVyZSAqLwogCW9iamVjdC5vZmZzZXQgPSBnZW1fYXBlcnR1cmVf c2l6ZShmZCkgLSA0MDk2OwotCW9iamVjdC5vZmZzZXQgPSBnZW44X2Nhbm9uaWNhbF9hZGRyKG9i amVjdC5vZmZzZXQpOworCW9iamVjdC5vZmZzZXQgPSBpZ3RfY2Fub25pY2FsX2FkZHIob2JqZWN0 Lm9mZnNldCk7CiAJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1F SU5WQUwpOwogCiAJLyogQ2hlY2sgZ2VuOCBjYW5vbmljYWwgYWRkcmVzc2luZyAqLwpAQCAtNzgs NyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWQoaW50IGZkKQogCQlvYmplY3Qub2Zm c2V0ID0gMXVsbCA8PCBHRU44X0hJR0hfQUREUkVTU19CSVQ7CiAJCWlndF9hc3NlcnRfZXEoX19n ZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKIAotCQlvYmplY3Qub2Zmc2V0ID0g Z2VuOF9jYW5vbmljYWxfYWRkcihvYmplY3Qub2Zmc2V0KTsKKwkJb2JqZWN0Lm9mZnNldCA9IGln dF9jYW5vbmljYWxfYWRkcihvYmplY3Qub2Zmc2V0KTsKIAkJaWd0X2Fzc2VydF9lcShfX2dlbV9l eGVjYnVmKGZkLCAmZXhlY2J1ZiksIDApOwogCX0KIApAQCAtODgsNyArNzYsNyBAQCBzdGF0aWMg dm9pZCB0ZXN0X2ludmFsaWQoaW50IGZkKQogCQlvYmplY3Qub2Zmc2V0ID0gMXVsbDw8MzI7CiAJ CWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKIAot CQlvYmplY3Qub2Zmc2V0ID0gZ2VuOF9jYW5vbmljYWxfYWRkcihvYmplY3Qub2Zmc2V0KTsKKwkJ b2JqZWN0Lm9mZnNldCA9IGlndF9jYW5vbmljYWxfYWRkcihvYmplY3Qub2Zmc2V0KTsKIAkJb2Jq ZWN0LmZsYWdzIHw9IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTOwogCQlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgMCk7CiAJfQpkaWZmIC0tZ2l0IGEv dGVzdHMvZ2VtX3RydHQuYyBiL3Rlc3RzL2dlbV90cnR0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNDZlZDM5OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dlbV90cnR0 LmMKQEAgLTAsMCArMSw2MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICogICAgQWthc2ggR29lbCA8YWthc2guZ29lbEBpbnRlbC5jb20+Cisg KgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKworI2RlZmluZSBCT19TSVpFIDQwOTYKKyNkZWZp bmUgRVhFQ19PQkpFQ1RfUElOTkVECSgxPDw0KQorI2RlZmluZSBFWEVDX09CSkVDVF9TVVBQT1JU U180OEJfQUREUkVTUyAoMTw8MykKKworLyogaGFzX3RydHRfc3VwcG9ydAorICogRmluZHMgaWYg dHJ0dCBodyBpcyBwcmVzZW50CisgKiBAZmQgRFJNIGZkCisgKi8KK3N0YXRpYyBib29sIGhhc190 cnR0X3N1cHBvcnQoaW50IGZkKQoreworCWludCByZXQgPSBfX2dlbV9jb250ZXh0X3JlcXVpcmVf cGFyYW0oZmQsIExPQ0FMX0NPTlRFWFRfUEFSQU1fVFJUVCk7CisKKwlyZXR1cm4gKHJldCA9PSAw KTsKK30KKworLyogbW1hcF9ibworICogaGVscGVyIGZvciBjcmVhdGluZyBhIENQVSBtbWFwcGlu ZyBvZiB0aGUgYnVmZmVyCisgKiBAZmQgLSBkcm0gZmQKKyAqIEBoYW5kbGUgLSBoYW5kbGUgb2Yg dGhlIGJ1ZmZlciB0byBtbWFwCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyCisgKi8KK3N0 YXRpYyB2b2lkKiBtbWFwX2JvKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXpl KQoreworCXVpbnQzMl90ICpwdHIgPSBnZW1fbW1hcF9fY3B1KGZkLCBoYW5kbGUsIDAsIHNpemUs IFBST1RfUkVBRCk7CisJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlO X0NQVSwgMCk7CisJcmV0dXJuIHB0cjsKK30KKworLyogZW1pdF9zdG9yZV9kd29yZAorICogcG9w dWxhdGUgYmF0Y2ggYnVmZmVyIHdpdGggTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKKyAqIEBm ZDogZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgorICogQGR3 X29mZnNldDogd3JpdGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICogQHZhZGRyOiBkZXN0aW5h dGlvbiBWaXJ0dWFsIGFkZHJlc3MKKyAqIEBkYXRhOiB1MzIgZGF0YSB0byBiZSBzdG9yZWQgYXQg ZGVzdGluYXRpb24KKyAqLworc3RhdGljIGludCBlbWl0X3N0b3JlX2R3b3JkKGludCBmZCwgdWlu dDMyX3QgKmNtZF9idWYsIHVpbnQzMl90IGR3X29mZnNldCwKKwkJCSAgICB1aW50NjRfdCB2YWRk ciwgdWludDMyX3QgZGF0YSkKK3sKKwkvKiBDaGVjayB0aGF0IHNvZnRwaW4gYWRkcmVzc2VzIGFy ZSBpbiB0aGUgY29ycmVjdCBmb3JtICovCisJaWd0X2Fzc2VydF9lcV91NjQodmFkZHIsIGlndF9j YW5vbmljYWxfYWRkcih2YWRkcikpOworCisJLyogU0RJIGNhbm5vdCB3cml0ZSB0byB1bmFsaWdu ZWQgYWRkcmVzc2VzICovCisJaWd0X2Fzc2VydCgodmFkZHIgJiAzKSA9PSAwKTsKKworCWNtZF9i dWZbZHdfb2Zmc2V0KytdID0gTUlfU1RPUkVfRFdPUkRfSU1NOworCWNtZF9idWZbZHdfb2Zmc2V0 KytdID0gKHVpbnQzMl90KXZhZGRyOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gKHVpbnQzMl90 KSh2YWRkciA+PiAzMik7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBkYXRhOworCisJcmV0dXJu IGR3X29mZnNldDsKK30KKworLyogZW1pdF9zdG9yZV9xd29yZAorICogcG9wdWxhdGUgYmF0Y2gg YnVmZmVyIHdpdGggTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1hbmQKKyAqIEBmZDogZHJtIGZpbGUg ZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgorICogQGR3X29mZnNldDogd3Jp dGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICogQHZhZGRyOiBkZXN0aW5hdGlvbiBWaXJ0dWFs IGFkZHJlc3MKKyAqIEBkYXRhOiB1NjQgZGF0YSB0byBiZSBzdG9yZWQgYXQgZGVzdGluYXRpb24K KyAqLworc3RhdGljIGludCBlbWl0X3N0b3JlX3F3b3JkKGludCBmZCwgdWludDMyX3QgKmNtZF9i dWYsIHVpbnQzMl90IGR3X29mZnNldCwKKwkJCSAgICB1aW50NjRfdCB2YWRkciwgdWludDY0X3Qg ZGF0YSkKK3sKKwkvKiBDaGVjayB0aGF0IHNvZnRwaW4gYWRkcmVzc2VzIGFyZSBpbiB0aGUgY29y cmVjdCBmb3JtICovCisJaWd0X2Fzc2VydF9lcV91NjQodmFkZHIsIGlndF9jYW5vbmljYWxfYWRk cih2YWRkcikpOworCisJLyogU0RJIGNhbm5vdCB3cml0ZSB0byB1bmFsaWduZWQgYWRkcmVzc2Vz ICovCisJaWd0X2Fzc2VydCgodmFkZHIgJiAzKSA9PSAwKTsKKworCWNtZF9idWZbZHdfb2Zmc2V0 KytdID0gTUlfU1RPUkVfRFdPUkRfSU1NIHwgMHgzOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0g KHVpbnQzMl90KXZhZGRyOworCWNtZF9idWZbZHdfb2Zmc2V0KytdID0gKHVpbnQzMl90KSh2YWRk ciA+PiAzMik7CisJY21kX2J1Zltkd19vZmZzZXQrK10gPSBkYXRhOworCWNtZF9idWZbZHdfb2Zm c2V0KytdID0gZGF0YSA+PiAzMjsKKworCXJldHVybiBkd19vZmZzZXQ7Cit9CisKKy8qIGVtaXRf YmJfZW5kCisgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9CQVRDSF9CVUZGRVJfRU5E IGNvbW1hbmQKKyAqIEBmZDogZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGNtZF9idWY6IGJhdGNo IGJ1ZmZlcgorICogQGR3X29mZnNldDogd3JpdGUgb2Zmc2V0IGluIGJhdGNoIGJ1ZmZlcgorICov CitzdGF0aWMgaW50IGVtaXRfYmJfZW5kKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYsIHVpbnQz Ml90IGR3X29mZnNldCkKK3sKKwlkd19vZmZzZXQgPSBBTElHTihkd19vZmZzZXQsIDIpOworCWNt ZF9idWZbZHdfb2Zmc2V0KytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKwlkd19vZmZzZXQrKzsK KworCXJldHVybiBkd19vZmZzZXQ7Cit9CisKKy8qIHNldHVwX2V4ZWNidWZmZXIKKyAqIGhlbHBl ciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgorICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZm ZXIKKyAqIEBleGVjX29iamVjdCAtIHBvaW50ZXIgdG8gZXhlYyBvYmplY3QyIHN0cnVjdAorICog QHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKKyAqIEBidWZmZXJfY291bnQgLSBob3cgbWFudSBidWZm ZXJzIHRvIHN1Ym1pdAorICogQGJhdGNoX2xlbmd0aCAtIGxlbmd0aCBvZiBiYXRjaCBidWZmZXIK KyAqLworc3RhdGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNidWZmZXIyICpleGVjYnVmLAorCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqZXhlY19vYmplY3QsCisJCQkgICAgIHVpbnQzMl90IGN0eF9pZCwgaW50IHJpbmcsIGlu dCBidWZmZXJfY291bnQsIGludCBiYXRjaF9sZW5ndGgpCit7CisJbWVtc2V0KGV4ZWNidWYsIDAs IHNpemVvZigqZXhlY2J1ZikpOworCisJZXhlY2J1Zi0+YnVmZmVyc19wdHIgPSAodW5zaWduZWQg bG9uZylleGVjX29iamVjdDsKKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7 CisJZXhlY2J1Zi0+YmF0Y2hfbGVuID0gYmF0Y2hfbGVuZ3RoOworCWV4ZWNidWYtPmZsYWdzID0g cmluZzsKKwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKCpleGVjYnVmLCBjdHhfaWQp OworfQorCisjZGVmaW5lIFRBQkxFX1NJWkUgMHgxMDAwCisjZGVmaW5lIFRJTEVfU0laRSAweDEw MDAwCisKKyNkZWZpbmUgVFJUVF9TRUdNRU5UX1NJWkUgKDFVTEwgPDwgNDQpCisjZGVmaW5lIFBQ R1RUX1NJWkUgKDFVTEwgPDwgNDgpCisKKyNkZWZpbmUgTlVMTF9USUxFX1BBVFRFUk4gICAgMHhG RkZGRkZGRgorI2RlZmluZSBJTlZBTElEX1RJTEVfUEFUVEVSTiAweEZGRkZGRkZFCisKK3N0cnVj dCBsb2NhbF9pOTE1X2dlbV9jb250ZXh0X3RydHRfcGFyYW0geworCXVpbnQ2NF90IHNlZ21lbnRf YmFzZV9hZGRyOworCXVpbnQ2NF90IGwzX3RhYmxlX2FkZHJlc3M7CisJdWludDMyX3QgaW52ZF90 aWxlX3ZhbDsKKwl1aW50MzJfdCBudWxsX3RpbGVfdmFsOworfTsKKworLyogcXVlcnlfdHJ0dAor ICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBUUi1UVCBzZXR0aW5ncyBzdG9yZWQg d2l0aCB0aGUgS01ELAorICogZm9yIGEgY29udGV4dCwgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFsdWVz IChzZXQgcHJldmlvdXNseSkuCisgKiBAZmQgLSBkcm0gZmQKKyAqIEBjdHhfaWQgLSBpZCBvZiB0 aGUgY29udGV4dCBmb3Igd2hpY2ggVFJUVCBpcyB0byBiZSBlbmFibGVkCisgKiBAbDNfdGFibGVf YWRkcmVzcyAtIEdGWCBhZGRyZXNzIG9mIHRoZSBMMyB0YWJsZQorICogQHNlZ21lbnRfYmFzZV9h ZGRyIC0gb2Zmc2V0IG9mIHRoZSBUUlRUIHNlZ21lbnQgaW4gUFBHVFQgc3BhY2UKKyAqLworc3Rh dGljIHZvaWQKK3F1ZXJ5X3RydHQoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVpbnQ2NF90IGwz X3RhYmxlX2FkZHJlc3MsCisJICAgdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHIpCit7CisJc3Ry dWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gY3R4X3BhcmFtOworCXN0cnVjdCBsb2Nh bF9pOTE1X2dlbV9jb250ZXh0X3RydHRfcGFyYW0gdHJ0dF9wYXJhbTsKKworCWN0eF9wYXJhbS5j b250ZXh0ID0gY3R4X2lkOworCWN0eF9wYXJhbS5zaXplID0gc2l6ZW9mKHRydHRfcGFyYW0pOwor CWN0eF9wYXJhbS5wYXJhbSA9IExPQ0FMX0NPTlRFWFRfUEFSQU1fVFJUVDsKKwljdHhfcGFyYW0u dmFsdWUgPSAodWludDY0X3QpJnRydHRfcGFyYW07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0o ZmQsICZjdHhfcGFyYW0pOworCisJaWd0X2Fzc2VydF9lcV91NjQodHJ0dF9wYXJhbS5sM190YWJs ZV9hZGRyZXNzLCBsM190YWJsZV9hZGRyZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxX3U2NCh0cnR0X3Bh cmFtLnNlZ21lbnRfYmFzZV9hZGRyLCBzZWdtZW50X2Jhc2VfYWRkcik7CisJaWd0X2Fzc2VydF9l cV91MzIodHJ0dF9wYXJhbS5pbnZkX3RpbGVfdmFsLCBJTlZBTElEX1RJTEVfUEFUVEVSTik7CisJ aWd0X2Fzc2VydF9lcV91MzIodHJ0dF9wYXJhbS5udWxsX3RpbGVfdmFsLCBOVUxMX1RJTEVfUEFU VEVSTik7Cit9CisKK3N0YXRpYyBpbnQKK19fc2V0dXBfdHJ0dChpbnQgZmQsIHVpbnQzMl90IGN0 eF9pZCwgdWludDY0X3QgbDNfdGFibGVfYWRkcmVzcywKKwkgICAgIHVpbnQ2NF90IHNlZ21lbnRf YmFzZV9hZGRyLCB1aW50MzJfdCBudWxsX3RpbGVfdmFsLAorCSAgICAgdWludDMyX3QgaW52ZF90 aWxlX3ZhbCkKK3sKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSBjdHhfcGFy YW07CisJc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfdHJ0dF9wYXJhbSB0cnR0X3BhcmFt OworCisJdHJ0dF9wYXJhbS5udWxsX3RpbGVfdmFsID0gbnVsbF90aWxlX3ZhbDsKKwl0cnR0X3Bh cmFtLmludmRfdGlsZV92YWwgPSBpbnZkX3RpbGVfdmFsOworCXRydHRfcGFyYW0ubDNfdGFibGVf YWRkcmVzcyA9IGwzX3RhYmxlX2FkZHJlc3M7CisJdHJ0dF9wYXJhbS5zZWdtZW50X2Jhc2VfYWRk ciA9IHNlZ21lbnRfYmFzZV9hZGRyOworCisJY3R4X3BhcmFtLmNvbnRleHQgPSBjdHhfaWQ7CisJ Y3R4X3BhcmFtLnNpemUgPSBzaXplb2YodHJ0dF9wYXJhbSk7CisJY3R4X3BhcmFtLnBhcmFtID0g TE9DQUxfQ09OVEVYVF9QQVJBTV9UUlRUOworCWN0eF9wYXJhbS52YWx1ZSA9ICh1aW50NjRfdCkm dHJ0dF9wYXJhbTsKKworCXJldHVybiBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmN0eF9w YXJhbSk7Cit9CisKKy8qIHNldHVwX3RydHQKKyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXF1ZXN0 IEtNRCB0byBlbmFibGUgVFJUVAorICogQGZkIC0gZHJtIGZkCisgKiBAY3R4X2lkIC0gaWQgb2Yg dGhlIGNvbnRleHQgZm9yIHdoaWNoIFRSVFQgaXMgdG8gYmUgZW5hYmxlZAorICogQGwzX3RhYmxl X2FkZHJlc3MgLSBHRlggYWRkcmVzcyBvZiB0aGUgTDMgdGFibGUKKyAqIEBzZWdtZW50X2Jhc2Vf YWRkciAtIG9mZnNldCBvZiB0aGUgVFJUVCBzZWdtZW50IGluIFBQR1RUIHNwYWNlCisgKi8KK3N0 YXRpYyBpbnQKK3NldHVwX3RydHQoaW50IGZkLCB1aW50MzJfdCBjdHhfaWQsIHVpbnQ2NF90IGwz X3RhYmxlX2FkZHJlc3MsCisJICAgdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHIpCit7CisJcmV0 dXJuIF9fc2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM190YWJsZV9hZGRyZXNzLCBzZWdtZW50X2Jh c2VfYWRkciwKKwkJCU5VTExfVElMRV9QQVRURVJOLCBJTlZBTElEX1RJTEVfUEFUVEVSTik7Cit9 CisKKy8qIGJvX2FsbG9jX3NldHVwCisgKiBhbGxvY2F0ZSBibyBhbmQgcG9wdWxhdGUgZXhlYyBv YmplY3QKKyAqIEBleGVjX29iamVjdDIgLSBwb2ludGVyIHRvIGV4ZWMgb2JqZWN0CisgKiBAYm9f c2l6ZWUgLSBidWZmZXIgc2l6ZQorICogQGZsYWdzIC0gZXhlYyBmbGFncworICogQGJvX29mZnNl dCAtIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgUFBHVFQgb2Zmc2V0CisgKi8KK3N0YXRpYyB2b2lk IGJvX2FsbG9jX3NldHVwKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg KmV4ZWNfb2JqZWN0MiwKKwkJCSAgIHVpbnQ2NF90IGJvX3NpemUsIHVpbnQ2NF90IGZsYWdzLCB1 aW50NjRfdCAqYm9fb2Zmc2V0KQoreworCW1lbXNldChleGVjX29iamVjdDIsIDAsIHNpemVvZigq ZXhlY19vYmplY3QyKSk7CisJZXhlY19vYmplY3QyLT5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBi b19zaXplKTsKKwlleGVjX29iamVjdDItPmZsYWdzID0gZmxhZ3M7CisKKwlpZiAoYm9fb2Zmc2V0 KQorCXsKKwkJZXhlY19vYmplY3QyLT5vZmZzZXQgPSAqYm9fb2Zmc2V0OworCQkqYm9fb2Zmc2V0 ICs9IGJvX3NpemU7CisJfQorfQorCisvKiBidXN5X2JhdGNoCisgKiBUaGlzIGhlbHBlciBmdW5j dGlvbiB3aWxsIHByZXBhcmUgJiBzdWJtaXQgYSBiYXRjaCBvbiB0aGUgQkNTIHJpbmcsCisgKiB3 aGljaCB3aWxsIGtlZXAgdGhlIHJpbmcgYnVzeSBmb3Igc29tZXRpbWUsIGxvbmcgZW5vdWdoIHRv IHN1Ym1pdAorICogc29tZSBvdGhlciB3b3JrIHdoaWNoIGNhbiB0cmlnZ2VyIHRoZSBldmljdGlv biBvZiB0aGF0IGJhdGNoIG9iamVjdAorICogd2hpbGUgaXQgaXMgc3RpbGwgZ2V0dGluZyBleGVj dXRlZCBvbiB0aGUgcmluZy4KKyAqLworc3RhdGljIHVpbnQ2NF90IGJ1c3lfYmF0Y2goaW50IGZk LCB1aW50MzJfdCBjdHhfaWQpCit7CisJY29uc3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9n ZXRfZHJtX2RldmlkKGZkKSk7CisJY29uc3QgaW50IGhhc182NGJpdF9yZWxvYyA9IGdlbiA+PSA4 OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmplY3RbMl07CisJdWludDMyX3QgKm1hcDsKKwlpbnQg ZmFjdG9yID0gMTA7CisJaW50IGkgPSAwOworCisJLyogVW50aWwgdGhlIGtlcm5lbCBBQkkgaXMg Zml4ZWQsIG9ubHkgZGVmYXVsdCBjb250ZXh0cyBjYW4gYmUgdXNlZAorCSAqIG9uICFSQ1Mgcmlu Z3MgKi8KKwlpZ3RfcmVxdWlyZShjdHhfaWQgPT0gMCk7CisKKwltZW1zZXQob2JqZWN0LCAwLCBz aXplb2Yob2JqZWN0KSk7CisJb2JqZWN0WzBdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDEwMjQq MTAyNCk7CisJb2JqZWN0WzFdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYpOworCW1hcCA9 IGdlbV9tbWFwX19jcHUoZmQsIG9iamVjdFsxXS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfV1JJVEUp OworCWdlbV9zZXRfZG9tYWluKGZkLCBvYmplY3RbMV0uaGFuZGxlLAorCQkgICAgICAgSTkxNV9H RU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisKKwlzZXR1cF9leGVjYnVmZmVy KCZleGVjYnVmLCBvYmplY3QsIGN0eF9pZCwgSTkxNV9FWEVDX0JMVCwgMiwKKwkJCSBlbWl0X2Ji X2VuZChmZCwgbWFwLCAwKSo0KTsKKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJaWd0 X2RlYnVnKCJBY3RpdmUgb2Zmc2V0cyA9IFslMDhsbHgsICUwOGxseF1cbiIsCisJCSAgb2JqZWN0 WzBdLm9mZnNldCwgb2JqZWN0WzFdLm9mZnNldCk7CisKKyNkZWZpbmUgQ09QWV9CTFRfQ01ECQko Mjw8Mjl8MHg1Mzw8MjJ8MHg2KQorI2RlZmluZSBCTFRfV1JJVEVfQUxQSEEJCSgxPDwyMSkKKyNk ZWZpbmUgQkxUX1dSSVRFX1JHQgkJKDE8PDIwKQorCWdlbV9zZXRfZG9tYWluKGZkLCBvYmplY3Rb MV0uaGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlO X0NQVSk7CisJd2hpbGUgKGZhY3Rvci0tKSB7CisJCS8qIFhZX1NSQ19DT1BZICovCisJCW1hcFtp KytdID0gQ09QWV9CTFRfQ01EIHwgQkxUX1dSSVRFX0FMUEhBIHwgQkxUX1dSSVRFX1JHQjsKKwkJ aWYgKGhhc182NGJpdF9yZWxvYykKKwkJCW1hcFtpLTFdICs9IDI7CisJCW1hcFtpKytdID0gMHhj YyA8PCAxNiB8IDEgPDwgMjUgfCAxIDw8IDI0IHwgKDQqMTAyNCk7CisJCW1hcFtpKytdID0gMDsK KwkJbWFwW2krK10gPSAyNTYgPDwgMTYgfCAxMDI0OworCQltYXBbaSsrXSA9IG9iamVjdFswXS5v ZmZzZXQ7CisJCWlmIChoYXNfNjRiaXRfcmVsb2MpCisJCQltYXBbaSsrXSA9IG9iamVjdFswXS5v ZmZzZXQgPj4gMzI7CisJCW1hcFtpKytdID0gMDsKKwkJbWFwW2krK10gPSA0MDk2OworCQltYXBb aSsrXSA9IG9iamVjdFswXS5vZmZzZXQ7CisJCWlmIChoYXNfNjRiaXRfcmVsb2MpCisJCQltYXBb aSsrXSA9IG9iamVjdFswXS5vZmZzZXQgPj4gMzI7CisJfQorCWkgPSBlbWl0X2JiX2VuZChmZCwg bWFwLCBpKTsKKwltdW5tYXAobWFwLCA0MDk2KTsKKworCW9iamVjdFswXS5mbGFncyA9IEVYRUNf T0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1dSSVRFOworCW9iamVjdFsxXS5mbGFncyA9IEVY RUNfT0JKRUNUX1BJTk5FRDsKKwlleGVjYnVmLmJhdGNoX2xlbiA9IGkqNDsKKwlnZW1fZXhlY2J1 ZihmZCwgJmV4ZWNidWYpOworCWdlbV9jbG9zZShmZCwgb2JqZWN0WzBdLmhhbmRsZSk7CisJZ2Vt X2Nsb3NlKGZkLCBvYmplY3RbMV0uaGFuZGxlKTsKKworCXJldHVybiBvYmplY3RbMV0ub2Zmc2V0 OworfQorCisvKiBhY3RpdmUgb2JqZWN0IGV2aWN0aW9uIHRlc3QKKyAqIFRoaXMgdGVzdCB3aWxs IGZvcmNlIHRoZSBldmljdGlvbiBvZiBhbiBhY3RpdmUgb2JqZWN0LCBieSBjaG9vc2luZyB0aGUK KyAqIFRSLVRUIHNlZ21lbnQgbG9jYXRpb24gd2hpY2ggd2lsbCBvdmVybGFwIHdpdGggdGhlIG9i amVjdCdzIGxvY2F0aW9uLgorICovCitzdGF0aWMgdm9pZCB0ZXN0X2V2aWN0X2FjdGl2ZSh2b2lk KQoreworCWludCBmZDsKKwl1aW50NjRfdCBleHBlY3RlZDsKKwl1aW50NjRfdCBzZWdtZW50X2Jh c2VfYWRkcjsKKwl1aW50NjRfdCBsM19vZmZzZXQ7CisKKwlmZCA9IGRybV9vcGVuX2RyaXZlcihE UklWRVJfSU5URUwpOworCisJZXhwZWN0ZWQgPSBidXN5X2JhdGNoKGZkLCAwKTsKKworCS8qIERl dGVybWluZSB0aGUgc2VnbWVudF9iYXNlX2FkZHIgYWNjb3JkaW5nIHRvIHRoZSBvZmZzZXQgb2Yg YWN0aXZlCisJICogYnVmZmVyLCBmb3JjaW5nIGl0cyBldmljdGlvbgorCSAqLworCXNlZ21lbnRf YmFzZV9hZGRyID0gZXhwZWN0ZWQgJiAofihUUlRUX1NFR01FTlRfU0laRSAtIDEpKTsKKworCS8q IEtlZXAgdGhlIGwzIHRhYmxlIG91dHNpZGUgdGhlIHNlZ21lbnQgdG8gYXZvaWQgdGhlIGNvbmZs aWN0ICovCisJbDNfb2Zmc2V0ID0gc2VnbWVudF9iYXNlX2FkZHIgPyAwIDogVFJUVF9TRUdNRU5U X1NJWkU7CisKKwlpZ3RfYXNzZXJ0KHNldHVwX3RydHQoZmQsIDAsIGwzX29mZnNldCwgc2VnbWVu dF9iYXNlX2FkZHIpID09IDApOworCisJcXVlcnlfdHJ0dChmZCwgMCwgbDNfb2Zmc2V0LCBzZWdt ZW50X2Jhc2VfYWRkcik7CisJY2xvc2UoZmQpOworfQorCisvKiBoYW5naW5nIG9iamVjdCBldmlj dGlvbiB0ZXN0CisgKiBUaGlzIHRlc3Qgd2lsbCBmb3JjZSB0aGUgZXZpY3Rpb24gb2YgYSBoYW5n aW5nIG9iamVjdCwgYnkgY2hvb3NpbmcgdGhlCisgKiBUUi1UVCBzZWdtZW50IGxvY2F0aW9uIHdo aWNoIHdpbGwgb3ZlcmxhcCB3aXRoIHRoZSBvYmplY3QncyBsb2NhdGlvbi4KKyAqLworc3RhdGlj IHZvaWQgdGVzdF9ldmljdF9oYW5nKHZvaWQpCit7CisJaW50IGZkOworCXVpbnQzMl90IGN0eF9p ZDsKKwl1aW50NjRfdCBzZWdtZW50X2Jhc2VfYWRkcjsKKwl1aW50NjRfdCBsM19vZmZzZXQ7CisJ dWludDY0X3QgZXhwZWN0ZWQ7CisKKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp OworCWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisKKwlpZ3RfaGFuZ19jdHgoZmQs IGN0eF9pZCwgSTkxNV9FWEVDX1JFTkRFUiwgMCwgKHVpbnQ2NF90ICopJmV4cGVjdGVkKTsKKwor CS8qIERldGVybWluZSB0aGUgc2VnbWVudF9iYXNlX2FkZHIgYWNjb3JkaW5nIHRvIHRoZSBvZmZz ZXQgb2YgaGFuZ2luZworCSAqIGJ1ZmZlciwgZm9yY2luZyBpdHMgZXZpY3Rpb24KKwkgKi8KKwlz ZWdtZW50X2Jhc2VfYWRkciA9IGV4cGVjdGVkICYgKH4oVFJUVF9TRUdNRU5UX1NJWkUgLSAxKSk7 CisKKwkvKiBLZWVwIHRoZSBsMyB0YWJsZSBvdXRzaWRlIHRoZSBzZWdtZW50IHRvIGF2b2lkIHRo ZSBjb25mbGljdCAqLworCWwzX29mZnNldCA9IHNlZ21lbnRfYmFzZV9hZGRyID8gMCA6IFRSVFRf U0VHTUVOVF9TSVpFOworCisJaWd0X2Fzc2VydChzZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX29m ZnNldCwgc2VnbWVudF9iYXNlX2FkZHIpID09IDApOworCisJcXVlcnlfdHJ0dChmZCwgY3R4X2lk LCBsM19vZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGZk LCBjdHhfaWQpOworCWNsb3NlIChmZCk7Cit9CisKKy8qIHN1Ym1pdF90cnR0X2NvbnRleHQKKyAq IFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IGNvbnRleHQgaWYgdGhlIFRS LVRUIHNlZ21lbnQKKyAqIGJhc2UgYWRkcmVzcyBpcyBub3QgemVybywgYWxsb2NhdGUgYSBMMyB0 YWJsZSBwYWdlLCAyIHBhZ2VzIGFwaWVjZQorICogZm9yIEwyL0wxIHRhYmxlcyBhbmQgY291cGxl IG9mIGRhdGEgYnVmZmVycyBvZiA2NEtCIGluIHNpemUsIG1hdGNoaW5nIHRoZQorICogVGlsZSBz aXplLiBUaGUgMiBkYXRhIGJ1ZmZlcnMgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIDIgZW5kcyBvZiBU UlRUIHZpcnR1YWwKKyAqIHNwYWNlLiBTZXJpZXMgb2YgTUlfU1RPUkVfRFdPUkRfSU1NIGNvbW1h bmRzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGJhdGNoCisgKiBidWZmZXIgdG8gZmlyc3QgdXBkYXRl IHRoZSBUUi1UVCB0YWJsZSBlbnRyaWVzIGFuZCB0aGVuIHRvIHVwZGF0ZSB0aGUgZGF0YQorICog YnVmZmVycyB1c2luZyB0aGVpciBUUi1UVCBWQSwgZXhlcmNpc2luZyB0aGUgdGFibGUgcHJvZ3Jh bW1pbmcgZG9uZQorICogcHJldmlvdXNseS4KKyAqIEludm9rZSBDT05URVhUX1NFVFBBUkFNIGlv Y3RsIHRvIHJlcXVlc3QgS01EIHRvIGVuYWJsZSBUUlRULgorICogSW52b2tlIGV4ZWNidWZmZXIg dG8gc3VibWl0IHRoZSBiYXRjaCBidWZmZXIuCisgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdP UkQgaW4gdGhlIDIgZGF0YSBidWZmZXIgbWF0Y2hlcyB0aGUgZGF0YSBhc2tlZAorICogdG8gYmUg d3JpdHRlbiBieSB0aGUgR1BVLgorICovCitzdGF0aWMgdm9pZCBzdWJtaXRfdHJ0dF9jb250ZXh0 KGludCBmZCwgdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHIsIHVpbnQzMl90IGN0eF9pZCkKK3sK KwllbnVtIHsKKwkJTDNfVEJMLAorCQlMMl9UQkwxLAorCQlMMl9UQkwyLAorCQlMMV9UQkwxLAor CQlMMV9UQkwyLAorCQlEQVRBMSwKKwkJREFUQTIsCisJCUJBVENILAorCQlOVU1fQlVGRkVSUywK Kwl9OworCisJaW50IHJpbmcsIGxlbiA9IDA7CisJdWludDMyX3QgKnB0cjsKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgZXhlY19vYmplY3QyW05VTV9CVUZGRVJTXTsKKwl1aW50MzJfdCBiYXRjaF9idWZm ZXJbQk9fU0laRV07CisJdWludDMyX3QgZGF0YSwgbGFzdF9lbnRyeV9vZmZzZXQ7CisJdWludDY0 X3QgY3VyX3BwZ3R0X29mZiwgZXhlY19mbGFnczsKKwl1aW50NjRfdCBmaXJzdF90aWxlX2FkZHIs IGxhc3RfdGlsZV9hZGRyOworCisJZmlyc3RfdGlsZV9hZGRyID0gc2VnbWVudF9iYXNlX2FkZHI7 CisJbGFzdF90aWxlX2FkZHIgID0gZmlyc3RfdGlsZV9hZGRyICsgVFJUVF9TRUdNRU5UX1NJWkUg LSBUSUxFX1NJWkU7CisKKwkvKiBUbyBhdm9pZCBjb25mbGljdCB3aXRoIHRoZSBUUi1UVCBzZWdt ZW50ICovCisJY3VyX3BwZ3R0X29mZiA9IHNlZ21lbnRfYmFzZV9hZGRyID8gMCA6IFRSVFRfU0VH TUVOVF9TSVpFOworCisJZXhlY19mbGFncyA9IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERS RVNTOworCisJLyogZmlyc3QgYWxsb2NhdGUgQmF0Y2ggYnVmZmVyIEJPICovCisJYm9fYWxsb2Nf c2V0dXAoZmQsICZleGVjX29iamVjdDJbQkFUQ0hdLCBCT19TSVpFLCBleGVjX2ZsYWdzLCBOVUxM KTsKKworCS8qIHRhYmxlIEJPcyBhbmQgZGF0YSBidWZmZXIgQk9zIGFyZSB3cml0dGVuIGJ5IEdQ VSBhbmQgYXJlIHNvZnQgcGlubmVkICovCisJZXhlY19mbGFncyB8PSAoRVhFQ19PQkpFQ1RfV1JJ VEUgfCBFWEVDX09CSkVDVF9QSU5ORUQpOworCisJLyogQWxsb2NhdGUgYSBMMyB0YWJsZSBCTyAq LworCWJvX2FsbG9jX3NldHVwKGZkLCAmZXhlY19vYmplY3QyW0wzX1RCTF0sIFRBQkxFX1NJWkUs IGV4ZWNfZmxhZ3MsICZjdXJfcHBndHRfb2ZmKTsKKworCS8qIEFsbG9jYXRlIHR3byBMMiB0YWJs ZSBCT3MgKi8KKwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMMl9UQkwxXSwgVEFC TEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCWJvX2FsbG9jX3NldHVwKGZk LCAmZXhlY19vYmplY3QyW0wyX1RCTDJdLCBUQUJMRV9TSVpFLCBleGVjX2ZsYWdzLCAmY3VyX3Bw Z3R0X29mZik7CisKKwkvKiBBbGxvY2F0ZSB0d28gTDEgdGFibGUgQk9zICovCisJYm9fYWxsb2Nf c2V0dXAoZmQsICZleGVjX29iamVjdDJbTDFfVEJMMV0sIFRBQkxFX1NJWkUsIGV4ZWNfZmxhZ3Ms ICZjdXJfcHBndHRfb2ZmKTsKKwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltMMV9U QkwyXSwgVEFCTEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCisJLyogQWxp Z24gdGhlIFBQR1RUIG9mZnNldHMgZm9yIHRoZSAyIGRhdGEgYnVmZmVycyB0byBuZXh0IDY0IEtC IGJvdW5kYXJ5ICovCisJY3VyX3BwZ3R0X29mZiA9IEFMSUdOKGN1cl9wcGd0dF9vZmYsIFRJTEVf U0laRSk7CisKKwkvKiBBbGxvY2F0ZSB0d28gRGF0YSBidWZmZXIgQk9zICovCisJYm9fYWxsb2Nf c2V0dXAoZmQsICZleGVjX29iamVjdDJbREFUQTFdLCBUSUxFX1NJWkUsIGV4ZWNfZmxhZ3MsICZj dXJfcHBndHRfb2ZmKTsKKwlib19hbGxvY19zZXR1cChmZCwgJmV4ZWNfb2JqZWN0MltEQVRBMl0s IFRJTEVfU0laRSwgZXhlY19mbGFncywgJmN1cl9wcGd0dF9vZmYpOworCisJLyogQWRkIGNvbW1h bmRzIHRvIHVwZGF0ZSB0aGUgdHdvIEwzIHRhYmxlIGVudHJpZXMgdG8gcG9pbnQgdGhlbSB0byB0 aGUgTDIgdGFibGVzKi8KKwlsYXN0X2VudHJ5X29mZnNldCA9IDUxMSpzaXplb2YodWludDY0X3Qp OworCisJbGVuID0gZW1pdF9zdG9yZV9xd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkg ICAgICAgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zmc2V0LAorCQkJICAgICAgIGV4ZWNfb2JqZWN0 MltMMl9UQkwxXS5vZmZzZXQpOworCisJbGVuID0gZW1pdF9zdG9yZV9xd29yZChmZCwgYmF0Y2hf YnVmZmVyLCBsZW4sCisJCQkgICAgICAgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zmc2V0ICsgbGFz dF9lbnRyeV9vZmZzZXQsCisJCQkgICAgICAgZXhlY19vYmplY3QyW0wyX1RCTDJdLm9mZnNldCk7 CisKKwkvKiBBZGQgY29tbWFuZHMgdG8gdXBkYXRlIGFuIGVudHJ5IG9mIDIgTDIgdGFibGVzIHRv IHBvaW50IHRoZW0gdG8gdGhlIEwxIHRhYmxlcyovCisJbGVuID0gZW1pdF9zdG9yZV9xd29yZChm ZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkgICAgICAgZXhlY19vYmplY3QyW0wyX1RCTDFdLm9m ZnNldCwKKwkJCSAgICAgICBleGVjX29iamVjdDJbTDFfVEJMMV0ub2Zmc2V0KTsKKworCWxlbiA9 IGVtaXRfc3RvcmVfcXdvcmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGV4ZWNf b2JqZWN0MltMMl9UQkwyXS5vZmZzZXQgKyBsYXN0X2VudHJ5X29mZnNldCwKKwkJCSAgICAgICBl eGVjX29iamVjdDJbTDFfVEJMMl0ub2Zmc2V0KTsKKworCS8qIEFkZCBjb21tYW5kcyB0byB1cGRh dGUgYW4gZW50cnkgb2YgMiBMMSB0YWJsZXMgdG8gcG9pbnQgdGhlbSB0byB0aGUgZGF0YSBidWZm ZXJzKi8KKwlsYXN0X2VudHJ5X29mZnNldCA9IDEwMjMqc2l6ZW9mKHVpbnQzMl90KTsKKworCWxl biA9IGVtaXRfc3RvcmVfZHdvcmQoZmQsIGJhdGNoX2J1ZmZlciwgbGVuLAorCQkJICAgICAgIGV4 ZWNfb2JqZWN0MltMMV9UQkwxXS5vZmZzZXQsCisJCQkgICAgICAgZXhlY19vYmplY3QyW0RBVEEx XS5vZmZzZXQgPj4gMTYpOworCisJbGVuID0gZW1pdF9zdG9yZV9kd29yZChmZCwgYmF0Y2hfYnVm ZmVyLCBsZW4sCisJCQkgICAgICAgZXhlY19vYmplY3QyW0wxX1RCTDJdLm9mZnNldCArIGxhc3Rf ZW50cnlfb2Zmc2V0LAorCQkJICAgICAgIGV4ZWNfb2JqZWN0MltEQVRBMl0ub2Zmc2V0ID4+IDE2 KTsKKworCS8qIEFkZCBjb21tYW5kcyB0byB1cGRhdGUgdGhlIDIgZGF0YSBidWZmZXJzLCB1c2lu ZyB0aGVpciBUUlRUIFZBICovCisJZGF0YSA9IDB4MTIzNDU2Nzg7CisJbGVuID0gZW1pdF9zdG9y ZV9kd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkgICAgICAgaWd0X2Nhbm9uaWNhbF9h ZGRyKGZpcnN0X3RpbGVfYWRkciksCisJCQkgICAgICAgZGF0YSk7CisJbGVuID0gZW1pdF9zdG9y ZV9kd29yZChmZCwgYmF0Y2hfYnVmZmVyLCBsZW4sCisJCQkgICAgICAgaWd0X2Nhbm9uaWNhbF9h ZGRyKGxhc3RfdGlsZV9hZGRyKSwKKwkJCSAgICAgICBkYXRhKTsKKworCWxlbiA9IGVtaXRfYmJf ZW5kKGZkLCBiYXRjaF9idWZmZXIsIGxlbik7CisJZ2VtX3dyaXRlKGZkLCBleGVjX29iamVjdDJb QkFUQ0hdLmhhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4qNCk7CisKKwkvKiBSZXF1ZXN0IEtN RCB0byBzZXR1cCB0aGUgVFItVFQgKi8KKwlpZ3RfYXNzZXJ0KHNldHVwX3RydHQoZmQsIGN0eF9p ZCwgZXhlY19vYmplY3QyW0wzX1RCTF0ub2Zmc2V0LCBmaXJzdF90aWxlX2FkZHIpID09IDApOwor CisJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7CisJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1Ziwg ZXhlY19vYmplY3QyLCBjdHhfaWQsIHJpbmcsIE5VTV9CVUZGRVJTLCBsZW4qNCk7CisKKwkvKiBz dWJtaXQgY29tbWFuZCBidWZmZXIgKi8KKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJ LyogcmVhZCB0aGUgMiBkYXRhIGJ1ZmZlcnMgdG8gY2hlY2sgZm9yIHRoZSB2YWx1ZSB3cml0dGVu IGJ5IHRoZSBHUFUgKi8KKwlwdHIgPSBtbWFwX2JvKGZkLCBleGVjX29iamVjdDJbREFUQTFdLmhh bmRsZSwgVElMRV9TSVpFKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihwdHJbMF0sIGRhdGEpOworCisJ cHRyID0gbW1hcF9ibyhmZCwgZXhlY19vYmplY3QyW0RBVEEyXS5oYW5kbGUsIFRJTEVfU0laRSk7 CisJaWd0X2Fzc2VydF9lcV91MzIocHRyWzBdLCBkYXRhKTsKKworCWdlbV9jbG9zZShmZCwgZXhl Y19vYmplY3QyW0wzX1RCTF0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltM Ml9UQkwxXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0wyX1RCTDJdLmhh bmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBleGVjX29iamVjdDJbTDFfVEJMMV0uaGFuZGxlKTsKKwln ZW1fY2xvc2UoZmQsIGV4ZWNfb2JqZWN0MltMMV9UQkwyXS5oYW5kbGUpOworCWdlbV9jbG9zZShm ZCwgZXhlY19vYmplY3QyW0RBVEExXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmpl Y3QyW0RBVEEyXS5oYW5kbGUpOworCWdlbV9jbG9zZShmZCwgZXhlY19vYmplY3QyW0JBVENIXS5o YW5kbGUpOworCisJLyogQ2hlY2sgaWYgdGhlIFRSVFQgcGFyYW1zIHN0b3JlZCB3aXRoIHRoZSBE cml2ZXIgYXJlIGludGFjdCBvciBub3QgKi8KKwlxdWVyeV90cnR0KGZkLCBjdHhfaWQsIGV4ZWNf b2JqZWN0MltMM19UQkxdLm9mZnNldCwgZmlyc3RfdGlsZV9hZGRyKTsKK30KKworLyogYmFzaWMg dHJ0dCB0ZXN0CisgKiBUaGlzIHdpbGwgdGVzdCB0aGUgYmFzaWMgVFItVFQgZnVuY3Rpb25hbGl0 eSBieSBkb2luZyBjb3VwbGUgb2Ygc3RvcmUKKyAqIG9wZXJhdGlvbnMgdGhyb3VnaCBpdC4gQWxz byBpdCB3aWxsIGV4ZXJjaXNlIGFsbCBwb3NzaWJsZSBUUi1UVCBzZWdtZW50CisgKiBzdGFydCBs b2NhdGlvbnMgKGkuZS4gMTYgb2YgdGhlbSkgZm9yIGJvdGggZGVmYXVsdCAmIFVzZXIgY3JlYXRl ZCBjb250ZXh0cy4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9iYXNpY190cnR0X3VzZSh2b2lkKQor eworCWludCBmZDsKKwl1aW50MzJfdCBjdHhfaWQ7CisJdWludDY0X3Qgc2VnbWVudF9iYXNlX2Fk ZHI7CisKKwlmb3IgKHNlZ21lbnRfYmFzZV9hZGRyID0gMDsKKwkgICAgIHNlZ21lbnRfYmFzZV9h ZGRyIDwgUFBHVFRfU0laRTsKKwkgICAgIHNlZ21lbnRfYmFzZV9hZGRyICs9IFRSVFRfU0VHTUVO VF9TSVpFKQorCXsKKwkJLyogSW4gb3JkZXIgdG8gdGVzdCB0aGUgZGVmYXVsdCBjb250ZXh0IGZv ciBhbGwgc2VnbWVudCBzdGFydAorCQkgKiBsb2NhdGlvbnMsIG5lZWQgdG8gb3BlbiBhIG5ldyBm aWxlIGluc3RhbmNlIG9uIGV2ZXJ5IGl0ZXJhdGlvbgorCQkgKiBhcyBUUlRUIHNldHRpbmdzIGFy ZSBpbW11dGFibGUgb25jZSBzZXQgZm9yIGEgY29udGV4dC4KKwkJICovCisJCWZkID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisKKwkJc3VibWl0X3RydHRfY29udGV4dChmZCwgc2Vn bWVudF9iYXNlX2FkZHIsIDApOworCisJCWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7 CisJCXN1Ym1pdF90cnR0X2NvbnRleHQoZmQsIHNlZ21lbnRfYmFzZV9hZGRyLCBjdHhfaWQpOwor CQlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhfaWQpOworCisJCWNsb3NlKGZkKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZCh2b2lkKQoreworCWludCBmZDsKKwl1aW50MzJf dCBjdHhfaWQ7CisJdWludDY0X3Qgc2VnbWVudF9iYXNlX2FkZHI7CisJdWludDY0X3QgbDNfb2Zm c2V0OworCisJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKKwljdHhfaWQgPSBn ZW1fY29udGV4dF9jcmVhdGUoZmQpOworCisJLyogQ2hlY2sgZm9yIGFuIGluY29ycmVjdGx5IGFs aWduZWQgYmFzZSBsb2NhdGlvbiBmb3IgVFItVFQgc2VnbWVudCAqLworCXNlZ21lbnRfYmFzZV9h ZGRyID0gVFJUVF9TRUdNRU5UX1NJWkUgKyAweDEwMDA7CisJbDNfb2Zmc2V0ID0gVElMRV9TSVpF OworCWlndF9hc3NlcnRfZXEoc2V0dXBfdHJ0dChmZCwgY3R4X2lkLCBsM19vZmZzZXQsIHNlZ21l bnRfYmFzZV9hZGRyKSwgLUVJTlZBTCk7CisKKwkvKiBDb3JyZWN0IHRoZSBzZWdtZW50X2Jhc2Vf YWRkciB2YWx1ZSAqLworCXNlZ21lbnRfYmFzZV9hZGRyID0gVFJUVF9TRUdNRU5UX1NJWkU7CisK KwkvKiBDaGVjayBmb3IgdGhlIHNhbWUvY29uZmxpY3RpbmcgdmFsdWUgZm9yIEwzIHRhYmxlIGFu ZCBUUi1UVCBzZWdtZW50IGxvY2F0aW9uICovCisJbDNfb2Zmc2V0ID0gc2VnbWVudF9iYXNlX2Fk ZHI7CisJaWd0X2Fzc2VydF9lcShzZXR1cF90cnR0KGZkLCBjdHhfaWQsIGwzX29mZnNldCwgc2Vn bWVudF9iYXNlX2FkZHIpLCAtRUlOVkFMKTsKKworCS8qIENoZWNrIGZvciBhbiBpbmNvcnJlY3Rs eSBhbGlnbmVkIGxvY2F0aW9uIGZvciBMMyB0YWJsZSAqLworCWwzX29mZnNldCA9IFRJTEVfU0la RSArIDB4MTAwMDsKKwlpZ3RfYXNzZXJ0X2VxKHNldHVwX3RydHQoZmQsIGN0eF9pZCwgbDNfb2Zm c2V0LCBzZWdtZW50X2Jhc2VfYWRkciksIC1FSU5WQUwpOworCisJLyogQ29ycmVjdCB0aGUgbDNf b2Zmc2V0IHZhbHVlICovCisJbDNfb2Zmc2V0ID0gVElMRV9TSVpFOworCisJLyogQ2hlY2sgZm9y IHRoZSBzYW1lIHZhbHVlIGZvciBOdWxsICYgSW52YWxpZCB0aWxlIHBhdHRlcm5zICovCisJaWd0 X2Fzc2VydF9lcShfX3NldHVwX3RydHQoZmQsIGN0eF9pZCwgbDNfb2Zmc2V0LCBzZWdtZW50X2Jh c2VfYWRkciwKKwkJCQkgICBOVUxMX1RJTEVfUEFUVEVSTiwgTlVMTF9USUxFX1BBVFRFUk4pLCAt RUlOVkFMKTsKKworCS8qIFVzZSB0aGUgY29ycmVjdCBzZXR0aW5ncyBub3cgKi8KKwlpZ3RfYXNz ZXJ0KHNldHVwX3RydHQoZmQsIGN0eF9pZCwgbDNfb2Zmc2V0LCBzZWdtZW50X2Jhc2VfYWRkcikg PT0gMCk7CisJLyogQ2hlY2sgdGhlIG92ZXJyaWRpbmcgb2YgVFItVFQgc2V0dGluZ3MgZm9yIHRo ZSBzYW1lIGNvbnRleHQgKi8KKwlzZWdtZW50X2Jhc2VfYWRkciArPSBUUlRUX1NFR01FTlRfU0la RTsKKwlsM19vZmZzZXQgKz0gVElMRV9TSVpFOworCWlndF9hc3NlcnRfZXEoc2V0dXBfdHJ0dChm ZCwgY3R4X2lkLCBsM19vZmZzZXQsIHNlZ21lbnRfYmFzZV9hZGRyKSwgLUVFWElTVCk7CisKKwln ZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhfaWQpOworCWNsb3NlKGZkKTsKK30KKworaWd0X21h aW4KK3sKKwlpbnQgZmQgPSAtMTsKKworCWlndF9maXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9k cml2ZXIoRFJJVkVSX0lOVEVMKTsKKworCQlpZ3RfcmVxdWlyZShoYXNfdHJ0dF9zdXBwb3J0KGZk KSk7CisJCS8qIHRlc3QgYWxzbyBuZWVkcyA0OCBQUEdUVCAmIFNvZnQgUGluIHN1cHBvcnQgKi8K KwkJaWd0X3JlcXVpcmUoZ2VtX2hhc19zb2Z0cGluKGZkKSk7CisJCWlndF9yZXF1aXJlKGdlbV91 c2VzXzY0Yl9wcGd0dChmZCkpOworCX0KKworCS8qIEVhY2ggc3VidGVzdCB3aWxsIG9wZW4gaXRz IG93biBwcml2YXRlIGZpbGUgaW5zdGFuY2UgdG8gYXZvaWQKKwkgKiBhbnkgaW50ZXJmZXJlbmNl LiBPdGhlcndpc2Ugb25jZSBUUlRUIGlzIGVuYWJsZWQgZm9yIHRoZSBkZWZhdWx0CisJICogY29u dGV4dCB3aXRoIHNlZ21lbnRfYmFzZV9hZGRyIHZhbHVlIG9mIDAsIGFsbCB0aGUgb3RoZXIgdGVz dHMgd2hpY2gKKwkgKiBhcmUgaW1wbGljaXRseSBkb25lLCBzdWNoIGFzIHF1aWVzY2VudF9ncHUs IHdpbGwgYnJlYWsgYXMgdGhleSBvbmx5CisJICogdXNlIHRoZSBkZWZhdWx0IGNvbnRleHQgYW5k IGRvIG5vdCB1c2UgdGhlIDQ4Ql9BRERSRVNTIGZsYWcgZm9yIGl0LgorCSAqLworCisJaWd0X3N1 YnRlc3QoImludmFsaWQiKQorCQl0ZXN0X2ludmFsaWQoKTsKKworCWlndF9zdWJ0ZXN0KCJiYXNp YyIpCisJCXRlc3RfYmFzaWNfdHJ0dF91c2UoKTsKKworCWlndF9zdWJ0ZXN0KCJldmljdF9hY3Rp dmUiKQorCQl0ZXN0X2V2aWN0X2FjdGl2ZSgpOworCisJaWd0X3N1YnRlc3QoImV2aWN0X2hhbmci KQorCQl0ZXN0X2V2aWN0X2hhbmcoKTsKKworCWlndF9maXh0dXJlCisJCWNsb3NlKGZkKTsKK30K KwotLSAKMS45LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=