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 1nZlRT-0000wi-Ji for pgsql-hackers@arkaria.postgresql.org; Thu, 31 Mar 2022 03:25:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nZlRS-0008P5-As for pgsql-hackers@arkaria.postgresql.org; Thu, 31 Mar 2022 03:25:46 +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 1nZlRR-0008Ov-7J for pgsql-hackers@lists.postgresql.org; Thu, 31 Mar 2022 03:25:45 +0000 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nZlRK-0006qo-1A for pgsql-hackers@postgresql.org; Thu, 31 Mar 2022 03:25:43 +0000 Received: by mail-pj1-x1030.google.com with SMTP id gb19so22782937pjb.1 for ; Wed, 30 Mar 2022 20:25:37 -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=BWxw9BNRoz38ff0wg5pF8LAMI4qF4z1bCVGwchafx5k=; b=b/BhfEQ48HQn2ktnvigICnG7VhbNyLQJXwlCCVOXSgW2JBKXo+4+2PR0CVY170c7SX rFEkBZyiX45pMGq5CTu4BLSKX4GeH9c939oZPvgMHVdExCwJwQihKqAsj5w5vZWvg+vt aizjPcTgApS97rJdtBBxfWpQZ5BKVl3OK+2z2k2V/QcdPcybUEYibRn8xnULDpOEeeUg 4TQHnEzRMnovK5p+8Lt1SL35u0UlO94zN/fojEDAQvbBJuDR4ukNATLYPqpKzacPjONj rLnidyXTsIPB2jh7PShybgki30wElP2H1PvKjEiCurqFLbMFMhvNVW9PTdL9sdyQekUY W2wA== 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=BWxw9BNRoz38ff0wg5pF8LAMI4qF4z1bCVGwchafx5k=; b=iDizbmHX/O2o+rDlw93EmfG4a9o26VFkA+ik60SLwsV+UhLhXKU4nI3EeTx3SJhRfq j9zo4RdnWZl6loVj/4+rM89y4z4p7OP4cooENYiBQwMQw7IU9agYzVXlpMBclLBSIgVi CVTDPcQttqP/UqSM6GrM16OAPqiQWqAuwS0Xh165eOt+SJI4QL6AOjfQhjrIJNITiwUG MzTR0grD9XftQ03RYiSyxMt59DLpMur+wF+fjq7cOEqW9Tlit/OXoiCvOkUJuaEoCuUa ikol2B1xCAW5bpf8bF++Yyf2S+T33DghaM2aWIDl9pEFKZ3fCLskGsPksK9t3rU6VGJd /bOQ== X-Gm-Message-State: AOAM531mazoA6S/eO/s/uzZ3qye9l1wESbRHB5YHGyogQwm1nGfmmrIq LBpbhSs03bt7YiOIcJxO7UDKVrpSxRI3SSb8eHk= X-Google-Smtp-Source: ABdhPJybCDLxvunaRwPsnlaYD1wGYAqWasN6mLP/jVFLF7zqmGbrryj/xRkjg2DQKmWlTExRDySy7O025yPrZPJr7IY= X-Received: by 2002:a17:903:41d1:b0:154:76c2:f7bc with SMTP id u17-20020a17090341d100b0015476c2f7bcmr2888082ple.109.1648697136714; Wed, 30 Mar 2022 20:25:36 -0700 (PDT) MIME-Version: 1.0 References: <215356.1647286703@sss.pgh.pa.us> In-Reply-To: From: Amit Langote Date: Thu, 31 Mar 2022 12:25:20 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Robert Haas Cc: Tom Lane , PostgreSQL-development , "David Rowley *EXTERN*" Content-Type: multipart/mixed; boundary="0000000000002d674405db7b3764" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002d674405db7b3764 Content-Type: text/plain; charset="UTF-8" On Mon, Mar 28, 2022 at 4:28 PM Amit Langote wrote: > On Mon, Mar 28, 2022 at 4:17 PM Amit Langote wrote: > > Other than the changes mentioned above, the updated patch now contains > > a bit more commentary than earlier versions, mostly around > > AcquireExecutorLocks()'s new way of determining the set of relations > > to lock and the significantly redesigned working of the "initial" > > execution pruning. > > Forgot to rebase over the latest HEAD, so here's v7. Also fixed that > _out and _read functions for PlanInitPruningOutput were using an > obsolete node label. Rebased. -- Amit Langote EDB: http://www.enterprisedb.com --0000000000002d674405db7b3764 Content-Type: application/octet-stream; name="v8-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Disposition: attachment; filename="v8-0004-Optimize-AcquireExecutorLocks-to-skip-pruned-part.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1efoz103 RnJvbSA5ZTBhZTg4ODdhOWYzZDc1ZmViNGRmOTY5ZGRlNTA0YTIxZDM3MDBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyMiBEZWMgMjAyMSAxNjo1NToxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjggNC80 XSBPcHRpbWl6ZSBBY3F1aXJlRXhlY3V0b3JMb2NrcygpIHRvIHNraXAgcHJ1bmVkCiBwYXJ0aXRp b25zCgpJbnN0ZWFkIG9mIGxvY2tpbmcgYWxsIHJlbGF0aW9ucyBsaXN0ZWQgaW4gdGhlIHJhbmdl IHRhYmxlIGluIHRoZQpjYXNlcyB3aGVyZSB0aGUgUGxhbm5lZFN0bXQgaW5kaWNhdGVzIHRoYXQg c29tZSBub2RlcyBpbiB0aGUgcGxhbgp0cmVlIGNhbiBkbyBwYXJ0aXRpb24gcHJ1bmluZyB3aXRo b3V0IGRlcGVuZGluZyBvbiBleGVjdXRpb24gaGF2aW5nCnN0YXJ0ZWQgKHNvIGNhbGxlZCAiaW5p dGlhbCIgcHJ1bmluZyksIEFjcXVpcmVFeGVjdXRvckxvY2tzKCkgbm93CmNhbGxzIHRoZSBuZXcg ZXhlY3V0b3IgZnVuY3Rpb24gRXhlY3V0b3JHZXRMb2NrUmVscygpIHdoaWNoIHJldHVybnMKYSBz ZXQgb2YgcmVsYXRpb25zICh0aGVpciBSVCBpbmRleGVzKSB0byBiZSBsb2NrZWQgbm90IGluY2x1 ZGluZwp0aG9zZSBzY2FubmVkIGJ5IHRoZSBzdWJwbGFucyB0aGF0IHBydW5lZC4KClRoZSByZXN1 bHQgb2YgcHJ1bmluZyBkb25lIHRoaXMgd2F5IG11c3QgYmUgcmVtZW1iZXJlZCBhbmQgcmV1c2Vk CmR1cmluZyBhY3R1YWwgZXhlY3V0aW9uIG9mIHRoZSBwbGFuLCB3aGljaCBpcyBkb25lIGJ5IGNy ZWF0aW5nIGEKUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGZvciBmb3IgZWFjaCBwbGFuIG5v ZGUgdGhhdCB1bmRlcmdvZXMKcHJ1bmluZyBhbmQgYSBzZXQgb2YgdGhvc2UgZm9yIHRoZSB3aG9s ZSBwbGFuIHRyZWUgYXJlIGFkZGVkIHRvCkV4ZWNMb2NrUmVsc0luZm8gd2hpY2ggYWxzbyBzdG9y ZXMgdGhlIGJpdG1hcHNldCBvZiBSVCBpbmRleGVzIG9mCnJlbGF0aW9ucyB0aGF0IGFyZSBhY3R1 YWxseSBsb2NrZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KRXhlY0xvY2tSZWxzSW5mb3Mg YXJlIHBhc3NlZCBkb3duIHRoZSBleGVjdXRvciBhbG9uZ3NpZGUgdGhlClBsYW5uZWRTdG10cy4g IFRoaXMgYXJyYW5nZW1lbnQgZW5zdXJlcyB0aGF0IHRoZSBleGVjdXRvciBkb2Vzbid0CmFjY2lk ZW50YWxseSB0cnkgdG8gcHJvY2VzcyBhIHBsYW4gdHJlZSBzdWJub2RlcyB0aGF0IGhhcyBiZWVu CmRlZW1lZCBwcnVuZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKS4KLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5dG8uYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYyAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyAg ICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYyAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9SRUFETUUgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMgICAgICAgIHwgMjAyICsrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyAgICB8ICAyNiArKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMjI0ICsrKysrKysrKysrKysrKysrKy0tLS0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2Z1bmN0aW9ucy5jICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQXBwZW5kLmMgICAgICB8ICA1MiArKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmMgfCAgNTIgKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIHwgIDI1ICsrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivc3BpLmMgICAgICAgICAg ICAgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgIHwgIDQ5 ICsrKystCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICB8ICAzOSArKysr CiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgICB8ICAzNyArKysrCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICB8ICAgMiArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICB8ICAgNiArCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMgICB8ICAzNyArKystCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMg ICAgICAgICAgICB8ICAxNSArLQogc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYyAgICAgICAgICAg ICAgfCAgMjEgKystCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICB8IDI1 MiArKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRh bG1lbS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5oICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9k ZU1lcmdlQXBwZW5kLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmggfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgfCAg OTYgKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgICAgfCAg IDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgfCAgMTUgKysKIHNyYy9pbmNsdWRl L3Rjb3AvdGNvcHByb3QuaCAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9w bGFuY2FjaGUuaCAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCAg ICAgICAgICAgICB8ICAgNSArCiA0MSBmaWxlcyBjaGFuZ2VkLCAxMTc0IGluc2VydGlvbnMoKyks IDEwNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IDU1YzM4YjA0YzQuLmQ0 MDNlYjIzMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC01NDIsNyArNTQyLDcgQEAgQmVnaW5D b3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNzdGF0ZSA9 IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBvdXRwdXQg Ki8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgcHN0YXRlLT5w X3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4s IE5VTEwsIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEws IE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggOWFiYmI2YjU1NS4uZjY2MDdm MjQ1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC0zMjUsNyArMzI1LDcgQEAgRXhlY0Ny ZWF0ZVRhYmxlQXMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCwK IAkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKIAogCQkvKiBDcmVhdGUgYSBRdWVy eURlc2MsIHJlZGlyZWN0aW5nIG91dHB1dCB0byBvdXIgdHVwbGUgcmVjZWl2ZXIgKi8KLQkJcXVl cnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAorCQlx dWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcHN0YXRlLT5wX3NvdXJjZXRl eHQsCiAJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hvdCgpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJ CQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmlu ZGV4IGNiMTMyMjdkYjEuLmU1ZGZmMmJjMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTQw Nyw3ICs0MDcsNyBAQCBFeHBsYWluT25lUXVlcnkoUXVlcnkgKnF1ZXJ5LCBpbnQgY3Vyc29yT3B0 aW9ucywKIAkJfQogCiAJCS8qIHJ1biBpdCAoaWYgbmVlZGVkKSBhbmQgcHJvZHVjZSBvdXRwdXQg Ki8KLQkJRXhwbGFpbk9uZVBsYW4ocGxhbiwgaW50bywgZXMsIHF1ZXJ5U3RyaW5nLCBwYXJhbXMs IHF1ZXJ5RW52LAorCQlFeHBsYWluT25lUGxhbihwbGFuLCBOVUxMLCBpbnRvLCBlcywgcXVlcnlT dHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJCSAgICZwbGFuZHVyYXRpb24sIChlcy0+YnVm ZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKIAl9CiB9CkBAIC01MTUsNyArNTE1LDggQEAgRXhw bGFpbk9uZVV0aWxpdHkoTm9kZSAqdXRpbGl0eVN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxh aW5TdGF0ZSAqZXMsCiAgKiB0byBjYWxsIGl0LgogICovCiB2b2lkCi1FeHBsYWluT25lUGxhbihQ bGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCitFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2NrUmVs c0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCisJCQkgICBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWlu U3RhdGUgKmVzLAogCQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8g cGFyYW1zLAogCQkJICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3Rp bWUgKnBsYW5kdXJhdGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSkKQEAg LTU2Myw3ICs1NjQsNyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQs IEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJCWRlc3QgPSBOb25lX1JlY2Vp dmVyOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnkgKi8KLQlxdWVyeURl c2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbm5lZHN0bXQsIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVz YyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFubmVkc3RtdCwgZXhlY2xvY2tyZWxzaW5mbywgcXVlcnlT dHJpbmcsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgaW5zdHJ1bWVudF9vcHRpb24pOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDEwMTM3OTBkYmIuLjAwOGI4Y2UwZTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCkBAIC03NDEsOCArNzQxLDEwIEBAIGV4ZWN1dGVfc3FsX3N0cmlu Zyhjb25zdCBjaGFyICpzcWwpCiAJCVJhd1N0bXQgICAgKnBhcnNldHJlZSA9IGxmaXJzdF9ub2Rl KFJhd1N0bXQsIGxjMSk7CiAJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0LAog CQkJCQlvbGRjb250ZXh0OwotCQlMaXN0CSAgICpzdG10X2xpc3Q7Ci0JCUxpc3RDZWxsICAgKmxj MjsKKwkJTGlzdAkgICAqc3RtdF9saXN0LAorCQkJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7 CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJCS8qCiAJCSAqIFdlIGRvIHRo ZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCkBA IC03NjIsMTEgKzc2NCwxMyBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAqc3FsKQog CQkJCQkJCQkJCSAgIE5VTEwsCiAJCQkJCQkJCQkJICAgMCwKIAkJCQkJCQkJCQkgICBOVUxMKTsK LQkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRfbGlzdCwgc3FsLCBDVVJTT1JfT1BU X1BBUkFMTEVMX09LLCBOVUxMKTsKKwkJc3RtdF9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHN0bXRf bGlzdCwgc3FsLCBDVVJTT1JfT1BUX1BBUkFMTEVMX09LLCBOVUxMLAorCQkJCQkJCQkJJmV4ZWNs b2NrcmVsc2luZm9fbGlzdCk7CiAKLQkJZm9yZWFjaChsYzIsIHN0bXRfbGlzdCkKKwkJZm9yYm90 aChsYzIsIHN0bXRfbGlzdCwgbGMzLCBleGVjbG9ja3JlbHNpbmZvX2xpc3QpCiAJCXsKIAkJCVBs YW5uZWRTdG10ICpzdG10ID0gbGZpcnN0X25vZGUoUGxhbm5lZFN0bXQsIGxjMik7CisJCQlFeGVj TG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvID0gbGZpcnN0X25vZGUoRXhlY0xvY2tSZWxz SW5mbywgbGMzKTsKIAogCQkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIApAQCAtNzc3LDYg Kzc4MSw3IEBAIGV4ZWN1dGVfc3FsX3N0cmluZyhjb25zdCBjaGFyICpzcWwpCiAJCQkJUXVlcnlE ZXNjICAqcWRlc2M7CiAKIAkJCQlxZGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhzdG10LAorCQkJCQkJ CQkJCWV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkJCQkJc3FsLAogCQkJCQkJCQkJCUdldEFjdGl2 ZVNuYXBzaG90KCksIE5VTEwsCiAJCQkJCQkJCQkJZGVzdCwgTlVMTCwgTlVMTCwgMCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMKaW5kZXggMDVlN2I2MDA1OS4uNGVmNDRhYWYyMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L21hdHZpZXcuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChE ZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENv bW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQg dG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW4sIHF1ZXJ5U3RyaW5nLAorCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBOVUxM LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBz aG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBOVUxMLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFs Y21kcy5jCmluZGV4IDk5MDJjNWM1NjYuLjg1ZTczZGRkZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3BvcnRhbGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0 YWxjbWRzLmMKQEAgLTEwNyw2ICsxMDcsNyBAQCBQZXJmb3JtQ3Vyc29yT3BlbihQYXJzZVN0YXRl ICpwc3RhdGUsIERlY2xhcmVDdXJzb3JTdG10ICpjc3RtdCwgUGFyYW1MaXN0SW5mbyBwYQogCQkJ CQkgIHF1ZXJ5U3RyaW5nLAogCQkJCQkgIENNRFRBR19TRUxFQ1QsCS8qIGN1cnNvcidzIHF1ZXJ5 IGlzIGFsd2F5cyBhIFNFTEVDVCAqLwogCQkJCQkgIGxpc3RfbWFrZTEocGxhbiksCisJCQkJCSAg bGlzdF9tYWtlMShOVUxMKSwJLyogbm8gRXhlY0xvY2tSZWxzSW5mbyB0byBwYXNzICovCiAJCQkJ CSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwppbmRleCA4MDcz ODU0N2VkLi5iYmJmOGJiY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVw YXJlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJlcGFyZS5jCkBAIC0xNTUsNiArMTU1 LDcgQEAgRXhlY3V0ZVF1ZXJ5KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlQcmVwYXJlZFN0YXRlbWVu dCAqZW50cnk7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqcGxhbl9saXN0OworCUxp c3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCVBhcmFtTGlzdEluZm8gcGFyYW1M SSA9IE5VTEw7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBOVUxMOwogCVBvcnRhbAkJcG9ydGFsOwpA QCAtMTk1LDYgKzE5Niw3IEBAIEV4ZWN1dGVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsCiAJLyog UmVwbGFuIGlmIG5lZWRlZCwgYW5kIGluY3JlbWVudCBwbGFuIHJlZmNvdW50IGZvciBwb3J0YWwg Ki8KIAljcGxhbiA9IEdldENhY2hlZFBsYW4oZW50cnktPnBsYW5zb3VyY2UsIHBhcmFtTEksIE5V TEwsIE5VTEwpOwogCXBsYW5fbGlzdCA9IGNwbGFuLT5zdG10X2xpc3Q7CisJcGxhbl9leGVjbG9j a3JlbHNpbmZvX2xpc3QgPSBjcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0OwogCiAJLyoKIAkg KiBETyBOT1QgYWRkIGFueSBsb2dpYyB0aGF0IGNvdWxkIHBvc3NpYmx5IHRocm93IGFuIGVycm9y IGJldHdlZW4KQEAgLTIwNCw3ICsyMDYsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkgIE5VTEwsCiAJCQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkgIGVudHJ5LT5w bGFuc291cmNlLT5jb21tYW5kVGFnLAotCQkJCQkgIHBsYW5fbGlzdCwKKwkJCQkJICBwbGFuX2xp c3QsIHBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0LAogCQkJCQkgIGNwbGFuKTsKIAogCS8qCkBA IC01NzYsNyArNTc4LDkgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShFeGVjdXRlU3RtdCAqZXhlY3N0 bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMsCiAJY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nOwogCUNhY2hlZFBsYW4gKmNwbGFuOwogCUxpc3QJICAgKnBsYW5fbGlzdDsKLQlM aXN0Q2VsbCAgICpwOworCUxpc3QJICAgKnBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0OworCUxp c3RDZWxsICAgKnAsCisJCQkgICAqcGU7CiAJUGFyYW1MaXN0SW5mbyBwYXJhbUxJID0gTlVMTDsK IAlFU3RhdGUJICAgKmVzdGF0ZSA9IE5VTEw7CiAJaW5zdHJfdGltZQlwbGFuc3RhcnQ7CkBAIC02 MzIsMTUgKzYzNiwxOCBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3Rt dCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAl9CiAKIAlwbGFuX2xpc3Qg PSBjcGxhbi0+c3RtdF9saXN0OworCXBsYW5fZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4t PmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAogCS8qIEV4cGxhaW4gZWFjaCBxdWVyeSAqLwotCWZv cmVhY2gocCwgcGxhbl9saXN0KQorCWZvcmJvdGgocCwgcGxhbl9saXN0LCBwZSwgcGxhbl9leGVj bG9ja3JlbHNpbmZvX2xpc3QpCiAJewogCQlQbGFubmVkU3RtdCAqcHN0bXQgPSBsZmlyc3Rfbm9k ZShQbGFubmVkU3RtdCwgcCk7CisJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8g PSBsZmlyc3Rfbm9kZShFeGVjTG9ja1JlbHNJbmZvLCBwZSk7CiAKIAkJaWYgKHBzdG10LT5jb21t YW5kVHlwZSAhPSBDTURfVVRJTElUWSkKLQkJCUV4cGxhaW5PbmVQbGFuKHBzdG10LCBpbnRvLCBl cywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBxdWVyeUVudiwKLQkJCQkJCSAgICZwbGFuZHVyYXRp b24sIChlcy0+YnVmZmVycyA/ICZidWZ1c2FnZSA6IE5VTEwpKTsKKwkJCUV4cGxhaW5PbmVQbGFu KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLCBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLAorCQkJCQkJ ICAgcGFyYW1MSSwgcXVlcnlFbnYsICZwbGFuZHVyYXRpb24sCisJCQkJCQkgICAoZXMtPmJ1ZmZl cnMgPyAmYnVmdXNhZ2UgOiBOVUxMKSk7CiAJCWVsc2UKIAkJCUV4cGxhaW5PbmVVdGlsaXR5KHBz dG10LT51dGlsaXR5U3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywKIAkJCQkJCQkgIHBhcmFt TEksIHF1ZXJ5RW52KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQppbmRleCAwYjUxODNmYzRhLi5iNDVjYTUwOGE4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3IvUkVBRE1FCkBAIC02NSw2ICs2NSwyNyBAQCBmb3VuZCB0aGVyZS4gIFRoaXMg Y3VycmVudGx5IG9ubHkgb2NjdXJzIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzLiAg SW4KIHRoaXMgY2FzZSB0aGUgbm9uLXJlcXVpcmVkIHN1YnBsYW5zIGFyZSBpZ25vcmVkIGFuZCB0 aGUgZXhlY3V0b3Igc3RhdGUncwogc3Vibm9kZSBhcnJheSB3aWxsIGJlY29tZSBvdXQgb2Ygc2Vx dWVuY2UgdG8gdGhlIHBsYW4ncyBzdWJwbGFuIGxpc3QuCiAKK0FjdHVhbGx5LCB0aGUgc28tY2Fs bGVkIGV4ZWN1dGlvbiB0aW1lIHBydW5pbmcgbWF5IGFsc28gb2NjdXIgZXZlbiBiZWZvcmUgdGhl CitleGVjdXRpb24gaGFzIHN0YXJ0ZWQuICBPbmUgY2FzZSB3aGVyZSB0aGF0IG9jY3VycyBpcyB3 aGVuIGEgY2FjaGVkIGdlbmVyaWMKK3BsYW4gaXMgYmVpbmcgdmFsaWRhdGVkIGZvciBleGVjdXRp b24gYnkgcGxhbmNhY2hlLmM6IEdldENhY2hlZFBsYW4oKSwgd2hpY2gKK3Byb2NlZWRzIGJ5IGxv Y2tpbmcgYWxsIHRoZSByZWxhdGlvbnMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgYnkgdGhhdCBwbGFu LiAgSWYKK3RoZSBnZW5lcmljIHBsYW4gaGFzIG5vZGVzIHRoYXQgY29udGFpbiBzby1jYWxsZWQg aW5pdGlhbCBwcnVuaW5nIHN0ZXBzIChhCitzdWJzZXQgb2YgZXhlY3V0aW9uIHBydW5pbmcgc3Rl cHMgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGZ1bGwtZmxlZGdlZCBleGVjdXRpb24KK2hhdmluZyBz dGFydGVkKSwgdGhleSBhcmUgcGVyZm9ybWVkIGF0IHRoaXMgcG9pbnQgdG8gZmlndXJlIG91dCB0 aGUgbWluaW1hbAorc2V0IG9mIGNoaWxkIHN1YnBsYW5zIHRoYXQgc2F0aXNmeSB0aG9zZSBwcnVu aW5nIGluc3RydWN0aW9ucyBhbmQgdGhlIHJlc3VsdAorb2YgcGVyZm9ybWluZyB0aGF0IHBydW5p bmcgaXMgc2F2ZWQgaW4gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGdldHMgcGFzc2VkIHRvCit0aGUg ZXhlY3V0b3IgYWxvbmdzaWRlIHRoZSBwbGFuIHRyZWUuICBSZWxhdGlvbnMgc2Nhbm5lZCBieSBv bmx5IHRob3NlCitzdXJ2aXZpbmcgc3VicGxhbnMgYXJlIHRoZW4gbG9ja2VkIHdoaWxlIHRob3Nl IHNjYW5uZWQgYnkgdGhlIHBydW5lZCBzdWJwbGFucworYXJlIG5vdCwgZXZlbiB0aG91Z2ggdGhl IHBydW5lZCBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZQorcGxh biB0cmVlLiBTbywgaXQgaXMgaW1wZXJhdGl2ZSB0aGF0IHRoZSBleGVjdXRvciBhbmQgYW55IHRo aXJkIHBhcnR5IGNvZGUKK2ludm9rZWQgYnkgaXQgdGhhdCBnZXRzIHBhc3NlZCB0aGUgcGxhbiB0 cmVlIGxvb2sgYXQgdGhlIGluaXRpYWwgcHJ1bmluZyByZXN1bHQKK21hZGUgYXZhaWxhYmxlIHZp YSB0aGUgYWZvcmVtZW50aW9uZWQgZGF0YSBzdHJ1Y3R1cmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg b3IKK25vdCBhIHBhcnRpY3VsYXIgc3VicGxhbiBpcyB2YWxpZC4gIChUaGUgZGF0YSBzdHJ1Y3R1 cmUgYmFzaWNhbGx5IGNvbnNpc3RzIG9mCithbiBhcnJheSBvZiBQbGFuSW5pdFBydW5pbmdPdXRw dXQgbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBmb3IgZWFjaCBub2RlCitvZiB0aGUgcGxh biB0cmVlIGluZGV4YWJsZSB1c2luZyBwbGFuX25vZGVfaWQgb2YgdGhlIGluZGl2aWR1YWwgcGxh biBub2RlcywKK3doZXJlIGVhY2ggbm9kZSBjb250YWlucyBhIGJpdG1hcHNldCBvZiBpbmRleGVz IG9mIHVucHJ1bmVkIGNoaWxkIHN1YnBsYW5zIG9mCithIGdpdmVuIG5vZGUuKQorCiBFYWNoIFBs YW4gbm9kZSBtYXkgaGF2ZSBleHByZXNzaW9uIHRyZWVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgdG8g cmVwcmVzZW50CiBpdHMgdGFyZ2V0IGxpc3QsIHF1YWxpZmljYXRpb24gY29uZGl0aW9ucywgZXRj LiAgVGhlc2UgdHJlZXMgYXJlIGFsc28KIHJlYWQtb25seSB0byB0aGUgZXhlY3V0b3IsIGJ1dCB0 aGUgZXhlY3V0b3Igc3RhdGUgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbgpAQCAtMjg2LDYgKzMw Nyw5IEBAIFF1ZXJ5IFByb2Nlc3NpbmcgQ29udHJvbCBGbG93CiAKIFRoaXMgaXMgYSBza2V0Y2gg b2YgY29udHJvbCBmbG93IGZvciBmdWxsIHF1ZXJ5IHByb2Nlc3Npbmc6CiAKKyAgWyBFeGVjdXRv ckdldExvY2tSZWxzIF0gLS0tIGFuIG9wdGlvbmFsIHN0ZXAgdG8gd2FsayBvdmVyIHRoZSBwbGFu IHRyZWUKKwkJdG8gcHJvZHVjZSBhbiBFeGVjTG9ja1JlbHNJbmZvIHRvIGJlIHBhc3NlZCB0byBD cmVhdGVRdWVyeURlc2MKKwogCUNyZWF0ZVF1ZXJ5RGVzYwogCiAJRXhlY3V0b3JTdGFydApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNNYWluLmMKaW5kZXggZWYyZmQ0NjA5Mi4uNTY5NDZjMTJkZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjTWFpbi5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNkZWJ1Zy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKKyNpbmNs dWRlICJleGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxhbi5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC0xMDEsOSArMTA1LDIw NSBAQCBzdGF0aWMgY2hhciAqRXhlY0J1aWxkU2xvdFZhbHVlRGVzY3JpcHRpb24oT2lkIHJlbG9p ZCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKm1vZGlmaWVkQ29scywKIAkJCQkJCQkJCQkgICBp bnQgbWF4ZmllbGRsZW4pOwogc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3RhcnQoRVBRU3RhdGUg KmVwcXN0YXRlLCBQbGFuICpwbGFuVHJlZSk7CitzdGF0aWMgYm9vbCBFeGVjR2V0U2NhbkxvY2tS ZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogCiAvKiBl bmQgb2YgbG9jYWwgZGVjbHMgKi8KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWN1dG9yR2V0TG9ja1Jl bHMKKyAqCisgKgkJRmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgcmVsYXRpb25zIHRvIGxv Y2sgdG8gYmUgYWJsZSB0byBzYWZlbHkKKyAqCQlleGVjdXRlIGEgZ2l2ZW4gcGxhbgorICoKKyAq IFRoaXMgaWdub3JlcyB0aGUgcmVsYXRpb25zIHNjYW5uZWQgYnkgY2hpbGQgc3VicGxhbnMgdGhh dCBhcmUgcHJ1bmVkIGF3YXkKKyAqIGFmdGVyIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5nIHN0 ZXBzIHByZXNlbnQgaW4gdGhlIHBsYW4gdXNpbmcgdGhlCisgKiBwcm92aWRlZCBzZXQgb2YgRVhU RVJOIHBhcmFtZXRlcnMuCisgKgorICogQWxvbmcgd2l0aCB0aGUgc2V0IG9mIFJUIGluZGV4ZXMg b2YgcmVsYXRpb25zIHRoYXQgbXVzdCBiZSBsb2NrZWQsIHRoZQorICogcmV0dXJuZWQgc3RydWN0 IGFsc28gY29udGFpbnMgYW4gYXJyYXkgb2YgUGxhbkluaXRQcnVuaW5nT3V0cHV0IG5vZGVzIGVh Y2gKKyAqIG9mIHdoaWNoIGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgaW5pdGlhbCBwcnVuaW5nIGZv ciBhIGdpdmVuIHBsYW4gbm9kZSwgd2hpY2gKKyAqIGlzIGJhc2ljYWxseSBhIGJpdG1hcHNldCBv ZiB0aGUgaW5kZXhlcyBvZiBzdXJ2aXZpbmcgY2hpbGQgc3VicGxhbnMuICBFYWNoCisgKiBwbGFu IG5vZGUgaW4gdGhlIHRyZWUgdGhhdCB1bmRlcmdvZXMgcHJ1bmluZyB3aWxsIGhhdmUgYW4gZWxl bWVudCBpbiB0aGUKKyAqIGFycmF5LgorICoKKyAqIE5vdGUgdGhhdCB3aGlsZSByZWxhdGlvbnMg c2Nhbm5lZCBieSB0aGUgc3VicGxhbnMgdGhhdCBhcmUgcHJ1bmVkIHdpbGwgbm90CisgKiBiZSBs b2NrZWQsIHRoZSBzdWJwbGFucyB0aGVtc2VsdmVzIGFyZSBsZWZ0IGFzLWlzIGluIHRoZSBwbGFu IHRyZWUsIGFzc3VtaW5nCisgKiBhbnl0aGluZyB0aGF0IHJlYWRzIHRoZSBwbGFuIHRyZWUgZHVy aW5nIGV4ZWN1dGlvbiBrbm93cyB0byBpZ25vcmUgdGhlbSBieQorICogbG9va2luZyBhdCB0aGUg UGxhbkluaXRQcnVuaW5nT3V0cHV0J3MgbGlzdCBvZiB2YWxpZCBzdWJwbGFucy4KKyAqCisgKiBQ YXJ0aXRpb25lZCB0YWJsZXMgbWVudGlvbmVkIGluIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5v ZGVzIHRoYXQgZHJpdmUKKyAqIHRoZSBwcnVuaW5nIHdpbGwgYmUgbG9ja2VkIGJlZm9yZSBkb2lu ZyB0aGUgcHJ1bmluZyBhbmQgYWxzbyBhZGRlZCB0byB0aGUKKyAqIHRoZSByZXR1cm5lZCBzZXQu CisgKi8KK0V4ZWNMb2NrUmVsc0luZm8gKgorRXhlY3V0b3JHZXRMb2NrUmVscyhQbGFubmVkU3Rt dCAqcGxhbm5lZHN0bXQsIFBhcmFtTGlzdEluZm8gcGFyYW1zKQoreworCWludAkJbnVtUGxhbk5v ZGVzID0gcGxhbm5lZHN0bXQtPm51bVBsYW5Ob2RlczsKKwlFeGVjR2V0TG9ja1JlbHNDb250ZXh0 IGNvbnRleHQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqcmVzdWx0OworCUxpc3RDZWxsICpsYzsKKwor CS8qIE9ubHkgZ2V0IGhlcmUgaWYgdGhlcmUgaXMgYW55IHBydW5pbmcgdG8gZG8uICovCisJQXNz ZXJ0KHBsYW5uZWRzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nKTsKKworCWNvbnRleHQuc3Rt dCA9IHBsYW5uZWRzdG10OworCWNvbnRleHQucGFyYW1zID0gcGFyYW1zOworCisJLyoKKwkgKiBH byB3YWxrIGFsbCB0aGUgcGxhbiB0cmVlKHMpIHByZXNlbnQgaW4gdGhlIFBsYW5uZWRTdG10LCBm aWxsaW5nCisJICogY29udGV4dC5sb2NrcmVscyB3aXRoIG9ubHkgdGhlIHJlbGF0aW9ucyBmcm9t IHBsYW4gbm9kZXMgdGhhdAorCSAqIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nIGFuZCBhbHNvIHRo ZSB0YWJsZXMgbWVudGlvbmVkIGluCisJICogcGFydGl0aW9uZWRfcmVscyBzZXRzIGZvdW5kIGlu IHRoZSBwbGFuLgorCSAqLworCWNvbnRleHQubG9ja3JlbHMgPSBOVUxMOworCWNvbnRleHQuaW5p dFBydW5pbmdPdXRwdXRzID0gTklMOworCWNvbnRleHQuaXBvSW5kZXhlcyA9IHBhbGxvYzAoc2l6 ZW9mKGludCkgKiBudW1QbGFuTm9kZXMpOworCisJLyogQWxsIHRoZSBzdWJwbGFucy4gKi8KKwlm b3JlYWNoKGxjLCBwbGFubmVkc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuICpzdWJwbGFuID0g bGZpcnN0KGxjKTsKKworCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sICZjb250ZXh0 KTsKKwl9CisKKwkvKiBBbmQgdGhlIG1haW4gdHJlZS4gKi8KKwkodm9pZCkgRXhlY0dldExvY2tS ZWxzKHBsYW5uZWRzdG10LT5wbGFuVHJlZSwgJmNvbnRleHQpOworCisJLyoKKwkgKiBBbHNvIGJl IHN1cmUgdG8gbG9jayBwYXJ0aXRpb25lZCByZWxhdGlvbnMgZnJvbSBhbnkgW01lcmdlXUFwcGVu ZCBub2RlcworCSAqIHRoYXQgd2VyZSBvcmlnaW5hbGx5IHByZXNlbnQgYnV0IHdlcmUgdWx0aW1h dGVseSBsZWZ0IG91dCBmcm9tIHRoZSBwbGFuCisJICogZHVlIHRvIGJlaW5nIGRlZW1lZCBuby1v cCBub2Rlcy4KKwkgKi8KKwljb250ZXh0LmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXJzKGNvbnRl eHQubG9ja3JlbHMsCisJCQkJCQkJCQkgICBwbGFubmVkc3RtdC0+ZWxpZGVkQXBwZW5kUGFydGVk UmVscyk7CisKKwlyZXN1bHQgPSBtYWtlTm9kZShFeGVjTG9ja1JlbHNJbmZvKTsKKwlyZXN1bHQt PmxvY2tyZWxzID0gY29udGV4dC5sb2NrcmVsczsKKwlyZXN1bHQtPm51bVBsYW5Ob2RlcyA9IG51 bVBsYW5Ob2RlczsKKwlyZXN1bHQtPmluaXRQcnVuaW5nT3V0cHV0cyA9IGNvbnRleHQuaW5pdFBy dW5pbmdPdXRwdXRzOworCXJlc3VsdC0+aXBvSW5kZXhlcyA9IGNvbnRleHQuaXBvSW5kZXhlczsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXhlY0dldExv Y2tSZWxzCisgKgkJQWRkcyBhbGwgdGhlIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBi eSAnbm9kZScgYW5kIGl0cyBjaGlsZAorICoJCXBsYW5zIHRvIGNvbnRleHQtPmxvY2tyZWxzIGFm dGVyIHRha2luZyBpbnRvIHRoZSBhY2NvdW50IHRoZSBlZmZlY3QKKyAqCQlvZiBwZXJmb3JtaW5n IGluaXRpYWwgcHJ1bmluZyBpZiBhbnkKKyAqCisgKiBjb250ZXh0LT5zdG10IGdpdmVzIHRoZSBQ bGFubmVkU3RtdCBiZWluZyBpbnNwZWN0ZWQgdG8gYWNjZXNzIHRoZSBwbGFuJ3MKKyAqIHJhbmdl IHRhYmxlIGlmIG5lZWRlZCBhbmQgY29udGV4dC0+cGFyYW1zIHRoZSBzZXQgb2YgRVhURVJOIHBh cmFtZXRlcnMKKyAqIGF2YWlsYWJsZSB0byBldmFsdWF0ZSBwcnVuaW5nIHBhcmFtZXRlcnMuCisg KgorICogSWYgaW5pdGlhbCBwcnVuaW5nIGlzIGRvbmUsIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0 IG5vZGUgY29udGFpbmluZyB0aGUKKyAqIHJlc3VsdCBvZiBwcnVuaW5nIHdpbGwgYmUgc3RvcmVk IGluIGNvbnRleHQtPmluaXRQcnVuaW5nT3V0cHV0cyB0aGF0IHdpbGwKKyAqIGJlIG1hZGUgYXZh aWxhYmxlIHRvIHRoZSBleGVjdXRvciB0byByZXVzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov Citib29sCitFeGVjR2V0TG9ja1JlbHMoUGxhbiAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4 dCAqY29udGV4dCkKK3sKKwkvKiBEbyBub3RoaW5nIHdoZW4gd2UgZ2V0IHRvIHRoZSBlbmQgb2Yg YSBsZWFmIG9uIHRyZWUuICovCisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIHRydWU7CisK KwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggc3RhY2sgYXZhaWxhYmxlLiAqLworCWNoZWNr X3N0YWNrX2RlcHRoKCk7CisKKwlzd2l0Y2ggKG5vZGVUYWcobm9kZSkpCisJeworCQkvKiBDdXJy ZW50bHksIG9ubHkgdGhlc2UgdHdvIG5vZGVzIGhhdmUgcHJ1bmFibGUgY2hpbGQgc3VicGxhbnMu ICovCisJCWNhc2UgVF9BcHBlbmQ6CisJCQlpZiAoRXhlY0dldEFwcGVuZExvY2tSZWxzKChBcHBl bmQgKikgbm9kZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsKKwkJY2Fz ZSBUX01lcmdlQXBwZW5kOgorCQkJaWYgKEV4ZWNHZXRNZXJnZUFwcGVuZExvY2tSZWxzKChNZXJn ZUFwcGVuZCAqKSBub2RlLAorCQkJCQkJCQkJCQkJY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7 CisJCQlicmVhazsKKworCQkvKgorCQkgKiBBbmQgdGhlc2UgbWFuaXB1bGF0ZSByZWxhdGlvbnMg dGhhdCBtdXN0IGJlIGFkZGVkIGNvbnRleHQtPmxvY2tyZWxzLgorCQkgKi8KKwkJY2FzZSBUX1Nl cVNjYW46CisJCWNhc2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfSW5kZXhTY2FuOgorCQljYXNl IFRfSW5kZXhPbmx5U2NhbjoKKwkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKKwkJY2FzZSBUX0Jp dG1hcEhlYXBTY2FuOgorCQljYXNlIFRfVGlkU2NhbjoKKwkJY2FzZSBUX1RpZFJhbmdlU2NhbjoK KwkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQljYXNlIFRf Q3VzdG9tU2NhbjoKKwkJCWlmIChFeGVjR2V0U2NhbkxvY2tSZWxzKChTY2FuICopIG5vZGUsIGNv bnRleHQpKQorCQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9Nb2RpZnlUYWJs ZToKKwkJCWlmIChFeGVjR2V0TW9kaWZ5VGFibGVMb2NrUmVscygoTW9kaWZ5VGFibGUgKikgbm9k ZSwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQkvKiBwbGFuX3RyZWVfd2Fsa2VyKCkg d2lsbCB2aXNpdCB0aGUgc3VicGxhbiAob3V0ZXJOb2RlKSAqLworCQkJYnJlYWs7CisKKwkJZGVm YXVsdDoKKwkJCWJyZWFrOworCX0KKworCS8qIFJlY3Vyc2UgdG8gc3Vibm9kZXMuICovCisJcmV0 dXJuIHBsYW5fdHJlZV93YWxrZXIobm9kZSwgRXhlY0dldExvY2tSZWxzLCAodm9pZCAqKSBjb250 ZXh0KTsKK30KKworLyoKKyAqIEV4ZWNHZXRTY2FuTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dldExv Y2tSZWxzKCkncyB3b3JrIGZvciBhIGxlYWYgU2NhbiBub2RlCisgKi8KK3N0YXRpYyBib29sCitF eGVjR2V0U2NhbkxvY2tSZWxzKFNjYW4gKnNjYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNv bnRleHQpCit7CisJc3dpdGNoIChub2RlVGFnKHNjYW4pKQorCXsKKwkJY2FzZSBUX0ZvcmVpZ25T Y2FuOgorCQkJeworCQkJCUZvcmVpZ25TY2FuICpmc2NhbiA9IChGb3JlaWduU2NhbiAqKSBzY2Fu OworCisJCQkJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRkX21lbWJlcnMoY29udGV4dC0+bG9j a3JlbHMsCisJCQkJCQkJCQkJCQkJZnNjYW4tPmZzX3JlbGlkcyk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQkJeworCQkJCVN1YnF1ZXJ5U2NhbiAqc3NjYW4g PSAoU3VicXVlcnlTY2FuICopIHNjYW47CisKKwkJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKChQ bGFuICopIHNzY2FuLT5zdWJwbGFuLCBjb250ZXh0KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNh c2UgVF9DdXN0b21TY2FuOgorCQkJeworCQkJCUN1c3RvbVNjYW4gKmNzY2FuID0gKEN1c3RvbVNj YW4gKikgc2NhbjsKKwkJCQlMaXN0Q2VsbCAqbGM7CisKKwkJCQljb250ZXh0LT5sb2NrcmVscyA9 IGJtc19hZGRfbWVtYmVycyhjb250ZXh0LT5sb2NrcmVscywKKwkJCQkJCQkJCQkJCQljc2Nhbi0+ Y3VzdG9tX3JlbGlkcyk7CisJCQkJZm9yZWFjaChsYywgY3NjYW4tPmN1c3RvbV9wbGFucykKKwkJ CQl7CisJCQkJCSh2b2lkKSBFeGVjR2V0TG9ja1JlbHMoKFBsYW4gKikgbGZpcnN0KGxjKSwgY29u dGV4dCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbnRleHQt PmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXIoY29udGV4dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJ CSAgIHNjYW4tPnNjYW5yZWxpZCk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30K IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICoJCUV4ZWN1dG9yU3RhcnQKQEAgLTgwNiw2ICsxMDA2LDcgQEAgSW5p dFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiB7CiAJQ21kVHlwZQkJb3Bl cmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10 ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKKwlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3Jl bHNpbmZvID0gcXVlcnlEZXNjLT5leGVjbG9ja3JlbHNpbmZvOwogCVBsYW4JICAgKnBsYW4gPSBw bGFubmVkc3RtdC0+cGxhblRyZWU7CiAJTGlzdAkgICAqcmFuZ2VUYWJsZSA9IHBsYW5uZWRzdG10 LT5ydGFibGU7CiAJRVN0YXRlCSAgICplc3RhdGUgPSBxdWVyeURlc2MtPmVzdGF0ZTsKQEAgLTgy NSw2ICsxMDI2LDcgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiAJRXhlY0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSk7CiAKIAllc3RhdGUtPmVz X3BsYW5uZWRzdG10ID0gcGxhbm5lZHN0bXQ7CisJZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZv ID0gZXhlY2xvY2tyZWxzaW5mbzsKIAogCS8qCiAJICogTmV4dCwgYnVpbGQgdGhlIEV4ZWNSb3dN YXJrIGFycmF5IGZyb20gdGhlIFBsYW5Sb3dNYXJrKHMpLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJhbGxlbC5jCmluZGV4IDlhMGQ1ZDU5ZWYuLmZiNmRiZDI5OGEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIFBBUkFMTEVM X0tFWV9RVUVSWV9URVhUCQlVSU5UNjRDT05TVCgweEUwMDAwMDAwMDAwMDAwMDgpCiAjZGVmaW5l IFBBUkFMTEVMX0tFWV9KSVRfSU5TVFJVTUVOVEFUSU9OIFVJTlQ2NENPTlNUKDB4RTAwMDAwMDAw MDAwMDAwOSkKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRQkJCVVJTlQ2NENPTlNUKDB4 RTAwMDAwMDAwMDAwMDAwQSkKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX0VYRUNMT0NLUkVMU0lORk8J VUlOVDY0Q09OU1QoMHhFMDAwMDAwMDAwMDAwMDBCKQogCiAjZGVmaW5lIFBBUkFMTEVMX1RVUExF X1FVRVVFX1NJWkUJCTY1NTM2CiAKQEAgLTE4Miw2ICsxODMsNyBAQCBFeGVjU2VyaWFsaXplUGxh bihQbGFuICpwbGFuLCBFU3RhdGUgKmVzdGF0ZSkKIAlwc3RtdC0+dHJhbnNpZW50UGxhbiA9IGZh bHNlOwogCXBzdG10LT5kZXBlbmRzT25Sb2xlID0gZmFsc2U7CiAJcHN0bXQtPnBhcmFsbGVsTW9k ZU5lZWRlZCA9IGZhbHNlOworCXBzdG10LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZmFsc2U7 CiAJcHN0bXQtPnBsYW5UcmVlID0gcGxhbjsKIAlwc3RtdC0+cnRhYmxlID0gZXN0YXRlLT5lc19y YW5nZV90YWJsZTsKIAlwc3RtdC0+cmVzdWx0UmVsYXRpb25zID0gTklMOwpAQCAtNTk2LDEyICs1 OTgsMTUgQEAgRXhlY0luaXRQYXJhbGxlbFBsYW4oUGxhblN0YXRlICpwbGFuc3RhdGUsIEVTdGF0 ZSAqZXN0YXRlLAogCUZpeGVkUGFyYWxsZWxFeGVjdXRvclN0YXRlICpmcGVzOwogCWNoYXIJICAg KnBzdG10X2RhdGE7CiAJY2hhcgkgICAqcHN0bXRfc3BhY2U7CisJY2hhcgkgICAqZXhlY2xvY2ty ZWxzaW5mb19kYXRhOworCWNoYXIJICAgKmV4ZWNsb2NrcmVsc2luZm9fc3BhY2U7CiAJY2hhcgkg ICAqcGFyYW1saXN0aW5mb19zcGFjZTsKIAlCdWZmZXJVc2FnZSAqYnVmdXNhZ2Vfc3BhY2U7CiAJ V2FsVXNhZ2UgICAqd2FsdXNhZ2Vfc3BhY2U7CiAJU2hhcmVkRXhlY3V0b3JJbnN0cnVtZW50YXRp b24gKmluc3RydW1lbnRhdGlvbiA9IE5VTEw7CiAJU2hhcmVkSml0SW5zdHJ1bWVudGF0aW9uICpq aXRfaW5zdHJ1bWVudGF0aW9uID0gTlVMTDsKIAlpbnQJCQlwc3RtdF9sZW47CisJaW50CQkJZXhl Y2xvY2tyZWxzaW5mb19sZW47CiAJaW50CQkJcGFyYW1saXN0aW5mb19sZW47CiAJaW50CQkJaW5z dHJ1bWVudGF0aW9uX2xlbiA9IDA7CiAJaW50CQkJaml0X2luc3RydW1lbnRhdGlvbl9sZW4gPSAw OwpAQCAtNjMwLDYgKzYzNSw3IEBAIEV4ZWNJbml0UGFyYWxsZWxQbGFuKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAogCS8qIEZpeCB1cCBhbmQgc2VyaWFsaXplIHBsYW4g dG8gYmUgc2VudCB0byB3b3JrZXJzLiAqLwogCXBzdG10X2RhdGEgPSBFeGVjU2VyaWFsaXplUGxh bihwbGFuc3RhdGUtPnBsYW4sIGVzdGF0ZSk7CisJZXhlY2xvY2tyZWxzaW5mb19kYXRhID0gbm9k ZVRvU3RyaW5nKGVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbyk7CiAKIAkvKiBDcmVhdGUgYSBw YXJhbGxlbCBjb250ZXh0LiAqLwogCXBjeHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3Rn cmVzIiwgIlBhcmFsbGVsUXVlcnlNYWluIiwgbndvcmtlcnMpOwpAQCAtNjU2LDYgKzY2MiwxMSBA QCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3Rh dGUsCiAJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBwc3RtdF9sZW4p OwogCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKIAorCS8qIEVz dGltYXRlIHNwYWNlIGZvciBzZXJpYWxpemVkIEV4ZWNMb2NrUmVsc0luZm8uICovCisJZXhlY2xv Y2tyZWxzaW5mb19sZW4gPSBzdHJsZW4oZXhlY2xvY2tyZWxzaW5mb19kYXRhKSArIDE7CisJc2ht X3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBleGVjbG9ja3JlbHNpbmZvX2xl bik7CisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOworCiAJLyog RXN0aW1hdGUgc3BhY2UgZm9yIHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxp c3RpbmZvX2xlbiA9IEVzdGltYXRlUGFyYW1MaXN0U3BhY2UoZXN0YXRlLT5lc19wYXJhbV9saXN0 X2luZm8pOwogCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcGFyYW1s aXN0aW5mb19sZW4pOwpAQCAtNzUwLDYgKzc2MSwxMiBAQCBFeGVjSW5pdFBhcmFsbGVsUGxhbihQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJbWVtY3B5KHBzdG10X3NwYWNl LCBwc3RtdF9kYXRhLCBwc3RtdF9sZW4pOwogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFS QUxMRUxfS0VZX1BMQU5ORURTVE1ULCBwc3RtdF9zcGFjZSk7CiAKKwkvKiBTdG9yZSBzZXJpYWxp emVkIEV4ZWNMb2NrUmVsc0luZm8gKi8KKwlleGVjbG9ja3JlbHNpbmZvX3NwYWNlID0gc2htX3Rv Y19hbGxvY2F0ZShwY3h0LT50b2MsIGV4ZWNsb2NrcmVsc2luZm9fbGVuKTsKKwltZW1jcHkoZXhl Y2xvY2tyZWxzaW5mb19zcGFjZSwgZXhlY2xvY2tyZWxzaW5mb19kYXRhLCBleGVjbG9ja3JlbHNp bmZvX2xlbik7CisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfRVhFQ0xP Q0tSRUxTSU5GTywKKwkJCQkgICBleGVjbG9ja3JlbHNpbmZvX3NwYWNlKTsKKwogCS8qIFN0b3Jl IHNlcmlhbGl6ZWQgUGFyYW1MaXN0SW5mby4gKi8KIAlwYXJhbWxpc3RpbmZvX3NwYWNlID0gc2ht X3RvY19hbGxvY2F0ZShwY3h0LT50b2MsIHBhcmFtbGlzdGluZm9fbGVuKTsKIAlzaG1fdG9jX2lu c2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9QQVJBTUxJU1RJTkZPLCBwYXJhbWxpc3RpbmZv X3NwYWNlKTsKQEAgLTEyMzEsOCArMTI0OCwxMCBAQCBFeGVjUGFyYWxsZWxHZXRRdWVyeURlc2Mo c2htX3RvYyAqdG9jLCBEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyLAogCQkJCQkJIGludCBpbnN0cnVt ZW50X29wdGlvbnMpCiB7CiAJY2hhcgkgICAqcHN0bXRzcGFjZTsKKwljaGFyCSAgICpleGVjbG9j a3JlbHNpbmZvc3BhY2U7CiAJY2hhcgkgICAqcGFyYW1zcGFjZTsKIAlQbGFubmVkU3RtdCAqcHN0 bXQ7CisJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2tyZWxzaW5mbzsKIAlQYXJhbUxpc3RJbmZv IHBhcmFtTEk7CiAJY2hhcgkgICAqcXVlcnlTdHJpbmc7CiAKQEAgLTEyNDMsMTIgKzEyNjIsMTcg QEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2VpdmVyICpy ZWNlaXZlciwKIAlwc3RtdHNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlf UExBTk5FRFNUTVQsIGZhbHNlKTsKIAlwc3RtdCA9IChQbGFubmVkU3RtdCAqKSBzdHJpbmdUb05v ZGUocHN0bXRzcGFjZSk7CiAKKwkvKiBSZWNvbnN0cnVjdCBsZWFkZXItc3VwcGxpZWQgRXhlY0xv Y2tSZWxzSW5mby4gKi8KKwlleGVjbG9ja3JlbHNpbmZvc3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0 b2MsIFBBUkFMTEVMX0tFWV9FWEVDTE9DS1JFTFNJTkZPLAorCQkJCQkJCQkJCSAgZmFsc2UpOwor CWV4ZWNsb2NrcmVsc2luZm8gPSAoRXhlY0xvY2tSZWxzSW5mbyAqKSBzdHJpbmdUb05vZGUoZXhl Y2xvY2tyZWxzaW5mb3NwYWNlKTsKKwogCS8qIFJlY29uc3RydWN0IFBhcmFtTGlzdEluZm8uICov CiAJcGFyYW1zcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1BBUkFNTElT VElORk8sIGZhbHNlKTsKIAlwYXJhbUxJID0gUmVzdG9yZVBhcmFtTGlzdCgmcGFyYW1zcGFjZSk7 CiAKIAkvKiBDcmVhdGUgYSBRdWVyeURlc2MgZm9yIHRoZSBxdWVyeS4gKi8KLQlyZXR1cm4gQ3Jl YXRlUXVlcnlEZXNjKHBzdG10LAorCXJldHVybiBDcmVhdGVRdWVyeURlc2MocHN0bXQsIGV4ZWNs b2NrcmVsc2luZm8sCiAJCQkJCQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNu YXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBO VUxMLCBpbnN0cnVtZW50X29wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5j CmluZGV4IDg0YjRlNGIzZDYuLmU3OWFkYTE2ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5k cy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaCIKQEAgLTE4NSw4ICsxODYsMTMgQEAgc3RhdGljIGNoYXIgKkV4 ZWNCdWlsZFNsb3RQYXJ0aXRpb25LZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiBzdGF0aWMg TGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBSZXN1bHRSZWxJbmZv ICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0aW9uX2NvbG5vc191 c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsKIHN0YXRpYyBQYXJ0aXRp b25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBs YW5zdGF0ZSwKLQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0aW9ucHJ1bmVpbmZv KTsKLXN0YXRpYyBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSk7CisJCQkJCQkJICBQYXJ0aXRpb25QcnVuZUlu Zm8gKnBhcnRpdGlvbnBydW5laW5mbywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJfaW5pdGlhbF9z dGVwcywKKwkJCQkJCQkgIGJvb2wgY29uc2lkZXJfZXhlY19zdGVwcywKKwkJCQkJCQkgIExpc3Qg KnJ0YWJsZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LAorCQkJCQkJCSAgUGFydGl0aW9uRGlyZWN0 b3J5IHBhcnRkaXIpOworc3RhdGljIEJpdG1hcHNldCAqRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdT dWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAorCQkJCQkJCQlQYXJ0aXRp b25QcnVuZUluZm8gKnBydW5laW5mbyk7CiBzdGF0aWMgdm9pZCBFeGVjSW5pdFBydW5pbmdDb250 ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJICAgTGlzdCAqcHJ1 bmluZ19zdGVwcywKIAkJCQkJCQkJICAgUGFydGl0aW9uRGVzYyBwYXJ0ZGVzYywKQEAgLTE1ODgs OCArMTU5NCw5IEBAIGFkanVzdF9wYXJ0aXRpb25fY29sbm9zX3VzaW5nX21hcChMaXN0ICpjb2xu b3MsIEF0dHJNYXAgKmF0dHJNYXApCiAgKiBjb25zaWRlcmVkIHRvIGJlIGEgc3RhYmxlIGV4cHJl c3Npb24sIGl0IGNhbiBjaGFuZ2UgdmFsdWUgZnJvbSBvbmUgcGxhbgogICogbm9kZSBzY2FuIHRv IHRoZSBuZXh0IGR1cmluZyBxdWVyeSBleGVjdXRpb24uICBTdGFibGUgY29tcGFyaXNvbgogICog ZXhwcmVzc2lvbnMgdGhhdCBkb24ndCBpbnZvbHZlIHN1Y2ggUGFyYW1zIGFsbG93IHBhcnRpdGlv biBwcnVuaW5nIHRvIGJlCi0gKiBkb25lIG9uY2UgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAuICBF eHByZXNzaW9ucyB0aGF0IGRvIGludm9sdmUgc3VjaCBQYXJhbXMKLSAqIHJlcXVpcmUgdXMgdG8g cHJ1bmUgc2VwYXJhdGVseSBmb3IgZWFjaCBzY2FuIG9mIHRoZSBwYXJlbnQgcGxhbiBub2RlLgor ICogZG9uZSBvbmNlIGR1cmluZyBleGVjdXRvciBzdGFydHVwIG9yIGV2ZW4gYmVmb3JlIGR1cmlu ZyBFeGVjdXRvckdldExvY2tSZWxzKCkuCisgKiBFeHByZXNzaW9ucyB0aGF0IGRvIGludm9sdmUg c3VjaCBQYXJhbXMgcmVxdWlyZSB1cyB0byBwcnVuZSBzZXBhcmF0ZWx5IGZvcgorICogZWFjaCBz Y2FuIG9mIHRoZSBwYXJlbnQgcGxhbiBub2RlLgogICoKICAqIE5vdGUgdGhhdCBwcnVuaW5nIGF3 YXkgdW5uZWVkZWQgc3VicGxhbnMgZHVyaW5nIGV4ZWN1dG9yIHN0YXJ0dXAgaGFzIHRoZQogICog YWRkZWQgYmVuZWZpdCBvZiBub3QgaGF2aW5nIHRvIGluaXRpYWxpemUgdGhlIHVubmVlZGVkIHN1 YnBsYW5zIGF0IGFsbC4KQEAgLTE2MDEsMTAgKzE2MDgsMTcgQEAgYWRqdXN0X3BhcnRpdGlvbl9j b2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCkKICAqCQlDcmVh dGVzIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlIHJlcXVpcmVkIGJ5IGVhY2ggb2YgdGhlIHR3byBw cnVuaW5nCiAgKgkJZnVuY3Rpb25zLiAgRGV0YWlscyBzdG9yZWQgaW5jbHVkZSBob3cgdG8gbWFw IHRoZSBwYXJ0aXRpb24gaW5kZXgKICAqCQlyZXR1cm5lZCBieSB0aGUgcGFydGl0aW9uIHBydW5p bmcgY29kZSBpbnRvIHN1YnBsYW4gaW5kZXhlcy4gIEFsc28KLSAqCQlkZXRlcm1pbmVzIHRoZSBz ZXQgb2YgaW5pdGlhbGx5IHZhbGlkIHN1YnBsYW5zIGJ5IHBlcmZvcm1pbmcgaW5pdGlhbAotICoJ CXBydW5pbmcgc3RlcHMsIG9ubHkgd2hpY2ggbmVlZCBiZSBpbml0aWFsaXplZCBieSB0aGUgY2Fs bGVyIHN1Y2ggYXMKLSAqCQlFeGVjSW5pdEFwcGVuZC4gIE1hcHMgaW4gUGFydGl0aW9uUHJ1bmVT dGF0ZSBhcmUgdXBkYXRlZCB0byBhY2NvdW50Ci0gKgkJZm9yIGluaXRpYWwgcHJ1bmluZyBoYXZp bmcgZWxpbWluYXRlZCBzb21lIG9mIHRoZSBzdWJwbGFucywgaWYgYW55LgorICoJCWRldGVybWlu ZXMgdGhlIHNldCBvZiBpbml0aWFsbHkgdmFsaWQgc3VicGxhbnMgYnkgZWl0aGVyIGxvb2tpbmcg dGhhdAorICoJCXVwIGluIHRoZSBwbGFuIG5vZGUncyBQbGFuSW5pdFBydW5pbmdPdXRwdXQgaWYg b25lIGZvdW5kIGluCisgKgkJRVN0YXRlLmVzX2V4ZWNsb2NrcmVsaW5mbyBvciBieSBwZXJmb3Jt aW5nIGluaXRpYWwgcHJ1bmluZyBzdGVwcy4KKyAqCQlPbmx5IHRoZSBzdWJwbGFucyBpbmNsdWRl ZCBpbiB0aGF0IG5lZWQgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlcgorICoJCXN1Y2ggYXMg RXhlY0luaXRBcHBlbmQuICBNYXBzIGluIFBhcnRpdGlvblBydW5lU3RhdGUgYXJlIHVwZGF0ZWQg dG8KKyAqCQlhY2NvdW50IGZvciBpbml0aWFsIHBydW5pbmcgaGF2aW5nIGVsaW1pbmF0ZWQgc29t ZSBvZiB0aGUgc3VicGxhbnMsCisgKgkJaWYgYW55LgorICoKKyAqIEV4ZWNHZXRMb2NrUmVsc0Rv SW5pdGlhbFBydW5pbmc6CisgKgkJRG8gaW5pdGlhbCBwcnVuaW5nIGFzIHBhcnQgb2YgRXhlY0dl dExvY2tSZWxzKCkgb24gdGhlIHBhcmVudCBwbGFuCisgKgkJbm9kZQogICoKICAqIEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFuczoKICAqCQlSZXR1cm5zIGluZGV4ZXMgb2YgbWF0Y2hpbmcgc3VicGxh bnMgYWZ0ZXIgZXZhbHVhdGluZyBhbGwgYXZhaWxhYmxlCkBAIC0xNjE5LDkgKzE2MzMsMTAgQEAg YWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAq YXR0ck1hcCkKICAqIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZwogICogCQlJbml0aWFsaXplIGRh dGEgc3RydWN0dXJlIG5lZWRlZCBmb3IgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcKICAqCi0g KiBJbml0aWFsIHBydW5pbmcgY2FuIGJlIGRvbmUgaW1tZWRpYXRlbHksIHNvIGl0IGlzIGRvbmUg aGVyZSBpZiBuZWVkZWQgYW5kCi0gKiB0aGUgc2V0IG9mIHN1cnZpdmluZyBwYXJ0aXRpb24gc3Vi cGxhbnMnIGluZGV4ZXMgYXJlIGFkZGVkIHRvIHRoZSBvdXRwdXQKLSAqIHBhcmFtZXRlciAqaW5p dGlhbGx5X3ZhbGlkX3N1YnBsYW5zLgorICogSW5pdGlhbCBwcnVuaW5nIGNhbiBiZSBkb25lIGlt bWVkaWF0ZWx5LCBzbyBpdCBpcyBkb25lIGhlcmUgdW5sZXNzIGl0IGhhcworICogYWxyZWFkeSBi ZWVuIGRvbmUgYnkgRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygpLCBhbmQgdGhlIHNl dCBvZgorICogc3Vydml2aW5nIHBhcnRpdGlvbiBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRkZWQg dG8gdGhlIG91dHB1dCBwYXJhbWV0ZXIKKyAqICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMuCiAg KgogICogSWYgc3VicGxhbnMgYXJlIGluZGVlZCBwcnVuZWQsIHN1YnBsYW5fbWFwIGFycmF5cyBj b250YWluZWQgaW4gdGhlIHJldHVybmVkCiAgKiBQYXJ0aXRpb25QcnVuZVN0YXRlIGFyZSByZS1z ZXF1ZW5jZWQgdG8gbm90IGNvdW50IHRob3NlLCB0aG91Z2ggb25seSBpZiB0aGUKQEAgLTE2MzUs MjIgKzE2NTAsNTcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLAogewogCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGU7CiAJRVN0YXRlICplc3Rh dGUgPSBwbGFuc3RhdGUtPnN0YXRlOworCVBsYW4gICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsK KwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5nT3V0cHV0ID0gTlVMTDsKKwlib29s CWRvX3BydW5pbmcgPSAocHJ1bmVpbmZvLT5uZWVkc19pbml0X3BydW5pbmcgfHwKKwkJCQkJCSAg cHJ1bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmcpOwogCi0JLyogV2UgbWF5IG5lZWQgYW4gZXhw cmVzc2lvbiBjb250ZXh0IHRvIGV2YWx1YXRlIHBhcnRpdGlvbiBleHBycyAqLwotCUV4ZWNBc3Np Z25FeHByQ29udGV4dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisJLyogUmV0cmlldmUgdGhlIHBhcmVu dCBwbGFuJ3MgUGxhbkluaXRQcnVuaW5nT3V0cHV0LCBpZiBhbnkuICovCisJaWYgKGVzdGF0ZS0+ ZXNfZXhlY2xvY2tyZWxzaW5mbykKKwl7CisJCWluaXRQcnVuaW5nT3V0cHV0ID0gKFBsYW5Jbml0 UHJ1bmluZ091dHB1dCAqKQorCQkJRXhlY0ZldGNoUGxhbkluaXRQcnVuaW5nT3V0cHV0KGVzdGF0 ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbywgcGxhbik7CiAKLQkvKgotCSAqIENyZWF0ZSB0aGUgd29y a2luZyBkYXRhIHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4KLQkgKi8KLQlwcnVuZXN0YXRlID0gRXhl Y0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUocGxhbnN0YXRlLCBwcnVuZWluZm8pOworCQlBc3Nl cnQoaW5pdFBydW5pbmdPdXRwdXQgIT0gTlVMTCAmJgorCQkJICAgSXNBKGluaXRQcnVuaW5nT3V0 cHV0LCBQbGFuSW5pdFBydW5pbmdPdXRwdXQpKTsKKwkJLyogTm8gbmVlZCB0byBkbyBpbml0aWFs IHBydW5pbmcgYWdhaW4sIG9ubHkgZXhlYyBwcnVuaW5nLiAqLworCQlkb19wcnVuaW5nID0gcHJ1 bmVpbmZvLT5uZWVkc19leGVjX3BydW5pbmc7CisJfQorCisJcHJ1bmVzdGF0ZSA9IE5VTEw7CisJ aWYgKGRvX3BydW5pbmcpCisJeworCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRl eHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCisJCUV4ZWNBc3NpZ25FeHByQ29udGV4 dChlc3RhdGUsIHBsYW5zdGF0ZSk7CisKKwkJLyogRm9yIGRhdGEgcmVhZGluZywgZXhlY3V0b3Ig YWx3YXlzIG9taXRzIGRldGFjaGVkIHBhcnRpdGlvbnMgKi8KKwkJaWYgKGVzdGF0ZS0+ZXNfcGFy dGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQorCQkJZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0 b3J5ID0KKwkJCQlDcmVhdGVQYXJ0aXRpb25EaXJlY3RvcnkoZXN0YXRlLT5lc19xdWVyeV9jeHQs IGZhbHNlKTsKKworCQkvKgorCQkgKiBDcmVhdGUgdGhlIHdvcmtpbmcgZGF0YSBzdHJ1Y3R1cmUg Zm9yIHBydW5pbmcuICBObyBuZWVkIHRvIGNvbnNpZGVyCisJCSAqIGluaXRpYWwgcHJ1bmluZyBz dGVwcyBpZiB3ZSBoYXZlIGEgUGxhbkluaXRQcnVuaW5nT3V0cHV0LgorCQkgKi8KKwkJcHJ1bmVz dGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5zdGF0ZSwgcHJ1bmVpbmZv LAorCQkJCQkJCQkJCQkJICAgaW5pdFBydW5pbmdPdXRwdXQgPT0gTlVMTCwgdHJ1ZSwKKwkJCQkJ CQkJCQkJCSAgIE5JTCwgcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCwKKwkJCQkJCQkJCQkJCSAg IGVzdGF0ZS0+ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSk7CisJfQogCiAJLyoKIAkgKiBQZXJmb3Jt IGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiByZXF1aXJlZC4KIAkgKi8KLQlpZiAocHJ1 bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkKKwlpZiAoaW5pdFBydW5pbmdPdXRwdXQpCisJewor CQkvKiBFeGVjR2V0TG9ja1JlbHNEb0luaXRpYWxQcnVuaW5nKCkgYWxyZWFkeSBkaWQgaXQgZm9y IHVzISAqLworCQkqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gaW5pdFBydW5pbmdPdXRwdXQt PmluaXRpYWxseV92YWxpZF9zdWJwbGFuczsKKwl9CisJZWxzZSBpZiAocHJ1bmVzdGF0ZSAmJiBw cnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQogCXsKIAkJLyogRGV0ZXJtaW5lIHdoaWNoIHN1 YnBsYW5zIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nICovCi0JCSppbml0aWFsbHlfdmFsaWRfc3Vi cGxhbnMgPSBFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUpOworCQkq aW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0gRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFu cyhwcnVuZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJCQlwcnVuZWluZm8pOwogCX0KIAllbHNlCiAJ ewpAQCAtMTY2OCw3ICsxNzE4LDcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLAogCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0YXRlLCBiZWNhdXNlIHRo YXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KIAkgKiAoY2YgaW5pdGlhbCBBc3NlcnQg aW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KIAkgKi8KLQlpZiAocHJ1bmVzdGF0ZS0+ZG9f ZXhlY19wcnVuZSAmJgorCWlmIChwcnVuZXN0YXRlICYmIHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1 bmUgJiYKIAkJYm1zX251bV9tZW1iZXJzKCppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpIDwgbl90 b3RhbF9zdWJwbGFucykKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1YlBsYW5NYXAocHJ1bmVz dGF0ZSwKIAkJCQkJCQkJCQkgKmluaXRpYWxseV92YWxpZF9zdWJwbGFucywKQEAgLTE2NzcsMTIg KzE3MjcsNzUgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LAogCXJldHVybiBwcnVuZXN0YXRlOwogfQogCisvKgorICogRXhlY0dldExvY2tSZWxzRG9Jbml0 aWFsUHJ1bmluZworICoJCVBlcmZvcm0gaW5pdGlhbCBwcnVuaW5nIGFzIHBhcnQgb2YgZG9pbmcg RXhlY0dldExvY2tSZWxzKCkgb24gdGhlIHBhcmVudAorICoJCXBsYW4gbm9kZQorICovCitCaXRt YXBzZXQgKgorRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZyhQbGFuICpwbGFuLCBFeGVj R2V0TG9ja1JlbHNDb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQlQYXJ0aXRpb25QcnVuZUluZm8g KnBydW5laW5mbykKK3sKKwlMaXN0CQkgKnJ0YWJsZSA9IGNvbnRleHQtPnN0bXQtPnJ0YWJsZTsK KwlQYXJhbUxpc3RJbmZvIHBhcmFtcyA9IGNvbnRleHQtPnBhcmFtczsKKwlFeHByQ29udGV4dAkg KmVjb250ZXh0OworCVBhcnRpdGlvbkRpcmVjdG9yeSBwZGlyOworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dCwKKwkJCQkgIHRtcGNvbnRleHQ7CisJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVz dGF0ZTsKKwlQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmluaXRQcnVuaW5nT3V0cHV0OworCisJLyoK KwkgKiBBIHRlbXBvcmFyeSBjb250ZXh0IHRvIGFsbG9jYXRlIHN0dWZmIG5lZWRkZWQgdG8gcnVu IHRoZSBwcnVuaW5nIHN0ZXBzLgorCSAqLworCXRtcGNvbnRleHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAiaW5pdGlhbCBwcnVuaW5n IHdvcmtpbmcgZGF0YSIsCisJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlv bGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJLyoKKwkg KiBQYXJ0aXRpb25EaXJlY3RvcnkgdG8gbG9vayB1cCBwYXJ0aXRpb24gZGVzY3JpcHRvcnMsIHdo aWNoIG9taXRzCisJICogZGV0YWNoZWQgcGFydGl0aW9ucywganVzdCBsaWtlIGluIHRoZSBleGVj dXRvciBwcm9wZXIuCisJICovCisJcGRpciA9IENyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShDdXJy ZW50TWVtb3J5Q29udGV4dCwgZmFsc2UpOworCisJLyoKKwkgKiBXZSBkb24ndCB5ZXQgaGF2ZSBh IFBsYW5TdGF0ZSBmb3IgdGhlIHBhcmVudCBwbGFuIG5vZGUsIHNvIG11c3QgY3JlYXRlCisJICog YSBzdGFuZGFsb25lIEV4cHJDb250ZXh0IHRvIGV2YWx1YXRlIHBydW5pbmcgZXhwcmVzc2lvbnMs IGVxdWlwcGVkIHdpdGgKKwkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEVYVEVSTiBwYXJh bWV0ZXJzIHRoYXQgdGhlIGNhbGxlciBwYXNzZWQgdXMuCisJICogTm90ZSB0aGF0IHRoYXQncyBv a2F5IGJlY2F1c2UgdGhlIGluaXRpYWwgcHJ1bmluZyBzdGVwcyBkbyBub3QgY29udGFpbgorCSAq IGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgdGhlIGV4ZWN1dGlvbiB0byBoYXZlIHN0YXJ0ZWQuCisJ ICovCisJZWNvbnRleHQgPSBDcmVhdGVTdGFuZGFsb25lRXhwckNvbnRleHQoKTsKKwllY29udGV4 dC0+ZWN4dF9wYXJhbV9saXN0X2luZm8gPSBwYXJhbXM7CisJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVh dGVQYXJ0aXRpb25QcnVuZVN0YXRlKE5VTEwsIHBydW5laW5mbywKKwkJCQkJCQkJCQkJICAgdHJ1 ZSwgZmFsc2UsCisJCQkJCQkJCQkJCSAgIHJ0YWJsZSwgZWNvbnRleHQsCisJCQkJCQkJCQkJCSAg IHBkaXIpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCS8qIERvIHRo ZSBwcnVuaW5nIGFuZCBwb3B1bGF0ZSBhIFBsYW5Jbml0UHJ1bmluZ091dHB1dCBmb3IgdGhpcyBu b2RlLiAqLworCWluaXRQcnVuaW5nT3V0cHV0ID0gbWFrZU5vZGUoUGxhbkluaXRQcnVuaW5nT3V0 cHV0KTsKKwlpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zID0KKwkJ RXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCBwcnVuZWluZm8pOwor CUV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb250ZXh0LCBpbml0UHJ1bmluZ091dHB1 dCwgcGxhbik7CisKKwlGcmVlRXhwckNvbnRleHQoZWNvbnRleHQsIHRydWUpOworCURlc3Ryb3lQ YXJ0aXRpb25EaXJlY3RvcnkocGRpcik7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjb250ZXh0 KTsKKworCXJldHVybiBpbml0UHJ1bmluZ091dHB1dC0+aW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z OworfQorCiAvKgogICogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0 aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcKICAqCQlFeGVjRmluZEluaXRp YWxNYXRjaGluZ1N1YlBsYW5zIGFuZCBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAgKgotICog J3BsYW5zdGF0ZScgaXMgdGhlIHBhcmVudCBwbGFuIG5vZGUncyBleGVjdXRpb24gc3RhdGUuCisg KiAncGxhbnN0YXRlJywgaWYgbm90IE5VTEwsIGlzIHRoZSBwYXJlbnQgcGxhbiBub2RlJ3MgZXhl Y3V0aW9uIHN0YXRlLiAgSXQKKyAqIGNhbiBiZSBOVUxMIGlmIGJlaW5nIGNhbGxlZCBiZWZvcmUg RXhlY3V0b3JTdGFydCgpLCBpbiB3aGljaCBjYXNlLAorICogJ3J0YWJsZScgKHJhbmdlIHRhYmxl KSwgJ2Vjb250ZXh0JywgYW5kICdwYXJ0ZGlyJyBtdXN0IGJlIGV4cGxpY2l0bHkKKyAqIHByb3Zp ZGVkLgogICoKICAqICdwYXJ0aXRpb25wcnVuZWluZm8nIGlzIGEgUGFydGl0aW9uUHJ1bmVJbmZv IGFzIGdlbmVyYXRlZCBieQogICogbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvLiAgSGVyZSB3ZSBi dWlsZCBhIFBhcnRpdGlvblBydW5lU3RhdGUgY29udGFpbmluZyBhCkBAIC0xNjk3LDE5ICsxODEw LDIwIEBAIEV4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKICAq Lwogc3RhdGljIFBhcnRpdGlvblBydW5lU3RhdGUgKgogRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5l U3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCi0JCQkJCQkJICBQYXJ0aXRpb25QcnVuZUluZm8g KnBhcnRpdGlvbnBydW5laW5mbykKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0 aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgYm9vbCBjb25zaWRlcl9pbml0aWFsX3N0ZXBzLAorCQkJ CQkJCSAgYm9vbCBjb25zaWRlcl9leGVjX3N0ZXBzLAorCQkJCQkJCSAgTGlzdCAqcnRhYmxlLCBF eHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJICBQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGRp cikKIHsKLQlFU3RhdGUJICAgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3RhdGU7CisJRVN0YXRlCSAg ICplc3RhdGUgPSBwbGFuc3RhdGUgPyBwbGFuc3RhdGUtPnN0YXRlIDogTlVMTDsKIAlQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCWludAkJCW5fcGFydF9oaWVyYXJjaGllczsKIAlM aXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOwotCUV4cHJDb250ZXh0CSplY29udGV4dCA9IHBsYW5z dGF0ZS0+cHNfRXhwckNvbnRleHQ7CiAKLQkvKiBGb3IgZGF0YSByZWFkaW5nLCBleGVjdXRvciBh bHdheXMgb21pdHMgZGV0YWNoZWQgcGFydGl0aW9ucyAqLwotCWlmIChlc3RhdGUtPmVzX3BhcnRp dGlvbl9kaXJlY3RvcnkgPT0gTlVMTCkKLQkJZXN0YXRlLT5lc19wYXJ0aXRpb25fZGlyZWN0b3J5 ID0KLQkJCUNyZWF0ZVBhcnRpdGlvbkRpcmVjdG9yeShlc3RhdGUtPmVzX3F1ZXJ5X2N4dCwgZmFs c2UpOworCUFzc2VydCgoZXN0YXRlICE9IE5VTEwpIHx8CisJCQkocGFydGRpciAhPSBOVUxMICYm IGVjb250ZXh0ICE9IE5VTEwgJiYgcnRhYmxlICE9IE5JTCkpOwogCiAJbl9wYXJ0X2hpZXJhcmNo aWVzID0gbGlzdF9sZW5ndGgocGFydGl0aW9ucHJ1bmVpbmZvLT5wcnVuZV9pbmZvcyk7CiAJQXNz ZXJ0KG5fcGFydF9oaWVyYXJjaGllcyA+IDApOwpAQCAtMTc2MCwxOSArMTg3NCw0OCBAQCBFeGVj Q3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCVBhcnRp dGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxmaXJzdF9ub2RlKFBhcnRpdGlvbmVkUmVsUHJ1 bmVJbmZvLCBsYzIpOwogCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqcHBydW5lID0gJnBy dW5lZGF0YS0+cGFydHJlbHBydW5lZGF0YVtqXTsKIAkJCVJlbGF0aW9uCXBhcnRyZWw7CisJCQli b29sCQljbG9zZV9wYXJ0cmVsID0gZmFsc2U7CiAJCQlQYXJ0aXRpb25EZXNjIHBhcnRkZXNjOwog CQkJUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAkJCS8qCi0JCQkgKiBXZSBjYW4gcmVseSBvbiB0 aGUgY29waWVzIG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSdzIHBhcnRpdGlvbgotCQkJICoga2V5 IGFuZCBwYXJ0aXRpb24gZGVzY3JpcHRvciBhcHBlYXJpbmcgaW4gaXRzIHJlbGNhY2hlIGVudHJ5 LAotCQkJICogYmVjYXVzZSB0aGF0IGVudHJ5IHdpbGwgYmUgaGVsZCBvcGVuIGFuZCBsb2NrZWQg Zm9yIHRoZQotCQkJICogZHVyYXRpb24gb2YgdGhpcyBleGVjdXRvciBydW4uCisJCQkgKiBNdXN0 IG9wZW4gdGhlIHJlbGF0aW9uIGJ5IG91cnNlbHZlcyB3aGVuIGNhbGxlZCBiZWZvcmUgdGhlCisJ CQkgKiBleGVjdXRpb24gaGFzIHN0YXJ0ZWQsIHN1Y2ggYXMsIHdoZW4gY2FsbGVkIGR1cmluZwor CQkJICogRXhlY3V0b3JHZXRMb2NrUmVscygpIG9uIGEgY2FjaGVkIHBsYW4uICBJbiB0aGF0IGNh c2UsCisJCQkgKiBzdWItcGFydGl0aW9ucyBtdXN0IGJlIGxvY2tlZCwgYmVjYXVzZSBBY3F1aXJl UGxhbm5lckxvY2tzKCkKKwkJCSAqIHdvdWxkIG5vdCBoYXZlIHNlZW4gdGhlbS4gKDFzdCByZWxh dGlvbiBpbiBhIHBhcnRyZWxwcnVuZWluZm9zCisJCQkgKiBsaXN0IGlzIGFsd2F5cyB0aGUgcm9v dCBwYXJ0aXRpb25lZCB0YWJsZSBhcHBlYXJpbmcgaW4gdGhlCisJCQkgKiBxdWVyeSwgd2hpY2gg QWNxdWlyZVBsYW5uZXJMb2NrcygpIHdvdWxkIGhhdmUgbG9ja2VkOyB0aGUKKwkJCSAqIEFzc2Vy dCBpbiByZWxhdGlvbl9vcGVuKCkgZ3VhcmRzIHRoYXQgYXNzdW1wdGlvbi4pCisJCQkgKi8KKwkJ CWlmIChlc3RhdGUgPT0gTlVMTCkKKwkJCXsKKwkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9m ZXRjaChwaW5mby0+cnRpbmRleCwgcnRhYmxlKTsKKwkJCQlpbnQJCWxvY2ttb2RlID0gKGogPT0g MCkgPyBOb0xvY2sgOiBydGUtPnJlbGxvY2ttb2RlOworCisJCQkJcGFydHJlbCA9IHRhYmxlX29w ZW4ocnRlLT5yZWxpZCwgbG9ja21vZGUpOworCQkJCWNsb3NlX3BhcnRyZWwgPSB0cnVlOworCQkJ fQorCQkJZWxzZQorCQkJCXBhcnRyZWwgPSBFeGVjR2V0UmFuZ2VUYWJsZVJlbGF0aW9uKGVzdGF0 ZSwgcGluZm8tPnJ0aW5kZXgpOworCisJCQkvKgorCQkJICogV2UgY2FuIHJlbHkgb24gdGhlIGNv cHkgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcGFydGl0aW9uCisJCQkgKiBrZXkgZnJvbSBp biBpdHMgcmVsY2FjaGUgZW50cnksIGJlY2F1c2UgaXQgY2FuJ3QgY2hhbmdlIChvcgorCQkJICog Z2V0IGRlc3Ryb3llZCkgYXMgbG9uZyBhcyB0aGUgcmVsYXRpb24gaXMgbG9ja2VkLiAgUGFydGl0 aW9uCisJCQkgKiBkZXNjcmlwdG9yIGlzIHRha2VuIGZyb20gdGhlIFBhcnRpdGlvbkRpcmVjdG9y eSBhc3NvY2lhdGVkIHdpdGgKKwkJCSAqIHRoZSB0YWJsZSB0aGF0IGlzIGhlbGQgb3BlbiBsb25n IGVub3VnaCBmb3IgdGhlIGRlc2NyaXB0b3IgdG8KKwkJCSAqIHJlbWFpbiB2YWxpZCB3aGlsZSBp dCdzIHVzZWQgdG8gcGVyZm9ybSB0aGUgcHJ1bmluZyBzdGVwcy4KIAkJCSAqLwotCQkJcGFydHJl bCA9IEV4ZWNHZXRSYW5nZVRhYmxlUmVsYXRpb24oZXN0YXRlLCBwaW5mby0+cnRpbmRleCk7CiAJ CQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocGFydHJlbCk7Ci0JCQlwYXJ0ZGVz YyA9IFBhcnRpdGlvbkRpcmVjdG9yeUxvb2t1cChlc3RhdGUtPmVzX3BhcnRpdGlvbl9kaXJlY3Rv cnksCi0JCQkJCQkJCQkJCQlwYXJ0cmVsKTsKKwkJCXBhcnRkZXNjID0gUGFydGl0aW9uRGlyZWN0 b3J5TG9va3VwKHBhcnRkaXIsIHBhcnRyZWwpOworCisJCQkvKgorCQkJICogTXVzdCBjbG9zZSBw YXJ0cmVsLCBrZWVwaW5nIHRoZSBsb2NrIHRha2VuLCBpZiB3ZSdyZSBub3QgdXNpbmcKKwkJCSAq IEVTdGF0ZSdzIGVudHJ5LgorCQkJICovCisJCQlpZiAoY2xvc2VfcGFydHJlbCkKKwkJCQl0YWJs ZV9jbG9zZShwYXJ0cmVsLCBOb0xvY2spOwogCiAJCQkvKgogCQkJICogSW5pdGlhbGl6ZSB0aGUg c3VicGxhbl9tYXAgYW5kIHN1YnBhcnRfbWFwLgpAQCAtMTg3NCw3ICsyMDE3LDcgQEAgRXhlY0Ny ZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkgKiBJbml0 aWFsaXplIHBydW5pbmcgY29udGV4dHMgYXMgbmVlZGVkLgogCQkJICovCiAJCQlwcHJ1bmUtPmlu aXRpYWxfcHJ1bmluZ19zdGVwcyA9IHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHM7Ci0JCQlp ZiAocGluZm8tPmluaXRpYWxfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChjb25zaWRlcl9pbml0aWFs X3N0ZXBzICYmIHBpbmZvLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJCQkJRXhlY0lu aXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRleHQsCiAJCQkJCQkJCQkgICBw aW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLApAQCAtMTg4NCw3ICsyMDI3LDcgQEAgRXhlY0Ny ZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJcHJ1bmVz dGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CiAJCQlwcHJ1bmUtPmV4ZWNfcHJ1 bmluZ19zdGVwcyA9IHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHM7Ci0JCQlpZiAocGluZm8tPmV4 ZWNfcHJ1bmluZ19zdGVwcykKKwkJCWlmIChjb25zaWRlcl9leGVjX3N0ZXBzICYmIHBpbmZvLT5l eGVjX3BydW5pbmdfc3RlcHMpCiAJCQl7CiAJCQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBy dW5lLT5leGVjX2NvbnRleHQsCiAJCQkJCQkJCQkgICBwaW5mby0+ZXhlY19wcnVuaW5nX3N0ZXBz LApAQCAtMTk5OCw3ICsyMTQxLDggQEAgRXhlY0luaXRQcnVuaW5nQ29udGV4dChQYXJ0aXRpb25Q cnVuZUNvbnRleHQgKmNvbnRleHQsCiAgKiBpcyByZXF1aXJlZC4KICAqLwogc3RhdGljIEJpdG1h cHNldCAqCi1FeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3Rh dGUgKnBydW5lc3RhdGUpCitFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlv blBydW5lU3RhdGUgKnBydW5lc3RhdGUsCisJCQkJCQkJCVBhcnRpdGlvblBydW5lSW5mbyAqcHJ1 bmVpbmZvKQogewogCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OwpAQCAtMjAwOCw4ICsyMTUyLDggQEAgRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdT dWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQogCUFzc2VydChwcnVuZXN0 YXRlLT5kb19pbml0aWFsX3BydW5lKTsKIAogCS8qCi0JICogU3dpdGNoIHRvIGEgdGVtcCBjb250 ZXh0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBleGVjdXRvcidzCi0JICogcXVlcnkt bGlmZXNwYW4gbWVtb3J5IGNvbnRleHQuCisJICogU3dpdGNoIHRvIGEgdGVtcCBjb250ZXh0IHRv IGF2b2lkIGxlYWtpbmcgbWVtb3J5IGluIHRoZSBsb25nZXItdGVybQorCSAqIG1lbW9yeSBjb250 ZXh0LgogCSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocHJ1bmVzdGF0 ZS0+cHJ1bmVfY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNVdGlscy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKaW5kZXggOWRmMWY4 MWVhOC4uNzI0NmY5MTc1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMKQEAgLTExOSw2ICsx MTksNyBAQCBDcmVhdGVFeGVjdXRvclN0YXRlKHZvaWQpCiAJZXN0YXRlLT5lc19yZWxhdGlvbnMg PSBOVUxMOwogCWVzdGF0ZS0+ZXNfcm93bWFya3MgPSBOVUxMOwogCWVzdGF0ZS0+ZXNfcGxhbm5l ZHN0bXQgPSBOVUxMOworCWVzdGF0ZS0+ZXNfZXhlY2xvY2tyZWxzaW5mbyA9IE5VTEw7CiAKIAll c3RhdGUtPmVzX2p1bmtGaWx0ZXIgPSBOVUxMOwogCkBAIC03ODUsNiArNzg2LDEzIEBAIEV4ZWNH ZXRSYW5nZVRhYmxlUmVsYXRpb24oRVN0YXRlICplc3RhdGUsIEluZGV4IHJ0aSkKIAogCUFzc2Vy dChydGkgPiAwICYmIHJ0aSA8PSBlc3RhdGUtPmVzX3JhbmdlX3RhYmxlX3NpemUpOwogCisJLyoK KwkgKiBBIGNyb3NzLWNoZWNrIHRoYXQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSBoYXNuJ3QgbWlz c2VkIGFueSByZWxhdGlvbnMKKwkgKiBpdCBtdXN0IG5vdCBoYXZlLgorCSAqLworCUFzc2VydChl c3RhdGUtPmVzX2V4ZWNsb2NrcmVsc2luZm8gPT0gTlVMTCB8fAorCQkgICBibXNfaXNfbWVtYmVy KHJ0aSwgZXN0YXRlLT5lc19leGVjbG9ja3JlbHNpbmZvLT5sb2NrcmVscykpOworCiAJcmVsID0g ZXN0YXRlLT5lc19yZWxhdGlvbnNbcnRpIC0gMV07CiAJaWYgKHJlbCA9PSBOVUxMKQogCXsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZnVuY3Rpb25zLmMKaW5kZXggZjk0NjBhZTUwNi4uYTIxODJhNmIxZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAgLTg0NCw3ICs4NDQsNyBAQCBwb3N0cXVlbF9zdGFydChl eGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAllbHNlCiAJ CWRlc3QgPSBOb25lX1JlY2VpdmVyOwogCi0JZXMtPnFkID0gQ3JlYXRlUXVlcnlEZXNjKGVzLT5z dG10LAorCWVzLT5xZCA9IENyZWF0ZVF1ZXJ5RGVzYyhlcy0+c3RtdCwgTlVMTCwKIAkJCQkJCQkg ZmNhY2hlLT5zcmMsCiAJCQkJCQkJIEdldEFjdGl2ZVNuYXBzaG90KCksCiAJCQkJCQkJIEludmFs aWRTbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCA1YjZkM2ViMjNiLi45 YzZmOTA3Njg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC05NCw2ICs5NCw1NSBA QCBzdGF0aWMgYm9vbCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRlICpub2RlLCBU dXBsZVRhYmxlU2xvdCAqKnJlc3VsdCk7CiBzdGF0aWMgdm9pZCBFeGVjQXBwZW5kQXN5bmNFdmVu dFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpOwogc3RhdGljIHZvaWQgY2xhc3NpZnlfbWF0Y2hpbmdf c3VicGxhbnMoQXBwZW5kU3RhdGUgKm5vZGUpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY0dldEFw cGVuZExvY2tSZWxzCisgKgkJCURvIEV4ZWNHZXRMb2NrUmVscygpJ3Mgd29yayBmb3IgYW4gQXBw ZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhlY0dldEFwcGVuZExvY2tSZWxzKEFw cGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCkKK3sKKwlQYXJ0aXRp b25QcnVuZUluZm8gKnBydW5laW5mbyA9IG5vZGUtPnBhcnRfcHJ1bmVfaW5mbzsKKworCS8qCisJ ICogTXVzdCBhbHdheXMgbG9jayBhbGwgdGhlIHBhcnRpdGlvbmVkIHRhYmxlcyB3aG9zZSBkaXJl Y3QgYW5kIGluZGlyZWN0CisJICogcGFydGl0aW9ucyB3aWxsIGJlIHNjYW5uZWQgYnkgdGhpcyBB cHBlbmQuCisJICovCisJY29udGV4dC0+bG9ja3JlbHMgPSBibXNfYWRkX21lbWJlcnMoY29udGV4 dC0+bG9ja3JlbHMsCisJCQkJCQkJCQkJbm9kZS0+cGFydGl0aW9uZWRfcmVscyk7CisKKwkvKgor CSAqIE5vdyByZWN1cnNlIHRvIHN1YnBsYW5zIHRvIGFkZCByZWxhdGlvbnMgc2Nhbm5lZCB0aGVy ZWluLgorCSAqCisJICogSWYgaW5pdGlhbCBwcnVuaW5nIGNhbiBiZSBkb25lLCBkbyB0aGF0IG5v dyBhbmQgb25seSByZWN1cnNlIHRvIHRoZQorCSAqIHN1cnZpdmluZyBzdWJwbGFucy4KKwkgKi8K KwlpZiAocHJ1bmVpbmZvICYmIHBydW5laW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCXsKKwkJ TGlzdAkgICAqc3VicGxhbnMgPSBub2RlLT5hcHBlbmRwbGFuczsKKwkJQml0bWFwc2V0ICAqdmFs aWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKworCQl2YWxpZHN1YnBsYW5zID0gRXhlY0dldExvY2tS ZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAqKSBub2RlLAorCQkJCQkJCQkJCQkJCQljb250ZXh0 LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vyc2UgdG8gc3Vydml2aW5nIHN1YnBsYW5zLiAqLwor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBp KSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9udGgoc3VicGxhbnMsIGkp OworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNvbnRleHQpOworCQl9CisK KwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBU ZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byAqYWxsKiB0aGUgc3VicGxhbnMuICovCisJcmV0 dXJuIGZhbHNlOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0luaXRBcHBlbmQKICAqCkBAIC0x NTUsNyArMjA0LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxhbiwgd2UgY2FuIGZpbGwgYXNfdmFsaWRfc3VicGxh bnMgaW1tZWRpYXRlbHksIHByZXZlbnRpbmcKIAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KLQkJaWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5l ICYmIG5wbGFucyA+IDApCisJCWlmIChhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUgPT0gTlVM TCB8fAorCQkJKCFhcHBlbmRzdGF0ZS0+YXNfcHJ1bmVfc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYg bnBsYW5zID4gMCkpCiAJCQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRk X3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVNZXJnZUFwcGVuZC5jCmluZGV4IDlhOWYyOWU4NDUuLjRiMDRmY2RiYzIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC01NCw2ICs1NCw1NSBAQCB0eXBlZGVm IGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZUFwcGVu ZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50CWhlYXBfY29tcGFyZV9zbG90cyhEYXR1 bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJRXhlY0dldE1lcmdl QXBwZW5kTG9ja1JlbHMKKyAqCQkJRG8gRXhlY0dldExvY2tSZWxzKCkncyB3b3JrIGZvciBhIE1l cmdlQXBwZW5kIHBsYW4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworYm9vbAorRXhlY0dldE1lcmdlQXBwZW5k TG9ja1JlbHMoTWVyZ2VBcHBlbmQgKm5vZGUsIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRl eHQpCit7CisJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8gPSBub2RlLT5wYXJ0X3BydW5l X2luZm87CisKKwkvKgorCSAqIE11c3QgYWx3YXlzIGxvY2sgYWxsIHRoZSBwYXJ0aXRpb25lZCB0 YWJsZXMgd2hvc2UgZGlyZWN0IGFuZCBpbmRpcmVjdAorCSAqIHBhcnRpdGlvbnMgd2lsbCBiZSBz Y2FubmVkIGJ5IHRoaXMgQXBwZW5kLgorCSAqLworCWNvbnRleHQtPmxvY2tyZWxzID0gYm1zX2Fk ZF9tZW1iZXJzKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJCW5vZGUtPnBhcnRpdGlvbmVk X3JlbHMpOworCisJLyoKKwkgKiBOb3cgcmVjdXJzZSB0byBzdWJwbGFucyB0byBhZGQgcmVsYXRp b25zIHNjYW5uZWQgdGhlcmVpbi4KKwkgKgorCSAqIElmIGluaXRpYWwgcHJ1bmluZyBjYW4gYmUg ZG9uZSwgZG8gdGhhdCBub3cgYW5kIG9ubHkgcmVjdXJzZSB0byB0aGUKKwkgKiBzdXJ2aXZpbmcg c3VicGxhbnMuCisJICovCisJaWYgKHBydW5laW5mbyAmJiBwcnVuZWluZm8tPm5lZWRzX2luaXRf cHJ1bmluZykKKwl7CisJCUxpc3QJICAgKnN1YnBsYW5zID0gbm9kZS0+bWVyZ2VwbGFuczsKKwkJ Qml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwkJaW50CQkJaTsKKworCQl2YWxpZHN1YnBsYW5z ID0gRXhlY0dldExvY2tSZWxzRG9Jbml0aWFsUHJ1bmluZygoUGxhbiAqKSBub2RlLAorCQkJCQkJ CQkJCQkJCQljb250ZXh0LCBwcnVuZWluZm8pOworCisJCS8qIFJlY3Vyc2UgdG8gc3Vydml2aW5n IHN1YnBsYW5zLiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2 YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJUGxhbiAgICpzdWJwbGFuID0gbGlzdF9u dGgoc3VicGxhbnMsIGkpOworCisJCQkodm9pZCkgRXhlY0dldExvY2tSZWxzKHN1YnBsYW4sIGNv bnRleHQpOworCQl9CisKKwkJLyogZG9uZSB3aXRoIHRoaXMgbm9kZSAqLworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwkvKiBUZWxsIHRoZSBjYWxsZXIgdG8gcmVjdXJzZSB0byAqYWxsKiB0aGUgc3Vi cGxhbnMuICovCisJcmV0dXJuIGZhbHNlOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5p dE1lcmdlQXBwZW5kCkBAIC0xMDMsNyArMTUyLDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJn ZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW4s IHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCiAJ CSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlm ICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAobWVyZ2Vz dGF0ZS0+bXNfcHJ1bmVfc3RhdGUgPT0gTlVMTCB8fAorCQkJKCFtZXJnZXN0YXRlLT5tc19wcnVu ZV9zdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKSkKIAkJCW1lcmdlc3RhdGUtPm1z X3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAl9 CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCAxNzE1NzVj ZDczLi5mMTdiZWRlMzY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwpA QCAtMzg1Myw2ICszODUzLDMxIEBAIEV4ZWNMb29rdXBSZXN1bHRSZWxCeU9pZChNb2RpZnlUYWJs ZVN0YXRlICpub2RlLCBPaWQgcmVzdWx0b2lkLAogCXJldHVybiBOVUxMOwogfQogCisvKgorICog RXhlY0dldE1vZGlmeVRhYmxlTG9ja1JlbHMKKyAqIAkJRG8gRXhlY0dldExvY2tSZWxzKCkncyB3 b3JrIGZvciBhIE1vZGlmeVRhYmxlIHBsYW4KKyAqLworYm9vbAorRXhlY0dldE1vZGlmeVRhYmxl TG9ja1JlbHMoTW9kaWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRl eHQpCit7CisJTGlzdENlbGwgKmxjOworCisJLyogRmlyc3QgYWRkIHRoZSByZXN1bHQgcmVsYXRp b24gUlRJcyBtZW50aW9uZWQgaW4gdGhlIG5vZGUuICovCisJaWYgKHBsYW4tPnJvb3RSZWxhdGlv biA+IDApCisJCWNvbnRleHQtPmxvY2tyZWxzID0gYm1zX2FkZF9tZW1iZXIoY29udGV4dC0+bG9j a3JlbHMsCisJCQkJCQkJCQkJICAgcGxhbi0+cm9vdFJlbGF0aW9uKTsKKwljb250ZXh0LT5sb2Nr cmVscyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPmxvY2tyZWxzLAorCQkJCQkJCQkJICAgcGxh bi0+bm9taW5hbFJlbGF0aW9uKTsKKwlmb3JlYWNoKGxjLCBwbGFuLT5yZXN1bHRSZWxhdGlvbnMp CisJeworCQljb250ZXh0LT5sb2NrcmVscyA9IGJtc19hZGRfbWVtYmVyKGNvbnRleHQtPmxvY2ty ZWxzLAorCQkJCQkJCQkJCSAgIGxmaXJzdF9pbnQobGMpKTsKKwl9CisKKwkvKiBUZWxsIHRoZSBj YWxsZXIgdG8gcmVjdXJzZSB0byB0aGUgc3VicGxhbiAob3V0ZXJQbGFuKHBsYW4pKS4gKi8KKwly ZXR1cm4gZmFsc2U7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlFeGVjSW5pdE1vZGlmeVRhYmxlCiAg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL3NwaS5jCmluZGV4IDA0MmE1ZjhiMGEuLjY0ZWJiZmIzMWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL3NwaS5jCkBAIC0xNTc4LDYgKzE1NzgsNyBAQCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwo Y29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCUNhY2hlZFBsYW5Tb3VyY2UgKnBs YW5zb3VyY2U7CiAJQ2FjaGVkUGxhbiAqY3BsYW47CiAJTGlzdAkgICAqc3RtdF9saXN0OworCUxp c3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAljaGFyCSAgICpxdWVyeV9zdHJpbmc7CiAJ U25hcHNob3QJc25hcHNob3Q7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtMTY1OSw2 ICsxNjYwLDcgQEAgU1BJX2N1cnNvcl9vcGVuX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIFNQ SVBsYW5QdHIgcGxhbiwKIAkvKiBSZXBsYW4gaWYgbmVlZGVkLCBhbmQgaW5jcmVtZW50IHBsYW4g cmVmY291bnQgZm9yIHBvcnRhbCAqLwogCWNwbGFuID0gR2V0Q2FjaGVkUGxhbihwbGFuc291cmNl LCBwYXJhbUxJLCBOVUxMLCBfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52KTsKIAlzdG10X2xpc3QgPSBj cGxhbi0+c3RtdF9saXN0OworCWV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IGNwbGFuLT5leGVjbG9j a3JlbHNpbmZvX2xpc3Q7CiAKIAlpZiAoIXBsYW4tPnNhdmVkKQogCXsKQEAgLTE2NzAsNiArMTY3 Miw3IEBAIFNQSV9jdXJzb3Jfb3Blbl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBTUElQbGFu UHRyIHBsYW4sCiAJCSAqLwogCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBv cnRhbC0+cG9ydGFsQ29udGV4dCk7CiAJCXN0bXRfbGlzdCA9IGNvcHlPYmplY3Qoc3RtdF9saXN0 KTsKKwkJZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY29weU9iamVjdChleGVjbG9ja3JlbHNpbmZv X2xpc3QpOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAJCVJlbGVhc2VD YWNoZWRQbGFuKGNwbGFuLCBOVUxMKTsKIAkJY3BsYW4gPSBOVUxMOwkJCS8qIHBvcnRhbCBzaG91 bGRuJ3QgZGVwZW5kIG9uIGNwbGFuICovCkBAIC0xNjgzLDYgKzE2ODYsNyBAQCBTUElfY3Vyc29y X29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBwbGFuLAogCQkJCQkg IHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwbGFuc291cmNlLT5jb21tYW5kVGFnLAogCQkJCQkgIHN0 bXRfbGlzdCwKKwkJCQkJICBleGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJCQkJCSAgY3BsYW4pOwog CiAJLyoKQEAgLTI0NzMsNyArMjQ3Nyw5IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIg cGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJewogCQlDYWNoZWRQbGFu U291cmNlICpwbGFuc291cmNlID0gKENhY2hlZFBsYW5Tb3VyY2UgKikgbGZpcnN0KGxjMSk7CiAJ CUxpc3QJICAgKnN0bXRfbGlzdDsKLQkJTGlzdENlbGwgICAqbGMyOworCQlMaXN0CSAgICpleGVj bG9ja3JlbHNpbmZvX2xpc3Q7CisJCUxpc3RDZWxsICAgKmxjMiwKKwkJCQkgICAqbGMzOwogCiAJ CXNwaWNhbGxiYWNrYXJnLnF1ZXJ5ID0gcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nOwogCkBAIC0y NTUyLDYgKzI1NTgsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0 IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCQkJCSAgcGxhbl9vd25lciwgX1NQSV9j dXJyZW50LT5xdWVyeUVudik7CiAKIAkJc3RtdF9saXN0ID0gY3BsYW4tPnN0bXRfbGlzdDsKKwkJ ZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gY3BsYW4tPmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsKIAog CQkvKgogCQkgKiBJZiB3ZSB3ZXJlbid0IGdpdmVuIGEgc3BlY2lmaWMgc25hcHNob3QgdG8gdXNl LCBhbmQgdGhlIHN0YXRlbWVudApAQCAtMjU4OSw5ICsyNTk2LDEwIEBAIF9TUElfZXhlY3V0ZV9w bGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiAJ CQl9CiAJCX0KIAotCQlmb3JlYWNoKGxjMiwgc3RtdF9saXN0KQorCQlmb3Jib3RoKGxjMiwgc3Rt dF9saXN0LCBsYzMsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCkKIAkJewogCQkJUGxhbm5lZFN0bXQg KnN0bXQgPSBsZmlyc3Rfbm9kZShQbGFubmVkU3RtdCwgbGMyKTsKKwkJCUV4ZWNMb2NrUmVsc0lu Zm8gKmV4ZWNsb2NrcmVsc2luZm8gPSBsZmlyc3Rfbm9kZShFeGVjTG9ja1JlbHNJbmZvLCBsYzMp OwogCQkJYm9vbAkJY2FuU2V0VGFnID0gc3RtdC0+Y2FuU2V0VGFnOwogCQkJRGVzdFJlY2VpdmVy ICpkZXN0OwogCkBAIC0yNjYzLDcgKzI2NzEsNyBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFu UHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1dGVPcHRpb25zICpvcHRpb25zLAogCQkJCWVsc2UKIAkJ CQkJc25hcCA9IEludmFsaWRTbmFwc2hvdDsKIAotCQkJCXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHN0bXQsCisJCQkJcWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwgZXhlY2xvY2tyZWxzaW5m bywKIAkJCQkJCQkJCQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJCQkJCQkJCQkJc25hcCwg Y3Jvc3NjaGVja19zbmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpp bmRleCAyOWM1MTVkN2RiLi5hZmZmYWJiZWEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rl cy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNjgs NiArNjgsMTMgQEAKIAkJfSBcCiAJfSB3aGlsZSAoMCkKIAorLyogQ29weSBhIGZpZWxkIHRoYXQg aXMgYW4gYXJyYXkgd2l0aCBudW1FbGVtIGludHMgKi8KKyNkZWZpbmUgQ09QWV9JTlRfQVJSQVko ZmxkbmFtZSwgbnVtRWxlbSkgXAorCWRvIHsgXAorCQluZXdub2RlLT5mbGRuYW1lID0gKG51bUVs ZW0pID4gMCA/IHBhbGxvYygobnVtRWxlbSkgKiBzaXplb2YoaW50KSkgOiBOVUxMOyBcCisJCW1l bWNweShuZXdub2RlLT5mbGRuYW1lLCBmcm9tLT5mbGRuYW1lLCBzaXplb2YoaW50KSAqIChudW1F bGVtKSk7IFwKKwl9IHdoaWxlICgwKQorCiAvKiBDb3B5IGEgcGFyc2UgbG9jYXRpb24gZmllbGQg KGZvciBDb3B5LCB0aGlzIGlzIHNhbWUgYXMgc2NhbGFyIGNhc2UpICovCiAjZGVmaW5lIENPUFlf TE9DQVRJT05fRklFTEQoZmxkbmFtZSkgXAogCShuZXdub2RlLT5mbGRuYW1lID0gZnJvbS0+Zmxk bmFtZSkKQEAgLTk0LDggKzEwMSwxMCBAQCBfY29weVBsYW5uZWRTdG10KGNvbnN0IFBsYW5uZWRT dG10ICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJRUxEKHRyYW5zaWVudFBsYW4pOwogCUNPUFlfU0NB TEFSX0ZJRUxEKGRlcGVuZHNPblJvbGUpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKHBhcmFsbGVsTW9k ZU5lZWRlZCk7CisJQ09QWV9TQ0FMQVJfRklFTEQoY29udGFpbnNJbml0aWFsUHJ1bmluZyk7CiAJ Q09QWV9TQ0FMQVJfRklFTEQoaml0RmxhZ3MpOwogCUNPUFlfTk9ERV9GSUVMRChwbGFuVHJlZSk7 CisJQ09QWV9TQ0FMQVJfRklFTEQobnVtUGxhbk5vZGVzKTsKIAlDT1BZX05PREVfRklFTEQocnRh YmxlKTsKIAlDT1BZX05PREVfRklFTEQocmVzdWx0UmVsYXRpb25zKTsKIAlDT1BZX05PREVfRklF TEQoYXBwZW5kUmVsYXRpb25zKTsKQEAgLTEyODIsNiArMTI5MSw4IEBAIF9jb3B5UGFydGl0aW9u UHJ1bmVJbmZvKGNvbnN0IFBhcnRpdGlvblBydW5lSW5mbyAqZnJvbSkKIAlQYXJ0aXRpb25QcnVu ZUluZm8gKm5ld25vZGUgPSBtYWtlTm9kZShQYXJ0aXRpb25QcnVuZUluZm8pOwogCiAJQ09QWV9O T0RFX0ZJRUxEKHBydW5lX2luZm9zKTsKKwlDT1BZX1NDQUxBUl9GSUVMRChuZWVkc19pbml0X3By dW5pbmcpOworCUNPUFlfU0NBTEFSX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1bmluZyk7CiAJQ09QWV9C SVRNQVBTRVRfRklFTEQob3RoZXJfc3VicGxhbnMpOwogCiAJcmV0dXJuIG5ld25vZGU7CkBAIC01 MzczLDYgKzUzODQsMzMgQEAgX2NvcHlFeHRlbnNpYmxlTm9kZShjb25zdCBFeHRlbnNpYmxlTm9k ZSAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkJCWV4ZWNu b2Rlcy5oIGNvcHkgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0YXRpYyBFeGVjTG9ja1Jl bHNJbmZvICoKK19jb3B5RXhlY0xvY2tSZWxzSW5mbyhjb25zdCBFeGVjTG9ja1JlbHNJbmZvICpm cm9tKQoreworCUV4ZWNMb2NrUmVsc0luZm8gKm5ld25vZGUgPSBtYWtlTm9kZShFeGVjTG9ja1Jl bHNJbmZvKTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxzKTsKKwlDT1BZX1NDQUxB Ul9GSUVMRChudW1QbGFuTm9kZXMpOworCUNPUFlfTk9ERV9GSUVMRChpbml0UHJ1bmluZ091dHB1 dHMpOworCUNPUFlfSU5UX0FSUkFZKGlwb0luZGV4ZXMsIGZyb20tPm51bVBsYW5Ob2Rlcyk7CisK KwlyZXR1cm4gbmV3bm9kZTsKK30KKworc3RhdGljIFBsYW5Jbml0UHJ1bmluZ091dHB1dCAqCitf Y29weVBsYW5Jbml0UHJ1bmluZ091dHB1dChjb25zdCBQbGFuSW5pdFBydW5pbmdPdXRwdXQgKmZy b20pCit7CisJUGxhbkluaXRQcnVuaW5nT3V0cHV0ICpuZXdub2RlID0gbWFrZU5vZGUoUGxhbklu aXRQcnVuaW5nT3V0cHV0KTsKKworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKGluaXRpYWxseV92YWxp ZF9zdWJwbGFucyk7CisKKwlyZXR1cm4gbmV3bm9kZTsKK30KKwogLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJ CXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU0MjcsNyArNTQ2NSw2IEBA IF9jb3B5Qml0U3RyaW5nKGNvbnN0IEJpdFN0cmluZyAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsK IH0KIAotCiBzdGF0aWMgRm9yZWlnbktleUNhY2hlSW5mbyAqCiBfY29weUZvcmVpZ25LZXlDYWNo ZUluZm8oY29uc3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIHsKQEAgLTY0NTQsNiArNjQ5 MSwxNiBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCQkJcmV0dmFsID0gX2Nv cHlQdWJsaWNhdGlvblRhYmxlKGZyb20pOwogCQkJYnJlYWs7CiAKKwkJCS8qCisJCQkgKiBFWEVD VVRJT04gTk9ERVMKKwkJCSAqLworCQljYXNlIFRfRXhlY0xvY2tSZWxzSW5mbzoKKwkJCXJldHZh bCA9IF9jb3B5RXhlY0xvY2tSZWxzSW5mbyhmcm9tKTsKKwkJCWJyZWFrOworCQljYXNlIFRfUGxh bkluaXRQcnVuaW5nT3V0cHV0OgorCQkJcmV0dmFsID0gX2NvcHlQbGFuSW5pdFBydW5pbmdPdXRw dXQoZnJvbSk7CisJCQlicmVhazsKKwogCQkJLyoKIAkJCSAqIE1JU0NFTExBTkVPVVMgTk9ERVMK IAkJCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggMTA4ZWRlOWFmOS4uZTJkN2U2YmNhYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9u b2Rlcy9vdXRmdW5jcy5jCkBAIC0zMTIsOCArMzEyLDEwIEBAIF9vdXRQbGFubmVkU3RtdChTdHJp bmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lZFN0bXQgKm5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRCh0 cmFuc2llbnRQbGFuKTsKIAlXUklURV9CT09MX0ZJRUxEKGRlcGVuZHNPblJvbGUpOwogCVdSSVRF X0JPT0xfRklFTEQocGFyYWxsZWxNb2RlTmVlZGVkKTsKKwlXUklURV9CT09MX0ZJRUxEKGNvbnRh aW5zSW5pdGlhbFBydW5pbmcpOwogCVdSSVRFX0lOVF9GSUVMRChqaXRGbGFncyk7CiAJV1JJVEVf Tk9ERV9GSUVMRChwbGFuVHJlZSk7CisJV1JJVEVfSU5UX0ZJRUxEKG51bVBsYW5Ob2Rlcyk7CiAJ V1JJVEVfTk9ERV9GSUVMRChydGFibGUpOwogCVdSSVRFX05PREVfRklFTEQocmVzdWx0UmVsYXRp b25zKTsKIAlXUklURV9OT0RFX0ZJRUxEKGFwcGVuZFJlbGF0aW9ucyk7CkBAIC0xMDA4LDYgKzEw MTAsOCBAQCBfb3V0UGFydGl0aW9uUHJ1bmVJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQYXJ0 aXRpb25QcnVuZUluZm8gKm5vZGUpCiAJV1JJVEVfTk9ERV9UWVBFKCJQQVJUSVRJT05QUlVORUlO Rk8iKTsKIAogCVdSSVRFX05PREVfRklFTEQocHJ1bmVfaW5mb3MpOworCVdSSVRFX0JPT0xfRklF TEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlXUklURV9CT09MX0ZJRUxEKG5lZWRzX2V4ZWNfcHJ1 bmluZyk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKG90aGVyX3N1YnBsYW5zKTsKIH0KIApAQCAt MjgxOCw2ICsyODIyLDMxIEBAIF9vdXRFeHRlbnNpYmxlTm9kZShTdHJpbmdJbmZvIHN0ciwgY29u c3QgRXh0ZW5zaWJsZU5vZGUgKm5vZGUpCiAJbWV0aG9kcy0+bm9kZU91dChzdHIsIG5vZGUpOwog fQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKglTdHVmZiBmcm9tIGV4ZWNub2Rlcy5o CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorX291dEV4ZWNMb2Nr UmVsc0luZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEV4ZWNMb2NrUmVsc0luZm8gKm5vZGUpCit7 CisJV1JJVEVfTk9ERV9UWVBFKCJFWEVDTE9DS1JFTFNJTkZPIik7CisKKwlXUklURV9CSVRNQVBT RVRfRklFTEQobG9ja3JlbHMpOworCVdSSVRFX0lOVF9GSUVMRChudW1QbGFuTm9kZXMpOworCVdS SVRFX05PREVfRklFTEQoaW5pdFBydW5pbmdPdXRwdXRzKTsKKwlXUklURV9JTlRfQVJSQVkoaXBv SW5kZXhlcywgbm9kZS0+bnVtUGxhbk5vZGVzKTsKK30KKworc3RhdGljIHZvaWQKK19vdXRQbGFu SW5pdFBydW5pbmdPdXRwdXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5Jbml0UHJ1bmluZ091 dHB1dCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIlBMQU5JTklUUFJVTklOR09VVFBVVCIp OworCisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGluaXRpYWxseV92YWxpZF9zdWJwbGFucyk7Cit9 CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqCVN0dWZmIGZyb20gcGFyc2Vub2Rlcy5o LgpAQCAtNDcyMCw2ICs0NzQ5LDE2IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IHZv aWQgKm9iaikKIAkJCQlfb3V0SnNvbkl0ZW1Db2VyY2lvbnMoc3RyLCBvYmopOwogCQkJCWJyZWFr OwogCisJCQkJLyoKKwkJCQkgKiBFWEVDVVRJT04gTk9ERVMKKwkJCQkgKi8KKwkJCWNhc2UgVF9F eGVjTG9ja1JlbHNJbmZvOgorCQkJCV9vdXRFeGVjTG9ja1JlbHNJbmZvKHN0ciwgb2JqKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgVF9QbGFuSW5pdFBydW5pbmdPdXRwdXQ6CisJCQkJX291dFBsYW5J bml0UHJ1bmluZ091dHB1dChzdHIsIG9iaik7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAK IAkJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMgYi9zcmMv YmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYwppbmRleCBjZTE0NmRkNDVlLi44ODE3M2Y3MGExIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9yZWFkZnVuY3MuYwpAQCAtMTc4Miw4ICsxNzgyLDEwIEBAIF9yZWFkUGxhbm5lZFN0 bXQodm9pZCkKIAlSRUFEX0JPT0xfRklFTEQodHJhbnNpZW50UGxhbik7CiAJUkVBRF9CT09MX0ZJ RUxEKGRlcGVuZHNPblJvbGUpOwogCVJFQURfQk9PTF9GSUVMRChwYXJhbGxlbE1vZGVOZWVkZWQp OworCVJFQURfQk9PTF9GSUVMRChjb250YWluc0luaXRpYWxQcnVuaW5nKTsKIAlSRUFEX0lOVF9G SUVMRChqaXRGbGFncyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHBsYW5UcmVlKTsKKwlSRUFEX0lOVF9G SUVMRChudW1QbGFuTm9kZXMpOwogCVJFQURfTk9ERV9GSUVMRChydGFibGUpOwogCVJFQURfTk9E RV9GSUVMRChyZXN1bHRSZWxhdGlvbnMpOwogCVJFQURfTk9ERV9GSUVMRChhcHBlbmRSZWxhdGlv bnMpOwpAQCAtMjczNSw2ICsyNzM3LDggQEAgX3JlYWRQYXJ0aXRpb25QcnVuZUluZm8odm9pZCkK IAlSRUFEX0xPQ0FMUyhQYXJ0aXRpb25QcnVuZUluZm8pOwogCiAJUkVBRF9OT0RFX0ZJRUxEKHBy dW5lX2luZm9zKTsKKwlSRUFEX0JPT0xfRklFTEQobmVlZHNfaW5pdF9wcnVuaW5nKTsKKwlSRUFE X0JPT0xfRklFTEQobmVlZHNfZXhlY19wcnVuaW5nKTsKIAlSRUFEX0JJVE1BUFNFVF9GSUVMRChv dGhlcl9zdWJwbGFucyk7CiAKIAlSRUFEX0RPTkUoKTsKQEAgLTI5MDQsNiArMjkwOCwzNSBAQCBf cmVhZFBhcnRpdGlvblJhbmdlRGF0dW0odm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorLyoKKyAq IF9yZWFkRXhlY0xvY2tSZWxzSW5mbworICovCitzdGF0aWMgRXhlY0xvY2tSZWxzSW5mbyAqCitf cmVhZEV4ZWNMb2NrUmVsc0luZm8odm9pZCkKK3sKKwlSRUFEX0xPQ0FMUyhFeGVjTG9ja1JlbHNJ bmZvKTsKKworCVJFQURfQklUTUFQU0VUX0ZJRUxEKGxvY2tyZWxzKTsKKwlSRUFEX0lOVF9GSUVM RChudW1QbGFuTm9kZXMpOworCVJFQURfTk9ERV9GSUVMRChpbml0UHJ1bmluZ091dHB1dHMpOwor CVJFQURfSU5UX0FSUkFZKGlwb0luZGV4ZXMsIGxvY2FsX25vZGUtPm51bVBsYW5Ob2Rlcyk7CisK KwlSRUFEX0RPTkUoKTsKK30KKworLyoKKyAqIF9yZWFkUGxhbkluaXRQcnVuaW5nT3V0cHV0Cisg Ki8KK3N0YXRpYyBQbGFuSW5pdFBydW5pbmdPdXRwdXQgKgorX3JlYWRQbGFuSW5pdFBydW5pbmdP dXRwdXQodm9pZCkKK3sKKwlSRUFEX0xPQ0FMUyhQbGFuSW5pdFBydW5pbmdPdXRwdXQpOworCisJ UkVBRF9CSVRNQVBTRVRfRklFTEQoaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKKworCVJFQURf RE9ORSgpOworfQorCiAvKgogICogcGFyc2VOb2RlU3RyaW5nCiAgKgpAQCAtMzE5Nyw2ICszMjMw LDEwIEBAIHBhcnNlTm9kZVN0cmluZyh2b2lkKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEpzb25D b2VyY2lvbigpOwogCWVsc2UgaWYgKE1BVENIKCJKU09OSVRFTUNPRVJDSU9OUyIsIDE3KSkKIAkJ cmV0dXJuX3ZhbHVlID0gX3JlYWRKc29uSXRlbUNvZXJjaW9ucygpOworCWVsc2UgaWYgKE1BVENI KCJFWEVDTE9DS1JFTFNJTkZPIiwgMTYpKQorCQlyZXR1cm5fdmFsdWUgPSBfcmVhZEV4ZWNMb2Nr UmVsc0luZm8oKTsKKwllbHNlIGlmIChNQVRDSCgiUExBTklOSVRQUlVOSU5HT1VUUFVUIiwgMjEp KQorCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFBsYW5Jbml0UHJ1bmluZ091dHB1dCgpOwogCWVsc2UK IAl7CiAJCWVsb2coRVJST1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBzdHJpbmcgXCIlLjMyc1wi Li4uIiwgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGM3Njli NGI0YjkuLjRjNTg2YWMxZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTUxNyw3ICs1MTcsOSBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnRyYW5zaWVudFBs YW4gPSBnbG9iLT50cmFuc2llbnRQbGFuOwogCXJlc3VsdC0+ZGVwZW5kc09uUm9sZSA9IGdsb2It PmRlcGVuZHNPblJvbGU7CiAJcmVzdWx0LT5wYXJhbGxlbE1vZGVOZWVkZWQgPSBnbG9iLT5wYXJh bGxlbE1vZGVOZWVkZWQ7CisJcmVzdWx0LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gZ2xvYi0+ Y29udGFpbnNJbml0aWFsUHJ1bmluZzsKIAlyZXN1bHQtPnBsYW5UcmVlID0gdG9wX3BsYW47CisJ cmVzdWx0LT5udW1QbGFuTm9kZXMgPSBnbG9iLT5sYXN0UGxhbk5vZGVJZDsKIAlyZXN1bHQtPnJ0 YWJsZSA9IGdsb2ItPmZpbmFscnRhYmxlOwogCXJlc3VsdC0+cmVzdWx0UmVsYXRpb25zID0gZ2xv Yi0+cmVzdWx0UmVsYXRpb25zOwogCXJlc3VsdC0+YXBwZW5kUmVsYXRpb25zID0gZ2xvYi0+YXBw ZW5kUmVsYXRpb25zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0 cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IDgyMTRl ZGVjNTQuLmExYzZjM2NhYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAg LTE2MjMsNiArMTYyMyw5IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9v dCwKIAkJCQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKIAkJCX0KIAkJfQorCisJCWlmIChh cGxhbi0+cGFydF9wcnVuZV9pbmZvLT5uZWVkc19pbml0X3BydW5pbmcpCisJCQlyb290LT5nbG9i LT5jb250YWluc0luaXRpYWxQcnVuaW5nID0gdHJ1ZTsKIAl9CiAKIAkvKiBXZSBkb24ndCBuZWVk IHRvIHJlY3Vyc2UgdG8gbGVmdHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwpAQCAtMTcxMCw2ICsx NzEzLDkgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQkJcGluZm8tPnJ0aW5kZXggKz0gcnRvZmZzZXQ7CiAJCQl9CiAJCX0KKworCQlpZiAobXBsYW4t PnBhcnRfcHJ1bmVfaW5mby0+bmVlZHNfaW5pdF9wcnVuaW5nKQorCQkJcm9vdC0+Z2xvYi0+Y29u dGFpbnNJbml0aWFsUHJ1bmluZyA9IHRydWU7CiAJfQogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byBy ZWN1cnNlIHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmlu Zy9wYXJ0cHJ1bmUuYwppbmRleCA3MDgwY2IyNWQ5Li4zMzIyZGM3OWYyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFy dGl0aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC0xNDQsNyArMTQ0LDkgQEAgc3RhdGljIExpc3QgKm1h a2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJ CSAgIExpc3QgKnBydW5lcXVhbCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMs CiAJCQkJCQkJCQkJICAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKLQkJCQkJCQkJCQkgICBCaXRt YXBzZXQgKiptYXRjaGVkc3VicGxhbnMpOworCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKm1hdGNo ZWRzdWJwbGFucywKKwkJCQkJCQkJCQkgICBib29sICpuZWVkc19pbml0X3BydW5pbmcsCisJCQkJ CQkJCQkJICAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKTsKIHN0YXRpYyB2b2lkIGdlbl9wYXJ0 cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQlQYXJ0 Q2xhdXNlVGFyZ2V0IHRhcmdldCwKIAkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0 ICpjb250ZXh0KTsKQEAgLTIzMCw2ICsyMzIsOCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8o UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCSAgICpyZWxp ZF9zdWJwbGFuX21hcDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlpbnQJCQlpOworCWJvb2wJCW5lZWRz X2luaXRfcHJ1bmluZyA9IGZhbHNlOworCWJvb2wJCW5lZWRzX2V4ZWNfcHJ1bmluZyA9IGZhbHNl OwogCiAJLyoKIAkgKiBTY2FuIHRoZSBzdWJwYXRocyB0byBzZWUgd2hpY2ggb25lcyBhcmUgc2Nh bnMgb2YgcGFydGl0aW9uIGNoaWxkCkBAIC0zMDksMTIgKzMxMywxNiBAQCBtYWtlX3BhcnRpdGlv bl9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJ Qml0bWFwc2V0ICAqcGFydHJlbGlkcyA9IChCaXRtYXBzZXQgKikgbGZpcnN0KGxjKTsKIAkJTGlz dAkgICAqcGluZm9saXN0OwogCQlCaXRtYXBzZXQgICptYXRjaGVkc3VicGxhbnMgPSBOVUxMOwor CQlib29sCQlwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJYm9vbAkJcGFydHJlbF9uZWVk c19leGVjX3BydW5pbmc7CiAKIAkJcGluZm9saXN0ID0gbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVu ZWluZm8ocm9vdCwgcGFyZW50cmVsLAogCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwsCiAJCQkJCQkJ CQkJCQkgIHBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJCQkgIHJlbGlkX3N1YnBsYW5fbWFwLAotCQkJ CQkJCQkJCQkJICAmbWF0Y2hlZHN1YnBsYW5zKTsKKwkJCQkJCQkJCQkJCSAgJm1hdGNoZWRzdWJw bGFucywKKwkJCQkJCQkJCQkJCSAgJnBhcnRyZWxfbmVlZHNfaW5pdF9wcnVuaW5nLAorCQkJCQkJ CQkJCQkJICAmcGFydHJlbF9uZWVkc19leGVjX3BydW5pbmcpOwogCiAJCS8qIFdoZW4gcHJ1bmlu ZyBpcyBwb3NzaWJsZSwgcmVjb3JkIHRoZSBtYXRjaGVkIHN1YnBsYW5zICovCiAJCWlmIChwaW5m b2xpc3QgIT0gTklMKQpAQCAtMzIzLDYgKzMzMSwxMCBAQCBtYWtlX3BhcnRpdGlvbl9wcnVuZWlu Zm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCWFsbG1hdGNo ZWRzdWJwbGFucyA9IGJtc19qb2luKG1hdGNoZWRzdWJwbGFucywKIAkJCQkJCQkJCQkgIGFsbG1h dGNoZWRzdWJwbGFucyk7CiAJCX0KKwkJaWYgKCFuZWVkc19pbml0X3BydW5pbmcpCisJCQluZWVk c19pbml0X3BydW5pbmcgPSBwYXJ0cmVsX25lZWRzX2luaXRfcHJ1bmluZzsKKwkJaWYgKCFuZWVk c19leGVjX3BydW5pbmcpCisJCQluZWVkc19leGVjX3BydW5pbmcgPSBwYXJ0cmVsX25lZWRzX2V4 ZWNfcHJ1bmluZzsKIAl9CiAKIAlwZnJlZShyZWxpZF9zdWJwbGFuX21hcCk7CkBAIC0zMzcsNiAr MzQ5LDggQEAgbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpwYXJlbnRyZWwsCiAJLyogRWxzZSBidWlsZCB0aGUgcmVzdWx0IGRhdGEgc3RydWN0 dXJlICovCiAJcHJ1bmVpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9uUHJ1bmVJbmZvKTsKIAlwcnVu ZWluZm8tPnBydW5lX2luZm9zID0gcHJ1bmVyZWxpbmZvczsKKwlwcnVuZWluZm8tPm5lZWRzX2lu aXRfcHJ1bmluZyA9IG5lZWRzX2luaXRfcHJ1bmluZzsKKwlwcnVuZWluZm8tPm5lZWRzX2V4ZWNf cHJ1bmluZyA9IG5lZWRzX2V4ZWNfcHJ1bmluZzsKIAogCS8qCiAJICogU29tZSBzdWJwbGFucyBt YXkgbm90IGJlbG9uZyB0byBhbnkgb2YgdGhlIGlkZW50aWZpZWQgcGFydGl0aW9uZWQgcmVscy4K QEAgLTQzNSwxMyArNDQ5LDE4IEBAIGFkZF9wYXJ0X3JlbGlkcyhMaXN0ICphbGxwYXJ0cmVsaWRz LCBCaXRtYXBzZXQgKnBhcnRyZWxpZHMpCiAgKiBJZiB3ZSBjYW5ub3QgZmluZCBhbnkgdXNlZnVs IHJ1bi10aW1lIHBydW5pbmcgc3RlcHMsIHJldHVybiBOSUwuCiAgKiBIb3dldmVyLCBvbiBzdWNj ZXNzLCBlYWNoIHJlbCBpZGVudGlmaWVkIGluIHBhcnRyZWxpZHMgd2lsbCBoYXZlCiAgKiBhbiBl bGVtZW50IGluIHRoZSByZXN1bHQgbGlzdCwgZXZlbiBpZiBzb21lIG9mIHRoZW0gYXJlIHVzZWxl c3MuCisgKiAqbmVlZHNfaW5pdF9wcnVuaW5nIGFuZCAqbmVlZHNfZXhlY19wcnVuaW5nIGFyZSBz ZXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHJldHVybmVkIFBhcnRpdGlvbmVkUmVsUHJ1bmVJ bmZvcyBjb250YWlucyBwcnVuaW5nIHN0ZXBzIHRoYXQgY2FuIGJlCisgKiBwZXJmb3JtZWQgYmVm b3JlIGFuZCBhZnRlciBleGVjdXRpb24gYmVnaW5zLCByZXNwZWN0aXZlbHkuCiAgKi8KIHN0YXRp YyBMaXN0ICoKIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCQkJCQkJICBMaXN0ICpwcnVuZXF1YWwsCiAJCQkJ CQkJICBCaXRtYXBzZXQgKnBhcnRyZWxpZHMsCiAJCQkJCQkJICBpbnQgKnJlbGlkX3N1YnBsYW5f bWFwLAotCQkJCQkJCSAgQml0bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zKQorCQkJCQkJCSAgQml0 bWFwc2V0ICoqbWF0Y2hlZHN1YnBsYW5zLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfaW5pdF9wcnVu aW5nLAorCQkJCQkJCSAgYm9vbCAqbmVlZHNfZXhlY19wcnVuaW5nKQogewogCVJlbE9wdEluZm8g KnRhcmdldHBhcnQgPSBOVUxMOwogCUxpc3QJICAgKnBpbmZvbGlzdCA9IE5JTDsKQEAgLTQ1Miw2 ICs0NzEsMTAgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAlpbnQJCQlydGk7CiAJaW50CQkJaTsKIAorCS8q IFdpbGwgZmluZCBvdXQgYmVsb3cuICovCisJKm5lZWRzX2luaXRfcHJ1bmluZyA9IGZhbHNlOwor CSpuZWVkc19leGVjX3BydW5pbmcgPSBmYWxzZTsKKwogCS8qCiAJICogRXhhbWluZSBlYWNoIHBh cnRpdGlvbmVkIHJlbCwgY29uc3RydWN0aW5nIGEgdGVtcG9yYXJ5IGFycmF5IHRvIG1hcAogCSAq IGZyb20gcGxhbm5lciByZWxpZHMgdG8gaW5kZXggb2YgdGhlIHBhcnRpdGlvbmVkIHJlbCwgYW5k IGJ1aWxkaW5nIGEKQEAgLTUzOSw2ICs1NjIsOSBAQCBtYWtlX3BhcnRpdGlvbmVkcmVsX3BydW5l aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkgKiBleGVj dXRvciBwZXItc2NhbiBwcnVuaW5nIHN0ZXBzLiAgVGhpcyBmaXJzdCBwYXNzIGNyZWF0ZXMgc3Rh cnR1cAogCQkgKiBwcnVuaW5nIHN0ZXBzIGFuZCBkZXRlY3RzIHdoZXRoZXIgdGhlcmUncyBhbnkg cG9zc2libHktdXNlZnVsIHF1YWxzCiAJCSAqIHRoYXQgd291bGQgcmVxdWlyZSBwZXItc2NhbiBw cnVuaW5nLgorCQkgKgorCQkgKiBJbiB0aGUgZmlyc3QgcGFzcywgd2Ugbm90ZSB3aGV0aGVyIHRo ZSAybmQgcGFzcyBpcyBuZWNlc3NhcnkgYnkKKwkJICogYnkgbm90aW5nIHRoZSBwcmVzZW5jZSBv ZiBFWEVDIHBhcmFtZXRlcnMuCiAJCSAqLwogCQlnZW5fcGFydHBydW5lX3N0ZXBzKHN1YnBhcnQs IHBhcnRwcnVuZXF1YWwsIFBBUlRUQVJHRVRfSU5JVElBTCwKIAkJCQkJCQkmY29udGV4dCk7CkBA IC02MTMsNiArNjM5LDExIEBAIG1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAJCXBpbmZvLT5leGVjcGFyYW1pZHMg PSBleGVjcGFyYW1pZHM7CiAJCS8qIFJlbWFpbmluZyBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgaW4g dGhlIG5leHQgbG9vcCAqLwogCisJCWlmICghKm5lZWRzX2luaXRfcHJ1bmluZykKKwkJCSpuZWVk c19pbml0X3BydW5pbmcgPSAoaW5pdGlhbF9wcnVuaW5nX3N0ZXBzICE9IE5JTCk7CisJCWlmICgh Km5lZWRzX2V4ZWNfcHJ1bmluZykKKwkJCSpuZWVkc19leGVjX3BydW5pbmcgPSAoZXhlY19wcnVu aW5nX3N0ZXBzICE9IE5JTCk7CisKIAkJcGluZm9saXN0ID0gbGFwcGVuZChwaW5mb2xpc3QsIHBp bmZvKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBiYTJmY2ZlYjRhLi4wODVlYjNmMjA5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jCkBAIC05NDUsMTUgKzk0NSwxNyBAQCBwZ19wbGFuX3F1ZXJ5KFF1ZXJ5 ICpxdWVyeXRyZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMs CiAgKiBGb3Igbm9ybWFsIG9wdGltaXphYmxlIHN0YXRlbWVudHMsIGludm9rZSB0aGUgcGxhbm5l ci4gIEZvciB1dGlsaXR5CiAgKiBzdGF0ZW1lbnRzLCBqdXN0IG1ha2UgYSB3cmFwcGVyIFBsYW5u ZWRTdG10IG5vZGUuCiAgKgotICogVGhlIHJlc3VsdCBpcyBhIGxpc3Qgb2YgUGxhbm5lZFN0bXQg bm9kZXMuCisgKiBUaGUgcmVzdWx0IGlzIGEgbGlzdCBvZiBQbGFubmVkU3RtdCBub2Rlcy4gIEFs c28sIGEgTlVMTCBpcyBhcHBlbmRlZCB0bworICogKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCBmb3Ig ZWFjaCBQbGFubmVkU3RtdCBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbGlzdC4KICAqLwogTGlzdCAq CiBwZ19wbGFuX3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3Ry aW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKLQkJCQlQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKQor CQkJCVBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMsIExpc3QgKipleGVjbG9ja3JlbHNpbmZvX2xp c3QpCiB7CiAJTGlzdAkgICAqc3RtdF9saXN0ID0gTklMOwogCUxpc3RDZWxsICAgKnF1ZXJ5X2xp c3Q7CiAKKwkqZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gTklMOwogCWZvcmVhY2gocXVlcnlfbGlz dCwgcXVlcnl0cmVlcykKIAl7CiAJCVF1ZXJ5CSAgICpxdWVyeSA9IGxmaXJzdF9ub2RlKFF1ZXJ5 LCBxdWVyeV9saXN0KTsKQEAgLTk3Nyw2ICs5NzksNyBAQCBwZ19wbGFuX3F1ZXJpZXMoTGlzdCAq cXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywK IAkJfQogCiAJCXN0bXRfbGlzdCA9IGxhcHBlbmQoc3RtdF9saXN0LCBzdG10KTsKKwkJKmV4ZWNs b2NrcmVsc2luZm9fbGlzdCA9IGxhcHBlbmQoKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCwgTlVMTCk7 CiAJfQogCiAJcmV0dXJuIHN0bXRfbGlzdDsKQEAgLTEwODAsNyArMTA4Myw4IEBAIGV4ZWNfc2lt cGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJUXVlcnlDb21wbGV0aW9uIHFj OwogCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9IE5VTEw7CiAJCUxpc3QJ ICAgKnF1ZXJ5dHJlZV9saXN0LAotCQkJCSAgICpwbGFudHJlZV9saXN0OworCQkJCSAgICpwbGFu dHJlZV9saXN0LAorCQkJCSAgICpwbGFudHJlZV9leGVjbG9ja3JlbHNpbmZvX2xpc3Q7CiAJCVBv cnRhbAkJcG9ydGFsOwogCQlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOwogCQlpbnQxNgkJZm9ybWF0 OwpAQCAtMTE2Nyw3ICsxMTcxLDggQEAgZXhlY19zaW1wbGVfcXVlcnkoY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nKQogCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CiAKIAkJcGxhbnRyZWVfbGlz dCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgcXVlcnlfc3RyaW5nLAotCQkJCQkJ CQkJCUNVUlNPUl9PUFRfUEFSQUxMRUxfT0ssIE5VTEwpOworCQkJCQkJCQkJCUNVUlNPUl9PUFRf UEFSQUxMRUxfT0ssIE5VTEwsCisJCQkJCQkJCQkJJnBsYW50cmVlX2V4ZWNsb2NrcmVsc2luZm9f bGlzdCk7CiAKIAkJLyoKIAkJICogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJz aW5nL3BsYW5uaW5nLgpAQCAtMTIwMyw2ICsxMjA4LDcgQEAgZXhlY19zaW1wbGVfcXVlcnkoY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nKQogCQkJCQkJICBxdWVyeV9zdHJpbmcsCiAJCQkJCQkgIGNv bW1hbmRUYWcsCiAJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIHBsYW50cmVlX2V4ZWNs b2NrcmVsc2luZm9fbGlzdCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoKQEAgLTE5OTEsNiArMTk5 Nyw3IEBAIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJ ICBxdWVyeV9zdHJpbmcsCiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+ c3RtdF9saXN0LAorCQkJCQkgIGNwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2xpc3QsCiAJCQkJCSAg Y3BsYW4pOwogCiAJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJhbWV0ZXIg SS9PIGFuZCBwYXJzaW5nL3BsYW5uaW5nICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3BxdWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCA1YWE1YTM1MGYzLi4w ZmQ4YzY1ZGU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKQEAgLTM1LDcgKzM1LDcgQEAKIFBvcnRhbAkJQWN0aXZl UG9ydGFsID0gTlVMTDsKIAogCi1zdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQg KnBsYW4sCitzdGF0aWMgdm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sIEV4ZWNM b2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNl VGV4dCwKIAkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25t ZW50ICpxdWVyeUVudiwKQEAgLTY1LDYgKzY1LDcgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdp bmQoUG9ydGFsIHBvcnRhbCk7CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVs c2luZm8sCiAJCQkJY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hv dCwKIAkJCQlTbmFwc2hvdCBjcm9zc2NoZWNrX3NuYXBzaG90LApAQCAtNzcsNiArNzgsNyBAQCBD cmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAogCiAJcWQtPm9wZXJhdGlv biA9IHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZTsJLyogb3BlcmF0aW9uICovCiAJcWQtPnBsYW5u ZWRzdG10ID0gcGxhbm5lZHN0bXQ7CS8qIHBsYW4gKi8KKwlxZC0+ZXhlY2xvY2tyZWxzaW5mbyA9 IGV4ZWNsb2NrcmVsc2luZm87CQkvKiBFeGVjdXRvckdldExvY2tSZWxzKCkgb3V0cHV0IGZvciBw bGFuICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJ cWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICov CiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTEyMiw2ICsxMjQsNyBAQCBGcmVlUXVlcnlE ZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRB TF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhl IHF1ZXJ5CisgKglleGVjbG9ja3JlbHNpbmZvOiBFeGVjdXRvckdldExvY2tSZWxzKCkgb3V0cHV0 IGZvciB0aGUgcGxhbiB0cmVlCiAgKglzb3VyY2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhl IHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJhbWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUg dG8gc2VuZCByZXN1bHRzCkBAIC0xMzQsNiArMTM3LDcgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURl c2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9pZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpw bGFuLAorCQkJIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm8sCiAJCQkgY29uc3Qg Y2hhciAqc291cmNlVGV4dCwKIAkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCSBRdWVyeUVu dmlyb25tZW50ICpxdWVyeUVudiwKQEAgLTE0NSw3ICsxNDksNyBAQCBQcm9jZXNzUXVlcnkoUGxh bm5lZFN0bXQgKnBsYW4sCiAJLyoKIAkgKiBDcmVhdGUgdGhlIFF1ZXJ5RGVzYyBvYmplY3QKIAkg Ki8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgc291cmNlVGV4dCwKKwlxdWVy eURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgZXhlY2xvY2tyZWxzaW5mbywgc291cmNlVGV4 dCwKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJ CQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCAwKTsKIApAQCAtNDkzLDYgKzQ5Nyw3IEBAIFBvcnRh bFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJCSAqIHRoZSBk ZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJCQlxdWVyeURlc2MgPSBDcmVhdGVR dWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwgcG9ydGFsLT5zdG10cyksCisJCQkJ CQkJCQkJCWxpbml0aWFsX25vZGUoRXhlY0xvY2tSZWxzSW5mbywgcG9ydGFsLT5leGVjbG9ja3Jl bHNpbmZvcyksCiAJCQkJCQkJCQkJCXBvcnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkJCQkJR2V0 QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCQkJCQkJSW52YWxpZFNuYXBzaG90LApAQCAtMTE5Myw3 ICsxMTk4LDggQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCSAgIFF1ZXJ5Q29t cGxldGlvbiAqcWMpCiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90X3NldCA9IGZhbHNlOwotCUxp c3RDZWxsICAgKnN0bXRsaXN0X2l0ZW07CisJTGlzdENlbGwgICAqc3RtdGxpc3RfaXRlbSwKKwkJ CSAgICpleGVjbG9ja3JlbHNpbmZvbGlzdF9pdGVtOwogCiAJLyoKIAkgKiBJZiB0aGUgZGVzdGlu YXRpb24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9uZS4gIFRoZQpAQCAt MTIxNCw5ICsxMjIwLDEyIEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBwb3J0YWwsCiAJICogTG9v cCB0byBoYW5kbGUgdGhlIGluZGl2aWR1YWwgcXVlcmllcyBnZW5lcmF0ZWQgZnJvbSBhIHNpbmds ZSBwYXJzZXRyZWUKIAkgKiBieSBhbmFseXNpcyBhbmQgcmV3cml0ZS4KIAkgKi8KLQlmb3JlYWNo KHN0bXRsaXN0X2l0ZW0sIHBvcnRhbC0+c3RtdHMpCisJZm9yYm90aChzdG10bGlzdF9pdGVtLCBw b3J0YWwtPnN0bXRzLAorCQkJZXhlY2xvY2tyZWxzaW5mb2xpc3RfaXRlbSwgcG9ydGFsLT5leGVj bG9ja3JlbHNpbmZvcykKIAl7CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBs YW5uZWRTdG10LCBzdG10bGlzdF9pdGVtKTsKKwkJRXhlY0xvY2tSZWxzSW5mbyAqZXhlY2xvY2ty ZWxzaW5mbyA9IGxmaXJzdF9ub2RlKEV4ZWNMb2NrUmVsc0luZm8sCisJCQkJCQkJCQkJCSAgIGV4 ZWNsb2NrcmVsc2luZm9saXN0X2l0ZW0pOwogCiAJCS8qCiAJCSAqIElmIHdlIGdvdCBhIGNhbmNl bCBzaWduYWwgaW4gcHJpb3IgY29tbWFuZCwgcXVpdApAQCAtMTI3NCw3ICsxMjgzLDcgQEAgUG9y dGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWlmIChwc3RtdC0+Y2FuU2V0VGFnKQogCQkJ ewogCQkJCS8qIHN0YXRlbWVudCBjYW4gc2V0IHRhZyBzdHJpbmcgKi8KLQkJCQlQcm9jZXNzUXVl cnkocHN0bXQsCisJCQkJUHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLAogCQkJ CQkJCSBwb3J0YWwtPnNvdXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAog CQkJCQkJCSBwb3J0YWwtPnF1ZXJ5RW52LApAQCAtMTI4Myw3ICsxMjkyLDcgQEAgUG9ydGFsUnVu TXVsdGkoUG9ydGFsIHBvcnRhbCwKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBzdG10IGFkZGVkIGJ5 IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8KLQkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCisJCQkJ UHJvY2Vzc1F1ZXJ5KHBzdG10LCBleGVjbG9ja3JlbHNpbmZvLAogCQkJCQkJCSBwb3J0YWwtPnNv dXJjZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwt PnF1ZXJ5RW52LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hl LmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwppbmRleCA0Y2Y2ZGI1MDRm Li45ZjVhNDBhMGE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2Fj aGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpAQCAtOTksMTQg Kzk5LDE2IEBAIHN0YXRpYyBkbGlzdF9oZWFkIGNhY2hlZF9leHByZXNzaW9uX2xpc3QgPSBETElT VF9TVEFUSUNfSU5JVChjYWNoZWRfZXhwcmVzc2lvbl9sCiBzdGF0aWMgdm9pZCBSZWxlYXNlR2Vu ZXJpY1BsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMgTGlzdCAqUmV2 YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCiAJCQkJCQkJ CSAgIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKLXN0YXRpYyBib29sIENoZWNrQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKTsKK3N0YXRpYyBib29sIENoZWNrQ2Fj aGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5k UGFyYW1zKTsKIHN0YXRpYyBDYWNoZWRQbGFuICpCdWlsZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKK3N0YXRpYyB2b2lkIENh Y2hlZFBsYW5TYXZlRXhlY0xvY2tSZWxzSW5mb3MoQ2FjaGVkUGxhbiAqcGxhbiwgTGlzdCAqZXhl Y2xvY2tyZWxzaW5mb19saXN0KTsKIHN0YXRpYyBib29sIGNob29zZV9jdXN0b21fcGxhbihDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCSAgIFBhcmFtTGlzdEluZm8gYm91bmRQ YXJhbXMpOwogc3RhdGljIGRvdWJsZSBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4s IGJvb2wgaW5jbHVkZV9wbGFubmVyKTsKIHN0YXRpYyBRdWVyeSAqUXVlcnlMaXN0R2V0UHJpbWFy eVN0bXQoTGlzdCAqc3RtdHMpOwotc3RhdGljIHZvaWQgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlz dCAqc3RtdF9saXN0LCBib29sIGFjcXVpcmUpOworc3RhdGljIExpc3QgKkFjcXVpcmVFeGVjdXRv ckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CitzdGF0 aWMgdm9pZCBSZWxlYXNlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIExpc3QgKmV4ZWNs b2NrcmVsc2luZm9fbGlzdCk7CiBzdGF0aWMgdm9pZCBBY3F1aXJlUGxhbm5lckxvY2tzKExpc3Qg KnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKTsKIHN0YXRpYyB2b2lkIFNjYW5RdWVyeUZvckxvY2tz KFF1ZXJ5ICpwYXJzZXRyZWUsIGJvb2wgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBTY2FuUXVlcnlX YWxrZXIoTm9kZSAqbm9kZSwgYm9vbCAqYWNxdWlyZSk7CkBAIC03OTAsOSArNzkyLDIxIEBAIFJl dmFsaWRhdGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogICoKICAq IE9uIGEgInRydWUiIHJldHVybiwgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9ja3MgbmVlZGVkIHRv IHJ1biB0aGUgcGxhbi4KICAqIChXZSBtdXN0IGRvIHRoaXMgZm9yIHRoZSAidHJ1ZSIgcmVzdWx0 IHRvIGJlIHJhY2UtY29uZGl0aW9uLWZyZWUuKQorICoKKyAqIElmIHRoZSBDYWNoZWRQbGFuIGlz IHZhbGlkLCB0aGlzIG1heSBpbiBzb21lIGNhc2VzIGNhbGwgRXhlY3V0b3JHZXRMb2NrUmVscwor ICogb24gZWFjaCBQbGFubmVkU3RtdCBjb250YWluZWQgaW4gaXQgdG8gZGV0ZXJtaW5lIHRoZSBz ZXQgb2YgcmVsYXRpb25zIHRvIGJlCisgKiBsb2NrZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3Mo KSwgaW5zdGVhZCBvZiBqdXN0IHNjYW5uaW5nIGl0cyByYW5nZSB0YWJsZSwKKyAqIHdoaWNoIGlz IGRvbmUgdG8gcHJ1bmUgYXdheSBhbnkgbm9kZXMgaW4gdGhlIHRyZWUgdGhhdCBuZWVkIG5vdCBi ZSBleGVjdXRlZAorICogYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBpbml0aWFsIHBhcnRpdGlvbiBw cnVuaW5nLiAgUmVzdWx0aW5nCisgKiBFeGVjTG9ja1JlbHNJbmZvIG5vZGVzIGNvbnRhaW5pbmcg dGhlIHJlc3VsdCBvZiBzdWNoIHBydW5pbmcsIGFsbG9jYXRlZCBpbgorICogYSBjaGlsZCBjb250 ZXh0IG9mIHRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGhlIHBsYW4gaXRzZWxmLCBhcmUgYWRkZWQg aW50bworICogcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0LiAgVGhlIHByZXZpb3VzIGNvbnRl bnRzIG9mIHRoZSBsaXN0IGZyb20gdGhlCisgKiBsYXN0IGludm9jYXRpb24gb24gdGhlIHNhbWUg Q2FjaGVkUGxhbiBhcmUgZGVsZXRlZCwgYmVjYXVzZSB0aGV5IHdvdWxkIG5vCisgKiBsb25nZXIg YmUgdmFsaWQgZ2l2ZW4gdGhlIGZyZXNoIHNldCBvZiBwYXJhbWV0ZXIgdmFsdWVzIHdoaWNoIG1h eSBiZSB1c2VkCisgKiBhcyBwcnVuaW5nIHBhcmFtZXRlcnMuCiAgKi8KIHN0YXRpYyBib29sCi1D aGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKK0NoZWNrQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFy YW1zKQogewogCUNhY2hlZFBsYW4gKnBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKIApAQCAtODIw LDEzICs4MzQsMjUgQEAgQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UpCiAJICovCiAJaWYgKHBsYW4tPmlzX3ZhbGlkKQogCXsKKwkJTGlzdCAgICpleGVjbG9ja3Jl bHNpbmZvX2xpc3Q7CisKIAkJLyoKIAkJICogUGxhbiBtdXN0IGhhdmUgcG9zaXRpdmUgcmVmY291 bnQgYmVjYXVzZSBpdCBpcyByZWZlcmVuY2VkIGJ5CiAJCSAqIHBsYW5zb3VyY2U7IHNvIG5vIG5l ZWQgdG8gZmVhciBpdCBkaXNhcHBlYXJzIHVuZGVyIHVzIGhlcmUuCiAJCSAqLwogCQlBc3NlcnQo cGxhbi0+cmVmY291bnQgPiAwKTsKIAotCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10 X2xpc3QsIHRydWUpOworCQkvKgorCQkgKiBMb2NrIHJlbGF0aW9ucyBzY2FubmVkIGJ5IHRoZSBw bGFuLiAgSWYgRXhlY3V0b3JHZXRMb2NrUmVscygpIGFza2VkCisJCSAqIHRvIG9taXQgc29tZSBy ZWxhdGlvbnMgYmVjYXVzZSB0aGUgcGxhbiBub2RlcyB0aGF0IHNjYW4gdGhlbSB3ZXJlCisJCSAq IGZvdW5kIHRvIGJlIHBydW5lZCwgdGhlIGV4ZWN1dG9yIHdpbGwgYmUgaW5mb3JtZWQgb2YgdGhl IG9taXNzaW9uIG9mCisJCSAqIHRoZSBwbGFuIG5vZGVzIHRoZW1zZWx2ZXMsIHNvIHRoYXQgaXQg ZG9lc24ndCBhY2NpZGVudGFsbHkgdHJ5IHRvCisJCSAqIGV4ZWN1dGUgdGhvc2Ugbm9kZXMsIHZp YSB0aGUgRXhlY0xvY2tSZWxzSW5mbyBub2RlcyBjb2xsZWN0ZWQgaW4gdGhlCisJCSAqIHJldHVy bmVkIGxpc3QgdGhhdCBpcyBhbHNvIHBhc3NlZCB0byBpdCBhbG9uZyB3aXRoIHRoZSBsaXN0IG9m CisJCSAqIFBsYW5uZWRTdG10cy4KKwkJICovCisJCWV4ZWNsb2NrcmVsc2luZm9fbGlzdCA9IEFj cXVpcmVFeGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwKKwkJCQkJCQkJCQkJCQkgYm91bmRQ YXJhbXMpOwogCiAJCS8qCiAJCSAqIElmIHBsYW4gd2FzIHRyYW5zaWVudCwgY2hlY2sgdG8gc2Vl IGlmIFRyYW5zYWN0aW9uWG1pbiBoYXMKQEAgLTg0NCwxMSArODcwLDE0IEBAIENoZWNrQ2FjaGVk UGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlKQogCQlpZiAocGxhbi0+aXNfdmFsaWQp CiAJCXsKIAkJCS8qIFN1Y2Nlc3NmdWxseSByZXZhbGlkYXRlZCBhbmQgbG9ja2VkIHRoZSBxdWVy eS4gKi8KKworCQkJLyogUmVtZW1iZXIgRXhlY0xvY2tSZWxzSW5mb3MgaW4gdGhlIENhY2hlZFBs YW4uICovCisJCQlDYWNoZWRQbGFuU2F2ZUV4ZWNMb2NrUmVsc0luZm9zKHBsYW4sIGV4ZWNsb2Nr cmVsc2luZm9fbGlzdCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCiAJCS8qIE9vcHMsIHRoZSBy YWNlIGNhc2UgaGFwcGVuZWQuICBSZWxlYXNlIHVzZWxlc3MgbG9ja3MuICovCi0JCUFjcXVpcmVF eGVjdXRvckxvY2tzKHBsYW4tPnN0bXRfbGlzdCwgZmFsc2UpOworCQlSZWxlYXNlRXhlY3V0b3JM b2NrcyhwbGFuLT5zdG10X2xpc3QsIGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CiAJfQogCiAJLyoK QEAgLTg4MCw3ICs5MDksOCBAQCBCdWlsZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJCQkJUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywgUXVl cnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCiB7CiAJQ2FjaGVkUGxhbiAqcGxhbjsKLQlMaXN0CSAg ICpwbGlzdDsKKwlMaXN0CSAgICpwbGlzdCwKKwkJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3Q7 CiAJYm9vbAkJc25hcHNob3Rfc2V0OwogCWJvb2wJCWlzX3RyYW5zaWVudDsKIAlNZW1vcnlDb250 ZXh0IHBsYW5fY29udGV4dDsKQEAgLTkzMyw3ICs5NjMsOCBAQCBCdWlsZENhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJICogR2VuZXJhdGUgdGhl IHBsYW4uCiAJICovCiAJcGxpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocWxpc3QsIHBsYW5zb3VyY2Ut PnF1ZXJ5X3N0cmluZywKLQkJCQkJCQlwbGFuc291cmNlLT5jdXJzb3Jfb3B0aW9ucywgYm91bmRQ YXJhbXMpOworCQkJCQkJCXBsYW5zb3VyY2UtPmN1cnNvcl9vcHRpb25zLCBib3VuZFBhcmFtcywK KwkJCQkJCQkmZXhlY2xvY2tyZWxzaW5mb19saXN0KTsKIAogCS8qIFJlbGVhc2Ugc25hcHNob3Qg aWYgd2UgZ290IG9uZSAqLwogCWlmIChzbmFwc2hvdF9zZXQpCkBAIC0xMDAyLDYgKzEwMzMsMTYg QEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFs aXN0LAogCXBsYW4tPmlzX3NhdmVkID0gZmFsc2U7CiAJcGxhbi0+aXNfdmFsaWQgPSB0cnVlOwog CisJLyoKKwkgKiBTYXZlIHRoZSBkdW1teSBFeGVjTG9ja1JlbHNJbmZvIGxpc3QsIHRoYXQgaXMg YSBsaXN0IGNvbnRhaW5pbmcgTlVMTHMKKwkgKiBhcyBlbGVtZW50cy4gIFdlIG11c3QgZG8gdGhp cywgYmVjYXN1ZSB1c2VycyBvZiB0aGUgQ2FjaGVkUGxhbiBleHBlY3QKKwkgKiBvbmUgdG8gZ28g d2l0aCB0aGUgbGlzdCBvZiBQbGFubmVkU3RtdHMuCisJICogWFhYIG1heWJlIGdldCByaWQgb2Yg dGhhdCBjb250cmFjdC4KKwkgKi8KKwlwbGFuLT5leGVjbG9ja3JlbHNpbmZvX2NvbnRleHQgPSBO VUxMOworCUNhY2hlZFBsYW5TYXZlRXhlY0xvY2tSZWxzSW5mb3MocGxhbiwgZXhlY2xvY2tyZWxz aW5mb19saXN0KTsKKwlBc3NlcnQoTWVtb3J5Q29udGV4dElzVmFsaWQocGxhbi0+ZXhlY2xvY2ty ZWxzaW5mb19jb250ZXh0KSk7CisKIAkvKiBhc3NpZ24gZ2VuZXJhdGlvbiBudW1iZXIgdG8gbmV3 IHBsYW4gKi8KIAlwbGFuLT5nZW5lcmF0aW9uID0gKysocGxhbnNvdXJjZS0+Z2VuZXJhdGlvbik7 CiAKQEAgLTExNjAsNyArMTIwMSw3IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAq cGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAogCWlmICghY3VzdG9tcGxh bikKIAl7Ci0JCWlmIChDaGVja0NhY2hlZFBsYW4ocGxhbnNvdXJjZSkpCisJCWlmIChDaGVja0Nh Y2hlZFBsYW4ocGxhbnNvdXJjZSwgYm91bmRQYXJhbXMpKQogCQl7CiAJCQkvKiBXZSB3YW50IGEg Z2VuZXJpYyBwbGFuLCBhbmQgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgb25lICovCiAJCQlwbGFu ID0gcGxhbnNvdXJjZS0+Z3BsYW47CkBAIC0xNTg2LDYgKzE2MjcsNDkgQEAgQ29weUNhY2hlZFBs YW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKIAlyZXR1cm4gbmV3c291cmNlOwogfQog CisvKgorICogQ2FjaGVkUGxhblNhdmVFeGVjTG9ja1JlbHNJbmZvcworICoJCVNhdmUgdGhlIGxp c3QgY29udGFpbmluZyBFeGVjTG9ja1JlbHNJbmZvIG5vZGVzIGludG8gdGhlIGdpdmVuCisgKgkJ Q2FjaGVkUGxhbgorICoKKyAqIFRoZSBwcm92aWRlZCBsaXN0IGlzIGNvcGllZCBpbnRvIGEgZGVk aWNhdGVkIGNvbnRleHQgdGhhdCBpcyBhIGNoaWxkIG9mCisgKiBwbGFuLT5jb250ZXh0LiAgSWYg dGhlIGNoaWxkIGNvbnRleHQgYWxyZWFkeSBleGlzdHMsIGl0IGlzIGVtcHRpZWQsIGJlY2F1c2UK KyAqIGFueSBFeGVjTG9ja1JlbHNJbmZvIGNvbnRhaW5lZCB0aGVyZWluIHdvdWxkIG5vIGxvbmdl ciBiZSB1c2VmdWwuCisgKi8KK3N0YXRpYyB2b2lkCitDYWNoZWRQbGFuU2F2ZUV4ZWNMb2NrUmVs c0luZm9zKENhY2hlZFBsYW4gKnBsYW4sIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdCkKK3sK KwlNZW1vcnlDb250ZXh0CWV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCA9IHBsYW4tPmV4ZWNsb2Nr cmVsc2luZm9fY29udGV4dCwKKwkJCQkJb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0 OworCUxpc3QJCSAgICpleGVjbG9ja3JlbHNpbmZvX2xpc3RfY29weTsKKworCS8qCisJICogU2V0 IHVwIHRoZSBkZWRpY2F0ZWQgY29udGV4dCBpZiBub3QgYWxyZWFkeSBkb25lLCBzYXZpbmcgaXQg YXMgYSBjaGlsZAorCSAqIG9mIHRoZSBDYWNoZWRQbGFuJ3MgY29udGV4dC4KKwkgKi8KKwlpZiAo ZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0ID09IE5VTEwpCisJeworCQlleGVjbG9ja3JlbHNpbmZv X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCQkgIkNhY2hlZFBsYW4gZXhlY2xvY2tyZWxzaW5mbyBsaXN0IiwKKwkJCQkJCQkJ CQkJCSBBTExPQ1NFVF9TVEFSVF9TTUFMTF9TSVpFUyk7CisJCU1lbW9yeUNvbnRleHRTZXRQYXJl bnQoZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0LCBwbGFuLT5jb250ZXh0KTsKKwkJTWVtb3J5Q29u dGV4dFNldElkZW50aWZpZXIoZXhlY2xvY2tyZWxzaW5mb19jb250ZXh0LCBwbGFuLT5jb250ZXh0 LT5pZGVudCk7CisJCXBsYW4tPmV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCA9IGV4ZWNsb2NrcmVs c2luZm9fY29udGV4dDsKKwl9CisJZWxzZQorCXsKKwkJLyogSnVzdCBjbGVhciBleGlzdGluZyBj b250ZW50cyBieSByZXNldHRpbmcgdGhlIGNvbnRleHQuICovCisJCUFzc2VydChNZW1vcnlDb250 ZXh0SXNWYWxpZChleGVjbG9ja3JlbHNpbmZvX2NvbnRleHQpKTsKKwkJTWVtb3J5Q29udGV4dFJl c2V0KGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKGV4ZWNsb2NrcmVsc2luZm9fY29udGV4dCk7CisJZXhlY2xvY2tyZWxzaW5mb19saXN0X2Nv cHkgPSBjb3B5T2JqZWN0KGV4ZWNsb2NrcmVsc2luZm9fbGlzdCk7CisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCisJcGxhbi0+ZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gZXhl Y2xvY2tyZWxzaW5mb19saXN0X2NvcHk7Cit9CisKIC8qCiAgKiBDYWNoZWRQbGFuSXNWYWxpZDog dGVzdCB3aGV0aGVyIHRoZSByZXdyaXR0ZW4gcXVlcnl0cmVlIHdpdGhpbiBhCiAgKiBDYWNoZWRQ bGFuU291cmNlIGlzIGN1cnJlbnRseSB2YWxpZCAodGhhdCBpcywgbm90IG1hcmtlZCBhcyBiZWlu ZyBpbiBuZWVkCkBAIC0xNzM3LDE3ICsxODIxLDIxIEBAIFF1ZXJ5TGlzdEdldFByaW1hcnlTdG10 KExpc3QgKnN0bXRzKQogCiAvKgogICogQWNxdWlyZUV4ZWN1dG9yTG9ja3M6IGFjcXVpcmUgbG9j a3MgbmVlZGVkIGZvciBleGVjdXRpb24gb2YgYSBjYWNoZWQgcGxhbjsKLSAqIG9yIHJlbGVhc2Ug dGhlbSBpZiBhY3F1aXJlIGlzIGZhbHNlLgorICoKKyAqIFJldHVybnMgYSBsaXN0IG9mIEV4ZWNM b2NrUmVsc0luZm8gbm9kZXMgY29udGFpbmluZyBvbmUgZWxlbWVudCBmb3IgZWFjaAorICogUGxh bm5lZFN0bXQgaW4gc3RtdF9saXN0IG9yIE5VTEwgaWYgdGhlIGxhdHRlciBpcyB1dGlsaXR5IHN0 YXRlbWVudCBvciBpdHMKKyAqIGNvbnRhaW5zSW5pdGlhbFBydW5pbmcgaXMgZmFsc2UuCiAgKi8K LXN0YXRpYyB2b2lkCi1BY3F1aXJlRXhlY3V0b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wg YWNxdWlyZSkKK3N0YXRpYyBMaXN0ICoKK0FjcXVpcmVFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRf bGlzdCwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcykKIHsKIAlMaXN0Q2VsbCAgICpsYzE7CisJ TGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb19saXN0ID0gTklMOwogCiAJZm9yZWFjaChsYzEsIHN0 bXRfbGlzdCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdF9ub2RlKFBs YW5uZWRTdG10LCBsYzEpOwotCQlMaXN0Q2VsbCAgICpsYzI7CisJCUV4ZWNMb2NrUmVsc0luZm8g KmV4ZWNsb2NrcmVsc2luZm8gPSBOVUxMOwogCiAJCWlmIChwbGFubmVkc3RtdC0+Y29tbWFuZFR5 cGUgPT0gQ01EX1VUSUxJVFkpCiAJCXsKQEAgLTE3NjEsMjcgKzE4NDksMTM5IEBAIEFjcXVpcmVF eGVjdXRvckxvY2tzKExpc3QgKnN0bXRfbGlzdCwgYm9vbCBhY3F1aXJlKQogCQkJUXVlcnkJICAg KnF1ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsK IAogCQkJaWYgKHF1ZXJ5KQotCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBhY3F1aXJlKTsK LQkJCWNvbnRpbnVlOworCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCB0cnVlKTsKIAkJfQot Ci0JCWZvcmVhY2gobGMyLCBwbGFubmVkc3RtdC0+cnRhYmxlKQorCQllbHNlCiAJCXsKLQkJCVJh bmdlVGJsRW50cnkgKnJ0ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYzIpOworCQkJLyoK KwkJCSAqIEZpZ3VyZSBvdXQgdGhlIHNldCBvZiByZWxhdGlvbnMgdGhhdCB3b3VsZCBuZWVkIHRv IGJlIGxvY2tlZAorCQkJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgcGxhbi4KKwkJCSAqLworCQkJ aWYgKCFwbGFubmVkc3RtdC0+Y29udGFpbnNJbml0aWFsUHJ1bmluZykKKwkJCXsKKwkJCQkvKgor CQkJCSAqIElmIHRoZSBwbGFuIGNvbnRhaW5zIG5vIGluaXRpYWwgcHJ1bmluZyBzdGVwcywganVz dCBsb2NrCisJCQkJICogYWxsIHRoZSByZWxhdGlvbnMgZm91bmQgaW4gdGhlIHJhbmdlIHRhYmxl LgorCQkJCSAqLworCQkJCUxpc3RDZWxsICpsYzsKIAotCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCi0JCQkJY29udGludWU7CisJCQkJZm9yZWFjaChsYywgcGxhbm5lZHN0bXQt PnJ0YWJsZSkKKwkJCQl7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IGxmaXJzdChsYyk7CisK KwkJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCQljb250aW51ZTsK KworCQkJCQkvKgorCQkJCQkgKiBBY3F1aXJlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIGxvY2sg b24gZWFjaCByZWxhdGlvbgorCQkJCQkgKiBPSUQuIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxs eSB0cnkgdG8gb3BlbiB0aGUgcmVsLAorCQkJCQkgKiBhbmQgaGVuY2Ugd2lsbCBub3QgZmFpbCBp ZiBpdCdzIGJlZW4gZHJvcHBlZCBlbnRpcmVseQorCQkJCQkgKiAtLS0gd2UnbGwganVzdCB0cmFu c2llbnRseSBhY3F1aXJlIGEgbm9uLWNvbmZsaWN0aW5nCisJCQkJCSAqICBsb2NrLgorCQkJCQkg Ki8KKwkJCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwor CQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpbnQJCQlydGk7CisJCQkJQml0bWFwc2V0 ICAqbG9ja3JlbHM7CisKKwkJCQkvKgorCQkJCSAqIFdhbGsgdGhlIHBsYW4gdHJlZSB0byBmaW5k IG9ubHkgdGhlIG1pbmltYWwgc2V0IG9mCisJCQkJICogcmVsYXRpb25zIHRvIGJlIGxvY2tlZCwg Y29uc2lkZXJpbmcgdGhlIGVmZmVjdCBvZiBwZXJmb3JtaW5nCisJCQkJICogaW5pdGlhbCBwYXJ0 aXRpb24gcHJ1bmluZy4KKwkJCQkgKi8KKwkJCQlleGVjbG9ja3JlbHNpbmZvID0gRXhlY3V0b3JH ZXRMb2NrUmVscyhwbGFubmVkc3RtdCwgYm91bmRQYXJhbXMpOworCQkJCWxvY2tyZWxzID0gZXhl Y2xvY2tyZWxzaW5mby0+bG9ja3JlbHM7CisKKwkJCQlydGkgPSAtMTsKKwkJCQl3aGlsZSAoKHJ0 aSA9IGJtc19uZXh0X21lbWJlcihsb2NrcmVscywgcnRpKSkgPj0gMCkKKwkJCQl7CisJCQkJCVJh bmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcGxhbm5lZHN0bXQtPnJ0YWJsZSk7CiAK KwkJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCisJCQkJCS8qIFNl ZSB0aGUgY29tbWVudCBhYm92ZS4gKi8KKwkJCQkJTG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQs IHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlbWVt YmVyIEV4ZWNMb2NrUmVsc0luZm8gZm9yIGxhdGVyIGFkZGluZyB0byB0aGUgUXVlcnlEZXNjIHRo YXQKKwkJICogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGV4ZWN1dG9yIHdoZW4gZXhlY3V0aW5nIHRo aXMgcGxhbi4gIE1heSBiZQorCQkgKiBOVUxMLCBidXQgbXVzdCBrZWVwIHRoZSBsaXN0IHRoZSBz YW1lIGxlbmd0aCBhcyBzdG10X2xpc3QuCisJCSAqLworCQlleGVjbG9ja3JlbHNpbmZvX2xpc3Qg PSBsYXBwZW5kKGV4ZWNsb2NrcmVsc2luZm9fbGlzdCwKKwkJCQkJCQkJCQlleGVjbG9ja3JlbHNp bmZvKTsKKwl9CisKKwlyZXR1cm4gZXhlY2xvY2tyZWxzaW5mb19saXN0OworfQorCisvKgorICog UmVsZWFzZUV4ZWN1dG9yTG9ja3MKKyAqIAkJUmVsZWFzZSBsb2NrcyB0aGF0IHdvdWxkJ3ZlIGJl ZW4gYWNxdWlyZWQgYnkgYW4gZWFybGllciBjYWxsIHRvCisgKiAJCUFjcXVpcmVFeGVjdXRvckxv Y2tzKCkKKyAqLworc3RhdGljIHZvaWQKK1JlbGVhc2VFeGVjdXRvckxvY2tzKExpc3QgKnN0bXRf bGlzdCwgTGlzdCAqZXhlY2xvY2tyZWxzaW5mb19saXN0KQoreworCUxpc3RDZWxsICAgKmxjMSwK KwkJCSAgICpsYzI7CisKKwlmb3Jib3RoKGxjMSwgc3RtdF9saXN0LCBsYzIsIGV4ZWNsb2NrcmVs c2luZm9fbGlzdCkKKwl7CisJCVBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCA9IGxmaXJzdF9ub2Rl KFBsYW5uZWRTdG10LCBsYzEpOworCQlFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZv ID0gbGZpcnN0X25vZGUoRXhlY0xvY2tSZWxzSW5mbywgbGMyKTsKKworCQlpZiAocGxhbm5lZHN0 bXQtPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQl7CiAJCQkvKgotCQkJICogQWNxdWly ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBsb2NrIG9uIGVhY2ggcmVsYXRpb24gT0lELiBOb3Rl Ci0JCQkgKiB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHRyeSB0byBvcGVuIHRoZSByZWwsIGFuZCBo ZW5jZSB3aWxsIG5vdAotCQkJICogZmFpbCBpZiBpdCdzIGJlZW4gZHJvcHBlZCBlbnRpcmVseSAt LS0gd2UnbGwganVzdCB0cmFuc2llbnRseQotCQkJICogYWNxdWlyZSBhIG5vbi1jb25mbGljdGlu ZyBsb2NrLgorCQkJICogSWdub3JlIHV0aWxpdHkgc3RhdGVtZW50cywgZXhjZXB0IHRob3NlIChz dWNoIGFzIEVYUExBSU4pIHRoYXQKKwkJCSAqIGNvbnRhaW4gYSBwYXJzZWQtYnV0LW5vdC1wbGFu bmVkIHF1ZXJ5LiAgTm90ZTogaXQncyBva2F5IHRvIHVzZQorCQkJICogU2NhblF1ZXJ5Rm9yTG9j a3MsIGV2ZW4gdGhvdWdoIHRoZSBxdWVyeSBoYXNuJ3QgYmVlbiB0aHJvdWdoCisJCQkgKiBydWxl IHJld3JpdGluZywgYmVjYXVzZSByZXdyaXRpbmcgZG9lc24ndCBjaGFuZ2UgdGhlIHF1ZXJ5CisJ CQkgKiByZXByZXNlbnRhdGlvbi4KIAkJCSAqLwotCQkJaWYgKGFjcXVpcmUpCi0JCQkJTG9ja1Jl bGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJUXVlcnkJICAgKnF1 ZXJ5ID0gVXRpbGl0eUNvbnRhaW5zUXVlcnkocGxhbm5lZHN0bXQtPnV0aWxpdHlTdG10KTsKKwor CQkJaWYgKHF1ZXJ5KQorCQkJCVNjYW5RdWVyeUZvckxvY2tzKHF1ZXJ5LCBmYWxzZSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQlpZiAoZXhlY2xvY2tyZWxzaW5mbyA9PSBOVUxMKQorCQkJeworCQkJ CUxpc3RDZWxsICpsYzsKKworCQkJCWZvcmVhY2gobGMsIHBsYW5uZWRzdG10LT5ydGFibGUpCisJ CQkJeworCQkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3QobGMpOworCisJCQkJCWlmIChy dGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJTG9j a1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOworCQkJCX0KKwkJCX0K IAkJCWVsc2UKLQkJCQlVbmxvY2tSZWxhdGlvbk9pZChydGUtPnJlbGlkLCBydGUtPnJlbGxvY2tt b2RlKTsKKwkJCXsKKwkJCQlpbnQJCQlydGk7CisJCQkJQml0bWFwc2V0ICAqbG9ja3JlbHM7CisK KwkJCQlsb2NrcmVscyA9IGV4ZWNsb2NrcmVsc2luZm8tPmxvY2tyZWxzOworCQkJCXJ0aSA9IC0x OworCQkJCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKGxvY2tyZWxzLCBydGkpKSA+PSAw KQorCQkJCXsKKwkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBwbGFubmVk c3RtdC0+cnRhYmxlKTsKKworCQkJCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElP Tik7CisKKwkJCQkJVW5sb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9k ZSk7CisJCQkJfQorCQkJfQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9wb3J0YWxtZW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvcG9ydGFsbWVtLmMK aW5kZXggZDU0OWY2NmQ0YS4uODk2ZjUxYmUwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbW1nci9wb3J0YWxtZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdyL3BvcnRhbG1l bS5jCkBAIC0yODUsNiArMjg1LDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwK IAkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRU YWcsCiAJCQkJICBMaXN0ICpzdG10cywKKwkJCQkgIExpc3QgKmV4ZWNsb2NrcmVsc2luZm9zLAog CQkJCSAgQ2FjaGVkUGxhbiAqY3BsYW4pCiB7CiAJQXNzZXJ0QXJnKFBvcnRhbElzVmFsaWQocG9y dGFsKSk7CkBAIC0yOTksNiArMzAwLDcgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRh bCwKIAlwb3J0YWwtPnFjLm5wcm9jZXNzZWQgPSAwOwogCXBvcnRhbC0+Y29tbWFuZFRhZyA9IGNv bW1hbmRUYWc7CiAJcG9ydGFsLT5zdG10cyA9IHN0bXRzOworCXBvcnRhbC0+ZXhlY2xvY2tyZWxz aW5mb3MgPSBleGVjbG9ja3JlbHNpbmZvczsKIAlwb3J0YWwtPmNwbGFuID0gY3BsYW47CiAJcG9y dGFsLT5zdGF0dXMgPSBQT1JUQUxfREVGSU5FRDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRl eCA2NjY5NzdmYjFmLi5mZWY3NWJhMTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC04Nyw3 ICs4Nyw4IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5PbmVVdGlsaXR5KE5vZGUgKnV0aWxpdHlTdG10 LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcywgY29uc3QgY2hh ciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkJICBQYXJhbUxpc3RJbmZvIHBhcmFtcywgUXVlcnlFbnZp cm9ubWVudCAqcXVlcnlFbnYpOwogCi1leHRlcm4gdm9pZCBFeHBsYWluT25lUGxhbihQbGFubmVk U3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sCitleHRlcm4gdm9pZCBFeHBsYWlu T25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNs b2NrcmVsc2luZm8sCisJCQkJCQkgICBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgRXhwbGFp blN0YXRlICplcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCQkgICBQYXJhbUxpc3RJ bmZvIHBhcmFtcywgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCiAJCQkJCQkgICBjb25zdCBp bnN0cl90aW1lICpwbGFuZHVyYXRpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgK aW5kZXggZmQ1NzM1YTk0Ni4uZGVkMTliOGNiYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uaApAQCAtMTI0LDQgKzEyNCw2IEBAIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpF eGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkgUGFy dGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCiAJCQkJCQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5 X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQ bGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKK2V4dGVybiBCaXRtYXBzZXQg KkV4ZWNHZXRMb2NrUmVsc0RvSW5pdGlhbFBydW5pbmcoUGxhbiAqcGxhbiwgRXhlY0dldExvY2tS ZWxzQ29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWlu Zm8pOwogI2VuZGlmCQkJCQkJCS8qIEVYRUNQQVJUSVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNk ZXNjLmgKaW5kZXggZTc5ZTJjMDAxZi4uNDMzODQ2MzQ3OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVz Yy5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCS8qIFRoZXNl IGZpZWxkcyBhcmUgcHJvdmlkZWQgYnkgQ3JlYXRlUXVlcnlEZXNjICovCiAJQ21kVHlwZQkJb3Bl cmF0aW9uOwkJLyogQ01EX1NFTEVDVCwgQ01EX1VQREFURSwgZXRjLiAqLwogCVBsYW5uZWRTdG10 ICpwbGFubmVkc3RtdDsJLyogcGxhbm5lcidzIG91dHB1dCAoY291bGQgYmUgdXRpbGl0eSwgdG9v KSAqLworCUV4ZWNMb2NrUmVsc0luZm8gKmV4ZWNsb2NrcmVsc2luZm87CS8qIEV4ZWN1dG9yR2V0 TG9ja1JlbHMoKSdzIG91dHB1dCBnaXZlbiBwbGFubmVkc3RtdCAqLwogCWNvbnN0IGNoYXIgKnNv dXJjZVRleHQ7CQkvKiBzb3VyY2UgdGV4dCBvZiB0aGUgcXVlcnkgKi8KIAlTbmFwc2hvdAlzbmFw c2hvdDsJCS8qIHNuYXBzaG90IHRvIHVzZSBmb3IgcXVlcnkgKi8KIAlTbmFwc2hvdAljcm9zc2No ZWNrX3NuYXBzaG90OwkvKiBjcm9zc2NoZWNrIGZvciBSSSB1cGRhdGUvZGVsZXRlICovCkBAIC01 Nyw2ICs1OCw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5RGVzYwogCiAvKiBpbiBwcXVlcnkuYyAq LwogZXh0ZXJuIFF1ZXJ5RGVzYyAqQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVk c3RtdCwKKwkJCQkJCQkJICBFeGVjTG9ja1JlbHNJbmZvICpleGVjbG9ja3JlbHNpbmZvLAogCQkJ CQkJCQkgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNo b3QsCiAJCQkJCQkJCSAgU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCmluZGV4IDg3Mzc3MmYxODguLmQwM2JkNWEwMjYgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y3V0b3IuaApAQCAtMTg1LDYgKzE4NSw4IEBAIEV4ZWNHZXRKdW5rQXR0cmlidXRlKFR1cGxlVGFi bGVTbG90ICpzbG90LCBBdHRyTnVtYmVyIGF0dG5vLCBib29sICppc051bGwpCiAvKgogICogcHJv dG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBleGVjTWFpbi5jCiAgKi8KK2V4dGVybiBFeGVjTG9j a1JlbHNJbmZvICpFeGVjdXRvckdldExvY2tSZWxzKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwg UGFyYW1MaXN0SW5mbyBwYXJhbXMpOworZXh0ZXJuIGJvb2wgRXhlY0dldExvY2tSZWxzKFBsYW4g Km5vZGUsIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJuIHZvaWQgRXhl Y3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CiBleHRlcm4gdm9p ZCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdz KTsKIGV4dGVybiB2b2lkIEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZUFwcGVuZC5oCmluZGV4IDRjYjc4ZWU1YjYuLmI1MzUzNWMyYTQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVBcHBlbmQuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9ub2RlQXBwZW5kLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv cGFyYWxsZWwuaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKIAorZXh0ZXJuIGJvb2wg RXhlY0dldEFwcGVuZExvY2tSZWxzKEFwcGVuZCAqbm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4 dCAqY29udGV4dCk7CiBleHRlcm4gQXBwZW5kU3RhdGUgKkV4ZWNJbml0QXBwZW5kKEFwcGVuZCAq bm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZEFw cGVuZChBcHBlbmRTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVTY2FuQXBwZW5kKEFw cGVuZFN0YXRlICpub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVN ZXJnZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5k ZXggOTdmZTNiMDY2NS4uOGViNGU5ZGY5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3Ivbm9kZU1lcmdlQXBwZW5kLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5o IgogCitleHRlcm4gYm9vbCBFeGVjR2V0TWVyZ2VBcHBlbmRMb2NrUmVscyhNZXJnZUFwcGVuZCAq bm9kZSwgRXhlY0dldExvY2tSZWxzQ29udGV4dCAqY29udGV4dCk7CiBleHRlcm4gTWVyZ2VBcHBl bmRTdGF0ZSAqRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kU3RhdGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv bm9kZU1vZGlmeVRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUu aAppbmRleCBjMzE4NjgxYjlhLi4yODdiYWY2MjU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuaApAQCAtMTksNiArMTksNyBAQCBleHRlcm4gdm9pZCBFeGVjQ29tcHV0ZVN0 b3JlZEdlbmVyYXRlZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJICAg RVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQkJICAgQ21kVHlw ZSBjbWR0eXBlKTsKIAorZXh0ZXJuIGJvb2wgRXhlY0dldE1vZGlmeVRhYmxlTG9ja1JlbHMoTW9k aWZ5VGFibGUgKnBsYW4sIEV4ZWNHZXRMb2NrUmVsc0NvbnRleHQgKmNvbnRleHQpOwogZXh0ZXJu IE1vZGlmeVRhYmxlU3RhdGUgKkV4ZWNJbml0TW9kaWZ5VGFibGUoTW9kaWZ5VGFibGUgKm5vZGUs IEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNFbmRNb2RpZnlU YWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5Nb2Rp ZnlUYWJsZShNb2RpZnlUYWJsZVN0YXRlICpub2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg Y2JiY2ZmODFkMi4uZWUwYzczZTlhNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTU5Niw2ICs1 OTYsNyBAQCB0eXBlZGVmIHN0cnVjdCBFU3RhdGUKIAlzdHJ1Y3QgRXhlY1Jvd01hcmsgKiplc19y b3dtYXJrczsJLyogQXJyYXkgb2YgcGVyLXJhbmdlLXRhYmxlLWVudHJ5CiAJCQkJCQkJCQkJICog RXhlY1Jvd01hcmtzLCBvciBOVUxMIGlmIG5vbmUgKi8KIAlQbGFubmVkU3RtdCAqZXNfcGxhbm5l ZHN0bXQ7CS8qIGxpbmsgdG8gdG9wIG9mIHBsYW4gdHJlZSAqLworCXN0cnVjdCBFeGVjTG9ja1Jl bHNJbmZvICplc19leGVjbG9ja3JlbHNpbmZvOyAvKiBRdWVyeURlc2MuZXhlY2xvY2tyZWxzaW5m byAqLwogCWNvbnN0IGNoYXIgKmVzX3NvdXJjZVRleHQ7CS8qIFNvdXJjZSB0ZXh0IGZyb20gUXVl cnlEZXNjICovCiAKIAlKdW5rRmlsdGVyICplc19qdW5rRmlsdGVyOwkvKiB0b3AtbGV2ZWwganVu ayBmaWx0ZXIsIGlmIGFueSAqLwpAQCAtOTg0LDYgKzk4NSwxMDEgQEAgdHlwZWRlZiBzdHJ1Y3Qg RG9tYWluQ29uc3RyYWludFN0YXRlCiAgKi8KIHR5cGVkZWYgVHVwbGVUYWJsZVNsb3QgKigqRXhl Y1Byb2NOb2RlTXRkKSAoc3RydWN0IFBsYW5TdGF0ZSAqcHN0YXRlKTsKIAorLyotLS0tLS0tLS0t LS0tLS0tCisgKiBFeGVjTG9ja1JlbHNJbmZvCisgKgorICogUmVzdWx0IG9mIHBlcmZvcm1pbmcg RXhlY3V0b3JHZXRMb2NrUmVscygpIGZvciBhIGdpdmVuIFBsYW5uZWRTdG10CisgKi8KK3R5cGVk ZWYgc3RydWN0IEV4ZWNMb2NrUmVsc0luZm8KK3sKKwlOb2RlVGFnCQl0eXBlOworCisJLyoKKwkg KiBSZWxhdGlvbnMgdGhhdCBtdXN0IGJlIGxvY2tlZCB0byBleGVjdXRlIHRoZSBwbGFuIHRyZWUg Y29udGFpbmVkIGluCisJICogdGhlIFBsYW5uZWRTdG10LgorCSAqLworCUJpdG1hcHNldCAgKmxv Y2tyZWxzOworCisJLyogUGxhbm5lZFN0bXQubnVtUGxhbk5vZGVzICovCisJaW50CQkJbnVtUGxh bk5vZGVzOworCisJLyoKKwkgKiBMaXN0IG9mIFBsYW5Jbml0UHJ1bmluZ091dHB1dCwgZWFjaCBy ZXByZXNlbnRpbmcgdGhlIG91dHB1dCBvZgorCSAqIHBlcmZvcm1pbmcgaW5pdGlhbCBwcnVuaW5n IG9uIGEgZ2l2ZW4gcGxhbiBub2RlLCBmb3IgYWxsIG5vZGVzIGluIHRoZQorCSAqIHBsYW4gdHJl ZSB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgYXMgbmVlZGluZyBpbml0aWFsIHBydW5pbmcuCisJICoK KwkgKiAnaXBvSW5kZXhlcycgaXMgYW4gYXJyYXkgb2YgJ251bVBsYW5Ob2RlcycgZWxlbWVudHMs IGluZGV4ZWQgd2l0aAorCSAqIHBsYW5fbm9kZV9pZCBvZiB0aGUgaW5kaXZpZHVhbCBub2RlcyBp biB0aGUgcGxhbiB0cmVlLCBlYWNoIGEgMS1iYXNlZAorCSAqIGluZGV4IGludG8gJ2luaXRQcnVu aW5nT3V0cHV0cycgbGlzdCBmb3IgYSBnaXZlbiBwbGFuIG5vZGUuICAwIG1lYW5zCisJICogdGhh dCBhIGdpdmVuIHBsYW4gbm9kZSBoYXMgbm8gZW50cnkgaW4gdGhlIGxpc3QgYmVjYXVzZSBvZiBu b3QgbmVlZGluZworCSAqIGFueSBpbml0aWFsIHBydW5pbmcgZG9uZSBvbiBpdC4KKwkgKi8KKwlM aXN0CSAgICppbml0UHJ1bmluZ091dHB1dHM7CisJaW50CQkgICAqaXBvSW5kZXhlczsKK30gRXhl Y0xvY2tSZWxzSW5mbzsKKworLyotLS0tLS0tLS0tLS0tLS0tCisgKiBFeGVjR2V0TG9ja1JlbHND b250ZXh0CisgKgorICogSW5mb3JtYXRpb24gcGVydGFpbmluZyB0byBFeGVjdXRvckdldExvY2tS ZWxzKCkgaW52b2NhdGlvbiBmb3IgYSBnaXZlbgorICogcGxhbi4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgRXhlY0dldExvY2tSZWxzQ29udGV4dAoreworCU5vZGVUYWcJCXR5cGU7CisKKwlQbGFubmVk U3RtdAkgICAqc3RtdDsJCS8qIHRhcmdldCBwbGFuICovCisJUGFyYW1MaXN0SW5mbwlwYXJhbXM7 CQkvKiBFWFRFUk4gcGFyYW1ldGVycyBhdmFpbGFibGUgZm9yIHBydW5pbmcgKi8KKworCS8qIE91 dHB1dCBwYXJhbWV0ZXJzIGZvciBFeGVjR2V0TG9ja1JlbHMgYW5kIGl0cyBzdWJyb3V0aW5lcy4g Ki8KKwlCaXRtYXBzZXQJICAgKmxvY2tyZWxzOworCisJLyogU2VlIHRoZSBvbW1lbnQgaW4gdGhl IGRlZmluaXRpb24gb2YgRXhlY0xvY2tSZWxzSW5mbyBzdHJ1Y3QuICovCisJTGlzdAkJICAgKmlu aXRQcnVuaW5nT3V0cHV0czsKKwlpbnQJCQkgICAqaXBvSW5kZXhlczsKK30gRXhlY0dldExvY2tS ZWxzQ29udGV4dDsKKworLyoKKyAqIEFwcGVuZHMgdGhlIHByb3ZpZGVkIFBsYW5Jbml0UHJ1bmlu Z091dHB1dCB0bworICogRXhlY0dldExvY2tSZWxzQ29udGV4dC5pbml0UHJ1bmluZ091dHB1dAor ICovCisjZGVmaW5lIEV4ZWNTdG9yZVBsYW5Jbml0UHJ1bmluZ091dHB1dChjeHQsIGluaXRQcnVu aW5nT3V0cHV0LCBwbGFubm9kZSkgXAorCWRvIHsgXAorCQkoY3h0KS0+aW5pdFBydW5pbmdPdXRw dXRzID0gbGFwcGVuZCgoY3h0KS0+aW5pdFBydW5pbmdPdXRwdXRzLCBpbml0UHJ1bmluZ091dHB1 dCk7IFwKKwkJKGN4dCktPmlwb0luZGV4ZXNbKHBsYW5ub2RlKS0+cGxhbl9ub2RlX2lkXSA9IGxp c3RfbGVuZ3RoKChjeHQpLT5pbml0UHJ1bmluZ091dHB1dHMpOyBcCisJfSB3aGlsZSAoMCkKKwor LyoKKyAqIEZpbmRzIHRoZSBQbGFuSW5pdFBydW5pbmdPdXRwdXQgZm9yIGEgZ2l2ZW4gUGxhbiBu b2RlIGluCisgKiBFeGVjTG9ja1JlbHNJbmZvLmluaXRQcnVuaW5nT3V0cHV0cy4KKyAqLworI2Rl ZmluZSBFeGVjRmV0Y2hQbGFuSW5pdFBydW5pbmdPdXRwdXQoZXhlY2xvY2tyZWxzaW5mbywgcGxh bm5vZGUpIFwKKwkJKCgoZXhlY2xvY2tyZWxzaW5mbykgIT0gTlVMTCAmJiAoZXhlY2xvY2tyZWxz aW5mbyktPmluaXRQcnVuaW5nT3V0cHV0cyAhPSBOSUwpID8gXAorCQkgbGlzdF9udGgoKGV4ZWNs b2NrcmVsc2luZm8pLT5pbml0UHJ1bmluZ091dHB1dHMsIFwKKwkJCQkgIChleGVjbG9ja3JlbHNp bmZvKS0+aXBvSW5kZXhlc1socGxhbm5vZGUpLT5wbGFuX25vZGVfaWRdIC0gMSkgOiBOVUxMKQor CisvKiAtLS0tLS0tLS0tLS0tLS0KKyAqIFBsYW5Jbml0UHJ1bmluZ091dHB1dAorICoKKyAqIE5v ZGUgdG8gcmVtZW1iZXIgdGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGluaXRpYWwgcGFydGl0aW9u IHBydW5pbmcgc3RlcHMKKyAqIGR1cmluZyBFeGVjdXRvckdldExvY2tSZWxzKCkgb24gbm9kZXMg dGhhdCBzdXBwb3J0IHBydW5pbmcuCisgKgorICogRXhlY0xvY2tSZWxzRG9Jbml0UHJ1bmluZygp LCB3aGljaCBydW5zIGR1cmluZyBFeGVjdXRvckdldExvY2tSZWxzKCksCisgKiBjcmVhdGVzIGl0 IGFuZCBzdG9yZXMgaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgRXhlY0xvY2tSZWxzSW5mby4KKyAq CisgKiBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoKSwgd2hpY2ggcnVucyBkdXJpbmcgRXhlY3Vv clN0YXJ0KCksIGZldGNoZXMgaXQKKyAqIGZyb20gdGhlIEVTdGF0ZSdzIEV4ZWNMb2NrUmVsc0lu Zm8gKGlmIGFueSkgYW5kIHVzZXMgdGhlIHZhbHVlIG9mCisgKiBpbml0aWFsbHlfdmFsaWRfc3Vi cGxhbnMgY29udGFpbmVkIGluIGl0IGFzLWlzIHRvIHNlbGVjdCB0aGUgc3VicGxhbnMgdG8gYmUK KyAqIGluaXRpYWxpemVkIGZvciBleGVjdXRpb24sIGluc3RlYWQgb2YgcmUtZXZhbHVhdGluZyB0 aGF0IGJ5IHBlcmZvcm1pbmcKKyAqIGluaXRpYWwgcHJ1bmluZyBhZ2Fpbi4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgUGxhbkluaXRQcnVuaW5nT3V0cHV0Cit7CisJTm9kZVRhZwkJdHlwZTsKKworCUJp dG1hcHNldCAgKmluaXRpYWxseV92YWxpZF9zdWJwbGFuczsKK30gUGxhbkluaXRQcnVuaW5nT3V0 cHV0OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJUGxhblN0YXRlIG5vZGUKICAqCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9k ZXMuaAppbmRleCA1M2Y2YjA1YTNmLi45MjhhMzBjN2M2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTk3LDYg Kzk3LDExIEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9QYXJ0aXRpb25QcnVuZVN0ZXBDb21i aW5lLAogCVRfUGxhbkludmFsSXRlbSwKIAorCS8qIFRBR1MgRk9SIEVYRUNVVE9SIFBSRVAgTk9E RVMgKGV4ZWNub2Rlcy5oKSAqLworCVRfRXhlY0dldExvY2tSZWxzQ29udGV4dCwKKwlUX0V4ZWNM b2NrUmVsc0luZm8sCisJVF9QbGFuSW5pdFBydW5pbmdPdXRwdXQsCisKIAkvKgogCSAqIFRBR1Mg Rk9SIFBMQU4gU1RBVEUgTk9ERVMgKGV4ZWNub2Rlcy5oKQogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IGVmOWI1NDczOWEuLjBlZDE3MWQzZjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0x MjksNiArMTI5LDEwIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAogCWNoYXIJCW1h eFBhcmFsbGVsSGF6YXJkOwkvKiB3b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAor CWJvb2wJCWNvbnRhaW5zSW5pdGlhbFBydW5pbmc7CS8qIERvIHNvbWUgUGxhbiBub2RlcyBpbiB0 aGUgdHJlZQorCQkJCQkJCQkJCSAqIGhhdmUgaW5pdGlhbCAocHJlLWV4ZWMpIHBydW5pbmcKKwkJ CQkJCQkJCQkgKiBzdGVwcz8gKi8KKwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0aXRpb25fZGly ZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIAogCUJpdG1hcHNldCAqZWxpZGVk QXBwZW5kUGFydGVkUmVsczsJLyogQ29tYmluZWQgcGFydGl0aW9uZWRfcmVscyBvZiBhbGwKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGxhbm5vZGVzLmgKaW5kZXggYTgyM2M3YzIwZC4uNGZjYmEwZTU1YyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmgKQEAgLTYwLDEwICs2MCwxNiBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAog CiAJYm9vbAkJcGFyYWxsZWxNb2RlTmVlZGVkOyAvKiBwYXJhbGxlbCBtb2RlIHJlcXVpcmVkIHRv IGV4ZWN1dGU/ICovCiAKKwlib29sCQljb250YWluc0luaXRpYWxQcnVuaW5nOwkvKiBEbyBzb21l IFBsYW4gbm9kZXMgaW4gdGhlIHRyZWUKKwkJCQkJCQkJCQkgKiBoYXZlIGluaXRpYWwgKHByZS1l eGVjKSBwcnVuaW5nCisJCQkJCQkJCQkJICogc3RlcHM/ICovCisKIAlpbnQJCQlqaXRGbGFnczsJ CS8qIHdoaWNoIGZvcm1zIG9mIEpJVCBzaG91bGQgYmUgcGVyZm9ybWVkICovCiAKIAlzdHJ1Y3Qg UGxhbiAqcGxhblRyZWU7CQkvKiB0cmVlIG9mIFBsYW4gbm9kZXMgKi8KIAorCWludAkJCW51bVBs YW5Ob2RlczsJLyogbnVtYmVyIG9mIG5vZGVzIGluIHBsYW5UcmVlICovCisKIAlMaXN0CSAgICpy dGFibGU7CQkJLyogbGlzdCBvZiBSYW5nZVRibEVudHJ5IG5vZGVzICovCiAKIAkvKiBydGFibGUg aW5kZXhlcyBvZiB0YXJnZXQgcmVsYXRpb25zIGZvciBJTlNFUlQvVVBEQVRFL0RFTEVURSAqLwpA QCAtMTE5Miw2ICsxMTk4LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBsYW5Sb3dNYXJrCiAgKiBwcnVu ZV9pbmZvcwkJCUxpc3Qgb2YgTGlzdHMgY29udGFpbmluZyBQYXJ0aXRpb25lZFJlbFBydW5lSW5m byBub2RlcywKICAqCQkJCQkJb25lIHN1Ymxpc3QgcGVyIHJ1bi10aW1lLXBydW5hYmxlIHBhcnRp dGlvbiBoaWVyYXJjaHkKICAqCQkJCQkJYXBwZWFyaW5nIGluIHRoZSBwYXJlbnQgcGxhbiBub2Rl J3Mgc3VicGxhbnMuCisgKgorICogbmVlZHNfaW5pdF9wcnVuaW5nCURvZXMgYW55IG9mIHRoZSBQ YXJ0aXRpb25lZFJlbFBydW5lSW5mb3MgaW4KKyAqCQkJCQkJcHJ1bmVfaW5mb3MgaGF2ZSBpdHMg aW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNldD8KKyAqCisgKiBuZWVkc19leGVjX3BydW5pbmcJRG9l cyBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvcyBpbgorICoJCQkJCQlwcnVuZV9p bmZvcyBoYXZlIGl0cyBleGVjX3BydW5pbmdfc3RlcHMgc2V0PworICoKICAqIG90aGVyX3N1YnBs YW5zCQlJbmRleGVzIG9mIGFueSBzdWJwbGFucyB0aGF0IGFyZSBub3QgYWNjb3VudGVkIGZvcgog ICoJCQkJCQlieSBhbnkgb2YgdGhlIFBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvIG5vZGVzIGluCiAg KgkJCQkJCSJwcnVuZV9pbmZvcyIuICBUaGVzZSBzdWJwbGFucyBtdXN0IG5vdCBiZSBwcnVuZWQu CkBAIC0xMjAwLDYgKzEyMTMsOCBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8K IHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJICAgKnBydW5lX2luZm9zOworCWJvb2wJCW5lZWRz X2luaXRfcHJ1bmluZzsKKwlib29sCQluZWVkc19leGVjX3BydW5pbmc7CiAJQml0bWFwc2V0ICAq b3RoZXJfc3VicGxhbnM7CiB9IFBhcnRpdGlvblBydW5lSW5mbzsKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oIGIvc3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oCmlu ZGV4IDkyMjkxYTc1MGQuLmJmODBjNTNiZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av dGNvcHByb3QuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKQEAgLTY0LDcgKzY0 LDcgQEAgZXh0ZXJuIFBsYW5uZWRTdG10ICpwZ19wbGFuX3F1ZXJ5KFF1ZXJ5ICpxdWVyeXRyZWUs IGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJICBQYXJhbUxpc3RJbmZvIGJvdW5k UGFyYW1zKTsKIGV4dGVybiBMaXN0ICpwZ19wbGFuX3F1ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywg Y29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCSBpbnQgY3Vyc29yT3B0aW9ucywKLQkJ CQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcyk7CisJCQkJCQkJIFBhcmFtTGlzdEluZm8g Ym91bmRQYXJhbXMsIExpc3QgKipleGVjbG9ja3JlbHNpbmZvX2xpc3QpOwogCiBleHRlcm4gYm9v bCBjaGVja19tYXhfc3RhY2tfZGVwdGgoaW50ICpuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291 cmNlIHNvdXJjZSk7CiBleHRlcm4gdm9pZCBhc3NpZ25fbWF4X3N0YWNrX2RlcHRoKGludCBuZXd2 YWwsIHZvaWQgKmV4dHJhKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNo ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggOTViOTllM2QyNS4uNTZi MGRjYzZiZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCB0eXBlZGVm IHN0cnVjdCBDYWNoZWRQbGFuCiB7CiAJaW50CQkJbWFnaWM7CQkJLyogc2hvdWxkIGVxdWFsIENB Q0hFRFBMQU5fTUFHSUMgKi8KIAlMaXN0CSAgICpzdG10X2xpc3Q7CQkvKiBsaXN0IG9mIFBsYW5u ZWRTdG10cyAqLworCUxpc3QJICAgKmV4ZWNsb2NrcmVsc2luZm9fbGlzdDsJLyogbGlzdCBvZiBF eGVjdXRvckdldExvY2tSZWxzUmVzdWx0IHdpdGggb25lCisJCQkJCQkJCQkgKiBlbGVtZW50IGZv ciBlYWNoIG9mIHN0bXRfbGlzdDsgTklMCisJCQkJCQkJCQkgKiBpZiBub3QgYSBnZW5lcmljIHBs YW4gKi8KIAlib29sCQlpc19vbmVzaG90OwkJLyogaXMgaXQgYSAib25lc2hvdCIgcGxhbj8gKi8K IAlib29sCQlpc19zYXZlZDsJCS8qIGlzIENhY2hlZFBsYW4gaW4gYSBsb25nLWxpdmVkIGNvbnRl eHQ/ICovCiAJYm9vbAkJaXNfdmFsaWQ7CQkvKiBpcyB0aGUgc3RtdF9saXN0IGN1cnJlbnRseSB2 YWxpZD8gKi8KQEAgLTE1OCw2ICsxNjEsOSBAQCB0eXBlZGVmIHN0cnVjdCBDYWNoZWRQbGFuCiAJ aW50CQkJZ2VuZXJhdGlvbjsJCS8qIHBhcmVudCdzIGdlbmVyYXRpb24gbnVtYmVyIGZvciB0aGlz IHBsYW4gKi8KIAlpbnQJCQlyZWZjb3VudDsJCS8qIGNvdW50IG9mIGxpdmUgcmVmZXJlbmNlcyB0 byB0aGlzIHN0cnVjdCAqLwogCU1lbW9yeUNvbnRleHQgY29udGV4dDsJCS8qIGNvbnRleHQgY29u dGFpbmluZyB0aGlzIENhY2hlZFBsYW4gKi8KKwlNZW1vcnlDb250ZXh0IGV4ZWNsb2NrcmVsc2lu Zm9fY29udGV4dDsJLyogY29udGV4dCBjb250YWluaW5nCisJCQkJCQkJCQkJCSAqIGV4ZWNsb2Nr cmVsc2luZm9fbGlzdCwKKwkJCQkJCQkJCQkJICogYSBjaGlsZCBvZiB0aGUgYWJvdmUgY29udGV4 dCAqLwogfSBDYWNoZWRQbGFuOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cG9ydGFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAppbmRleCBhZWRkYmRhZmU1Li45 YWJhY2U2NzM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaApAQCAtMTM3LDYgKzEzNywxMCBAQCB0eXBlZGVmIHN0 cnVjdCBQb3J0YWxEYXRhCiAJQ29tbWFuZFRhZwljb21tYW5kVGFnOwkJLyogY29tbWFuZCB0YWcg Zm9yIG9yaWdpbmFsIHF1ZXJ5ICovCiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1hbmQg Y29tcGxldGlvbiBkYXRhIGZvciBleGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRzOwkJ CS8qIGxpc3Qgb2YgUGxhbm5lZFN0bXRzICovCisJTGlzdAkgICAqZXhlY2xvY2tyZWxzaW5mb3M7 CS8qIGxpc3Qgb2YgRXhlY3V0b3JHZXRMb2NrUmVsc1Jlc3VsdHMgd2l0aCBvbmUgZWxlbWVudAor CQkJCQkJCQkgKiBmb3IgZWFjaCBvZiAnc3RtdHMnOyBzYW1lIGFzCisJCQkJCQkJCSAqIGNwbGFu LT5leGVjbG9ja3JlbHNpbmZvX2xpc3QgaWYgY3BsYW4gaXMKKwkJCQkJCQkJICogbm90IE5VTEwg Ki8KIAlDYWNoZWRQbGFuICpjcGxhbjsJCQkvKiBDYWNoZWRQbGFuLCBpZiBzdG10cyBhcmUgZnJv bSBvbmUgKi8KIAogCVBhcmFtTGlzdEluZm8gcG9ydGFsUGFyYW1zOyAvKiBwYXJhbXMgdG8gcGFz cyB0byBxdWVyeSAqLwpAQCAtMjQxLDYgKzI0NSw3IEBAIGV4dGVybiB2b2lkIFBvcnRhbERlZmlu ZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJCQkJICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAog CQkJCQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAogCQkJCQkJCSAgTGlzdCAqc3RtdHMsCisJ CQkJCQkJICBMaXN0ICpleGVjbG9ja3JlbHNpbmZvcywKIAkJCQkJCQkgIENhY2hlZFBsYW4gKmNw bGFuKTsKIGV4dGVybiBQbGFubmVkU3RtdCAqUG9ydGFsR2V0UHJpbWFyeVN0bXQoUG9ydGFsIHBv cnRhbCk7CiBleHRlcm4gdm9pZCBQb3J0YWxDcmVhdGVIb2xkU3RvcmUoUG9ydGFsIHBvcnRhbCk7 Ci0tIAoyLjI0LjEKCg== --0000000000002d674405db7b3764 Content-Type: application/octet-stream; name="v8-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Disposition: attachment; filename="v8-0001-Some-refactoring-of-runtime-pruning-code.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1efoz0v0 RnJvbSBjZTIwNDFiMjU0YTdmZWUzMDk3MDEyZjExNjg1YjYzNWQ1OGZiOWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyIE1hciAyMDIyIDE1OjE3OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2OCAxLzRd IFNvbWUgcmVmYWN0b3Jpbmcgb2YgcnVudGltZSBwcnVuaW5nIGNvZGUKClRoaXMgZG9lcyB0d28g dGhpbmdzIG1haW5seToKCiogTW92ZSB0aGUgZXhlY3V0aW9uIHBydW5pbmcgaW5pdGlhbGl6YXRp b24gc3RlcHMgdGhhdCBhcmUgY29tbW9uCmJldHdlZW4gYm90aCBFeGVjSW5pdEFwcGVuZCgpIGFu ZCBFeGVjSW5pdE1lcmdlQXBwZW5kKCkgaW50byBhIG5ldwpmdW5jdGlvbiBFeGVjSW5pdFBhcnRp dGlvblBydW5pbmcoKSBkZWZpbmVkIGluIGV4ZWNQYXJ0aXRpb24uYy4KVGh1cywgRXhlY0NyZWF0 ZVBhcnRpdGlvblBydW5lU3RhdGUoKSBhbmQKRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFu cygpIG5lZWQgbm90IGJlIGV4cG9ydGVkLgoKKiBBZGQgYW4gRXhwckNvbnRleHQgZmllbGQgdG8g UGFydGl0aW9uUHJ1bmVDb250ZXh0IHRvIHJlbW92ZSB0aGUKaW1wbGljaXQgYXNzdW1wdGlvbiBp biB0aGUgcnVudGltZSBwcnVuaW5nIGNvZGUgdGhhdCB0aGUgRXhwckNvbnRleHQKdG8gdXNlIHRv IGNvbXB1dGUgcHJ1bmluZyBleHByZXNzaW9ucyB0aGF0IG5lZWQgb25lIGNhbiBhbHdheXMgcmVs eQpvbiB0aGUgUGxhblN0YXRlIHByb3ZpZGluZyBpdC4gIEEgZnV0dXJlIHBhdGNoIHdpbGwgYWxs b3cgcnVudGltZQpwcnVuaW5nIChhdCBsZWFzdCB0aGUgaW5pdGlhbCBwcnVuaW5nIHN0ZXBzKSB0 byBiZSBwZXJmb3JtZWQgd2l0aG91dAp0aGUgY29ycmVzcG9uZGluZyBQbGFuU3RhdGUgeWV0IGhh dmluZyBiZWVuIGNyZWF0ZWQsIHNvIHRoaXMgd2lsbApoZWxwLgotLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMzQwICsrKysrKysrKysrKysrKystLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgIDMzICstLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAgMzIgKy0tCiBzcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMgICB8ICAyMCArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0 cHJ1bmUuaCAgIHwgICAyICsKIDYgZmlsZXMgY2hhbmdlZCwgMjUyIGluc2VydGlvbnMoKyksIDE4 NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy dGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKaW5kZXggYWNh NDJjYTViOC4uODRiNGU0YjNkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpA QCAtMTg0LDExICsxODQsMTggQEAgc3RhdGljIGNoYXIgKkV4ZWNCdWlsZFNsb3RQYXJ0aXRpb25L ZXlEZXNjcmlwdGlvbihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCQkgIGludCBtYXhmaWVsZGxl bik7CiBzdGF0aWMgTGlzdCAqYWRqdXN0X3BhcnRpdGlvbl9jb2xub3MoTGlzdCAqY29sbm9zLCBS ZXN1bHRSZWxJbmZvICpsZWFmX3BhcnRfcnJpKTsKIHN0YXRpYyBMaXN0ICphZGp1c3RfcGFydGl0 aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKTsKK3N0 YXRpYyBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKKwkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0 aW9ucHJ1bmVpbmZvKTsKK3N0YXRpYyBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5n U3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSk7CiBzdGF0aWMgdm9pZCBF eGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4dCwKIAkJ CQkJCQkJICAgTGlzdCAqcHJ1bmluZ19zdGVwcywKIAkJCQkJCQkJICAgUGFydGl0aW9uRGVzYyBw YXJ0ZGVzYywKIAkJCQkJCQkJICAgUGFydGl0aW9uS2V5IHBhcnRrZXksCi0JCQkJCQkJCSAgIFBs YW5TdGF0ZSAqcGxhbnN0YXRlKTsKKwkJCQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUsCisJ CQkJCQkJCSAgIEV4cHJDb250ZXh0ICplY29udGV4dCk7CitzdGF0aWMgdm9pZCBQYXJ0aXRpb25Q cnVuZVN0YXRlRml4U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAor CQkJCQkJCQkgQml0bWFwc2V0ICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCSBp bnQgbl90b3RhbF9zdWJwbGFucyk7CiBzdGF0aWMgdm9pZCBmaW5kX21hdGNoaW5nX3N1YnBsYW5z X3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSwKIAkJCQkJCQkJCQkgICBQ YXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUsCiAJCQkJCQkJCQkJICAgYm9vbCBpbml0 aWFsX3BydW5lLApAQCAtMTU5MCwzMCArMTU5Nyw4NiBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5v c191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRyTWFwICphdHRyTWFwKQogICoKICAqIEZ1bmN0 aW9uczoKICAqCi0gKiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZToKKyAqIEV4ZWNJbml0 UGFydGl0aW9uUHJ1bmluZzoKICAqCQlDcmVhdGVzIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlIHJl cXVpcmVkIGJ5IGVhY2ggb2YgdGhlIHR3byBwcnVuaW5nCiAgKgkJZnVuY3Rpb25zLiAgRGV0YWls cyBzdG9yZWQgaW5jbHVkZSBob3cgdG8gbWFwIHRoZSBwYXJ0aXRpb24gaW5kZXgKLSAqCQlyZXR1 cm5lZCBieSB0aGUgcGFydGl0aW9uIHBydW5pbmcgY29kZSBpbnRvIHN1YnBsYW4gaW5kZXhlcy4K LSAqCi0gKiBFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zOgotICoJCVJldHVybnMgaW5k ZXhlcyBvZiBtYXRjaGluZyBzdWJwbGFucy4gIFBhcnRpdGlvbiBwcnVuaW5nIGlzIGF0dGVtcHRl ZAotICoJCXdpdGhvdXQgYW55IGV2YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgY29udGFpbmluZyBQ QVJBTV9FWEVDIFBhcmFtcy4KLSAqCQlUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGR1cmlu ZyBleGVjdXRvciBzdGFydHVwIGZvciB0aGUgcGFyZW50Ci0gKgkJcGxhbiBiZWZvcmUgdGhlIHN1 YnBsYW5zIHRoZW1zZWx2ZXMgYXJlIGluaXRpYWxpemVkLiAgU3VicGxhbnMgd2hpY2gKLSAqCQlh cmUgZm91bmQgbm90IHRvIG1hdGNoIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSByZW1vdmVkIGZy b20gdGhlCi0gKgkJcGxhbidzIGxpc3Qgb2Ygc3VicGxhbnMgZHVyaW5nIGV4ZWN1dGlvbiwgYXMg dGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhCi0gKgkJcmVtYXAgb2YgdGhlIHBhcnRpdGlvbiBpbmRl eCB0byBzdWJwbGFuIGluZGV4IG1hcCBhbmQgdGhlIG5ld2x5Ci0gKgkJY3JlYXRlZCBtYXAgcHJv dmlkZXMgaW5kZXhlcyBvbmx5IGZvciBzdWJwbGFucyB3aGljaCByZW1haW4gYWZ0ZXIKLSAqCQlj YWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgkJcmV0dXJuZWQgYnkgdGhlIHBhcnRpdGlvbiBwcnVu aW5nIGNvZGUgaW50byBzdWJwbGFuIGluZGV4ZXMuICBBbHNvCisgKgkJZGV0ZXJtaW5lcyB0aGUg c2V0IG9mIGluaXRpYWxseSB2YWxpZCBzdWJwbGFucyBieSBwZXJmb3JtaW5nIGluaXRpYWwKKyAq CQlwcnVuaW5nIHN0ZXBzLCBvbmx5IHdoaWNoIG5lZWQgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlIGNh bGxlciBzdWNoIGFzCisgKgkJRXhlY0luaXRBcHBlbmQuICBNYXBzIGluIFBhcnRpdGlvblBydW5l U3RhdGUgYXJlIHVwZGF0ZWQgdG8gYWNjb3VudAorICoJCWZvciBpbml0aWFsIHBydW5pbmcgaGF2 aW5nIGVsaW1pbmF0ZWQgc29tZSBvZiB0aGUgc3VicGxhbnMsIGlmIGFueS4KICAqCiAgKiBFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnM6CiAgKgkJUmV0dXJucyBpbmRleGVzIG9mIG1hdGNoaW5nIHN1 YnBsYW5zIGFmdGVyIGV2YWx1YXRpbmcgYWxsIGF2YWlsYWJsZQotICoJCWV4cHJlc3Npb25zLiAg VGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgZHVyaW5nIGV4ZWN1dGlvbiBhbmQKLSAq CQltdXN0IGJlIGNhbGxlZCBhZ2FpbiBlYWNoIHRpbWUgdGhlIHZhbHVlIG9mIGEgUGFyYW0gbGlz dGVkIGluCi0gKgkJUGFydGl0aW9uUHJ1bmVTdGF0ZSdzICdleGVjcGFyYW1pZHMnIGNoYW5nZXMu CisgKgkJZXhwcmVzc2lvbnMsIHRoYXQgaXMsIHVzaW5nIGV4ZWN1dGlvbiBwcnVuaW5nIHN0ZXBz LiAgVGhpcyBmdW5jdGlvbiBjYW4KKyAqCQljYW4gb25seSBiZSBjYWxsZWQgZHVyaW5nIGV4ZWN1 dGlvbiBhbmQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gZWFjaCB0aW1lCisgKgkJdGhlIHZhbHVlIG9m IGEgUGFyYW0gbGlzdGVkIGluIFBhcnRpdGlvblBydW5lU3RhdGUncyAnZXhlY3BhcmFtaWRzJwor ICoJCWNoYW5nZXMuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisvKgorICogRXhlY0luaXRQ YXJ0aXRpb25QcnVuaW5nCisgKiAJCUluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmUgbmVlZGVkIGZv ciBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZworICoKKyAqIEluaXRpYWwgcHJ1bmluZyBjYW4g YmUgZG9uZSBpbW1lZGlhdGVseSwgc28gaXQgaXMgZG9uZSBoZXJlIGlmIG5lZWRlZCBhbmQKKyAq IHRoZSBzZXQgb2Ygc3Vydml2aW5nIHBhcnRpdGlvbiBzdWJwbGFucycgaW5kZXhlcyBhcmUgYWRk ZWQgdG8gdGhlIG91dHB1dAorICogcGFyYW1ldGVyICppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMu CisgKgorICogSWYgc3VicGxhbnMgYXJlIGluZGVlZCBwcnVuZWQsIHN1YnBsYW5fbWFwIGFycmF5 cyBjb250YWluZWQgaW4gdGhlIHJldHVybmVkCisgKiBQYXJ0aXRpb25QcnVuZVN0YXRlIGFyZSBy ZS1zZXF1ZW5jZWQgdG8gbm90IGNvdW50IHRob3NlLCB0aG91Z2ggb25seSBpZiB0aGUKKyAqIG1h cHMgd2lsbCBiZSBuZWVkZWQgZm9yIHN1YnNlcXVlbnQgZXhlY3V0aW9uIHBydW5pbmcgcGFzc2Vz LgorICovCitQYXJ0aXRpb25QcnVuZVN0YXRlICoKK0V4ZWNJbml0UGFydGl0aW9uUHJ1bmluZyhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKKwkJCQkJCSBpbnQgbl90b3RhbF9zdWJwbGFucywKKwkJCQkJ CSBQYXJ0aXRpb25QcnVuZUluZm8gKnBydW5laW5mbywKKwkJCQkJCSBCaXRtYXBzZXQgKippbml0 aWFsbHlfdmFsaWRfc3VicGxhbnMpCit7CisJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZTsKKwlFU3RhdGUgKmVzdGF0ZSA9IHBsYW5zdGF0ZS0+c3RhdGU7CisKKwkvKiBXZSBtYXkgbmVl ZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCisJ RXhlY0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgcGxhbnN0YXRlKTsKKworCS8qCisJICogQ3Jl YXRlIHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nLgorCSAqLworCXBydW5l c3RhdGUgPSBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShwbGFuc3RhdGUsIHBydW5laW5m byk7CisKKwkvKgorCSAqIFBlcmZvcm0gYW4gaW5pdGlhbCBwYXJ0aXRpb24gcHJ1bmUsIGlmIHJl cXVpcmVkLgorCSAqLworCWlmIChwcnVuZXN0YXRlLT5kb19pbml0aWFsX3BydW5lKQorCXsKKwkJ LyogRGV0ZXJtaW5lIHdoaWNoIHN1YnBsYW5zIHN1cnZpdmUgaW5pdGlhbCBwcnVuaW5nICovCisJ CSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBFeGVjRmluZEluaXRpYWxNYXRjaGluZ1N1YlBs YW5zKHBydW5lc3RhdGUpOworCX0KKwllbHNlCisJeworCQkvKiBXZSdsbCBuZWVkIHRvIGluaXRp YWxpemUgYWxsIHN1YnBsYW5zICovCisJCUFzc2VydChuX3RvdGFsX3N1YnBsYW5zID4gMCk7CisJ CSppbml0aWFsbHlfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsCisJCQkJ CQkJCQkJCQkgIG5fdG90YWxfc3VicGxhbnMgLSAxKTsKKwl9CisKKwkvKgorCSAqIFJlLXNlcXVl bmNlIHN1YnBsYW4gaW5kZXhlcyBjb250YWluZWQgaW4gcHJ1bmVzdGF0ZSB0byBhY2NvdW50IGZv ciBhbnkKKwkgKiB0aGF0IHdlcmUgcmVtb3ZlZCBhYm92ZSBkdWUgdG8gaW5pdGlhbCBwcnVuaW5n LgorCSAqCisJICogV2UgY2FuIHNhZmVseSBza2lwIHRoaXMgd2hlbiAhZG9fZXhlY19wcnVuZSwg ZXZlbiB0aG91Z2ggdGhhdCBsZWF2ZXMKKwkgKiBpbnZhbGlkIGRhdGEgaW4gcHJ1bmVzdGF0ZSwg YmVjYXVzZSB0aGF0IGRhdGEgd29uJ3QgYmUgY29uc3VsdGVkIGFnYWluCisJICogKGNmIGluaXRp YWwgQXNzZXJ0IGluIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucykuCisJICovCisJaWYgKHBydW5l c3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYKKwkJYm1zX251bV9tZW1iZXJzKCppbml0aWFsbHlfdmFs aWRfc3VicGxhbnMpIDwgbl90b3RhbF9zdWJwbGFucykKKwkJUGFydGl0aW9uUHJ1bmVTdGF0ZUZp eFN1YlBsYW5NYXAocHJ1bmVzdGF0ZSwKKwkJCQkJCQkJCQkgKmluaXRpYWxseV92YWxpZF9zdWJw bGFucywKKwkJCQkJCQkJCQkgbl90b3RhbF9zdWJwbGFucyk7CisKKwlyZXR1cm4gcHJ1bmVzdGF0 ZTsKK30KKwogLyoKICAqIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlCiAgKgkJQnVpbGQg dGhlIGRhdGEgc3RydWN0dXJlIHJlcXVpcmVkIGZvciBjYWxsaW5nCkBAIC0xNjMyLDcgKzE2OTUs NyBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRy TWFwICphdHRyTWFwKQogICogcmUtdXNlZCBlYWNoIHRpbWUgd2UgcmUtZXZhbHVhdGUgd2hpY2gg cGFydGl0aW9ucyBtYXRjaCB0aGUgcHJ1bmluZyBzdGVwcwogICogcHJvdmlkZWQgaW4gZWFjaCBQ YXJ0aXRpb25lZFJlbFBydW5lSW5mby4KICAqLwotUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCitzdGF0 aWMgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqCiBFeGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAqcGFydGl0 aW9ucHJ1bmVpbmZvKQogewpAQCAtMTY0MSw2ICsxNzA0LDcgQEAgRXhlY0NyZWF0ZVBhcnRpdGlv blBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJaW50CQkJbl9wYXJ0X2hpZXJhcmNo aWVzOwogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CisJRXhwckNvbnRleHQJKmVjb250ZXh0 ID0gcGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKIAogCS8qIEZvciBkYXRhIHJlYWRpbmcsIGV4 ZWN1dG9yIGFsd2F5cyBvbWl0cyBkZXRhY2hlZCBwYXJ0aXRpb25zICovCiAJaWYgKGVzdGF0ZS0+ ZXNfcGFydGl0aW9uX2RpcmVjdG9yeSA9PSBOVUxMKQpAQCAtMTgxNCw3ICsxODc4LDggQEAgRXhl Y0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsCiAJCQl7CiAJ CQkJRXhlY0luaXRQcnVuaW5nQ29udGV4dCgmcHBydW5lLT5pbml0aWFsX2NvbnRleHQsCiAJCQkJ CQkJCQkgICBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLAotCQkJCQkJCQkJICAgcGFydGRl c2MsIHBhcnRrZXksIHBsYW5zdGF0ZSk7CisJCQkJCQkJCQkgICBwYXJ0ZGVzYywgcGFydGtleSwg cGxhbnN0YXRlLAorCQkJCQkJCQkJICAgZWNvbnRleHQpOwogCQkJCS8qIFJlY29yZCB3aGV0aGVy IGluaXRpYWwgcHJ1bmluZyBpcyBuZWVkZWQgYXQgYW55IGxldmVsICovCiAJCQkJcHJ1bmVzdGF0 ZS0+ZG9faW5pdGlhbF9wcnVuZSA9IHRydWU7CiAJCQl9CkBAIC0xODIzLDcgKzE4ODgsOCBAQCBF eGVjQ3JlYXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCXsK IAkJCQlFeGVjSW5pdFBydW5pbmdDb250ZXh0KCZwcHJ1bmUtPmV4ZWNfY29udGV4dCwKIAkJCQkJ CQkJCSAgIHBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMsCi0JCQkJCQkJCQkgICBwYXJ0ZGVzYywg cGFydGtleSwgcGxhbnN0YXRlKTsKKwkJCQkJCQkJCSAgIHBhcnRkZXNjLCBwYXJ0a2V5LCBwbGFu c3RhdGUsCisJCQkJCQkJCQkgICBlY29udGV4dCk7CiAJCQkJLyogUmVjb3JkIHdoZXRoZXIgZXhl YyBwcnVuaW5nIGlzIG5lZWRlZCBhdCBhbnkgbGV2ZWwgKi8KIAkJCQlwcnVuZXN0YXRlLT5kb19l eGVjX3BydW5lID0gdHJ1ZTsKIAkJCX0KQEAgLTE4NTEsNyArMTkxNyw4IEBAIEV4ZWNJbml0UHJ1 bmluZ0NvbnRleHQoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkJCQkgICBMaXN0 ICpwcnVuaW5nX3N0ZXBzLAogCQkJCQkgICBQYXJ0aXRpb25EZXNjIHBhcnRkZXNjLAogCQkJCQkg ICBQYXJ0aXRpb25LZXkgcGFydGtleSwKLQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUpCisJ CQkJCSAgIFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAorCQkJCQkgICBFeHByQ29udGV4dCAqZWNvbnRl eHQpCiB7CiAJaW50CQkJbl9zdGVwczsKIAlpbnQJCQlwYXJ0bmF0dHM7CkBAIC0xODcyLDYgKzE5 MzksNyBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29u dGV4dCwKIAogCWNvbnRleHQtPnBwY2NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKIAlj b250ZXh0LT5wbGFuc3RhdGUgPSBwbGFuc3RhdGU7CisJY29udGV4dC0+ZXhwcmNvbnRleHQgPSBl Y29udGV4dDsKIAogCS8qIEluaXRpYWxpemUgZXhwcmVzc2lvbiBzdGF0ZSBmb3IgZWFjaCBleHBy ZXNzaW9uIHdlIG5lZWQgKi8KIAljb250ZXh0LT5leHByc3RhdGVzID0gKEV4cHJTdGF0ZSAqKikK QEAgLTE5MDAsOCArMTk2OCwyMCBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlvblBy dW5lQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQkJCQkJc3RlcC0+c3RlcC5zdGVwX2lkLAog CQkJCQkJCQkJCQkJCQlrZXlubyk7CiAKLQkJCQljb250ZXh0LT5leHByc3RhdGVzW3N0YXRlaWR4 XSA9Ci0JCQkJCUV4ZWNJbml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOworCQkJCS8q CisJCQkJICogV2hlbiBwbGFuc3RhdGUgaXMgTlVMTCwgcHJ1bmluZ19zdGVwcyBpcyBrbm93biBu b3QgdG8KKwkJCQkgKiBjb250YWluIGFueSBleHByZXNzaW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUg cGFyZW50IHBsYW4uCisJCQkJICogSW5mb3JtYXRpb24gb2YgYW55IGF2YWlsYWJsZSBFWFRFUk4g cGFyYW1ldGVycyBtdXN0IGJlCisJCQkJICogcGFzc2VkIGV4cGxpY2l0bHkgaW4gdGhhdCBjYXNl LCB3aGljaCB0aGUgY2FsbGVyIG11c3QKKwkJCQkgKiBoYXZlIG1hZGUgYXZhaWxhYmxlIHZpYSBl Y29udGV4dC4KKwkJCQkgKi8KKwkJCQlpZiAocGxhbnN0YXRlID09IE5VTEwpCisJCQkJCWNvbnRl eHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJbml0RXhwcldpdGhQYXJhbXMo ZXhwciwKKwkJCQkJCQkJCQkJICAgZWNvbnRleHQtPmVjeHRfcGFyYW1fbGlzdF9pbmZvKTsKKwkJ CQllbHNlCisJCQkJCWNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdID0KKwkJCQkJCUV4ZWNJ bml0RXhwcihleHByLCBjb250ZXh0LT5wbGFuc3RhdGUpOwogCQkJfQogCQkJa2V5bm8rKzsKIAkJ fQpAQCAtMTkxNCwxOCArMTk5NCwxMSBAQCBFeGVjSW5pdFBydW5pbmdDb250ZXh0KFBhcnRpdGlv blBydW5lQ29udGV4dCAqY29udGV4dCwKICAqCQlwcnVuaW5nLCBkaXNyZWdhcmRpbmcgYW55IHBy dW5pbmcgY29uc3RyYWludHMgaW52b2x2aW5nIFBBUkFNX0VYRUMKICAqCQlQYXJhbXMuCiAgKgot ICogSWYgYWRkaXRpb25hbCBwcnVuaW5nIHBhc3NlcyB3aWxsIGJlIHJlcXVpcmVkIChiZWNhdXNl IG9mIFBBUkFNX0VYRUMKLSAqIFBhcmFtcyksIHdlIG11c3QgYWxzbyB1cGRhdGUgdGhlIHRyYW5z bGF0aW9uIGRhdGEgdGhhdCBhbGxvd3MgY29udmVyc2lvbgotICogb2YgcGFydGl0aW9uIGluZGV4 ZXMgaW50byBzdWJwbGFuIGluZGV4ZXMgdG8gYWNjb3VudCBmb3IgdGhlIHVubmVlZGVkCi0gKiBz dWJwbGFucyBoYXZpbmcgYmVlbiByZW1vdmVkLgotICoKICAqIE11c3Qgb25seSBiZSBjYWxsZWQg b25jZSBwZXIgJ3BydW5lc3RhdGUnLCBhbmQgb25seSBpZiBpbml0aWFsIHBydW5pbmcKICAqIGlz IHJlcXVpcmVkLgotICoKLSAqICduc3VicGxhbnMnIG11c3QgYmUgcGFzc2VkIGFzIHRoZSB0b3Rh bCBudW1iZXIgb2YgdW5wcnVuZWQgc3VicGxhbnMuCiAgKi8KLUJpdG1hcHNldCAqCi1FeGVjRmlu ZEluaXRpYWxNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3RhdGUs IGludCBuc3VicGxhbnMpCitzdGF0aWMgQml0bWFwc2V0ICoKK0V4ZWNGaW5kSW5pdGlhbE1hdGNo aW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkKIHsKIAlCaXRtYXBz ZXQgICpyZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTE5NTAs MTQgKzIwMjMsMjAgQEAgRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25Q cnVuZVN0YXRlICpwcnVuZXN0YXRlLCBpbnQgbnN1YnBsYW5zKQogCQlQYXJ0aXRpb25lZFJlbFBy dW5pbmdEYXRhICpwcHJ1bmU7CiAKIAkJcHJ1bmVkYXRhID0gcHJ1bmVzdGF0ZS0+cGFydHBydW5l ZGF0YVtpXTsKKworCQkvKgorCQkgKiBXZSBwYXNzIHRoZSAxc3QgaXRlbSBiZWxvbmdpbmcgdG8g dGhlIHJvb3QgdGFibGUgb2YgdGhlIGhpZXJhcmNoeQorCQkgKiBhbmQgZmluZF9tYXRjaGluZ19z dWJwbGFuc19yZWN1cnNlKCkgdGFrZXMgY2FyZSBvZiByZWN1cnNpbmcgdG8KKwkJICogb3RoZXIg KGxvd2VyLWxldmVsKSBwYXJlbnRzIGFzIG5lZWRlZC4KKwkJICovCiAJCXBwcnVuZSA9ICZwcnVu ZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbMF07CiAKIAkJLyogUGVyZm9ybSBwcnVuaW5nIHdpdGhv dXQgdXNpbmcgUEFSQU1fRVhFQyBQYXJhbXMgKi8KIAkJZmluZF9tYXRjaGluZ19zdWJwbGFuc19y ZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCB0cnVlLCAmcmVzdWx0KTsKIAotCQkvKiBFeHByZXNz aW9uIGV2YWwgbWF5IGhhdmUgdXNlZCBzcGFjZSBpbiBub2RlJ3MgcHNfRXhwckNvbnRleHQgdG9v ICovCisJCS8qIEV4cHJlc3Npb24gZXZhbCBtYXkgaGF2ZSB1c2VkIHNwYWNlIGluIEV4cHJDb250 ZXh0IHRvbyAqLwogCQlpZiAocHBydW5lLT5pbml0aWFsX3BydW5pbmdfc3RlcHMpCi0JCQlSZXNl dEV4cHJDb250ZXh0KHBwcnVuZS0+aW5pdGlhbF9jb250ZXh0LnBsYW5zdGF0ZS0+cHNfRXhwckNv bnRleHQpOworCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmluaXRpYWxfY29udGV4dC5leHBy Y29udGV4dCk7CiAJfQogCiAJLyogQWRkIGluIGFueSBzdWJwbGFucyB0aGF0IHBhcnRpdGlvbiBw cnVuaW5nIGRpZG4ndCBhY2NvdW50IGZvciAqLwpAQCAtMTk3MCwxMTggKzIwNDksMTIwIEBAIEV4 ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVz dGF0ZSwgaW50IG5zdWJwbGFucykKIAogCU1lbW9yeUNvbnRleHRSZXNldChwcnVuZXN0YXRlLT5w cnVuZV9jb250ZXh0KTsKIAorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBQYXJ0aXRpb25Q cnVuZVN0YXRlRml4U3ViUGxhbk1hcAorICoJCUZpeCBtYXBwaW5nIG9mIHBhcnRpdGlvbiBpbmRl eGVzIHRvIHN1YnBsYW4gaW5kZXhlcyBjb250YWluZWQgaW4KKyAqCQlwcnVuZXN0YXRlIGJ5IGNv bnNpZGVyaW5nIHRoZSBuZXcgbGlzdCBvZiBzdWJwbGFucyB0aGF0IHN1cnZpdmVkCisgKgkJaW5p dGlhbCBwcnVuaW5nCisgKgorICogU3VicGxhbnMgd291bGQgcHJldmlvdXNseSBiZSBpbmRleGVk IDAuLihuX3RvdGFsX3N1YnBsYW5zIC0gMSkgc2hvdWxkIGJlCisgKiBjaGFuZ2VkIHRvIGluZGV4 IHJhbmdlIDAuLm51bShpbml0aWFsbHlfdmFsaWRfc3VicGxhbnMpLgorICovCitzdGF0aWMgdm9p ZAorUGFydGl0aW9uUHJ1bmVTdGF0ZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1bmVTdGF0ZSAq cHJ1bmVzdGF0ZSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5z LAorCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxhbnMpCit7CisJaW50CQkgICAqbmV3X3N1YnBs YW5faW5kZXhlczsKKwlCaXRtYXBzZXQgICpuZXdfb3RoZXJfc3VicGxhbnM7CisJaW50CQkJaTsK KwlpbnQJCQluZXdpZHg7CisKIAkvKgotCSAqIElmIGV4ZWMtdGltZSBwcnVuaW5nIGlzIHJlcXVp cmVkIGFuZCB3ZSBwcnVuZWQgc3VicGxhbnMgYWJvdmUsIHRoZW4gd2UKLQkgKiBtdXN0IHJlLXNl cXVlbmNlIHRoZSBzdWJwbGFuIGluZGV4ZXMgc28gdGhhdCBFeGVjRmluZE1hdGNoaW5nU3ViUGxh bnMKLQkgKiBwcm9wZXJseSByZXR1cm5zIHRoZSBpbmRleGVzIGZyb20gdGhlIHN1YnBsYW5zIHdo aWNoIHdpbGwgcmVtYWluIGFmdGVyCi0JICogZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCi0J ICoKLQkgKiBXZSBjYW4gc2FmZWx5IHNraXAgdGhpcyB3aGVuICFkb19leGVjX3BydW5lLCBldmVu IHRob3VnaCB0aGF0IGxlYXZlcwotCSAqIGludmFsaWQgZGF0YSBpbiBwcnVuZXN0YXRlLCBiZWNh dXNlIHRoYXQgZGF0YSB3b24ndCBiZSBjb25zdWx0ZWQgYWdhaW4KLQkgKiAoY2YgaW5pdGlhbCBB c3NlcnQgaW4gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKS4KKwkgKiBGaXJzdCB3ZSBtdXN0IGJ1 aWxkIGEgdGVtcG9yYXJ5IGFycmF5IHdoaWNoIG1hcHMgb2xkIHN1YnBsYW4KKwkgKiBpbmRleGVz IHRvIG5ldyBvbmVzLiAgRm9yIGNvbnZlbmllbmNlIG9mIGluaXRpYWxpemF0aW9uLCB3ZSB1c2UK KwkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1bmVkIGl0ZW1z IGFzIDAuCiAJICovCi0JaWYgKHBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgYm1zX251bV9t ZW1iZXJzKHJlc3VsdCkgPCBuc3VicGxhbnMpCisJbmV3X3N1YnBsYW5faW5kZXhlcyA9IChpbnQg KikgcGFsbG9jMChzaXplb2YoaW50KSAqIG5fdG90YWxfc3VicGxhbnMpOworCW5ld2lkeCA9IDE7 CisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihpbml0aWFsbHlfdmFsaWRf c3VicGxhbnMsIGkpKSA+PSAwKQogCXsKLQkJaW50CQkgICAqbmV3X3N1YnBsYW5faW5kZXhlczsK LQkJQml0bWFwc2V0ICAqbmV3X290aGVyX3N1YnBsYW5zOwotCQlpbnQJCQlpOwotCQlpbnQJCQlu ZXdpZHg7CisJCUFzc2VydChpIDwgbl90b3RhbF9zdWJwbGFucyk7CisJCW5ld19zdWJwbGFuX2lu ZGV4ZXNbaV0gPSBuZXdpZHgrKzsKKwl9CiAKLQkJLyoKLQkJICogRmlyc3Qgd2UgbXVzdCBidWls ZCBhIHRlbXBvcmFyeSBhcnJheSB3aGljaCBtYXBzIG9sZCBzdWJwbGFuCi0JCSAqIGluZGV4ZXMg dG8gbmV3IG9uZXMuICBGb3IgY29udmVuaWVuY2Ugb2YgaW5pdGlhbGl6YXRpb24sIHdlIHVzZQot CQkgKiAxLWJhc2VkIGluZGV4ZXMgaW4gdGhpcyBhcnJheSBhbmQgbGVhdmUgcHJ1bmVkIGl0ZW1z IGFzIDAuCi0JCSAqLwotCQluZXdfc3VicGxhbl9pbmRleGVzID0gKGludCAqKSBwYWxsb2MwKHNp emVvZihpbnQpICogbnN1YnBsYW5zKTsKLQkJbmV3aWR4ID0gMTsKLQkJaSA9IC0xOwotCQl3aGls ZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVzdWx0LCBpKSkgPj0gMCkKLQkJewotCQkJQXNzZXJ0 KGkgPCBuc3VicGxhbnMpOwotCQkJbmV3X3N1YnBsYW5faW5kZXhlc1tpXSA9IG5ld2lkeCsrOwot CQl9CisJLyoKKwkgKiBOb3cgd2UgY2FuIHVwZGF0ZSBlYWNoIFBhcnRpdGlvbmVkUmVsUHJ1bmVJ bmZvJ3Mgc3VicGxhbl9tYXAgd2l0aAorCSAqIG5ldyBzdWJwbGFuIGluZGV4ZXMuICBXZSBtdXN0 IGFsc28gcmVjb21wdXRlIGl0cyBwcmVzZW50X3BhcnRzCisJICogYml0bWFwLgorCSAqLworCWZv ciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsgaSsrKQorCXsKKwkJ UGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBydW5lZGF0YSA9IHBydW5lc3RhdGUtPnBhcnRwcnVuZWRh dGFbaV07CisJCWludAkJCWo7CiAKIAkJLyoKLQkJICogTm93IHdlIGNhbiB1cGRhdGUgZWFjaCBQ YXJ0aXRpb25lZFJlbFBydW5lSW5mbydzIHN1YnBsYW5fbWFwIHdpdGgKLQkJICogbmV3IHN1YnBs YW4gaW5kZXhlcy4gIFdlIG11c3QgYWxzbyByZWNvbXB1dGUgaXRzIHByZXNlbnRfcGFydHMKLQkJ ICogYml0bWFwLgorCQkgKiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBs b29wIGluIGJhY2stdG8tZnJvbnQKKwkJICogb3JkZXIgc28gdGhhdCB3ZSBkZXRlcm1pbmUgcHJl c2VudF9wYXJ0cyBmb3IgdGhlIGxvd2VzdC1sZXZlbAorCQkgKiBwYXJ0aXRpb25lZCB0YWJsZXMg Zmlyc3QuICBUaGlzIHdheSB3ZSBjYW4gdGVsbCB3aGV0aGVyIGEKKwkJICogc3ViLXBhcnRpdGlv bmVkIHRhYmxlJ3MgcGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQorCQkgKiBj YW4gZXhjbHVkZSBpdCBmcm9tIHRoZSBjdXJyZW50IGxldmVsJ3MgcHJlc2VudF9wYXJ0cy4KIAkJ ICovCi0JCWZvciAoaSA9IDA7IGkgPCBwcnVuZXN0YXRlLT5udW1fcGFydHBydW5lZGF0YTsgaSsr KQorCQlmb3IgKGogPSBwcnVuZWRhdGEtPm51bV9wYXJ0cmVscHJ1bmVkYXRhIC0gMTsgaiA+PSAw OyBqLS0pCiAJCXsKLQkJCVBhcnRpdGlvblBydW5pbmdEYXRhICpwcnVuZWRhdGEgPSBwcnVuZXN0 YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwotCQkJaW50CQkJajsKKwkJCVBhcnRpdGlvbmVkUmVsUHJ1 bmluZ0RhdGEgKnBwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRhdGFbal07CisJCQlp bnQJCQlucGFydHMgPSBwcHJ1bmUtPm5wYXJ0czsKKwkJCWludAkJCWs7CiAKLQkJCS8qCi0JCQkg KiBXaXRoaW4gZWFjaCBoaWVyYXJjaHksIHdlIHBlcmZvcm0gdGhpcyBsb29wIGluIGJhY2stdG8t ZnJvbnQKLQkJCSAqIG9yZGVyIHNvIHRoYXQgd2UgZGV0ZXJtaW5lIHByZXNlbnRfcGFydHMgZm9y IHRoZSBsb3dlc3QtbGV2ZWwKLQkJCSAqIHBhcnRpdGlvbmVkIHRhYmxlcyBmaXJzdC4gIFRoaXMg d2F5IHdlIGNhbiB0ZWxsIHdoZXRoZXIgYQotCQkJICogc3ViLXBhcnRpdGlvbmVkIHRhYmxlJ3Mg cGFydGl0aW9ucyB3ZXJlIGVudGlyZWx5IHBydW5lZCBzbyB3ZQotCQkJICogY2FuIGV4Y2x1ZGUg aXQgZnJvbSB0aGUgY3VycmVudCBsZXZlbCdzIHByZXNlbnRfcGFydHMuCi0JCQkgKi8KLQkJCWZv ciAoaiA9IHBydW5lZGF0YS0+bnVtX3BhcnRyZWxwcnVuZWRhdGEgLSAxOyBqID49IDA7IGotLSkK LQkJCXsKLQkJCQlQYXJ0aXRpb25lZFJlbFBydW5pbmdEYXRhICpwcHJ1bmUgPSAmcHJ1bmVkYXRh LT5wYXJ0cmVscHJ1bmVkYXRhW2pdOwotCQkJCWludAkJCW5wYXJ0cyA9IHBwcnVuZS0+bnBhcnRz OwotCQkJCWludAkJCWs7CisJCQkvKiBXZSBqdXN0IHJlYnVpbGQgcHJlc2VudF9wYXJ0cyBmcm9t IHNjcmF0Y2ggKi8KKwkJCWJtc19mcmVlKHBwcnVuZS0+cHJlc2VudF9wYXJ0cyk7CisJCQlwcHJ1 bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOwogCi0JCQkJLyogV2UganVzdCByZWJ1aWxkIHByZXNl bnRfcGFydHMgZnJvbSBzY3JhdGNoICovCi0JCQkJYm1zX2ZyZWUocHBydW5lLT5wcmVzZW50X3Bh cnRzKTsKLQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPSBOVUxMOworCQkJZm9yIChrID0gMDsg ayA8IG5wYXJ0czsgaysrKQorCQkJeworCQkJCWludAkJCW9sZGlkeCA9IHBwcnVuZS0+c3VicGxh bl9tYXBba107CisJCQkJaW50CQkJc3ViaWR4OwogCi0JCQkJZm9yIChrID0gMDsgayA8IG5wYXJ0 czsgaysrKQorCQkJCS8qCisJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3RlZCBhcyBhIHN1 YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCisJCQkJICogb2xkIHN1YnBsYW4gaW5kZXggdG8gdGhlIG5l dyBzdWJwbGFuIGluZGV4LiAgVGhlIG5ldworCQkJCSAqIGluZGV4IG1heSBiZWNvbWUgLTEgaWYg dGhlIHBhcnRpdGlvbiB3YXMgcHJ1bmVkIGFib3ZlLAorCQkJCSAqIG9yIGl0IG1heSBqdXN0IGNv bWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bworCQkJCSAqIHNvbWUgc3VicGxh bnMgYmVpbmcgcmVtb3ZlZCBlYXJsaWVyIGluIHRoZSBsaXN0LiAgSWYKKwkJCQkgKiBpdCdzIGEg c3VicGFydGl0aW9uLCBhZGQgaXQgdG8gcHJlc2VudF9wYXJ0cyB1bmxlc3MKKwkJCQkgKiBpdCdz IGVudGlyZWx5IHBydW5lZC4KKwkJCQkgKi8KKwkJCQlpZiAob2xkaWR4ID49IDApCiAJCQkJewot CQkJCQlpbnQJCQlvbGRpZHggPSBwcHJ1bmUtPnN1YnBsYW5fbWFwW2tdOwotCQkJCQlpbnQJCQlz dWJpZHg7Ci0KLQkJCQkJLyoKLQkJCQkJICogSWYgdGhpcyBwYXJ0aXRpb24gZXhpc3RlZCBhcyBh IHN1YnBsYW4gdGhlbiBjaGFuZ2UgdGhlCi0JCQkJCSAqIG9sZCBzdWJwbGFuIGluZGV4IHRvIHRo ZSBuZXcgc3VicGxhbiBpbmRleC4gIFRoZSBuZXcKLQkJCQkJICogaW5kZXggbWF5IGJlY29tZSAt MSBpZiB0aGUgcGFydGl0aW9uIHdhcyBwcnVuZWQgYWJvdmUsCi0JCQkJCSAqIG9yIGl0IG1heSBq dXN0IGNvbWUgZWFybGllciBpbiB0aGUgc3VicGxhbiBsaXN0IGR1ZSB0bwotCQkJCQkgKiBzb21l IHN1YnBsYW5zIGJlaW5nIHJlbW92ZWQgZWFybGllciBpbiB0aGUgbGlzdC4gIElmCi0JCQkJCSAq IGl0J3MgYSBzdWJwYXJ0aXRpb24sIGFkZCBpdCB0byBwcmVzZW50X3BhcnRzIHVubGVzcwotCQkJ CQkgKiBpdCdzIGVudGlyZWx5IHBydW5lZC4KLQkJCQkJICovCi0JCQkJCWlmIChvbGRpZHggPj0g MCkKLQkJCQkJewotCQkJCQkJQXNzZXJ0KG9sZGlkeCA8IG5zdWJwbGFucyk7Ci0JCQkJCQlwcHJ1 bmUtPnN1YnBsYW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsKKwkJ CQkJQXNzZXJ0KG9sZGlkeCA8IG5fdG90YWxfc3VicGxhbnMpOworCQkJCQlwcHJ1bmUtPnN1YnBs YW5fbWFwW2tdID0gbmV3X3N1YnBsYW5faW5kZXhlc1tvbGRpZHhdIC0gMTsKIAotCQkJCQkJaWYg KG5ld19zdWJwbGFuX2luZGV4ZXNbb2xkaWR4XSA+IDApCi0JCQkJCQkJcHBydW5lLT5wcmVzZW50 X3BhcnRzID0KLQkJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3BhcnRzLCBr KTsKLQkJCQkJfQotCQkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5zdWJwYXJ0X21hcFtr XSkgPj0gMCkKLQkJCQkJewotCQkJCQkJUGFydGl0aW9uZWRSZWxQcnVuaW5nRGF0YSAqc3VicHJ1 bmU7CisJCQkJCWlmIChuZXdfc3VicGxhbl9pbmRleGVzW29sZGlkeF0gPiAwKQorCQkJCQkJcHBy dW5lLT5wcmVzZW50X3BhcnRzID0KKwkJCQkJCQlibXNfYWRkX21lbWJlcihwcHJ1bmUtPnByZXNl bnRfcGFydHMsIGspOworCQkJCX0KKwkJCQllbHNlIGlmICgoc3ViaWR4ID0gcHBydW5lLT5zdWJw YXJ0X21hcFtrXSkgPj0gMCkKKwkJCQl7CisJCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEg KnN1YnBydW5lOwogCi0JCQkJCQlzdWJwcnVuZSA9ICZwcnVuZWRhdGEtPnBhcnRyZWxwcnVuZWRh dGFbc3ViaWR4XTsKKwkJCQkJc3VicHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0cmVscHJ1bmVkYXRh W3N1YmlkeF07CiAKLQkJCQkJCWlmICghYm1zX2lzX2VtcHR5KHN1YnBydW5lLT5wcmVzZW50X3Bh cnRzKSkKLQkJCQkJCQlwcHJ1bmUtPnByZXNlbnRfcGFydHMgPQotCQkJCQkJCQlibXNfYWRkX21l bWJlcihwcHJ1bmUtPnByZXNlbnRfcGFydHMsIGspOwotCQkJCQl9CisJCQkJCWlmICghYm1zX2lz X2VtcHR5KHN1YnBydW5lLT5wcmVzZW50X3BhcnRzKSkKKwkJCQkJCXBwcnVuZS0+cHJlc2VudF9w YXJ0cyA9CisJCQkJCQkJYm1zX2FkZF9tZW1iZXIocHBydW5lLT5wcmVzZW50X3BhcnRzLCBrKTsK IAkJCQl9CiAJCQl9CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogV2UgbXVzdCBhbHNvIHJlY29tcHV0 ZSB0aGUgb3RoZXJfc3VicGxhbnMgc2V0LCBzaW5jZSBpbmRleGVzIGluIGl0Ci0JCSAqIG1heSBj aGFuZ2UuCi0JCSAqLwotCQluZXdfb3RoZXJfc3VicGxhbnMgPSBOVUxMOwotCQlpID0gLTE7Ci0J CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFucywg aSkpID49IDApCi0JCQluZXdfb3RoZXJfc3VicGxhbnMgPSBibXNfYWRkX21lbWJlcihuZXdfb3Ro ZXJfc3VicGxhbnMsCi0JCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ldIC0gMSk7Ci0K LQkJYm1zX2ZyZWUocHJ1bmVzdGF0ZS0+b3RoZXJfc3VicGxhbnMpOwotCQlwcnVuZXN0YXRlLT5v dGhlcl9zdWJwbGFucyA9IG5ld19vdGhlcl9zdWJwbGFuczsKKwkvKgorCSAqIFdlIG11c3QgYWxz byByZWNvbXB1dGUgdGhlIG90aGVyX3N1YnBsYW5zIHNldCwgc2luY2UgaW5kZXhlcyBpbiBpdAor CSAqIG1heSBjaGFuZ2UuCisJICovCisJbmV3X290aGVyX3N1YnBsYW5zID0gTlVMTDsKKwlpID0g LTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBydW5lc3RhdGUtPm90aGVyX3N1YnBs YW5zLCBpKSkgPj0gMCkKKwkJbmV3X290aGVyX3N1YnBsYW5zID0gYm1zX2FkZF9tZW1iZXIobmV3 X290aGVyX3N1YnBsYW5zLAorCQkJCQkJCQkJCQluZXdfc3VicGxhbl9pbmRleGVzW2ldIC0gMSk7 CiAKLQkJcGZyZWUobmV3X3N1YnBsYW5faW5kZXhlcyk7Ci0JfQorCWJtc19mcmVlKHBydW5lc3Rh dGUtPm90aGVyX3N1YnBsYW5zKTsKKwlwcnVuZXN0YXRlLT5vdGhlcl9zdWJwbGFucyA9IG5ld19v dGhlcl9zdWJwbGFuczsKIAotCXJldHVybiByZXN1bHQ7CisJcGZyZWUobmV3X3N1YnBsYW5faW5k ZXhlcyk7CiB9CiAKIC8qCkBAIC0yMTIzLDExICsyMjA0LDE2IEBAIEV4ZWNGaW5kTWF0Y2hpbmdT dWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKQogCQlwcnVuZWRhdGEgPSBw cnVuZXN0YXRlLT5wYXJ0cHJ1bmVkYXRhW2ldOwogCQlwcHJ1bmUgPSAmcHJ1bmVkYXRhLT5wYXJ0 cmVscHJ1bmVkYXRhWzBdOwogCisJCS8qCisJCSAqIFdlIHBhc3MgdGhlIDFzdCBpdGVtIGJlbG9u Z2luZyB0byB0aGUgcm9vdCB0YWJsZSBvZiB0aGUgaGllcmFyY2h5CisJCSAqIGFuZCBmaW5kX21h dGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoKSB0YWtlcyBjYXJlIG9mIHJlY3Vyc2luZyB0bworCQkg KiBvdGhlciAobG93ZXItbGV2ZWwpIHBhcmVudHMgYXMgbmVlZGVkLgorCQkgKi8KIAkJZmluZF9t YXRjaGluZ19zdWJwbGFuc19yZWN1cnNlKHBydW5lZGF0YSwgcHBydW5lLCBmYWxzZSwgJnJlc3Vs dCk7CiAKLQkJLyogRXhwcmVzc2lvbiBldmFsIG1heSBoYXZlIHVzZWQgc3BhY2UgaW4gbm9kZSdz IHBzX0V4cHJDb250ZXh0IHRvbyAqLworCQkvKiBFeHByZXNzaW9uIGV2YWwgbWF5IGhhdmUgdXNl ZCBzcGFjZSBpbiBFeHByQ29udGV4dCB0b28gKi8KIAkJaWYgKHBwcnVuZS0+ZXhlY19wcnVuaW5n X3N0ZXBzKQotCQkJUmVzZXRFeHByQ29udGV4dChwcHJ1bmUtPmV4ZWNfY29udGV4dC5wbGFuc3Rh dGUtPnBzX0V4cHJDb250ZXh0KTsKKwkJCVJlc2V0RXhwckNvbnRleHQocHBydW5lLT5leGVjX2Nv bnRleHQuZXhwcmNvbnRleHQpOwogCX0KIAogCS8qIEFkZCBpbiBhbnkgc3VicGxhbnMgdGhhdCBw YXJ0aXRpb24gcHJ1bmluZyBkaWRuJ3QgYWNjb3VudCBmb3IgKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB cHBlbmQuYwppbmRleCA3OTM3ZjFjODhmLi41YjZkM2ViMjNiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUFwcGVuZC5jCkBAIC0xMzgsMzAgKzEzOCwxNyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqcHJ1bmVzdGF0ZTsKIAotCQkvKiBXZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQg dG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChl c3RhdGUsICZhcHBlbmRzdGF0ZS0+cHMpOwotCi0JCS8qIENyZWF0ZSB0aGUgd29ya2luZyBkYXRh IHN0cnVjdHVyZSBmb3IgcHJ1bmluZy4gKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0 aXRpb25QcnVuZVN0YXRlKCZhcHBlbmRzdGF0ZS0+cHMsCi0JCQkJCQkJCQkJCQkgICBub2RlLT5w YXJ0X3BydW5lX2luZm8pOworCQkvKgorCQkgKiBTZXQgdXAgcHJ1bmluZyBkYXRhIHN0cnVjdHVy ZS4gIEluaXRpYWwgcHJ1bmluZyBzdGVwcywgaWYgYW55LCBhcmUKKwkJICogcGVyZm9ybWVkIGFz IHBhcnQgb2YgdGhlIHNldHVwLCBhZGRpbmcgdGhlIHNldCBvZiBpbmRleGVzIG9mCisJCSAqIHN1 cnZpdmluZyBzdWJwbGFucyB0byAndmFsaWRzdWJwbGFucycuCisJCSAqLworCQlwcnVuZXN0YXRl ID0gRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKCZhcHBlbmRzdGF0ZS0+cHMsCisJCQkJCQkJCQkJ CSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUtPnBh cnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7CiAJCWFwcGVuZHN0 YXRlLT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7Ci0KLQkJLyogUGVyZm9ybSBhbiBpbml0 aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCi0JCWlmIChwcnVuZXN0YXRlLT5k b19pbml0aWFsX3BydW5lKQotCQl7Ci0JCQkvKiBEZXRlcm1pbmUgd2hpY2ggc3VicGxhbnMgc3Vy dml2ZSBpbml0aWFsIHBydW5pbmcgKi8KLQkJCXZhbGlkc3VicGxhbnMgPSBFeGVjRmluZEluaXRp YWxNYXRjaGluZ1N1YlBsYW5zKHBydW5lc3RhdGUsCi0JCQkJCQkJCQkJCQkJCQlsaXN0X2xlbmd0 aChub2RlLT5hcHBlbmRwbGFucykpOwotCi0JCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFs aWRzdWJwbGFucyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKiBXZSdsbCBuZWVkIHRvIGluaXRp YWxpemUgYWxsIHN1YnBsYW5zICovCi0JCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2RlLT5hcHBl bmRwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0gYm1z X2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJfQorCQlucGxhbnMgPSBibXNfbnVt X21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJLyoKIAkJICogV2hlbiBubyBydW4tdGltZSBw cnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA0MThmODlkZWE4Li45YTlmMjllODQ1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtODYsMjkgKzg2LDE3IEBAIEV4 ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKIAotCQkvKiBX ZSBtYXkgbmVlZCBhbiBleHByZXNzaW9uIGNvbnRleHQgdG8gZXZhbHVhdGUgcGFydGl0aW9uIGV4 cHJzICovCi0JCUV4ZWNBc3NpZ25FeHByQ29udGV4dChlc3RhdGUsICZtZXJnZXN0YXRlLT5wcyk7 Ci0KLQkJcHJ1bmVzdGF0ZSA9IEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZtZXJnZXN0 YXRlLT5wcywKLQkJCQkJCQkJCQkJCSAgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbyk7CisJCS8qCisJ CSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgSW5pdGlhbCBwcnVuaW5nIHN0ZXBz LCBpZiBhbnksIGFyZQorCQkgKiBwZXJmb3JtZWQgYXMgcGFydCBvZiB0aGUgc2V0dXAsIGFkZGlu ZyB0aGUgc2V0IG9mIGluZGV4ZXMgb2YKKwkJICogc3Vydml2aW5nIHN1YnBsYW5zIHRvICd2YWxp ZHN1YnBsYW5zJy4KKwkJICovCisJCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvblBydW5p bmcoJm1lcmdlc3RhdGUtPnBzLAorCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdl cGxhbnMpLAorCQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mbywKKwkJCQkJCQkJCQkJ ICAmdmFsaWRzdWJwbGFucyk7CiAJCW1lcmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVz dGF0ZTsKLQotCQkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcGFydGl0aW9uIHBydW5lLCBpZiByZXF1 aXJlZC4gKi8KLQkJaWYgKHBydW5lc3RhdGUtPmRvX2luaXRpYWxfcHJ1bmUpCi0JCXsKLQkJCS8q IERldGVybWluZSB3aGljaCBzdWJwbGFucyBzdXJ2aXZlIGluaXRpYWwgcHJ1bmluZyAqLwotCQkJ dmFsaWRzdWJwbGFucyA9IEV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMocHJ1bmVzdGF0 ZSwKLQkJCQkJCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKG5vZGUtPm1lcmdlcGxhbnMpKTsKLQotCQkJ bnBsYW5zID0gYm1zX251bV9tZW1iZXJzKHZhbGlkc3VicGxhbnMpOwotCQl9Ci0JCWVsc2UKLQkJ ewotCQkJLyogV2UnbGwgbmVlZCB0byBpbml0aWFsaXplIGFsbCBzdWJwbGFucyAqLwotCQkJbnBs YW5zID0gbGlzdF9sZW5ndGgobm9kZS0+bWVyZ2VwbGFucyk7Ci0JCQlBc3NlcnQobnBsYW5zID4g MCk7Ci0JCQl2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAx KTsKLQkJfQorCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJ LyoKIAkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdz IGF0IGxlYXN0IG9uZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRw cnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmluZGV4IDFiYzAw ODI2YzEuLjcwODBjYjI1ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKQEAg LTc5OCw2ICs3OTgsNyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5mbyAq cmVsKQogCiAJLyogVGhlc2UgYXJlIG5vdCB2YWxpZCB3aGVuIGJlaW5nIGNhbGxlZCBmcm9tIHRo ZSBwbGFubmVyICovCiAJY29udGV4dC5wbGFuc3RhdGUgPSBOVUxMOworCWNvbnRleHQuZXhwcmNv bnRleHQgPSBOVUxMOwogCWNvbnRleHQuZXhwcnN0YXRlcyA9IE5VTEw7CiAKIAkvKiBBY3R1YWwg cHJ1bmluZyBoYXBwZW5zIGhlcmUuICovCkBAIC04MDgsOCArODA5LDggQEAgcHJ1bmVfYXBwZW5k X3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKICAqIGdldF9tYXRjaGluZ19wYXJ0aXRp b25zCiAgKgkJRGV0ZXJtaW5lIHBhcnRpdGlvbnMgdGhhdCBzdXJ2aXZlIHBhcnRpdGlvbiBwcnVu aW5nCiAgKgotICogTm90ZTogY29udGV4dC0+cGxhbnN0YXRlIG11c3QgYmUgc2V0IHRvIGEgdmFs aWQgUGxhblN0YXRlIHdoZW4gdGhlCi0gKiBwcnVuaW5nX3N0ZXBzIHdlcmUgZ2VuZXJhdGVkIHdp dGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BMQU5ORVIuCisgKiBOb3RlOiBjb250 ZXh0LT5leHByY29udGV4dCBtdXN0IGJlIHZhbGlkIHdoZW4gdGhlIHBydW5pbmdfc3RlcHMgd2Vy ZQorICogZ2VuZXJhdGVkIHdpdGggYSB0YXJnZXQgb3RoZXIgdGhhbiBQQVJUVEFSR0VUX1BMQU5O RVIuCiAgKgogICogUmV0dXJucyBhIEJpdG1hcHNldCBvZiB0aGUgUmVsT3B0SW5mby0+cGFydF9y ZWxzIGluZGV4ZXMgb2YgdGhlIHN1cnZpdmluZwogICogcGFydGl0aW9ucy4KQEAgLTM2NTQsNyAr MzY1NSw3IEBAIG1hdGNoX2Jvb2xlYW5fcGFydGl0aW9uX2NsYXVzZShPaWQgcGFydG9wZmFtaWx5 LCBFeHByICpjbGF1c2UsIEV4cHIgKnBhcnRrZXksCiAgKiBleHByc3RhdGUgYXJyYXkuCiAgKgog ICogTm90ZSB0aGF0IHRoZSBldmFsdWF0ZWQgcmVzdWx0IG1heSBiZSBpbiB0aGUgcGVyLXR1cGxl IG1lbW9yeSBjb250ZXh0IG9mCi0gKiBjb250ZXh0LT5wbGFuc3RhdGUtPnBzX0V4cHJDb250ZXh0 LCBhbmQgd2UgbWF5IGhhdmUgbGVha2VkIG90aGVyIG1lbW9yeQorICogY29udGV4dC0+ZXhwcmNv bnRleHQsIGFuZCB3ZSBtYXkgaGF2ZSBsZWFrZWQgb3RoZXIgbWVtb3J5CiAgKiB0aGVyZSB0b28u ICBUaGlzIG1lbW9yeSBtdXN0IGJlIHJlY292ZXJlZCBieSByZXNldHRpbmcgdGhhdCBFeHByQ29u dGV4dAogICogYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHRoZSBwcnVuaW5nIG9wZXJhdGlvbiAoc2Vl IGV4ZWNQYXJ0aXRpb24uYykuCiAgKi8KQEAgLTM2NzcsMTMgKzM2NzgsMTggQEAgcGFydGtleV9k YXR1bV9mcm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQlFeHByQ29u dGV4dCAqZWN0eDsKIAogCQkvKgotCQkgKiBXZSBzaG91bGQgbmV2ZXIgc2VlIGEgbm9uLUNvbnN0 IGluIGEgc3RlcCB1bmxlc3Mgd2UncmUgcnVubmluZyBpbgotCQkgKiB0aGUgZXhlY3V0b3IuCisJ CSAqIFdlIHNob3VsZCBuZXZlciBzZWUgYSBub24tQ29uc3QgaW4gYSBzdGVwIHVubGVzcyB0aGUg Y2FsbGVyIGhhcworCQkgKiBwYXNzZWQgYSB2YWxpZCBFeHByQ29udGV4dC4KKwkJICoKKwkJICog V2hlbiBjb250ZXh0LT5wbGFuc3RhdGUgaXMgdmFsaWQsIGNvbnRleHQtPmV4cHJjb250ZXh0IGlz IHNhbWUKKwkJICogYXMgY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dC4KIAkJICov Ci0JCUFzc2VydChjb250ZXh0LT5wbGFuc3RhdGUgIT0gTlVMTCk7CisJCUFzc2VydChjb250ZXh0 LT5wbGFuc3RhdGUgIT0gTlVMTCB8fCBjb250ZXh0LT5leHByY29udGV4dCAhPSBOVUxMKTsKKwkJ QXNzZXJ0KGNvbnRleHQtPnBsYW5zdGF0ZSA9PSBOVUxMIHx8CisJCQkgICAoY29udGV4dC0+ZXhw cmNvbnRleHQgPT0gY29udGV4dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dCkpOwogCiAJCWV4 cHJzdGF0ZSA9IGNvbnRleHQtPmV4cHJzdGF0ZXNbc3RhdGVpZHhdOwotCQllY3R4ID0gY29udGV4 dC0+cGxhbnN0YXRlLT5wc19FeHByQ29udGV4dDsKKwkJZWN0eCA9IGNvbnRleHQtPmV4cHJjb250 ZXh0OwogCQkqdmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJzdGF0ZSwgZWN0 eCwgaXNudWxsKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj UGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKaW5kZXgg NjAzZDhiZWNjNC4uZmQ1NzM1YTk0NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aApAQCAtMTE5LDEwICsxMTksOSBAQCBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0ZpbmRQYXJ0 aXRpb24oTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCQkJCQlFU3RhdGUgKmVzdGF0 ZSk7CiBleHRlcm4gdm9pZCBFeGVjQ2xlYW51cFR1cGxlUm91dGluZyhNb2RpZnlUYWJsZVN0YXRl ICptdHN0YXRlLAogCQkJCQkJCQkJUGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUpOwotZXh0 ZXJuIFBhcnRpdGlvblBydW5lU3RhdGUgKkV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLAotCQkJCQkJCQkJCQkJCQkgIFBhcnRpdGlvblBydW5lSW5mbyAq cGFydGl0aW9ucHJ1bmVpbmZvKTsKK2V4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5p dFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgaW50IG5fdG90 YWxfc3VicGxhbnMsCisJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVuZWluZm8sCisJCQkJ CQkgQml0bWFwc2V0ICoqaW5pdGlhbGx5X3ZhbGlkX3N1YnBsYW5zKTsKIGV4dGVybiBCaXRtYXBz ZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0 YXRlKTsKLWV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kSW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMo UGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKLQkJCQkJCQkJCQkJCSAgaW50IG5zdWJw bGFucyk7Ci0KICNlbmRpZgkJCQkJCQkvKiBFWEVDUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNsdWRlL3BhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaAppbmRleCBlZTExYjZmZWFlLi45MDY4NGVmYTI1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIvc3JjL2luY2x1 ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCBSZWxP cHRJbmZvOwogICoJCQkJCXN1YnNpZGlhcnkgZGF0YSwgc3VjaCBhcyB0aGUgRm1nckluZm9zLgog ICogcGxhbnN0YXRlCQlQb2ludHMgdG8gdGhlIHBhcmVudCBwbGFuIG5vZGUncyBQbGFuU3RhdGUg d2hlbiBjYWxsZWQKICAqCQkJCQlkdXJpbmcgZXhlY3V0aW9uOyBOVUxMIHdoZW4gY2FsbGVkIGZy b20gdGhlIHBsYW5uZXIuCisgKiBleHByY29udGV4dAkJRXhwckNvbnRleHQgdG8gdXNlIHdoZW4g ZXZhbHVhdGluZyBwcnVuaW5nIGV4cHJlc3Npb25zCiAgKiBleHByc3RhdGVzCQlBcnJheSBvZiBF eHByU3RhdGVzLCBpbmRleGVkIGFzIHBlciBQcnVuZUN4dFN0YXRlSWR4OyBvbmUKICAqCQkJCQlm b3IgZWFjaCBwYXJ0aXRpb24ga2V5IGluIGVhY2ggcHJ1bmluZyBzdGVwLiAgQWxsb2NhdGVkIGlm CiAgKgkJCQkJcGxhbnN0YXRlIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgTlVMTC4KQEAgLTU2LDYg KzU3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVDb250ZXh0CiAJRm1nckluZm8g ICAqc3RlcGNtcGZ1bmNzOwogCU1lbW9yeUNvbnRleHQgcHBjY29udGV4dDsKIAlQbGFuU3RhdGUg ICpwbGFuc3RhdGU7CisJRXhwckNvbnRleHQgKmV4cHJjb250ZXh0OwogCUV4cHJTdGF0ZSAqKmV4 cHJzdGF0ZXM7CiB9IFBhcnRpdGlvblBydW5lQ29udGV4dDsKIAotLSAKMi4yNC4xCgo= --0000000000002d674405db7b3764 Content-Type: application/octet-stream; name="v8-0003-Add-a-plan_tree_walker.patch" Content-Disposition: attachment; filename="v8-0003-Add-a-plan_tree_walker.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1efoz102 RnJvbSAzZjNiZmU1Nzg0MDFjNDNlNTc4MTk2ZjQ2ZjJiYWQ3ZDMwNzE0MTFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAzIE1hciAyMDIyIDE2OjA0OjEzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2OCAzLzRd IEFkZCBhIHBsYW5fdHJlZV93YWxrZXIoKQoKTGlrZSBwbGFuc3RhdGVfdHJlZV93YWxrZXIoKSBi dXQgZm9yIHVuaW5pdGlhbGl6ZWQgcGxhbiB0cmVlcy4KLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9u b2RlRnVuY3MuYyB8IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv aW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3MuaCB8ICAgMyArCiAyIGZpbGVzIGNoYW5nZWQsIDExOSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCA0Nzg5YmE2OTExLi41MWNhYzQw YTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwpAQCAtMzEsNiArMzEsMTAgQEAgc3RhdGljIGJvb2wg cGxhbnN0YXRlX3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsIGJvb2wgKCp3YWxrZXIpICgpLAog CQkJCQkJCQkJdm9pZCAqY29udGV4dCk7CiBzdGF0aWMgYm9vbCBwbGFuc3RhdGVfd2Fsa19tZW1i ZXJzKFBsYW5TdGF0ZSAqKnBsYW5zdGF0ZXMsIGludCBucGxhbnMsCiAJCQkJCQkJCSAgIGJvb2wg KCp3YWxrZXIpICgpLCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19zdWJw bGFucyhMaXN0ICpwbGFucywKKwkJCQkgICBib29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgICB2b2lk ICpjb250ZXh0KTsKK3N0YXRpYyBib29sIHBsYW5fd2Fsa19tZW1iZXJzKExpc3QgKnBsYW5zLCBi b29sICgqd2Fsa2VyKSAoKSwgdm9pZCAqY29udGV4dCk7CiAKIAogLyoKQEAgLTQ2NDUsMyArNDY0 OSwxMTUgQEAgcGxhbnN0YXRlX3dhbGtfbWVtYmVycyhQbGFuU3RhdGUgKipwbGFuc3RhdGVzLCBp bnQgbnBsYW5zLAogCiAJcmV0dXJuIGZhbHNlOwogfQorCisvKgorICogcGxhbl90cmVlX3dhbGtl ciAtLS0gd2FsayBwbGFudHJlZXMKKyAqCisgKiBUaGUgd2Fsa2VyIGhhcyBhbHJlYWR5IHZpc2l0 ZWQgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIHNvIHdlIG5lZWQgb25seQorICogcmVjdXJzZSBpbnRv IGFueSBzdWItbm9kZXMgaXQgaGFzLgorICovCitib29sCitwbGFuX3RyZWVfd2Fsa2VyKFBsYW4g KnBsYW4sCisJCQkJIGJvb2wgKCp3YWxrZXIpICgpLAorCQkJCSB2b2lkICpjb250ZXh0KQorewor CS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBjb21wbGV4IHBs YW4gdHJlZXMgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJLyogaW5pdFBsYW4tcyAqLwor CWlmIChwbGFuX3dhbGtfc3VicGxhbnMocGxhbi0+aW5pdFBsYW4sIHdhbGtlciwgY29udGV4dCkp CisJCXJldHVybiB0cnVlOworCisJLyogbGVmdHRyZWUgKi8KKwlpZiAob3V0ZXJQbGFuKHBsYW4p KQorCXsKKwkJaWYgKHdhbGtlcihvdXRlclBsYW4ocGxhbiksIGNvbnRleHQpKQorCQkJcmV0dXJu IHRydWU7CisJfQorCisJLyogcmlnaHR0cmVlICovCisJaWYgKGlubmVyUGxhbihwbGFuKSkKKwl7 CisJCWlmICh3YWxrZXIoaW5uZXJQbGFuKHBsYW4pLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVl OworCX0KKworCS8qIHNwZWNpYWwgY2hpbGQgcGxhbnMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGxh bikpCisJeworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKHBsYW5fd2Fsa19tZW1iZXJzKCgoQXBw ZW5kICopIHBsYW4pLT5hcHBlbmRwbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQor CQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCWlm IChwbGFuX3dhbGtfbWVtYmVycygoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5tZXJnZXBsYW5zLAor CQkJCQkJCQkgIHdhbGtlciwgY29udGV4dCkpCisJCQkJcmV0dXJuIHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEJpdG1hcEFu ZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJCSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfQml0bWFwT3I6CisJCQlpZiAocGxh bl93YWxrX21lbWJlcnMoKChCaXRtYXBPciAqKSBwbGFuKS0+Yml0bWFwcGxhbnMsCisJCQkJCQkJ CSAgd2Fsa2VyLCBjb250ZXh0KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNl IFRfQ3VzdG9tU2NhbjoKKwkJCWlmIChwbGFuX3dhbGtfbWVtYmVycygoKEN1c3RvbVNjYW4gKikg cGxhbiktPmN1c3RvbV9wbGFucywKKwkJCQkJCQkJICB3YWxrZXIsIGNvbnRleHQpKQorCQkJCXJl dHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQlpZiAod2Fs a2VyKCgoU3VicXVlcnlTY2FuICopIHBsYW4pLT5zdWJwbGFuLCBjb250ZXh0KSkKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCisvKgorICogV2FsayBhIGxpc3Qgb2YgU3ViUGxhbnMgKG9yIGluaXRQbGFu cywgd2hpY2ggYWxzbyB1c2UgU3ViUGxhbiBub2RlcykuCisgKi8KK3N0YXRpYyBib29sCitwbGFu X3dhbGtfc3VicGxhbnMoTGlzdCAqcGxhbnMsCisJCQkJICAgYm9vbCAoKndhbGtlcikgKCksCisJ CQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlQbGFubmVkU3RtdCAq cGxhbm5lZHN0bXQgPSAoUGxhbm5lZFN0bXQgKikgY29udGV4dDsKKworCWZvcmVhY2gobGMsIHBs YW5zKQorCXsKKwkJU3ViUGxhbiAqc3AgPSBsZmlyc3Rfbm9kZShTdWJQbGFuLCBsYyk7CisJCVBs YW4gKnAgPSBsaXN0X250aChwbGFubmVkc3RtdC0+c3VicGxhbnMsIHNwLT5wbGFuX2lkIC0gMSk7 CisKKwkJaWYgKHdhbGtlcihwLCBjb250ZXh0KSkKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJl dHVybiBmYWxzZTsKK30KKworLyoKKyAqIFdhbGsgdGhlIGNvbnN0aXR1ZW50IHBsYW5zIG9mIGEg TW9kaWZ5VGFibGUsIEFwcGVuZCwgTWVyZ2VBcHBlbmQsCisgKiBCaXRtYXBBbmQsIG9yIEJpdG1h cE9yIG5vZGUuCisgKi8KK3N0YXRpYyBib29sCitwbGFuX3dhbGtfbWVtYmVycyhMaXN0ICpwbGFu cywgYm9vbCAoKndhbGtlcikgKCksIHZvaWQgKmNvbnRleHQpCit7CisJTGlzdENlbGwgKmxjOwor CisJZm9yZWFjaChsYywgcGxhbnMpCisJeworCQlpZiAod2Fsa2VyKGxmaXJzdChsYyksIGNvbnRl eHQpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZUZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl RnVuY3MuaAppbmRleCA5M2M2MGJkZTY2Li5mY2ExMDdhZDY1IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9ub2RlRnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2RlRnVuY3Mu aApAQCAtMTU4LDUgKzE1OCw4IEBAIGV4dGVybiBib29sIHJhd19leHByZXNzaW9uX3RyZWVfd2Fs a2VyKE5vZGUgKm5vZGUsIGJvb2wgKCp3YWxrZXIpICgpLAogc3RydWN0IFBsYW5TdGF0ZTsKIGV4 dGVybiBib29sIHBsYW5zdGF0ZV90cmVlX3dhbGtlcihzdHJ1Y3QgUGxhblN0YXRlICpwbGFuc3Rh dGUsIGJvb2wgKCp3YWxrZXIpICgpLAogCQkJCQkJCQkgIHZvaWQgKmNvbnRleHQpOworc3RydWN0 IFBsYW47CitleHRlcm4gYm9vbCBwbGFuX3RyZWVfd2Fsa2VyKHN0cnVjdCBQbGFuICpwbGFuLCBi b29sICgqd2Fsa2VyKSAoKSwKKwkJCQkgdm9pZCAqY29udGV4dCk7CiAKICNlbmRpZgkJCQkJCQkv KiBOT0RFRlVOQ1NfSCAqLwotLSAKMi4yNC4xCgo= --0000000000002d674405db7b3764 Content-Type: application/octet-stream; name="v8-0002-Add-Merge-Append.partitioned_rels.patch" Content-Disposition: attachment; filename="v8-0002-Add-Merge-Append.partitioned_rels.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1efoz0z1 RnJvbSA4Yjk5MTQ2YzliOGM0ODI2ZTE0MzRkM2YwMDY1OTc2ODFjMjRjZDQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0bGFuIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyNCBNYXIgMjAyMiAyMjo0NzowMyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjggMi80 XSBBZGQgW01lcmdlXUFwcGVuZC5wYXJ0aXRpb25lZF9yZWxzCgpUbyByZWNvcmQgdGhlIFJUIGlu ZGV4ZXMgb2YgYWxsIHBhcnRpdGlvbmVkIGFuY2VzdG9ycyBsZWFkaW5nIHVwIHRvCmxlYWYgcGFy dGl0aW9ucyB0aGF0IGFyZSBhcHBlbmRlZCBieSB0aGUgbm9kZS4KCklmIGEgZ2l2ZW4gW01lcmdl XUFwcGVuZCBub2RlIGlzIGxlZnQgb3V0IGZyb20gdGhlIHBsYW4gZHVlIHRvIHRoZXJlCmJlaW5n IG9ubHkgb25lIGVsZW1lbnQgaW4gaXRzIGxpc3Qgb2YgY2hpbGQgc3VicGxhbnMsIHRoZW4gaXRz CnBhcnRpdGlvbmVkX3JlbHMgc2V0IGlzIGFkZGVkIHRvIFBsYW5uZXJHbG9iYWwuZWxpZGVkQXBw ZW5kUGFydGVkUmVscwp0aGF0IGlzIHBhc3NlZCBkb3duIHRvIHRoZSBleGVjdXRvciB0aHJvdWdo IFBsYW5uZWRTdG10LgoKVGhlcmUgYXJlIG5vIHVzZXJzIGZvciBwYXJ0aXRpb25lZF9yZWxzIGFu ZCBlbGlkZWRBcHBlbmRQYXJ0ZWRSZWxzCmFzIG9mIHRoaXMgY29tbWl0LCB0aG91Z2ggYSBsYXRl ciBjb21taXQgd2lsbCByZXF1aXJlIHRoZSBhYmlsaXR5CnRvIGV4dHJhY3QgdGhlIHNldCBvZiBy ZWxhdGlvbnMgdGhhdCBtdXN0IGJlIGxvY2tlZCB0byBtYWtlIGEgcGxhbgp0cmVlIHNhZmUgZm9y IGV4ZWN1dGlvbiBieSB3YWxraW5nIHRoZSBwbGFuIHRyZWUgaXRzZWxmLCBzbyBoYXZpbmcKdGhl IHBhcnRpdGlvbmVkIHRhYmxlcyBiZSBhbHNvIHByZXNlbnQgaW4gdGhlIHBsYW4gdHJlZSB3aWxs IGJlCmhlbHBmdWwuICBOb3RlIHRoYXQgY3VycmVudGx5IHRoZSBleGVjdXRvciByZWxpZXMgb24g dGhlIGZhY3QgdGhhdAp0aGUgc2V0IG9mIHJlbGF0aW9ucyB0byBiZSBsb2NrZWQgY2FuIGJlIG9i dGFpbmVkIGJ5IHNpbXBseSBzY2FubmluZwp0aGUgcmFuZ2UgdGFibGUgdGhhdCdzIG1hZGUgYXZh aWxhYmxlIGluIFBsYW5uZWRTdG10IGFsb25nIHdpdGggdGhlCnBsYW4gdHJlZS4KLS0tCiBzcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5k L25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICB8ICA1ICsrKysrCiBzcmMvYmFja2VuZC9ub2Rl cy9yZWFkZnVuY3MuYyAgICAgICAgICAgfCAgMyArKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2pvaW5yZWxzLmMgICB8ICA5ICsrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMgfCAxOCArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgOCArKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9zZXRyZWZzLmMgICAgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgICAgfCAxNiArKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgIHwgMjAgKysrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAyMiArKysrKysr KysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgfCAx NyArKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQsIDE0OCBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCA1NjUwNTU1N2JmLi4yOWM1MTVk N2RiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTA2LDYgKzEwNiw3IEBAIF9jb3B5UGxhbm5l ZFN0bXQoY29uc3QgUGxhbm5lZFN0bXQgKmZyb20pCiAJQ09QWV9OT0RFX0ZJRUxEKGludmFsSXRl bXMpOwogCUNPUFlfTk9ERV9GSUVMRChwYXJhbUV4ZWNUeXBlcyk7CiAJQ09QWV9OT0RFX0ZJRUxE KHV0aWxpdHlTdG10KTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChlbGlkZWRBcHBlbmRQYXJ0ZWRS ZWxzKTsKIAlDT1BZX0xPQ0FUSU9OX0ZJRUxEKHN0bXRfbG9jYXRpb24pOwogCUNPUFlfU0NBTEFS X0ZJRUxEKHN0bXRfbGVuKTsKIApAQCAtMjU0LDYgKzI1NSw3IEBAIF9jb3B5QXBwZW5kKGNvbnN0 IEFwcGVuZCAqZnJvbSkKIAlDT1BZX1NDQUxBUl9GSUVMRChuYXN5bmNwbGFucyk7CiAJQ09QWV9T Q0FMQVJfRklFTEQoZmlyc3RfcGFydGlhbF9wbGFuKTsKIAlDT1BZX05PREVfRklFTEQocGFydF9w cnVuZV9pbmZvKTsKKwlDT1BZX0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIAog CXJldHVybiBuZXdub2RlOwogfQpAQCAtMjgyLDYgKzI4NCw3IEBAIF9jb3B5TWVyZ2VBcHBlbmQo Y29uc3QgTWVyZ2VBcHBlbmQgKmZyb20pCiAJQ09QWV9QT0lOVEVSX0ZJRUxEKGNvbGxhdGlvbnMs IGZyb20tPm51bUNvbHMgKiBzaXplb2YoT2lkKSk7CiAJQ09QWV9QT0lOVEVSX0ZJRUxEKG51bGxz Rmlyc3QsIGZyb20tPm51bUNvbHMgKiBzaXplb2YoYm9vbCkpOwogCUNPUFlfTk9ERV9GSUVMRChw YXJ0X3BydW5lX2luZm8pOworCUNPUFlfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMp OwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9v dXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA2ZTM5NTkwNzMw Li4xMDhlZGU5YWY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTMyNCw2ICszMjQsNyBAQCBfb3V0 UGxhbm5lZFN0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZWRTdG10ICpub2RlKQogCVdS SVRFX05PREVfRklFTEQoaW52YWxJdGVtcyk7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJhbUV4ZWNU eXBlcyk7CiAJV1JJVEVfTk9ERV9GSUVMRCh1dGlsaXR5U3RtdCk7CisJV1JJVEVfQklUTUFQU0VU X0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKHN0 bXRfbG9jYXRpb24pOwogCVdSSVRFX0lOVF9GSUVMRChzdG10X2xlbik7CiB9CkBAIC00NDQsNiAr NDQ1LDcgQEAgX291dEFwcGVuZChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQXBwZW5kICpub2RlKQog CVdSSVRFX0lOVF9GSUVMRChuYXN5bmNwbGFucyk7CiAJV1JJVEVfSU5UX0ZJRUxEKGZpcnN0X3Bh cnRpYWxfcGxhbik7CiAJV1JJVEVfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8pOworCVdSSVRF X0JJVE1BUFNFVF9GSUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKQEAg LTQ2MSw2ICs0NjMsNyBAQCBfb3V0TWVyZ2VBcHBlbmQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IE1l cmdlQXBwZW5kICpub2RlKQogCVdSSVRFX09JRF9BUlJBWShjb2xsYXRpb25zLCBub2RlLT5udW1D b2xzKTsKIAlXUklURV9CT09MX0FSUkFZKG51bGxzRmlyc3QsIG5vZGUtPm51bUNvbHMpOwogCVdS SVRFX05PREVfRklFTEQocGFydF9wcnVuZV9pbmZvKTsKKwlXUklURV9CSVRNQVBTRVRfRklFTEQo cGFydGl0aW9uZWRfcmVscyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNDA0LDYgKzI0MDcsNyBA QCBfb3V0UGxhbm5lckdsb2JhbChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lckdsb2JhbCAq bm9kZSkKIAlXUklURV9CT09MX0ZJRUxEKHBhcmFsbGVsTW9kZU9LKTsKIAlXUklURV9CT09MX0ZJ RUxEKHBhcmFsbGVsTW9kZU5lZWRlZCk7CiAJV1JJVEVfQ0hBUl9GSUVMRChtYXhQYXJhbGxlbEhh emFyZCk7CisJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFwcGVuZFBhcnRlZFJlbHMpOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMjUxNSw2ICsyNTE5LDcgQEAgX291dFJlbE9wdEluZm8oU3Ry aW5nSW5mbyBzdHIsIGNvbnN0IFJlbE9wdEluZm8gKm5vZGUpCiAJV1JJVEVfQk9PTF9GSUVMRChw YXJ0Ym91bmRzX21lcmdlZCk7CiAJV1JJVEVfQklUTUFQU0VUX0ZJRUxEKGxpdmVfcGFydHMpOwog CVdSSVRFX0JJVE1BUFNFVF9GSUVMRChhbGxfcGFydHJlbHMpOworCVdSSVRFX0JJVE1BUFNFVF9G SUVMRChwYXJ0aXRpb25lZF9yZWxzKTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKaW5kZXggYzk0YjI1NjFmMC4uY2UxNDZkZDQ1ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAg LTE3OTQsNiArMTc5NCw3IEBAIF9yZWFkUGxhbm5lZFN0bXQodm9pZCkKIAlSRUFEX05PREVfRklF TEQoaW52YWxJdGVtcyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHBhcmFtRXhlY1R5cGVzKTsKIAlSRUFE X05PREVfRklFTEQodXRpbGl0eVN0bXQpOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKGVsaWRlZEFw cGVuZFBhcnRlZFJlbHMpOwogCVJFQURfTE9DQVRJT05fRklFTEQoc3RtdF9sb2NhdGlvbik7CiAJ UkVBRF9JTlRfRklFTEQoc3RtdF9sZW4pOwogCkBAIC0xOTE3LDYgKzE5MTgsNyBAQCBfcmVhZEFw cGVuZCh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKG5hc3luY3BsYW5zKTsKIAlSRUFEX0lOVF9GSUVM RChmaXJzdF9wYXJ0aWFsX3BsYW4pOwogCVJFQURfTk9ERV9GSUVMRChwYXJ0X3BydW5lX2luZm8p OworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3JlbHMpOwogCiAJUkVBRF9ET05F KCk7CiB9CkBAIC0xOTM5LDYgKzE5NDEsNyBAQCBfcmVhZE1lcmdlQXBwZW5kKHZvaWQpCiAJUkVB RF9PSURfQVJSQVkoY29sbGF0aW9ucywgbG9jYWxfbm9kZS0+bnVtQ29scyk7CiAJUkVBRF9CT09M X0FSUkFZKG51bGxzRmlyc3QsIGxvY2FsX25vZGUtPm51bUNvbHMpOwogCVJFQURfTk9ERV9GSUVM RChwYXJ0X3BydW5lX2luZm8pOworCVJFQURfQklUTUFQU0VUX0ZJRUxEKHBhcnRpdGlvbmVkX3Jl bHMpOwogCiAJUkVBRF9ET05FKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMu YwppbmRleCA5ZGEzZmYyZjlhLi5lNzRkNDBmZWUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5yZWxzLmMKQEAgLTE1NDksNiArMTU0OSwxNSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2lu KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAog CQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVs MiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKIAkJCQkJCQkJCWNoaWxk X3Jlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogam9pbnJlbCdzIHNldC4KKwkJICovCisJCWpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMgPQor CQkJYm1zX2FkZF9tZW1iZXJzKGpvaW5yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJY2hp bGRfam9pbnJlbC0+cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggMTc5Yzg3YzY3MS4uOTk4NjhhMWE3OSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjYsMTAgKzI2LDEyIEBACiAj aW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9hcHBl bmRpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRl ICJvcHRpbWl6ZXIvcGFyYW1hc3NpZ24uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUu aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh Y2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgpAQCAtMTMzMiwxMSAr MTMzNCwxMSBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFBh dGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJCQkJCQkJCSBiZXN0X3BhdGgtPnN1YnBhdGhz LAogCQkJCQkJCQkJCSBwcnVuZXF1YWwpOwogCX0KLQogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3Vi cGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9w YXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aDsKIAlwbGFuLT5wYXJ0 X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMgPSBi bXNfY29weShyZWwtPnBhcnRpdGlvbmVkX3JlbHMpOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5m bygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsKIApAQCAtMTUwMCw2ICsxNTAyLDIw IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBl bmRQYXRoICpiZXN0X3BhdGgsCiAJbm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOwogCW5vZGUt PnBhcnRfcHJ1bmVfaW5mbyA9IHBhcnRwcnVuZWluZm87CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8g ZXhwbGljaXRseSBhZGQgdG8gdGhlIHBsYW4gbm9kZSB0aGUgUlQgaW5kZXhlcyBvZiBhbnkKKwkg KiBwYXJ0aXRpb25lZCB0YWJsZXMgd2hvc2UgcGFydGl0aW9ucyB3aWxsIGJlIHNjYW5uZWQgYnkg dGhlIG5vZGVzIGluCisJICogJ3N1YnBsYW5zJy4gIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBSVCBp bmRleGVzIGluIHRoZSBzZXQgZHVlIHRvIHRoZQorCSAqIHBhcnRpdGlvbiB0cmVlIGJlaW5nIG11 bHRpLWxldmVsIGFuZC9vciB0aGlzIGJlaW5nIGEgcGxhbiBmb3IgVU5JT04gQUxMCisJICogb3Zl ciBtdWx0aXBsZSBwYXJ0aXRpb24gdHJlZXMuICBBbG9uZyB3aXRoIHNjYW5yZWxpZHMgb2YgbGVh Zi1sZXZlbCBTY2FuCisJICogbm9kZXMsIHRoaXMgYWxsb3dzIHRoZSBleGVjdXRvciB0byBsb2Nr IHRoZSBmdWxsIHNldCBvZiByZWxhdGlvbnMgYmVpbmcKKwkgKiBzY2FubmVkIGJ5IHRoaXMgbm9k ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCAnYXBwcmVsaWRzJyBvbmx5IGNvbnRhaW5zIHRoZSB0b3At bGV2ZWwgYmFzZSByZWxhdGlvbihzKSwgc28KKwkgKiBpcyBub3Qgc3VmZmljaWVudCBmb3IgdGhl IHB1cnBvc2UuCisJICovCisJbm9kZS0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CisKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9tX3BhdGhr ZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwogCSAqIHByb2R1Y2Ug ZWl0aGVyIHRoZSBleGFjdCB0bGlzdCBvciBhIG5hcnJvdyB0bGlzdCwgd2Ugc2hvdWxkIGdldCBy aWQgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBiMjU2OWM1ZDBjLi5j NzY5YjRiNGI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01MjksNiAr NTI5LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNUeXBlcyA9IGds b2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBudWxsLCBidXQg d2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3RtdCA9IHBhcnNl LT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMgPSBnbG9iLT5l bGlkZWRBcHBlbmRQYXJ0ZWRSZWxzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5z dG10X2xvY2F0aW9uOwogCXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKQEAg LTc1MzQsNiArNzUzNSwxMyBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwKIAogCQlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290LCBncm91 cGVkX3JlbCwgZ3JvdXBlZF9saXZlX2NoaWxkcmVuKTsKIAl9CisKKwkvKgorCSAqIElucHV0IHJl bCBtaWdodCBiZSBhIHBhcnRpdGlvbmVkIGFwcGVuZHJlbCwgdGhvdWdoIGdyb3VwZWRfcmVsIGhh cyBhdAorCSAqIHRoaXMgcG9pbnQgdGFrZW4gaXRzIHJvbGUgYXMgdGhlIGFuIGFwcGVuZHJlbCBv d25pbmcgdGhlIGZvcm1lcidzCisJICogY2hpbGRyZW4sIHNvIGNvcHkgdGhlIGZvcm1lcidzIHBh cnRpdGlvbmVkX3JlbHMgc2V0IGludG8gdGhlIGxhdHRlci4KKwkgKi8KKwlncm91cGVkX3JlbC0+ cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KGlucHV0X3JlbC0+cGFydGl0aW9uZWRfcmVscyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggYmY0YzcyMmMw Mi4uODIxNGVkZWM1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0 cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTU3 NCw2ICsxNTc0LDEwIEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJbGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0 b2Zmc2V0KTsKIAl9CiAKKwkvKiBGaXggdXAgcGFydGl0aW9uZWRfcmVscyBiZWZvcmUgcG9zc2li bHkgcmVtb3ZpbmcgdGhlIEFwcGVuZCBiZWxvdy4gKi8KKwlhcGxhbi0+cGFydGl0aW9uZWRfcmVs cyA9IG9mZnNldF9yZWxpZF9zZXQoYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJ CSAgIHJ0b2Zmc2V0KTsKKwogCS8qCiAJICogU2VlIGlmIGl0J3Mgc2FmZSB0byBnZXQgcmlkIG9m IHRoZSBBcHBlbmQgZW50aXJlbHkuICBGb3IgdGhpcyB0byBiZQogCSAqIHNhZmUsIHRoZXJlIG11 c3QgYmUgb25seSBvbmUgY2hpbGQgcGxhbiBhbmQgdGhhdCBjaGlsZCBwbGFuJ3MgcGFyYWxsZWwK QEAgLTE1ODQsOCArMTU4OCwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hcHBlbmRwbGFucykgPT0gMSAm JgogCQkoKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFwcGVuZHBsYW5zKSktPnBhcmFsbGVsX2F3 YXJlID09IGFwbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQorCXsKKwkJLyoKKwkJICogUGFydGl0 aW9uZWQgdGFibGUgaW52b2x2ZWQsIGlmIGFueSwgbXVzdCBiZSBtYWRlIGtub3duIHRvIHRoZQor CQkgKiBleGVjdXRvci4KKwkJICovCisJCXJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMgPQorCQkJYm1zX2FkZF9tZW1iZXJzKHJvb3QtPmdsb2ItPmVsaWRlZEFwcGVuZFBhcnRlZFJl bHMsCisJCQkJCQkJYXBsYW4tPnBhcnRpdGlvbmVkX3JlbHMpOwogCQlyZXR1cm4gY2xlYW5fdXBf cmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLAogCQkJCQkJCQkJCSAgIChQbGFuICop IGxpbml0aWFsKGFwbGFuLT5hcHBlbmRwbGFucykpOworCX0KIAogCS8qCiAJICogT3RoZXJ3aXNl LCBjbGVhbiB1cCB0aGUgQXBwZW5kIGFzIG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzIGFm dGVyCkBAIC0xNjQ2LDYgKzE2NTksMTIgQEAgc2V0X21lcmdlYXBwZW5kX3JlZmVyZW5jZXMoUGxh bm5lckluZm8gKnJvb3QsCiAJCWxmaXJzdChsKSA9IHNldF9wbGFuX3JlZnMocm9vdCwgKFBsYW4g KikgbGZpcnN0KGwpLCBydG9mZnNldCk7CiAJfQogCisJLyoKKwkgKiBGaXggdXAgcGFydGl0aW9u ZWRfcmVscyBiZWZvcmUgcG9zc2libHkgcmVtb3ZpbmcgdGhlIE1lcmdlQXBwZW5kIGJlbG93Lgor CSAqLworCW1wbGFuLT5wYXJ0aXRpb25lZF9yZWxzID0gb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+ cGFydGl0aW9uZWRfcmVscywKKwkJCQkJCQkJCQkJICAgcnRvZmZzZXQpOworCiAJLyoKIAkgKiBT ZWUgaWYgaXQncyBzYWZlIHRvIGdldCByaWQgb2YgdGhlIE1lcmdlQXBwZW5kIGVudGlyZWx5LiAg Rm9yIHRoaXMgdG8KIAkgKiBiZSBzYWZlLCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGNoaWxkIHBs YW4gYW5kIHRoYXQgY2hpbGQgcGxhbidzCkBAIC0xNjU2LDggKzE2NzUsMTcgQEAgc2V0X21lcmdl YXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJaWYgKGxpc3RfbGVu Z3RoKG1wbGFuLT5tZXJnZXBsYW5zKSA9PSAxICYmCiAJCSgoUGxhbiAqKSBsaW5pdGlhbChtcGxh bi0+bWVyZ2VwbGFucykpLT5wYXJhbGxlbF9hd2FyZSA9PSBtcGxhbi0+cGxhbi5wYXJhbGxlbF9h d2FyZSkKKwl7CisJCS8qCisJCSAqIFBhcnRpdGlvbmVkIHRhYmxlcyBpbnZvbHZlZCwgaWYgYW55 LCBtdXN0IGJlIG1hZGUga25vd24gdG8gdGhlCisJCSAqIGV4ZWN1dG9yLgorCQkgKi8KKwkJcm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscyA9CisJCQlibXNfYWRkX21lbWJlcnMocm9v dC0+Z2xvYi0+ZWxpZGVkQXBwZW5kUGFydGVkUmVscywKKwkJCQkJCQltcGxhbi0+cGFydGl0aW9u ZWRfcmVscyk7CiAJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg bXBsYW4sCiAJCQkJCQkJCQkJICAgKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMp KTsKKwl9CiAKIAkvKgogCSAqIE90aGVyd2lzZSwgY2xlYW4gdXAgdGhlIE1lcmdlQXBwZW5kIGFz IG5lZWRlZC4gIEl0J3Mgb2theSB0byBkbyB0aGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhl cml0LmMKaW5kZXggN2UxMzQ4MjJmMy4uNTY5MTJlNDEwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL2luaGVyaXQuYwpAQCAtNDA2LDYgKzQwNiwxNCBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRl bnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsaW5mbywKIAkJCQkJCQkJCSAg IGNoaWxkcnRlLCBjaGlsZFJUaW5kZXgsCiAJCQkJCQkJCQkgICBjaGlsZHJlbCwgdG9wX3BhcmVu dHJjLCBsb2NrbW9kZSk7CiAKKwkJLyoKKwkJICogQSBwYXJlbnQgcmVsYXRpb24ncyBwYXJ0aXRp b25lZF9yZWxzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2V0cworCQkgKiBvZiBhbGwgaXRz IGNoaWxkcmVuLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHNvIGJ1YmJsZSB1cCB0aGUgY2hpbGQKKwkJ ICogcmVsJ3Mgc2V0LgorCQkgKi8KKwkJcmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWxpbmZvLT5wYXJ0aXRpb25lZF9yZWxzLAorCQkJCQkJCQkJCQkJCWNoaWxk cmVsaW5mby0+cGFydGl0aW9uZWRfcmVscyk7CisKIAkJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb24s IGJ1dCBrZWVwIGxvY2tzICovCiAJCXRhYmxlX2Nsb3NlKGNoaWxkcmVsLCBOb0xvY2spOwogCX0K QEAgLTczNyw2ICs3NDUsMTQgQEAgZXhwYW5kX2FwcGVuZHJlbF9zdWJxdWVyeShQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkvKiBDaGlsZCBtYXkgaXRzZWxmIGJlIGFuIGlu aGVyaXRlZCByZWwsIGVpdGhlciB0YWJsZSBvciBzdWJxdWVyeS4gKi8KIAkJaWYgKGNoaWxkcnRl LT5pbmgpCiAJCQlleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkocm9vdCwgY2hpbGRyZWwsIGNoaWxk cnRlLCBjaGlsZFJUaW5kZXgpOworCisJCS8qCisJCSAqIEEgcGFyZW50IHJlbGF0aW9uJ3MgcGFy dGl0aW9uZWRfcmVscyBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIHNldHMKKwkJICogb2YgYWxs IGl0cyBjaGlsZHJlbiwgZGlyZWN0IG9yIGluZGlyZWN0LCBzbyBidWJibGUgdXAgdGhlIGNoaWxk CisJCSAqIHJlbCdzIHNldC4KKwkJICovCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19h ZGRfbWVtYmVycyhyZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJCQljaGlsZHJlbC0+ cGFydGl0aW9uZWRfcmVscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggNTIwNDA5ZjRiYS4uMWQwODJhOGZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3JlbG5vZGUuYwpAQCAtMzYxLDYgKzM2MSwxMCBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAkJfQogCX0KIAorCS8q IEEgcGFydGl0aW9uZWQgYXBwZW5kcmVsLiAqLworCWlmIChyZWwtPnBhcnRfc2NoZW1lICE9IE5V TEwpCisJCXJlbC0+cGFydGl0aW9uZWRfcmVscyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwog CS8qIFNhdmUgdGhlIGZpbmlzaGVkIHN0cnVjdCBpbiB0aGUgcXVlcnkncyBzaW1wbGVfcmVsX2Fy cmF5ICovCiAJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF0gPSByZWw7CiAKQEAgLTcyOSw2 ICs3MzMsMTQgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJc2V0X2pvaW5y ZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsCiAJ CQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3QpOwogCisJLyoKKwkgKiBUaGUgam9pbnJlbCBt YXkgZ2V0IHByb2Nlc3NlZCBhcyBhbiBhcHBlbmRyZWwgdmlhIHBhcnRpdGlvbndpc2Ugam9pbgor CSAqIGlmIGJvdGggb3V0ZXIgYW5kIGlubmVyIHJlbHMgYXJlIHBhcnRpdGlvbmVkLCBzbyBzZXQg cGFydGl0aW9uZWRfcmVscworCSAqIGFwcHJvcHJpYXRlbHkuCisJICovCisJam9pbnJlbC0+cGFy dGl0aW9uZWRfcmVscyA9IGJtc191bmlvbihvdXRlcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMsCisJ CQkJCQkJCQkJICBpbm5lcl9yZWwtPnBhcnRpdGlvbmVkX3JlbHMpOworCiAJLyoKIAkgKiBTZXQg dGhlIGNvbnNpZGVyX3BhcmFsbGVsIGZsYWcgaWYgdGhpcyBqb2lucmVsIGNvdWxkIHBvdGVudGlh bGx5IGJlCiAJICogc2Nhbm5lZCB3aXRoaW4gYSBwYXJhbGxlbCB3b3JrZXIuICBJZiB0aGlzIGZs YWcgaXMgZmFsc2UgZm9yIGVpdGhlcgpAQCAtODk3LDYgKzkwOSwxNCBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9q b2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LAogCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKIAorCS8qCisJICogVGhlIGpvaW5y ZWwgbWF5IGdldCBwcm9jZXNzZWQgYXMgYW4gYXBwZW5kcmVsIHZpYSBwYXJ0aXRpb253aXNlIGpv aW4KKwkgKiBpZiBib3RoIG91dGVyIGFuZCBpbm5lciByZWxzIGFyZSBwYXJ0aXRpb25lZCwgc28g c2V0IHBhcnRpdGlvbmVkX3JlbHMKKwkgKiBhcHByb3ByaWF0ZWx5LgorCSAqLworCWpvaW5yZWwt PnBhcnRpdGlvbmVkX3JlbHMgPSBibXNfdW5pb24ob3V0ZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxz LAorCQkJCQkJCQkJCSAgaW5uZXJfcmVsLT5wYXJ0aXRpb25lZF9yZWxzKTsKKwogCS8qIFdlIGJ1 aWxkIHRoZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwg am9pbnJlbC0+cmVsaWRzKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNmNiY2I2N2JkZi4u ZWY5YjU0NzM5YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzMCw2ICsxMzAsMTEgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogCWNoYXIJCW1heFBhcmFsbGVsSGF6YXJkOwkvKiB3 b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwgKi8KIAogCVBhcnRpdGlvbkRpcmVjdG9yeSBw YXJ0aXRpb25fZGlyZWN0b3J5OyAvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KKworCUJpdG1h cHNldCAqZWxpZGVkQXBwZW5kUGFydGVkUmVsczsJLyogQ29tYmluZWQgcGFydGl0aW9uZWRfcmVs cyBvZiBhbGwKKwkJCQkJCQkJCQkgKiBzaW5nbGUtc3VicGxhbiBbTWVyZ2VdQXBwZW5kIG5vZGVz CisJCQkJCQkJCQkJICogdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9uIHRoZQorCQkJCQkJCQkJ CSAqIHZhcmlvdXMgcGxhbiB0cmVlcy4gKi8KIH0gUGxhbm5lckdsb2JhbDsKIAogLyogbWFjcm8g Zm9yIGZldGNoaW5nIHRoZSBQbGFuIGFzc29jaWF0ZWQgd2l0aCBhIFN1YlBsYW4gbm9kZSAqLwpA QCAtNzczLDYgKzc3OCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUmVsaWRzCQlh bGxfcGFydHJlbHM7CS8qIFJlbGlkcyBzZXQgb2YgYWxsIHBhcnRpdGlvbiByZWxpZHMgKi8KIAlM aXN0CSAgKipwYXJ0ZXhwcnM7CQkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNz aW9ucyAqLwogCUxpc3QJICAqKm51bGxhYmxlX3BhcnRleHByczsgLyogTnVsbGFibGUgcGFydGl0 aW9uIGtleSBleHByZXNzaW9ucyAqLworCisJLyoKKwkgKiBGb3IgYW4gYXBwZW5kcmVsIHBhcmVu dCByZWxhdGlvbiAoYmFzZSwgam9pbiwgb3IgdXBwZXIpIHRoYXQgaXMKKwkgKiBwYXJ0aXRpb25l ZCwgdGhpcyBzdG9yZXMgdGhlIFJUIGluZGV4ZXMgb2YgYWxsIHRoZSBwYXJpdGlvbmVkIGFuY2Vz dG9ycworCSAqIGluY2x1ZGluZyBpdHNlbGYgdGhhdCBsZWFkIHVwIHRvIHRoZSBpbmRpdmlkdWFs IGxlYWYgcGFydGl0aW9ucyB0aGF0CisJICogd2lsbCBiZSBzY2FubmVkIHRvIHByb2R1Y2UgdGhp cyByZWxhdGlvbidzIG91dHB1dCByb3dzLiAgVGhlIHJlbGlkIHNldAorCSAqIGlzIGNvcGllZCBp bnRvIHRoZSByZXN1bHRpbmcgQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHBsYW4gbm9kZSBmb3IKKwkg KiBhbGxvd2luZyB0aGUgZXhlY3V0b3IgdG8gdGFrZSBhcHByb3ByaWF0ZSBsb2NrcyBvbiB0aG9z ZSByZWxhdGlvbnMsCisJICogdW5sZXNzIHRoZSBub2RlIGlzIGRlZW1lZCB1c2VsZXNzIGluIHNl dHJlZnMuYyBkdWUgdG8gaGF2aW5nIGEgc2luZ2xlCisJICogbGVhZiBzdWJwbGFuIGFuZCB0aHVz IGVsaWRlZCBmcm9tIHRoZSBmaW5hbCBwbGFuLCBpbiB3aGljaCBjYXNlLCB0aGUgc2V0CisJICog aXMgYWRkZWQgaW50byBQbGFubmVyR2xvYmFsLmVsaWRlZEFwcGVuZFBhcnRlZFJlbHMuCisJICoK KwkgKiBOb3RlIHRoYXQgJ2FwcHJlbGlkcycgb2YgdGhvc2Ugbm9kZXMgb25seSBjb250YWlucyB0 aGUgdG9wLWxldmVsIGJhc2UKKwkgKiByZWxhdGlvbihzKSwgc28gaXMgbm90IHN1ZmZpY2llbnQg Zm9yIHNhaWQgcHVycG9zZS4KKwkgKi8KKworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3JlbHM7 CiB9IFJlbE9wdEluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFu bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDUwZWYzZGRhMDUu LmE4MjNjN2MyMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC04Niw2ICs4NiwxMSBAQCB0eXBl ZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CS8qIG5vbi1u dWxsIGlmIHRoaXMgaXMgdXRpbGl0eSBzdG10ICovCiAKKwlCaXRtYXBzZXQgKmVsaWRlZEFwcGVu ZFBhcnRlZFJlbHM7CS8qIENvbWJpbmVkIHBhcnRpdGlvbmVkX3JlbHMgb2YgYWxsCisJCQkJCQkJ CQkJICogc2luZ2xlLXN1YnBsYW4gW01lcmdlXUFwcGVuZCBub2RlcworCQkJCQkJCQkJCSAqIHRo YXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKwkJCQkJCQkJCQkgKiB2YXJpb3VzIHBsYW4g dHJlZXMuICovCisKIAkvKiBzdGF0ZW1lbnQgbG9jYXRpb24gaW4gc291cmNlIHN0cmluZyAoY29w aWVkIGZyb20gUXVlcnkpICovCiAJaW50CQkJc3RtdF9sb2NhdGlvbjsJLyogc3RhcnQgbG9jYXRp b24sIG9yIC0xIGlmIHVua25vd24gKi8KIAlpbnQJCQlzdG10X2xlbjsJCS8qIGxlbmd0aCBpbiBi eXRlczsgMCBtZWFucyAicmVzdCBvZiBzdHJpbmciICovCkBAIC0yNjQsNiArMjY5LDEyIEBAIHR5 cGVkZWYgc3RydWN0IEFwcGVuZAogCiAJLyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBwcnVu aW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0ICovCiAJc3RydWN0IFBhcnRpdGlvblBy dW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCisJLyoKKwkgKiBSVCBpbmRleGVzIG9mIGFsbCBw YXJ0aXRpb25lZCBwYXJlbnRzIHdob3NlIHBhcnRpdGlvbnMnIHBsYW5zIGFyZQorCSAqIHByZXNl bnQgaW4gYXBwZW5kcGxhbnMuCisJICovCisJQml0bWFwc2V0ICAqcGFydGl0aW9uZWRfcmVsczsK IH0gQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0yODQsNiArMjk1LDEyIEBAIHR5 cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAJYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExT IEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBsYW4g cHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwogCXN0cnVjdCBQYXJ0aXRp b25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKKworCS8qCisJICogUlQgaW5kZXhlcyBvZiBh bGwgcGFydGl0aW9uZWQgcGFyZW50cyB3aG9zZSBwYXJ0aXRpb25zJyBwbGFucyBhcmUKKwkgKiBw cmVzZW50IGluIGFwcGVuZHBsYW5zLgorCSAqLworCUJpdG1hcHNldCAgKnBhcnRpdGlvbmVkX3Jl bHM7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0tIAoyLjI0LjEKCg== --0000000000002d674405db7b3764--