From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id B4F056EB3C for ; Wed, 28 Jul 2021 15:12:52 +0000 (UTC) From: Andrzej Turko Date: Wed, 28 Jul 2021 17:12:04 +0200 Message-Id: <20210728151207.5322-3-andrzej.turko@linux.intel.com> In-Reply-To: <20210728151207.5322-1-andrzej.turko@linux.intel.com> References: <20210728151207.5322-1-andrzej.turko@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 2/5] lib/igt_bst: Add a BST interface and an AVL implementation 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 List-ID: VGhpcyBhZGRzIGFuIGVmZmljaWVudCBiaW5hcnkgc2VhcmNoIHRyZWUgaW1wbGVtZW50YXRpb24K aW4gb3JkZXIgdG8gc3VwcG9ydCBhbiBhbGxvY2F0b3Igd2l0aCBiZXN0LWZpdCBzdHJhdGVneS4K ClNpZ25lZC1vZmYtYnk6IEFuZHJ6ZWogVHVya28gPGFuZHJ6ZWoudHVya29AbGludXguaW50ZWwu Y29tPgpDYzogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRl bC5jb20+Ci0tLQogbGliL2lndF9ic3QuYyAgICAgfCAxNTcgKysrKysrKysrKysKIGxpYi9pZ3Rf YnN0LmggICAgIHwgIDY5ICsrKysrCiBsaWIvaWd0X2JzdF9hdmwuYyB8IDY1MSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvbWVzb24uYnVpbGQgICB8 ICAgMiArCiA0IGZpbGVzIGNoYW5nZWQsIDg3OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliL2lndF9ic3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfYnN0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2JzdF9hdmwuYwoKZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf YnN0LmMgYi9saWIvaWd0X2JzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MC4uYTI0ODU5MjEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9ic3QuYwpAQCAtMCwwICsx LDE1NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdo dCDCqSAyMDIxIEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImlndF9ic3QuaCIK KworCisvKioKKyAqIGlndF9ic3RfaW5zZXJ0CisgKiBAYnN0OiBpZ3RfYnN0IHBvaW50ZXIKKyAq IEB2YWx1ZTogYSBwb2ludGVyIHZhbHVlIGJlaW5nIGluc2VydGVkCisgKiBAa2V5OiB0aGUga2V5 IHVuZGVyIHdoaWNoIHRoZSB2YWx1ZSBzaG91bGQgYmUgc3RvcmVkCisgKgorICogSW5zZXJ0cyBh IG5ldyB2YWx1ZSB0byB0aGUgYnN0LgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUg bmV3bHkgY3JlYXRlZCBub2RlLgorICovCit2b2lkICppZ3RfYnN0X2luc2VydChzdHJ1Y3QgaWd0 X2JzdCAqYnN0LCB2b2lkICp2YWx1ZSwgdWludDY0X3Qga2V5KQoreworCXJldHVybiBic3QtPmlu c2VydChic3QsIHZhbHVlLCBrZXkpOworfQorCisvKioKKyAqIGlndF9ic3RfZXJhc2UKKyAqIEBi c3Q6IGlndF9ic3QgcG9pbnRlcgorICogQG5vZGVwdHI6IGEgcG9pbnRlciB0byBhIG5vZGUgaW4g dGhlIGJzdAorICoKKyAqIEVyYXNlcyB0aGUgaW5kaWNhdGVkIG5vZGUuCisgKgorICogUmV0dXJu czogdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIGVyYXNlZCBub2RlLgorICovCit2 b2lkICppZ3RfYnN0X2VyYXNlKHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5vZGVwdHIpCit7 CisJcmV0dXJuIGJzdC0+ZXJhc2UoYnN0LCBub2RlcHRyKTsKK30KKworLyoqCisgKiBpZ3RfYnN0 X3F1ZXJ5X3N1Y2Nlc3NvcgorICogQGJzdDogaWd0X2JzdCBwb2ludGVyCisgKiBAa2V5OiBhbiBh cmJpdHJhcnkga2V5CisgKgorICogQW1vbmcgdGhlIGVsZW1lbnRzIGN1cnJlbnRseSBwcmVzZW50 IGluIHRoZSBic3QsCisgKiBmaW5kcyB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXN0IGtleSBub3Qg c21hbGxlciB0aGFuCisgKiB0aGUgZ2l2ZW4ga2V5LgorICoKKyAqIFJldHVybnM6IGEgdmFsdWUg YXNzb2NpYXRlZCB3aXRoIHRoZSBmb3VuZCBlbGVtZW50LAorICogTlVMTCBpZiBhbGwga2V5cyBp biB0aGUgdHJlZSBhcmUgc21hbGxlciB0aGFuIHRoZSBrZXkKKyAqIHBhcmFtZXRlci4KKyAqLwor dm9pZCAqaWd0X2JzdF9xdWVyeV9zdWNjZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwgdWludDY0 X3Qga2V5KQoreworCXJldHVybiBic3QtPnF1ZXJ5X3N1Y2Nlc3Nvcihic3QsIGtleSk7Cit9CisK Ky8qKgorICogaWd0X2JzdF9xdWVyeV9zdWNjZXNzb3IKKyAqIFNpbWlsYXIgdG8gaWd0X2JzdF9x dWVyeV9wcmVkZWNlc3NvciwgYnV0IGxvb2tzIGZvciBhbgorICogZWxlbWVudCB3aXRoIHRoZSBn cmVhdGVzdCBrZXkgbm90IGV4Y2VlZGluZyB0aGUgcGFyYW1ldGVyLgorICovCit2b2lkICppZ3Rf YnN0X3F1ZXJ5X3ByZWRlY2Vzc29yKHN0cnVjdCBpZ3RfYnN0ICpic3QsIHVpbnQ2NF90IGtleSkK K3sKKwlyZXR1cm4gYnN0LT5xdWVyeV9wcmVkZWNlc3Nvcihic3QsIGtleSk7Cit9CisKKy8qKgor ICogaWd0X2JzdF9wb3Bfc3VjY2Vzc29yCisgKiBMaWtlIGlndF9ic3RfcXVlcnlfc3VjY2Vzc29y LCBidXQgYWxzbyByZW1vdmVzIHRoZQorICogZm91bmQgZWxlbWVudCBmcm9tIHRoZSBic3QuCisg Ki8KK3ZvaWQgKmlndF9ic3RfcG9wX3N1Y2Nlc3NvcihzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB1aW50 NjRfdCBrZXkpCit7CisJcmV0dXJuIGJzdC0+cG9wX3N1Y2Nlc3Nvcihic3QsIGtleSk7Cit9CisK Ky8qKgorICogaWd0X2JzdF9wb3BfcHJlZGVjZXNzb3IKKyAqIExpa2UgaWd0X2JzdF9xdWVyeV9w cmVkZWNlc3NvciwgYnV0IGFsc28gcmVtb3ZlcyB0aGUKKyAqIGZvdW5kIGVsZW1lbnQgZnJvbSB0 aGUgYnN0LgorICovCit2b2lkICppZ3RfYnN0X3BvcF9wcmVkZWNlc3NvcihzdHJ1Y3QgaWd0X2Jz dCAqYnN0LCB1aW50NjRfdCBrZXkpCit7CisJcmV0dXJuIGJzdC0+cG9wX3ByZWRlY2Vzc29yKGJz dCwga2V5KTsKK30KKworLyogY2hlY2sgd2hldGhlciB0aGUgYnN0IGNvbnRhaW5zIGFueSBlbGVt ZW50cyAqLworYm9vbCBpZ3RfYnN0X2VtcHR5KHN0cnVjdCBpZ3RfYnN0ICpic3QpCit7CisJcmV0 dXJuIGJzdC0+YnN0X2VtcHR5KGJzdCk7Cit9CisKKy8qIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9t IHRoZSBlbGVtZW50IGluIHRoZSBic3QgZ2l2ZW4gYnkgdGhlIHBvaW50ZXIgdG8gaXRzIG5vZGUg Ki8KK3ZvaWQgKmlndF9ic3RfZ2V0X3ZhbHVlKHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5v ZGVwdHIpCit7CisJcmV0dXJuIGJzdC0+Z2V0X3ZhbHVlKG5vZGVwdHIpOworfQorCisvKiByZXRy aWV2ZSB0aGUga2V5IGZyb20gdGhlIGVsZW1lbnQgdGhlIGJzdCBnaXZlbiBieSB0aGUgcG9pbnRl ciB0byBpdHMgbm9kZSAqLwordWludDY0X3QgaWd0X2JzdF9nZXRfa2V5KHN0cnVjdCBpZ3RfYnN0 ICpic3QsIHZvaWQgKm5vZGVwdHIpCit7CisJcmV0dXJuIGJzdC0+Z2V0X2tleShub2RlcHRyKTsK K30KKworLyoqCisgKiBpZ3RfYnN0X2xlZnRtb3N0X2VudHJ5CisgKiBAYnN0OiBpZ3RfYnN0IHBv aW50ZXIKKyAqCisgKiBGaW5kcyBhbiBlbGVtZW50IGluIHRoZSBic3Qgd2l0aCB0aGUgc21hbGxl c3Qga2V5LgorICoKKyAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgZm91bmQgbm9kZSwKKyAq IE5VTEwgaWYgdGhlIGJzdCBpcyBlbXB0eS4KKyAqLwordm9pZCAqaWd0X2JzdF9sZWZ0bW9zdF9l bnRyeShzdHJ1Y3QgaWd0X2JzdCAqYnN0KQoreworCXJldHVybiBic3QtPmxlZnRtb3N0X2VudHJ5 KGJzdCk7Cit9CisKKy8qKgorICogaWd0X2JzdF9yaWdodG1vc3RfZW50cnkKKyAqIFNlZSBpZ3Rf YnN0X2xlZnRtb3N0X2VudHJ5LgorICovCit2b2lkICppZ3RfYnN0X3JpZ2h0bW9zdF9lbnRyeShz dHJ1Y3QgaWd0X2JzdCAqYnN0KQoreworCXJldHVybiBic3QtPnJpZ2h0bW9zdF9lbnRyeShic3Qp OworfQorCisvKioKKyAqIGlndF9ic3RfbmV4dF9lbnRyeQorICogQGJzdDogaWd0X2JzdCBwb2lu dGVyCisgKiBAbm9kZXB0cjogYSBwb2ludGVyIHRvIGEgbm9kZSBpbiB0aGUgYnN0CisgKgorICog RmluZHMgdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgYnN0IGluIHRoZQorICogbm9uZGVjcmVhc2lu ZyBvcmRlciBvZiBrZXlzLgorICogQ2FuIGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbGVt ZW50cy4KKyAqCisgKiBSZXR1bnM6IGEgcG9pbnRlciB0byB0aGUgbmV4dCBub2RlIGluIHRoZSBi c3QsCisgKiBOVUxMIGlmIG5vZGVwdHIgcG9pbnRzIHRvIHRoZSBsYXN0IG5vZGUuCisgKi8KK3Zv aWQgKmlndF9ic3RfbmV4dF9lbnRyeShzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB2b2lkICpub2RlcHRy KQoreworCXJldHVybiBic3QtPm5leHRfZW50cnkobm9kZXB0cik7Cit9CisKKy8qKgorICogaWd0 X2JzdF9wcmV2X2VudHJ5CisgKiBMaWtlIGlndF9ic3RfbmV4dF9lbnRyeSwgYnV0IHJldHVybnMg dGhlIHByZXZpb3VzIG5vZGUuCisgKi8KK3ZvaWQgKmlndF9ic3RfcHJldl9lbnRyeShzdHJ1Y3Qg aWd0X2JzdCAqYnN0LCB2b2lkICpub2RlcHRyKQoreworCXJldHVybiBic3QtPnByZXZfZW50cnko bm9kZXB0cik7Cit9CisKK3ZvaWQgaWd0X2JzdF9mcmVlKHN0cnVjdCBpZ3RfYnN0ICpic3QpCit7 CisJYnN0LT5ic3RfZnJlZShic3QpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9ic3QuaCBiL2xp Yi9pZ3RfYnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5mNTRmY2E1 MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2JzdC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMSBJ bnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JR1RfQlNUX0gKKyNkZWZpbmUgX19J R1RfQlNUX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKwor LyoqCisgKiBTRUNUSU9OOiBpZ3RfYnN0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IGEgYmluYXJ5 IHNlYXJjaCB0cmVlIGludGVyZmFjZQorICogQHRpdGxlOiBJR1QgQnN0CisgKiBAaW5jbHVkZTog aWd0X2JzdC5oCisgKgorICogVGhpcyBpbnRlcmZhY2Ugb3BlcmF0ZXMgb24gYmluYXJ5IHJlYXJj aCB0cmVlcworICogd2hpY2ggc3RvcmUgdm9pZCBwb2ludGVycyBvcmRlcmVkIGJ5IHVpbnQ2NF90 IGtleXMuCisgKi8KKworc3RydWN0IGlndF9ic3QgeworCisJLyogcHJpdmF0ZSBzdHJ1Y3R1cmUg b2YgdGhlIEJTVCAqLworCXZvaWQgKnByaXY7CisKKwl2b2lkKiAoKmluc2VydCkoc3RydWN0IGln dF9ic3QgKmJzdCwgdm9pZCAqdmFsdWUsIHVpbnQ2NF90IGtleSk7CisJdm9pZCogKCplcmFzZSko c3RydWN0IGlndF9ic3QgKmJzdCwgdm9pZCAqbm9kZXB0cik7CisJdm9pZCogKCpwb3Bfc3VjY2Vz c29yKShzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB1aW50NjRfdCBrZXkpOworCXZvaWQqICgqcG9wX3By ZWRlY2Vzc29yKShzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB1aW50NjRfdCBrZXkpOworCXZvaWQqICgq cXVlcnlfc3VjY2Vzc29yKShzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB1aW50NjRfdCBrZXkpOworCXZv aWQqICgqcXVlcnlfcHJlZGVjZXNzb3IpKHN0cnVjdCBpZ3RfYnN0ICpic3QsIHVpbnQ2NF90IGtl eSk7CisJYm9vbCAoKmJzdF9lbXB0eSkoc3RydWN0IGlndF9ic3QgKmJzdCk7CisJdm9pZCogKCpn ZXRfdmFsdWUpKHZvaWQgKm5vZGVwdHIpOworCXVpbnQ2NF90ICgqZ2V0X2tleSkodm9pZCAqbm9k ZXB0cik7CisJdm9pZCogKCpsZWZ0bW9zdF9lbnRyeSkoc3RydWN0IGlndF9ic3QgKmJzdCk7CisJ dm9pZCogKCpyaWdodG1vc3RfZW50cnkpKHN0cnVjdCBpZ3RfYnN0ICpic3QpOworCXZvaWQqICgq bmV4dF9lbnRyeSkodm9pZCAqbm9kZXB0cik7CisJdm9pZCogKCpwcmV2X2VudHJ5KSh2b2lkICpu b2RlcHRyKTsKKwl2b2lkICgqYnN0X2ZyZWUpKHN0cnVjdCBpZ3RfYnN0ICpic3QpOworCWludCAo KnZhbGlkYXRlKShzdHJ1Y3QgaWd0X2JzdCAqYnN0KTsKK307CisKKy8qIGNvbnRydWN0b3JzICov CitzdHJ1Y3QgaWd0X2JzdCAqaWd0X2JzdF9hdmxfY3JlYXRlKHZvaWQpOworCisjZGVmaW5lIGln dF9ic3RfZm9yX2VhY2hfbm9kZShic3QsIG5vZGVwdHIpIFwKKwlmb3IgKChub2RlcHRyKSA9IChi c3QpLT5sZWZ0bW9zdF9lbnRyeShic3QpOyAobm9kZXB0cik7IChub2RlcHRyKSA9IChic3QpLT5u ZXh0X2VudHJ5KG5vZGVwdHIpKQorCisjZGVmaW5lIGlndF9ic3RfZm9yX2VhY2hfbm9kZV9yZXYo YnN0LCBub2RlcHRyKSBcCisJZm9yICgobm9kZXB0cikgPSAoYnN0KS0+cmlnaHRtb3N0X2VudHJ5 KGJzdCk7IChub2RlcHRyKTsgKG5vZGVwdHIpID0gKGJzdCktPnByZXZfZW50cnkobm9kZXB0cikp CisKKwordm9pZCAqaWd0X2JzdF9pbnNlcnQoc3RydWN0IGlndF9ic3QgKmJzdCwgdm9pZCAqdmFs dWUsIHVpbnQ2NF90IGtleSk7Cit2b2lkICppZ3RfYnN0X2VyYXNlKHN0cnVjdCBpZ3RfYnN0ICpi c3QsIHZvaWQgKm5vZGVwdHIpOwordm9pZCAqaWd0X2JzdF9xdWVyeV9zdWNjZXNzb3Ioc3RydWN0 IGlndF9ic3QgKmJzdCwgdWludDY0X3Qga2V5KTsKK3ZvaWQgKmlndF9ic3RfcXVlcnlfcHJlZGVj ZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwgdWludDY0X3Qga2V5KTsKK3ZvaWQgKmlndF9ic3Rf cG9wX3N1Y2Nlc3NvcihzdHJ1Y3QgaWd0X2JzdCAqYnN0LCB1aW50NjRfdCBrZXkpOwordm9pZCAq aWd0X2JzdF9wb3BfcHJlZGVjZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwgdWludDY0X3Qga2V5 KTsKK2Jvb2wgaWd0X2JzdF9lbXB0eShzdHJ1Y3QgaWd0X2JzdCAqYnN0KTsKK3ZvaWQgKmlndF9i c3RfZ2V0X3ZhbHVlKHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5vZGVwdHIpOwordWludDY0 X3QgaWd0X2JzdF9nZXRfa2V5KHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5vZGVwdHIpOwor dm9pZCAqaWd0X2JzdF9sZWZ0bW9zdF9lbnRyeShzdHJ1Y3QgaWd0X2JzdCAqYnN0KTsKK3ZvaWQg KmlndF9ic3RfcmlnaHRtb3N0X2VudHJ5KHN0cnVjdCBpZ3RfYnN0ICpic3QpOwordm9pZCAqaWd0 X2JzdF9uZXh0X2VudHJ5KHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5vZGVwdHIpOwordm9p ZCAqaWd0X2JzdF9wcmV2X2VudHJ5KHN0cnVjdCBpZ3RfYnN0ICpic3QsIHZvaWQgKm5vZGVwdHIp Owordm9pZCBpZ3RfYnN0X2ZyZWUoc3RydWN0IGlndF9ic3QgKmJzdCk7CisKKyNlbmRpZiAvKiBJ R1RfQlNUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYnN0X2F2bC5jIGIvbGliL2lndF9ic3Rf YXZsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi43MjQ1YTc5OGQKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2JzdF9hdmwuYwpAQCAtMCwwICsxLDY1MSBAQAorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIxIElu dGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9i c3QuaCIKKworLy8jZGVmaW5lIEFWTERCRworI2lmZGVmIEFWTERCRworI2RlZmluZSBhdmxfZGVi dWcoLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIGF2bF9hc3NlcnQg aWd0X2Fzc2VydAorI2RlZmluZSBhdmxfYXNzZXJ0X2YgaWd0X2Fzc2VydF9mCisjZWxzZQorI2Rl ZmluZSBhdmxfZGVidWcoLi4uKSB7fQorI2RlZmluZSBhdmxfYXNzZXJ0KC4uLikge30KKyNkZWZp bmUgYXZsX2Fzc2VydF9mKC4uLikge30KKyNlbmRpZgorCitzdHJ1Y3QgaWd0X2F2bF9ub2RlIHsK Kwl1aW50NjRfdCBrZXk7CisKKwlzdHJ1Y3QgaWd0X2F2bF9ub2RlICpsZWZ0OworCXN0cnVjdCBp Z3RfYXZsX25vZGUgKnJpZ2h0OworCXN0cnVjdCBpZ3RfYXZsX25vZGUgKnBhcmVudDsKKworCWlu dDMyX3QgaGVpZ2h0OworCisJdm9pZCAqdmFsdWU7Cit9OworCitzdHJ1Y3QgaWd0X2F2bCB7CisJ c3RydWN0IGlndF9hdmxfbm9kZSAqcm9vdDsKK307CisKK3N0YXRpYyBpbnQgX190cmF2ZXJzZV92 YWxpZGF0ZShzdHJ1Y3QgaWd0X2F2bF9ub2RlICpub2RlKQoreworCWludDMyX3Qgbm9kZV9iYWxh bmNlLCBsZWZ0X2gsIHJpZ2h0X2g7CisJaW50IG4gPSAxOworCisJaWd0X2Fzc2VydChub2RlKTsK KworCWxlZnRfaCA9IDA7CisJcmlnaHRfaCA9IDA7CisKKwlhdmxfZGVidWcoImF0IDB4JWxseCA6 IDwga2V5ICVsbHUsIHZhbHVlIDB4JWxseCA+XG5sZWZ0IDB4JWxseCA7IHJpZ2h0IDB4JWxseFxu IiwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKW5vZGUsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9u Zylub2RlLT5rZXksCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylub2RlLT52YWx1ZSwKKwkJICAo dW5zaWduZWQgbG9uZyBsb25nKW5vZGUtPmxlZnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylu b2RlLT5yaWdodCk7CisKKwlpZiAobm9kZS0+bGVmdCkgeworCQlpZ3RfYXNzZXJ0KG5vZGUtPmxl ZnQtPnBhcmVudCA9PSBub2RlKTsKKwkJaWd0X2Fzc2VydF9mKG5vZGUtPmtleSA+PSBub2RlLT5s ZWZ0LT5rZXksCisJCQkgICAgICJUaGUgb3JkZXIgb2Yga2V5cyBpcyBub3QgcHJlc2VydmVkIGlu IHRoZSBBVkwgdHJlZSIpOworCQlsZWZ0X2ggPSBub2RlLT5sZWZ0LT5oZWlnaHQ7CisJCW4gKz0g X190cmF2ZXJzZV92YWxpZGF0ZShub2RlLT5sZWZ0KTsKKwl9CisKKwlpZiAobm9kZS0+cmlnaHQp IHsKKwkJaWd0X2Fzc2VydChub2RlLT5yaWdodC0+cGFyZW50ID09IG5vZGUpOworCQlpZ3RfYXNz ZXJ0X2Yobm9kZS0+cmlnaHQtPmtleSA+PSBub2RlLT5rZXksCisJCQkgICAgICJUaGUgb3JkZXIg b2Yga2V5cyBpcyBub3QgcHJlc2VydmVkIGluIHRoZSBBVkwgdHJlZSIpOworCQlyaWdodF9oID0g bm9kZS0+cmlnaHQtPmhlaWdodDsKKwkJbiArPSBfX3RyYXZlcnNlX3ZhbGlkYXRlKG5vZGUtPnJp Z2h0KTsKKwl9CisKKwlub2RlX2JhbGFuY2UgPSBsZWZ0X2ggLSByaWdodF9oOworCWlndF9hc3Nl cnQobm9kZV9iYWxhbmNlIDw9IDEgJiYgbm9kZV9iYWxhbmNlID49IC0xKTsKKwlpZ3RfYXNzZXJ0 KG5vZGUtPmhlaWdodCA9PSAobGVmdF9oID4gcmlnaHRfaCA/IGxlZnRfaCA6IHJpZ2h0X2gpICsg MSk7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBhdmxfdmFsaWRhdGUoc3RydWN0IGln dF9ic3QgKmJzdCkKK3sKKwlzdHJ1Y3QgaWd0X2F2bCAqYXZsID0gYnN0LT5wcml2OworCisJYXZs X2RlYnVnKCJUcmVlIHRyYXZlcnNhbDpcbiIpOworCisJLyogYW4gZW1wdHkgdHJlZSAqLworCWlm IChhdmwtPnJvb3QgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZ3RfYXNzZXJ0KCFhdmwtPnJv b3QtPnBhcmVudCk7CisJcmV0dXJuIF9fdHJhdmVyc2VfdmFsaWRhdGUoYXZsLT5yb290KTsKK30K KworLyogZml4IGJhbGFuY2Ugb2YgYWxsIHZlcnRpY2VzIGZyb20gdGhlIGdpdmVuIG5vZGUgdG8g dGhlIHJvb3QgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F2bF9maXhfYmFsYW5jZShzdHJ1Y3Qg aWd0X2F2bCAqYXZsLCBzdHJ1Y3QgaWd0X2F2bF9ub2RlICpub2RlKQoreworCXN0cnVjdCBpZ3Rf YXZsX25vZGUgKmxlZnQsICpyaWdodCwgKmxfbGVmdCwgKmxfcmlnaHQsICpyX2xlZnQsICpyX3Jp Z2h0OworCWludDMyX3QgbGVmdF9oLCByaWdodF9oLCBsX2xlZnRfaCwgbF9yaWdodF9oLCByX2xl ZnRfaCwgcl9yaWdodF9oOworCWludDMyX3QgYmFsYW5jZSwgbm9kZV9oOworCisJd2hpbGUgKG5v ZGUpIHsKKworCQlub2RlX2ggPSBub2RlLT5oZWlnaHQ7CisJCWxlZnQgPSBub2RlLT5sZWZ0Owor CQlsZWZ0X2ggPSAobGVmdCA/IGxlZnQtPmhlaWdodCA6IDApOworCQlyaWdodCA9IG5vZGUtPnJp Z2h0OworCQlyaWdodF9oID0gKHJpZ2h0ID8gcmlnaHQtPmhlaWdodCA6IDApOworCQliYWxhbmNl ID0gbGVmdF9oIC0gcmlnaHRfaDsKKworCQlhdmxfZGVidWcoIkNvcnJlY3RpbmcgYSBub2RlIHdp dGgga2V5ICVsbHUgYXQgMHglbGx4ICglbGx1KVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25n KW5vZGUtPmtleSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylub2RlLAorCQkJICAqKCh1bnNp Z25lZCBsb25nIGxvbmcgKilub2RlLT52YWx1ZSkpOworCQlhdmxfZGVidWcoIkhlaWdodHM6ICVk IFslZCAlZF0gOiBiYWxhbmNlICVkXG4iLAorCQkJICBub2RlX2gsIGxlZnRfaCwgcmlnaHRfaCwg YmFsYW5jZSk7CisKKwkJaWYgKGJhbGFuY2UgPiAxKSB7CisJCQlhdmxfYXNzZXJ0KGJhbGFuY2Ug PT0gMik7CisJCQlhdmxfYXNzZXJ0KGxlZnQpOworCisJCQkvKiAxc3QgY2FzZTogbGVmdCBzb24n cyBzdWJ0cmVlIGlzIHRvbyBoaWdoICovCisJCQlsX2xlZnQgPSBsZWZ0LT5sZWZ0OworCQkJbF9s ZWZ0X2ggPSAobF9sZWZ0ID8gbF9sZWZ0LT5oZWlnaHQgOiAwKTsKKwkJCWxfcmlnaHQgPSBsZWZ0 LT5yaWdodDsKKwkJCWxfcmlnaHRfaCA9IChsX3JpZ2h0ID8gbF9yaWdodC0+aGVpZ2h0IDogMCk7 CisKKwkJCWlmIChsX3JpZ2h0X2ggPiBsX2xlZnRfaCkgeworCQkJCWF2bF9hc3NlcnQobF9yaWdo dF9oID09IHJpZ2h0X2ggKyAxKTsKKwkJCQlhdmxfYXNzZXJ0KGxfbGVmdF9oID09IHJpZ2h0X2gp OworCQkJCWF2bF9hc3NlcnQobF9yaWdodCk7CisKKwkJCQkvKgorCQkJCSAqIGxlZnQgc29uJ3Mg KGxlZnQncykgcmlnaHQgc29uIChsX3JpZ2h0KSBpcyB0b28gaGlnaCwKKwkJCQkgKiByb3RhdGUg dGhlIGxlZnQgc29uIGFuZCBpdHMgcmlnaHQgc29uCisJCQkJICoKKwkJCQkgKiAgICAgICBOICAg ICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgIE4KKwkJCQkgKiAgICAgIC8gICAgICAgICAg ICAgICAgIC8gICAgICAgICAgICAgICAgLworCQkJCSAqICAgICBMICAgIChyb3RhdGUpICAgICBM UiAgICAocmVuYW1lKSAgIEwKKwkJCQkgKiAgICAvIFwgICAgLS0tLS0+ICAgICAvICBcICAgIC0t LS0tPiAgIC8gXAorCQkJCSAqICBMTCAgTFIgICAgICAgICAgICAgTCAgIExSUiAgICAgICAgICBM TCAgTFIKKwkJCQkgKiAgICAgLyAgXCAgICAgICAgICAgLyBcCisJCQkJICogICBMUkwgIExSUiAg ICAgICAgTEwgIExSTAorCQkJCSAqCisJCQkJICovCisKKwkJCQlsZWZ0LT5yaWdodCA9IGxfcmln aHQtPmxlZnQ7CisJCQkJaWYgKGxfcmlnaHQtPmxlZnQpCisJCQkJCWxfcmlnaHQtPmxlZnQtPnBh cmVudCA9IGxlZnQ7CisJCQkJbF9yaWdodC0+cGFyZW50ID0gbm9kZTsKKwkJCQlub2RlLT5sZWZ0 ID0gbF9yaWdodDsKKwkJCQlsX3JpZ2h0LT5sZWZ0ID0gbGVmdDsKKwkJCQlsZWZ0LT5wYXJlbnQg PSBsX3JpZ2h0OworCisJCQkJbF9sZWZ0ID0gbGVmdDsKKwkJCQlsZWZ0ID0gbF9yaWdodDsKKwkJ CQlsX3JpZ2h0ID0gbF9yaWdodC0+cmlnaHQ7CisKKwkJCQlsX2xlZnRfaCA9IC0tbF9sZWZ0LT5o ZWlnaHQ7CisJCQkJbF9yaWdodF9oID0gKGxfcmlnaHQgPyBsX3JpZ2h0LT5oZWlnaHQgOiAwKTsK KwkJCQlsZWZ0X2ggPSArK2xlZnQtPmhlaWdodDsKKwkJCX0KKworCQkJYXZsX2Fzc2VydChsZWZ0 KTsKKwkJCWF2bF9hc3NlcnQobGVmdF9oID09IHJpZ2h0X2ggKyAyKTsKKwkJCWF2bF9hc3NlcnQo bF9sZWZ0X2ggPT0gcmlnaHRfaCArIDEpOworCisJCQkvKgorCQkJICogcm90YXRlIHRoZSBub2Rl IGFuZCBpdHMgbGVmdCBzb24KKwkJCSAqCisJCQkgKiAgICAgICB8ICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgIHwKKwkJCSAqICAgICAgIE4gICAgKHJvdGF0ZSkgICBMICAgIChyZW5hbWUp ICAgTgorCQkJICogICAgICAvIFwgICAgLS0tLS0+ICAgLyBcICAgIC0tLS0tPiAgIC8gXAorCQkJ ICogICAgIEwgICBSICAgICAgICAgICBMTCAgTiAgICAgICAgICAuLi4gLi4uCisJCQkgKiAgICAv IFwgICAgICAgICAgICAgICAgIC8gXAorCQkJICogIExMICBMUiAgICAgICAgICAgICAgIExSICBS CisJCQkgKgorCQkJICovCisKKwkJCW5vZGUtPmxlZnQgPSBsX3JpZ2h0OworCQkJaWYgKGxfcmln aHQpCisJCQkJbF9yaWdodC0+cGFyZW50ID0gbm9kZTsKKwkJCWxlZnQtPnBhcmVudCA9IG5vZGUt PnBhcmVudDsKKwkJCWlmIChub2RlLT5wYXJlbnQpIHsKKwkJCQlpZiAobm9kZS0+cGFyZW50LT5s ZWZ0ID09IG5vZGUpCisJCQkJCW5vZGUtPnBhcmVudC0+bGVmdCA9IGxlZnQ7CisJCQkJZWxzZQor CQkJCQlub2RlLT5wYXJlbnQtPnJpZ2h0ID0gbGVmdDsKKworCQkJfSBlbHNlIHsKKwkJCQlhdmwt PnJvb3QgPSBsZWZ0OworCQkJfQorCQkJbm9kZS0+cGFyZW50ID0gbGVmdDsKKwkJCWxlZnQtPnJp Z2h0ID0gbm9kZTsKKworCQkJbm9kZS0+aGVpZ2h0ID0gKGxfcmlnaHRfaCA+IHJpZ2h0X2ggPyBs X3JpZ2h0X2ggOiByaWdodF9oKSArIDE7CisJCQlsZWZ0LT5oZWlnaHQgPSAobm9kZS0+aGVpZ2h0 ID4gbF9sZWZ0X2ggPyBub2RlLT5oZWlnaHQgOiBsX2xlZnRfaCkgKyAxOworCisJCQlub2RlID0g bGVmdDsKKwkJfQorCisKKwkJaWYgKGJhbGFuY2UgPCAtMSkgeworCQkJYXZsX2Fzc2VydChiYWxh bmNlID09IC0yKTsKKwkJCWF2bF9hc3NlcnQocmlnaHQpOworCisJCQkvKiAybmQgY2FzZTogcmln aHQgc29uJ3Mgc3VidHJlZSBpcyB0b28gaGlnaCAqLworCQkJcl9sZWZ0ID0gcmlnaHQtPmxlZnQ7 CisJCQlyX2xlZnRfaCA9IChyX2xlZnQgPyByX2xlZnQtPmhlaWdodCA6IDApOworCQkJcl9yaWdo dCA9IHJpZ2h0LT5yaWdodDsKKwkJCXJfcmlnaHRfaCA9IChyX3JpZ2h0ID8gcl9yaWdodC0+aGVp Z2h0IDogMCk7CisKKwkJCWlmIChyX2xlZnRfaCA+IHJfcmlnaHRfaCkgeworCQkJCWF2bF9hc3Nl cnQocl9sZWZ0X2ggPT0gbGVmdF9oICsgMSk7CisJCQkJYXZsX2Fzc2VydChyX3JpZ2h0X2ggPT0g bGVmdF9oKTsKKwkJCQlhdmxfYXNzZXJ0KHJfbGVmdCk7CisKKwkJCQkvKgorCQkJCSAqIHJpZ2h0 IHNvbidzIChyaWdodCdzKSBsZWZ0IHNvbiAocl9sZWZ0KSBpcyB0b28gaGlnaCwKKwkJCQkgKiBy b3RhdGUgdGhlIHJpZ2h0IHNvbiBhbmQgaXRzIGxlZnQgc29uLgorCQkJCSAqCisJCQkJICogICAg ICAgTiAgICAgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgTgorCQkJCSAqICAgICAgICBc ICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICBcCisJCQkJICogICAgICAgICBSICAg KHJvdGF0ZSkgICAgICBSTCAgICAocmVuYW1lKSAgICBSCisJCQkJICogICAgICAgIC8gXCAgIC0t LS0tPiAgICAgIC8gIFwgICAgLS0tLS0+ICAgIC8gXAorCQkJCSAqICAgICAgUkwgIFJSICAgICAg ICAgICAgUkxMICAgUiAgICAgICAgICAgIFJMIFJSCisJCQkJICogICAgIC8gIFwgICAgICAgICAg ICAgICAgICAgIC8gXAorCQkJCSAqICAgUkxMICBSTFIgICAgICAgICAgICAgICBSTFIgIFJSCisJ CQkJICoKKwkJCQkgKi8KKworCQkJCXJpZ2h0LT5sZWZ0ID0gcl9sZWZ0LT5yaWdodDsKKwkJCQlp ZiAocl9sZWZ0LT5yaWdodCkKKwkJCQkJcl9sZWZ0LT5yaWdodC0+cGFyZW50ID0gcmlnaHQ7CisJ CQkJcl9sZWZ0LT5wYXJlbnQgPSBub2RlOworCQkJCW5vZGUtPnJpZ2h0ID0gcl9sZWZ0OworCQkJ CXJfbGVmdC0+cmlnaHQgPSByaWdodDsKKwkJCQlyaWdodC0+cGFyZW50ID0gcl9sZWZ0OworCisJ CQkJcl9yaWdodCA9IHJpZ2h0OworCQkJCXJpZ2h0ID0gcl9sZWZ0OworCQkJCXJfbGVmdCA9IHJf bGVmdC0+bGVmdDsKKworCQkJCXJfcmlnaHRfaCA9IC0tcl9yaWdodC0+aGVpZ2h0OworCQkJCXJf bGVmdF9oID0gKHJfbGVmdCA/IHJfbGVmdC0+aGVpZ2h0IDogMCk7CisJCQkJcmlnaHRfaCA9ICsr cmlnaHQtPmhlaWdodDsKKwkJCX0KKworCQkJYXZsX2Fzc2VydChyaWdodCk7CisJCQlhdmxfYXNz ZXJ0KHJpZ2h0X2ggPT0gbGVmdF9oICsgMik7CisJCQlhdmxfYXNzZXJ0KHJfcmlnaHRfaCA9PSBs ZWZ0X2ggKyAxKTsKKworCQkJLyoKKwkJCSAqIHJvdGF0ZSB0aGUgbm9kZSBhbmQgaXRzIHJpZ2h0 IHNvbgorCQkJICoKKwkJCSAqICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg fAorCQkJICogICAgICAgTiAgICAocm90YXRlKSAgIFIgICAgKHJlbmFtZSkgICBOCisJCQkgKiAg ICAgIC8gXCAgICAtLS0tLT4gICAvIFwgICAgLS0tLS0+ICAgLyBcCisJCQkgKiAgICAgTCAgIFIg ICAgICAgICAgIE4gICBSUiAgICAgICAgIC4uLiAuLi4KKwkJCSAqICAgICAgICAvIFwgICAgICAg ICAvIFwKKwkJCSAqICAgICAgUkwgICBSUiAgICAgIEwgIFJMCisJCQkgKgorCQkJICovCisKKwkJ CW5vZGUtPnJpZ2h0ID0gcl9sZWZ0OworCQkJaWYgKHJfbGVmdCkKKwkJCQlyX2xlZnQtPnBhcmVu dCA9IG5vZGU7CisJCQlyaWdodC0+cGFyZW50ID0gbm9kZS0+cGFyZW50OworCQkJaWYgKG5vZGUt PnBhcmVudCkgeworCQkJCWlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkKKwkJCQkJbm9k ZS0+cGFyZW50LT5sZWZ0ID0gcmlnaHQ7CisJCQkJZWxzZQorCQkJCQlub2RlLT5wYXJlbnQtPnJp Z2h0ID0gcmlnaHQ7CisKKwkJCX0gZWxzZSB7CisJCQkJYXZsLT5yb290ID0gcmlnaHQ7CisJCQl9 CisJCQlub2RlLT5wYXJlbnQgPSByaWdodDsKKwkJCXJpZ2h0LT5sZWZ0ID0gbm9kZTsKKworCQkJ bm9kZS0+aGVpZ2h0ID0gKHJfbGVmdF9oID4gbGVmdF9oID8gcl9sZWZ0X2ggOiBsZWZ0X2gpICsg MTsKKwkJCXJpZ2h0LT5oZWlnaHQgPSAobm9kZS0+aGVpZ2h0ID4gcl9yaWdodF9oID8gbm9kZS0+ aGVpZ2h0IDogcl9yaWdodF9oKSArIDE7CisKKwkJCW5vZGUgPSByaWdodDsKKwkJfQorCisJCWlm IChiYWxhbmNlID49IC0xICYmIGJhbGFuY2UgPD0gMSkKKwkJCW5vZGUtPmhlaWdodCA9IChsZWZ0 X2ggPiByaWdodF9oID8gbGVmdF9oIDogcmlnaHRfaCkgKyAxOworCisJCWF2bF9hc3NlcnQobm9k ZS0+aGVpZ2h0IC0gbm9kZV9oID49IC0xICYmIG5vZGUtPmhlaWdodCAtIG5vZGVfaCA8PSAxKTsK KworCQlpZiAobm9kZS0+aGVpZ2h0ID09IG5vZGVfaCkKKwkJCWJyZWFrOworCisJCW5vZGUgPSBu b2RlLT5wYXJlbnQ7CisJfQorfQorCitzdGF0aWMgdm9pZCAqYXZsX2luc2VydChzdHJ1Y3QgaWd0 X2JzdCAqYnN0LCB2b2lkICp2YWx1ZSwgdWludDY0X3Qga2V5KQoreworCXN0cnVjdCBpZ3RfYXZs ICphdmwgPSBic3QtPnByaXY7CisJc3RydWN0IGlndF9hdmxfbm9kZSAqbm9kZSwgKnBhcmVudDsK KworCW5vZGUgPSBhdmwtPnJvb3Q7CisJcGFyZW50ID0gTlVMTDsKKwl3aGlsZSAobm9kZSkgewor CQlwYXJlbnQgPSBub2RlOworCQlpZiAoa2V5IDwgbm9kZS0+a2V5KQorCQkJbm9kZSA9IG5vZGUt PmxlZnQ7CisJCWVsc2UKKwkJCW5vZGUgPSBub2RlLT5yaWdodDsKKwl9CisKKwlub2RlID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgaWd0X2F2bF9ub2RlKSk7CisJaWd0X2Fzc2VydChub2RlKTsKKwlu b2RlLT5rZXkgPSBrZXk7CisJbm9kZS0+cGFyZW50ID0gcGFyZW50OworCW5vZGUtPmxlZnQgPSBO VUxMOworCW5vZGUtPnJpZ2h0ID0gTlVMTDsKKwlub2RlLT5oZWlnaHQgPSAxOworCW5vZGUtPnZh bHVlID0gdmFsdWU7CisJaWYgKHBhcmVudCkgeworCQlpZiAoa2V5IDwgcGFyZW50LT5rZXkpCisJ CQlwYXJlbnQtPmxlZnQgPSBub2RlOworCQllbHNlCisJCQlwYXJlbnQtPnJpZ2h0ID0gbm9kZTsK KworCQlfX2F2bF9maXhfYmFsYW5jZShhdmwsIHBhcmVudCk7CisJfSBlbHNlIHsKKwkJYXZsLT5y b290ID0gbm9kZTsKKwl9CisKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitfX2F2bF9lcmFzZV9ub2RlKHN0cnVjdCBpZ3RfYXZsICphdmwsIHN0cnVjdCBpZ3RfYXZsX25v ZGUgKm5vZGUsCisJCSBzdHJ1Y3QgaWd0X2F2bF9ub2RlICpkZWxfcG9zKQoreworCXN0cnVjdCBp Z3RfYXZsX25vZGUgKnBhcmVudCwgKnNvbjsKKworCWF2bF9hc3NlcnQobm9kZSk7CisJYXZsX2Fz c2VydChkZWxfcG9zKTsKKwlhdmxfYXNzZXJ0KCFkZWxfcG9zLT5sZWZ0IHx8ICFkZWxfcG9zLT5y aWdodCk7CisJc29uID0gKGRlbF9wb3MtPmxlZnQgPyBkZWxfcG9zLT5sZWZ0IDogZGVsX3Bvcy0+ cmlnaHQpOworCXBhcmVudCA9IGRlbF9wb3MtPnBhcmVudDsKKworCWF2bF9kZWJ1ZygiRXJhc2lu ZyBub2RlIDB4JWxseCB3aXRoIHBvc2l0aW9uIDB4JWxseFxuIiwKKwkJICAodW5zaWduZWQgbG9u ZyBsb25nKW5vZGUsICh1bnNpZ25lZCBsb25nIGxvbmcpZGVsX3Bvcyk7CisKKwlpZiAobm9kZSAh PSBkZWxfcG9zKSB7CisJCS8qIG1vdmUgYSBub2RlIGZyb20gdGhlIGRlbGV0ZWQgcG9zaXRpb24K KwkJICogdG8gcGxhY2Ugb2YgdGhlIGRlbGV0ZWQgbm9kZQorCQkgKi8KKworCQlkZWxfcG9zLT5s ZWZ0ID0gbm9kZS0+bGVmdDsKKwkJaWYgKGRlbF9wb3MtPmxlZnQpCisJCQlkZWxfcG9zLT5sZWZ0 LT5wYXJlbnQgPSBkZWxfcG9zOworCQlkZWxfcG9zLT5yaWdodCA9IG5vZGUtPnJpZ2h0OworCQlp ZiAoZGVsX3Bvcy0+cmlnaHQpCisJCQlkZWxfcG9zLT5yaWdodC0+cGFyZW50ID0gZGVsX3BvczsK KworCQlkZWxfcG9zLT5wYXJlbnQgPSBub2RlLT5wYXJlbnQ7CisJCWlmIChub2RlLT5wYXJlbnQp IHsKKwkJCWlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkKKwkJCQlub2RlLT5wYXJlbnQt PmxlZnQgPSBkZWxfcG9zOworCQkJZWxzZQorCQkJCW5vZGUtPnBhcmVudC0+cmlnaHQgPSBkZWxf cG9zOworCisJCX0gZWxzZSB7CisJCQlhdmwtPnJvb3QgPSBkZWxfcG9zOworCQl9CisKKwkJZGVs X3Bvcy0+aGVpZ2h0ID0gbm9kZS0+aGVpZ2h0OworCisJCWlmIChwYXJlbnQgPT0gbm9kZSkKKwkJ CXBhcmVudCA9IGRlbF9wb3M7CisKKwl9CisKKwlpZiAoc29uKQorCQlzb24tPnBhcmVudCA9IHBh cmVudDsKKworCWlmIChwYXJlbnQpIHsKKwkJaWYgKHBhcmVudC0+bGVmdCA9PSBkZWxfcG9zKQor CQkJcGFyZW50LT5sZWZ0ID0gc29uOworCQllbHNlCisJCQlwYXJlbnQtPnJpZ2h0ID0gc29uOwor CisJCV9fYXZsX2ZpeF9iYWxhbmNlKGF2bCwgcGFyZW50KTsKKwl9IGVsc2UgeworCQlhdmwtPnJv b3QgPSBzb247CisJfQorCisJYXZsX2Fzc2VydChkZWxfcG9zLT5wYXJlbnQgIT0gZGVsX3Bvcyk7 CisKKwlmcmVlKG5vZGUpOworfQorCitzdGF0aWMgdm9pZCAqYXZsX2VyYXNlKHN0cnVjdCBpZ3Rf YnN0ICpic3QsIHZvaWQgKm5vZGVwdHIpCit7CisJc3RydWN0IGlndF9hdmxfbm9kZSAqbm9kZSwg KmRlbF9wb3M7CisJdm9pZCAqdmFsdWU7CisKKwlpZ3RfYXNzZXJ0KG5vZGVwdHIpOworCW5vZGUg PSAoc3RydWN0IGlndF9hdmxfbm9kZSAqKSBub2RlcHRyOworCXZhbHVlID0gbm9kZS0+dmFsdWU7 CisJZGVsX3BvcyA9IG5vZGUtPmxlZnQ7CisJaWYgKGRlbF9wb3MpIHsKKwkJd2hpbGUgKGRlbF9w b3MtPnJpZ2h0KQorCQkJZGVsX3BvcyA9IGRlbF9wb3MtPnJpZ2h0OworCisJCV9fYXZsX2VyYXNl X25vZGUoYnN0LT5wcml2LCBub2RlLCBkZWxfcG9zKTsKKwl9IGVsc2UgeworCQlfX2F2bF9lcmFz ZV9ub2RlKGJzdC0+cHJpdiwgbm9kZSwgbm9kZSk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQor CitzdGF0aWMgdm9pZCAqYXZsX3BvcF9zdWNjZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwgdWlu dDY0X3Qga2V5KQoreworCXN0cnVjdCBpZ3RfYXZsICphdmwgPSBic3QtPnByaXY7CisJc3RydWN0 IGlndF9hdmxfbm9kZSAqbm9kZSwgKnN1Y2MsICpwYXJlbnQ7CisJdm9pZCAqdmFsdWU7CisKKwlu b2RlID0gYXZsLT5yb290OworCXBhcmVudCA9IE5VTEw7CisJc3VjYyA9IE5VTEw7CisJd2hpbGUg KG5vZGUpIHsKKwkJcGFyZW50ID0gbm9kZTsKKwkJaWYgKG5vZGUtPmtleSA+PSBrZXkpIHsKKwkJ CXN1Y2MgPSBub2RlOworCQkJbm9kZSA9IG5vZGUtPmxlZnQ7CisJCX0gZWxzZSB7CisJCQlub2Rl ID0gbm9kZS0+cmlnaHQ7CisJCX0KKwl9CisKKwlpZiAoIXN1Y2MpCisJCXJldHVybiBOVUxMOwor CisJdmFsdWUgPSBzdWNjLT52YWx1ZTsKKwlfX2F2bF9lcmFzZV9ub2RlKGF2bCwgc3VjYywgcGFy ZW50KTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgKmF2bF9wb3BfcHJlZGVj ZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwgdWludDY0X3Qga2V5KQoreworCXN0cnVjdCBpZ3Rf YXZsICphdmwgPSBic3QtPnByaXY7CisJc3RydWN0IGlndF9hdmxfbm9kZSAqbm9kZSwgKnBhcmVu dCwgKnByZWQ7CisJdm9pZCAqdmFsdWU7CisKKwlub2RlID0gYXZsLT5yb290OworCXBhcmVudCA9 IE5VTEw7CisJcHJlZCA9IE5VTEw7CisJd2hpbGUgKG5vZGUpIHsKKwkJcGFyZW50ID0gbm9kZTsK KwkJaWYgKG5vZGUtPmtleSA8PSBrZXkpIHsKKwkJCXByZWQgPSBub2RlOworCQkJbm9kZSA9IG5v ZGUtPnJpZ2h0OworCQl9IGVsc2UgeworCQkJbm9kZSA9IG5vZGUtPmxlZnQ7CisJCX0KKwl9CisK KwlpZiAoIXByZWQpCisJCXJldHVybiBOVUxMOworCisJdmFsdWUgPSBwcmVkLT52YWx1ZTsKKwlf X2F2bF9lcmFzZV9ub2RlKGF2bCwgcHJlZCwgcGFyZW50KTsKKworCXJldHVybiB2YWx1ZTsKK30K Kworc3RhdGljIHZvaWQgKmF2bF9xdWVyeV9zdWNjZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwg dWludDY0X3Qga2V5KQoreworCXN0cnVjdCBpZ3RfYXZsICphdmwgPSBic3QtPnByaXY7CisJc3Ry dWN0IGlndF9hdmxfbm9kZSAqbm9kZTsKKwl2b2lkICp2YWx1ZSA9IE5VTEw7CisKKwlub2RlID0g YXZsLT5yb290OworCXdoaWxlIChub2RlKSB7CisJCWlmIChub2RlLT5rZXkgPj0ga2V5KSB7CisJ CQl2YWx1ZSA9IG5vZGUtPnZhbHVlOworCQkJbm9kZSA9IG5vZGUtPmxlZnQ7CisJCX0gZWxzZSB7 CisJCQlub2RlID0gbm9kZS0+cmlnaHQ7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisK K3N0YXRpYyB2b2lkICphdmxfcXVlcnlfcHJlZGVjZXNzb3Ioc3RydWN0IGlndF9ic3QgKmJzdCwg dWludDY0X3Qga2V5KQoreworCXN0cnVjdCBpZ3RfYXZsICphdmwgPSBic3QtPnByaXY7CisJc3Ry dWN0IGlndF9hdmxfbm9kZSAqbm9kZTsKKwl2b2lkICp2YWx1ZSA9IE5VTEw7CisKKwlub2RlID0g YXZsLT5yb290OworCXdoaWxlIChub2RlKSB7CisJCWlmIChub2RlLT5rZXkgPD0ga2V5KSB7CisJ CQl2YWx1ZSA9IG5vZGUtPnZhbHVlOworCQkJbm9kZSA9IG5vZGUtPnJpZ2h0OworCQl9IGVsc2Ug eworCQkJbm9kZSA9IG5vZGUtPmxlZnQ7CisJCX0KKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisK K3N0YXRpYyBib29sIGF2bF9ic3RfZW1wdHkoc3RydWN0IGlndF9ic3QgKmJzdCkKK3sKKwlzdHJ1 Y3QgaWd0X2F2bCAqYXZsID0gYnN0LT5wcml2OworCisJcmV0dXJuIChhdmwtPnJvb3QgPT0gTlVM TCk7Cit9CisKKworc3RhdGljIHZvaWQgKmF2bF9nZXRfdmFsdWUodm9pZCAqbm9kZXB0cikKK3sK KwlyZXR1cm4gKChzdHJ1Y3QgaWd0X2F2bF9ub2RlICopbm9kZXB0ciktPnZhbHVlOworfQorCitz dGF0aWMgdWludDY0X3QgYXZsX2dldF9rZXkodm9pZCAqbm9kZXB0cikKK3sKKwlyZXR1cm4gKChz dHJ1Y3QgaWd0X2F2bF9ub2RlICopbm9kZXB0ciktPmtleTsKK30KKworc3RhdGljIHZvaWQgKmF2 bF9sZWZ0bW9zdF9lbnRyeShzdHJ1Y3QgaWd0X2JzdCAqYnN0KQoreworCXN0cnVjdCBpZ3RfYXZs ICphdmwgPSBic3QtPnByaXY7CisJc3RydWN0IGlndF9hdmxfbm9kZSAqbm9kZTsKKworCW5vZGUg PSBhdmwtPnJvb3Q7CisJaWYgKG5vZGUpIHsKKwkJd2hpbGUgKG5vZGUtPmxlZnQpCisJCQlub2Rl ID0gbm9kZS0+bGVmdDsKKwl9CisKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHZvaWQgKmF2 bF9yaWdodG1vc3RfZW50cnkoc3RydWN0IGlndF9ic3QgKmJzdCkKK3sKKwlzdHJ1Y3QgaWd0X2F2 bCAqYXZsID0gYnN0LT5wcml2OworCXN0cnVjdCBpZ3RfYXZsX25vZGUgKm5vZGU7CisKKwlub2Rl ID0gYXZsLT5yb290OworCWlmIChub2RlKSB7CisJCXdoaWxlIChub2RlLT5yaWdodCkKKwkJCW5v ZGUgPSBub2RlLT5yaWdodDsKKwl9CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyB2b2lkICph dmxfbmV4dF9lbnRyeSh2b2lkICpub2RlcHRyKQoreworCXN0cnVjdCBpZ3RfYXZsX25vZGUgKm5v ZGU7CisKKwlpZ3RfYXNzZXJ0KG5vZGVwdHIpOworCW5vZGUgPSAoc3RydWN0IGlndF9hdmxfbm9k ZSAqKSBub2RlcHRyOworCWlmIChub2RlLT5yaWdodCkgeworCQlub2RlID0gbm9kZS0+cmlnaHQ7 CisJCXdoaWxlIChub2RlLT5sZWZ0KQorCQkJbm9kZSA9IG5vZGUtPmxlZnQ7CisKKwkJcmV0dXJu IG5vZGU7CisJfQorCXdoaWxlIChub2RlLT5wYXJlbnQpIHsKKwkJaWYgKG5vZGUtPnBhcmVudC0+ bGVmdCA9PSBub2RlKQorCQkJcmV0dXJuIG5vZGUtPnBhcmVudDsKKworCQlub2RlID0gbm9kZS0+ cGFyZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmF2bF9wcmV2X2Vu dHJ5KHZvaWQgKm5vZGVwdHIpCit7CisJc3RydWN0IGlndF9hdmxfbm9kZSAqbm9kZTsKKworCWln dF9hc3NlcnQobm9kZXB0cik7CisJbm9kZSA9IChzdHJ1Y3QgaWd0X2F2bF9ub2RlICopIG5vZGVw dHI7CisJaWYgKG5vZGUtPmxlZnQpIHsKKwkJbm9kZSA9IG5vZGUtPmxlZnQ7CisJCXdoaWxlIChu b2RlLT5yaWdodCkKKwkJCW5vZGUgPSBub2RlLT5yaWdodDsKKworCQlyZXR1cm4gbm9kZTsKKwl9 CisJd2hpbGUgKG5vZGUtPnBhcmVudCkgeworCQlpZiAobm9kZS0+cGFyZW50LT5yaWdodCA9PSBu b2RlKQorCQkJcmV0dXJuIG5vZGUtPnBhcmVudDsKKworCQlub2RlID0gbm9kZS0+cGFyZW50Owor CX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19hdmxfZnJlZShzdHJ1Y3QgaWd0 X2F2bF9ub2RlICpub2RlKQoreworCWF2bF9hc3NlcnQobm9kZSk7CisKKwlpZiAobm9kZS0+bGVm dCkKKwkJX19hdmxfZnJlZShub2RlLT5sZWZ0KTsKKworCWlmIChub2RlLT5yaWdodCkKKwkJX19h dmxfZnJlZShub2RlLT5yaWdodCk7CisKKwlmcmVlKG5vZGUpOworfQorCitzdGF0aWMgdm9pZCBh dmxfYnN0X2ZyZWUoc3RydWN0IGlndF9ic3QgKmJzdCkKK3sKKwlzdHJ1Y3QgaWd0X2F2bCAqYXZs ID0gYnN0LT5wcml2OworCisJaWYgKGF2bC0+cm9vdCkKKwkJX19hdmxfZnJlZShhdmwtPnJvb3Qp OworCisJZnJlZShhdmwpOworfQorCitzdHJ1Y3QgaWd0X2JzdCAqaWd0X2JzdF9hdmxfY3JlYXRl KHZvaWQpCit7CisJc3RydWN0IGlndF9hdmwgKmF2bDsKKwlzdHJ1Y3QgaWd0X2JzdCAqYnN0Owor CisJYXZsID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWd0X2F2bCkpOworCWJzdCA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IGlndF9ic3QpKTsKKwlpZ3RfYXNzZXJ0KGF2bCk7CisJaWd0X2Fzc2VydChi c3QpOworCisJYXZsLT5yb290ID0gTlVMTDsKKwlic3QtPnByaXYgPSBhdmw7CisJYnN0LT5pbnNl cnQgPSBhdmxfaW5zZXJ0OworCWJzdC0+ZXJhc2UgPSBhdmxfZXJhc2U7CisJYnN0LT5wb3Bfc3Vj Y2Vzc29yID0gYXZsX3BvcF9zdWNjZXNzb3I7CisJYnN0LT5wb3BfcHJlZGVjZXNzb3IgPSBhdmxf cG9wX3ByZWRlY2Vzc29yOworCWJzdC0+cXVlcnlfc3VjY2Vzc29yID0gYXZsX3F1ZXJ5X3N1Y2Nl c3NvcjsKKwlic3QtPnF1ZXJ5X3ByZWRlY2Vzc29yID0gYXZsX3F1ZXJ5X3ByZWRlY2Vzc29yOwor CWJzdC0+YnN0X2VtcHR5ID0gYXZsX2JzdF9lbXB0eTsKKwlic3QtPmdldF92YWx1ZSA9IGF2bF9n ZXRfdmFsdWU7CisJYnN0LT5nZXRfa2V5ID0gYXZsX2dldF9rZXk7CisJYnN0LT5sZWZ0bW9zdF9l bnRyeSA9IGF2bF9sZWZ0bW9zdF9lbnRyeTsKKwlic3QtPnJpZ2h0bW9zdF9lbnRyeSA9IGF2bF9y aWdodG1vc3RfZW50cnk7CisJYnN0LT5uZXh0X2VudHJ5ID0gYXZsX25leHRfZW50cnk7CisJYnN0 LT5wcmV2X2VudHJ5ID0gYXZsX3ByZXZfZW50cnk7CisJYnN0LT5ic3RfZnJlZSA9IGF2bF9ic3Rf ZnJlZTsKKwlic3QtPnZhbGlkYXRlID0gYXZsX3ZhbGlkYXRlOworCisJcmV0dXJuIGJzdDsKK30K ZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCA2N2Q0 MDUxMjkuLmExYWEwZWUxMiAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9t ZXNvbi5idWlsZApAQCAtMTEsNiArMTEsOCBAQCBsaWJfc291cmNlcyA9IFsKIAknaTkxNS9nZW1f bW1hbi5jJywKIAknaTkxNS9nZW1fdm0uYycsCiAJJ2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5j JywKKwknaWd0X2JzdC5jJywKKwknaWd0X2JzdF9hdmwuYycsCiAJJ2lndF9jb2xsZWN0aW9uLmMn LAogCSdpZ3RfY29sb3JfZW5jb2RpbmcuYycsCiAJJ2lndF9kZWJ1Z2ZzLmMnLAotLSAKMi4yNS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK