Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ndkN6-0003Uz-JD for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Apr 2022 03:05:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ndkN4-0008OV-Ao for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Apr 2022 03:05:42 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ndkN3-0008OM-Dc for pgsql-hackers@lists.postgresql.org; Mon, 11 Apr 2022 03:05:42 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ndkN0-0005IE-ER for pgsql-hackers@postgresql.org; Mon, 11 Apr 2022 03:05:40 +0000 Received: by mail-ej1-x632.google.com with SMTP id u15so9449758ejf.11 for ; Sun, 10 Apr 2022 20:05:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=PbO8uTu16LokiT729ghbb3PhvOo/1K3kNcHkD/99brM=; b=QOme8sP2VQEbfZVoG6vsngmBgeJFBsHJ7iXZS8TgnkBcqNeyZS7njODtOQ9ecQkGMl tXR7cbpEiDVHpUu8QkjhczhCEiBHM8k9CfzLUrbtp2EOAeB8RqSsVasNh78UQj45HH2o Xo1hl0OQ7YJSII8ngfkeF/Bylno1bhh6RY1ANDyALpRF6FSdy8d0tSzZhN6pbEPkbB63 /oP4UHK0muNVdKOgZ/sb0HCI2HDktdpEhUdRW2zQTLDqVk5b/KPWXvNVqycx8HHjG18S atqyJkoYnJp14KrmLtPxxCvUZwbwB4G9aIgiW9vzrLVZPr5DYHeaUYKErcy1HS6zkgqQ Iftg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=PbO8uTu16LokiT729ghbb3PhvOo/1K3kNcHkD/99brM=; b=Eqwd5algZffjFRGvMToYVrQUGwYma/BB9JWc6eJulnwdl4+W3oWWqmKsqbax+a4Xbq J7bw0O/Vf3cwEp0atdG1aP9Etz4NWbQgneEitsgvMlwUEUIsx6KSsa3oK2p4IbvWfb8Z Z59PvrewssIeKdn4y6CDET5plDRbi3+BvF9Kh7WbgmAXeqKSItJLiXuj5/DoXzEepJdY RxqJT02eRRzaIvgN9kQv9TlANCn5mvwh1byggDR3KJhzCEv5FsbAFB7KByRSPPFudSLF CkG3EiXxVfCT+cibPtn70Tht6qPUlmnVpYcQy34IqU0rKyBBQwoG+aHqTURZ2FYBYhaK ik6g== X-Gm-Message-State: AOAM530AZwmVvQ5hILHAsZQ0RPtYa1y4ld9rZo7i6Ny6kuJCuhWsahJK +7i0Bvfans69y6TzoQAT3uLMp8HXnLpNwzsZahE= X-Google-Smtp-Source: ABdhPJyXZne/cLvCFIR+GTNqNZEyN3mFscKdFFsmzuQYh8X36pnTlmBVhZZ2T9H76H51pCDMrh0t8fMlTbLLRQaZrE4= X-Received: by 2002:a17:906:9b8f:b0:6e0:6bcb:fc59 with SMTP id dd15-20020a1709069b8f00b006e06bcbfc59mr28411941ejc.624.1649646336215; Sun, 10 Apr 2022 20:05:36 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Mon, 11 Apr 2022 12:05:19 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: David Rowley Cc: Robert Haas , Tom Lane , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000e0739605dc5837fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e0739605dc5837fb Content-Type: text/plain; charset="UTF-8" On Fri, Apr 8, 2022 at 8:45 PM Amit Langote wrote: > Most looked fine changes to me except a couple of typos, so I've > adopted those into the attached new version, even though I know it's > too late to try to apply it. > > + * XXX is it worth doing a bms_copy() on glob->minLockRelids if > + * glob->containsInitialPruning is true?. I'm slighly worried that the > + * Bitmapset could have a very long empty tail resulting in excessive > + * looping during AcquireExecutorLocks(). > + */ > > I guess I trust your instincts about bitmapset operation efficiency > and what you've written here makes sense. It's typical for leaf > partitions to have been appended toward the tail end of rtable and I'd > imagine their indexes would be in the tail words of minLockRelids. If > copying the bitmapset removes those useless words, I don't see why we > shouldn't do that. So added: > > + /* > + * It seems worth doing a bms_copy() on glob->minLockRelids if we deleted > + * bit from it just above to prevent empty tail bits resulting in > + * inefficient looping during AcquireExecutorLocks(). > + */ > + if (glob->containsInitialPruning) > + glob->minLockRelids = bms_copy(glob->minLockRelids) > > Not 100% about the comment I wrote. And the quoted code change missed a semicolon in the v14 that I hurriedly sent on Friday. (Had apparently forgotten to `git add` the hunk to fix that). Sending v15 that fixes that to keep the cfbot green for now. -- Amit Langote EDB: http://www.enterprisedb.com --000000000000e0739605dc5837fb Content-Type: application/octet-stream; name="v15-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Disposition: attachment; filename="v15-0001-Optimize-AcquireExecutorLocks-to-skip-pruned-par.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1u4akdh0 RnJvbSBlOTc0YzI3YWJkYTljNTM3NDRiOTNmMmM2ZTBmMTA4M2RkZWVkYmJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjE1XSBP cHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkIHBhcnRpdGlvbnMK Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXh0ZW5zaW9uLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9t YXR2aWV3LmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUu YyAgICAgICAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSAgICAgICAg ICAgICB8ICAyNyArKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgICAgICAgICB8 ICA0OCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgIHwgIDI4 ICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgIHwgMjQxICsrKysr KysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgICAg ICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgIHwgIDE1ICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyAgfCAgIDkgKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL3NwaS5jICAgICAgICAgICAgICB8ICAyNyArKy0KIHNyYy9iYWNrZW5kL25v ZGVzL2NvcHlmdW5jcy5jICAgICAgICAgICB8ICAzMyArKystCiBzcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jICAgICAgICAgICAgfCAgMzYgKysrLQogc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1 bmNzLmMgICAgICAgICAgIHwgIDU2ICsrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIHwgIDI0ICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8 IDExMiArKysrKysrKy0tLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAg IHwgIDU5ICsrKysrLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgIHwg ICA4ICstCiBzcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jICAgICAgICAgICAgICAgfCAgMjggKyst CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICAgfCAxODQgKysrKysrKysr KysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1lbS5jICAgICAgfCAgMTkg KysKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICB8ICAgNCArLQogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgIHwgIDEyICstCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjZGVzYy5oICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaCAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICB8ICAzMCArKysKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAg ICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAg fCAgMTUgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgICB8ICAzMSAr Ky0KIHNyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCAgICB8ICAgOCArLQogc3Jj L2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVk ZS91dGlscy9wb3J0YWwuaCAgICAgICAgICAgICAgfCAgIDMgKwogMzcgZmlsZXMgY2hhbmdlZCwg OTUwIGluc2VydGlvbnMoKyksIDE2NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmlu ZGV4IDU1YzM4YjA0YzQuLmQ0MDNlYjIzMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC01NDIs NyArNTQyLDcgQEAgQmVnaW5Db3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkg KikgZGVzdCktPmNzdGF0ZSA9IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVx dWVzdGluZyBubyBvdXRwdXQgKi8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURl c2MocGxhbiwgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3Jl YXRlUXVlcnlEZXNjKHBsYW4sIE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJ CQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJ CQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXgg OWFiYmI2YjU1NS4uZjY2MDdmMjQ1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUs NyArMzI1LDcgQEAgRXhlY0NyZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVU YWJsZUFzU3RtdCAqc3RtdCwKIAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAog CQkvKiBDcmVhdGUgYSBRdWVyeURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUg cmVjZWl2ZXIgKi8KLQkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+ cF9zb3VyY2V0ZXh0LAorCQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwg cHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZh bGlkU25hcHNob3QsCiAJCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCmluZGV4IGQyYTI0Nzk4MjIuLjM1ZGQyNGFkZjggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKQEAgLTQwNyw3ICs0MDcsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1 ZXJ5LCBpbnQgY3Vyc29yT3B0aW9ucywKIAkJfQogCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBh bmQgcHJvZHVjZSBvdXRwdXQgKi8KLQkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1 ZXJ5U3RyaW5nLCBwYXJhbXMsIHF1ZXJ5RW52LAorCQlFeHBsYWluT25lUGxhbihwbGFuLCBOVUxM LCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJCSAgICZwbGFu ZHVyYXRpb24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAl9CiB9CkBAIC01 MTUsNyArNTE1LDggQEAgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9D bGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0LgogICovCiB2b2lk Ci1FeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmlu dG8sIEV4cGxhaW5TdGF0ZSAqZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5l ZHN0bXQsIFBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCwKKwkJCSAgIElu dG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCQkgICBjb25zdCBjaGFyICpxdWVy eVN0cmluZywgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCiAJCQkgICBRdWVyeUVudmlyb25tZW50ICpx dWVyeUVudiwgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAogCQkJICAgY29uc3QgQnVm ZmVyVXNhZ2UgKmJ1ZnVzYWdlKQpAQCAtNTYzLDcgKzU2NCw3IEBAIEV4cGxhaW5PbmVQbGFuKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICpl cywKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9y IHRoZSBxdWVyeSAqLwotCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwg cXVlcnlTdHJpbmcsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRzdG10LCBw YXJ0X3BydW5lX3Jlc3VsdCwgcXVlcnlTdHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90 KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5z dHJ1bWVudF9vcHRpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRl bnNpb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDEwMTM3OTBk YmIuLjU0NzM0YTNhOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lv bi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCkBAIC03NzYsNyArNzc2 LDcgQEAgZXhlY3V0ZV9zcWxfc3RyaW5nKGNvbnN0IGNoYXIgKnNxbCkKIAkJCXsKIAkJCQlRdWVy eURlc2MgICpxZGVzYzsKIAotCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJ cWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwgTlVMTCwKIAkJCQkJCQkJCQlzcWwsCiAJCQkJ CQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgTlVMTCwKIAkJCQkJCQkJCQlkZXN0LCBOVUxMLCBO VUxMLCAwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCA5YWIyNDhkMjVlLi4yYmUxNzgyYmM0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC00MTYsNyArNDE2LDcgQEAgcmVmcmVzaF9tYXR2 aWV3X2RhdGFmaWxsKERlc3RSZWNlaXZlciAqZGVzdCwgUXVlcnkgKnF1ZXJ5LAogCVVwZGF0ZUFj dGl2ZVNuYXBzaG90Q29tbWFuZElkKCk7CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MsIHJlZGly ZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQlxdWVyeURlc2MgPSBDcmVh dGVRdWVyeURlc2MocGxhbiwgcXVlcnlTdHJpbmcsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW4sIE5VTEwsIHF1ZXJ5U3RyaW5nLAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgp LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIE5VTEwsIE5VTEwsIDApOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wcmVwYXJlLmMKaW5kZXggODA3Mzg1NDdlZC4uYzczNjA3MTJiMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ByZXBhcmUuYwpAQCAtMTU1LDYgKzE1NSw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpw c3RhdGUsCiAJUHJlcGFyZWRTdGF0ZW1lbnQgKmVudHJ5OwogCUNhY2hlZFBsYW4gKmNwbGFuOwog CUxpc3QJICAgKnBsYW5fbGlzdDsKKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0Owog CVBhcmFtTGlzdEluZm8gcGFyYW1MSSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxM OwogCVBvcnRhbAkJcG9ydGFsOwpAQCAtMTkzLDcgKzE5NCwxMCBAQCBFeGVjdXRlUXVlcnkoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJICAgZW50cnktPnBsYW5zb3VyY2UtPnF1ZXJ5X3N0 cmluZyk7CiAKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBsYW4gcmVmY291 bnQgZm9yIHBvcnRhbCAqLwotCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihlbnRyeS0+cGxhbnNvdXJj ZSwgcGFyYW1MSSwgTlVMTCwgTlVMTCk7CisJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKGVudHJ5LT5w bGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBOVUxMLAorCQkJCQkJICAmcGFydF9wcnVuZV9yZXN1 bHRfbGlzdCk7CisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNwbGFuLT5zdG10X2xpc3QpID09CisJCSAg IGxpc3RfbGVuZ3RoKHBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpKTsKIAlwbGFuX2xpc3QgPSBjcGxh bi0+c3RtdF9saXN0OwogCiAJLyoKQEAgLTIwNyw2ICsyMTEsOSBAQCBFeGVjdXRlUXVlcnkoUGFy c2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkgIHBsYW5fbGlzdCwKIAkJCQkJICBjcGxhbik7CiAKKwkv KiBDb3B5IFBhcnRpdGlvblBydW5lUmVzdWx0cyBpbnRvIHRoZSBwb3J0YWwncyBjb250ZXh0LiAq LworCVBvcnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKHBvcnRhbCwgcGFydF9wcnVuZV9y ZXN1bHRfbGlzdCk7CisKIAkvKgogCSAqIEZvciBDUkVBVEUgVEFCTEUgLi4uIEFTIEVYRUNVVEUs IHdlIG11c3QgdmVyaWZ5IHRoYXQgdGhlIHByZXBhcmVkCiAJICogc3RhdGVtZW50IGlzIG9uZSB0 aGF0IHByb2R1Y2VzIHR1cGxlcy4gIEN1cnJlbnRseSB3ZSBpbnNpc3QgdGhhdCBpdCBiZQpAQCAt NTc2LDcgKzU4Myw5IEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10 LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCWNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZzsKIAlDYWNoZWRQbGFuICpjcGxhbjsKIAlMaXN0CSAgICpwbGFuX2xpc3Q7Ci0JTGlz dENlbGwgICAqcDsKKwlMaXN0CSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0OworCUxpc3RDZWxs ICAgKnAsCisJCQkgICAqcHA7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsKIAlFU3Rh dGUJICAgKmVzdGF0ZSA9IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02MTksNyAr NjI4LDEwIEBAIEV4cGxhaW5FeGVjdXRlUXVlcnkoRXhlY3V0ZVN0bXQgKmV4ZWNzdG10LCBJbnRv Q2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAogCiAJLyogUmVwbGFuIGlmIG5lZWRlZCwg YW5kIGFjcXVpcmUgYSB0cmFuc2llbnQgcmVmY291bnQgKi8KIAljcGxhbiA9IEdldENhY2hlZFBs YW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksCi0JCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93 bmVyLCBxdWVyeUVudik7CisJCQkJCQkgIEN1cnJlbnRSZXNvdXJjZU93bmVyLCBxdWVyeUVudiwK KwkJCQkJCSAgJnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpOworCUFzc2VydChsaXN0X2xlbmd0aChj cGxhbi0+c3RtdF9saXN0KSA9PQorCQkgICBsaXN0X2xlbmd0aChwYXJ0X3BydW5lX3Jlc3VsdF9s aXN0KSk7CiAKIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHBsYW5kdXJhdGlvbik7CiAJSU5TVFJf VElNRV9TVUJUUkFDVChwbGFuZHVyYXRpb24sIHBsYW5zdGFydCk7CkBAIC02MzQsMTMgKzY0Niwx NSBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0NsYXVz ZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAlwbGFuX2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0 OwogCiAJLyogRXhwbGFpbiBlYWNoIHF1ZXJ5ICovCi0JZm9yZWFjaChwLCBwbGFuX2xpc3QpCisJ Zm9yYm90aChwLCBwbGFuX2xpc3QsIHBwLCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogCXsKIAkJ UGxhbm5lZFN0bXQgKnBzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIHApOworCQlQYXJ0 aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQgPSBsZmlyc3Rfbm9kZShQYXJ0aXRp b25QcnVuZVJlc3VsdCwgcHApOwogCiAJCWlmIChwc3RtdC0+Y29tbWFuZFR5cGUgIT0gQ01EX1VU SUxJVFkpCi0JCQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywg cGFyYW1MSSwgcXVlcnlFbnYsCi0JCQkJCQkgICAmcGxhbmR1cmF0aW9uLCAoZXMtPmJ1ZmZlcnMg PyAmYnVmdXNhZ2UgOiBOVUxMKSk7CisJCQlFeHBsYWluT25lUGxhbihwc3RtdCwgcGFydF9wcnVu ZV9yZXN1bHQsIGludG8sIGVzLCBxdWVyeV9zdHJpbmcsCisJCQkJCQkgICBwYXJhbUxJLCBxdWVy eUVudiwgJnBsYW5kdXJhdGlvbiwKKwkJCQkJCSAgIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6 IE5VTEwpKTsKIAkJZWxzZQogCQkJRXhwbGFpbk9uZVV0aWxpdHkocHN0bXQtPnV0aWxpdHlTdG10 LCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAogCQkJCQkJCSAgcGFyYW1MSSwgcXVlcnlFbnYpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvUkVBRE1FCmluZGV4IDBiNTE4M2ZjNGEuLmUwODAyYmU3MjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFE TUUKQEAgLTY1LDYgKzY1LDI5IEBAIGZvdW5kIHRoZXJlLiAgVGhpcyBjdXJyZW50bHkgb25seSBv Y2N1cnMgZm9yIEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgbm9kZXMuICBJbgogdGhpcyBjYXNlIHRo ZSBub24tcmVxdWlyZWQgc3VicGxhbnMgYXJlIGlnbm9yZWQgYW5kIHRoZSBleGVjdXRvciBzdGF0 ZSdzCiBzdWJub2RlIGFycmF5IHdpbGwgYmVjb21lIG91dCBvZiBzZXF1ZW5jZSB0byB0aGUgcGxh bidzIHN1YnBsYW4gbGlzdC4KIAorQWN0dWFsbHksIHRoZSBzby1jYWxsZWQgZXhlY3V0aW9uIHRp bWUgcHJ1bmluZyBtYXkgYWxzbyBvY2N1ciBldmVuIGJlZm9yZSB0aGUKK2V4ZWN1dGlvbiBoYXMg c3RhcnRlZC4gIE9uZSBjYXNlIHdoZXJlIHRoYXQgb2NjdXJzIGlzIHdoZW4gYSBjYWNoZWQgZ2Vu ZXJpYworcGxhbiBpcyBiZWluZyB2YWxpZGF0ZWQgZm9yIGV4ZWN1dGlvbiBieSBwbGFuY2FjaGUu YzogR2V0Q2FjaGVkUGxhbigpLCB3aGljaAorcHJvY2VlZHMgYnkgbG9ja2luZyBhbGwgdGhlIHJl bGF0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBieSB0aGF0IHBsYW4uICBJZgordGhlIGdlbmVy aWMgcGxhbiBjb250YWlucyBub2RlcyB0aGF0IGNhbiBwZXJmb3JtIGV4ZWN1dGlvbiB0aW1lIHBh cnRpdGlvbgorcHJ1bmluZyAodGhhdCBpcywgY29udGFpbiBhIFBhcnRpdGlvblBydW5lSW5mbyks IGEgc3Vic2V0IG9mIHBydW5pbmcgc3RlcHMKK2NvbnRhaW5lZCBpbiB0aGUgUGFydGl0aW9uUHJ1 bmVJbmZvcyB0aGF0IGRvIG5vdCBkZXBlbmQgb24gZXhlY3V0aW9uIGFjdHVhbGx5CitoYXZpbmcg c3RhcnRlZCAoY2FsbGVkICJpbml0aWFsIiBwcnVuaW5nIHN0ZXBzKSBhcmUgcGVyZm9ybWVkIGF0 IHRoaXMgcG9pbnQKK3RvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgc2V0IG9mIGNoaWxkIHN1YnBs YW5zIHRoYXQgc2F0aXNmeSB0aG9zZSBwcnVuaW5nCitpbnN0cnVjdGlvbnMuICBBY3F1aXJlRXhl Y3V0b3JMb2NrcygpIGxvb2tpbmcgYXQgYSBwYXJ0aWN1bGFyIHBsYW4gd2lsbCB0aGVuCitsb2Nr IG9ubHkgdGhlIHJlbGF0aW9ucyBzY2FubmVkIGJ5IHRob3NlIHN1cnZpdmluZyBzdWJwbGFucyAo YWxvbmcgd2l0aCB0aG9zZQorcHJlc2VudCBpbiBQbGFubmVkU3RtdC5taW5Mb2NrUmVsaWRzKSwg YW5kIGlnbm9yZSB0aG9zZSBzY2FubmVkIGJ5IHRoZSBwcnVuZWQKK3N1YnBsYW5zLCBldmVuIHRo b3VnaCB0aGUgcHJ1bmVkIHN1YnBsYW5zIHRoZW1zZWx2ZXMgYXJlIG5vdCByZW1vdmVkIGZyb20g dGhlCitwbGFuIHRyZWUuICBUaGUgcmVzdWx0IG9mIHBydW5pbmcgKHRoYXQgaXMsIHRoZSBzZXQg b2YgaW5kZXhlcyBvZiBzdXJ2aXZpbmcKK3N1YnBsYW5zIGluIHRoZWlyIHBhcmVudCdzIGxpc3Qg b2YgY2hpbGQgc3VicGxhbnMpIGlzIHNhdmVkIGFzIGEgbGlzdCBvZgorYml0bWFwc2V0cywgd2l0 aCBvbmUgZWxlbWVudCBmb3IgZXZlcnkgUGFydGl0aW9uUHJ1bmVJbmZvIHJlZmVyZW5jZWQgaW4g dGhlCitwbGFuIChQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcykuICBUaGUgbGlzdCBpcyBwYWNr YWdlZCBpbnRvIGEKK1BhcnRpdGlvblBydW5lUmVzdWx0IG5vZGUsIHdoaWNoIGlzIHBhc3NlZCBh bG9uZyB3aXRoIHRoZSBQbGFubmVkU3RtdCB0byB0aGUKK2V4ZWN1dG9yIHZpYSB0aGUgUXVlcnlE ZXNjLiAgSXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHRoZSBleGVjdXRvciBhbmQgYW55IHRoaXJkCitw YXJ0eSBjb2RlIGludm9rZWQgYnkgaXQgdGhhdCBnZXRzIHBhc3NlZCB0aGUgcGxhbiB0cmVlIGxv b2sgYXQgdGhlIHBsYW4ncworUGFydGl0aW9uUHJ1bmVSZXN1bHQgdG8gZGV0ZXJtaW5lIHdoZXRo ZXIgYSBwYXJ0aWN1bGFyIGNoaWxkIHN1YnBsYW4gb2YgYQorcGFyZW50IG5vZGUgdGhhdCBzdXBw b3J0cyBwcnVuaW5nIGlzIHZhbGlkIGZvciBhIGdpdmVuIGV4ZWN1dGlvbi4KKwogRWFjaCBQbGFu IG5vZGUgbWF5IGhhdmUgZXhwcmVzc2lvbiB0cmVlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHRvIHJl cHJlc2VudAogaXRzIHRhcmdldCBsaXN0LCBxdWFsaWZpY2F0aW9uIGNvbmRpdGlvbnMsIGV0Yy4g IFRoZXNlIHRyZWVzIGFyZSBhbHNvCiByZWFkLW9ubHkgdG8gdGhlIGV4ZWN1dG9yLCBidXQgdGhl IGV4ZWN1dG9yIHN0YXRlIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24KQEAgLTI4Niw2ICszMDks MTAgQEAgUXVlcnkgUHJvY2Vzc2luZyBDb250cm9sIEZsb3cKIAogVGhpcyBpcyBhIHNrZXRjaCBv ZiBjb250cm9sIGZsb3cgZm9yIGZ1bGwgcXVlcnkgcHJvY2Vzc2luZzoKIAorICBbIEV4ZWN1dG9y RG9Jbml0aWFsUHJ1bmluZyBdIC0tLSBhbiBvcHRpb25hbCBzdGVwIHRvIHBlcmZvcm0gaW5pdGlh bAorCQlwYXJ0aXRpb24gcHJ1bmluZyBvbiB0aGUgcGxhbiB0cmVlIHRoZSByZXN1bHQgb2Ygd2hp Y2ggaXMgcGFzc2VkCisJCXRvIHRoZSBleGVjdXRvciB2aWEgUXVlcnlEZXNjCisKIAlDcmVhdGVR dWVyeURlc2MKIAogCUV4ZWN1dG9yU3RhcnQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IGVm MmZkNDYwOTIuLjVlZTk3ODkzN2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNDksMTEg KzQ5LDEzIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjZGVidWcuaCIKKyNpbmNsdWRl ICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZVN1YnBs YW4uaCIKICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIK ICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgpAQCAt MTA0LDYgKzEwNiw0OSBAQCBzdGF0aWMgdm9pZCBFdmFsUGxhblF1YWxTdGFydChFUFFTdGF0ZSAq ZXBxc3RhdGUsIFBsYW4gKnBsYW5UcmVlKTsKIAogLyogZW5kIG9mIGxvY2FsIGRlY2xzICovCiAK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCQlFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcKKyAqCisgKgkJUGVyZm9y bXMgaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmluZyB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNl dCBvZgorICoJCXN1YnBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCB0aGUgc2V0IG9mIFJUIGluZGV4 ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqCQlsZWFmIHBhcnRpdGlvbnMKKyAqCisgKiBSZXR1 cm5lZCBQYXJ0aXRpb25QcnVuZVJlc3VsdCBtdXN0IGJlIHN1YnNlcXVlbnRseSBwYXNzZWQgdG8g dGhlIGV4ZWN1dG9yCisgKiBzbyB0aGF0IGl0IGNhbiByZXVzZSB0aGUgcmVzdWx0IG9mIHBydW5p bmcuICBJdCdzIGltcG9ydGFudCB0aGF0IHRoZQorICogaGFzIHRoZSBzYW1lIHZpZXcgb2Ygd2hp Y2ggcGFydGl0aW9ucyBhcmUgaW5pdGlhbGx5IHBydW5lZCAoYnkgbm90IGRvaW5nCisgKiB0aGUg cHJ1bmluZyBhZ2FpbiBpdHNlbGYpIG9yIG90aGVyd2lzZSBpdCByaXNrcyBpbml0aWFsaXppbmcg c3VicGxhbnMgd2hvc2UKKyAqIHBhcnRpdGlvbnMgd291bGQgbm90IGhhdmUgYmVlbiBsb2NrZWQu CisgKgorICogTm90ZTogUGFydGl0aW9uZWQgdGFibGVzIG1lbnRpb25lZCBpbiBQYXJ0aXRpb25l ZFJlbFBydW5lSW5mbyBub2RlcyB0aGF0CisgKiBkcml2ZSB0aGUgcHJ1bmluZyB3aWxsIGJlIGxv Y2tlZCBiZWZvcmUgZG9pbmcgdGhlIHBydW5pbmcuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitQYXJ0 aXRpb25QcnVuZVJlc3VsdCAqCitFeGVjdXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQg KnBsYW5uZWRzdG10LCBQYXJhbUxpc3RJbmZvIHBhcmFtcykKK3sKKwlQYXJ0aXRpb25QcnVuZVJl c3VsdCAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKworCS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhl cmUgaXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNzZXJ0KHBsYW5uZWRzdG10LT5jb250YWlu c0luaXRpYWxQcnVuaW5nKTsKKworCXJlc3VsdCA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVz dWx0KTsKKwlmb3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3MpCisJeworCQlQ YXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbyA9IGxmaXJzdChsYyk7CisJCUJpdG1hcHNldCAq dmFsaWRfc3VicGxhbl9vZmZzOworCisJCXZhbGlkX3N1YnBsYW5fb2ZmcyA9CisJCQlFeGVjUGFy dGl0aW9uRG9Jbml0aWFsUHJ1bmluZyhwbGFubmVkc3RtdCwgcGFyYW1zLCBwcnVuZWluZm8sCisJ CQkJCQkJCQkJICAmcmVzdWx0LT5zY2FuX2xlYWZwYXJ0X3J0aXMpOworCQlyZXN1bHQtPnZhbGlk X3N1YnBsYW5fb2Zmc19saXN0ID0KKwkJCWxhcHBlbmQocmVzdWx0LT52YWxpZF9zdWJwbGFuX29m ZnNfbGlzdCwKKwkJCQkJdmFsaWRfc3VicGxhbl9vZmZzKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0 OworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY3V0b3JTdGFydApAQCAtODA2LDYgKzg1MSw3IEBA IEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5cGUJ CW9wZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFubmVk c3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7CisJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBh cnRfcHJ1bmVfcmVzdWx0ID0gcXVlcnlEZXNjLT5wYXJ0X3BydW5lX3Jlc3VsdDsKIAlQbGFuCSAg ICpwbGFuID0gcGxhbm5lZHN0bXQtPnBsYW5UcmVlOwogCUxpc3QJICAgKnJhbmdlVGFibGUgPSBw bGFubmVkc3RtdC0+cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3Rh dGU7CkBAIC04MjUsNiArODcxLDggQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGlu dCBlZmxhZ3MpCiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAll c3RhdGUtPmVzX3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19wYXJ0X3By dW5lX2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUluZm9zOworCWVzdGF0ZS0+ZXNfcGFy dF9wcnVuZV9yZXN1bHQgPSBwYXJ0X3BydW5lX3Jlc3VsdDsKIAogCS8qCiAJICogTmV4dCwgYnVp bGQgdGhlIEV4ZWNSb3dNYXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnku CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLjgwNWY4NmM1 MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAj ZGVmaW5lIFBBUkFMTEVMX0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAw MDAwMDgpCiAjZGVmaW5lIFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENP TlNUKDB4RTAwMDAwMDAwMDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJ CVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1BB UlRJVElPTlBSVU5FUkVTVUxUCVVJTlQ2NENPTlNUKDB4RTAwMDAwMDAwMDAwMDAwQikKIAogI2Rl ZmluZSBQQVJBTExFTF9UVVBMRV9RVUVVRV9TSVpFCQk2NTUzNgogCkBAIC0xODIsNyArMTgzLDkg QEAgRXhlY1NlcmlhbGl6ZVBsYW4oUGxhbiAqcGxhbiwgRVN0YXRlICplc3RhdGUpCiAJcHN0bXQt PnRyYW5zaWVudFBsYW4gPSBmYWxzZTsKIAlwc3RtdC0+ZGVwZW5kc09uUm9sZSA9IGZhbHNlOwog CXBzdG10LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBmYWxzZTsKKwlwc3RtdC0+Y29udGFpbnNJbml0 aWFsUHJ1bmluZyA9IGZhbHNlOwogCXBzdG10LT5wbGFuVHJlZSA9IHBsYW47CisJcHN0bXQtPnBh cnRQcnVuZUluZm9zID0gZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zOwogCXBzdG10LT5ydGFi bGUgPSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlOwogCXBzdG10LT5yZXN1bHRSZWxhdGlvbnMgPSBO SUw7CiAJcHN0bXQtPmFwcGVuZFJlbGF0aW9ucyA9IE5JTDsKQEAgLTU5NiwxMiArNTk5LDE1IEBA IEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0 ZSwKIAlGaXhlZFBhcmFsbGVsRXhlY3V0b3JTdGF0ZSAqZnBlczsKIAljaGFyCSAgICpwc3RtdF9k YXRhOwogCWNoYXIJICAgKnBzdG10X3NwYWNlOworCWNoYXIJICAgKnBhcnRfcHJ1bmVfcmVzdWx0 X2RhdGE7CisJY2hhcgkgICAqcGFydF9wcnVuZV9yZXN1bHRfc3BhY2U7CiAJY2hhcgkgICAqcGFy YW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJV2FsVXNh Z2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRpb24gKmlu c3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpqaXRfaW5z dHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJcGFydF9wcnVu ZV9yZXN1bHRfbGVuOwogCWludAkJCXBhcmFtbGlzdGluZm9fbGVuOwogCWludAkJCWluc3RydW1l bnRhdGlvbl9sZW4gPSAwOwogCWludAkJCWppdF9pbnN0cnVtZW50YXRpb25fbGVuID0gMDsKQEAg LTYzMCw2ICs2MzYsNyBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgRVN0YXRlICplc3RhdGUsCiAKIAkvKiBGaXggdXAgYW5kIHNlcmlhbGl6ZSBwbGFuIHRvIGJl IHNlbnQgdG8gd29ya2Vycy4gKi8KIAlwc3RtdF9kYXRhID0gRXhlY1NlcmlhbGl6ZVBsYW4ocGxh bnN0YXRlLT5wbGFuLCBlc3RhdGUpOworCXBhcnRfcHJ1bmVfcmVzdWx0X2RhdGEgPSBub2RlVG9T dHJpbmcoZXN0YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdCk7CiAKIAkvKiBDcmVhdGUgYSBwYXJh bGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVz IiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MywxMSBAQCBF eGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUs CiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4pOwog CXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVzdGlt YXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRf cHJ1bmVfcmVzdWx0X2xlbiA9IHN0cmxlbihwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhKSArIDE7CisJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwYXJ0X3BydW5lX3Jlc3Vs dF9sZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwog CS8qIEVzdGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIFBhcmFtTGlzdEluZm8uICovCiAJcGFy YW1saXN0aW5mb19sZW4gPSBFc3RpbWF0ZVBhcmFtTGlzdFNwYWNlKGVzdGF0ZS0+ZXNfcGFyYW1f bGlzdF9pbmZvKTsKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIHBh cmFtbGlzdGluZm9fbGVuKTsKQEAgLTc1MCw2ICs3NjIsMTIgQEAgRXhlY0luaXRQYXJhbGxlbFBs YW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLAogCW1lbWNweShwc3RtdF9z cGFjZSwgcHN0bXRfZGF0YSwgcHN0bXRfbGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2Ms IFBBUkFMTEVMX0tFWV9QTEFOTkVEU1RNVCwgcHN0bXRfc3BhY2UpOwogCisJLyogU3RvcmUgc2Vy aWFsaXplZCBQYXJ0aXRpb25QcnVuZVJlc3VsdCAqLworCXBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNl ID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcnRfcHJ1bmVfcmVzdWx0X2xlbik7CisJ bWVtY3B5KHBhcnRfcHJ1bmVfcmVzdWx0X3NwYWNlLCBwYXJ0X3BydW5lX3Jlc3VsdF9kYXRhLCBw YXJ0X3BydW5lX3Jlc3VsdF9sZW4pOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxM RUxfS0VZX1BBUlRJVElPTlBSVU5FUkVTVUxULAorCQkJCSAgIHBhcnRfcHJ1bmVfcmVzdWx0X3Nw YWNlKTsKKwogCS8qIFN0b3JlIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxp c3RpbmZvX3NwYWNlID0gc2htX3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9f bGVuKTsKIAlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJ TkZPLCBwYXJhbWxpc3RpbmZvX3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OSwxMCBAQCBFeGVjUGFy YWxsZWxHZXRRdWVyeURlc2Moc2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAog CQkJCQkJIGludCBpbnN0cnVtZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsK KwljaGFyCSAgICpwYXJ0X3BydW5lX3Jlc3VsdF9zcGFjZTsKIAljaGFyCSAgICpwYXJhbXNwYWNl OwogCVBsYW5uZWRTdG10ICpwc3RtdDsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVu ZV9yZXN1bHQ7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJOwogCWNoYXIJICAgKnF1ZXJ5U3RyaW5n OwogCkBAIC0xMjQzLDEyICsxMjYzLDE4IEBAIEV4ZWNQYXJhbGxlbEdldFF1ZXJ5RGVzYyhzaG1f dG9jICp0b2MsIERlc3RSZWNlaXZlciAqcmVjZWl2ZXIsCiAJcHN0bXRzcGFjZSA9IHNobV90b2Nf bG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BMQU5ORURTVE1ULCBmYWxzZSk7CiAJcHN0bXQgPSAo UGxhbm5lZFN0bXQgKikgc3RyaW5nVG9Ob2RlKHBzdG10c3BhY2UpOwogCisJLyogUmVjb25zdHJ1 Y3QgbGVhZGVyLXN1cHBsaWVkIFBhcnRpdGlvblBydW5lUmVzdWx0LiAqLworCXBhcnRfcHJ1bmVf cmVzdWx0X3NwYWNlID0KKwkJc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSVElU SU9OUFJVTkVSRVNVTFQsIGZhbHNlKTsKKwlwYXJ0X3BydW5lX3Jlc3VsdCA9IChQYXJ0aXRpb25Q cnVuZVJlc3VsdCAqKQorCQlzdHJpbmdUb05vZGUocGFydF9wcnVuZV9yZXN1bHRfc3BhY2UpOwor CiAJLyogUmVjb25zdHJ1Y3QgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbXNwYWNlID0gc2htX3Rv Y19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFt TEkgPSBSZXN0b3JlUGFyYW1MaXN0KCZwYXJhbXNwYWNlKTsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5 RGVzYyBmb3IgdGhlIHF1ZXJ5LiAqLwotCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsCisJ cmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkg ICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFw c2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29wdGlv bnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYxNWJkODA5NzMuLmFm ODdiOTE5N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTI1LDYgKzI1 LDcgQEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUu aCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInBhcnRp dGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCIK QEAgLTE4NSw3ICsxODYsMTEgQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25L ZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlv bl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0 YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9z LCBBdHRyTWFwICphdHRyTWFwKTsKIHN0YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpDcmVhdGVQ YXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCSAg UGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pOworCQkJCQkJCQkJCQkJCSAgUGFydGl0aW9u UHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2luaXRp YWxfc3RlcHMsCisJCQkJCQkJCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJCQkJ CQkJCQkJCQkJICBMaXN0ICpydGFibGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwKKwkJCQkJCQkJ CQkJCQkgIFBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0ZGlyKTsKIHN0YXRpYyB2b2lkIEluaXRQYXJ0 aXRpb25QcnVuZUNvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkJ CQkJICBMaXN0ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkJCQkJICBQYXJ0aXRpb25EZXNjIHBhcnRk ZXNjLApAQCAtMTk4LDcgKzIwMyw4IEBAIHN0YXRpYyB2b2lkIFBhcnRpdGlvblBydW5lRml4U3Vi UGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogc3RhdGljIHZvaWQgZmlu ZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRh dGEsCiAJCQkJCQkJCQkJICAgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lLAogCQkJ CQkJCQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2 YWxpZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKip2YWxpZHN1YnBsYW5zLAor CQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcyk7CiAKIAogLyoKQEAg LTE1ODcsOCArMTU5MywxMCBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlz dCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICogY29uc2lkZXJlZCB0byBiZSBhIHN0YWJs ZSBleHByZXNzaW9uLCBpdCBjYW4gY2hhbmdlIHZhbHVlIGZyb20gb25lIHBsYW4KICAqIG5vZGUg c2NhbiB0byB0aGUgbmV4dCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLiAgU3RhYmxlIGNvbXBhcmlz b24KICAqIGV4cHJlc3Npb25zIHRoYXQgZG9uJ3QgaW52b2x2ZSBzdWNoIFBhcmFtcyBhbGxvdyBw YXJ0aXRpb24gcHJ1bmluZyB0byBiZQotICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFy dHVwLiAgRXhwcmVzc2lvbnMgdGhhdCBkbyBpbnZvbHZlIHN1Y2ggUGFyYW1zCi0gKiByZXF1aXJl IHVzIHRvIHBydW5lIHNlcGFyYXRlbHkgZm9yIGVhY2ggc2NhbiBvZiB0aGUgcGFyZW50IHBsYW4g bm9kZS4KKyAqIGRvbmUgb25jZSBkdXJpbmcgZXhlY3V0b3Igc3RhcnR1cCBvciBkdXJpbmcgRXhl Y3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgdGhhdAorICogcnVucyBhcyBwYXJ0IG9mIHBlcmZvcm1p bmcgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBvbiBhIGdpdmVuIHBsYW4gdHJlZS4KKyAqIEV4cHJl c3Npb25zIHRoYXQgZG8gaW52b2x2ZSBzdWNoIFBhcmFtcyByZXF1aXJlIHVzIHRvIHBydW5lIHNl cGFyYXRlbHkgZm9yCisgKiBlYWNoIHNjYW4gb2YgdGhlIHBhcmVudCBwbGFuIG5vZGUuCiAgKgog ICogTm90ZSB0aGF0IHBydW5pbmcgYXdheSB1bm5lZWRlZCBzdWJwbGFucyBkdXJpbmcgZXhlY3V0 b3Igc3RhcnR1cCBoYXMgdGhlCiAgKiBhZGRlZCBiZW5lZml0IG9mIG5vdCBoYXZpbmcgdG8gaW5p dGlhbGl6ZSB0aGUgdW5uZWVkZWQgc3VicGxhbnMgYXQgYWxsLgpAQCAtMTYwNSw2ICsxNjEzLDEz IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJN YXAgKmF0dHJNYXApCiAgKgkJYWNjb3VudCBmb3IgaW5pdGlhbCBwcnVuaW5nIHBvc3NpYmx5IGhh dmluZyBlbGltaW5hdGVkIHNvbWUgb2YgdGhlCiAgKgkJc3VicGxhbnMuCiAgKgorICogRXhlY1Bh cnRpdGlvbkRvSW5pdGlhbFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIHdpdGggdGhl IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBhIGdpdmVuCisgKgkJUGFydGl0aW9uUHJ1bmVJbmZv IHRvIGRldGVybWluZSB0aGUgbWluaW1hbCBzZXQgb2YgY2hpbGQgc3VicGxhbnMKKyAqCQl0byBi ZSBleGVjdXRlZCBvZiB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byB3aGljaCB0aGUgUGFydGl0aW9u UHJ1bmVJbmZvCisgKgkJYmVsb25ncyBhbmQgYWxzbyB0aGUgc2V0IG9mIHRoZSBSVCBpbmRleGVz IG9mIGxlYWYgcGFydGl0aW9ucyB0aGF0IHdpbGwKKyAqCQliZSBzY2FubmVkIHdpdGggdGhvc2Ug c3VicGxhbnMuCisgKgogICogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zOgogICoJCVJldHVybnMg aW5kZXhlcyBvZiBtYXRjaGluZyBzdWJwbGFucyBhZnRlciBldmFsdWF0aW5nIHRoZSBleHByZXNz aW9ucwogICoJCXRoYXQgYXJlIHNhZmUgdG8gZXZhbHVhdGUgYXQgYSBnaXZlbiBwb2ludC4gIFRo aXMgZnVuY3Rpb24gaXMgZmlyc3QKQEAgLTE2MjIsOCArMTYzNyw5IEBAIGFkanVzdF9wYXJ0aXRp b25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xub3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKgog ICogT24gcmV0dXJuLCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zIGlzIGFzc2lnbmVkIHRoZSBz ZXQgb2YgaW5kZXhlcyBvZgogICogY2hpbGQgc3VicGxhbnMgdGhhdCBtdXN0IGJlIGluaXRpYWxp emVkIGFsb25nIHdpdGggdGhlIHBhcmVudCBwbGFuIG5vZGUuCi0gKiBJbml0aWFsIHBydW5pbmcg aXMgcGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkIGFuZCBpbiB0aGF0IGNhc2Ugb25seSB0aGUKLSAq IHN1cnZpdmluZyBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRkZWQuCisgKiBJbml0aWFsIHBydW5p bmcgaXMgcGVyZm9ybWVkIGhlcmUgaWYgbmVlZGVkICh1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVl biBkb25lCisgKiBieSBFeGVjRG9Jbml0aWFsUHJ1bmluZygpKSwgYW5kIGluIHRoYXQgY2FzZSBv bmx5IHRoZSBzdXJ2aXZpbmcgc3VicGxhbnMnCisgKiBpbmRleGVzIGFyZSBhZGRlZC4KICAqCiAg KiBJZiBzdWJwbGFucyBhcmUgaW5kZWVkIHBydW5lZCwgc3VicGxhbl9tYXAgYXJyYXlzIGNvbnRh aW5lZCBpbiB0aGUgcmV0dXJuZWQKICAqIFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHJlLXNlcXVl bmNlZCB0byBub3QgY291bnQgdGhvc2UsIHRob3VnaCBvbmx5IGlmIHRoZQpAQCAtMTYzMiwyOSAr MTY0OCw2NiBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9z LCBBdHRyTWFwICphdHRyTWFwKQogUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgaW50IG5fdG90YWxfc3Vi cGxhbnMsCi0JCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJCQkgaW50 IHBhcnRfcHJ1bmVfaW5kZXgsCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1 YnBsYW5zKQogewotCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRlCSAg ICplc3RhdGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBhcnRpdGlvblBydW5lSW5mbyAgKnBydW5l aW5mbyA9IGxpc3RfbnRoKGVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9pbmZvcywKKwkJCQkJCQkJCQkJ ICBwYXJ0X3BydW5lX2luZGV4KTsKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqcHJ1bmVyZXN1bHQg PSBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfcmVzdWx0OworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7CisJYm9vbAlkb19wcnVuaW5nID0gKHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVu aW5nIHx8CisJCQkJCQkgIHBydW5laW5mby0+bmVlZHNfZXhlY19wcnVuaW5nKTsKIAotCS8qIFdl IG1heSBuZWVkIGFuIGV4cHJlc3Npb24gY29udGV4dCB0byBldmFsdWF0ZSBwYXJ0aXRpb24gZXhw cnMgKi8KLQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOworCS8qCisJ ICogTm8gbmVlZCB0byBkbyBpbml0aWFsIHBydW5pbmcgaWYgaXQgd2FzIGRvbmUgYWxyZWFkeSBi eQorCSAqIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpLCB3aGljaCBpdCB3b3VsZCBiZSBpZiBl c19wYXJ0X3BydW5lX3Jlc3VsdAorCSAqIGhhcyBiZWVuIHNldC4KKwkgKi8KKwlpZiAocHJ1bmVy ZXN1bHQpCisJCWRvX3BydW5pbmcgPSBwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmluZzsKKwor CXBydW5lc3RhdGUgPSBOVUxMOworCWlmIChkb19wcnVuaW5nKQorCXsKKwkJLyogV2UgbWF5IG5l ZWQgYW4gZXhwcmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLwor CQlFeGVjQXNzaWduRXhwckNvbnRleHQoZXN0YXRlLCBwbGFuc3RhdGUpOwogCi0JLyogQ3JlYXRl IHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nICovCi0JcHJ1bmVzdGF0ZSA9 IENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQkvKiBG b3IgZGF0YSByZWFkaW5nLCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9u cyAqLworCQlpZiAoZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5ID09IE5VTEwpCisJCQll c3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPQorCQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVj dG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFsc2UpOworCisJCS8qCisJCSAqIENyZWF0ZSB0 aGUgd29ya2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gIE5vIG5lZWQgdG8gY29uc2lk ZXIKKwkJICogaW5pdGlhbCBwcnVuaW5nIHN0ZXBzIGlmIHdlIGhhdmUgYSBQYXJ0aXRpb25QcnVu ZVJlc3VsdC4KKwkJICovCisJCXBydW5lc3RhdGUgPSBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRl KHBsYW5zdGF0ZSwgcHJ1bmVpbmZvLAorCQkJCQkJCQkJCQkgICBwcnVuZXJlc3VsdCA9PSBOVUxM LCB0cnVlLAorCQkJCQkJCQkJCQkgICBOSUwsIHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQsCisJ CQkJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJLyoK IAkgKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lIHBhc3MsIGlmIHJlcXVpcmVk LgogCSAqLwotCWlmIChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQotCQkqaW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsIHRy dWUpOworCWlmIChwcnVuZXJlc3VsdCkKKwl7CisJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMg PQorCQkJbGlzdF9udGgocHJ1bmVyZXN1bHQtPnZhbGlkX3N1YnBsYW5fb2Zmc19saXN0LCBwYXJ0 X3BydW5lX2luZGV4KTsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBwcnVuZXN0YXRlLT5k b19pbml0aWFsX3BydW5lKQorCXsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNG aW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLAorCQkJCQkJCQkJCQkJCQkJIE5V TEwpOworCX0KIAllbHNlCiAJewogCQkvKiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRvIGlu aXRpYWxpemUgYWxsIHN1YnBsYW5zICovCiAJCUFzc2VydChuX3RvdGFsX3N1YnBsYW5zID4gMCk7 CiAJCSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsCiAJ CQkJCQkJCQkJCQkgIG5fdG90YWxfc3VicGxhbnMgLSAxKTsKKwkJcmV0dXJuIHBydW5lc3RhdGU7 CiAJfQogCiAJLyoKQEAgLTE2NjIsNyArMTcxNSw4IEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmlu ZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkgKiB0aGF0IHdlcmUgcmVtb3ZlZCBhYm92ZSBkdWUg dG8gaW5pdGlhbCBwcnVuaW5nLiAgTm8gbmVlZCB0byBkbyB0aGlzIGlmCiAJICogbm8gc3RlcHMg d2VyZSByZW1vdmVkLgogCSAqLwotCWlmIChibXNfbnVtX21lbWJlcnMoKmluaXRpYWxseV92YWxp ZF9zdWJwbGFucykgPCBuX3RvdGFsX3N1YnBsYW5zKQorCWlmIChwcnVuZXN0YXRlICYmCisJCWJt c19udW1fbWVtYmVycygqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKSA8IG5fdG90YWxfc3VicGxh bnMpCiAJewogCQkvKgogCQkgKiBXZSBjYW4gc2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVj X3BydW5lLCBldmVuIHRob3VnaCB0aGF0CkBAIC0xNjc4LDExICsxNzMyLDc0IEBAIEV4ZWNJbml0 UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAlyZXR1cm4gcHJ1bmVzdGF0 ZTsKIH0KIAorLyoKKyAqIEV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nCisgKgkJUGVyZm9y bSBpbml0aWFsIHBydW5pbmcgdXNpbmcgZ2l2ZW4gUGFydGl0aW9uUHJ1bmVJbmZvIHRvIGRldGVy bWluZQorICoJCXRoZSBtaW5pbWFsIHNldCBvZiBjaGlsZCBzdWJwbGFucyB0byBiZSBleGVjdXRl ZCBvZiB0aGUgcGFyZW50IHBsYW4KKyAqCQlub2RlIHRvIHdoaWNoIHRoZSBQYXJ0aXRpb25QcnVu ZUluZm8gYmVsb25ncyBhbmQgYWxzbyB0aGUgc2V0IG9mIFJUCisgKgkJaW5kZXhlcyBvZiBsZWFm IHBhcnRpdGlvbnMgdGhhdCB3aWxsIHNjYW5uZWQgd2l0aCB0aG9zZSBzdWJwbGFucy4KKyAqLwor Qml0bWFwc2V0ICoKK0V4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJICBQYXJ0aXRpb25QcnVu ZUluZm8gKnBydW5laW5mbywKKwkJCQkJCQkgIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRp cykKK3sKKwlMaXN0CQkgKnJ0YWJsZSA9IHBsYW5uZWRzdG10LT5ydGFibGU7CisJRXhwckNvbnRl eHQJICplY29udGV4dDsKKwlQYXJ0aXRpb25EaXJlY3RvcnkgcGRpcjsKKwlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQsCisJCQkJICB0bXBjb250ZXh0OworCVBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGU7CisJQml0bWFwc2V0CSAqdmFsaWRfc3VicGxhbl9vZmZzOworCisJLyoKKwkgKiBB IHRlbXBvcmFyeSBjb250ZXh0IGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgcmVxdWlyZWQgd2hpbGUg ZXhlY3V0aW5nCisJICogcGFydGl0aW9uIHBydW5pbmcgc3RlcHMuCisJICovCisJdG1wY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CSAgICJpbml0aWFsIHBydW5pbmcgd29ya2luZyBkYXRhIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfU0laRVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1w Y29udGV4dCk7CisKKwkvKgorCSAqIFBhcnRpdGlvbkRpcmVjdG9yeSB0byBsb29rIHVwIHBhcnRp dGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggb21pdHMKKwkgKiBkZXRhY2hlZCBwYXJ0aXRpb25zLCBq dXN0IGxpa2UgaW4gdGhlIGV4ZWN1dG9yIHByb3Blci4KKwkgKi8KKwlwZGlyID0gQ3JlYXRlUGFy dGl0aW9uRGlyZWN0b3J5KEN1cnJlbnRNZW1vcnlDb250ZXh0LCBmYWxzZSk7CisKKwkvKgorCSAq IFdlIGRvbid0IHlldCBoYXZlIGEgUGxhblN0YXRlIGZvciB0aGUgcGFyZW50IHBsYW4gbm9kZSwg c28gd2UgbXVzdAorCSAqIGNyZWF0ZSBhIHN0YW5kYWxvbmUgRXhwckNvbnRleHQgdG8gZXZhbHVh dGUgcHJ1bmluZyBleHByZXNzaW9ucywKKwkgKiBlcXVpcHBlZCB3aXRoIHRoZSBpbmZvcm1hdGlv biBhYm91dCB0aGUgRVhURVJOIHBhcmFtZXRlcnMgdGhhdCB0aGUKKwkgKiBjYWxsZXIgcGFzc2Vk IHVzLiAgTm90ZSB0aGF0IHRoYXQncyBva2F5IGJlY2F1c2UgdGhlIGluaXRpYWwgcHJ1bmluZwor CSAqIHN0ZXBzIGRvIG5vdCBjb250YWluIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgdGhlIGV4ZWN1 dGlvbiB0byBoYXZlCisJICogc3RhcnRlZC4KKwkgKi8KKwllY29udGV4dCA9IENyZWF0ZVN0YW5k YWxvbmVFeHByQ29udGV4dCgpOworCWVjb250ZXh0LT5lY3h0X3BhcmFtX2xpc3RfaW5mbyA9IHBh cmFtczsKKwlwcnVuZXN0YXRlID0gQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShOVUxMLCBwcnVu ZWluZm8sIHRydWUsIGZhbHNlLAorCQkJCQkJCQkJCSAgIHJ0YWJsZSwgZWNvbnRleHQsIHBkaXIp OworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qIERvIHRoZSBpbml0 aWFsIHBydW5pbmcuICovCisJdmFsaWRfc3VicGxhbl9vZmZzID0gRXhlY0ZpbmRNYXRjaGluZ1N1 YlBsYW5zKHBydW5lc3RhdGUsIHRydWUsCisJCQkJCQkJCQkJCQkgIHNjYW5fbGVhZnBhcnRfcnRp cyk7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRydWUpOworCURlc3Ryb3lQYXJ0aXRp b25EaXJlY3RvcnkocGRpcik7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0KTsKKwor CXJldHVybiB2YWxpZF9zdWJwbGFuX29mZnM7Cit9CisKIC8qCiAgKiBDcmVhdGVQYXJ0aXRpb25Q cnVuZVN0YXRlCiAgKgkJQnVpbGQgdGhlIGRhdGEgc3RydWN0dXJlIHJlcXVpcmVkIGZvciBjYWxs aW5nIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucwogICoKLSAqICdwbGFuc3RhdGUnIGlzIHRoZSBw YXJlbnQgcGxhbiBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlLgorICogJ3BsYW5zdGF0ZScsIGlmIG5v dCBOVUxMLCBpcyB0aGUgcGFyZW50IHBsYW4gbm9kZSdzIGV4ZWN1dGlvbiBzdGF0ZS4gIEl0Cisg KiBjYW4gYmUgTlVMTCBpZiBiZWluZyBjYWxsZWQgYmVmb3JlIEV4ZWN1dG9yU3RhcnQoKSwgaW4g d2hpY2ggY2FzZSwKKyAqICdydGFibGUnIChyYW5nZSB0YWJsZSksICdlY29udGV4dCcsIGFuZCAn cGFydGRpcicgbXVzdCBiZSBleHBsaWNpdGx5CisgKiBwcm92aWRlZC4KICAqCiAgKiAncHJ1bmVp bmZvJyBpcyBhIFBhcnRpdGlvblBydW5lSW5mbyBhcyBnZW5lcmF0ZWQgYnkKICAqIG1ha2VfcGFy dGl0aW9uX3BydW5laW5mby4gIEhlcmUgd2UgYnVpbGQgYSBQYXJ0aXRpb25QcnVuZVN0YXRlIGNv bnRhaW5pbmcgYQpAQCAtMTY5NiwxOSArMTgxMywyMSBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5p bmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAgKiBQYXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAq Lwogc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKgotQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0 ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCitD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkJICBQ YXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKKwkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0 aWFsX3N0ZXBzLAorCQkJCQkJICBib29sIGNvbnNpZGVyX2V4ZWNfc3RlcHMsCisJCQkJCQkgIExp c3QgKnJ0YWJsZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJICBQYXJ0aXRpb25EaXJl Y3RvcnkgcGFydGRpcikKIHsKLQlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3RhdGU7 CisJRVN0YXRlCSAgICplc3RhdGUgPSBwbGFuc3RhdGUgPyBwbGFuc3RhdGUtPnN0YXRlIDogTlVM TDsKIAlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9oaWVy YXJjaGllczsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0ICplY29u dGV4dCA9IHBsYW5zdGF0ZS0+cHNfRXhwckNvbnRleHQ7CiAKLQkvKiBGb3IgZGF0YSByZWFkaW5n LCBleGVjdXRvciBhbHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLwotCWlmIChlc3Rh dGUtPmVzX3BhcnRpdGlvbl9kaXJlY3RvcnkgPT0gTlVMTCkKLQkJZXN0YXRlLT5lc19wYXJ0aXRp b25fZGlyZWN0b3J5ID0KLQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVzX3F1 ZXJ5X2N4dCwgZmFsc2UpOworCUFzc2VydCgoZXN0YXRlICE9IE5VTEwpIHx8CisJCQkocGFydGRp ciAhPSBOVUxMICYmIGVjb250ZXh0ICE9IE5VTEwgJiYgcnRhYmxlICE9IE5JTCkpOwogCiAJbl9w YXJ0X2hpZXJhcmNoaWVzID0gbGlzdF9sZW5ndGgocHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyk7CiAJ QXNzZXJ0KG5fcGFydF9oaWVyYXJjaGllcyA+IDApOwpAQCAtMTc2MywxNSArMTg4Miw0MiBAQCBD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25Q cnVuZUluZm8gKnBydW5laW5mbykKIAkJCVBhcnRpdGlvbktleSBwYXJ0a2V5OwogCiAJCQkvKgot CQkJICogV2UgY2FuIHJlbHkgb24gdGhlIGNvcGllcyBvZiB0aGUgcGFydGl0aW9uZWQgdGFibGUn cyBwYXJ0aXRpb24KLQkJCSAqIGtleSBhbmQgcGFydGl0aW9uIGRlc2NyaXB0b3IgYXBwZWFyaW5n IGluIGl0cyByZWxjYWNoZSBlbnRyeSwKLQkJCSAqIGJlY2F1c2UgdGhhdCBlbnRyeSB3aWxsIGJl IGhlbGQgb3BlbiBhbmQgbG9ja2VkIGZvciB0aGUKLQkJCSAqIGR1cmF0aW9uIG9mIHRoaXMgZXhl Y3V0b3IgcnVuLgorCQkJICogTXVzdCBvcGVuIHRoZSByZWxhdGlvbiBieSBvdXJzZWx2ZXMgd2hl biBjYWxsZWQgYmVmb3JlIHRoZQorCQkJICogZXhlY3V0aW9uIGhhcyBzdGFydGVkLCBzdWNoIGFz LCB3aGVuIGNhbGxlZCBkdXJpbmcKKwkJCSAqIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpIG9u IGEgY2FjaGVkIHBsYW4uICBJbiB0aGF0IGNhc2UsCisJCQkgKiBzdWItcGFydGl0aW9ucyBtdXN0 IGJlIGxvY2tlZCwgYmVjYXVzZSBBY3F1aXJlUGxhbm5lckxvY2tzKCkKKwkJCSAqIHdvdWxkIG5v dCBoYXZlIHNlZW4gdGhlbS4gKDFzdCByZWxhdGlvbiBpbiBhIHBhcnRyZWxwcnVuZWluZm9zCisJ CQkgKiBsaXN0IGlzIGFsd2F5cyB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBhcHBlYXJpbmcg aW4gdGhlCisJCQkgKiBxdWVyeSwgd2hpY2ggQWNxdWlyZVBsYW5uZXJMb2NrcygpIHdvdWxkIGhh dmUgbG9ja2VkOyB0aGUKKwkJCSAqIEFzc2VydCBpbiByZWxhdGlvbl9vcGVuKCkgZ3VhcmRzIHRo YXQgYXNzdW1wdGlvbi4pCisJCQkgKi8KKwkJCWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCXsKKwkJ CQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChwaW5mby0+cnRpbmRleCwgcnRhYmxlKTsK KwkJCQlpbnQJCWxvY2ttb2RlID0gKGogPT0gMCkgPyBOb0xvY2sgOiBydGUtPnJlbGxvY2ttb2Rl OworCisJCQkJcGFydHJlbCA9IHRhYmxlX29wZW4ocnRlLT5yZWxpZCwgbG9ja21vZGUpOworCQkJ fQorCQkJZWxzZQorCQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0 ZSwgcGluZm8tPnJ0aW5kZXgpOworCisJCQkvKgorCQkJICogV2UgY2FuIHJlbHkgb24gdGhlIGNv cHkgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCisJCQkgKiBrZXkgZnJvbSBp biBpdHMgcmVsY2FjaGUgZW50cnksIGJlY2F1c2UgaXQgY2FuJ3QgY2hhbmdlIChvcgorCQkJICog Z2V0IGRlc3Ryb3llZCkgYXMgbG9uZyBhcyB0aGUgcmVsYXRpb24gaXMgbG9ja2VkLiAgUGFydGl0 aW9uCisJCQkgKiBkZXNjcmlwdG9yIGlzIHRha2VuIGZyb20gdGhlIFBhcnRpdGlvbkRpcmVjdG9y eSBhc3NvY2lhdGVkIHdpdGgKKwkJCSAqIHRoZSB0YWJsZSB0aGF0IGlzIGhlbGQgb3BlbiBsb25n IGVub3VnaCBmb3IgdGhlIGRlc2NyaXB0b3IgdG8KKwkJCSAqIHJlbWFpbiB2YWxpZCB3aGlsZSBp dCdzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcHJ1bmluZyBzdGVwcy4KIAkJCSAqLwotCQkJcGFydHJl bCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRlLCBwaW5mby0+cnRpbmRleCk7CiAJ CQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocGFydHJlbCk7Ci0JCQlwYXJ0ZGVz YyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChlc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3Rv cnksCi0JCQkJCQkJCQkJCQlwYXJ0cmVsKTsKKwkJCXBhcnRkZXNjID0gUGFydGl0aW9uRGlyZWN0 b3J5TG9va3VwKHBhcnRkaXIsIHBhcnRyZWwpOworCisJCQkvKgorCQkJICogTXVzdCBjbG9zZSBw YXJ0cmVsLCBrZWVwaW5nIHRoZSBsb2NrIHRha2VuLCBpZiB3ZSdyZSBub3QgdXNpbmcKKwkJCSAq IEVTdGF0ZSdzIGVudHJ5LgorCQkJICovCisJCQlpZiAoZXN0YXRlID09IE5VTEwpCisJCQkJdGFi bGVfY2xvc2UocGFydHJlbCwgTm9Mb2NrKTsKIAogCQkJLyoKIAkJCSAqIEluaXRpYWxpemUgdGhl IHN1YnBsYW5fbWFwIGFuZCBzdWJwYXJ0X21hcC4KQEAgLTE3ODUsNiArMTkzMSw3IEBAIENyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIFBhcnRpdGlvblBydW5l SW5mbyAqcHJ1bmVpbmZvKQogCQkJQXNzZXJ0KHBhcnRkZXNjLT5ucGFydHMgPj0gcGluZm8tPm5w YXJ0cyk7CiAJCQlwcHJ1bmUtPm5wYXJ0cyA9IHBhcnRkZXNjLT5ucGFydHM7CiAJCQlwcHJ1bmUt PnN1YnBsYW5fbWFwID0gcGFsbG9jKHNpemVvZihpbnQpICogcGFydGRlc2MtPm5wYXJ0cyk7CisJ CQlwcHJ1bmUtPnJ0aV9tYXAgPSBwYWxsb2Moc2l6ZW9mKEluZGV4KSAqIHBhcnRkZXNjLT5ucGFy dHMpOwogCQkJaWYgKHBhcnRkZXNjLT5ucGFydHMgPT0gcGluZm8tPm5wYXJ0cykKIAkJCXsKIAkJ CQkvKgpAQCAtMTc5NSw2ICsxOTQyLDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQkJcHBy dW5lLT5zdWJwYXJ0X21hcCA9IHBpbmZvLT5zdWJwYXJ0X21hcDsKIAkJCQltZW1jcHkocHBydW5l LT5zdWJwbGFuX21hcCwgcGluZm8tPnN1YnBsYW5fbWFwLAogCQkJCQkgICBzaXplb2YoaW50KSAq IHBpbmZvLT5ucGFydHMpOworCQkJCW1lbWNweShwcHJ1bmUtPnJ0aV9tYXAsIHBpbmZvLT5ydGlf bWFwLAorCQkJCQkgICBzaXplb2YoaW50KSAqIHBpbmZvLT5ucGFydHMpOwogCiAJCQkJLyoKIAkJ CQkgKiBEb3VibGUtY2hlY2sgdGhhdCB0aGUgbGlzdCBvZiB1bnBydW5lZCByZWxhdGlvbnMgaGFz IG5vdApAQCAtMTg0NSw2ICsxOTk0LDggQEAgQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8pCiAJCQkJCQkJ cGluZm8tPnN1YnBsYW5fbWFwW3BkX2lkeF07CiAJCQkJCQlwcHJ1bmUtPnN1YnBhcnRfbWFwW3Bw X2lkeF0gPQogCQkJCQkJCXBpbmZvLT5zdWJwYXJ0X21hcFtwZF9pZHhdOworCQkJCQkJcHBydW5l LT5ydGlfbWFwW3BwX2lkeF0gPQorCQkJCQkJCXBpbmZvLT5ydGlfbWFwW3BkX2lkeF07CiAJCQkJ CQlwZF9pZHgrKzsKIAkJCQkJfQogCQkJCQllbHNlCkBAIC0xODUyLDYgKzIwMDMsNyBAQCBDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVu ZUluZm8gKnBydW5laW5mbykKIAkJCQkJCS8qIHRoaXMgcGFydGRlc2MgZW50cnkgaXMgbm90IGlu IHRoZSBwbGFuICovCiAJCQkJCQlwcHJ1bmUtPnN1YnBsYW5fbWFwW3BwX2lkeF0gPSAtMTsKIAkJ CQkJCXBwcnVuZS0+c3VicGFydF9tYXBbcHBfaWR4XSA9IC0xOworCQkJCQkJcHBydW5lLT5ydGlf bWFwW3BwX2lkeF0gPSAwOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xODczLDcgKzIwMjUsNyBAQCBD cmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25Q cnVuZUluZm8gKnBydW5laW5mbykKIAkJCSAqIEluaXRpYWxpemUgcHJ1bmluZyBjb250ZXh0cyBh cyBuZWVkZWQuCiAJCQkgKi8KIAkJCXBwcnVuZS0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzID0gcGlu Zm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5mby0+aW5pdGlhbF9wcnVuaW5n X3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2luaXRpYWxfc3RlcHMgJiYgcGluZm8tPmluaXRpYWxf cHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVDb250ZXh0KCZwcHJ1 bmUtPmluaXRpYWxfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5pbml0aWFsX3BydW5pbmdf c3RlcHMsCkBAIC0xODgzLDcgKzIwMzUsNyBAQCBDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbykKIAkJCQlw cnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lID0gdHJ1ZTsKIAkJCX0KIAkJCXBwcnVuZS0+ZXhl Y19wcnVuaW5nX3N0ZXBzID0gcGluZm8tPmV4ZWNfcHJ1bmluZ19zdGVwczsKLQkJCWlmIChwaW5m by0+ZXhlY19wcnVuaW5nX3N0ZXBzKQorCQkJaWYgKGNvbnNpZGVyX2V4ZWNfc3RlcHMgJiYgcGlu Zm8tPmV4ZWNfcHJ1bmluZ19zdGVwcykKIAkJCXsKIAkJCQlJbml0UGFydGl0aW9uUHJ1bmVDb250 ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJCQkJCQkgIHBpbmZvLT5leGVjX3BydW5p bmdfc3RlcHMsCkBAIC0yMTExLDEwICsyMjYzLDE0IEBAIFBhcnRpdGlvblBydW5lRml4U3ViUGxh bk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICogUGFzcyBpbml0aWFsX3By dW5lIGlmIFBBUkFNX0VYRUMgUGFyYW1zIGNhbm5vdCB5ZXQgYmUgZXZhbHVhdGVkLiAgVGhpcwog ICogZGlmZmVyZW50aWF0ZXMgdGhlIGluaXRpYWwgZXhlY3V0b3ItdGltZSBwcnVuaW5nIHN0ZXAg ZnJvbSBsYXRlcgogICogcnVudGltZSBwcnVuaW5nLgorICoKKyAqIFJUIGluZGV4ZXMgb2YgbGVh ZiBwYXJ0aXRpb25zIHNjYW5uZWQgYnkgdGhlIGNob3NlbiBzdWJwbGFucyBhcmUgYWRkZWQgdG8K KyAqICpzY2FuX2xlYWZwYXJ0X3J0aXMgaWYgdGhlIHBvaW50ZXIgaXMgbm9uLU5VTEwuCiAgKi8K IEJpdG1hcHNldCAqCiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCSBib29sIGluaXRpYWxfcHJ1bmUpCisJCQkJCQkgYm9vbCBp bml0aWFsX3BydW5lLAorCQkJCQkJIEJpdG1hcHNldCAqKnNjYW5fbGVhZnBhcnRfcnRpcykKIHsK IAlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK QEAgLTIxNDksNyArMjMwNSw3IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlLAogCQkgKi8KIAkJcHBydW5lID0gJnBydW5lZGF0YS0+cGFy dHJlbHBydW5lZGF0YVswXTsKIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5l ZGF0YSwgcHBydW5lLCBpbml0aWFsX3BydW5lLAotCQkJCQkJCQkJICAgJnJlc3VsdCk7CisJCQkJ CQkJCQkgICAmcmVzdWx0LCBzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJCS8qIEV4cHJlc3Npb24g ZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250ZXh0IHRvbyAqLwogCQlpZiAocHBy dW5lLT5leGVjX3BydW5pbmdfc3RlcHMpCkBAIC0yMTYzLDYgKzIzMTksOCBAQCBFeGVjRmluZE1h dGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIAogCS8qIENv cHkgcmVzdWx0IG91dCBvZiB0aGUgdGVtcCBjb250ZXh0IGJlZm9yZSB3ZSByZXNldCBpdCAqLwog CXJlc3VsdCA9IGJtc19jb3B5KHJlc3VsdCk7CisJaWYgKHNjYW5fbGVhZnBhcnRfcnRpcykKKwkJ KnNjYW5fbGVhZnBhcnRfcnRpcyA9IGJtc19jb3B5KCpzY2FuX2xlYWZwYXJ0X3J0aXMpOwogCiAJ TWVtb3J5Q29udGV4dFJlc2V0KHBydW5lc3RhdGUtPnBydW5lX2NvbnRleHQpOwogCkBAIC0yMTcz LDEzICsyMzMxLDE1IEBAIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0 YXRlICpwcnVuZXN0YXRlLAogICogZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNlCiAgKgkJ UmVjdXJzaXZlIHdvcmtlciBmdW5jdGlvbiBmb3IgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zCiAg KgotICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqdmFsaWRzdWJw bGFucworICogQWRkcyB2YWxpZCAobm9uLXBydW5hYmxlKSBzdWJwbGFuIElEcyB0byAqdmFsaWRz dWJwbGFucyBhbmQgUlQgaW5kZXhlcyBvZgorICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgbGVhZiBw YXJ0aXRpb25zIHRvICpzY2FuX2xlYWZwYXJ0X3J0aXMgKGlmIGFza2VkIGZvcikuCiAgKi8KIHN0 YXRpYyB2b2lkCiBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmlu Z0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkgICBQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpw cHJ1bmUsCiAJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lLAotCQkJCQkJCSAgIEJpdG1hcHNl dCAqKnZhbGlkc3VicGxhbnMpCisJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFucywK KwkJCQkJCQkgICBCaXRtYXBzZXQgKipzY2FuX2xlYWZwYXJ0X3J0aXMpCiB7CiAJQml0bWFwc2V0 ICAqcGFydHNldDsKIAlpbnQJCQlpOwpAQCAtMjIwNiw4ICsyMzY2LDE0IEBAIGZpbmRfbWF0Y2hp bmdfc3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0c2V0LCBpKSkgPj0gMCkKIAl7CiAJCWlmIChw cHJ1bmUtPnN1YnBsYW5fbWFwW2ldID49IDApCisJCXsKIAkJCSp2YWxpZHN1YnBsYW5zID0gYm1z X2FkZF9tZW1iZXIoKnZhbGlkc3VicGxhbnMsCiAJCQkJCQkJCQkJCXBwcnVuZS0+c3VicGxhbl9t YXBbaV0pOworCQkJQXNzZXJ0KHBwcnVuZS0+cnRpX21hcFtpXSA+IDApOworCQkJaWYgKHNjYW5f bGVhZnBhcnRfcnRpcykKKwkJCQkqc2Nhbl9sZWFmcGFydF9ydGlzID0gYm1zX2FkZF9tZW1iZXIo KnNjYW5fbGVhZnBhcnRfcnRpcywKKwkJCQkJCQkJCQkJCQkgcHBydW5lLT5ydGlfbWFwW2ldKTsK KwkJfQogCQllbHNlCiAJCXsKIAkJCWludAkJCXBhcnRpZHggPSBwcHJ1bmUtPnN1YnBhcnRfbWFw W2ldOwpAQCAtMjIxNSw3ICsyMzgxLDggQEAgZmluZF9tYXRjaGluZ19zdWJwbGFuc19yZWN1cnNl KFBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEsCiAJCQlpZiAocGFydGlkeCA+PSAwKQog CQkJCWZpbmRfbWF0Y2hpbmdfc3VicGxhbnNfcmVjdXJzZShwcnVuZWRhdGEsCiAJCQkJCQkJCQkJ CSAgICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbcGFydGlkeF0sCi0JCQkJCQkJCQkJCSAg IGluaXRpYWxfcHJ1bmUsIHZhbGlkc3VicGxhbnMpOworCQkJCQkJCQkJCQkgICBpbml0aWFsX3By dW5lLCB2YWxpZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkgICBzY2FuX2xlYWZwYXJ0X3J0aXMpOwog CQkJZWxzZQogCQkJewogCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjVXRpbHMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCmluZGV4IDlkZjFm ODFlYTguLmY5Yzc5NzZmZjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNV dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCkBAIC0xMTksNiAr MTE5LDggQEAgQ3JlYXRlRXhlY3V0b3JTdGF0ZSh2b2lkKQogCWVzdGF0ZS0+ZXNfcmVsYXRpb25z ID0gTlVMTDsKIAllc3RhdGUtPmVzX3Jvd21hcmtzID0gTlVMTDsKIAllc3RhdGUtPmVzX3BsYW5u ZWRzdG10ID0gTlVMTDsKKwllc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MgPSBOSUw7CisJZXN0 YXRlLT5lc19wYXJ0X3BydW5lX3Jlc3VsdCA9IE5VTEw7CiAKIAllc3RhdGUtPmVzX2p1bmtGaWx0 ZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCmluZGV4IGY5NDYwYWU1MDYuLmEy MTgyYTZiMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC04NDQsNyArODQ0LDcgQEAg cG9zdHF1ZWxfc3RhcnQoZXhlY3V0aW9uX3N0YXRlICplcywgU1FMRnVuY3Rpb25DYWNoZVB0ciBm Y2FjaGUpCiAJZWxzZQogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAotCWVzLT5xZCA9IENyZWF0 ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwKKwllcy0+cWQgPSBDcmVhdGVRdWVyeURlc2MoZXMtPnN0bXQs IE5VTEwsCiAJCQkJCQkJIGZjYWNoZS0+c3JjLAogCQkJCQkJCSBHZXRBY3RpdmVTbmFwc2hvdCgp LAogCQkJCQkJCSBJbnZhbGlkU25hcHNob3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5k ZXggMzU3ZTEwYTFkNy4uOTY4ODBlMTIyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpA QCAtMTM0LDcgKzEzNCw3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJYXBwZW5kc3RhdGUtPmFzX2JlZ3VuID0gZmFsc2U7CiAKIAkv KiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVkLCB0aGVuIHNldCB0aGF0 IHVwIG5vdyAqLwotCWlmIChub2RlLT5wYXJ0X3BydW5lX2luZm8gIT0gTlVMTCkKKwlpZiAobm9k ZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1 bmVzdGF0ZTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqLwogCQlwcnVuZXN0YXRlID0gRXhl Y0luaXRQYXJ0aXRpb25QcnVuaW5nKCZhcHBlbmRzdGF0ZS0+cHMsCiAJCQkJCQkJCQkJCSAgbGlz dF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1 bmVfaW5mbywKKwkJCQkJCQkJCQkJICBub2RlLT5wYXJ0X3BydW5lX2luZGV4LAogCQkJCQkJCQkJ CQkgICZ2YWxpZHN1YnBsYW5zKTsKIAkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gcHJ1 bmVzdGF0ZTsKIAkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwpAQCAt MTU1LDcgKzE1NSw4IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBs YW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVu ZSAmJiBucGxhbnMgPiAwKQorCQlpZiAoYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID09IE5V TEwgfHwKKwkJCSghYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlLT5kb19leGVjX3BydW5lICYm IG5wbGFucyA+IDApKQogCQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2Fk ZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9CiAJZWxzZQpAQCAtNTc3LDcgKzU3OCw3 IEBAIGNob29zZV9uZXh0X3N1YnBsYW5fbG9jYWxseShBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJfQog CQllbHNlIGlmIChub2RlLT5hc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCQkJbm9kZS0+YXNf dmFsaWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19w cnVuZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h c19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCXdoaWNocGxhbiA9IC0xOwogCX0KQEAg LTY0Miw3ICs2NDMsNyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3Rh dGUgKm5vZGUpCiAJCWlmIChub2RlLT5hc192YWxpZF9zdWJwbGFucyA9PSBOVUxMKQogCQl7CiAJ CQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5z KG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKG5vZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CiAKIAkJCS8qCiAJCQkgKiBN YXJrIGVhY2ggaW52YWxpZCBwbGFuIGFzIGZpbmlzaGVkIHRvIGFsbG93IHRoZSBsb29wIGJlbG93 IHRvCkBAIC03MTcsNyArNzE4LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFw cGVuZFN0YXRlICpub2RlKQogCWVsc2UgaWYgKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID09IE5V TEwpCiAJewogCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5n U3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCUV4ZWNGaW5kTWF0Y2hp bmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCQltYXJrX2lu dmFsaWRfc3VicGxhbnNfYXNfZmluaXNoZWQobm9kZSk7CiAJfQogCkBAIC04NjgsNyArODY5LDcg QEAgRXhlY0FwcGVuZEFzeW5jQmVnaW4oQXBwZW5kU3RhdGUgKm5vZGUpCiAJaWYgKG5vZGUtPmFz X3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCiAJewogCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9 Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNl KTsKKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFs c2UsIE5VTEwpOwogCiAJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOwogCX0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggZWNmOTA1MmUwMy4uNzcwOGNm ZmZkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTgyLDcgKzgy LDcgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiAJbWVyZ2VzdGF0ZS0+cHMuRXhlY1Byb2NOb2RlID0gRXhlY01lcmdl QXBwZW5kOwogCiAJLyogSWYgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgZW5hYmxlZCwg dGhlbiBzZXQgdGhhdCB1cCBub3cgKi8KLQlpZiAobm9kZS0+cGFydF9wcnVuZV9pbmZvICE9IE5V TEwpCisJaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKIAl7CiAJCVBhcnRpdGlvblBy dW5lU3RhdGUgKnBydW5lc3RhdGU7CiAKQEAgLTkzLDcgKzkzLDcgQEAgRXhlY0luaXRNZXJnZUFw cGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAq LwogCQlwcnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKCZtZXJnZXN0YXRlLT5w cywKIAkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKSwKLQkJCQkJCQkJ CQkJICBub2RlLT5wYXJ0X3BydW5lX2luZm8sCisJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVu ZV9pbmRleCwKIAkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCW1lcmdlc3RhdGUtPm1z X3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKIAkJbnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZh bGlkc3VicGxhbnMpOwpAQCAtMTAzLDcgKzEwMyw4IEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVy Z2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBzdWJwbGFu LCB3ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVudGluZwog CQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAqLwotCQlp ZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJaWYgKG1lcmdl c3RhdGUtPm1zX3BydW5lX3N0YXRlID09IE5VTEwgfHwKKwkJCSghbWVyZ2VzdGF0ZS0+bXNfcHJ1 bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkpCiAJCQltZXJnZXN0YXRlLT5t c192YWxpZF9zdWJwbGFucyA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CiAJ fQogCWVsc2UKQEAgLTIxOCw3ICsyMTksNyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpw c3RhdGUpCiAJCSAqLwogCQlpZiAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMgPT0gTlVMTCkKIAkJ CW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMo bm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMobm9kZS0+bXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKIAogCQkvKgogCQkgKiBGaXJz dCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJw bGFuLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9zcGkuYwppbmRleCAwNDJhNWY4YjBhLi43MjllMmZkN2IyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9z cGkuYwpAQCAtMTU3OCw2ICsxNTc4LDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0 IGNoYXIgKm5hbWUsIFNQSVBsYW5QdHIgcGxhbiwKIAlDYWNoZWRQbGFuU291cmNlICpwbGFuc291 cmNlOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAgKnN0bXRfbGlzdDsKKwlMaXN0CSAg ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0OwogCWNoYXIJICAgKnF1ZXJ5X3N0cmluZzsKIAlTbmFw c2hvdAlzbmFwc2hvdDsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC0xNjU3LDcgKzE2 NTgsMTAgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQSVBs YW5QdHIgcGxhbiwKIAkgKi8KIAogCS8qIFJlcGxhbiBpZiBuZWVkZWQsIGFuZCBpbmNyZW1lbnQg cGxhbiByZWZjb3VudCBmb3IgcG9ydGFsICovCi0JY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5z b3VyY2UsIHBhcmFtTEksIE5VTEwsIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOworCWNwbGFuID0g R2V0Q2FjaGVkUGxhbihwbGFuc291cmNlLCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1 ZXJ5RW52LAorCQkJCQkJICAmcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CisJQXNzZXJ0KGxpc3Rf bGVuZ3RoKGNwbGFuLT5zdG10X2xpc3QpID09CisJCSAgIGxpc3RfbGVuZ3RoKHBhcnRfcHJ1bmVf cmVzdWx0X2xpc3QpKTsKIAlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJaWYgKCFw bGFuLT5zYXZlZCkKQEAgLTE2ODUsNiArMTY4OSw5IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5h bChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFuUHRyIHBsYW4sCiAJCQkJCSAgc3RtdF9saXN0LAog CQkJCQkgIGNwbGFuKTsKIAorCS8qIENvcHkgUGFydGl0aW9uUHJ1bmVSZXN1bHRzIGludG8gdGhl IHBvcnRhbCdzIGNvbnRleHQuICovCisJUG9ydGFsU3RvcmVQYXJ0aXRpb25QcnVuZVJlc3VsdHMo cG9ydGFsLCBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKKwogCS8qCiAJICogU2V0IHVwIG9wdGlv bnMgZm9yIHBvcnRhbC4gIERlZmF1bHQgU0NST0xMIHR5cGUgaXMgY2hvc2VuIHRoZSBzYW1lIHdh eQogCSAqIGFzIFBlcmZvcm1DdXJzb3JPcGVuIGRvZXMgaXQuCkBAIC0yMDkyLDcgKzIwOTksOCBA QCBTUElfcGxhbl9nZXRfY2FjaGVkX3BsYW4oU1BJUGxhblB0ciBwbGFuKQogCS8qIEdldCB0aGUg Z2VuZXJpYyBwbGFuIGZvciB0aGUgcXVlcnkgKi8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4ocGxh bnNvdXJjZSwgTlVMTCwKIAkJCQkJCSAgcGxhbi0+c2F2ZWQgPyBDdXJyZW50UmVzb3VyY2VPd25l ciA6IE5VTEwsCi0JCQkJCQkgIF9TUElfY3VycmVudC0+cXVlcnlFbnYpOworCQkJCQkJICBfU1BJ X2N1cnJlbnQtPnF1ZXJ5RW52LAorCQkJCQkJICBOVUxMIC8qIE5vdCBpbnRlcmVzdGVkIGluIFBh cnRpdGlvblBydW5lUmVzdWx0cyAqLyk7CiAJQXNzZXJ0KGNwbGFuID09IHBsYW5zb3VyY2UtPmdw bGFuKTsKIAogCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwpAQCAtMjQ3Myw3ICsy NDgxLDkgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVj dXRlT3B0aW9ucyAqb3B0aW9ucywKIAl7CiAJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Ug PSAoQ2FjaGVkUGxhblNvdXJjZSAqKSBsZmlyc3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9saXN0 OwotCQlMaXN0Q2VsbCAgICpsYzI7CisJCUxpc3QJICAgKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3Q7 CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJCXNwaWNhbGxiYWNrYXJnLnF1 ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nOwogCkBAIC0yNTQ5LDggKzI1NTksMTAgQEAg X1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9u cyAqb3B0aW9ucywKIAkJICogcGxhbiwgdGhlIHJlZmNvdW50IG11c3QgYmUgYmFja2VkIGJ5IHRo ZSBwbGFuX293bmVyLgogCQkgKi8KIAkJY3BsYW4gPSBHZXRDYWNoZWRQbGFuKHBsYW5zb3VyY2Us IG9wdGlvbnMtPnBhcmFtcywKLQkJCQkJCQkgIHBsYW5fb3duZXIsIF9TUElfY3VycmVudC0+cXVl cnlFbnYpOwotCisJCQkJCQkJICBwbGFuX293bmVyLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAor CQkJCQkJCSAmcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CisJCUFzc2VydChsaXN0X2xlbmd0aChj cGxhbi0+c3RtdF9saXN0KSA9PQorCQkJICAgbGlzdF9sZW5ndGgocGFydF9wcnVuZV9yZXN1bHRf bGlzdCkpOwogCQlzdG10X2xpc3QgPSBjcGxhbi0+c3RtdF9saXN0OwogCiAJCS8qCkBAIC0yNTg5 LDkgKzI2MDEsMTAgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxhblB0ciBwbGFuLCBjb25zdCBT UElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCX0KIAkJfQogCi0JCWZvcmVhY2gobGMyLCBz dG10X2xpc3QpCisJCWZvcmJvdGgobGMyLCBzdG10X2xpc3QsIGxjMywgcGFydF9wcnVuZV9yZXN1 bHRfbGlzdCkKIAkJewogCQkJUGxhbm5lZFN0bXQgKnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVk U3RtdCwgbGMyKTsKKwkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdCA9 IGxmaXJzdF9ub2RlKFBhcnRpdGlvblBydW5lUmVzdWx0LCBsYzMpOwogCQkJYm9vbAkJY2FuU2V0 VGFnID0gc3RtdC0+Y2FuU2V0VGFnOwogCQkJRGVzdFJlY2VpdmVyICpkZXN0OwogCkBAIC0yNjYz LDcgKzI2NzYsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQ SUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCWVsc2UKIAkJCQkJc25hcCA9IEludmFsaWRT bmFwc2hvdDsKIAotCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsCisJCQkJcWRlc2Mg PSBDcmVhdGVRdWVyeURlc2Moc3RtdCwgcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkJCQkJcGxh bnNvdXJjZS0+cXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCXNuYXAsIGNyb3NzY2hlY2tfc25hcHNo b3QsCiAJCQkJCQkJCQkJZGVzdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlm dW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggODM2ZjQyN2VhOC4u NTlhNzA1NDAxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTk2LDcgKzk2LDEwIEBAIF9jb3B5 UGxhbm5lZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9TQ0FMQVJfRklFTEQo cGFyYWxsZWxNb2RlTmVlZGVkKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChqaXRGbGFncyk7CiAJQ09Q WV9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKKwlDT1BZX05PREVfRklFTEQocGFydFBydW5lSW5mb3Mp OworCUNPUFlfU0NBTEFSX0ZJRUxEKGNvbnRhaW5zSW5pdGlhbFBydW5pbmcpOwogCUNPUFlfTk9E RV9GSUVMRChydGFibGUpOworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKG1pbkxvY2tSZWxpZHMpOwog CUNPUFlfTk9ERV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCUNPUFlfTk9ERV9GSUVMRChhcHBl bmRSZWxhdGlvbnMpOwogCUNPUFlfTk9ERV9GSUVMRChzdWJwbGFucyk7CkBAIC0yNTMsNyArMjU2 LDcgQEAgX2NvcHlBcHBlbmQoY29uc3QgQXBwZW5kICpmcm9tKQogCUNPUFlfTk9ERV9GSUVMRChh cHBlbmRwbGFucyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQobmFzeW5jcGxhbnMpOwogCUNPUFlfU0NB TEFSX0ZJRUxEKGZpcnN0X3BhcnRpYWxfcGxhbik7Ci0JQ09QWV9OT0RFX0ZJRUxEKHBhcnRfcHJ1 bmVfaW5mbyk7CisJQ09QWV9TQ0FMQVJfRklFTEQocGFydF9wcnVuZV9pbmRleCk7CiAKIAlyZXR1 cm4gbmV3bm9kZTsKIH0KQEAgLTI4MSw3ICsyODQsNyBAQCBfY29weU1lcmdlQXBwZW5kKGNvbnN0 IE1lcmdlQXBwZW5kICpmcm9tKQogCUNPUFlfUE9JTlRFUl9GSUVMRChzb3J0T3BlcmF0b3JzLCBm cm9tLT5udW1Db2xzICogc2l6ZW9mKE9pZCkpOwogCUNPUFlfUE9JTlRFUl9GSUVMRChjb2xsYXRp b25zLCBmcm9tLT5udW1Db2xzICogc2l6ZW9mKE9pZCkpOwogCUNPUFlfUE9JTlRFUl9GSUVMRChu dWxsc0ZpcnN0LCBmcm9tLT5udW1Db2xzICogc2l6ZW9mKGJvb2wpKTsKLQlDT1BZX05PREVfRklF TEQocGFydF9wcnVuZV9pbmZvKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChwYXJ0X3BydW5lX2luZGV4 KTsKIAogCXJldHVybiBuZXdub2RlOwogfQpAQCAtMTI4Myw2ICsxMjg2LDggQEAgX2NvcHlQYXJ0 aXRpb25QcnVuZUluZm8oY29uc3QgUGFydGl0aW9uUHJ1bmVJbmZvICpmcm9tKQogCVBhcnRpdGlv blBydW5lSW5mbyAqbmV3bm9kZSA9IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lSW5mbyk7CiAKIAlD T1BZX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5lZWRzX2lu aXRfcHJ1bmluZyk7CisJQ09QWV9TQ0FMQVJfRklFTEQobmVlZHNfZXhlY19wcnVuaW5nKTsKIAlD T1BZX0JJVE1BUFNFVF9GSUVMRChvdGhlcl9zdWJwbGFucyk7CiAKIAlyZXR1cm4gbmV3bm9kZTsK QEAgLTEyOTksNiArMTMwNCw3IEBAIF9jb3B5UGFydGl0aW9uZWRSZWxQcnVuZUluZm8oY29uc3Qg UGFydGl0aW9uZWRSZWxQcnVuZUluZm8gKmZyb20pCiAJQ09QWV9QT0lOVEVSX0ZJRUxEKHN1YnBs YW5fbWFwLCBmcm9tLT5ucGFydHMgKiBzaXplb2YoaW50KSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxE KHN1YnBhcnRfbWFwLCBmcm9tLT5ucGFydHMgKiBzaXplb2YoaW50KSk7CiAJQ09QWV9QT0lOVEVS X0ZJRUxEKHJlbGlkX21hcCwgZnJvbS0+bnBhcnRzICogc2l6ZW9mKE9pZCkpOworCUNPUFlfUE9J TlRFUl9GSUVMRChydGlfbWFwLCBmcm9tLT5ucGFydHMgKiBzaXplb2YoSW5kZXgpKTsKIAlDT1BZ X05PREVfRklFTEQoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzKTsKIAlDT1BZX05PREVfRklFTEQoZXhl Y19wcnVuaW5nX3N0ZXBzKTsKIAlDT1BZX0JJVE1BUFNFVF9GSUVMRChleGVjcGFyYW1pZHMpOwpA QCAtNTQ3Myw2ICs1NDc5LDIxIEBAIF9jb3B5RXh0ZW5zaWJsZU5vZGUoY29uc3QgRXh0ZW5zaWJs ZU5vZGUgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQll eGVjbm9kZXMuaCBjb3B5IGZ1bmN0aW9ucworICogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitzdGF0aWMgUGFydGl0 aW9uUHJ1bmVSZXN1bHQgKgorX2NvcHlQYXJ0aXRpb25QcnVuZVJlc3VsdChjb25zdCBQYXJ0aXRp b25QcnVuZVJlc3VsdCAqZnJvbSkKK3sKKwlQYXJ0aXRpb25QcnVuZVJlc3VsdCAqbmV3bm9kZSA9 IG1ha2VOb2RlKFBhcnRpdGlvblBydW5lUmVzdWx0KTsKKworCUNPUFlfTk9ERV9GSUVMRCh2YWxp ZF9zdWJwbGFuX29mZnNfbGlzdCk7CisJQ09QWV9CSVRNQVBTRVRfRklFTEQoc2Nhbl9sZWFmcGFy dF9ydGlzKTsKKworCXJldHVybiBuZXdub2RlOworfQorCiAvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJdmFs dWUuaCBjb3B5IGZ1bmN0aW9ucwogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUyNyw3ICs1NTQ4LDYgQEAgX2Nv cHlCaXRTdHJpbmcoY29uc3QgQml0U3RyaW5nICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQog Ci0KIHN0YXRpYyBGb3JlaWduS2V5Q2FjaGVJbmZvICoKIF9jb3B5Rm9yZWlnbktleUNhY2hlSW5m byhjb25zdCBGb3JlaWduS2V5Q2FjaGVJbmZvICpmcm9tKQogewpAQCAtNjU2OSw2ICs2NTg5LDEz IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQgKmZyb20pCiAJCQlyZXR2YWwgPSBfY29weVB1 YmxpY2F0aW9uVGFibGUoZnJvbSk7CiAJCQlicmVhazsKIAorCQkJLyoKKwkJCSAqIEVYRUNVVElP TiBOT0RFUworCQkJICovCisJCWNhc2UgVF9QYXJ0aXRpb25QcnVuZVJlc3VsdDoKKwkJCXJldHZh bCA9IF9jb3B5UGFydGl0aW9uUHJ1bmVSZXN1bHQoZnJvbSk7CisJCQlicmVhazsKKwogCQkJLyoK IAkJCSAqIE1JU0NFTExBTkVPVVMgTk9ERVMKIAkJCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXgg ZDVmNWU3NmM1NS4uM2RhZGE2ODI5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0 ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0zMTQsNyArMzE0 LDEwIEBAIF9vdXRQbGFubmVkU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lZFN0bXQg Km5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQpOwogCVdSSVRFX0lO VF9GSUVMRChqaXRGbGFncyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwbGFuVHJlZSk7CisJV1JJVEVf Tk9ERV9GSUVMRChwYXJ0UHJ1bmVJbmZvcyk7CisJV1JJVEVfQk9PTF9GSUVMRChjb250YWluc0lu aXRpYWxQcnVuaW5nKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJ0YWJsZSk7CisJV1JJVEVfQklUTUFQ U0VUX0ZJRUxEKG1pbkxvY2tSZWxpZHMpOwogCVdSSVRFX05PREVfRklFTEQocmVzdWx0UmVsYXRp b25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9G SUVMRChzdWJwbGFucyk7CkBAIC00NDMsNyArNDQ2LDcgQEAgX291dEFwcGVuZChTdHJpbmdJbmZv IHN0ciwgY29uc3QgQXBwZW5kICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoYXBwZW5kcGxhbnMp OwogCVdSSVRFX0lOVF9GSUVMRChuYXN5bmNwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKGZpcnN0 X3BhcnRpYWxfcGxhbik7Ci0JV1JJVEVfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVdS SVRFX0lOVF9GSUVMRChwYXJ0X3BydW5lX2luZGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ2 MCw3ICs0NjMsNyBAQCBfb3V0TWVyZ2VBcHBlbmQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1lcmdl QXBwZW5kICpub2RlKQogCVdSSVRFX09JRF9BUlJBWShzb3J0T3BlcmF0b3JzLCBub2RlLT5udW1D b2xzKTsKIAlXUklURV9PSURfQVJSQVkoY29sbGF0aW9ucywgbm9kZS0+bnVtQ29scyk7CiAJV1JJ VEVfQk9PTF9BUlJBWShudWxsc0ZpcnN0LCBub2RlLT5udW1Db2xzKTsKLQlXUklURV9OT0RFX0ZJ RUxEKHBhcnRfcHJ1bmVfaW5mbyk7CisJV1JJVEVfSU5UX0ZJRUxEKHBhcnRfcHJ1bmVfaW5kZXgp OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAwOSw2ICsxMDEyLDggQEAgX291dFBhcnRpdGlvblBy dW5lSW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFydGl0aW9uUHJ1bmVJbmZvICpub2RlKQog CVdSSVRFX05PREVfVFlQRSgiUEFSVElUSU9OUFJVTkVJTkZPIik7CiAKIAlXUklURV9OT0RFX0ZJ RUxEKHBydW5lX2luZm9zKTsKKwlXUklURV9CT09MX0ZJRUxEKG5lZWRzX2luaXRfcHJ1bmluZyk7 CisJV1JJVEVfQk9PTF9GSUVMRChuZWVkc19leGVjX3BydW5pbmcpOwogCVdSSVRFX0JJVE1BUFNF VF9GSUVMRChvdGhlcl9zdWJwbGFucyk7CiB9CiAKQEAgLTEwMjMsNiArMTAyOCw3IEBAIF9vdXRQ YXJ0aXRpb25lZFJlbFBydW5lSW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFydGl0aW9uZWRS ZWxQcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfSU5UX0FSUkFZKHN1YnBsYW5fbWFwLCBub2RlLT5u cGFydHMpOwogCVdSSVRFX0lOVF9BUlJBWShzdWJwYXJ0X21hcCwgbm9kZS0+bnBhcnRzKTsKIAlX UklURV9PSURfQVJSQVkocmVsaWRfbWFwLCBub2RlLT5ucGFydHMpOworCVdSSVRFX0lOREVYX0FS UkFZKHJ0aV9tYXAsIG5vZGUtPm5wYXJ0cyk7CiAJV1JJVEVfTk9ERV9GSUVMRChpbml0aWFsX3By dW5pbmdfc3RlcHMpOwogCVdSSVRFX05PREVfRklFTEQoZXhlY19wcnVuaW5nX3N0ZXBzKTsKIAlX UklURV9CSVRNQVBTRVRfRklFTEQoZXhlY3BhcmFtaWRzKTsKQEAgLTI0MjUsNiArMjQzMSw5IEBA IF9vdXRQbGFubmVyR2xvYmFsKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVyR2xvYmFsICpu b2RlKQogCVdSSVRFX05PREVfRklFTEQoZmluYWxyb3dtYXJrcyk7CiAJV1JJVEVfTk9ERV9GSUVM RChyZXN1bHRSZWxhdGlvbnMpOwogCVdSSVRFX05PREVfRklFTEQoYXBwZW5kUmVsYXRpb25zKTsK KwlXUklURV9OT0RFX0ZJRUxEKHBhcnRQcnVuZUluZm9zKTsKKwlXUklURV9CT09MX0ZJRUxEKGNv bnRhaW5zSW5pdGlhbFBydW5pbmcpOworCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChtaW5Mb2NrUmVs aWRzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlbGF0aW9uT2lkcyk7CiAJV1JJVEVfTk9ERV9GSUVM RChpbnZhbEl0ZW1zKTsKIAlXUklURV9OT0RFX0ZJRUxEKHBhcmFtRXhlY1R5cGVzKTsKQEAgLTI0 OTIsNiArMjUwMSw3IEBAIF9vdXRQbGFubmVySW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxh bm5lckluZm8gKm5vZGUpCiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGN1ck91dGVyUmVscyk7CiAJ V1JJVEVfTk9ERV9GSUVMRChjdXJPdXRlclBhcmFtcyk7CiAJV1JJVEVfQk9PTF9GSUVMRChwYXJ0 Q29sc1VwZGF0ZWQpOworCVdSSVRFX05PREVfRklFTEQocGFydFBydW5lSW5mb3MpOwogfQogCiBz dGF0aWMgdm9pZApAQCAtMjg0NSw2ICsyODU1LDIxIEBAIF9vdXRFeHRlbnNpYmxlTm9kZShTdHJp bmdJbmZvIHN0ciwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKm5vZGUpCiAJbWV0aG9kcy0+bm9kZU91 dChzdHIsIG5vZGUpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTdHVmZiBm cm9tIGV4ZWNub2Rlcy5oCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9p ZAorX291dFBhcnRpdGlvblBydW5lUmVzdWx0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJ0aXRp b25QcnVuZVJlc3VsdCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIlBBUlRJVElPTlBSVU5F UkVTVUxUIik7CisKKwlXUklURV9OT0RFX0ZJRUxEKHZhbGlkX3N1YnBsYW5fb2Zmc19saXN0KTsK KwlXUklURV9CSVRNQVBTRVRfRklFTEQoc2Nhbl9sZWFmcGFydF9ydGlzKTsKK30KKwogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCiAgKgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBAIC00NzU0 LDYgKzQ3NzksMTMgQEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAqb2JqKQog CQkJCV9vdXRKc29uVGFibGVTaWJsaW5nKHN0ciwgb2JqKTsKIAkJCQlicmVhazsKIAorCQkJCS8q CisJCQkJICogRVhFQ1VUSU9OIE5PREVTCisJCQkJICovCisJCQljYXNlIFRfUGFydGl0aW9uUHJ1 bmVSZXN1bHQ6CisJCQkJX291dFBhcnRpdGlvblBydW5lUmVzdWx0KHN0ciwgb2JqKTsKKwkJCQli cmVhazsKKwogCQkJZGVmYXVsdDoKIAogCQkJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IDNk MTUwY2IyNWQuLjZhNmZjZWMwM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0xNjQsNiArMTY0 LDExIEBACiAJdG9rZW4gPSBwZ19zdHJ0b2soJmxlbmd0aCk7CQkvKiBza2lwIDpmbGRuYW1lICov IFwKIAlsb2NhbF9ub2RlLT5mbGRuYW1lID0gcmVhZEludENvbHMobGVuKQogCisvKiBSZWFkIGFu IEluZGV4IGFycmF5ICovCisjZGVmaW5lIFJFQURfSU5ERVhfQVJSQVkoZmxkbmFtZSwgbGVuKSBc CisJdG9rZW4gPSBwZ19zdHJ0b2soJmxlbmd0aCk7CQkvKiBza2lwIDpmbGRuYW1lICovIFwKKwls b2NhbF9ub2RlLT5mbGRuYW1lID0gcmVhZEluZGV4Q29scyhsZW4pCisKIC8qIFJlYWQgYSBib29s IGFycmF5ICovCiAjZGVmaW5lIFJFQURfQk9PTF9BUlJBWShmbGRuYW1lLCBsZW4pIFwKIAl0b2tl biA9IHBnX3N0cnRvaygmbGVuZ3RoKTsJCS8qIHNraXAgOmZsZG5hbWUgKi8gXApAQCAtMTgxNSw3 ICsxODIwLDEwIEBAIF9yZWFkUGxhbm5lZFN0bXQodm9pZCkKIAlSRUFEX0JPT0xfRklFTEQocGFy YWxsZWxNb2RlTmVlZGVkKTsKIAlSRUFEX0lOVF9GSUVMRChqaXRGbGFncyk7CiAJUkVBRF9OT0RF X0ZJRUxEKHBsYW5UcmVlKTsKKwlSRUFEX05PREVfRklFTEQocGFydFBydW5lSW5mb3MpOworCVJF QURfQk9PTF9GSUVMRChjb250YWluc0luaXRpYWxQcnVuaW5nKTsKIAlSRUFEX05PREVfRklFTEQo cnRhYmxlKTsKKwlSRUFEX0JJVE1BUFNFVF9GSUVMRChtaW5Mb2NrUmVsaWRzKTsKIAlSRUFEX05P REVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlSRUFEX05PREVfRklFTEQoYXBwZW5kUmVsYXRp b25zKTsKIAlSRUFEX05PREVfRklFTEQoc3VicGxhbnMpOwpAQCAtMTk0Nyw3ICsxOTU1LDcgQEAg X3JlYWRBcHBlbmQodm9pZCkKIAlSRUFEX05PREVfRklFTEQoYXBwZW5kcGxhbnMpOwogCVJFQURf SU5UX0ZJRUxEKG5hc3luY3BsYW5zKTsKIAlSRUFEX0lOVF9GSUVMRChmaXJzdF9wYXJ0aWFsX3Bs YW4pOwotCVJFQURfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVJFQURfSU5UX0ZJRUxE KHBhcnRfcHJ1bmVfaW5kZXgpOwogCiAJUkVBRF9ET05FKCk7CiB9CkBAIC0xOTY5LDcgKzE5Nzcs NyBAQCBfcmVhZE1lcmdlQXBwZW5kKHZvaWQpCiAJUkVBRF9PSURfQVJSQVkoc29ydE9wZXJhdG9y cywgbG9jYWxfbm9kZS0+bnVtQ29scyk7CiAJUkVBRF9PSURfQVJSQVkoY29sbGF0aW9ucywgbG9j YWxfbm9kZS0+bnVtQ29scyk7CiAJUkVBRF9CT09MX0FSUkFZKG51bGxzRmlyc3QsIGxvY2FsX25v ZGUtPm51bUNvbHMpOwotCVJFQURfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVJFQURf SU5UX0ZJRUxEKHBhcnRfcHJ1bmVfaW5kZXgpOwogCiAJUkVBRF9ET05FKCk7CiB9CkBAIC0yNzY3 LDYgKzI3NzUsOCBAQCBfcmVhZFBhcnRpdGlvblBydW5lSW5mbyh2b2lkKQogCVJFQURfTE9DQUxT KFBhcnRpdGlvblBydW5lSW5mbyk7CiAKIAlSRUFEX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOwor CVJFQURfQk9PTF9GSUVMRChuZWVkc19pbml0X3BydW5pbmcpOworCVJFQURfQk9PTF9GSUVMRChu ZWVkc19leGVjX3BydW5pbmcpOwogCVJFQURfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5z KTsKIAogCVJFQURfRE9ORSgpOwpAQCAtMjc4Myw2ICsyNzkzLDcgQEAgX3JlYWRQYXJ0aXRpb25l ZFJlbFBydW5lSW5mbyh2b2lkKQogCVJFQURfSU5UX0FSUkFZKHN1YnBsYW5fbWFwLCBsb2NhbF9u b2RlLT5ucGFydHMpOwogCVJFQURfSU5UX0FSUkFZKHN1YnBhcnRfbWFwLCBsb2NhbF9ub2RlLT5u cGFydHMpOwogCVJFQURfT0lEX0FSUkFZKHJlbGlkX21hcCwgbG9jYWxfbm9kZS0+bnBhcnRzKTsK KwlSRUFEX0lOREVYX0FSUkFZKHJ0aV9tYXAsIGxvY2FsX25vZGUtPm5wYXJ0cyk7CiAJUkVBRF9O T0RFX0ZJRUxEKGluaXRpYWxfcHJ1bmluZ19zdGVwcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKGV4ZWNf cHJ1bmluZ19zdGVwcyk7CiAJUkVBRF9CSVRNQVBTRVRfRklFTEQoZXhlY3BhcmFtaWRzKTsKQEAg LTI5MzYsNiArMjk0NywyMSBAQCBfcmVhZFBhcnRpdGlvblJhbmdlRGF0dW0odm9pZCkKIAlSRUFE X0RPTkUoKTsKIH0KIAorCisvKgorICogX3JlYWRQYXJ0aXRpb25QcnVuZVJlc3VsdAorICovCitz dGF0aWMgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKgorX3JlYWRQYXJ0aXRpb25QcnVuZVJlc3VsdCh2 b2lkKQoreworCVJFQURfTE9DQUxTKFBhcnRpdGlvblBydW5lUmVzdWx0KTsKKworCVJFQURfTk9E RV9GSUVMRCh2YWxpZF9zdWJwbGFuX29mZnNfbGlzdCk7CisJUkVBRF9CSVRNQVBTRVRfRklFTEQo c2Nhbl9sZWFmcGFydF9ydGlzKTsKKworCVJFQURfRE9ORSgpOworfQorCiAvKgogICogcGFyc2VO b2RlU3RyaW5nCiAgKgpAQCAtMzIzMyw2ICszMjU5LDggQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQp CiAJCXJldHVybl92YWx1ZSA9IF9yZWFkSnNvblRhYmxlUGFyZW50KCk7CiAJZWxzZSBpZiAoTUFU Q0goIkpTT05UQUJTTk9ERSIsIDEyKSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRKc29uVGFibGVT aWJsaW5nKCk7CisJZWxzZSBpZiAoTUFUQ0goIlBBUlRJVElPTlBSVU5FUkVTVUxUIiwgMjApKQor CQlyZXR1cm5fdmFsdWUgPSBfcmVhZFBhcnRpdGlvblBydW5lUmVzdWx0KCk7CiAJZWxzZQogCXsK IAkJZWxvZyhFUlJPUiwgImJhZGx5IGZvcm1hdHRlZCBub2RlIHN0cmluZyBcIiUuMzJzXCIuLi4i LCB0b2tlbik7CkBAIC0zMzc2LDYgKzM0MDQsMzAgQEAgcmVhZEludENvbHMoaW50IG51bUNvbHMp CiAJcmV0dXJuIGludF92YWxzOwogfQogCisvKgorICogcmVhZEluZGV4Q29scworICovCitJbmRl eCAqCityZWFkSW5kZXhDb2xzKGludCBudW1Db2xzKQoreworCWludAkJCXRva2VuTGVuZ3RoLAor CQkJCWk7CisJY29uc3QgY2hhciAqdG9rZW47CisJSW5kZXgJICAgKmluZGV4X3ZhbHM7CisKKwlp ZiAobnVtQ29scyA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWluZGV4X3ZhbHMgPSAoSW5kZXgg KikgcGFsbG9jKG51bUNvbHMgKiBzaXplb2YoSW5kZXgpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVt Q29sczsgaSsrKQorCXsKKwkJdG9rZW4gPSBwZ19zdHJ0b2soJnRva2VuTGVuZ3RoKTsKKwkJaW5k ZXhfdmFsc1tpXSA9IGF0b3VpKHRva2VuKTsKKwl9CisKKwlyZXR1cm4gaW5kZXhfdmFsczsKK30K KwogLyoKICAqIHJlYWRCb29sQ29scwogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVh dGVwbGFuLmMKaW5kZXggOTU0NzZhZGEwYi4uZmUwZGYyZjFkMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTE4NCw3ICsxMTg0LDYgQEAgY3JlYXRlX2FwcGVu ZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFn cykKIAlMaXN0Q2VsbCAgICpzdWJwYXRoczsKIAlpbnQJCQluYXN5bmNwbGFucyA9IDA7CiAJUmVs T3B0SW5mbyAqcmVsID0gYmVzdF9wYXRoLT5wYXRoLnBhcmVudDsKLQlQYXJ0aXRpb25QcnVuZUlu Zm8gKnBhcnRwcnVuZWluZm8gPSBOVUxMOwogCWludAkJCW5vZGVudW1zb3J0a2V5cyA9IDA7CiAJ QXR0ck51bWJlciAqbm9kZVNvcnRDb2xJZHggPSBOVUxMOwogCU9pZAkJICAgKm5vZGVTb3J0T3Bl cmF0b3JzID0gTlVMTDsKQEAgLTEzMzUsNiArMTMzNCw5IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQ bGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJCXN1 YnBsYW5zID0gbGFwcGVuZChzdWJwbGFucywgc3VicGxhbik7CiAJfQogCisJLyogU2V0IGJlbG93 IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1bi10aW1lIHBydW5lICovCisJ cGxhbi0+cGFydF9wcnVuZV9pbmRleCA9IC0xOworCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhp c3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCiAJICog cHJ1bmluZyBkdXJpbmcgZXhlY3V0aW9uLiAgR2F0aGVyIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0 aGUgZXhlY3V0b3IgdG8KQEAgLTEzNTgsMTYgKzEzNjAsMTQgQEAgY3JlYXRlX2FwcGVuZF9wbGFu KFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkJ fQogCiAJCWlmIChwcnVuZXF1YWwgIT0gTklMKQotCQkJcGFydHBydW5laW5mbyA9Ci0JCQkJbWFr ZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKLQkJCQkJCQkJCQkgYmVzdF9wYXRoLT5z dWJwYXRocywKLQkJCQkJCQkJCQkgcHJ1bmVxdWFsKTsKKwkJCXBsYW4tPnBhcnRfcHJ1bmVfaW5k ZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAorCQkJCQkJCQkJCQkJCQkJ ICBiZXN0X3BhdGgtPnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOwogCX0K IAogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBu YXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9wYXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0 X3BhcnRpYWxfcGF0aDsKLQlwbGFuLT5wYXJ0X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOwog CiAJY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRo KTsKIApAQCAtMTQwNyw3ICsxNDA3LDYgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlMaXN0CSAgICpzdWJw bGFucyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpzdWJwYXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBi ZXN0X3BhdGgtPnBhdGgucGFyZW50OwotCVBhcnRpdGlvblBydW5lSW5mbyAqcGFydHBydW5laW5m byA9IE5VTEw7CiAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgdGhlIGFjdHVhbCBjcmVhdGlvbiBv ZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBzcGxpdCBvdXQKQEAgLTE1MDAsNiArMTQ5OSw5IEBAIGNy ZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRo ICpiZXN0X3BhdGgsCiAJCXN1YnBsYW5zID0gbGFwcGVuZChzdWJwbGFucywgc3VicGxhbik7CiAJ fQogCisJLyogU2V0IGJlbG93IGlmIHdlIGZpbmQgcXVhbHMgdGhhdCB3ZSBjYW4gdXNlIHRvIHJ1 bi10aW1lIHBydW5lICovCisJbm9kZS0+cGFydF9wcnVuZV9pbmRleCA9IC0xOworCiAJLyoKIAkg KiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1cnRo ZXIgcGFydGl0aW9uCiAJICogcHJ1bmluZyBkdXJpbmcgZXhlY3V0aW9uLiAgR2F0aGVyIGluZm9y bWF0aW9uIG5lZWRlZCBieSB0aGUgZXhlY3V0b3IgdG8KQEAgLTE1MjMsMTMgKzE1MjUsMTMgQEAg Y3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBh dGggKmJlc3RfcGF0aCwKIAkJfQogCiAJCWlmIChwcnVuZXF1YWwgIT0gTklMKQotCQkJcGFydHBy dW5laW5mbyA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhyb290LCByZWwsCi0JCQkJCQkJCQkJ CQkJIGJlc3RfcGF0aC0+c3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJIHBydW5lcXVhbCk7CisJCQlu b2RlLT5wYXJ0X3BydW5lX2luZGV4ID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJl bCwKKwkJCQkJCQkJCQkJCQkJCSAgYmVzdF9wYXRoLT5zdWJwYXRocywKKwkJCQkJCQkJCQkJCQkJ CSAgcHJ1bmVxdWFsKTsKIAl9CiAKIAlub2RlLT5tZXJnZXBsYW5zID0gc3VicGxhbnM7Ci0Jbm9k ZS0+cGFydF9wcnVuZV9pbmZvID0gcGFydHBydW5laW5mbzsKKwogCiAJLyoKIAkgKiBJZiBwcmVw YXJlX3NvcnRfZnJvbV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRv bGQgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBiMDkwYjA4N2U5Li5m NDI1MzYyNDkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MTgsNyAr NTE4LDEwIEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+ZGVwZW5kc09uUm9sZSA9IGds b2ItPmRlcGVuZHNPblJvbGU7CiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBnbG9iLT5w YXJhbGxlbE1vZGVOZWVkZWQ7CiAJcmVzdWx0LT5wbGFuVHJlZSA9IHRvcF9wbGFuOworCXJlc3Vs dC0+cGFydFBydW5lSW5mb3MgPSBnbG9iLT5wYXJ0UHJ1bmVJbmZvczsKKwlyZXN1bHQtPmNvbnRh aW5zSW5pdGlhbFBydW5pbmcgPSBnbG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5nOwogCXJlc3Vs dC0+cnRhYmxlID0gZ2xvYi0+ZmluYWxydGFibGU7CisJcmVzdWx0LT5taW5Mb2NrUmVsaWRzID0g Z2xvYi0+bWluTG9ja1JlbGlkczsKIAlyZXN1bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJl c3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFwcGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJl bGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5zID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggNmVhMzUwNTY0Ni4uYzU1NDlhMTliNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjYxLDcgKzI2MSw3IEBAIHNldF9wbGFu X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAJUGxhbgkgICAqcmVz dWx0OwogCVBsYW5uZXJHbG9iYWwgKmdsb2IgPSByb290LT5nbG9iOwogCWludAkJCXJ0b2Zmc2V0 ID0gbGlzdF9sZW5ndGgoZ2xvYi0+ZmluYWxydGFibGUpOwotCUxpc3RDZWxsICAgKmxjOworCUxp c3RDZWxsICpsYzsKIAogCS8qCiAJICogQWRkIGFsbCB0aGUgcXVlcnkncyBSVEVzIHRvIHRoZSBm bGF0dGVuZWQgcmFuZ2V0YWJsZS4gIFRoZSBsaXZlIG9uZXMKQEAgLTI3MCw2ICsyNzAsMTYgQEAg c2V0X3BsYW5fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkgKi8K IAlhZGRfcnRlc190b19mbGF0X3J0YWJsZShyb290LCBmYWxzZSk7CiAKKwkvKgorCSAqIEFkZCB0 aGUgcXVlcnkncyBhZGp1c3RlZCByYW5nZSBvZiBSVCBpbmRleGVzIHRvIGdsb2ItPm1pbkxvY2tS ZWxpZHMuCisJICogVGhlIGFkanVzdGVkIFJUIGluZGV4ZXMgb2YgcHJ1bmFibGUgcmVsYXRpb25z IHdpbGwgYmUgZGVsZXRlZCBmcm9tIHRoZQorCSAqIHNldCBiZWxvdyB3aGVyZSBQYXJ0aXRpb25Q cnVuZUluZm9zIGFyZSBwcm9jZXNzZWQuCisJICovCisJZ2xvYi0+bWluTG9ja1JlbGlkcyA9CisJ CWJtc19hZGRfcmFuZ2UoZ2xvYi0+bWluTG9ja1JlbGlkcywKKwkJCQkJICBydG9mZnNldCArIDEs CisJCQkJCSAgcnRvZmZzZXQgKyBsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSk7CisK IAkvKgogCSAqIEFkanVzdCBSVCBpbmRleGVzIG9mIFBsYW5Sb3dNYXJrcyBhbmQgYWRkIHRvIGZp bmFsIHJvd21hcmtzIGxpc3QKIAkgKi8KQEAgLTM0OCw2ICszNTgsNjQgQEAgc2V0X3BsYW5fcmVm ZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxhbikKIAkJfQogCX0KIAorCS8qIEFs c28gZml4IHVwIHRoZSBpbmZvcm1hdGlvbiBpbiBQYXJ0aXRpb25QcnVuZUluZm9zLiAqLworCWZv cmVhY2ggKGxjLCByb290LT5wYXJ0UHJ1bmVJbmZvcykKKwl7CisJCVBhcnRpdGlvblBydW5lSW5m byAqcHJ1bmVpbmZvID0gbGZpcnN0KGxjKTsKKwkJQml0bWFwc2V0ICpsZWFmcGFydF9ydGlzID0g TlVMTDsKKwkJTGlzdENlbGwgICpsOworCisJCWZvcmVhY2gobCwgcHJ1bmVpbmZvLT5wcnVuZV9p bmZvcykKKwkJeworCQkJTGlzdAkgICAqcHJ1bmVfaW5mb3MgPSBsZmlyc3QobCk7CisJCQlMaXN0 Q2VsbCAgICpsMjsKKworCQkJZm9yZWFjaChsMiwgcHJ1bmVfaW5mb3MpCisJCQl7CisJCQkJUGFy dGl0aW9uZWRSZWxQcnVuZUluZm8gKnBpbmZvID0gbGZpcnN0KGwyKTsKKwkJCQlpbnQJCWk7CisK KwkJCQkvKiBSVCBpbmRleCBvZiB0aGUgcGFydGl0aW9uZSB0YWJsZS4gKi8KKwkJCQlwaW5mby0+ cnRpbmRleCArPSBydG9mZnNldDsKKworCQkJCS8qIEFuZCBhbHNvIHRob3NlIG9mIHRoZSBsZWFm IHBhcnRpdGlvbnMuICovCisJCQkJZm9yIChpID0gMDsgaSA8IHBpbmZvLT5ucGFydHM7IGkrKykK KwkJCQl7CisJCQkJCWlmIChwaW5mby0+cnRpX21hcFtpXSA+IDApCisJCQkJCXsKKwkJCQkJCXBp bmZvLT5ydGlfbWFwW2ldICs9IHJ0b2Zmc2V0OworCQkJCQkJbGVhZnBhcnRfcnRpcyA9IGJtc19h ZGRfbWVtYmVyKGxlYWZwYXJ0X3J0aXMsCisJCQkJCQkJCQkJCQkJICAgcGluZm8tPnJ0aV9tYXBb aV0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHBydW5laW5mby0+bmVlZHNf aW5pdF9wcnVuaW5nKQorCQl7CisJCQlnbG9iLT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gdHJ1 ZTsKKworCQkJLyoKKwkJCSAqIERlbGV0ZSB0aGUgbGVhZiBwYXJ0aXRpb24gUlRJcyBmcm9tIHRo ZSBnbG9iYWwgc2V0IG9mIHJlbGF0aW9ucworCQkJICogdG8gYmUgbG9ja2VkIGJlZm9yZSBleGVj dXRpbmcgdGhlIHBsYW4uICBBY3F1aXJlRXhlY3V0b3JMb2NrcygpCisJCQkgKiB3aWxsIGZpbmQg dGhlIG9uZXMgdG8gYWRkIHRvIHRoZSBzZXQgYWZ0ZXIgcGVyZm9ybWluZyBpbml0aWFsCisJCQkg KiBwcnVuaW5nLgorCQkJICovCisJCQlnbG9iLT5taW5Mb2NrUmVsaWRzID0gYm1zX2RlbF9tZW1i ZXJzKGdsb2ItPm1pbkxvY2tSZWxpZHMsCisJCQkJCQkJCQkJCQkgIGxlYWZwYXJ0X3J0aXMpOwor CQl9CisKKwkJZ2xvYi0+cGFydFBydW5lSW5mb3MgPSBsYXBwZW5kKGdsb2ItPnBhcnRQcnVuZUlu Zm9zLCBwcnVuZWluZm8pOworCX0KKworCS8qCisJICogSXQgc2VlbXMgd29ydGggZG9pbmcgYSBi bXNfY29weSgpIG9uIGdsb2ItPm1pbkxvY2tSZWxpZHMgaWYgd2UgZGVsZXRlZAorCSAqIGJpdCBm cm9tIGl0IGp1c3QgYWJvdmUgdG8gcHJldmVudCBlbXB0eSB0YWlsIGJpdHMgcmVzdWx0aW5nIGlu CisJICogaW5lZmZpY2llbnQgbG9vcGluZyBkdXJpbmcgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4K KwkgKi8KKwlpZiAoZ2xvYi0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykKKwkJZ2xvYi0+bWluTG9j a1JlbGlkcyA9IGJtc19jb3B5KGdsb2ItPm1pbkxvY2tSZWxpZHMpOworCiAJcmV0dXJuIHJlc3Vs dDsKIH0KIApAQCAtMTY0MCwyMSArMTcwOCwxMiBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAKIAlhcGxhbi0+YXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChh cGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CiAKLQlpZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5m bykKLQl7Ci0JCWZvcmVhY2gobCwgYXBsYW4tPnBhcnRfcHJ1bmVfaW5mby0+cHJ1bmVfaW5mb3Mp Ci0JCXsKLQkJCUxpc3QJICAgKnBydW5lX2luZm9zID0gbGZpcnN0KGwpOwotCQkJTGlzdENlbGwg ICAqbDI7Ci0KLQkJCWZvcmVhY2gobDIsIHBydW5lX2luZm9zKQotCQkJewotCQkJCVBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdChsMik7Ci0KLQkJCQlwaW5mby0+cnRpbmRl eCArPSBydG9mZnNldDsKLQkJCX0KLQkJfQotCX0KKwkvKgorCSAqIFBhcnRpdGlvblBydW5lSW5m b3Mgd2lsbCBiZSBhZGRlZCB0byBhIGxpc3QgaW4gUGxhbm5lckdsb2JhbCwgc28gdXBkYXRlCisJ ICogdGhlIGluZGV4LgorCSAqLworCWlmIChhcGxhbi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQor CQlhcGxhbi0+cGFydF9wcnVuZV9pbmRleCArPSBsaXN0X2xlbmd0aChyb290LT5nbG9iLT5wYXJ0 UHJ1bmVJbmZvcyk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUg b3IgcmlnaHR0cmVlIC4uLiAqLwogCUFzc2VydChhcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxM KTsKQEAgLTE3MTIsMjEgKzE3NzEsMTIgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAKIAltcGxhbi0+YXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldCht cGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CiAKLQlpZiAobXBsYW4tPnBhcnRfcHJ1bmVfaW5m bykKLQl7Ci0JCWZvcmVhY2gobCwgbXBsYW4tPnBhcnRfcHJ1bmVfaW5mby0+cHJ1bmVfaW5mb3Mp Ci0JCXsKLQkJCUxpc3QJICAgKnBydW5lX2luZm9zID0gbGZpcnN0KGwpOwotCQkJTGlzdENlbGwg ICAqbDI7Ci0KLQkJCWZvcmVhY2gobDIsIHBydW5lX2luZm9zKQotCQkJewotCQkJCVBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdChsMik7Ci0KLQkJCQlwaW5mby0+cnRpbmRl eCArPSBydG9mZnNldDsKLQkJCX0KLQkJfQotCX0KKwkvKgorCSAqIFBhcnRpdGlvblBydW5lSW5m b3Mgd2lsbCBiZSBhZGRlZCB0byBhIGxpc3QgaW4gUGxhbm5lckdsb2JhbCwgc28gdXBkYXRlCisJ ICogdGhlIGluZGV4LgorCSAqLworCWlmIChtcGxhbi0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQor CQltcGxhbi0+cGFydF9wcnVuZV9pbmRleCArPSBsaXN0X2xlbmd0aChyb290LT5nbG9iLT5wYXJ0 UHJ1bmVJbmZvcyk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUg b3IgcmlnaHR0cmVlIC4uLiAqLwogCUFzc2VydChtcGxhbi0+cGxhbi5sZWZ0dHJlZSA9PSBOVUxM KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3Ny Yy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwppbmRleCA5ZDNjMDVhZWQzLi45NTJj NWI4MzI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMK KysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC0xNDQsNyArMTQ0 LDkgQEAgc3RhdGljIExpc3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwKIAkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpyZWxpZF9zdWJwbGFuX21h cCwKLQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqKm1hdGNoZWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBib29sICpuZWVk c19pbml0X3BydW5pbmcsCisJCQkJCQkJCQkJICAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKTsK IHN0YXRpYyB2b2lkIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpj bGF1c2VzLAogCQkJCQkJCQlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJh dGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsKQEAgLTIwOSwxNiArMjExLDIwIEBAIHN0 YXRpYyB2b2lkIHBhcnRrZXlfZGF0dW1fZnJvbV9leHByKFBhcnRpdGlvblBydW5lQ29udGV4dCAq Y29udGV4dCwKIAogLyoKICAqIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbwotICoJCUJ1aWxkcyBh IFBhcnRpdGlvblBydW5lSW5mbyB3aGljaCBjYW4gYmUgdXNlZCBpbiB0aGUgZXhlY3V0b3IgdG8g YWxsb3cKLSAqCQlhZGRpdGlvbmFsIHBhcnRpdGlvbiBwcnVuaW5nIHRvIHRha2UgcGxhY2UuICBS ZXR1cm5zIE5VTEwgd2hlbgotICoJCXBhcnRpdGlvbiBwcnVuaW5nIHdvdWxkIGJlIHVzZWxlc3Mu CisgKgkJQ2hlY2tzIGlmIHRoZSBnaXZlbiBzZXQgb2YgcXVhbHMgY2FuIGJlIHVzZWQgdG8gYnVp bGQgcHJ1bmluZyBzdGVwcworICoJCXRoYXQgdGhlIGV4ZWN1dG9yIGNhbiB1c2UgdG8gcHJ1bmUg YXdheSB1bm5lZWRlZCBwYXJ0aXRpb25zLiAgSWYKKyAqCQlzdWl0YWJsZSBxdWFscyBhcmUgZm91 bmQgdGhlbiBhIFBhcnRpdGlvblBydW5lSW5mbyBpcyBidWlsdCBhbmQgdGFnZ2VkCisgKgkJb250 byB0aGUgUGxhbm5lckluZm8ncyBwYXJ0UHJ1bmVJbmZvcyBsaXN0LgorICoKKyAqIFRoZSByZXR1 cm4gdmFsdWUgaXMgdGhlIDAtYmFzZWQgaW5kZXggb2YgdGhlIGl0ZW0gYWRkZWQgdG8gdGhlCisg KiBwYXJ0UHJ1bmVJbmZvcyBsaXN0IG9yIC0xIGlmIG5vdGhpbmcgd2FzIGFkZGVkLgogICoKICAq ICdwYXJlbnRyZWwnIGlzIHRoZSBSZWxPcHRJbmZvIGZvciBhbiBhcHBlbmRyZWwsIGFuZCAnc3Vi cGF0aHMnIGlzIHRoZSBsaXN0CiAgKiBvZiBzY2FuIHBhdGhzIGZvciBpdHMgY2hpbGQgcmVscy4K ICAqICdwcnVuZXF1YWwnIGlzIGEgbGlzdCBvZiBwb3RlbnRpYWwgcHJ1bmluZyBxdWFscyAoaS5l LiwgcmVzdHJpY3Rpb24KICAqIGNsYXVzZXMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgYXBw ZW5kcmVsKS4KICAqLwotUGFydGl0aW9uUHJ1bmVJbmZvICoKK2ludAogbWFrZV9wYXJ0aXRpb25f cHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJ CQkgTGlzdCAqc3VicGF0aHMsCiAJCQkJCQkgTGlzdCAqcHJ1bmVxdWFsKQpAQCAtMjMwLDYgKzIz Niw4IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcGFyZW50cmVsLAogCWludAkJICAgKnJlbGlkX3N1YnBsYW5fbWFwOwogCUxpc3RDZWxs ICAgKmxjOwogCWludAkJCWk7CisJYm9vbAkJbmVlZHNfaW5pdF9wcnVuaW5nID0gZmFsc2U7CisJ Ym9vbAkJbmVlZHNfZXhlY19wcnVuaW5nID0gZmFsc2U7CiAKIAkvKgogCSAqIFNjYW4gdGhlIHN1 YnBhdGhzIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBzY2FucyBvZiBwYXJ0aXRpb24gY2hpbGQKQEAg LTMwOSwxMiArMzE3LDE2IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQlCaXRtYXBzZXQgICpwYXJ0cmVsaWRzID0g KEJpdG1hcHNldCAqKSBsZmlyc3QobGMpOwogCQlMaXN0CSAgICpwaW5mb2xpc3Q7CiAJCUJpdG1h cHNldCAgKm1hdGNoZWRzdWJwbGFucyA9IE5VTEw7CisJCWJvb2wJCXBhcnRyZWxfbmVlZHNfaW5p dF9wcnVuaW5nOworCQlib29sCQlwYXJ0cmVsX25lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCQlwaW5m b2xpc3QgPSBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhyb290LCBwYXJlbnRyZWwsCiAJ CQkJCQkJCQkJCQkgIHBydW5lcXVhbCwKIAkJCQkJCQkJCQkJCSAgcGFydHJlbGlkcywKIAkJCQkJ CQkJCQkJCSAgcmVsaWRfc3VicGxhbl9tYXAsCi0JCQkJCQkJCQkJCQkgICZtYXRjaGVkc3VicGxh bnMpOworCQkJCQkJCQkJCQkJICAmbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCQkJCQkJICAmcGFy dHJlbF9uZWVkc19pbml0X3BydW5pbmcsCisJCQkJCQkJCQkJCQkgICZwYXJ0cmVsX25lZWRzX2V4 ZWNfcHJ1bmluZyk7CiAKIAkJLyogV2hlbiBwcnVuaW5nIGlzIHBvc3NpYmxlLCByZWNvcmQgdGhl IG1hdGNoZWQgc3VicGxhbnMgKi8KIAkJaWYgKHBpbmZvbGlzdCAhPSBOSUwpCkBAIC0zMjMsNiAr MzM1LDkgQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpwYXJlbnRyZWwsCiAJCQlhbGxtYXRjaGVkc3VicGxhbnMgPSBibXNfam9pbihtYXRj aGVkc3VicGxhbnMsCiAJCQkJCQkJCQkJICBhbGxtYXRjaGVkc3VicGxhbnMpOwogCQl9CisKKwkJ bmVlZHNfaW5pdF9wcnVuaW5nIHw9IHBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nOworCQluZWVk c19leGVjX3BydW5pbmcgfD0gcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmc7CiAJfQogCiAJcGZy ZWUocmVsaWRfc3VicGxhbl9tYXApOwpAQCAtMzMyLDExICszNDcsMTMgQEAgbWFrZV9wYXJ0aXRp b25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJ ICogcXVhbHMsIHRoZW4gd2UgY2FuIGp1c3Qgbm90IGJvdGhlciB3aXRoIHJ1bi10aW1lIHBydW5p bmcuCiAJICovCiAJaWYgKHBydW5lcmVsaW5mb3MgPT0gTklMKQotCQlyZXR1cm4gTlVMTDsKKwkJ cmV0dXJuIC0xOwogCiAJLyogRWxzZSBidWlsZCB0aGUgcmVzdWx0IGRhdGEgc3RydWN0dXJlICov CiAJcHJ1bmVpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1bmVJbmZvKTsKIAlwcnVuZWluZm8t PnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsKKwlwcnVuZWluZm8tPm5lZWRzX2luaXRfcHJ1 bmluZyA9IG5lZWRzX2luaXRfcHJ1bmluZzsKKwlwcnVuZWluZm8tPm5lZWRzX2V4ZWNfcHJ1bmlu ZyA9IG5lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCS8qCiAJICogU29tZSBzdWJwbGFucyBtYXkgbm90 IGJlbG9uZyB0byBhbnkgb2YgdGhlIGlkZW50aWZpZWQgcGFydGl0aW9uZWQgcmVscy4KQEAgLTM1 OCw3ICszNzUsOSBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAllbHNlCiAJCXBydW5laW5mby0+b3RoZXJfc3VicGxh bnMgPSBOVUxMOwogCi0JcmV0dXJuIHBydW5laW5mbzsKKwlyb290LT5wYXJ0UHJ1bmVJbmZvcyA9 IGxhcHBlbmQocm9vdC0+cGFydFBydW5lSW5mb3MsIHBydW5laW5mbyk7CisKKwlyZXR1cm4gbGlz dF9sZW5ndGgocm9vdC0+cGFydFBydW5lSW5mb3MpIC0gMTsKIH0KIAogLyoKQEAgLTQzNSwxMyAr NDU0LDE4IEBAIGFkZF9wYXJ0X3JlbGlkcyhMaXN0ICphbGxwYXJ0cmVsaWRzLCBCaXRtYXBzZXQg KnBhcnRyZWxpZHMpCiAgKiBJZiB3ZSBjYW5ub3QgZmluZCBhbnkgdXNlZnVsIHJ1bi10aW1lIHBy dW5pbmcgc3RlcHMsIHJldHVybiBOSUwuCiAgKiBIb3dldmVyLCBvbiBzdWNjZXNzLCBlYWNoIHJl bCBpZGVudGlmaWVkIGluIHBhcnRyZWxpZHMgd2lsbCBoYXZlCiAgKiBhbiBlbGVtZW50IGluIHRo ZSByZXN1bHQgbGlzdCwgZXZlbiBpZiBzb21lIG9mIHRoZW0gYXJlIHVzZWxlc3MuCisgKiAqbmVl ZHNfaW5pdF9wcnVuaW5nIGFuZCAqbmVlZHNfZXhlY19wcnVuaW5nIGFyZSBzZXQgdG8gaW5kaWNh dGUgdGhhdCB0aGUKKyAqIHJldHVybmVkIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBjb250YWlu cyBwcnVuaW5nIHN0ZXBzIHRoYXQgY2FuIGJlCisgKiBwZXJmb3JtZWQgYmVmb3JlIGFuZCBhZnRl ciBleGVjdXRpb24gYmVnaW5zLCByZXNwZWN0aXZlbHkuCiAgKi8KIHN0YXRpYyBMaXN0ICoKIG1h a2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0ICpwcnVuZXF1YWwsCiAJCQkJCQkJICBCaXRtYXBz ZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBpbnQgKnJlbGlkX3N1YnBsYW5fbWFwLAotCQkJCQkJ CSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zKQorCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0 Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJ CSAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKQogewogCVJlbE9wdEluZm8gKnRhcmdldHBhcnQg PSBOVUxMOwogCUxpc3QJICAgKnBpbmZvbGlzdCA9IE5JTDsKQEAgLTQ1Miw2ICs0NzYsMTAgQEAg bWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnBhcmVudHJlbCwKIAlpbnQJCQlydGk7CiAJaW50CQkJaTsKIAorCS8qIFdpbGwgZmluZCBv dXQgYmVsb3cuICovCisJKm5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNlOworCSpuZWVkc19leGVj X3BydW5pbmcgPSBmYWxzZTsKKwogCS8qCiAJICogRXhhbWluZSBlYWNoIHBhcnRpdGlvbmVkIHJl bCwgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5IGFycmF5IHRvIG1hcAogCSAqIGZyb20gcGxhbm5l ciByZWxpZHMgdG8gaW5kZXggb2YgdGhlIHBhcnRpdGlvbmVkIHJlbCwgYW5kIGJ1aWxkaW5nIGEK QEAgLTUzOSw2ICs1NjcsOSBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkgKiBleGVjdXRvciBwZXItc2Nh biBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBmaXJzdCBwYXNzIGNyZWF0ZXMgc3RhcnR1cAogCQkgKiBw cnVuaW5nIHN0ZXBzIGFuZCBkZXRlY3RzIHdoZXRoZXIgdGhlcmUncyBhbnkgcG9zc2libHktdXNl ZnVsIHF1YWxzCiAJCSAqIHRoYXQgd291bGQgcmVxdWlyZSBwZXItc2NhbiBwcnVuaW5nLgorCQkg KgorCQkgKiBJbiB0aGUgZmlyc3QgcGFzcywgd2Ugbm90ZSB3aGV0aGVyIHRoZSAybmQgcGFzcyBp cyBuZWNlc3NhcnkgYnkKKwkJICogbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBFWEVDIHBhcmFtZXRl cnMuCiAJCSAqLwogCQlnZW5fcGFydHBydW5lX3N0ZXBzKHN1YnBhcnQsIHBhcnRwcnVuZXF1YWws IFBBUlRUQVJHRVRfSU5JVElBTCwKIAkJCQkJCQkmY29udGV4dCk7CkBAIC02MTMsNiArNjQ0LDEy IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpwYXJlbnRyZWwsCiAJCXBpbmZvLT5leGVjcGFyYW1pZHMgPSBleGVjcGFyYW1pZHM7 CiAJCS8qIFJlbWFpbmluZyBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgaW4gdGhlIG5leHQgbG9vcCAq LwogCisJCS8qIHJlY29yZCB3aGljaCB0eXBlcyBvZiBwcnVuaW5nIHN0ZXBzIHdlJ3ZlIHNlZW4g c28gZmFyICovCisJCWlmIChpbml0aWFsX3BydW5pbmdfc3RlcHMgIT0gTklMKQorCQkJKm5lZWRz X2luaXRfcHJ1bmluZyA9IHRydWU7CisJCWlmIChleGVjX3BydW5pbmdfc3RlcHMgIT0gTklMKQor CQkJKm5lZWRzX2V4ZWNfcHJ1bmluZyA9IHRydWU7CisKIAkJcGluZm9saXN0ID0gbGFwcGVuZChw aW5mb2xpc3QsIHBpbmZvKTsKIAl9CiAKQEAgLTY0MCw2ICs2NzcsNyBAQCBtYWtlX3BhcnRpdGlv bmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAogCQlpbnQJCSAgICpzdWJwbGFuX21hcDsKIAkJaW50CQkgICAqc3VicGFydF9tYXA7CiAJCU9p ZAkJICAgKnJlbGlkX21hcDsKKwkJSW5kZXgJICAgKnJ0aV9tYXA7CiAKIAkJLyoKIAkJICogQ29u c3RydWN0IHRoZSBzdWJwbGFuIGFuZCBzdWJwYXJ0IG1hcHMgZm9yIHRoaXMgcGFydGl0aW9uaW5n IGxldmVsLgpAQCAtNjUyLDYgKzY5MCw3IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZv KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXN1YnBhcnRfbWFw ID0gKGludCAqKSBwYWxsb2MobnBhcnRzICogc2l6ZW9mKGludCkpOwogCQltZW1zZXQoc3VicGFy dF9tYXAsIC0xLCBucGFydHMgKiBzaXplb2YoaW50KSk7CiAJCXJlbGlkX21hcCA9IChPaWQgKikg cGFsbG9jMChucGFydHMgKiBzaXplb2YoT2lkKSk7CisJCXJ0aV9tYXAgPSAoSW5kZXggKikgcGFs bG9jMChucGFydHMgKiBzaXplb2YoSW5kZXgpKTsKIAkJcHJlc2VudF9wYXJ0cyA9IE5VTEw7CiAK IAkJaSA9IC0xOwpAQCAtNjY2LDYgKzcwNSw3IEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVp bmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQlzdWJwbGFu X21hcFtpXSA9IHN1YnBsYW5pZHggPSByZWxpZF9zdWJwbGFuX21hcFtwYXJ0cmVsLT5yZWxpZF0g LSAxOwogCQkJc3VicGFydF9tYXBbaV0gPSBzdWJwYXJ0aWR4ID0gcmVsaWRfc3VicGFydF9tYXBb cGFydHJlbC0+cmVsaWRdIC0gMTsKIAkJCXJlbGlkX21hcFtpXSA9IHBsYW5uZXJfcnRfZmV0Y2go cGFydHJlbC0+cmVsaWQsIHJvb3QpLT5yZWxpZDsKKwkJCXJ0aV9tYXBbaV0gPSBwYXJ0cmVsLT5y ZWxpZDsKIAkJCWlmIChzdWJwbGFuaWR4ID49IDApCiAJCQl7CiAJCQkJcHJlc2VudF9wYXJ0cyA9 IGJtc19hZGRfbWVtYmVyKHByZXNlbnRfcGFydHMsIGkpOwpAQCAtNjkwLDYgKzczMCw3IEBAIG1h a2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpwYXJlbnRyZWwsCiAJCXBpbmZvLT5zdWJwbGFuX21hcCA9IHN1YnBsYW5fbWFwOwogCQlwaW5m by0+c3VicGFydF9tYXAgPSBzdWJwYXJ0X21hcDsKIAkJcGluZm8tPnJlbGlkX21hcCA9IHJlbGlk X21hcDsKKwkJcGluZm8tPnJ0aV9tYXAgPSBydGlfbWFwOwogCX0KIAogCXBmcmVlKHJlbGlkX3N1 YnBhcnRfbWFwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA5NWRjMmUyYzgzLi44ZGM1MmExNThmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jCkBAIC0xNjAzLDYgKzE2MDMsNyBAQCBleGVjX2JpbmRfbWVzc2FnZShT dHJpbmdJbmZvIGlucHV0X21lc3NhZ2UpCiAJaW50MTYJICAgKnJmb3JtYXRzID0gTlVMTDsKIAlD YWNoZWRQbGFuU291cmNlICpwc3JjOwogCUNhY2hlZFBsYW4gKmNwbGFuOworCUxpc3QJICAgKnBh cnRfcHJ1bmVfcmVzdWx0X2xpc3Q7CiAJUG9ydGFsCQlwb3J0YWw7CiAJY2hhcgkgICAqcXVlcnlf c3RyaW5nOwogCWNoYXIJICAgKnNhdmVkX3N0bXRfbmFtZTsKQEAgLTE5NzgsNyArMTk3OSw5IEBA IGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkgKiB3aWxsIGJl IGdlbmVyYXRlZCBpbiBNZXNzYWdlQ29udGV4dC4gIFRoZSBwbGFuIHJlZmNvdW50IHdpbGwgYmUK IAkgKiBhc3NpZ25lZCB0byB0aGUgUG9ydGFsLCBzbyBpdCB3aWxsIGJlIHJlbGVhc2VkIGF0IHBv cnRhbCBkZXN0cnVjdGlvbi4KIAkgKi8KLQljcGxhbiA9IEdldENhY2hlZFBsYW4ocHNyYywgcGFy YW1zLCBOVUxMLCBOVUxMKTsKKwljcGxhbiA9IEdldENhY2hlZFBsYW4ocHNyYywgcGFyYW1zLCBO VUxMLCBOVUxMLCAmcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CisJQXNzZXJ0KGxpc3RfbGVuZ3Ro KGNwbGFuLT5zdG10X2xpc3QpID09CisJCSAgIGxpc3RfbGVuZ3RoKHBhcnRfcHJ1bmVfcmVzdWx0 X2xpc3QpKTsKIAogCS8qCiAJICogTm93IHdlIGNhbiBkZWZpbmUgdGhlIHBvcnRhbC4KQEAgLTE5 OTMsNiArMTk5Niw5IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2Fn ZSkKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAogCQkJCQkgIGNwbGFuKTsKIAorCS8qIENvcHkg UGFydGl0aW9uUHJ1bmVSZXN1bHRzIGludG8gdGhlIHBvcnRhbCdzIGNvbnRleHQuICovCisJUG9y dGFsU3RvcmVQYXJ0aXRpb25QcnVuZVJlc3VsdHMocG9ydGFsLCBwYXJ0X3BydW5lX3Jlc3VsdF9s aXN0KTsKKwogCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyYW1ldGVyIEkv TyBhbmQgcGFyc2luZy9wbGFubmluZyAqLwogCWlmIChzbmFwc2hvdF9zZXQpCiAJCVBvcEFjdGl2 ZVNuYXBzaG90KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jIGIvc3Jj L2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCA1YWE1YTM1MGYzLi44Y2MyZTIxNjJkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av cHF1ZXJ5LmMKQEAgLTM1LDcgKzM1LDcgQEAKIFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVMTDsK IAogCi1zdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCitzdGF0aWMg dm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sIFBhcnRpdGlvblBydW5lUmVzdWx0 ICpwYXJ0X3BydW5lX3Jlc3VsdCwKIAkJCQkJCSBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJ CQkJIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5 RW52LApAQCAtNjUsNiArNjUsNyBAQCBzdGF0aWMgdm9pZCBEb1BvcnRhbFJld2luZChQb3J0YWwg cG9ydGFsKTsKICAqLwogUXVlcnlEZXNjICoKIENyZWF0ZVF1ZXJ5RGVzYyhQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQsCisJCQkJUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0 LAogCQkJCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJ CQkJU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKQEAgLTc3LDYgKzc4LDggQEAgQ3JlYXRl UXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKIAogCXFkLT5vcGVyYXRpb24gPSBw bGFubmVkc3RtdC0+Y29tbWFuZFR5cGU7CS8qIG9wZXJhdGlvbiAqLwogCXFkLT5wbGFubmVkc3Rt dCA9IHBsYW5uZWRzdG10OwkvKiBwbGFuICovCisJcWQtPnBhcnRfcHJ1bmVfcmVzdWx0ID0gcGFy dF9wcnVuZV9yZXN1bHQ7CS8qIEV4ZWN1dG9yRG9Jbml0aWFsUHJ1bmluZygpCisJCQkJCQkJCQkJ CQkgKiBvdXRwdXQgZm9yIHBsYW4gKi8KIAlxZC0+c291cmNlVGV4dCA9IHNvdXJjZVRleHQ7CS8q IHF1ZXJ5IHRleHQgKi8KIAlxZC0+c25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsJLyogc25hcHNob3QgKi8KIAkvKiBSSSBjaGVjayBzbmFwc2hvdCAqLwpAQCAtMTIyLDYgKzEy NSw3IEBAIEZyZWVRdWVyeURlc2MoUXVlcnlEZXNjICpxZGVzYykKICAqCQlQT1JUQUxfT05FX1JF VFVSTklORywgb3IgUE9SVEFMX09ORV9NT0RfV0lUSCBwb3J0YWwKICAqCiAgKglwbGFuOiB0aGUg cGxhbiB0cmVlIGZvciB0aGUgcXVlcnkKKyAqCXBhcnRfcHJ1bmVfcmVzdWx0OiBFeGVjdXRvckRv SW5pdGlhbFBydW5pbmcoKSBvdXRwdXQgZm9yIHRoZSBwbGFuIHRyZWUKICAqCXNvdXJjZVRleHQ6 IHRoZSBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkKICAqCXBhcmFtczogYW55IHBhcmFtZXRlcnMg bmVlZGVkCiAgKglkZXN0OiB3aGVyZSB0byBzZW5kIHJlc3VsdHMKQEAgLTEzNCw2ICsxMzgsNyBA QCBGcmVlUXVlcnlEZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKi8KIHN0YXRpYyB2b2lkCiBQcm9j ZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCisJCQkgUGFydGl0aW9uUHJ1bmVSZXN1bHQgKnBh cnRfcHJ1bmVfcmVzdWx0LAogCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkgUGFyYW1M aXN0SW5mbyBwYXJhbXMsCiAJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC0xNDUs NyArMTUwLDcgQEAgUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAogCS8qCiAJICogQ3Jl YXRlIHRoZSBRdWVyeURlc2Mgb2JqZWN0CiAJICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlE ZXNjKHBsYW4sIHNvdXJjZVRleHQsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IHBhcnRfcHJ1bmVfcmVzdWx0LCBzb3VyY2VUZXh0LAogCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCWRlc3QsIHBhcmFtcywgcXVlcnlFbnYsIDAp OwogCkBAIC00OTEsOCArNDk2LDEzIEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFt TGlzdEluZm8gcGFyYW1zLAogCQkJCS8qCiAJCQkJICogQ3JlYXRlIFF1ZXJ5RGVzYyBpbiBwb3J0 YWwncyBjb250ZXh0OyBmb3IgdGhlIG1vbWVudCwgc2V0CiAJCQkJICogdGhlIGRlc3RpbmF0aW9u IHRvIERlc3ROb25lLgorCQkJCSAqCisJCQkJICogVGhlcmUgaXMgbm8gUGFydGl0aW9uUHJ1bmVS ZXN1bHQgdW5sZXNzIHRoZSBQbGFubmVkU3RtdCBpcworCQkJCSAqIGZyb20gYSBDYWNoZWRQbGFu LgogCQkJCSAqLwogCQkJCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhsaW5pdGlhbF9ub2Rl KFBsYW5uZWRTdG10LCBwb3J0YWwtPnN0bXRzKSwKKwkJCQkJCQkJCQkJcG9ydGFsLT5wYXJ0X3By dW5lX3Jlc3VsdHMgPT0gTklMID8gTlVMTCA6CisJCQkJCQkJCQkJCWxpbml0aWFsKHBvcnRhbC0+ cGFydF9wcnVuZV9yZXN1bHRzKSwKIAkJCQkJCQkJCQkJcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJ CQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3Qs CkBAIC0xMjI1LDYgKzEyMzUsOCBAQCBQb3J0YWxSdW5NdWx0aShQb3J0YWwgcG9ydGFsLAogCiAJ CWlmIChwc3RtdC0+dXRpbGl0eVN0bXQgPT0gTlVMTCkKIAkJeworCQkJUGFydGl0aW9uUHJ1bmVS ZXN1bHQgKnBhcnRfcHJ1bmVfcmVzdWx0ID0gTlVMTDsKKwogCQkJLyoKIAkJCSAqIHByb2Nlc3Mg YSBwbGFubmFibGUgcXVlcnkuCiAJCQkgKi8KQEAgLTEyNzEsMTAgKzEyODMsMTggQEAgUG9ydGFs UnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCQlVcGRhdGVBY3RpdmVTbmFwc2hv dENvbW1hbmRJZCgpOwogCisJCQkvKgorCQkJICogRGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYSBjb3Jy ZXNwb25kaW5nIFBhcnRpdGlvblBydW5lUmVzdWx0IGZvcgorCQkJICogdGhpcyBQbGFubmVkU3Rt dC4KKwkJCSAqLworCQkJaWYgKHBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRzICE9IE5JTCkKKwkJ CQlwYXJ0X3BydW5lX3Jlc3VsdCA9IGxpc3RfbnRoKHBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRz LAorCQkJCQkJCQkJCQkgZm9yZWFjaF9jdXJyZW50X2luZGV4KHN0bXRsaXN0X2l0ZW0pKTsKKwog CQkJaWYgKHBzdG10LT5jYW5TZXRUYWcpCiAJCQl7CiAJCQkJLyogc3RhdGVtZW50IGNhbiBzZXQg dGFnIHN0cmluZyAqLwotCQkJCVByb2Nlc3NRdWVyeShwc3RtdCwKKwkJCQlQcm9jZXNzUXVlcnko cHN0bXQsIHBhcnRfcHJ1bmVfcmVzdWx0LAogCQkJCQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJ CQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApA QCAtMTI4Myw3ICsxMzAzLDcgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVs c2UKIAkJCXsKIAkJCQkvKiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8K LQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBwYXJ0X3By dW5lX3Jlc3VsdCwKIAkJCQkJCQkgcG9ydGFsLT5zb3VyY2VUZXh0LAogCQkJCQkJCSBwb3J0YWwt PnBvcnRhbFBhcmFtcywKIAkJCQkJCQkgcG9ydGFsLT5xdWVyeUVudiwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcGxhbmNhY2hlLmMKaW5kZXggNGNmNmRiNTA0Zi4uNmNiNDczZjJmNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcGxhbmNhY2hlLmMKQEAgLTk5LDE0ICs5OSwxOSBAQCBzdGF0aWMgZGxpc3RfaGVh ZCBjYWNoZWRfZXhwcmVzc2lvbl9saXN0ID0gRExJU1RfU1RBVElDX0lOSVQoY2FjaGVkX2V4cHJl c3Npb25fbAogc3RhdGljIHZvaWQgUmVsZWFzZUdlbmVyaWNQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UpOwogc3RhdGljIExpc3QgKlJldmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQ bGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVy eUVudik7Ci1zdGF0aWMgYm9vbCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSk7CitzdGF0aWMgYm9vbCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKKwkJCQkJCQlMaXN0ICoqcGFy dF9wcnVuZV9yZXN1bHRfbGlzdCk7CiBzdGF0aWMgQ2FjaGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFu KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAotCQkJCQkJCQkgICBQ YXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CisJ CQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1 ZXJ5RW52LAorCQkJCQkJCQkgICBMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCk7CiBzdGF0 aWMgYm9vbCBjaG9vc2VfY3VzdG9tX3BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwK IAkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKTsKIHN0YXRpYyBkb3VibGUgY2Fj aGVkX3BsYW5fY29zdChDYWNoZWRQbGFuICpwbGFuLCBib29sIGluY2x1ZGVfcGxhbm5lcik7CiBz dGF0aWMgUXVlcnkgKlF1ZXJ5TGlzdEdldFByaW1hcnlTdG10KExpc3QgKnN0bXRzKTsKLXN0YXRp YyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJl KTsKK3N0YXRpYyB2b2lkIEFjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgUGFy YW1MaXN0SW5mbyBib3VuZFBhcmFtcywKKwkJCQkJCQkJIExpc3QgKipwYXJ0X3BydW5lX3Jlc3Vs dF9saXN0LAorCQkJCQkJCQkgTGlzdCAqKmxvY2tlZFJlbGlkc19wZXJfc3RtdCk7CitzdGF0aWMg dm9pZCBSZWxlYXNlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKmxvY2tlZFJl bGlkc19wZXJfc3RtdCk7CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3QgKnN0 bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tzKFF1 ZXJ5ICpwYXJzZXRyZWUsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlXYWxr ZXIoTm9kZSAqbm9kZSwgYm9vbCAqYWNxdWlyZSk7CkBAIC03OTAsMTUgKzc5NSwyMCBAQCBSZXZh bGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqCiAgKiBP biBhICJ0cnVlIiByZXR1cm4sIHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2tzIG5lZWRlZCB0byBy dW4gdGhlIHBsYW4uCiAgKiAoV2UgbXVzdCBkbyB0aGlzIGZvciB0aGUgInRydWUiIHJlc3VsdCB0 byBiZSByYWNlLWNvbmRpdGlvbi1mcmVlLikKKyAqCisgKiBTZWUgR2V0Q2FjaGVkUGxhbigpJ3Mg Y29tbWVudCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LgogICov CiBzdGF0aWMgYm9vbAotQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UpCitDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1M aXN0SW5mbyBib3VuZFBhcmFtcywKKwkJCQlMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCkK IHsKIAlDYWNoZWRQbGFuICpwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CiAKIAkvKiBBc3NlcnQg dGhhdCBjYWxsZXIgY2hlY2tlZCB0aGUgcXVlcnl0cmVlICovCiAJQXNzZXJ0KHBsYW5zb3VyY2Ut PmlzX3ZhbGlkKTsKIAorCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOworCiAJLyogSWYg dGhlcmUncyBubyBnZW5lcmljIHBsYW4sIGp1c3Qgc2F5ICJmYWxzZSIgKi8KIAlpZiAoIXBsYW4p CiAJCXJldHVybiBmYWxzZTsKQEAgLTgyMCwxMyArODMwLDIxIEBAIENoZWNrQ2FjaGVkUGxhbihD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCSAqLwogCWlmIChwbGFuLT5pc192YWxpZCkK IAl7CisJCUxpc3QgICAqbG9ja2VkUmVsaWRzX3Blcl9zdG10OworCiAJCS8qCiAJCSAqIFBsYW4g bXVzdCBoYXZlIHBvc2l0aXZlIHJlZmNvdW50IGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieQog CQkgKiBwbGFuc291cmNlOyBzbyBubyBuZWVkIHRvIGZlYXIgaXQgZGlzYXBwZWFycyB1bmRlciB1 cyBoZXJlLgogCQkgKi8KIAkJQXNzZXJ0KHBsYW4tPnJlZmNvdW50ID4gMCk7CiAKLQkJQWNxdWly ZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9saXN0LCB0cnVlKTsKKwkJLyoKKwkJICogTG9jayBy ZWxhdGlvbnMgc2Nhbm5lZCBieSB0aGUgcGxhbi4gIFRoaXMgaXMgd2hlcmUgdGhlIHBydW5pbmcK KwkJICogaGFwcGVucyBpZiBuZWVkZWQuCisJCSAqLworCQlBY3F1aXJlRXhlY3V0b3JMb2Nrcyhw bGFuLT5zdG10X2xpc3QsIGJvdW5kUGFyYW1zLAorCQkJCQkJCSBwYXJ0X3BydW5lX3Jlc3VsdF9s aXN0LAorCQkJCQkJCSAmbG9ja2VkUmVsaWRzX3Blcl9zdG10KTsKIAogCQkvKgogCQkgKiBJZiBw bGFuIHdhcyB0cmFuc2llbnQsIGNoZWNrIHRvIHNlZSBpZiBUcmFuc2FjdGlvblhtaW4gaGFzCkBA IC04NDgsNyArODY2LDE0IEBAIENoZWNrQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFu c291cmNlKQogCQl9CiAKIAkJLyogT29wcywgdGhlIHJhY2UgY2FzZSBoYXBwZW5lZC4gIFJlbGVh c2UgdXNlbGVzcyBsb2Nrcy4gKi8KLQkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MocGxhbi0+c3RtdF9s aXN0LCBmYWxzZSk7CisJCVJlbGVhc2VFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgbG9j a2VkUmVsaWRzX3Blcl9zdG10KTsKKworCQkvKgorCQkgKiBUaGUgb3V0cHV0IGxpc3QgYW5kIGFu eSBvYmplY3RzIHRoZXJlaW4gaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGUKKwkJICogY2FsbGVy J3MgaG9wZWZ1bGx5IHNob3J0LWxpdmVkIGNvbnRleHQsIHNvIHdpbGwgbm90IHJlbWFpbiBsZWFr ZWQKKwkJICogZm9yIGxvbmcsIHRob3VnaCByZXNldCB0byBhdm9pZCBpdHMgYWNjaWRlbnRhbGx5 IGJlaW5nIGxvb2tlZCBhdC4KKwkJICovCisJCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gTklM OwogCX0KIAogCS8qCkBAIC04NzQsMTAgKzg5OSwxNSBAQCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKICAqIFBsYW5uaW5nIHdvcmsgaXMgZG9uZSBpbiB0aGUg Y2FsbGVyJ3MgbWVtb3J5IGNvbnRleHQuICBUaGUgZmluaXNoZWQgcGxhbgogICogaXMgaW4gYSBj aGlsZCBtZW1vcnkgY29udGV4dCwgd2hpY2ggdHlwaWNhbGx5IHNob3VsZCBnZXQgcmVwYXJlbnRl ZAogICogKHVubGVzcyB0aGlzIGlzIGEgb25lLXNob3QgcGxhbiwgaW4gd2hpY2ggY2FzZSB3ZSBk b24ndCBjb3B5IHRoZSBwbGFuKS4KKyAqCisgKiBBIGxpc3Qgb2YgTlVMTHMgaXMgcmV0dXJuZWQg aW4gKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QsIG1lYW5pbmcgdGhhdCBubworICogUGFydGl0aW9u UHJ1bmVSZXN1bHQgbm9kZXMgaGF2ZSB5ZXQgYmVlbiBjcmVhdGVkIGZvciB0aGUgcGxhbnMgaW4K KyAqIHN0bXRfbGlzdC4KICAqLwogc3RhdGljIENhY2hlZFBsYW4gKgogQnVpbGRDYWNoZWRQbGFu KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAotCQkJCVBhcmFtTGlz dEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJCVBhcmFt TGlzdEluZm8gYm91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAorCQkJCUxp c3QgKipwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogewogCUNhY2hlZFBsYW4gKnBsYW47CiAJTGlz dAkgICAqcGxpc3Q7CkBAIC0xMDA3LDYgKzEwMzcsMTcgQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CiAKKwkvKgorCSAqIE5vIGFjdHVhbCBQYXJ0aXRpb25QcnVuZVJlc3Vs dHMgeWV0IHRvIGFkZCwgdGhvdWdoIG11c3QgaW5pdGlhbGl6ZQorCSAqIHRoZSBsaXN0IHRvIGhh dmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIHRoZSBsaXN0IG9mCisJICogUGxhbm5l ZFN0bXRzLgorCSAqLworCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gTklMOworCWZvcmVhY2go bGMsIHBsaXN0KQorCXsKKwkJKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSBsYXBwZW5kKCpwYXJ0 X3BydW5lX3Jlc3VsdF9saXN0LCBOVUxMKTsKKwl9CisKIAlyZXR1cm4gcGxhbjsKIH0KIApAQCAt MTEyNiw2ICsxMTY3LDE3IEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9v bCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRoZSBnaXZl biBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0IHdpbGwg Z2V0LgogICoKKyAqIEZvciBldmVyeSBQbGFubmVkU3RtdCBmb3VuZCBpbiB0aGUgcmV0dXJuZWQg Q2FjaGVkUGxhbiwgYW4gZWxlbWVudCB0aGF0CisgKiBpcyBlaXRoZXIgYSBQYXJ0aXRpb25QcnVu ZVJlc3VsdCBvciBhIE5VTEwgaXMgYWRkZWQgdG8KKyAqICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0 IGlmIG5lZWRlZC4gIFRoZSBmb3JtZXIgaWYgdGhlIFBsYW5uZWRTdG10IGlzIGZyb20KKyAqIHRo ZSBleGlzdGluZyBDYWNoZWRQbGFuIHRoYXQgaXMgb3RoZXJ3aXNlIHZhbGlkIGFuZCBjb250YWlu cyBhdCBsZWFzdCBvbmUKKyAqIFBhcnRpdGlvblBydW5lSW5mbyB0aGF0IGhhcyAiaW5pdGlhbCIg cHJ1bmluZyBzdGVwcy4gIFRob3NlIHN0ZXBzIGFyZQorICogcGVyZm9ybWVkIGJ5IGNhbGxpbmcg RXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgdG8gZGV0ZXJtaW5lIG9ubHkgdGhvc2UKKyAqIGxl YWYgcGFydGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbG9ja2VkIGJ5IEFjcXVpcmVFeGVjdXRvckxv Y2tzKCkgYnkgcHJ1bmluZworICogYXdheSBzdWJwbGFucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBw cnVuaW5nIGNvbmRpdGlvbnMuICBUaGUKKyAqIFBhcnRpdGlvblBydW5lUmVzdWx0IGNvbnRhaW5z IGEgbGlzdCBvZiBiaXRtYXBzZXRzIG9mIHRoZSBpbmRleGVzIG9mCisgKiBtYXRjaGluZyBzdWJw bGFucywgb25lIGZvciBlYWNoIFBhcnRpdGlvblBydW5lSW5mby4KKyAqCiAgKiBPbiByZXR1cm4s IHRoZSBwbGFuIGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHN1ZmZpY2llbnQgbG9ja3MgdG8gYmVnaW4K ICAqIGV4ZWN1dGlvbi4KICAqCkBAIC0xMTM5LDExICsxMTkxLDEzIEBAIGNhY2hlZF9wbGFuX2Nv c3QoQ2FjaGVkUGxhbiAqcGxhbiwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKi8KIENhY2hlZFBs YW4gKgogR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxp c3RJbmZvIGJvdW5kUGFyYW1zLAotCQkJICBSZXNvdXJjZU93bmVyIG93bmVyLCBRdWVyeUVudmly b25tZW50ICpxdWVyeUVudikKKwkJCSAgUmVzb3VyY2VPd25lciBvd25lciwgUXVlcnlFbnZpcm9u bWVudCAqcXVlcnlFbnYsCisJCQkgIExpc3QgKipwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KQogewog CUNhY2hlZFBsYW4gKnBsYW4gPSBOVUxMOwogCUxpc3QJICAgKnFsaXN0OwogCWJvb2wJCWN1c3Rv bXBsYW47CisJTGlzdAkgICAqbXlfcGFydF9wcnVuZV9yZXN1bHRfbGlzdDsKIAogCS8qIEFzc2Vy dCBjYWxsZXIgaXMgZG9pbmcgdGhpbmdzIGluIGEgc2FuZSBvcmRlciAqLwogCUFzc2VydChwbGFu c291cmNlLT5tYWdpYyA9PSBDQUNIRURQTEFOU09VUkNFX01BR0lDKTsKQEAgLTExNjAsNyArMTIx NCw4IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1M aXN0SW5mbyBib3VuZFBhcmFtcywKIAogCWlmICghY3VzdG9tcGxhbikKIAl7Ci0JCWlmIChDaGVj a0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkpCisJCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJj ZSwgYm91bmRQYXJhbXMsCisJCQkJCQkJJm15X3BhcnRfcHJ1bmVfcmVzdWx0X2xpc3QpKQogCQl7 CiAJCQkvKiBXZSB3YW50IGEgZ2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFs aWQgb25lICovCiAJCQlwbGFuID0gcGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xMTY5LDcgKzEyMjQs OCBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlz dEluZm8gYm91bmRQYXJhbXMsCiAJCWVsc2UKIAkJewogCQkJLyogQnVpbGQgYSBuZXcgZ2VuZXJp YyBwbGFuICovCi0JCQlwbGFuID0gQnVpbGRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHFsaXN0LCBO VUxMLCBxdWVyeUVudik7CisJCQlwbGFuID0gQnVpbGRDYWNoZWRQbGFuKHBsYW5zb3VyY2UsIHFs aXN0LCBOVUxMLCBxdWVyeUVudiwKKwkJCQkJCQkJICAgJm15X3BhcnRfcHJ1bmVfcmVzdWx0X2xp c3QpOwogCQkJLyogSnVzdCBtYWtlIHJlYWwgc3VyZSBwbGFuc291cmNlLT5ncGxhbiBpcyBjbGVh ciAqLwogCQkJUmVsZWFzZUdlbmVyaWNQbGFuKHBsYW5zb3VyY2UpOwogCQkJLyogTGluayB0aGUg bmV3IGdlbmVyaWMgcGxhbiBpbnRvIHRoZSBwbGFuc291cmNlICovCkBAIC0xMjE0LDcgKzEyNzAs OCBAQCBHZXRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlz dEluZm8gYm91bmRQYXJhbXMsCiAJaWYgKGN1c3RvbXBsYW4pCiAJewogCQkvKiBCdWlsZCBhIGN1 c3RvbSBwbGFuICovCi0JCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxhbnNvdXJjZSwgcWxpc3Qs IGJvdW5kUGFyYW1zLCBxdWVyeUVudik7CisJCXBsYW4gPSBCdWlsZENhY2hlZFBsYW4ocGxhbnNv dXJjZSwgcWxpc3QsIGJvdW5kUGFyYW1zLCBxdWVyeUVudiwKKwkJCQkJCQkgICAmbXlfcGFydF9w cnVuZV9yZXN1bHRfbGlzdCk7CiAJCS8qIEFjY3VtdWxhdGUgdG90YWwgY29zdHMgb2YgY3VzdG9t IHBsYW5zICovCiAJCXBsYW5zb3VyY2UtPnRvdGFsX2N1c3RvbV9jb3N0ICs9IGNhY2hlZF9wbGFu X2Nvc3QocGxhbiwgdHJ1ZSk7CiAKQEAgLTEyNDYsNiArMTMwMyw5IEBAIEdldENhY2hlZFBsYW4o Q2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywK IAkJcGxhbi0+aXNfc2F2ZWQgPSB0cnVlOwogCX0KIAorCWlmIChwYXJ0X3BydW5lX3Jlc3VsdF9s aXN0KQorCQkqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCA9IG15X3BhcnRfcHJ1bmVfcmVzdWx0X2xp c3Q7CisKIAlyZXR1cm4gcGxhbjsKIH0KIApAQCAtMTczNywxNyArMTc5NywyOSBAQCBRdWVyeUxp c3RHZXRQcmltYXJ5U3RtdChMaXN0ICpzdG10cykKIAogLyoKICAqIEFjcXVpcmVFeGVjdXRvckxv Y2tzOiBhY3F1aXJlIGxvY2tzIG5lZWRlZCBmb3IgZXhlY3V0aW9uIG9mIGEgY2FjaGVkIHBsYW47 Ci0gKiBvciByZWxlYXNlIHRoZW0gaWYgYWNxdWlyZSBpcyBmYWxzZS4KKyAqCisgKiBTZWUgR2V0 Q2FjaGVkUGxhbigpJ3MgY29tbWVudCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBwYXJ0X3BydW5lX3Jl c3VsdF9saXN0LgorICoKKyAqIE9uIHJldHVybiwgKmxvY2tlZFJlbGlkc19wZXJfc3RtdCB3aWxs IGNvbnRhaW4gYSBiaXRtYXBzZXQgZm9yIGV2ZXJ5CisgKiBQbGFubmVkU3RtdCBpbiBzdG10X2xp c3QsIGNvbnRhaW5pbmcgdGhlIFJUIGluZGV4ZXMgb2YgcmVsYXRpb24gZW50cmllcworICogaW4g aXRzIHJhbmdlIHRhYmxlIHRoYXQgd2VyZSBhY3R1YWxseSBsb2NrZWQsIG9yIE5VTEwgaWYgdGhl IFBsYW5uZWRTdG10CisgKiBjb250YWlucyBhIHV0aWxpdHkgc3RhdGVtZW50LgogICovCiBzdGF0 aWMgdm9pZAotQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFjcXVp cmUpCitBY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMsCisJCQkJCSBMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCwKKwkJCQkJ IExpc3QgKipsb2NrZWRSZWxpZHNfcGVyX3N0bXQpCiB7CiAJTGlzdENlbGwgICAqbGMxOwogCisJ KnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSAqbG9ja2VkUmVsaWRzX3Blcl9zdG10ID0gTklMOwog CWZvcmVhY2gobGMxLCBzdG10X2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQg PSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMxKTsKLQkJTGlzdENlbGwgICAqbGMyOworCQlQ YXJ0aXRpb25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOworCQlCaXRtYXBz ZXQgICphbGxMb2NrUmVsaWRzOworCQlCaXRtYXBzZXQgICpsb2NrZWRSZWxpZHMgPSBOVUxMOwor CQlpbnQJCQlydGk7CiAKIAkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJ TElUWSkKIAkJewpAQCAtMTc2MSwxMyArMTgzMywzNSBAQCBBY3F1aXJlRXhlY3V0b3JMb2NrcyhM aXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxp dHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CiAKIAkJCWlmIChxdWVy eSkKLQkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgYWNxdWlyZSk7CisJCQkJU2NhblF1ZXJ5 Rm9yTG9ja3MocXVlcnksIHRydWUpOworCQkJKnBhcnRfcHJ1bmVfcmVzdWx0X2xpc3QgPSBsYXBw ZW5kKCpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0LCBOVUxMKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAK LQkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10LT5ydGFibGUpCisJCS8qCisJCSAqIEZpZ3VyZSBv dXQgdGhlIHNldCBvZiByZWxhdGlvbnMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGxvY2tlZAorCQkg KiBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwbGFuLgorCQkgKi8KKwkJaWYgKHBsYW5uZWRzdG10LT5j b250YWluc0luaXRpYWxQcnVuaW5nKQogCQl7Ci0JCQlSYW5nZVRibEVudHJ5ICpydGUgPSAoUmFu Z2VUYmxFbnRyeSAqKSBsZmlyc3QobGMyKTsKKwkJCS8qCisJCQkgKiBPYnRhaW4gdGhlIHNldCBv ZiBwYXJ0aXRpb25zIHRvIGJlIGxvY2tlZCBmcm9tIHRoZQorCQkJICogUGFydGl0aW9uUHJ1bmVJ bmZvcyBieSBjb25zaWRlcmluZyB0aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcKKwkJCSAqIGluaXRp YWwgcGFydGl0aW9uIHBydW5pbmcuCisJCQkgKi8KKwkJCVBhcnRpdGlvblBydW5lUmVzdWx0ICpw YXJ0X3BydW5lX3Jlc3VsdCA9CisJCQkJRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKHBsYW5uZWRz dG10LCBib3VuZFBhcmFtcyk7CisKKwkJCWFsbExvY2tSZWxpZHMgPSBibXNfdW5pb24ocGxhbm5l ZHN0bXQtPm1pbkxvY2tSZWxpZHMsCisJCQkJCQkJCQkgIHBhcnRfcHJ1bmVfcmVzdWx0LT5zY2Fu X2xlYWZwYXJ0X3J0aXMpOworCQl9CisJCWVsc2UKKwkJCWFsbExvY2tSZWxpZHMgPSBwbGFubmVk c3RtdC0+bWluTG9ja1JlbGlkczsKKworCQlydGkgPSAtMTsKKwkJd2hpbGUgKChydGkgPSBibXNf bmV4dF9tZW1iZXIoYWxsTG9ja1JlbGlkcywgcnRpKSkgPiAwKQorCQl7CisJCQlSYW5nZVRibEVu dHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOwogCiAJCQlpZiAo cnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKIAkJCQljb250aW51ZTsKQEAgLTE3NzgsMTAg KzE4NzIsNTggQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFj cXVpcmUpCiAJCQkgKiBmYWlsIGlmIGl0J3MgYmVlbiBkcm9wcGVkIGVudGlyZWx5IC0tLSB3ZSds bCBqdXN0IHRyYW5zaWVudGx5CiAJCQkgKiBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nIGxvY2su CiAJCQkgKi8KLQkJCWlmIChhY3F1aXJlKQotCQkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlk LCBydGUtPnJlbGxvY2ttb2RlKTsKLQkJCWVsc2UKLQkJCQlVbmxvY2tSZWxhdGlvbk9pZChydGUt PnJlbGlkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCUxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlk LCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCWxvY2tlZFJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGxv Y2tlZFJlbGlkcywgcnRpKTsKKwkJfQorCisJCSpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0ID0gbGFw cGVuZCgqcGFydF9wcnVuZV9yZXN1bHRfbGlzdCwKKwkJCQkJCQkJCQkgIHBhcnRfcHJ1bmVfcmVz dWx0KTsKKwkJKmxvY2tlZFJlbGlkc19wZXJfc3RtdCA9IGxhcHBlbmQoKmxvY2tlZFJlbGlkc19w ZXJfc3RtdCwgbG9ja2VkUmVsaWRzKTsKKwl9Cit9CisKKy8qCisgKiBSZWxlYXNlRXhlY3V0b3JM b2NrcworICogCQlSZWxlYXNlIGxvY2tzIHRoYXQgd291bGQndmUgYmVlbiBhY3F1aXJlZCBieSBh biBlYXJsaWVyIGNhbGwgdG8KKyAqIAkJQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKQorICovCitzdGF0 aWMgdm9pZAorUmVsZWFzZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBMaXN0ICpsb2Nr ZWRSZWxpZHNfcGVyX3N0bXQpCit7CisJTGlzdENlbGwgICAqbGMxLAorCQkJICAgKmxjMjsKKwor CWZvcmJvdGgobGMxLCBzdG10X2xpc3QsIGxjMiwgbG9ja2VkUmVsaWRzX3Blcl9zdG10KQorCXsK KwkJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxj MSk7CisJCUJpdG1hcHNldCAgKmxvY2tlZFJlbGlkcyA9IGxmaXJzdChsYzIpOworCQlpbnQJCQly dGk7CisKKwkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9PSBDTURfVVRJTElUWSkKKwkJ eworCQkJLyoKKwkJCSAqIElnbm9yZSB1dGlsaXR5IHN0YXRlbWVudHMsIGV4Y2VwdCB0aG9zZSAo c3VjaCBhcyBFWFBMQUlOKSB0aGF0CisJCQkgKiBjb250YWluIGEgcGFyc2VkLWJ1dC1ub3QtcGxh bm5lZCBxdWVyeS4gIE5vdGU6IGl0J3Mgb2theSB0byB1c2UKKwkJCSAqIFNjYW5RdWVyeUZvckxv Y2tzLCBldmVuIHRob3VnaCB0aGUgcXVlcnkgaGFzbid0IGJlZW4gdGhyb3VnaAorCQkJICogcnVs ZSByZXdyaXRpbmcsIGJlY2F1c2UgcmV3cml0aW5nIGRvZXNuJ3QgY2hhbmdlIHRoZSBxdWVyeQor CQkJICogcmVwcmVzZW50YXRpb24uCisJCQkgKi8KKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IFV0aWxp dHlDb250YWluc1F1ZXJ5KHBsYW5uZWRzdG10LT51dGlsaXR5U3RtdCk7CisKKwkJCWlmIChxdWVy eSkKKwkJCQlTY2FuUXVlcnlGb3JMb2NrcyhxdWVyeSwgZmFsc2UpOworCQkJY29udGludWU7CisJ CX0KKworCQlydGkgPSAtMTsKKwkJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIobG9ja2Vk UmVsaWRzLCBydGkpKSA+PSAwKQorCQl7CisJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRj aChydGksIHBsYW5uZWRzdG10LT5ydGFibGUpOworCisJCQlBc3NlcnQocnRlLT5ydGVraW5kID09 IFJURV9SRUxBVElPTik7CisKKwkJCS8qIFNlZSB0aGUgY29tbWVudCBpbiBBY3F1aXJlRXhlY3V0 b3JMb2NrcygpLiAqLworCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxs b2NrbW9kZSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdy L3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRleCBk NTQ5ZjY2ZDRhLi4xYmJlNmI3MDRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdy L3BvcnRhbG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMKQEAg LTMwMyw2ICszMDMsMjUgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAlwb3J0 YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQogCisvKgorICogUG9ydGFsU3RvcmVQYXJ0 aXRpb25QcnVuZVJlc3VsdHMKKyAqCQlDb3B5IHRoZSBnaXZlbiBsaXN0IG9mIFBhcnRpdGlvblBy dW5lUmVzdWx0cyBpbnRvIHRoZSBwb3J0YWwncworICoJCWNvbnRleHQKKyAqCisgKiBUaGlzIGFs bG93cyB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBsaXN0IGV4aXN0cyBhcyBsb25nIGFz IHRoZSBwb3J0YWwKKyAqIGRvZXMuCisgKi8KK3ZvaWQKK1BvcnRhbFN0b3JlUGFydGl0aW9uUHJ1 bmVSZXN1bHRzKFBvcnRhbCBwb3J0YWwsIExpc3QgKnBhcnRfcHJ1bmVfcmVzdWx0cykKK3sKKwlN ZW1vcnlDb250ZXh0CW9sZGN4dDsKKworCUFzc2VydEFyZyhQb3J0YWxJc1ZhbGlkKHBvcnRhbCkp OworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwb3J0YWwtPnBvcnRhbENvbnRleHQp OworCXBvcnRhbC0+cGFydF9wcnVuZV9yZXN1bHRzID0gY29weU9iamVjdChwYXJ0X3BydW5lX3Jl c3VsdHMpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogUG9y dGFsUmVsZWFzZUNhY2hlZFBsYW4KICAqCQlSZWxlYXNlIGEgcG9ydGFsJ3MgcmVmZXJlbmNlIHRv IGl0cyBjYWNoZWQgcGxhbiwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCmluZGV4IDY2Njk3 N2ZiMWYuLmJiYzhjNDJkODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxh aW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKQEAgLTg3LDcgKzg3LDkg QEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9D bGF1c2UgKmludG8sCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVy eVN0cmluZywKIAkJCQkJCQkgIFBhcmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50 ICpxdWVyeUVudik7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRTdG10ICpw bGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKK2V4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFu KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCSAgIFBhcnRpdGlvblBydW5lUmVzdWx0 ICpwYXJ0X3BydW5lX3Jlc3VsdCwKKwkJCQkJCSAgIEludG9DbGF1c2UgKmludG8sCiAJCQkJCQkg ICBFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkJCSAgIFBh cmFtTGlzdEluZm8gcGFyYW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKIAkJCQkJCSAg IGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uaAppbmRleCA3MDg0MzVlOTUyLi5iZDg3NzY0MDJlIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oCkBAIC00NSw2ICs0NSw3IEBAIGV4dGVybiB2b2lkIEV4ZWNDbGVhbnVw VHVwbGVSb3V0aW5nKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAgKiBucGFydHMJCQkJCQlM ZW5ndGggb2Ygc3VicGxhbl9tYXBbXSBhbmQgc3VicGFydF9tYXBbXS4KICAqIHN1YnBsYW5fbWFw CQkJCQlTdWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEuCiAgKiBzdWJwYXJ0 X21hcAkJCQkJU3VicGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xLgorICogcnRp X21hcAkJCQkJCVJhbmdlIHRhYmxlIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMC4KICAq IHByZXNlbnRfcGFydHMJCQkJQSBCaXRtYXBzZXQgb2YgdGhlIHBhcnRpdGlvbiBpbmRleGVzIHRo YXQgd2UKICAqCQkJCQkJCQloYXZlIHN1YnBsYW5zIG9yIHN1YnBhcnRzIGZvci4KICAqIGluaXRp YWxfcHJ1bmluZ19zdGVwcwkJTGlzdCBvZiBQYXJ0aXRpb25QcnVuZVN0ZXBzIHVzZWQgdG8KQEAg LTYxLDYgKzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YQog CWludAkJCW5wYXJ0czsKIAlpbnQJCSAgICpzdWJwbGFuX21hcDsKIAlpbnQJCSAgICpzdWJwYXJ0 X21hcDsKKwlJbmRleAkgICAqcnRpX21hcDsKIAlCaXRtYXBzZXQgICpwcmVzZW50X3BhcnRzOwog CUxpc3QJICAgKmluaXRpYWxfcHJ1bmluZ19zdGVwczsKIAlMaXN0CSAgICpleGVjX3BydW5pbmdf c3RlcHM7CkBAIC0xMjMsOSArMTI1LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5l U3RhdGUKIAogZXh0ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNJbml0UGFydGl0aW9uUHJ1 bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3Vi cGxhbnMsCi0JCQkJCQkJCQkJCQkJIFBhcnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJ CQkJCQkJCQkJCSBpbnQgcGFydF9wcnVuZV9pbmRleCwKIAkJCQkJCQkJCQkJCQkgQml0bWFwc2V0 ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAotCQkJCQkJ CQkJCSAgIGJvb2wgaW5pdGlhbF9wcnVuZSk7Ci0KKwkJCQkJCQkJCQkgICBib29sIGluaXRpYWxf cHJ1bmUsCisJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqc2Nhbl9sZWFmcGFydF9ydGlzKTsKK2V4 dGVybiBCaXRtYXBzZXQgKkV4ZWNQYXJ0aXRpb25Eb0luaXRpYWxQcnVuaW5nKFBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJUGFyYW1MaXN0SW5mbyBwYXJhbXMsCisJCQkJCQkJCVBh cnRpdGlvblBydW5lSW5mbyAqcHJ1bmVpbmZvLAorCQkJCQkJCQlCaXRtYXBzZXQgKipzY2FuX2xl YWZwYXJ0X3J0aXMpOwogI2VuZGlmCQkJCQkJCS8qIEVYRUNQQVJUSVRJT05fSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNkZXNjLmgKaW5kZXggZTc5ZTJjMDAxZi4uNjBkNTY0NDkwOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjZGVzYy5oCkBAIC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwog CS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJvdmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNjICovCiAJQ21k VHlwZQkJb3BlcmF0aW9uOwkJLyogQ01EX1NFTEVDVCwgQ01EX1VQREFURSwgZXRjLiAqLwogCVBs YW5uZWRTdG10ICpwbGFubmVkc3RtdDsJLyogcGxhbm5lcidzIG91dHB1dCAoY291bGQgYmUgdXRp bGl0eSwgdG9vKSAqLworCVBhcnRpdGlvblBydW5lUmVzdWx0ICpwYXJ0X3BydW5lX3Jlc3VsdDsg LyogRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkncworCQkJCQkJCQkJCQkgICogb3V0cHV0IGZv ciBwbGFubmVkc3RtdCAqLwogCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4 dCBvZiB0aGUgcXVlcnkgKi8KIAlTbmFwc2hvdAlzbmFwc2hvdDsJCS8qIHNuYXBzaG90IHRvIHVz ZSBmb3IgcXVlcnkgKi8KIAlTbmFwc2hvdAljcm9zc2NoZWNrX3NuYXBzaG90OwkvKiBjcm9zc2No ZWNrIGZvciBSSSB1cGRhdGUvZGVsZXRlICovCkBAIC01Nyw2ICs1OSw3IEBAIHR5cGVkZWYgc3Ry dWN0IFF1ZXJ5RGVzYwogCiAvKiBpbiBwcXVlcnkuYyAqLwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3Jl YXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJICBQYXJ0aXRp b25QcnVuZVJlc3VsdCAqcGFydF9wcnVuZV9yZXN1bHQsCiAJCQkJCQkJCSAgY29uc3QgY2hhciAq c291cmNlVGV4dCwKIAkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJICBTbmFw c2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggODcz NzcyZjE4OC4uNTdkYzBlODA3NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0xODUsNiAr MTg1LDggQEAgRXhlY0dldEp1bmtBdHRyaWJ1dGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIEF0dHJO dW1iZXIgYXR0bm8sIGJvb2wgKmlzTnVsbCkKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVuY3Rp b25zIGluIGV4ZWNNYWluLmMKICAqLworZXh0ZXJuIFBhcnRpdGlvblBydW5lUmVzdWx0ICpFeGVj dXRvckRvSW5pdGlhbFBydW5pbmcoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCQkJCQkJ CQkJCSAgUGFyYW1MaXN0SW5mbyBwYXJhbXMpOwogZXh0ZXJuIHZvaWQgRXhlY3V0b3JTdGFydChR dWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBzdGFuZGFyZF9F eGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2 b2lkIEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApp bmRleCA5NGIxOTFmOGFlLi5hOGJmOTA4ZDYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNTk2 LDYgKzU5Niw4IEBAIHR5cGVkZWYgc3RydWN0IEVTdGF0ZQogCXN0cnVjdCBFeGVjUm93TWFyayAq KmVzX3Jvd21hcmtzOwkvKiBBcnJheSBvZiBwZXItcmFuZ2UtdGFibGUtZW50cnkKIAkJCQkJCQkJ CQkgKiBFeGVjUm93TWFya3MsIG9yIE5VTEwgaWYgbm9uZSAqLwogCVBsYW5uZWRTdG10ICplc19w bGFubmVkc3RtdDsJLyogbGluayB0byB0b3Agb2YgcGxhbiB0cmVlICovCisJTGlzdAkJKmVzX3Bh cnRfcHJ1bmVfaW5mb3M7CS8qIFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zICovCisJc3RydWN0 IFBhcnRpdGlvblBydW5lUmVzdWx0ICplc19wYXJ0X3BydW5lX3Jlc3VsdDsgLyogUXVlcnlEZXNj LnBhcnRfcHJ1bmVfcmVzdWx0ICovCiAJY29uc3QgY2hhciAqZXNfc291cmNlVGV4dDsJLyogU291 cmNlIHRleHQgZnJvbSBRdWVyeURlc2MgKi8KIAogCUp1bmtGaWx0ZXIgKmVzX2p1bmtGaWx0ZXI7 CS8qIHRvcC1sZXZlbCBqdW5rIGZpbHRlciwgaWYgYW55ICovCkBAIC05ODQsNiArOTg2LDM0IEBA IHR5cGVkZWYgc3RydWN0IERvbWFpbkNvbnN0cmFpbnRTdGF0ZQogICovCiB0eXBlZGVmIFR1cGxl VGFibGVTbG90ICooKkV4ZWNQcm9jTm9kZU10ZCkgKHN0cnVjdCBQbGFuU3RhdGUgKnBzdGF0ZSk7 CiAKKy8qLS0tLS0tLS0tLS0tLS0tLQorICogUGFydGl0aW9uUHJ1bmVSZXN1bHQKKyAqCisgKiBU aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcgRXhlY3V0b3JEb0luaXRpYWxQcnVuaW5nKCkgaW52b2Nh dGlvbiBvbiBhIGdpdmVuCisgKiBQbGFubmVkU3RtdC4KKyAqCisgKiBDb250YWlucyBhIGxpc3Qg b2YgQml0bWFwc2V0IG9mIHRoZSBpbmRleGVzIG9mIHRoZSBzdWJwbGFucyByZW1haW5pbmcgYWZ0 ZXIKKyAqIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIGJ5IGNhbGxpbmcgRXhlY0ZpbmRNYXRj aGluZ1N1YlBsYW5zKCkgZm9yIGV2ZXJ5CisgKiBQYXJ0aXRpb25QcnVuZUluZm9zIGZvdW5kIGlu IFBsYW5uZWRTdG10LnBhcnRQcnVuZUluZm9zLiAgUlQgaW5kZXhlcyBvZiB0aGUKKyAqIGxlYWYg cGFydGl0aW9ucyBzY2FubmVkIGJ5IHRob3NlIHN1YnBsYW5zIGFjcm9zcyBhbGwgUGFydGl0aW9u UHJ1bmVJbmZvcworICogYXJlIGFkZGVkIGludG8gc2Nhbl9sZWFmcGFydF9ydGlzLgorICoKKyAq IFRoaXMgaXMgdXNlZCBieSBHZXRDYWNoZWRQbGFuKCkgdG8gaW5mb3JtIGl0cyBjYWxsZXJzIG9m IHRoZSBwcnVuaW5nCisgKiBkZWNpc2lvbnMgbWFkZSB3aGVuIHBlcmZvcm1pbmcgQWNxdWlyZUV4 ZWN1dG9yTG9ja3MoKSBvbiBhIGdpdmVuIGNhY2hlZAorICogUGxhbm5lZFN0bXQsIHdoaWNoIHRo ZSBjYWxsZXJzIHRoZW4gcGFzcyBvbnRvIHRoZSBleGVjdXRvci4gIFRoZSBleGVjdXRvcgorICog cmVmZXJzIHRvIHRoaXMgbm9kZSB3aGVuIG1hZGUgYXZhaWxhYmxlIHdoZW4gaW5pdGlhbGl6aW5n IHRoZSBwbGFuIG5vZGVzIHRvCisgKiB3aGljaCB0aG9zZSBQYXJ0aXRpb25QcnVuZUluZm9zIGFw cGx5IHNvIHRoYXQgdGhlIHNhbWUgc2V0IG9mIHF1YWxpZnlpbmcKKyAqIHN1YnBsYW5zIGFyZSBp bml0aWFsaXplZCwgcmF0aGVyIHRoYW4gZGVyaXZpbmcgdGhhdCBzZXQgYWdhaW4gYnkgcmVkb2lu ZworICogaW5pdGlhbCBwcnVuaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVu ZVJlc3VsdAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlMaXN0CQkgICAqdmFsaWRfc3VicGxhbl9v ZmZzX2xpc3Q7CisJQml0bWFwc2V0CSAgICpzY2FuX2xlYWZwYXJ0X3J0aXM7Cit9IFBhcnRpdGlv blBydW5lUmVzdWx0OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJUGxhblN0YXRlIG5vZGUK ICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaAppbmRleCAzNDBkMjhmNGUxLi42NjQxNmJjZTk3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgK QEAgLTk3LDYgKzk3LDkgQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX1BhcnRpdGlvblBydW5l U3RlcENvbWJpbmUsCiAJVF9QbGFuSW52YWxJdGVtLAogCisJLyogVEFHUyBGT1IgRVhFQ1VUT1Ig UFJFUCBOT0RFUyAoZXhlY25vZGVzLmgpICovCisJVF9QYXJ0aXRpb25QcnVuZVJlc3VsdCwKKwog CS8qCiAJICogVEFHUyBGT1IgUExBTiBTVEFURSBOT0RFUyAoZXhlY25vZGVzLmgpCiAJICoKQEAg LTY3NCw2ICs2NzcsNyBAQCBleHRlcm4gc3RydWN0IEJpdG1hcHNldCAqcmVhZEJpdG1hcHNldCh2 b2lkKTsKIGV4dGVybiB1aW50cHRyX3QgcmVhZERhdHVtKGJvb2wgdHlwYnl2YWwpOwogZXh0ZXJu IGJvb2wgKnJlYWRCb29sQ29scyhpbnQgbnVtQ29scyk7CiBleHRlcm4gaW50ICpyZWFkSW50Q29s cyhpbnQgbnVtQ29scyk7CitleHRlcm4gSW5kZXggKnJlYWRJbmRleENvbHMoaW50IG51bUNvbHMp OwogZXh0ZXJuIE9pZCAqcmVhZE9pZENvbHMoaW50IG51bUNvbHMpOwogZXh0ZXJuIGludDE2ICpy ZWFkQXR0ck51bWJlckNvbHMoaW50IG51bUNvbHMpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IGM1YWI1M2UwNWMuLjExMDA3Y2RhMjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMDcsNiAr MTA3LDE4IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAogCUxpc3QJICAgKmFwcGVu ZFJlbGF0aW9uczsJLyogImZsYXQiIGxpc3Qgb2YgQXBwZW5kUmVsSW5mb3MgKi8KIAorCUxpc3QJ ICAgKnBhcnRQcnVuZUluZm9zOwkJLyogTGlzdCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFp bmVkIGluCisJCQkJCQkJCQkgKiB0aGUgcGxhbiAqLworCisJYm9vbAkJY29udGFpbnNJbml0aWFs UHJ1bmluZzsJLyogRG8gYW55IG9mIHRob3NlIFBhcnRpdGlvblBydW5lSW5mb3MKKwkJCQkJCQkJ CQkgKiBoYXZlIGluaXRpYWwgKHByZS1leGVjKSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3RlcHMg aW4gdGhlbT8gKi8KKworCUJpdG1hcHNldCAgKm1pbkxvY2tSZWxpZHM7CS8qIEluZGV4ZXMgb2Yg YWxsIHJhbmdlIHRhYmxlIGVudHJpZXMgbWludXMKKwkJCQkJCQkJICogaW5kZXhlcyBvZiByYW5n ZSB0YWJsZSBlbnRyaWVzIG9mIHRoZSBsZWFmCisJCQkJCQkJCSAqIHBhcnRpdGlvbnMgc2Nhbm5l ZCBieSBwcnVuYWJsZSBzdWJwbGFuczsKKwkJCQkJCQkJICogc2VlIEFjcXVpcmVFeGVjdXRvckxv Y2tzKCkgKi8KKwogCUxpc3QJICAgKnJlbGF0aW9uT2lkczsJLyogT0lEcyBvZiByZWxhdGlvbnMg dGhlIHBsYW4gZGVwZW5kcyBvbiAqLwogCiAJTGlzdAkgICAqaW52YWxJdGVtczsJCS8qIG90aGVy IGRlcGVuZGVuY2llcywgYXMgUGxhbkludmFsSXRlbXMgKi8KQEAgLTM3Nyw2ICszODksOSBAQCBz dHJ1Y3QgUGxhbm5lckluZm8KIAogCS8qIERvZXMgdGhpcyBxdWVyeSBtb2RpZnkgYW55IHBhcnRp dGlvbiBrZXkgY29sdW1ucz8gKi8KIAlib29sCQlwYXJ0Q29sc1VwZGF0ZWQ7CisKKwkvKiBQYXJ0 aXRpb25QcnVuZUluZm9zIGFkZGVkIGluIHRoaXMgcXVlcnkncyBwbGFuLiAqLworCUxpc3QJICAg KnBhcnRQcnVuZUluZm9zOwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IGU0M2UzNjBk OWIuLmY4ZjM5NzFmNDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC02NCw4ICs2NCwyMCBAQCB0 eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJc3RydWN0IFBsYW4gKnBsYW5UcmVlOwkJLyog dHJlZSBvZiBQbGFuIG5vZGVzICovCiAKKwlMaXN0CSAgICpwYXJ0UHJ1bmVJbmZvczsJLyogTGlz dCBvZiBQYXJ0aXRpb25QcnVuZUluZm8gY29udGFpbmVkIGluCisJCQkJCQkJCSAqIHRoZSBwbGFu ICovCisKKwlib29sCQljb250YWluc0luaXRpYWxQcnVuaW5nOwkvKiBEbyBhbnkgb2YgdGhvc2Ug UGFydGl0aW9uUHJ1bmVJbmZvcworCQkJCQkJCQkJCSAqIGhhdmUgaW5pdGlhbCAocHJlLWV4ZWMp IHBydW5pbmcKKwkJCQkJCQkJCQkgKiBzdGVwcyBpbiB0aGVtPyAqLworCiAJTGlzdAkgICAqcnRh YmxlOwkJCS8qIGxpc3Qgb2YgUmFuZ2VUYmxFbnRyeSBub2RlcyAqLwogCisJQml0bWFwc2V0ICAq bWluTG9ja1JlbGlkczsJLyogSW5kZXhlcyBvZiBhbGwgcmFuZ2UgdGFibGUgZW50cmllcyBtaW51 cworCQkJCQkJCQkgKiBpbmRleGVzIG9mIHJhbmdlIHRhYmxlIGVudHJpZXMgb2YgdGhlIGxlYWYK KwkJCQkJCQkJICogcGFydGl0aW9ucyBzY2FubmVkIGJ5IHBydW5hYmxlIHN1YnBsYW5zOworCQkJ CQkJCQkgKiBzZWUgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSAqLworCiAJLyogcnRhYmxlIGluZGV4 ZXMgb2YgdGFyZ2V0IHJlbGF0aW9ucyBmb3IgSU5TRVJUL1VQREFURS9ERUxFVEUgKi8KIAlMaXN0 CSAgICpyZXN1bHRSZWxhdGlvbnM7CS8qIGludGVnZXIgbGlzdCBvZiBSVCBpbmRleGVzLCBvciBO SUwgKi8KIApAQCAtMjYyLDggKzI3NCw4IEBAIHR5cGVkZWYgc3RydWN0IEFwcGVuZAogCSAqLwog CWludAkJCWZpcnN0X3BhcnRpYWxfcGxhbjsKIAotCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBs YW4gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwotCXN0cnVjdCBQYXJ0 aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKKwkvKiBJbmRleCB0byBQbGFubmVySW5m by5wYXJ0UHJ1bmVJbmZvcyBvciAtMSBpZiBubyBydW4tdGltZSBwcnVuaW5nICovCisJaW50CQkJ cGFydF9wcnVuZV9pbmRleDsKIH0gQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0y ODIsOCArMjk0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAlPaWQJCSAgICpzb3J0 T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KIAlPaWQJ CSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCiAJYm9vbAkgICAqbnVs bHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwotCS8qIEluZm8gZm9y IHJ1bi10aW1lIHN1YnBsYW4gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAq LwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKKworCS8qIElu ZGV4IHRvIFBsYW5uZXJJbmZvLnBhcnRQcnVuZUluZm9zIG9yIC0xIGlmIG5vIHJ1bi10aW1lIHBy dW5pbmcgKi8KKwlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBNZXJnZUFwcGVuZDsKIAogLyog LS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE5MSw2ICsxMjA0LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBs YW5Sb3dNYXJrCiAgKiBwcnVuZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFpbmluZyBQYXJ0 aXRpb25lZFJlbFBydW5lSW5mbyBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3QgcGVyIHJ1bi10 aW1lLXBydW5hYmxlIHBhcnRpdGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFyaW5nIGluIHRo ZSBwYXJlbnQgcGxhbiBub2RlJ3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5pdF9wcnVuaW5n CURvZXMgYW55IG9mIHRoZSBQYXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1 bmVfaW5mb3MgaGF2ZSBpdHMgaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisgKiBuZWVk c19leGVjX3BydW5pbmcJRG9lcyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBp bgorICoJCQkJCQlwcnVuZV9pbmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3RlcHMgc2V0Pwor ICoKICAqIG90aGVyX3N1YnBsYW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0aGF0IGFyZSBu b3QgYWNjb3VudGVkIGZvcgogICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1 bmVJbmZvIG5vZGVzIGluCiAgKgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBzdWJwbGFucyBt dXN0IG5vdCBiZSBwcnVuZWQuCkBAIC0xMTk5LDYgKzEyMTksOCBAQCB0eXBlZGVmIHN0cnVjdCBQ YXJ0aXRpb25QcnVuZUluZm8KIHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJICAgKnBydW5lX2lu Zm9zOworCWJvb2wJCW5lZWRzX2luaXRfcHJ1bmluZzsKKwlib29sCQluZWVkc19leGVjX3BydW5p bmc7CiAJQml0bWFwc2V0ICAqb3RoZXJfc3VicGxhbnM7CiB9IFBhcnRpdGlvblBydW5lSW5mbzsK IApAQCAtMTIyOSw2ICsxMjUxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uZWRSZWxQcnVu ZUluZm8KIAlpbnQJCSAgICpzdWJwbGFuX21hcDsJLyogc3VicGxhbiBpbmRleCBieSBwYXJ0aXRp b24gaW5kZXgsIG9yIC0xICovCiAJaW50CQkgICAqc3VicGFydF9tYXA7CS8qIHN1YnBhcnQgaW5k ZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAqLwogCU9pZAkJICAgKnJlbGlkX21hcDsJCS8q IHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAgKi8KKwlJbmRleAkgICAqcnRp X21hcDsJCS8qIFJhbmdlIHRhYmxlIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgMC4gKi8KIAog CS8qCiAJICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNob3dzIGhvdyB0byBwcnVuZSBkdXJpbmcg ZXhlY3V0b3Igc3RhcnR1cCAoaS5lLiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnRpdGlv bmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaApp bmRleCA5MDY4NGVmYTI1Li5lYmYwZGNmZjhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJ0 aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRw cnVuZS5oCkBAIC03MCwxMCArNzAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVD b250ZXh0CiAjZGVmaW5lIFBydW5lQ3h0U3RhdGVJZHgocGFydG5hdHRzLCBzdGVwX2lkLCBrZXlu bykgXAogCSgocGFydG5hdHRzKSAqIChzdGVwX2lkKSArIChrZXlubykpCiAKLWV4dGVybiBQYXJ0 aXRpb25QcnVuZUluZm8gKm1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhzdHJ1Y3QgUGxhbm5lcklu Zm8gKnJvb3QsCi0JCQkJCQkJCQkJCQkJc3RydWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKLQkJ CQkJCQkJCQkJCQlMaXN0ICpzdWJwYXRocywKLQkJCQkJCQkJCQkJCQlMaXN0ICpwcnVuZXF1YWwp OworZXh0ZXJuIGludCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8oc3RydWN0IFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkJc3RydWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJCQkJCQkJ CUxpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJTGlzdCAqcHJ1bmVxdWFsKTsKIGV4dGVybiBCaXRt YXBzZXQgKnBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhzdHJ1Y3QgUmVsT3B0SW5mbyAqcmVs KTsKIGV4dGVybiBCaXRtYXBzZXQgKmdldF9tYXRjaGluZ19wYXJ0aXRpb25zKFBhcnRpdGlvblBy dW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgIExpc3QgKnBydW5pbmdfc3RlcHMpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggYi9zcmMvaW5jbHVkZS91 dGlscy9wbGFuY2FjaGUuaAppbmRleCA5NWI5OWUzZDI1Li40NDkyMDBiOTQ5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaApAQCAtMjIwLDcgKzIyMCw4IEBAIGV4dGVybiBMaXN0ICpDYWNoZWRQbGFuR2V0 VGFyZ2V0TGlzdChDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogZXh0ZXJuIENhY2hlZFBs YW4gKkdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJCQkJCQkJ IFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsCiAJCQkJCQkJCSBSZXNvdXJjZU93bmVyIG93bmVy LAotCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJCQkgUXVlcnlF bnZpcm9ubWVudCAqcXVlcnlFbnYsCisJCQkJCQkJCSBMaXN0ICoqcGFydF9wcnVuZV9yZXN1bHRf bGlzdCk7CiBleHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFuICpwbGFuLCBS ZXNvdXJjZU93bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFsbG93c1NpbXBs ZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3BvcnRhbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgK aW5kZXggYWVkZGJkYWZlNS4uOWY3NzI3YTgzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKQEAgLTEzOCw2ICsx MzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRhCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJ CS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJ ICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCiAJQ2FjaGVkUGxhbiAqY3Bs YW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJlIGZyb20gb25lICovCisJTGlzdAkgICAq cGFydF9wcnVuZV9yZXN1bHRzOwkvKiBsaXN0IG9mIFBhcnRpdGlvblBydW5lUmVzdWx0cyAqLwog CiAJUGFyYW1MaXN0SW5mbyBwb3J0YWxQYXJhbXM7IC8qIHBhcmFtcyB0byBwYXNzIHRvIHF1ZXJ5 ICovCiAJUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnY7IC8qIGVudmlyb25tZW50IGZvciBxdWVy eSAqLwpAQCAtMjQyLDYgKzI0Myw4IEBAIGV4dGVybiB2b2lkIFBvcnRhbERlZmluZVF1ZXJ5KFBv cnRhbCBwb3J0YWwsCiAJCQkJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJCQkJICBM aXN0ICpzdG10cywKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuKTsKK2V4dGVybiB2b2lkIFBv cnRhbFN0b3JlUGFydGl0aW9uUHJ1bmVSZXN1bHRzKFBvcnRhbCBwb3J0YWwsCisJCQkJCQkJCQkJ CSBMaXN0ICpwYXJ0X3BydW5lX3Jlc3VsdF9saXN0KTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9y dGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVh dGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxIYXNoVGFibGVE ZWxldGVBbGwodm9pZCk7Ci0tIAoyLjI0LjEKCg== --000000000000e0739605dc5837fb--