From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83FB76E108 for ; Wed, 1 Jul 2020 19:21:00 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 1 Jul 2020 21:20:44 +0200 Message-Id: <20200701192045.13196-4-zbigniew.kempczynski@intel.com> In-Reply-To: <20200701192045.13196-1-zbigniew.kempczynski@intel.com> References: <20200701192045.13196-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v13 3/4] tests/api_intel_bb: Add intel_bb API test 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: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: SUdUIGNvZGUgY29udGFpbnMgc29tZSBtZWNoYW5pc21zIHdoaWNoIGFyZSBxdWl0ZSBsYXJnZSBh bmQgY292ZXIKZGlmZmVyZW50IGdlbnMgc28gdGhleSBkZXNlcnZlIG93biBhcGlfKiBjaGVja3Mu CgpTdGFydGluZyB3aXRoIGFwaV9pbnRlbF9iYiB2ZXJpZnkgaW50ZWxfYmIgZnVuY3Rpb25zIHdv cmsgYXMgZXhwZWN0ZWQuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5xYRza2kgPHpi aWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPgotLS0KIHRlc3RzL2k5MTUvYXBpX2ludGVsX2JiLmMgfCA2NjkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAg ICAgICAgfCAgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCA2NzAgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTUvYXBpX2ludGVsX2JiLmMKCmRpZmYgLS1naXQgYS90ZXN0 cy9pOTE1L2FwaV9pbnRlbF9iYi5jIGIvdGVzdHMvaTkxNS9hcGlfaW50ZWxfYmIuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMDJhNDZiZDIKLS0tIC9kZXYvbnVsbAorKysg Yi90ZXN0cy9pOTE1L2FwaV9pbnRlbF9iYi5jCkBAIC0wLDAgKzEsNjY5IEBACisvKgorICogQ29w eXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUg PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5o PgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5o IgorCisjZGVmaW5lIFBBR0VfU0laRSA0MDk2CisKKyNkZWZpbmUgV0lEVEggNjQKKyNkZWZpbmUg SEVJR0hUIDY0CisjZGVmaW5lIENPTE9SXzAwCTB4MDAKKyNkZWZpbmUgQ09MT1JfMzMJMHgzMwor I2RlZmluZSBDT0xPUl83NwkweDc3CisjZGVmaW5lIENPTE9SX0NDCTB4Y2MKKworSUdUX1RFU1Rf REVTQ1JJUFRJT04oImludGVsX2JiIEFQSSBjaGVjay4iKTsKKworZW51bSByZWxvY19vYmplY3Rz IHsKKwlSRUxPQywKKwlOT1JFTE9DLAorfTsKKworZW51bSBvYmpfY2FjaGVfb3BzIHsKKwlQVVJH RV9DQUNIRSwKKwlLRUVQX0NBQ0hFLAorfTsKKworc3RhdGljIGJvb2wgZGVidWdfYmIgPSBmYWxz ZTsKK3N0YXRpYyBib29sIHdyaXRlX3BuZyA9IGZhbHNlOworc3RhdGljIGJvb2wgYnVmX2luZm8g PSBmYWxzZTsKKworc3RhdGljIHZvaWQgKmFsbG9jX2FsaWduZWQodWludDY0X3Qgc2l6ZSkKK3sK Kwl2b2lkICpwOworCisJaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigmcCwgMTYsIHNpemUp LCAwKTsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBmaWxsX2J1ZihzdHJ1Y3QgaW50 ZWxfYnVmICpidWYsIHVpbnQ4X3QgY29sb3IpCit7CisJdWludDhfdCAqcHRyOworCWludCBpOTE1 ID0gYnVmX29wc19nZXRfZmQoYnVmLT5ib3BzKTsKKwlpbnQgaTsKKworCXB0ciA9IGdlbV9tbWFw X19kZXZpY2VfY29oZXJlbnQoaTkxNSwgYnVmLT5oYW5kbGUsIDAsIGJ1Zi0+c2l6ZSwKKwkJCQkJ UFJPVF9XUklURSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5zaXplOyBpKyspCisJCXB0cltp XSA9IGNvbG9yOworCisJbXVubWFwKHB0ciwgYnVmLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQg Y2hlY2tfYnVmKHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwgdWludDhfdCBjb2xvcikKK3sKKwl1aW50 OF90ICpwdHI7CisJaW50IGk5MTUgPSBidWZfb3BzX2dldF9mZChidWYtPmJvcHMpOworCWludCBp OworCisJcHRyID0gZ2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBidWYtPmhhbmRsZSwg MCwgYnVmLT5zaXplLAorCQkJCQlQUk9UX1JFQUQpOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zi0+ c2l6ZTsgaSsrKQorCQlpZ3RfYXNzZXJ0KHB0cltpXSA9PSBjb2xvcik7CisKKwltdW5tYXAocHRy LCBidWYtPnNpemUpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfYnVmICoKK2NyZWF0ZV9i dWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDhfdCBj b2xvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisKKwlidWYgPSBjYWxsb2MoMSwgc2l6 ZW9mKCpidWYpKTsKKwlpZ3RfYXNzZXJ0KGJ1Zik7CisKKwlpbnRlbF9idWZfaW5pdChib3BzLCBi dWYsIHdpZHRoLzQsIGhlaWdodCwgMzIsIDAsIEk5MTVfVElMSU5HX05PTkUsIDApOworCWZpbGxf YnVmKGJ1ZiwgY29sb3IpOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgcHJpbnRf YnVmKHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1aW50OF90 ICpwdHI7CisJaW50IGk5MTUgPSBidWZfb3BzX2dldF9mZChidWYtPmJvcHMpOworCisJcHRyID0g Z2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBidWYtPmhhbmRsZSwgMCwgYnVmLT5zaXpl LAorCQkJCQlQUk9UX1JFQUQpOworCWlndF9kZWJ1ZygiWyVzXSBCdWYgaGFuZGxlOiAlZCwgc2l6 ZTogJWQsIHY6IDB4JTAyeFxuIiwgbmFtZSwKKwkJICBidWYtPmhhbmRsZSwgYnVmLT5zaXplLCBw dHJbMF0pOworCW11bm1hcChwdHIsIGJ1Zi0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbXBs ZV9iYihzdHJ1Y3QgYnVmX29wcyAqYm9wcywgYm9vbCB1c2VfY29udGV4dCkKK3sKKwlpbnQgaTkx NSA9IGJ1Zl9vcHNfZ2V0X2ZkKGJvcHMpOworCXN0cnVjdCBpbnRlbF9iYiAqaWJiOworCXVpbnQz Ml90IGN0eDsKKworCWlmICh1c2VfY29udGV4dCkgeworCQlnZW1fcmVxdWlyZV9jb250ZXh0cyhp OTE1KTsKKwkJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOworCX0KKworCWliYiA9IGlu dGVsX2JiX2NyZWF0ZShpOTE1LCBQQUdFX1NJWkUpOworCWlmIChkZWJ1Z19iYikKKwkJaW50ZWxf YmJfc2V0X2RlYnVnKGliYiwgdHJ1ZSk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBNSV9CQVRDSF9C VUZGRVJfRU5EKTsKKwlpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA4KTsKKworCWludGVsX2JiX2V4 ZWMoaWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwKKwkJICAgICAgSTkxNV9FWEVDX0RFRkFVTFQg fCBJOTE1X0VYRUNfTk9fUkVMT0MsIHRydWUpOworCisJLyogQ2hlY2sgd2UncmUgc2FmZSB3aXRo IHJlc2V0IGFuZCBubyBkb3VibGUtZnJlZSB3aWxsIG9jY3VyICovCisJaW50ZWxfYmJfcmVzZXQo aWJiLCB0cnVlKTsKKwlpbnRlbF9iYl9yZXNldChpYmIsIGZhbHNlKTsKKwlpbnRlbF9iYl9yZXNl dChpYmIsIHRydWUpOworCisJaW50ZWxfYmJfb3V0KGliYiwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7 CisJaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgOCk7CisKKwlpZiAodXNlX2NvbnRleHQpCisJCWlu dGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJfb2Zmc2V0KGliYiksIGN0eCwK KwkJCQkJICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJCSAg IHRydWUpOworCisJaW50ZWxfYmJfZGVzdHJveShpYmIpOworCWlmICh1c2VfY29udGV4dCkKKwkJ Z2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOworfQorCitzdGF0aWMgdm9pZCBfX2VtaXRf YmxpdChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCXN0cnVjdCBpbnRlbF9idWYgKnNyYywgc3Ry dWN0IGludGVsX2J1ZiAqZHN0KQoreworCWJvb2wgaGFzXzY0Yl9yZWxvYzsKKworCWhhc182NGJf cmVsb2MgPSBpYmItPmdlbiA+PSA4OworCisJaW50ZWxfYmJfb3V0KGliYiwKKwkJICAgICBYWV9T UkNfQ09QWV9CTFRfQ01EIHwKKwkJICAgICBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEgfAor CQkgICAgIFhZX1NSQ19DT1BZX0JMVF9XUklURV9SR0IgfAorCQkgICAgICg2ICsgMiAqIGhhc182 NGJfcmVsb2MpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAzIDw8IDI0IHwgMHhjYyA8PCAxNiB8IGRz dC0+c3RyaWRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBp bnRlbF9idWZfaGVpZ2h0KGRzdCkgPDwgMTYgfCBpbnRlbF9idWZfd2lkdGgoZHN0KSk7CisJaW50 ZWxfYmJfZW1pdF9yZWxvY19mZW5jZWQoaWJiLCBkc3QtPmhhbmRsZSwKKwkJCQkgICBJOTE1X0dF TV9ET01BSU5fUkVOREVSLAorCQkJCSAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsCisJCQkJICAg MCwgMHgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBzcmMt PnN0cmlkZSk7CisJaW50ZWxfYmJfZW1pdF9yZWxvY19mZW5jZWQoaWJiLCBzcmMtPmhhbmRsZSwK KwkJCQkgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwLAorCQkJCSAgIDAsIDB4MCk7Cit9CisK K3N0YXRpYyB2b2lkIGJsaXQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsCisJCSBlbnVtIHJlbG9jX29i amVjdHMgcmVsb2Nfb2JqLAorCQkgZW51bSBvYmpfY2FjaGVfb3BzIGNhY2hlX29wKQoreworCWlu dCBpOTE1ID0gYnVmX29wc19nZXRfZmQoYm9wcyk7CisJc3RydWN0IGludGVsX2JiICppYmI7CisJ c3RydWN0IGludGVsX2J1ZiAqc3JjLCAqZHN0OworCXVpbnQ2NF90IHBvZmZfYmIsIHBvZmZfc3Jj LCBwb2ZmX2RzdDsKKwl1aW50NjRfdCBwb2ZmMl9iYiwgcG9mZjJfc3JjLCBwb2ZmMl9kc3Q7CisJ dWludDY0X3QgZmxhZ3MgPSAwOworCWJvb2wgcHVyZ2VfY2FjaGUgPSBjYWNoZV9vcCA9PSBQVVJH RV9DQUNIRSA/IHRydWUgOiBmYWxzZTsKKwlib29sIGRvX3JlbG9jcyA9IHJlbG9jX29iaiA9PSBS RUxPQyA/IHRydWUgOiBmYWxzZTsKKworCXNyYyA9IGNyZWF0ZV9idWYoYm9wcywgV0lEVEgsIEhF SUdIVCwgQ09MT1JfQ0MpOworCWRzdCA9IGNyZWF0ZV9idWYoYm9wcywgV0lEVEgsIEhFSUdIVCwg Q09MT1JfMDApOworCisJaWYgKGJ1Zl9pbmZvKSB7CisJCXByaW50X2J1ZihzcmMsICJzcmMiKTsK KwkJcHJpbnRfYnVmKGRzdCwgImRzdCIpOworCX0KKworCWlmIChkb19yZWxvY3MpIHsKKwkJaWJi ID0gaW50ZWxfYmJfY3JlYXRlX3dpdGhfcmVsb2NzKGk5MTUsIFBBR0VfU0laRSk7CisJfSBlbHNl IHsKKwkJaWJiID0gaW50ZWxfYmJfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJCWZsYWdzIHw9 IEk5MTVfRVhFQ19OT19SRUxPQzsKKwl9CisKKwlpZiAoaWJiLT5nZW4gPj0gNikKKwkJZmxhZ3Mg fD0gSTkxNV9FWEVDX0JMVDsKKworCWlmIChkZWJ1Z19iYikKKwkJaW50ZWxfYmJfc2V0X2RlYnVn KGliYiwgdHJ1ZSk7CisKKwlfX2VtaXRfYmxpdChpYmIsIHNyYywgZHN0KTsKKworCS8qIFdlIGV4 cGVjdCBpbml0aWFsIGFkZHJlc3NlcyBhcmUgemVyb2VkIGZvciByZWxvY3MgKi8KKwlpZiAocmVs b2Nfb2JqID09IFJFTE9DKSB7CisJCWlndF9hc3NlcnQoaW50ZWxfYmJfZ2V0X29iamVjdF9vZmZz ZXQoaWJiLCBpYmItPmhhbmRsZSkgPT0gMCk7CisJCWlndF9hc3NlcnQoaW50ZWxfYmJfZ2V0X29i amVjdF9vZmZzZXQoaWJiLCBzcmMtPmhhbmRsZSkgPT0gMCk7CisJCWlndF9hc3NlcnQoaW50ZWxf YmJfZ2V0X29iamVjdF9vZmZzZXQoaWJiLCBkc3QtPmhhbmRsZSkgPT0gMCk7CisJfQorCisJaW50 ZWxfYmJfZW1pdF9iYmUoaWJiKTsKKwlpZ3RfZGVidWcoImV4ZWMgZmxhZ3M6ICUiIFBSSVg2NCAi XG4iLCBmbGFncyk7CisJaW50ZWxfYmJfZXhlYyhpYmIsIGludGVsX2JiX29mZnNldChpYmIpLCBm bGFncywgdHJ1ZSk7CisJY2hlY2tfYnVmKGRzdCwgQ09MT1JfQ0MpOworCisJcG9mZl9iYiA9IGlu dGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgaWJiLT5oYW5kbGUpOworCXBvZmZfc3JjID0g aW50ZWxfYmJfZ2V0X29iamVjdF9vZmZzZXQoaWJiLCBzcmMtPmhhbmRsZSk7CisJcG9mZl9kc3Qg PSBpbnRlbF9iYl9nZXRfb2JqZWN0X29mZnNldChpYmIsIGRzdC0+aGFuZGxlKTsKKwlpbnRlbF9i Yl9yZXNldChpYmIsIHB1cmdlX2NhY2hlKTsKKworCWZpbGxfYnVmKHNyYywgQ09MT1JfNzcpOwor CWZpbGxfYnVmKGRzdCwgQ09MT1JfMDApOworCisJX19lbWl0X2JsaXQoaWJiLCBzcmMsIGRzdCk7 CisKKwlwb2ZmMl9iYiA9IGludGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgaWJiLT5oYW5k bGUpOworCXBvZmYyX3NyYyA9IGludGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgc3JjLT5o YW5kbGUpOworCXBvZmYyX2RzdCA9IGludGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgZHN0 LT5oYW5kbGUpOworCisJaWd0X2RlYnVnKCJwdXJnZTogJWQsIHJlbG9jczogJWRcbiIsIHB1cmdl X2NhY2hlLCBkb19yZWxvY3MpOworCWlndF9kZWJ1ZygiYmIgIHByZXN1bWVkIG9mZnNldDogMHgl bHhcbiIsIHBvZmZfYmIpOworCWlndF9kZWJ1Zygic3JjIHByZXN1bWVkIG9mZnNldDogMHglbHhc biIsIHBvZmZfc3JjKTsKKwlpZ3RfZGVidWcoImRzdCBwcmVzdW1lZCBvZmZzZXQ6IDB4JWx4XG4i LCBwb2ZmX2RzdCk7CisJaWd0X2RlYnVnKCJiYjIgIHByZXN1bWVkIG9mZnNldDogMHglbHhcbiIs IHBvZmYyX2JiKTsKKwlpZ3RfZGVidWcoInNyYzIgcHJlc3VtZWQgb2Zmc2V0OiAweCVseFxuIiwg cG9mZjJfc3JjKTsKKwlpZ3RfZGVidWcoImRzdDIgcHJlc3VtZWQgb2Zmc2V0OiAweCVseFxuIiwg cG9mZjJfZHN0KTsKKwlpZiAocHVyZ2VfY2FjaGUpIHsKKwkJaWYgKGRvX3JlbG9jcykgeworCQkJ aWd0X2Fzc2VydChwb2ZmMl9iYiA9PSAwKTsKKwkJCWlndF9hc3NlcnQocG9mZjJfc3JjID09IDAp OworCQkJaWd0X2Fzc2VydChwb2ZmMl9kc3QgPT0gMCk7CisJCX0gZWxzZSB7CisJCQlpZ3RfYXNz ZXJ0KHBvZmZfYmIgIT0gcG9mZjJfYmIpOworCQkJaWd0X2Fzc2VydChwb2ZmX3NyYyAhPSBwb2Zm Ml9zcmMpOworCQkJaWd0X2Fzc2VydChwb2ZmX2RzdCAhPSBwb2ZmMl9kc3QpOworCQl9CisJfSBl bHNlIHsKKwkJaWYgKGRvX3JlbG9jcykgeworCQkJdWludDY0X3QgYWRkcnMxID0gcG9mZl9iYiB8 IHBvZmZfc3JjIHwgcG9mZl9kc3Q7CisJCQl1aW50NjRfdCBhZGRyczIgPSBwb2ZmMl9iYiB8IHBv ZmYyX3NyYyB8IHBvZmYyX2RzdDsKKwkJCWlndF9hc3NlcnQoYWRkcnMxICE9IGFkZHJzMik7CisJ CX0gZWxzZSB7CisJCQlpZ3RfYXNzZXJ0KHBvZmZfYmIgPT0gcG9mZjJfYmIpOworCQkJaWd0X2Fz c2VydChwb2ZmX3NyYyA9PSBwb2ZmMl9zcmMpOworCQkJaWd0X2Fzc2VydChwb2ZmX2RzdCA9PSBw b2ZmMl9kc3QpOworCQl9CisJfQorCisJaW50ZWxfYmJfZW1pdF9iYmUoaWJiKTsKKwlpbnRlbF9i Yl9leGVjKGliYiwgaW50ZWxfYmJfb2Zmc2V0KGliYiksIGZsYWdzLCB0cnVlKTsKKwljaGVja19i dWYoZHN0LCBDT0xPUl83Nyk7CisKKwlwb2ZmMl9zcmMgPSBpbnRlbF9iYl9nZXRfb2JqZWN0X29m ZnNldChpYmIsIHNyYy0+aGFuZGxlKTsKKwlwb2ZmMl9kc3QgPSBpbnRlbF9iYl9nZXRfb2JqZWN0 X29mZnNldChpYmIsIGRzdC0+aGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KHBvZmZfc3JjID09IHBvZmYy X3NyYyk7CisJaWd0X2Fzc2VydChwb2ZmX2RzdCA9PSBwb2ZmMl9kc3QpOworCisJaW50ZWxfYnVm X2Nsb3NlKGJvcHMsIHNyYyk7CisJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsIGRzdCk7CisJaW50ZWxf YmJfZGVzdHJveShpYmIpOworfQorCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0KHN0cnVj dCBidWZfb3BzICpib3BzLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAg IGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCSAgICAgdWludDMyX3QgcmVxX3RpbGluZywKKwkJ CSAgICAgZW51bSBpOTE1X2NvbXByZXNzaW9uIGNvbXByZXNzaW9uKQoreworCWludCBicHAgPSAz MjsKKworCWludGVsX2J1Zl9pbml0KGJvcHMsIGJ1Ziwgd2lkdGgsIGhlaWdodCwgYnBwLCAwLAor CQkgICAgICAgcmVxX3RpbGluZywgY29tcHJlc3Npb24pOworCisJaWd0X2Fzc2VydChpbnRlbF9i dWZfd2lkdGgoYnVmKSA9PSB3aWR0aCk7CisJaWd0X2Fzc2VydChpbnRlbF9idWZfaGVpZ2h0KGJ1 ZikgPT0gaGVpZ2h0KTsKK30KKworc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfZHJhd19wYXR0ZXJu KHN0cnVjdCBidWZfb3BzICpib3BzLAorCQkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqYnVmLAor CQkJCSAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsCisJCQkJICAgICBpbnQgY3gsIGlu dCBjeSwgaW50IGN3LCBpbnQgY2gsCisJCQkJICAgICBib29sIHVzZV9hbHRlcm5hdGVfY29sb3Jz KQoreworCWNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZTsKKwljYWlyb19wYXR0ZXJuX3QgKnBhdDsK KwljYWlyb190ICpjcjsKKwl2b2lkICpsaW5lYXI7CisKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVk KGJ1Zi0+c2l6ZSk7CisKKwlzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y X2RhdGEobGluZWFyLAorCQkJCQkJICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorCQkJCQkJICAg ICAgaW50ZWxfYnVmX3dpZHRoKGJ1ZiksCisJCQkJCQkgICAgICBpbnRlbF9idWZfaGVpZ2h0KGJ1 ZiksCisJCQkJCQkgICAgICBidWYtPnN0cmlkZSk7CisKKwljciA9IGNhaXJvX2NyZWF0ZShzdXJm YWNlKTsKKworCWNhaXJvX3JlY3RhbmdsZShjciwgY3gsIGN5LCBjdywgY2gpOworCWNhaXJvX2Ns aXAoY3IpOworCisJcGF0ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbWVzaCgpOworCWNhaXJvX21l c2hfcGF0dGVybl9iZWdpbl9wYXRjaChwYXQpOworCWNhaXJvX21lc2hfcGF0dGVybl9tb3ZlX3Rv KHBhdCwgeCwgICB5KTsKKwljYWlyb19tZXNoX3BhdHRlcm5fbGluZV90byhwYXQsIHgrdywgeSk7 CisJY2Fpcm9fbWVzaF9wYXR0ZXJuX2xpbmVfdG8ocGF0LCB4K3csIHkraCk7CisJY2Fpcm9fbWVz aF9wYXR0ZXJuX2xpbmVfdG8ocGF0LCB4LCAgIHkraCk7CisJaWYgKHVzZV9hbHRlcm5hdGVfY29s b3JzKSB7CisJCWNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYihwYXQsIDAs IDAuMCwgMS4wLCAxLjApOworCQljYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9y Z2IocGF0LCAxLCAxLjAsIDAuMCwgMS4wKTsKKwkJY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3Ju ZXJfY29sb3JfcmdiKHBhdCwgMiwgMS4wLCAxLjAsIDAuMCk7CisJCWNhaXJvX21lc2hfcGF0dGVy bl9zZXRfY29ybmVyX2NvbG9yX3JnYihwYXQsIDMsIDAuMCwgMC4wLCAwLjApOworCX0gZWxzZSB7 CisJCWNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYihwYXQsIDAsIDEuMCwg MC4wLCAwLjApOworCQljYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2IocGF0 LCAxLCAwLjAsIDEuMCwgMC4wKTsKKwkJY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29s b3JfcmdiKHBhdCwgMiwgMC4wLCAwLjAsIDEuMCk7CisJCWNhaXJvX21lc2hfcGF0dGVybl9zZXRf Y29ybmVyX2NvbG9yX3JnYihwYXQsIDMsIDEuMCwgMS4wLCAxLjApOworCX0KKwljYWlyb19tZXNo X3BhdHRlcm5fZW5kX3BhdGNoKHBhdCk7CisKKwljYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHcs IGgpOworCWNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdCk7CisJY2Fpcm9fZmlsbChjcik7CisJY2Fp cm9fcGF0dGVybl9kZXN0cm95KHBhdCk7CisKKwljYWlyb19kZXN0cm95KGNyKTsKKworCWNhaXJv X3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKworCWxpbmVhcl90b19pbnRlbF9idWYoYm9wcywg YnVmLCBsaW5lYXIpOworCisJZnJlZShsaW5lYXIpOworfQorCisjZGVmaW5lIEdST1VQX1NJWkUg NDA5Ngorc3RhdGljIGludCBjb21wYXJlX2RldGFpbChjb25zdCB1aW50MzJfdCAqcHRyMSwgdWlu dDMyX3QgKnB0cjIsCisJCQkgIHVpbnQzMl90IHNpemUpCit7CisJaW50IGksIG9rID0gMCwgZmFp bCA9IDA7CisJaW50IGdyb3VwcyA9IHNpemUgLyBHUk9VUF9TSVpFOworCWludCAqaGlzdCA9IGNh bGxvYyhHUk9VUF9TSVpFLCBncm91cHMpOworCisJaWd0X2RlYnVnKCJzaXplOiAlZCwgZ3JvdXBf c2l6ZTogJWQsIGdyb3VwczogJWRcbiIsCisJCSAgc2l6ZSwgR1JPVVBfU0laRSwgZ3JvdXBzKTsK KworCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gc2l6ZW9mKHVpbnQzMl90KTsgaSsrKSB7CisJCWlm IChwdHIxW2ldID09IHB0cjJbaV0pIHsKKwkJCW9rKys7CisJCX0gZWxzZSB7CisJCQlmYWlsKys7 CisJCQloaXN0W2kgKiBzaXplb2YodWludDMyX3QpIC8gR1JPVVBfU0laRV0rKzsKKwkJfQorCX0K KworCWZvciAoaSA9IDA7IGkgPCBncm91cHM7IGkrKykgeworCQlpZiAoaGlzdFtpXSkgeworCQkJ aWd0X2RlYnVnKCJbZ3JvdXAgJTR4XTogJWRcbiIsIGksIGhpc3RbaV0pOworCQl9CisJfQorCWZy ZWUoaGlzdCk7CisKKwlpZ3RfZGVidWcoIm9rOiAlZCwgZmFpbDogJWRcbiIsIG9rLCBmYWlsKTsK KworCXJldHVybiBmYWlsOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfYnVmcyhzdHJ1Y3QgaW50 ZWxfYnVmICpidWYxLCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYyLAorCQkJIGJvb2wgZGV0YWlsX2Nv bXBhcmUpCit7CisJdm9pZCAqcHRyMSwgKnB0cjI7CisJaW50IGZkMSwgZmQyLCByZXQ7CisKKwlp Z3RfYXNzZXJ0KGJ1ZjEtPnNpemUgPT0gYnVmMi0+c2l6ZSk7CisKKwlmZDEgPSBidWZfb3BzX2dl dF9mZChidWYxLT5ib3BzKTsKKwlmZDIgPSBidWZfb3BzX2dldF9mZChidWYyLT5ib3BzKTsKKwor CXB0cjEgPSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGZkMSwgYnVmMS0+aGFuZGxlLCAwLCBi dWYxLT5zaXplLAorCQkJCQkgUFJPVF9SRUFEKTsKKwlwdHIyID0gZ2VtX21tYXBfX2RldmljZV9j b2hlcmVudChmZDIsIGJ1ZjItPmhhbmRsZSwgMCwgYnVmMi0+c2l6ZSwKKwkJCQkJIFBST1RfUkVB RCk7CisJcmV0ID0gbWVtY21wKHB0cjEsIHB0cjIsIGJ1ZjEtPnNpemUpOworCWlmIChkZXRhaWxf Y29tcGFyZSkKKwkJcmV0ID0gY29tcGFyZV9kZXRhaWwocHRyMSwgcHRyMiwgYnVmMS0+c2l6ZSk7 CisKKwltdW5tYXAocHRyMSwgYnVmMS0+c2l6ZSk7CisJbXVubWFwKHB0cjIsIGJ1ZjItPnNpemUp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RvX2ludGVsX2JiX2JsaXQoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZykKK3sKKwlzdHJ1Y3QgaW50ZWxfYmIg KmliYjsKKwljb25zdCBpbnQgd2lkdGggPSAxMDI0OworCWNvbnN0IGludCBoZWlnaHQgPSAxMDI0 OworCXN0cnVjdCBpbnRlbF9idWYgc3JjLCBkc3QsIGZpbmFsOworCWNoYXIgbmFtZVsxMjhdOwor CWludCBpOTE1ID0gYnVmX29wc19nZXRfZmQoYm9wcyksIGZhaWxzOworCisJaWJiID0gaW50ZWxf YmJfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJaWYgKGRlYnVnX2JiKQorCQlpbnRlbF9iYl9z ZXRfZGVidWcoaWJiLCB0cnVlKTsKKworCXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJnNyYywgd2lk dGgsIGhlaWdodCwgSTkxNV9USUxJTkdfTk9ORSwKKwkJCSBJOTE1X0NPTVBSRVNTSU9OX05PTkUp OworCXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJmRzdCwgd2lkdGgsIGhlaWdodCwgdGlsaW5nLAor CQkJIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CisJc2NyYXRjaF9idWZfaW5pdChib3BzLCAmZmlu YWwsIHdpZHRoLCBoZWlnaHQsIEk5MTVfVElMSU5HX05PTkUsCisJCQkgSTkxNV9DT01QUkVTU0lP Tl9OT05FKTsKKworCWlmIChidWZfaW5mbykgeworCQlpbnRlbF9idWZfcHJpbnQoJnNyYyk7CisJ CWludGVsX2J1Zl9wcmludCgmZHN0KTsKKwl9CisKKwlzY3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4o Ym9wcywgJnNyYywKKwkJCQkgMCwgMCwgd2lkdGgsIGhlaWdodCwKKwkJCQkgMCwgMCwgd2lkdGgs IGhlaWdodCwgMCk7CisKKwlpbnRlbF9iYl9ibHRfY29weShpYmIsCisJCQkgICZzcmMsIDAsIDAs IHNyYy5zdHJpZGUsCisJCQkgICZkc3QsIDAsIDAsIGRzdC5zdHJpZGUsCisJCQkgIGludGVsX2J1 Zl93aWR0aCgmZHN0KSwKKwkJCSAgaW50ZWxfYnVmX2hlaWdodCgmZHN0KSwKKwkJCSAgZHN0LmJw cCk7CisKKwlpbnRlbF9iYl9ibHRfY29weShpYmIsCisJCQkgICZkc3QsIDAsIDAsIGRzdC5zdHJp ZGUsCisJCQkgICZmaW5hbCwgMCwgMCwgZmluYWwuc3RyaWRlLAorCQkJICBpbnRlbF9idWZfd2lk dGgoJmRzdCksCisJCQkgIGludGVsX2J1Zl9oZWlnaHQoJmRzdCksCisJCQkgIGRzdC5icHApOwor CisJaWd0X2Fzc2VydChpbnRlbF9iYl9zeW5jKGliYikgPT0gMCk7CisJaW50ZWxfYmJfZGVzdHJv eShpYmIpOworCisJaWYgKHdyaXRlX3BuZykgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFt ZSkgLSAxLAorCQkJICJiYl9ibGl0X2RzdF90aWxpbmdfJWQucG5nIiwgdGlsaW5nKTsKKwkJaW50 ZWxfYnVmX3dyaXRlX3RvX3BuZygmc3JjLCAiYmJfYmxpdF9zcmNfdGlsaW5nX25vbmUucG5nIik7 CisJCWludGVsX2J1Zl93cml0ZV90b19wbmcoJmRzdCwgbmFtZSk7CisJCWludGVsX2J1Zl93cml0 ZV90b19wbmcoJmZpbmFsLCAiYmJfYmxpdF9maW5hbF90aWxpbmdfbm9uZS5wbmciKTsKKwl9CisK KwlpZiAodGlsaW5nID09IEk5MTVfVElMSU5HX05PTkUpCisJCWlndF9hc3NlcnQoY29tcGFyZV9i dWZzKCZzcmMsICZkc3QsIGZhbHNlKSA9PSAwKTsKKwllbHNlCisJCWlndF9hc3NlcnQoY29tcGFy ZV9idWZzKCZzcmMsICZkc3QsIGZhbHNlKSAhPSAwKTsKKwlmYWlscyA9IGNvbXBhcmVfYnVmcygm c3JjLCAmZmluYWwsIHRydWUpOworCisJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZzcmMpOworCWlu dGVsX2J1Zl9jbG9zZShib3BzLCAmZHN0KTsKKwlpbnRlbF9idWZfY2xvc2UoYm9wcywgJmZpbmFs KTsKKworCXJldHVybiBmYWlsczsKK30KKworc3RhdGljIHZvaWQgZG9faW50ZWxfYmJfYmxpdChz dHJ1Y3QgYnVmX29wcyAqYm9wcywgaW50IGxvb3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJaW50 IGksIGZhaWxzID0gMCwgaTkxNSA9IGJ1Zl9vcHNfZ2V0X2ZkKGJvcHMpOworCisJZ2VtX3JlcXVp cmVfYmxpdHRlcihpOTE1KTsKKworCWZvciAoaSA9IDA7IGkgPCBsb29wczsgaSsrKSB7CisJCWZh aWxzICs9IF9fZG9faW50ZWxfYmJfYmxpdChib3BzLCB0aWxpbmcpOworCX0KKwlpZ3RfYXNzZXJ0 X2YoZmFpbHMgPT0gMCwgImludGVsLWJiLWJsaXQgKHRpbGluZzogJWQpIGZhaWxzOiAlZFxuIiwK KwkJICAgICB0aWxpbmcsIGZhaWxzKTsKK30KKworc3RhdGljIHZvaWQgb2Zmc2V0X2NvbnRyb2wo c3RydWN0IGJ1Zl9vcHMgKmJvcHMpCit7CisJaW50IGk5MTUgPSBidWZfb3BzX2dldF9mZChib3Bz KTsKKwlzdHJ1Y3QgaW50ZWxfYmIgKmliYjsKKwlzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsICpkc3Qx LCAqZHN0MiwgKmRzdDM7CisJdWludDY0X3QgcG9mZl9zcmMsIHBvZmZfZHN0MSwgcG9mZl9kc3Qy OworCisJaWJiID0gaW50ZWxfYmJfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJaWYgKGRlYnVn X2JiKQorCQlpbnRlbF9iYl9zZXRfZGVidWcoaWJiLCB0cnVlKTsKKworCXNyYyA9IGNyZWF0ZV9i dWYoYm9wcywgV0lEVEgsIEhFSUdIVCwgQ09MT1JfQ0MpOworCWRzdDEgPSBjcmVhdGVfYnVmKGJv cHMsIFdJRFRILCBIRUlHSFQsIENPTE9SXzAwKTsKKwlkc3QyID0gY3JlYXRlX2J1Zihib3BzLCBX SURUSCwgSEVJR0hULCBDT0xPUl83Nyk7CisKKwlpbnRlbF9iYl9hZGRfb2JqZWN0KGliYiwgc3Jj LT5oYW5kbGUsIHNyYy0+YWRkci5vZmZzZXQsIGZhbHNlKTsKKwlpbnRlbF9iYl9hZGRfb2JqZWN0 KGliYiwgZHN0MS0+aGFuZGxlLCBkc3QxLT5hZGRyLm9mZnNldCwgdHJ1ZSk7CisJaW50ZWxfYmJf YWRkX29iamVjdChpYmIsIGRzdDItPmhhbmRsZSwgZHN0Mi0+YWRkci5vZmZzZXQsIHRydWUpOwor CisJaW50ZWxfYmJfb3V0KGliYiwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJaW50ZWxfYmJfcHRy X2FsaWduKGliYiwgOCk7CisKKwlpbnRlbF9iYl9leGVjKGliYiwgaW50ZWxfYmJfb2Zmc2V0KGli YiksCisJCSAgICAgIEk5MTVfRVhFQ19ERUZBVUxUIHwgSTkxNV9FWEVDX05PX1JFTE9DLCBmYWxz ZSk7CisKKwlpZiAoYnVmX2luZm8pIHsKKwkJcHJpbnRfYnVmKHNyYywgInNyYyAiKTsKKwkJcHJp bnRfYnVmKGRzdDEsICJkc3QxIik7CisJCXByaW50X2J1Zihkc3QyLCAiZHN0MiIpOworCX0KKwor CWlndF9hc3NlcnQoaW50ZWxfYmJfb2JqZWN0X29mZnNldF90b19idWYoaWJiLCBzcmMpID09IHRy dWUpOworCWlndF9hc3NlcnQoaW50ZWxfYmJfb2JqZWN0X29mZnNldF90b19idWYoaWJiLCBkc3Qx KSA9PSB0cnVlKTsKKwlpZ3RfYXNzZXJ0KGludGVsX2JiX29iamVjdF9vZmZzZXRfdG9fYnVmKGli YiwgZHN0MikgPT0gdHJ1ZSk7CisJcG9mZl9zcmMgPSBzcmMtPmFkZHIub2Zmc2V0OworCXBvZmZf ZHN0MSA9IGRzdDEtPmFkZHIub2Zmc2V0OworCXBvZmZfZHN0MiA9IGRzdDItPmFkZHIub2Zmc2V0 OworCWludGVsX2JiX3Jlc2V0KGliYiwgdHJ1ZSk7CisKKwlkc3QzID0gY3JlYXRlX2J1Zihib3Bz LCBXSURUSCwgSEVJR0hULCBDT0xPUl8zMyk7CisJaW50ZWxfYmJfYWRkX29iamVjdChpYmIsIGRz dDMtPmhhbmRsZSwgZHN0My0+YWRkci5vZmZzZXQsIHRydWUpOworCWludGVsX2JiX2FkZF9vYmpl Y3QoaWJiLCBzcmMtPmhhbmRsZSwgc3JjLT5hZGRyLm9mZnNldCwgZmFsc2UpOworCWludGVsX2Ji X2FkZF9vYmplY3QoaWJiLCBkc3QxLT5oYW5kbGUsIGRzdDEtPmFkZHIub2Zmc2V0LCB0cnVlKTsK KwlpbnRlbF9iYl9hZGRfb2JqZWN0KGliYiwgZHN0Mi0+aGFuZGxlLCBkc3QyLT5hZGRyLm9mZnNl dCwgdHJ1ZSk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA4KTsKKworCWludGVsX2JiX2V4ZWMoaWJiLCBpbnRlbF9i Yl9vZmZzZXQoaWJiKSwKKwkJICAgICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9f UkVMT0MsIGZhbHNlKTsKKwlpbnRlbF9iYl9zeW5jKGliYik7CisKKwlpZ3RfYXNzZXJ0KGludGVs X2JiX29iamVjdF9vZmZzZXRfdG9fYnVmKGliYiwgc3JjKSA9PSB0cnVlKTsKKwlpZ3RfYXNzZXJ0 KGludGVsX2JiX29iamVjdF9vZmZzZXRfdG9fYnVmKGliYiwgZHN0MSkgPT0gdHJ1ZSk7CisJaWd0 X2Fzc2VydChpbnRlbF9iYl9vYmplY3Rfb2Zmc2V0X3RvX2J1ZihpYmIsIGRzdDIpID09IHRydWUp OworCWlndF9hc3NlcnQoaW50ZWxfYmJfb2JqZWN0X29mZnNldF90b19idWYoaWJiLCBkc3QzKSA9 PSB0cnVlKTsKKwlpZ3RfYXNzZXJ0KHBvZmZfc3JjID09IHNyYy0+YWRkci5vZmZzZXQpOworCWln dF9hc3NlcnQocG9mZl9kc3QxID09IGRzdDEtPmFkZHIub2Zmc2V0KTsKKwlpZ3RfYXNzZXJ0KHBv ZmZfZHN0MiA9PSBkc3QyLT5hZGRyLm9mZnNldCk7CisKKwlpZiAoYnVmX2luZm8pIHsKKwkJcHJp bnRfYnVmKHNyYywgInNyYyAiKTsKKwkJcHJpbnRfYnVmKGRzdDEsICJkc3QxIik7CisJCXByaW50 X2J1Zihkc3QyLCAiZHN0MiIpOworCX0KKworCWludGVsX2JiX2Rlc3Ryb3koaWJiKTsKK30KKwor c3RhdGljIHZvaWQgZnVsbF9iYXRjaChzdHJ1Y3QgYnVmX29wcyAqYm9wcykKK3sKKwlpbnQgaTkx NSA9IGJ1Zl9vcHNfZ2V0X2ZkKGJvcHMpOworCXN0cnVjdCBpbnRlbF9iYiAqaWJiOworCWludCBp OworCisJaWJiID0gaW50ZWxfYmJfY3JlYXRlKGk5MTUsIFBBR0VfU0laRSk7CisJaWYgKGRlYnVn X2JiKQorCQlpbnRlbF9iYl9zZXRfZGVidWcoaWJiLCB0cnVlKTsKKworCWZvciAoaSA9IDA7IGkg PCBQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3QpIC0gMTsgaSsrKQorCQlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9lbWl0X2JiZShpYmIpOworCisJaWd0X2Fzc2VydChpbnRlbF9i Yl9vZmZzZXQoaWJiKSA9PSBQQUdFX1NJWkUpOworCWludGVsX2JiX2V4ZWMoaWJiLCBpbnRlbF9i Yl9vZmZzZXQoaWJiKSwKKwkJICAgICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9f UkVMT0MsIGZhbHNlKTsKKworCWludGVsX2JiX2Rlc3Ryb3koaWJiKTsKK30KKworc3RhdGljIGlu dCBvcHRfaGFuZGxlcihpbnQgb3B0LCBpbnQgb3B0X2luZGV4LCB2b2lkICpkYXRhKQoreworCXN3 aXRjaCAob3B0KSB7CisJY2FzZSAnZCc6CisJCWRlYnVnX2JiID0gdHJ1ZTsKKwkJYnJlYWs7CisJ Y2FzZSAncCc6CisJCXdyaXRlX3BuZyA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgJ2knOgorCQli dWZfaW5mbyA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBJR1RfT1BUX0hB TkRMRVJfRVJST1I7CisJfQorCisJcmV0dXJuIElHVF9PUFRfSEFORExFUl9TVUNDRVNTOworfQor Citjb25zdCBjaGFyICpoZWxwX3N0ciA9CisJIiAgLWRcdERlYnVnIGJiXG4iCisJIiAgLXBcdFdy aXRlIHN1cmZhY2VzIHRvIHBuZ1xuIgorCSIgIC1pXHRQcmludCBidWZmZXIgaW5mb1xuIgorCTsK KworaWd0X21haW5fYXJncygiZHBpIiwgTlVMTCwgaGVscF9zdHIsIG9wdF9oYW5kbGVyLCBOVUxM KQoreworCWludCBpOTE1OworCXN0cnVjdCBidWZfb3BzICpib3BzOworCisJaWd0X2ZpeHR1cmUg eworCQlpOTE1ID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWJvcHMgPSBidWZf b3BzX2NyZWF0ZShpOTE1KTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgic2ltcGxlLWJiIikKKwkJc2lt cGxlX2JiKGJvcHMsIGZhbHNlKTsKKworCWlndF9zdWJ0ZXN0KCJzaW1wbGUtYmItY3R4IikKKwkJ c2ltcGxlX2JiKGJvcHMsIHRydWUpOworCisJaWd0X3N1YnRlc3QoImJsaXQtbm9yZWxvYy1rZWVw LWNhY2hlIikKKwkJYmxpdChib3BzLCBOT1JFTE9DLCBLRUVQX0NBQ0hFKTsKKworCWlndF9zdWJ0 ZXN0KCJibGl0LXJlbG9jLXB1cmdlLWNhY2hlIikKKwkJYmxpdChib3BzLCBSRUxPQywgUFVSR0Vf Q0FDSEUpOworCisJaWd0X3N1YnRlc3QoImJsaXQtbm9yZWxvYy1wdXJnZS1jYWNoZSIpCisJCWJs aXQoYm9wcywgTk9SRUxPQywgUFVSR0VfQ0FDSEUpOworCisJaWd0X3N1YnRlc3QoImJsaXQtcmVs b2Mta2VlcC1jYWNoZSIpCisJCWJsaXQoYm9wcywgUkVMT0MsIEtFRVBfQ0FDSEUpOworCisJaWd0 X3N1YnRlc3QoImludGVsLWJiLWJsaXQtbm9uZSIpCisJCWRvX2ludGVsX2JiX2JsaXQoYm9wcywg MTAsIEk5MTVfVElMSU5HX05PTkUpOworCisJaWd0X3N1YnRlc3QoImludGVsLWJiLWJsaXQteCIp CisJCWRvX2ludGVsX2JiX2JsaXQoYm9wcywgMTAsIEk5MTVfVElMSU5HX1gpOworCisJaWd0X3N1 YnRlc3QoImludGVsLWJiLWJsaXQteSIpCisJCWRvX2ludGVsX2JiX2JsaXQoYm9wcywgMTAsIEk5 MTVfVElMSU5HX1kpOworCisJaWd0X3N1YnRlc3QoIm9mZnNldC1jb250cm9sIikKKwkJb2Zmc2V0 X2NvbnRyb2woYm9wcyk7CisKKwlpZ3Rfc3VidGVzdCgiZnVsbC1iYXRjaCIpCisJCWZ1bGxfYmF0 Y2goYm9wcyk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWJ1Zl9vcHNfZGVzdHJveShib3BzKTsKKwkJ Y2xvc2UoaTkxNSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0 cy9tZXNvbi5idWlsZAppbmRleCAyODA5MTc5NC4uMDZhNDdlMzcgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xMDMsNiArMTAzLDcgQEAg dGVzdF9wcm9ncyA9IFsKIF0KIAogaTkxNV9wcm9ncyA9IFsKKwknYXBpX2ludGVsX2JiJywKIAkn Z2VuM19taXhlZF9ibGl0cycsCiAJJ2dlbjNfcmVuZGVyX2xpbmVhcl9ibGl0cycsCiAJJ2dlbjNf cmVuZGVyX21peGVkX2JsaXRzJywKLS0gCjIuMjYuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2Cg==