From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandra Konduru Subject: =?utf-8?q?=5BPATCH_i-g-t_2/2=5D_Adding_kms=5Fnv12_to_?= =?utf-8?q?test_display_NV12_feature?= Date: Fri, 4 Sep 2015 19:58:33 -0700 Message-ID: <1441421913-19359-1-git-send-email-chandra.konduru@intel.com> References: <1440032725-10035-3-git-send-email-chandra.konduru@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 7F6526EC48 for ; Fri, 4 Sep 2015 20:00:13 -0700 (PDT) In-Reply-To: <1440032725-10035-3-git-send-email-chandra.konduru@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: daniel.vetter@intel.com, thomas.wood@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogY2hhbmRyYSBrb25kdXJ1IDxjaGFuZHJhLmtvbmR1cnVAaW50ZWwuY29tPgoKVGhpcyBw YXRjaCBhZGRzIGttc19udjEyIHRlc3QgY2FzZS4gSXQgY292ZXJzIHRlc3RpbmcgTlYxMgppbiBs aW5lYXIvdGlsZS1YL3RpbGUtWSB0aWxpbmcgZm9ybWF0cyBpbiAwLzkwLzE4MC8yNzAKb3JpZW50 YXRpb25zLiBGb3IgZWFjaCB0aWxpbmcgZm9ybWF0LCBpdCB0ZXN0cyBzZXZlcmFsCmNvbWJpbmF0 aW9ucyBvZiBwbGFuZXMgYW5kIGl0cyBzY2FsaW5nLgoKdjI6Ci1BZGRlZCA5MC8yNzAgdGVzdHMg KG1lKQotdG9vayBvdXQgY3JjIHRlc3QgYXMgaXQgaXNuJ3QgYWRkaW5nIG11Y2ggdmFsdWUgZHVl IHRvIGNocm9tYSB1cHNhbXBsaW5nIChtZSkKCnYzOgotTWFrZSAtLWxpc3Qtc3VidGVzdHMgb3B0 aW9uIHdvcmsgKFR2cnRrbykKLU1ha2UgbnYxMiB1bnN1cHBvcnRlZCB0ZXN0IHJ1biBwcm9wZXJs eSBlaXRoZXIgYXMgYSBzdWIgdGVzdAogb3IgYWxvbmcgd2l0aCBhbGwgb3RoZXIgdGVzdHMgKG1l KQotQWRkZWQgbnYxMiBmYiB3aXRoIGludmFsaWQgcGFyYW1zIChEYW5pZWwpCgp2NDoKLUF2b2lk IG1vZGVzZXQgZm9yIGludmFsaWQgdGVzdHMgKERhbmllbCkKClNpZ25lZC1vZmYtYnk6IGNoYW5k cmEga29uZHVydSA8Y2hhbmRyYS5rb25kdXJ1QGludGVsLmNvbT4KLS0tCiB0ZXN0cy8uZ2l0aWdu b3JlICAgICAgIHwgICAxICsKIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMv a21zX252MTIuYyAgICAgICB8IDc1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDc1NSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX252MTIuYwoKZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRp Z25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCmluZGV4IGQ2ZDA1ZmYuLjJkZTQ3MTIgMTAwNjQ0Ci0t LSBhL3Rlc3RzLy5naXRpZ25vcmUKKysrIGIvdGVzdHMvLmdpdGlnbm9yZQpAQCAtMTU1LDYgKzE1 NSw3IEBAIGttc19zZXRtb2RlCiBrbXNfc2lua19jcmNfYmFzaWMKIGttc191bml2ZXJzYWxfcGxh bmUKIGttc192YmxhbmsKK2ttc19udjEyCiBwbV9iYWNrbGlnaHQKIHBtX2xwc3AKIHBtX3JjNl9y ZXNpZGVuY3kKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCmluZGV4IGVmNjkyOTkuLmE3ODA0ZmEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtODUsNiArODUs NyBAQCBURVNUU19wcm9nc19NID0gXAogCWttc19jcnRjX2JhY2tncm91bmRfY29sb3IgXAogCWtt c19wbGFuZV9zY2FsaW5nIFwKIAlrbXNfcGFuZWxfZml0dGluZyBcCisJa21zX252MTIgXAogCXBt X2JhY2tsaWdodCBcCiAJcG1fbHBzcCBcCiAJcG1fcnBtIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2tt c19udjEyLmMgYi90ZXN0cy9rbXNfbnYxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjYxZjgyNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfbnYxMi5jCkBAIC0w LDAgKzEsNzUzIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTMsMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg Ki8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+CisKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X2RlYnVnZnMu aCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKyNpbmNsdWRl ICJpbnRlbF9jaGlwc2V0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKworSUdUX1RF U1RfREVTQ1JJUFRJT04oIlRlc3QgZGlzcGxheSBOVjEyIHN1cHBvcnQiKTsKKwordWludDMyX3Qg ZGV2aWQ7Cit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGRybV9mZDsKKwlpZ3RfZGlzcGxheV90IGRp c3BsYXk7CisJaW50IG51bV9zY2FsZXJzOworCWludCBudW1fcGxhbmVzOworCisJc3RydWN0IGln dF9mYiBmYjE7CisJc3RydWN0IGlndF9mYiBmYjFfbnYxMjsKKwlzdHJ1Y3QgaWd0X2ZiIGZiMjsK KwlzdHJ1Y3QgaWd0X2ZiIGZiMl9udjEyOworCXN0cnVjdCBpZ3RfZmIgZmIzOworCXN0cnVjdCBp Z3RfZmIgZmIzX252MTI7CisJaW50IGZiX2lkMTsKKwlpbnQgZmJfaWQxX252MTI7CisJaW50IGZi X2lkMjsKKwlpbnQgZmJfaWQyX252MTI7CisJaW50IGZiX2lkMzsKKwlpbnQgZmJfaWQzX252MTI7 CisKKwlpZ3RfcGxhbmVfdCAqcGxhbmUxOworCWlndF9wbGFuZV90ICpwbGFuZTI7CisJaWd0X3Bs YW5lX3QgKnBsYW5lMzsKKworCXVpbnQ2NF90IHRpbGVkOworCWludCByb3RhdGlvbjsKK30gZGF0 YV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7Cit9IHJl c190OworCisjZGVmaW5lIElNR19GSUxFICAiMTA4MHAtbGVmdC5wbmciCisKK3N0YXRpYyB2b2lk CitwYWludF9wYXR0ZXJuKGRhdGFfdCAqZCwgc3RydWN0IGlndF9mYiAqZmIsIHVpbnQxNl90IHcs IHVpbnQxNl90IGgpCit7CisJY2Fpcm9fdCAqY3I7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4 KGQtPmRybV9mZCwgZmIpOworCWlndF9wYWludF90ZXN0X3BhdHRlcm4oY3IsIHcsIGgpOworCWNh aXJvX2Rlc3Ryb3koY3IpOworfQorCitzdGF0aWMgdm9pZAorcGFpbnRfaW1hZ2UoZGF0YV90ICpk LCBzdHJ1Y3QgaWd0X2ZiICpmYiwgdWludDE2X3QgdywgdWludDE2X3QgaCkKK3sKKwljYWlyb190 ICpjcjsKKworCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZC0+ZHJtX2ZkLCBmYik7CisJaWd0X3Bh aW50X2ltYWdlKGNyLCBJTUdfRklMRSwgMCwgMCwgdywgaCk7CisJY2Fpcm9fZGVzdHJveShjcik7 Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRf dCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSwKKwkJCWlndF9wbGFuZV90ICpwbGFuZSwgZHJtTW9k ZU1vZGVJbmZvICptb2RlLCBlbnVtIGlndF9jb21taXRfc3R5bGUgcykKK3sKKwlpZ3RfZGlzcGxh eV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91 dHB1dCwgcGlwZSk7CisKKwkvKiBiZWZvcmUgYWxsb2NhdGluZywgZnJlZSBpZiBhbnkgb2xkZXIg ZmIgKi8KKwlpZiAoZGF0YS0+ZmJfaWQxKSB7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2Zk LCAmZGF0YS0+ZmIxKTsKKwkJZGF0YS0+ZmJfaWQxID0gMDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBm YiBmb3IgcGxhbmUgMSAqLworCWRhdGEtPmZiX2lkMSA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJt X2ZkLAorCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJRFJNX0ZPUk1BVF9Y UkdCODg4OCwKKwkJCWRhdGEtPnRpbGVkLCAvKiB0aWxlZCAqLworCQkJJmRhdGEtPmZiMSk7CisJ aWd0X2Fzc2VydChkYXRhLT5mYl9pZDEpOworCisJcGFpbnRfcGF0dGVybihkYXRhLCAmZGF0YS0+ ZmIxLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCisJLyoKKwkgKiBXZSBhbHdh eXMgc2V0IHRoZSBwcmltYXJ5IHBsYW5lIHRvIGFjdHVhbGx5IGVuYWJsZSB0aGUgcGlwZSBhcwor CSAqIHRoZXJlJ3Mgbm8gd2F5ICh0aGF0IHdvcmtzKSB0byBsaWdodCB1cCBhIHBpcGUgd2l0aCBv bmx5IGEgc3ByaXRlCisJICogcGxhbmUgZW5hYmxlZCBhdCB0aGUgbW9tZW50LgorCSAqLworCWlm ICghcGxhbmUtPmlzX3ByaW1hcnkpIHsKKwkJaWd0X3BsYW5lX3QgKnByaW1hcnk7CisKKwkJcHJp bWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FX1BSSU1BUlkpOwor CQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZkYXRhLT5mYjEpOworCX0KKworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYjEpOworCWlmIChzID09IENPTU1JVF9MRUdBQ1kpIHsK KwkJaW50IHJldDsKKwkJcmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLAorCQkJCW91 dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJZGF0YS0+ZmJfaWQxLAorCQkJCXBsYW5l LT5wYW5feCwgcGxhbmUtPnBhbl95LAorCQkJCSZvdXRwdXQtPmlkLAorCQkJCTEsCisJCQkJbW9k ZSk7CisJCWlndF9hc3NlcnQocmV0ID09IDApOworCX0gZWxzZSB7CisJCWlndF9kaXNwbGF5X2Nv bW1pdDIoZGlzcGxheSwgcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2NydGMoZGF0 YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaWd0X3BsYW5lX3QgKnBsYW5lKQorewor CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWlmIChkYXRhLT5m Yl9pZDEpIHsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYjEpOworCQlk YXRhLT5mYl9pZDEgPSAwOworCX0KKwlpZiAoZGF0YS0+ZmJfaWQyKSB7CisJCWlndF9yZW1vdmVf ZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIyKTsKKwkJZGF0YS0+ZmJfaWQyID0gMDsKKwl9CisJ aWYgKGRhdGEtPmZiX2lkMykgeworCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEt PmZiMyk7CisJCWRhdGEtPmZiX2lkMyA9IDA7CisJfQorCisJaWYgKGRhdGEtPmZiX2lkMV9udjEy KSB7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIxX252MTIpOworCQlk YXRhLT5mYl9pZDFfbnYxMiA9IDA7CisJfQorCisJaWYgKGRhdGEtPmZiX2lkMl9udjEyKSB7CisJ CWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIyX252MTIpOworCQlkYXRhLT5m Yl9pZDJfbnYxMiA9IDA7CisJfQorCisJaWYgKGRhdGEtPmZiX2lkM19udjEyKSB7CisJCWlndF9y ZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmIzX252MTIpOworCQlkYXRhLT5mYl9pZDNf bnYxMiA9IDA7CisJfQorCisJaWYgKCFwbGFuZS0+aXNfcHJpbWFyeSkgeworCQlpZ3RfcGxhbmVf dCAqcHJpbWFyeTsKKworCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJ R1RfUExBTkVfUFJJTUFSWSk7CisJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgTlVMTCk7CisJ fQorCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJaWd0X291dHB1dF9zZXRfcGlw ZShvdXRwdXQsIFBJUEVfQU5ZKTsKKworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX1VOSVZFUlNBTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbnYxMl9wbGFuZShkYXRhX3Qg KmQpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkLT5kaXNwbGF5OworCWlndF9vdXRw dXRfdCAqb3V0cHV0OworCWVudW0gcGlwZSBwaXBlOworCWludCB2YWxpZF90ZXN0cyA9IDA7CisJ aW50IGltZ193aWR0aDsKKwlpbnQgaW1nX2hlaWdodDsKKworCWlndF9yZXF1aXJlKGQtPmRpc3Bs YXkuaGFzX3VuaXZlcnNhbF9wbGFuZXMpOworCWlndF9yZXF1aXJlKGQtPm51bV9zY2FsZXJzKTsK KworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7CisJCWRybU1v ZGVNb2RlSW5mbyAqbW9kZTsKKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsK KwkJcGlwZSA9IG91dHB1dC0+Y29uZmlnLnBpcGU7CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShv dXRwdXQsIHBpcGUpOworCisJCS8qIGdldCBwbGFuZXMgKi8KKwkJZC0+cGxhbmUxID0gaWd0X291 dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7CisJCWQtPnBsYW5lMiA9 IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOworCQlpZiAoZC0+bnVt X3BsYW5lcyA+PSAzKQorCQkJZC0+cGxhbmUzID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0 LCBJR1RfUExBTkVfMyk7CisKKwkJLyogc2V0IHJlcXVpcmVkIHJvdGF0aW9uICovCisJCWlndF9w bGFuZV9zZXRfcm90YXRpb24oZC0+cGxhbmUxLCBkLT5yb3RhdGlvbik7CisJCWlndF9wbGFuZV9z ZXRfcm90YXRpb24oZC0+cGxhbmUyLCBkLT5yb3RhdGlvbik7CisJCWlmIChkLT5udW1fcGxhbmVz ID49IDMpCisJCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKGQtPnBsYW5lMywgZC0+cm90YXRpb24p OworCisJCS8qIFNldCB1cCBkaXNwbGF5IHdpdGggcGxhbmUgMSAqLworCQlwcmVwYXJlX2NydGMo ZCwgb3V0cHV0LCBwaXBlLCBkLT5wbGFuZTEsIG1vZGUsIENPTU1JVF9MRUdBQ1kpOworCisJCS8q IGFsbG9jYXRlIGZiMiwgZmIyX252MTIsIGZiMV9udjEyIHdpdGggaW1hZ2Ugc2l6ZSAqLworCQlp Z3RfZ2V0X2ltYWdlX3NpemUoSU1HX0ZJTEUsICZpbWdfd2lkdGgsICZpbWdfaGVpZ2h0KTsKKwor CQkvKiBmYjIgaXMgaW4gUkdCIGZvcm1hdCAqLworCQlkLT5mYl9pZDIgPSBpZ3RfY3JlYXRlX2Zi KGQtPmRybV9mZCwKKwkJCQlpbWdfd2lkdGgsIGltZ19oZWlnaHQsCisJCQkJRFJNX0ZPUk1BVF9Y UkdCODg4OCwKKwkJCQlkLT50aWxlZCwgLyogdGlsZWQgKi8KKwkJCQkmZC0+ZmIyKTsKKwkJaWd0 X2Fzc2VydChkLT5mYl9pZDIpOworCisJCS8qIGZiMV9udjEyIGlzIGluIE5WMTIgZm9ybWF0ICov CisJCWQtPmZiX2lkMV9udjEyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCisJCQkJaW1nX3dp ZHRoLCBpbWdfaGVpZ2h0LAorCQkJCURSTV9GT1JNQVRfTlYxMiwKKwkJCQlkLT50aWxlZCwgLyog dGlsZWQgKi8KKwkJCQkmZC0+ZmIxX252MTIpOworCQlpZ3RfYXNzZXJ0KGQtPmZiX2lkMV9udjEy KTsKKworCQkvKiBmYjJfbnYxMiBpcyBpbiBOVjEyIGZvcm1hdCAqLworCQlkLT5mYl9pZDJfbnYx MiA9IGlndF9jcmVhdGVfZmIoZC0+ZHJtX2ZkLAorCQkJCWltZ193aWR0aCwgaW1nX2hlaWdodCwK KwkJCQlEUk1fRk9STUFUX05WMTIsCisJCQkJZC0+dGlsZWQsCisJCQkJJmQtPmZiMl9udjEyKTsK KwkJaWd0X2Fzc2VydChkLT5mYl9pZDJfbnYxMik7CisKKwkJLyogZmIzIGlzIGluIFJHQiAqLwor CQlkLT5mYl9pZDMgPSBpZ3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKKwkJCQltb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCisJCQkJRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwkJCQlkLT50aWxl ZCwgLyogdGlsZWQgKi8KKwkJCQkmZC0+ZmIzKTsKKwkJaWd0X2Fzc2VydChkLT5mYl9pZDMpOwor CisJCS8qCisJCSAqIE1pbWljaW5nIHNvbWUgbm90IGV4YWN0bHkgYnV0IGNsb3NlciB0byBzb21l IHJlYWwgdXNhZ2UKKwkJICovCisKKwkJLyogc2V0IHVwIGRhdGEgZm9yIGZiMjogYm90aCBmYjFf bnYxMiwgZmIyX252MTIgdXNlcyB0aGlzICovCisJCXBhaW50X2ltYWdlKGQsICZkLT5mYjIsIGlt Z193aWR0aCwgaW1nX2hlaWdodCk7CisKKwkJLyogc2V0IHVwIGRhdGEgaW4gZmIxX252MTI6IGZi MiBSR0ItPiBmYjFfbnYxMiAqLworCQlpZ3RfZmJfY3NjX3hyZ2JfdG9fbnYxMihkLT5kcm1fZmQs ICZkLT5mYjFfbnYxMiwgJmQtPmZiMik7CisKKwkJLyogc2V0IHVwIGRhdGEgaW4gZmIyX252MTI6 IGZiMiBSR0ItPiBmYjJfbnYxMiAqLworCQlpZ3RfZmJfY3NjX3hyZ2JfdG9fbnYxMihkLT5kcm1f ZmQsICZkLT5mYjJfbnYxMiwgJmQtPmZiMik7CisKKwkJLyogc2V0IHVwIGRhdGEgaW4gZmIzICov CisJCXBhaW50X3BhdHRlcm4oZCwgJmQtPmZiMywgZC0+ZmIzLndpZHRoLCBkLT5mYjMuaGVpZ2h0 KTsKKworCQkvKiBTZXQgdXAgZmIyX252MTItPnBsYW5lMiBtYXBwaW5nLiAqLworCQlpZ3RfcGxh bmVfc2V0X2ZiKGQtPnBsYW5lMiwgJmQtPmZiMl9udjEyKTsKKwkJLyogMm5kIHBsYW5lIG52MTIg d2luZG93ZWQgLSBubyBzY2FsaW5nICovCisJCWlndF9mYl9zZXRfcG9zaXRpb24oJmQtPmZiMl9u djEyLCBkLT5wbGFuZTIsIDAsIDApOworCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBk LT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLAorCQkJZC0+ZmIyX252MTIuaGVpZ2h0KTsKKwkJ aWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTIsIDAsIDApOworCQlpZ3RfcGxhbmVfc2V0 X3NpemUoZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi53aWR0aCwgZC0+ZmIyX252MTIuaGVpZ2h0KTsK KwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKworCQkv KiBDaGFuZ2UgcHJpbWFyeSBwbGFuZSB0byBudjEyIGZ1bGwgc2NyZWVuOiBzY2FsaW5nICsgTlYx MiAqLworCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMV9udjEyKTsKKwkJaWd0 X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIxX252MTIsIGQtPnBsYW5lMSwgMCwgMCk7CisJCWlndF9m Yl9zZXRfc2l6ZSgmZC0+ZmIxX252MTIsIGQtPnBsYW5lMSwgZC0+ZmIxX252MTIud2lkdGgsCisJ CQlkLT5mYjFfbnYxMi5oZWlnaHQpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5l MSwgMCwgMCk7CisJCWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5 LCBtb2RlLT52ZGlzcGxheSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X1VOSVZFUlNBTCk7CisKKwkJaWYgKGQtPm51bV9wbGFuZXMgPj0gMykgeworCQkJLyogU2V0IHVw IGZiMy0+cGxhbmUzIG1hcHBpbmcuICovCisJCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMywg JmQtPmZiMyk7CisKKwkJCS8qIDNyZCBwbGFuZSBmdWxsIHNjcmVlbiAtIG5vIHNjYWxpbmcuICov CisJCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjMsIGQtPnBsYW5lMywgMCwgMCk7CisJCQlp Z3RfZmJfc2V0X3NpemUoJmQtPmZiMywgZC0+cGxhbmUzLCBkLT5mYjMud2lkdGgsIGQtPmZiMy5o ZWlnaHQpOworCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTMsIDAsIDApOworCQkJ aWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMywgZC0+ZmIzLndpZHRoLCBkLT5mYjMuaGVpZ2h0 KTsKKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7CisJ CX0KKworCQkvKiAybmQgcGxhbmUgbnYxMiB1cCBzY2FsaW5nICovCisJCWlndF9mYl9zZXRfcG9z aXRpb24oJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIDAsIDApOworCQlpZ3RfZmJfc2V0X3NpemUo JmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLAorCQkJZC0+ZmIyX252 MTIuaGVpZ2h0KTsKKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTIsIDEwMCwgMTAw KTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMiwgbW9kZS0+aGRpc3BsYXktMjAwLCBt b2RlLT52ZGlzcGxheS0yMDApOworCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9VTklWRVJTQUwpOworCisJCS8qIDJuZCBwbGFuZSBudjEyIGRvd24gc2NhbGluZyAqLworCQlp Z3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjJfbnYxMiwgZC0+cGxhbmUyLCAwLCAwKTsKKwkJaWd0 X2ZiX3NldF9zaXplKCZkLT5mYjJfbnYxMiwgZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi53aWR0aCwK KwkJCWQtPmZiMl9udjEyLmhlaWdodCk7CisJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZC0+cGxh bmUyLCAxMDI0LCAwKTsKKwkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMiwgZC0+ZmIyX252 MTIud2lkdGggKiAyLzMsCisJCQlkLT5mYjJfbnYxMi5oZWlnaHQgKiAyLzMpOworCQlpZ3RfZGlz cGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOworCisJCS8qIEJhY2sgdG8g c2luZ2xlIHBsYW5lIG1vZGUgIC0gcmdiICYgbm8gc2NhbGluZyAqLworCQlpZ3RfcGxhbmVfc2V0 X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMSk7CisJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUyLCBO VUxMKTsKKwkJaWYgKGQtPm51bV9wbGFuZXMgPj0gMykKKwkJCWlndF9wbGFuZV9zZXRfZmIoZC0+ cGxhbmUzLCBOVUxMKTsKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIxLCBkLT5wbGFuZTEs IDAsIDApOworCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMSwgZC0+cGxhbmUxLCBtb2RlLT5oZGlz cGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5l MSwgMCwgMCk7CisJCWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5 LCBtb2RlLT52ZGlzcGxheSk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X1VOSVZFUlNBTCk7CisKKwkJLyogc2luZ2xlIHBsYW5lIG1vZGUgIC0gcmdiICYgc2NhbGluZyAq LworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKGQtPnBsYW5lMSwgSUdUX1JPVEFUSU9OXzApOwor CQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMSk7CisJCWlndF9mYl9zZXRfcG9z aXRpb24oJmQtPmZiMSwgZC0+cGxhbmUxLCAwLCAwKTsKKwkJaWd0X2ZiX3NldF9zaXplKCZkLT5m YjEsIGQtPnBsYW5lMSwgZC0+ZmIxLndpZHRoLzIsIGQtPmZiMS5oZWlnaHQvMik7CisJCWlndF9w bGFuZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUxLCAwLCAwKTsKKwkJaWd0X3BsYW5lX3NldF9zaXpl KGQtPnBsYW5lMSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKworCQkvKiBzaW5nbGUgcGxh bmUgbW9kZSAgLSBudjEyICYgc2NhbGluZyAqLworCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5l MSwgJmQtPmZiMV9udjEyKTsKKwkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIxX252MTIsIGQt PnBsYW5lMSwgMCwgMCk7CisJCWlndF9mYl9zZXRfc2l6ZSgmZC0+ZmIxX252MTIsIGQtPnBsYW5l MSwgZC0+ZmIxX252MTIud2lkdGgsCisJCQlkLT5mYjFfbnYxMi5oZWlnaHQpOworCQlpZ3RfcGxh bmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7CisJCWlndF9wbGFuZV9zZXRfc2l6ZShk LT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7CisKKwkJdmFsaWRfdGVzdHMrKzsK KworCQljbGVhbnVwX2NydGMoZCwgb3V0cHV0LCBkLT5wbGFuZTEpOworCX0KKwlpZ3RfcmVxdWly ZV9mKHZhbGlkX3Rlc3RzLCAibm8gdmFsaWQgY3J0Yy9jb25uZWN0b3IgY29tYmluYXRpb25zIGZv dW5kXG4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9udjEyX3BsYW5lX3JvdGF0aW9uXzkwX29y XzI3MChkYXRhX3QgKmQpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkLT5kaXNwbGF5 OworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWVudW0gcGlwZSBwaXBlOworCWludCB2YWxpZF90 ZXN0cyA9IDA7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSB0d28ga2V5IHNjZW5hcmlv czoKKwkgKiAxKSBGbGlwIGxhbmRzY2FwZSBidWZmZXIgb250byBwb3J0cmFpdCBkaXNwbGF5CisJ ICogMikgRmxpcCBwb3J0cmFpdCBidWZmZXIgb250byBsYW5kc2NhcGUgZGlzcGxheQorCSAqCisJ ICogRHVlIHRvIGF2YWlsYWJpbGl0eSBvZiBsYW5kc2NhcGUgZGlzcGxheSwgZ29pbmcgd2l0aCAj Mi4KKwkgKi8KKwlyZXNfdCBudjEyX3Jlc19saXN0W10gPSB7CisJCXs0ODAsIDcyMH0sCisJCXs3 MjAsIDEyODB9LAorCQl7MTA4MCwgMTkyMH0sCisJfTsKKworCWlndF9yZXF1aXJlKGQtPmRpc3Bs YXkuaGFzX3VuaXZlcnNhbF9wbGFuZXMpOworCWlndF9yZXF1aXJlKGQtPm51bV9zY2FsZXJzKTsK KworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7CisJCWRybU1v ZGVNb2RlSW5mbyAqbW9kZTsKKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsK KwkJcGlwZSA9IG91dHB1dC0+Y29uZmlnLnBpcGU7CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShv dXRwdXQsIHBpcGUpOworCisJCS8qIGdldCBwbGFuZXMgKi8KKwkJZC0+cGxhbmUxID0gaWd0X291 dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7CisJCWQtPnBsYW5lMiA9 IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOworCisJCWZvciAoaSA9 IDA7IGkgPCBzaXplb2YobnYxMl9yZXNfbGlzdCkvc2l6ZW9mKHJlc190KTsgaSsrKSB7CisJCQkv KiBTZXQgdXAgZGlzcGxheSB3aXRoIHBsYW5lIDEgKi8KKwkJCWlndF9wbGFuZV9zZXRfcm90YXRp b24oZC0+cGxhbmUxLCBJR1RfUk9UQVRJT05fMCk7CisJCQlwcmVwYXJlX2NydGMoZCwgb3V0cHV0 LCBwaXBlLCBkLT5wbGFuZTEsIG1vZGUsIENPTU1JVF9MRUdBQ1kpOworCisJCQkvKiBmYjIgaXMg aW4gUkdCIGZvcm1hdCAqLworCQkJZC0+ZmJfaWQyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQs CisJCQkJCW52MTJfcmVzX2xpc3RbaV0ud2lkdGgsIG52MTJfcmVzX2xpc3RbaV0uaGVpZ2h0LAor CQkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCQlkLT50aWxlZCwKKwkJCQkJJmQtPmZiMik7 CisJCQlpZ3RfYXNzZXJ0KGQtPmZiX2lkMik7CisKKwkJCS8qIENoYW5nZSBwcmltYXJ5IHBsYW5l IHRvIGZiMiBSR0Igd2l0aCByb3RhdGlvbiAqLworCQkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihk LT5wbGFuZTEsIGQtPnJvdGF0aW9uKTsKKworCQkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTEs ICZkLT5mYjIpOworCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIyLCBkLT5wbGFuZTEsIDAs IDApOworCQkJaWd0X2ZiX3NldF9zaXplKCZkLT5mYjIsIGQtPnBsYW5lMSwgZC0+ZmIyLndpZHRo LCBkLT5mYjIuaGVpZ2h0KTsKKwkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUxLCAw LCAwKTsKKwkJCWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTEsIG1vZGUtPmhkaXNwbGF5LCBt b2RlLT52ZGlzcGxheSk7CisJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9V TklWRVJTQUwpOworCisJCQkvKiBmYjFfbnYxMiBpcyBpbiBOVjEyIGZvcm1hdCAqLworCQkJZC0+ ZmJfaWQxX252MTIgPSBpZ3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKKwkJCQkJbnYxMl9yZXNfbGlz dFtpXS53aWR0aCwgbnYxMl9yZXNfbGlzdFtpXS5oZWlnaHQsCisJCQkJCURSTV9GT1JNQVRfTlYx MiwKKwkJCQkJZC0+dGlsZWQsCisJCQkJCSZkLT5mYjFfbnYxMik7CisJCQlpZ3RfYXNzZXJ0KGQt PmZiX2lkMV9udjEyKTsKKworCQkJLyogZmIyX252MTIgaXMgaW4gTlYxMiBmb3JtYXQgKi8KKwkJ CWQtPmZiX2lkMl9udjEyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCisJCQkJCW52MTJfcmVz X2xpc3RbaV0ud2lkdGgsIG52MTJfcmVzX2xpc3RbaV0uaGVpZ2h0LAorCQkJCQlEUk1fRk9STUFU X05WMTIsCisJCQkJCWQtPnRpbGVkLAorCQkJCQkmZC0+ZmIyX252MTIpOworCQkJaWd0X2Fzc2Vy dChkLT5mYl9pZDJfbnYxMik7CisKKwkJCS8qIHNldCB1cCBkYXRhIGluIGZiMV9udjEyOiBmYjIg UEFUVEVSTiBSR0ItPiBmYjFfbnYxMiAqLworCQkJcGFpbnRfcGF0dGVybihkLCAmZC0+ZmIyLCBk LT5mYjIud2lkdGgsIGQtPmZiMi5oZWlnaHQpOworCQkJaWd0X2ZiX2NzY194cmdiX3RvX252MTIo ZC0+ZHJtX2ZkLCAmZC0+ZmIxX252MTIsICZkLT5mYjIpOworCisJCQkvKiBzZXQgdXAgZGF0YSBp biBmYjJfbnYxMjogZmIyIFBBVFRFUk4gUkdCLT4gZmIyX252MTIgKi8KKwkJCXBhaW50X3BhdHRl cm4oZCwgJmQtPmZiMiwgZC0+ZmIyLndpZHRoLCBkLT5mYjIuaGVpZ2h0KTsKKwkJCWlndF9mYl9j c2NfeHJnYl90b19udjEyKGQtPmRybV9mZCwgJmQtPmZiMl9udjEyLCAmZC0+ZmIyKTsKKworCQkJ Lyogc2V0IHJlcXVpcmVkIHJvdGF0aW9uICovCisJCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKGQt PnBsYW5lMSwgZC0+cm90YXRpb24pOworCQkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihkLT5wbGFu ZTIsIGQtPnJvdGF0aW9uKTsKKworCQkJLyogQ2hhbmdlIHByaW1hcnkgcGxhbmUgdG8gbnYxMiBm dWxsIHNjcmVlbjogc2NhbGluZyArIE5WMTIgKi8KKwkJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxh bmUxLCAmZC0+ZmIxX252MTIpOworCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIxX252MTIs IGQtPnBsYW5lMSwgMCwgMCk7CisJCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMV9udjEyLCBkLT5w bGFuZTEsIGQtPmZiMV9udjEyLndpZHRoLAorCQkJCWQtPmZiMV9udjEyLmhlaWdodCk7CisJCQlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMSwgMCwgMCk7CisJCQlpZ3RfcGxhbmVfc2V0 X3NpemUoZC0+cGxhbmUxLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKworCQkJLyogMm5k IHBsYW5lIG52MTIgd2luZG93ZWQgKi8KKwkJCWlndF9wbGFuZV9zZXRfZmIoZC0+cGxhbmUyLCAm ZC0+ZmIyX252MTIpOworCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIyX252MTIsIGQtPnBs YW5lMiwgMCwgMCk7CisJCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIs IGQtPmZiMl9udjEyLndpZHRoLAorCQkJCWQtPmZiMl9udjEyLmhlaWdodCk7CisJCQlpZ3RfcGxh bmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMiwgMCwgMCk7CisJCQlpZ3RfcGxhbmVfc2V0X3NpemUo ZC0+cGxhbmUyLCBkLT5mYjJfbnYxMi5oZWlnaHQsZC0+ZmIyX252MTIud2lkdGgpOworCQkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKworCQkJLyogMm5k IHBsYW5lIG52MTIgdXAgc2NhbGluZyAqLworCQkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZC0+ZmIy X252MTIsIGQtPnBsYW5lMiwgMCwgMCk7CisJCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMl9udjEy LCBkLT5wbGFuZTIsIGQtPmZiMl9udjEyLndpZHRoLAorCQkJCWQtPmZiMl9udjEyLmhlaWdodCk7 CisJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGQtPnBsYW5lMiwgMTAwLCAxMDApOworCQkJaWd0 X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMiwgbW9kZS0+aGRpc3BsYXktMjAwLCBtb2RlLT52ZGlz cGxheS0yMDApOworCQkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVS U0FMKTsKKworCQkJLyogMm5kIHBsYW5lIG52MTIgZG93biBzY2FsaW5nICovCisJCQlpZ3RfZmJf c2V0X3Bvc2l0aW9uKCZkLT5mYjJfbnYxMiwgZC0+cGxhbmUyLCAwLCAwKTsKKwkJCWlndF9mYl9z ZXRfc2l6ZSgmZC0+ZmIyX252MTIsIGQtPnBsYW5lMiwgZC0+ZmIyX252MTIud2lkdGgsCisJCQkJ ZC0+ZmIyX252MTIuaGVpZ2h0KTsKKwkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZC0+cGxhbmUy LCAxMDAsIDEwMCk7CisJCQlpZ3RfcGxhbmVfc2V0X3NpemUoZC0+cGxhbmUyLCBkLT5mYjJfbnYx Mi5oZWlnaHQgKiAyLzMsCisJCQkJZC0+ZmIyX252MTIud2lkdGggKiAyLzMpOworCQkJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKKworCQkJLyogMm5kIHBs YW5lIG52MTIgZG93biBzY2FsaW5nIC0gcGFuIGludG8gRkIgKi8KKwkJCWlndF9mYl9zZXRfcG9z aXRpb24oJmQtPmZiMl9udjEyLCBkLT5wbGFuZTIsIDEwMCwgMTAwKTsKKwkJCWlndF9mYl9zZXRf c2l6ZSgmZC0+ZmIyX252MTIsIGQtPnBsYW5lMiwgZC0+ZmIyX252MTIud2lkdGgtMTAwLAorCQkJ CWQtPmZiMl9udjEyLmhlaWdodC0xMDApOworCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5w bGFuZTIsIDEwMCwgMTAwKTsKKwkJCWlndF9wbGFuZV9zZXRfc2l6ZShkLT5wbGFuZTIsIChkLT5m YjJfbnYxMi5oZWlnaHQtMTAwKSAqIDIvMywKKwkJCQkoZC0+ZmIyX252MTIud2lkdGgtMTAwKSAq IDIvMyk7CisJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwp OworCisJCQkvKiBCYWNrIHRvIHNpbmdsZSBwbGFuZSBtb2RlICAtIHJnYiAmIG5vIHNjYWxpbmcg Ki8KKwkJCWlndF9wbGFuZV9zZXRfcm90YXRpb24oZC0+cGxhbmUxLCBJR1RfUk9UQVRJT05fMCk7 CisJCQlpZ3RfcGxhbmVfc2V0X2ZiKGQtPnBsYW5lMSwgJmQtPmZiMSk7CisJCQlpZ3RfcGxhbmVf c2V0X2ZiKGQtPnBsYW5lMiwgTlVMTCk7CisJCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKCZkLT5mYjEs IGQtPnBsYW5lMSwgMCwgMCk7CisJCQlpZ3RfZmJfc2V0X3NpemUoJmQtPmZiMSwgZC0+cGxhbmUx LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQkJaWd0X3BsYW5lX3NldF9wb3Np dGlvbihkLT5wbGFuZTEsIDAsIDApOworCQkJaWd0X3BsYW5lX3NldF9zaXplKGQtPnBsYW5lMSwg bW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIo ZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7CisKKwkJCWlndF9yZW1vdmVfZmIoZC0+ZHJtX2Zk LCAmZC0+ZmIyKTsKKwkJCWlndF9yZW1vdmVfZmIoZC0+ZHJtX2ZkLCAmZC0+ZmIyX252MTIpOwor CQkJaWd0X3JlbW92ZV9mYihkLT5kcm1fZmQsICZkLT5mYjFfbnYxMik7CisJCQlkLT5mYl9pZDIg PSAwOworCQkJZC0+ZmJfaWQyX252MTIgPSAwOworCQkJZC0+ZmJfaWQxX252MTIgPSAwOworCQl9 CisKKwkJdmFsaWRfdGVzdHMrKzsKKworCQljbGVhbnVwX2NydGMoZCwgb3V0cHV0LCBkLT5wbGFu ZTEpOworCX0KKwlpZ3RfcmVxdWlyZV9mKHZhbGlkX3Rlc3RzLCAibm8gdmFsaWQgY3J0Yy9jb25u ZWN0b3IgY29tYmluYXRpb25zIGZvdW5kXG4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9udjEy X3Vuc3VwcG9ydGVkX3BsYW5lKGRhdGFfdCAqZCkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmQtPmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZW51bSBwaXBlIHBpcGU7 CisJaW50IHZhbGlkX3Rlc3RzID0gMDsKKworCWlndF9yZXF1aXJlKGQtPmRpc3BsYXkuaGFzX3Vu aXZlcnNhbF9wbGFuZXMpOworCWlndF9yZXF1aXJlKGQtPm51bV9zY2FsZXJzKTsKKwlpZ3RfcmVx dWlyZShkLT5udW1fcGxhbmVzID49IDMpOworCisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChk aXNwbGF5LCBvdXRwdXQpIHsKKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCQltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCQlwaXBlID0gb3V0cHV0LT5jb25maWcucGlwZTsK KworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwkJZC0+ZmJfaWQzX252 MTIgPSBpZ3RfY3JlYXRlX2ZiKGQtPmRybV9mZCwKKwkJCQkxOTIwLCAxMDgwLAorCQkJCURSTV9G T1JNQVRfTlYxMiwKKwkJCQlkLT50aWxlZCwKKwkJCQkmZC0+ZmIzX252MTIpOworCQlpZ3RfYXNz ZXJ0KGQtPmZiX2lkM19udjEyKTsKKworCQkvKiBTZXQgdXAgZmIzX252MTItPnBsYW5lMyBtYXBw aW5nLiAqLworCQlkLT5wbGFuZTMgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9Q TEFORV8zKTsKKwkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTMsICZkLT5mYjNfbnYxMik7CisK KwkJLyogM3JkIHBsYW5lIG52MTIgd2luZG93ZWQgLSBubyBzY2FsaW5nICovCisJCWlndF9mYl9z ZXRfcG9zaXRpb24oJmQtPmZiM19udjEyLCBkLT5wbGFuZTMsIDAsIDApOworCQlpZ3RfZmJfc2V0 X3NpemUoJmQtPmZiM19udjEyLCBkLT5wbGFuZTMsIGQtPmZiM19udjEyLndpZHRoLAorCQkJZC0+ ZmIzX252MTIuaGVpZ2h0KTsKKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkLT5wbGFuZTMsIDAs IDApOworCQlpZ3RfcGxhbmVfc2V0X3NpemUoZC0+cGxhbmUzLCBkLT5mYjNfbnYxMi53aWR0aCwg ZC0+ZmIzX252MTIuaGVpZ2h0KTsKKworCQkvKiBTaG91bGQgZmFpbCBiZWNhdXNlIE5WMTIgaXMg bm90IHN1cHBvcnRlZCBvbiBwbGFuZSAzICovCisJCWlndF9hc3NlcnQoaWd0X2Rpc3BsYXlfdHJ5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCkKKwkJCT09IC1FSU5WQUwpOworCisJ CXZhbGlkX3Rlc3RzKys7CisKKwkJaWd0X3BsYW5lX3NldF9mYihkLT5wbGFuZTMsIE5VTEwpOwor CQljbGVhbnVwX2NydGMoZCwgb3V0cHV0LCBkLT5wbGFuZTEpOworCX0KKwlpZ3RfcmVxdWlyZV9m KHZhbGlkX3Rlc3RzLCAibm8gdmFsaWQgY3J0Yy9jb25uZWN0b3IgY29tYmluYXRpb25zIGZvdW5k XG4iKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9udjEyX2ludmFsaWRfZmJfcGFyYW1zKGRhdGFf dCAqZCkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmQtPmRpc3BsYXk7CisJaWd0X291 dHB1dF90ICpvdXRwdXQ7CisJZW51bSBwaXBlIHBpcGU7CisJaW50IHZhbGlkX3Rlc3RzID0gMDsK KworCWlndF9yZXF1aXJlKGQtPmRpc3BsYXkuaGFzX3VuaXZlcnNhbF9wbGFuZXMpOworCWlndF9y ZXF1aXJlKGQtPm51bV9zY2FsZXJzKTsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlz cGxheSwgb3V0cHV0KSB7CisJCXN0cnVjdCBsb2NhbF9kcm1fbW9kZV9mYl9jbWQyIGY7CisJCWlu dCBmZCA9IGQtPmRybV9mZDsKKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCisJCW1vZGUgPSBp Z3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisJCXBpcGUgPSBvdXRwdXQtPmNvbmZpZy5waXBl OworCisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCQkvKiBTZXQgdXAg ZGlzcGxheSB3aXRoIHBsYW5lIDEgKi8KKwkJZC0+cGxhbmUxID0gaWd0X291dHB1dF9nZXRfcGxh bmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7CisJCWlndF9wbGFuZV9zZXRfcm90YXRpb24o ZC0+cGxhbmUxLCBJR1RfUk9UQVRJT05fMCk7CisKKwkJLyogdXNlIGlndCBoZWxwZXIgdG8gY3Jl YXRlIGJvIGFuZCBhZGRmYiB0aWxlLVlmLCB0aGlzIHNob3VsZCBwYXNzICovCisJCWQtPmZiX2lk MV9udjEyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCisJCQkJMTkyMCwgMTA4MCwKKwkJCQlE Uk1fRk9STUFUX05WMTIsCisJCQkJTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAorCQkJ CSZkLT5mYjFfbnYxMik7CisJCWlndF9hc3NlcnQoZC0+ZmJfaWQxX252MTIpOworCisJCS8qIG5v dyByZW1vdmUgZmIgYnV0IGtlZXAgYm8gdG8gcmVkbyBhZGRmYiAqLworCQlkcm1Nb2RlUm1GQihk LT5kcm1fZmQsIGQtPmZiX2lkMV9udjEyKTsKKworCQkvKiByZWRvIEFkZEZCICovCisJCW1lbXNl dCgmZiwgMCwgc2l6ZW9mKGYpKTsKKworCQlmLndpZHRoID0gZC0+ZmIxX252MTIud2lkdGg7CisJ CWYuaGVpZ2h0ID0gZC0+ZmIxX252MTIuaGVpZ2h0OworCQlmLnBpeGVsX2Zvcm1hdCA9IGQtPmZi MV9udjEyLmRybV9mb3JtYXQ7CisJCWYuZmxhZ3MgPSBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklF UlM7CisJCWYuaGFuZGxlc1swXSA9IGQtPmZiMV9udjEyLmdlbV9oYW5kbGU7CisJCWYucGl0Y2hl c1swXSA9IGQtPmZiMV9udjEyLnN0cmlkZTsKKwkJZi5tb2RpZmllclswXSA9IExPQ0FMX0k5MTVf Rk9STUFUX01PRF9ZZl9USUxFRDsKKwkJZi5tb2RpZmllclsxXSA9IExPQ0FMX0k5MTVfRk9STUFU X01PRF9ZZl9USUxFRDsKKworCQkvKiB0ZXN0IGludmFsaWQgdXYgc3RhcnQgKi8KKwkJZi5oYW5k bGVzWzFdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKKwkJZi5waXRjaGVzWzFdID0gZC0+ZmIx X252MTIuc3RyaWRlOworCQlmLm9mZnNldHNbMV0gPSAwOyAgLyogaW52YWxpZCB1diBzdGFydCAq LworCQlpZ3RfYXNzZXJ0KGRybUlvY3RsKGZkLCBMT0NBTF9EUk1fSU9DVExfTU9ERV9BRERGQjIs ICZmKSAhPSAwKTsKKworCQkvKiB0ZXN0IHV2IHBpdGNoICE9IHkgcGl0Y2ggKi8KKwkJZi5oYW5k bGVzWzFdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKKwkJZi5waXRjaGVzWzFdID0gZC0+ZmIx X252MTIuc3RyaWRlICsgMTsgLyogaW52YWxpZCBwaXRjaCAqLworCQlmLm9mZnNldHNbMV0gPSBk LT5mYjFfbnYxMi51dl9vZmZzZXQ7CisJCWlndF9hc3NlcnQoZHJtSW9jdGwoZmQsIExPQ0FMX0RS TV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpICE9IDApOworCisJCS8qIHRlc3QgdXYgZ2VtIGhhbmRs ZSAhPSB5IGdlbSBoYW5kbGUgKi8KKwkJZi5oYW5kbGVzWzFdID0gMHhGRkZGRkZGRjsgICAvKiBp bnZhbGlkIGdlbSBoYW5kbGUgKi8KKwkJZi5waXRjaGVzWzFdID0gZC0+ZmIxX252MTIuc3RyaWRl OworCQlmLm9mZnNldHNbMV0gPSBkLT5mYjFfbnYxMi51dl9vZmZzZXQ7CisJCWlndF9hc3NlcnQo ZHJtSW9jdGwoZmQsIExPQ0FMX0RSTV9JT0NUTF9NT0RFX0FEREZCMiwgJmYpICE9IDApOworCisJ CS8qIHRlc3QgdXYgb2Zmc2V0IG5vdCBhbGlnbmVkIHRvIG5ldyB0aWxlLXJvdyAqLworCQlmLmhh bmRsZXNbMV0gPSBkLT5mYjFfbnYxMi5nZW1faGFuZGxlOworCQlmLnBpdGNoZXNbMV0gPSBkLT5m YjFfbnYxMi5zdHJpZGU7CisJCWYub2Zmc2V0c1sxXSA9IGQtPmZiMV9udjEyLnV2X29mZnNldCAr IDB4RkY7ICAvKiBub3QgdGlsZS1yb3cgYWxpZ25lZCAqLworCQlpZ3RfYXNzZXJ0KGRybUlvY3Rs KGZkLCBMT0NBTF9EUk1fSU9DVExfTU9ERV9BRERGQjIsICZmKSAhPSAwKTsKKworCQkvKiB2YWxp ZCBwYXJhbXMgKi8KKwkJZi5oYW5kbGVzWzFdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRsZTsKKwkJ Zi5waXRjaGVzWzFdID0gZC0+ZmIxX252MTIuc3RyaWRlOworCQlmLm9mZnNldHNbMV0gPSBkLT5m YjFfbnYxMi51dl9vZmZzZXQ7CisJCWlndF9hc3NlcnQoZHJtSW9jdGwoZmQsIExPQ0FMX0RSTV9J T0NUTF9NT0RFX0FEREZCMiwgJmYpID09IDApOworCisJCS8qIEZyZWUgZmIgKi8KKwkJaWd0X3Jl bW92ZV9mYihkLT5kcm1fZmQsICZkLT5mYjFfbnYxMik7CisJCWQtPmZiX2lkMV9udjEyID0gMDsK KworCQkvKiByZWNyZWF0ZSBibyBhbmQgYWRkZmIgaW4gdGlsZS1ZLCB0aGlzIHNob3VsZCBwYXNz ICovCisJCWQtPmZiX2lkMV9udjEyID0gaWd0X2NyZWF0ZV9mYihkLT5kcm1fZmQsCisJCQkJMTky MCwgMTA4MCwKKwkJCQlEUk1fRk9STUFUX05WMTIsCisJCQkJTE9DQUxfSTkxNV9GT1JNQVRfTU9E X1lfVElMRUQsCisJCQkJJmQtPmZiMV9udjEyKTsKKwkJaWd0X2Fzc2VydChkLT5mYl9pZDFfbnYx Mik7CisKKwkJLyogbm93IHJlbW92ZSBmYiBidXQga2VlcCBibyB0byByZWRvIGFkZGZiICovCisJ CWRybU1vZGVSbUZCKGQtPmRybV9mZCwgZC0+ZmJfaWQxX252MTIpOworCisJCS8qIHJlZG8gQWRk RkIgKi8KKwkJbWVtc2V0KCZmLCAwLCBzaXplb2YoZikpOworCisJCWYud2lkdGggPSBkLT5mYjFf bnYxMi53aWR0aDsKKwkJZi5oZWlnaHQgPSBkLT5mYjFfbnYxMi5oZWlnaHQ7CisJCWYucGl4ZWxf Zm9ybWF0ID0gZC0+ZmIxX252MTIuZHJtX2Zvcm1hdDsKKwkJZi5mbGFncyA9IExPQ0FMX0RSTV9N T0RFX0ZCX01PRElGSUVSUzsKKwkJZi5oYW5kbGVzWzBdID0gZC0+ZmIxX252MTIuZ2VtX2hhbmRs ZTsKKwkJZi5waXRjaGVzWzBdID0gZC0+ZmIxX252MTIuc3RyaWRlOworCQlmLm1vZGlmaWVyWzBd ID0gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CisJCWYuaGFuZGxlc1sxXSA9IGQtPmZi MV9udjEyLmdlbV9oYW5kbGU7CisJCWYucGl0Y2hlc1sxXSA9IGQtPmZiMV9udjEyLnN0cmlkZTsK KwkJZi5tb2RpZmllclsxXSA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEOworCisJCS8q IHRlc3QgdXYgb2Zmc2V0IG5vdCA0LWxpbmUgYWxpZ25lZCAqLworCQlmLm9mZnNldHNbMV0gPSBk LT5mYjFfbnYxMi51dl9vZmZzZXQgKyBmLnBpdGNoZXNbMV07IC8qIG5vdCA0LWxuIGFsaWduKi8K KwkJaWd0X2Fzc2VydChkcm1Jb2N0bChmZCwgTE9DQUxfRFJNX0lPQ1RMX01PREVfQURERkIyLCAm ZikgIT0gMCk7CisKKwkJLyogdmFsaWQgcGFyYW1zICovCisJCWYub2Zmc2V0c1sxXSA9IGQtPmZi MV9udjEyLnV2X29mZnNldDsKKwkJaWd0X2Fzc2VydChkcm1Jb2N0bChmZCwgTE9DQUxfRFJNX0lP Q1RMX01PREVfQURERkIyLCAmZikgPT0gMCk7CisKKwkJdmFsaWRfdGVzdHMrKzsKKworCQljbGVh bnVwX2NydGMoZCwgb3V0cHV0LCBkLT5wbGFuZTEpOworCX0KKwlpZ3RfcmVxdWlyZV9mKHZhbGlk X3Rlc3RzLCAibm8gdmFsaWQgY3J0Yy9jb25uZWN0b3IgY29tYmluYXRpb25zIGZvdW5kXG4iKTsK K30KKworaWd0X21haW4KK3sKKwlkYXRhX3QgZGF0YSA9IHt9OworCWlndF9za2lwX29uX3NpbXVs YXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9hbnko KTsKKworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJaWd0X2Rpc3BsYXlf aW5pdCgmZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9mZCk7CisKKwkJZGV2aWQgPSBpbnRlbF9nZXRf ZHJtX2RldmlkKGRhdGEuZHJtX2ZkKTsKKwkJZGF0YS5udW1fc2NhbGVycyA9IGludGVsX2dlbihk ZXZpZCkgPj0gOSA/IDIgOiAwOworCQlkYXRhLm51bV9wbGFuZXMgPSAyOworCQlpZ3RfYXNzZXJ0 KGludGVsX2dlbihkZXZpZCkgPj0gOSk7CisJfQorCisJZGF0YS5yb3RhdGlvbiA9IElHVF9ST1RB VElPTl8wOworCWlndF9zdWJ0ZXN0X2YoIm52MTItcGxhbmUtbGluZWFyIikgeworCQlkYXRhLnRp bGVkID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKKwkJdGVzdF9udjEyX3BsYW5lKCZkYXRh KTsKKwl9CisJaWd0X3N1YnRlc3RfZigibnYxMi1wbGFuZS10aWxlLXgiKSB7CisJCWRhdGEudGls ZWQgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKKwkJdGVzdF9udjEyX3BsYW5lKCZk YXRhKTsKKwl9CisJaWd0X3N1YnRlc3RfZigibnYxMi1wbGFuZS10aWxlLXkiKSB7CisJCWRhdGEu dGlsZWQgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKKwkJdGVzdF9udjEyX3BsYW5l KCZkYXRhKTsKKwl9CisKKwlkYXRhLnJvdGF0aW9uID0gSUdUX1JPVEFUSU9OXzE4MDsKKwlpZ3Rf c3VidGVzdF9mKCJudjEyLXBsYW5lLWxpbmVhci1yb3QtMTgwIikgeworCQlkYXRhLnRpbGVkID0g TE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKKwkJdGVzdF9udjEyX3BsYW5lKCZkYXRhKTsKKwl9 CisJaWd0X3N1YnRlc3RfZigibnYxMi1wbGFuZS10aWxlLXgtcm90LTE4MCIpIHsKKwkJZGF0YS50 aWxlZCA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEOworCQl0ZXN0X252MTJfcGxhbmUo JmRhdGEpOworCX0KKwlpZ3Rfc3VidGVzdF9mKCJudjEyLXBsYW5lLXRpbGUteS1yb3QtMTgwIikg eworCQlkYXRhLnRpbGVkID0gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ7CisJCXRlc3Rf bnYxMl9wbGFuZSgmZGF0YSk7CisJfQorCisJZGF0YS5yb3RhdGlvbiA9IElHVF9ST1RBVElPTl85 MDsKKwlpZ3Rfc3VidGVzdF9mKCJudjEyLXBsYW5lLXRpbGUteS1yb3QtOTAiKSB7CisJCWRhdGEu dGlsZWQgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKKwkJdGVzdF9udjEyX3BsYW5l X3JvdGF0aW9uXzkwX29yXzI3MCgmZGF0YSk7CisJfQorCisJZGF0YS5yb3RhdGlvbiA9IElHVF9S T1RBVElPTl8yNzA7CisJaWd0X3N1YnRlc3RfZigibnYxMi1wbGFuZS10aWxlLXktcm90LTI3MCIp IHsKKwkJZGF0YS50aWxlZCA9IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEOworCQl0ZXN0 X252MTJfcGxhbmVfcm90YXRpb25fOTBfb3JfMjcwKCZkYXRhKTsKKwl9CisKKwlpZ3Rfc3VidGVz dF9mKCJudjEyLW9uLXVuc3VwcG9ydGVkLXBsYW5lIikgeworCQlkYXRhLnRpbGVkID0gTE9DQUxf STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOworCQl0ZXN0X252MTJfdW5zdXBwb3J0ZWRfcGxhbmUo JmRhdGEpOworCX0KKworCWlndF9zdWJ0ZXN0X2YoIm52MTItaW52YWxpZC1mYi1wYXJhbXMiKSB7 CisJCWRhdGEudGlsZWQgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7CisJCXRlc3Rf bnYxMl9pbnZhbGlkX2ZiX3BhcmFtcygmZGF0YSk7CisJfQorCisJaWd0X2ZpeHR1cmUgeworCQlp Z3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCX0KK30KLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=