Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uHgah-007Qfj-OH for pgsql-hackers@arkaria.postgresql.org; Wed, 21 May 2025 10:22:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uHgae-005Nyq-TC for pgsql-hackers@arkaria.postgresql.org; Wed, 21 May 2025 10:22:24 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uHgae-005Nyh-2d for pgsql-hackers@lists.postgresql.org; Wed, 21 May 2025 10:22:24 +0000 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uHgab-0007Zz-1D for pgsql-hackers@postgresql.org; Wed, 21 May 2025 10:22:22 +0000 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-73712952e1cso6216265b3a.1 for ; Wed, 21 May 2025 03:22:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747822941; x=1748427741; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=/3GP63n3ZrZ+TZfBpfcQRbPGOCUSLogctfEtS+33Mro=; b=Kf2dow2LeP1BZ43CnFYzQUYhg5OdS5ICRxf8AKH+xc2SLLH7tgh7viVRtfXkW2X27D P9T6Lw0X6oJzA9qqmojuuU/0Gjmniq8IupiWWf8VSwe/3A6QgUYwFMoGpSDtTpAWSvUZ TDpcxsp9366jkLkIR/af/13x1ii45y4vftSDP5yTJTbva0ONa6+XMtTNPCuzzOdLwWAa VIVUp4viUsa6XKocOezWMHhsPxtgCtnDgasPYYYRO7n8vr4ZpQb061wDDUZiWkxsWOOT G2w+yDxWWiMTrZ2Guwpa3/qNYTiu3fjhTshL64JM5CMZoqf9q4E/c+vlTlq2Jl+qAUXx nnqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747822941; x=1748427741; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=/3GP63n3ZrZ+TZfBpfcQRbPGOCUSLogctfEtS+33Mro=; b=beXzf0GGzKUIce7vvbZm5ixHS87ovxCQ/889ymcJRZjmeYtBJ9dlKGbdaAqnVwxuSH dn0Iq2W3+pRZ5Z+AxTJeKHiHYk97H/4cFswsSjOl3SR5RA2bBLU6TT7OwY7Lzwfspnqp WwxbKH26LsEGbif5Yx2kD3SADI1L+dBuI6+YRx/kKrDqCseYc4bmgnolYyhpAO6IDciA UOR33uI+tS1794kBhnqozIfbA0Gj/T33FZQKcTMsO4OQAH0GmAHU58MD8TSQAuaTgjX0 LrkKZd8S+lPEynNrBHg9RN60j6j6yVQAcnW9EY5PZM72JEElz2MSol5TR9Jvk+HXsmwW p9Kg== X-Forwarded-Encrypted: i=1; AJvYcCV+q1hYhBPTBgWKQilTc7mSH6Q+VNqf8BwpaRbliwnCxJlPPiqoONThk/w1xAbt7SIjwn4t3fWY7eGHw3Y2@postgresql.org X-Gm-Message-State: AOJu0YxhTq9CDK5bYhrVmIefM0OpUZdzrz5O5pAHetf8cdW6Ct4V/NgA Eo1KqjhLTc4Li18DYIBAs9W3e3Mh2VbBYcrpVCFe6u/fU3S29ymRQcxJbQmFnxkENQvJaHJmuY/ MCqKCVKFFa1XDzAvAiQVxs1BXZsL/LiQ= X-Gm-Gg: ASbGncsdHvKY2rbwAe2bb4jwN50tJLEUE9V0c8fMsCoGTo3AmykeRlN3DlRukKl5csk /05VQQJVL+950mx/iE+IFKzGY/rMMUqshrWbAYRy26XoBgRgX9QzUoAYSIvroJ2hW+cbQsvcHCF ZYfCh2bMnPJLIwWjmNYOY2aFwt4QQE2qih0w== X-Google-Smtp-Source: AGHT+IEQ6XsU7RajJ7ofkzQzpi5mTHvjU6DwzMvYxDOjsKxnNPnpjZ4zqwWEiJBphzEdXwzsx3BsvfqDKITMQu2Sy30= X-Received: by 2002:a05:6a20:3d1c:b0:215:d457:ca6d with SMTP id adf61e73a8af0-2170ce3b120mr32564324637.40.1747822940573; Wed, 21 May 2025 03:22:20 -0700 (PDT) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> <605328.1747710381@sss.pgh.pa.us> <691261.1747755511@sss.pgh.pa.us> In-Reply-To: <691261.1747755511@sss.pgh.pa.us> From: Amit Langote Date: Wed, 21 May 2025 19:22:03 +0900 X-Gm-Features: AX0GCFsZ3yk6sRzhpx9M2QxBb8W422Lgfpqi2djrxrxY5Ur70R2R6xhpWp-vWTI Message-ID: Subject: Re: generic plans and "initial" pruning To: Tom Lane Cc: Tender Wang , Alexander Lakhin , Tomas Vondra , Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers , Thom Brown Content-Type: multipart/mixed; boundary="00000000000080fe360635a2bd4e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000080fe360635a2bd4e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 21, 2025 at 12:38=E2=80=AFAM Tom Lane wrote= : > Amit Langote writes: > > Thanks for pointing out the hole in the current handling of > > CachedPlan->stmt_list. You're right that the approach of preserving > > the list structure while replacing its contents in-place doesn=E2=80=99= t hold > > up when the rewriter adds or removes statements dynamically. There > > might be other cases that neither of us have tried. I don=E2=80=99t th= ink > > that mechanism is salvageable. > > > To address the issue without needing a full revert, I=E2=80=99m conside= ring > > dropping UpdateCachedPlan() and removing the associated MemoryContext > > dance to preserve CachedPlan->stmt_list structure. Instead, the > > executor would replan the necessary query into a transient list of > > PlannedStmts, leaving the original CachedPlan untouched. That avoids > > mutating shared plan state during execution and still enables deferred > > locking in the vast majority of cases. > > Yeah, I think messing with the CachedPlan is just fundamentally wrong. > It breaks the invariant that the executor should not scribble on what > it's handed --- maybe not as obviously as some other cases, but it's > still not a good design. Fair enough. I=E2=80=99ll revert this and some related changes shortly. WI= P patch attached. > I kind of feel that we ought to take two steps back and think > about what it even means to have a generic plan in this situation. > Perhaps we should simply refuse to use that code path if there are > prunable partitioned tables involved? Sorry, I=E2=80=99m not sure I fully understand -- especially what you mean = by =E2=80=9Cthat code path.=E2=80=9D If you're referring to the generic plan c= reation and reuse path in general, I'd point out that initial runtime pruning was introduced largely to improve the efficiency of generic plan execution (albeit without addressing the locking bottleneck at the time -- David Rowley had explored that earlier). So simply disallowing generic plans when partitions are involved feels like an odd direction, given that a major motivation for initial pruning was to make those cases faster. Custom plans can win when parameters are available, of course, but there's a major use case involving stable expressions like now() with time-based partitions, where plan_cache_mode =3D auto will still choose a generic plan. So I wouldn=E2=80=99t say that optimizing generic plan execution -- especially the goal of this project -- is wasted effort in practice. > > Let me know what you think -- I=E2=80=99ll hold off on posting a revert= or a > > replacement until we=E2=80=99ve agreed on the path forward. > > I had not looked at 525392d57 in any detail before (the claim in > the commit message that I reviewed it is a figment of someone's > imagination). Apologies if I gave the misleading impression that you were on board with the current design. I meant only to acknowledge your earlier engagement with the general idea, which I appreciated. I marked it as =E2=80=9C(old versions)=E2=80=9D in the commit metadata to reflect that -- = clearly I should=E2=80=99ve been more precise. I know that the meaning of Reviewed-b= y and other tags is evolving and I clearly haven't kept up. > Now that I have, I'm still going to argue for revert. > Aside from the points above, I really hate what's been done to the > fundamental executor APIs. The fact that ExecutorStart callers have > to know about this is as ugly as can be. I also don't like the > fact that it's added overhead in cases where there can be no benefit > (notice that my test case doesn't even involve a partitioned table). I tried to keep the overhead low by ensuring that the only additional thing we'd be doing in the regular path is a CachedPlan->is_valid boolean check in a couple of places, and that further work would only happen if invalidation actually occurred. That said, I realize the patch makes invalidation handling apply in more cases than before, which may itself be seen as added overhead. But I may have misunderstood your concern -- perhaps it's more about the layering violation than the raw cycles? > I still like the core idea of deferring locking, but I don't like > anything about this implementation of it. It seems like there has > to be a better and simpler way. It's good to hear that you still like the core idea -- I=E2=80=99d really appreciate it if you're willing to continue bearing with me as I try to rework this in a way that's cleaner and better aligned with the overall design. I'd welcome any thoughts you have along the way. I know this has been a difficult project, and I don't mean to come across as taking any of it lightly. I'm still hopeful there's a path forward, but I completely understand the need to reset here. --=20 Thanks, Amit Langote --00000000000080fe360635a2bd4e Content-Type: application/octet-stream; name="v1-0001-Revert-Don-t-lock-partitions-pruned-by-initial-pr.patch" Content-Disposition: attachment; filename="v1-0001-Revert-Don-t-lock-partitions-pruned-by-initial-pr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_maxs2chc0 RnJvbSAyNjBkM2ZiZjQ4MDE0MDJmMWEyZmZkOTQ3ZjFmMDVmZDNjYWQ2ODc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjEgTWF5IDIwMjUgMTg6NDY6NTIgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx XSBSZXZlcnQgIkRvbid0IGxvY2sgcGFydGl0aW9ucyBwcnVuZWQgYnkgaW5pdGlhbCBwcnVuaW5n IgoKQXMgcG9pbnRlZCBvdXQgYnkgVG9tIExhbmUsIHRoZSBwYXRjaCBpbnRyb2R1Y2VkIGZyYWdp bGUgYW5kIGludmFzaXZlCmRlc2lnbiBhcm91bmQgcGxhbiBpbnZhbGlkYXRpb24gaGFuZGxpbmcg d2hlbiBsb2NraW5nIG9mIHBydW5hYmxlCnBhcnRpdGlvbnMgd2FzIGRlZmVycmVkIGZyb20gcGxh bmNhY2hlLmMgdG8gdGhlIGV4ZWN1dG9yLiBJbgpwYXJ0aWN1bGFyLCBpdCB2aW9sYXRlZCBhc3N1 bXB0aW9ucyBhYm91dCBDYWNoZWRQbGFuIGltbXV0YWJpbGl0eSBhbmQKYWx0ZXJlZCBleGVjdXRv ciBBUElzIGluIHdheXMgdGhhdCBhcmUgZGlmZmljdWx0IHRvIGp1c3RpZnkgZ2l2ZW4gdGhlCmFk ZGVkIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgoKVGhpcyBhbHNvIHJlbW92ZXMgdGhlIGZpcnN0 UmVzdWx0UmVscyBmaWVsZCBhZGRlZCB0byBQbGFubmVkU3RtdCBpbgpjb21taXQgMjgzMTdkZTcy LCB3aGljaCB3YXMgaW50ZW5kZWQgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2NraW5nIG9mCmNlcnRh aW4gTW9kaWZ5VGFibGUgcmVzdWx0IHJlbGF0aW9ucy4KClJlcG9ydGVkLWJ5OiBUb20gTGFuZSA8 dGdsQHNzcy5wZ2gucGEudXM+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vNjA1MzI4 LjE3NDc3MTAzODFAc3NzLnBnaC5wYS51cwotLS0KIGNvbnRyaWIvYXV0b19leHBsYWluL2F1dG9f ZXhwbGFpbi5jICAgICAgICAgICB8ICAxNiArLQogLi4uL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYyAgIHwgIDE2ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8u YyAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFz LmMgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j ICAgICAgICAgICAgICAgIHwgIDIyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24u YyAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyAg ICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcG9ydGFsY21kcy5j ICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyAgICAg ICAgICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jICAgICAg ICAgICAgICAgIHwgIDE1IC0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUgICAgICAgICAg ICAgICAgICAgfCAgMzUgKy0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAg ICAgICAgICAgIHwgMTI3ICstLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFy YWxsZWwuYyAgICAgICAgICAgfCAgMTIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0 aXRpb24uYyAgICAgICAgICB8ICA2NyArLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNV dGlscy5jICAgICAgICAgICAgICB8ICAgMSAtCiBzcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlv bnMuYyAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jICAg ICAgICAgICAgICAgICAgICB8ICAyOSArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyAgICAgICAgICB8ICAgMiAtCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRy ZWZzLmMgICAgICAgICAgfCAgIDMgLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAg ICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC90Y29wL3BxdWVyeS5jICAgICAgICAg ICAgICAgICAgICAgfCAgNTEgKy0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNo ZS5jICAgICAgICAgICB8IDE5NyArKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxz L21tZ3IvcG9ydGFsbWVtLmMgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXhwbGFpbi5oICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9jb21tYW5k cy90cmlnZ2VyLmggICAgICAgICAgICAgICAgfCAgIDEgLQogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY2Rlc2MuaCAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAzMyArLS0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgICAgICAgfCAgIDMgLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggICAgICAgICAgICAgICAgIHwgICA3IC0KIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5o ICAgICAgICAgICAgICAgICB8ICA0NiArLS0tCiBzcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCAg ICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIDMyIGZpbGVzIGNoYW5nZWQsIDg4IGluc2VydGlv bnMoKyksIDY1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFp bi9hdXRvX2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmlu ZGV4IGNkNjYyNTAyMGE3Li4xZjRiYWRiNDkyOCAxMDA2NDQKLS0tIGEvY29udHJpYi9hdXRvX2V4 cGxhaW4vYXV0b19leHBsYWluLmMKKysrIGIvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBs YWluLmMKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIEV4ZWN1dG9yUnVuX2hvb2tfdHlwZSBwcmV2 X0V4ZWN1dG9yUnVuID0gTlVMTDsKIHN0YXRpYyBFeGVjdXRvckZpbmlzaF9ob29rX3R5cGUgcHJl dl9FeGVjdXRvckZpbmlzaCA9IE5VTEw7CiBzdGF0aWMgRXhlY3V0b3JFbmRfaG9va190eXBlIHBy ZXZfRXhlY3V0b3JFbmQgPSBOVUxMOwogCi1zdGF0aWMgYm9vbCBleHBsYWluX0V4ZWN1dG9yU3Rh cnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOworc3RhdGljIHZvaWQgZXhwbGFp bl9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIHN0YXRp YyB2b2lkIGV4cGxhaW5fRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQkJ CVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQl1aW50NjQgY291bnQpOwpAQCAtMjYx LDExICsyNjEsOSBAQCBfUEdfaW5pdCh2b2lkKQogLyoKICAqIEV4ZWN1dG9yU3RhcnQgaG9vazog c3RhcnQgdXAgbG9nZ2luZyBpZiBuZWVkZWQKICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyB2b2lk CiBleHBsYWluX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3Mp CiB7Ci0JYm9vbAkJcGxhbl92YWxpZDsKLQogCS8qCiAJICogQXQgdGhlIGJlZ2lubmluZyBvZiBl YWNoIHRvcC1sZXZlbCBzdGF0ZW1lbnQsIGRlY2lkZSB3aGV0aGVyIHdlJ2xsCiAJICogc2FtcGxl IHRoaXMgc3RhdGVtZW50LiAgSWYgbmVzdGVkLXN0YXRlbWVudCBleHBsYWluaW5nIGlzIGVuYWJs ZWQsCkBAIC0zMDEsMTMgKzI5OSw5IEBAIGV4cGxhaW5fRXhlY3V0b3JTdGFydChRdWVyeURlc2Mg KnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAl9CiAKIAlpZiAocHJldl9FeGVjdXRvclN0YXJ0KQot CQlwbGFuX3ZhbGlkID0gcHJldl9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKKwkJ cHJldl9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKIAllbHNlCi0JCXBsYW5fdmFs aWQgPSBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKLQotCS8qIFRo ZSBwbGFuIG1heSBoYXZlIGJlY29tZSBpbnZhbGlkIGR1cmluZyBzdGFuZGFyZF9FeGVjdXRvclN0 YXJ0KCkgKi8KLQlpZiAoIXBsYW5fdmFsaWQpCi0JCXJldHVybiBmYWxzZTsKKwkJc3RhbmRhcmRf RXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CiAKIAlpZiAoYXV0b19leHBsYWluX2Vu YWJsZWQoKSkKIAl7CkBAIC0zMjUsOCArMzE5LDYgQEAgZXhwbGFpbl9FeGVjdXRvclN0YXJ0KFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGN4dCk7CiAJCX0KIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jIGIvY29udHJp Yi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKaW5kZXggOTc3ODQwN2Ni YTMuLmQ4ZmRmNDJkZjc5IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYwpAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyBQbGFubmVkU3RtdCAq cGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZywKIAkJCQkJCQkJIGludCBjdXJzb3JPcHRpb25zLAogCQkJCQkJCQkgUGFyYW1MaXN0SW5m byBib3VuZFBhcmFtcyk7Ci1zdGF0aWMgYm9vbCBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNj ICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOworc3RhdGljIHZvaWQgcGdzc19FeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKIHN0YXRpYyB2b2lkIHBnc3NfRXhl Y3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogCQkJCQkJCSB1aW50NjQgY291bnQpOwpAQCAtOTg5LDE5ICs5ODksMTMgQEAgcGdz c19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIC8qCiAgKiBFeGVjdXRvclN0YXJ0IGhvb2s6IHN0YXJ0 IHVwIHRyYWNraW5nIGlmIG5lZWRlZAogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIHZvaWQKIHBn c3NfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIHsKLQli b29sCQlwbGFuX3ZhbGlkOwotCiAJaWYgKHByZXZfRXhlY3V0b3JTdGFydCkKLQkJcGxhbl92YWxp ZCA9IHByZXZfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CisJCXByZXZfRXhlY3V0 b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7CiAJZWxzZQotCQlwbGFuX3ZhbGlkID0gc3RhbmRh cmRfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7Ci0KLQkvKiBUaGUgcGxhbiBtYXkg aGF2ZSBiZWNvbWUgaW52YWxpZCBkdXJpbmcgc3RhbmRhcmRfRXhlY3V0b3JTdGFydCgpICovCi0J aWYgKCFwbGFuX3ZhbGlkKQotCQlyZXR1cm4gZmFsc2U7CisJCXN0YW5kYXJkX0V4ZWN1dG9yU3Rh cnQocXVlcnlEZXNjLCBlZmxhZ3MpOwogCiAJLyoKIAkgKiBJZiBxdWVyeSBoYXMgcXVlcnlJZCB6 ZXJvLCBkb24ndCB0cmFjayBpdC4gIFRoaXMgcHJldmVudHMgZG91YmxlCkBAIC0xMDI0LDggKzEw MTgsNiBAQCBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpCiAJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAkJfQogCX0KLQotCXJldHVy biB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRv LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCBmODdlNDA1MzUxZC4uZWE2 ZjE4ZjJjODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC04MzUsNyArODM1LDcgQEAgQmVnaW5D b3B5VG8oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkoKERSX2NvcHkgKikgZGVzdCktPmNzdGF0ZSA9 IGNzdGF0ZTsKIAogCQkvKiBDcmVhdGUgYSBRdWVyeURlc2MgcmVxdWVzdGluZyBubyBvdXRwdXQg Ki8KLQkJY3N0YXRlLT5xdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgTlVMTCwgcHN0 YXRlLT5wX3NvdXJjZXRleHQsCisJCWNzdGF0ZS0+cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJCQlHZXRBY3RpdmVTbmFwc2hv dCgpLAogCQkJCQkJCQkJCQlJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCQkJCWRlc3QsIE5VTEws IE5VTEwsIDApOwpAQCAtODQ1LDggKzg0NSw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJICoKIAkJICogRXhlY3V0b3JTdGFydCBjb21wdXRlcyBhIHJlc3VsdCB0dXBkZXNj IGZvciB1cwogCQkgKi8KLQkJaWYgKCFFeGVjdXRvclN0YXJ0KGNzdGF0ZS0+cXVlcnlEZXNjLCAw KSkKLQkJCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0KCkgZmFpbGVkIHVuZXhwZWN0ZWRseSIp OworCQlFeGVjdXRvclN0YXJ0KGNzdGF0ZS0+cXVlcnlEZXNjLCAwKTsKIAogCQl0dXBEZXNjID0g Y3N0YXRlLT5xdWVyeURlc2MtPnR1cERlc2M7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5k ZXggMGE0MTU1NzczZWIuLmRmZDJhYjhlODYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAg LTMzNCwxMyArMzM0LDEyIEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Q3JlYXRlVGFibGVBc1N0bXQgKnN0bXQsCiAJCVVwZGF0ZUFjdGl2ZVNuYXBzaG90Q29tbWFuZElk KCk7CiAKIAkJLyogQ3JlYXRlIGEgUXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3Vy IHR1cGxlIHJlY2VpdmVyICovCi0JCXF1ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBO VUxMLCBwc3RhdGUtPnBfc291cmNldGV4dCwKKwkJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNj KHBsYW4sIHBzdGF0ZS0+cF9zb3VyY2V0ZXh0LAogCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3Qo KSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7 CiAKIAkJLyogY2FsbCBFeGVjdXRvclN0YXJ0IHRvIHByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1 dGlvbiAqLwotCQlpZiAoIUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBHZXRJbnRvUmVsRUZsYWdz KGludG8pKSkKLQkJCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0KCkgZmFpbGVkIHVuZXhwZWN0 ZWRseSIpOworCQlFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgR2V0SW50b1JlbEVGbGFncyhpbnRv KSk7CiAKIAkJLyogcnVuIHRoZSBwbGFuIHRvIGNvbXBsZXRpb24gKi8KIAkJRXhlY3V0b3JSdW4o cXVlcnlEZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgMCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK aW5kZXggNzg2ZWU4NjVmMTQuLjA5ZWEzMGRmYjkyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBA IC0zNjksOCArMzY5LDcgQEAgc3RhbmRhcmRfRXhwbGFpbk9uZVF1ZXJ5KFF1ZXJ5ICpxdWVyeSwg aW50IGN1cnNvck9wdGlvbnMsCiAJfQogCiAJLyogcnVuIGl0IChpZiBuZWVkZWQpIGFuZCBwcm9k dWNlIG91dHB1dCAqLwotCUV4cGxhaW5PbmVQbGFuKHBsYW4sIE5VTEwsIE5VTEwsIC0xLCBpbnRv LCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKLQkJCQkgICBxdWVyeUVudiwKKwlFeHBsYWluT25l UGxhbihwbGFuLCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywgcXVlcnlFbnYsCiAJCQkJ ICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJzID8gJmJ1ZnVzYWdlIDogTlVMTCksCiAJCQkJ ICAgZXMtPm1lbW9yeSA/ICZtZW1fY291bnRlcnMgOiBOVUxMKTsKIH0KQEAgLTQ5Miw5ICs0OTEs NyBAQCBFeHBsYWluT25lVXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50 bywgRXhwbGFpblN0YXRlICplcywKICAqIHRvIGNhbGwgaXQuCiAgKi8KIHZvaWQKLUV4cGxhaW5P bmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgQ2FjaGVkUGxhbiAqY3BsYW4sCi0JCQkg ICBDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBpbnQgcXVlcnlfaW5kZXgsCi0JCQkgICBJ bnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAorRXhwbGFpbk9uZVBsYW4oUGxhbm5l ZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUgKmVzLAog CQkJICAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFBhcmFtTGlzdEluZm8gcGFyYW1zLAogCQkJ ICAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJh dGlvbiwKIAkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKQEAgLTU1MCw3ICs1NDcs NyBAQCBFeHBsYWluT25lUGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIENhY2hlZFBsYW4g KmNwbGFuLAogCQlkZXN0ID0gTm9uZV9SZWNlaXZlcjsKIAogCS8qIENyZWF0ZSBhIFF1ZXJ5RGVz YyBmb3IgdGhlIHF1ZXJ5ICovCi0JcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW5uZWRz dG10LCBjcGxhbiwgcXVlcnlTdHJpbmcsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBs YW5uZWRzdG10LCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgSW52 YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBwYXJhbXMsIHF1ZXJ5RW52LCBpbnN0cnVtZW50 X29wdGlvbik7CiAKQEAgLTU2NCwxNyArNTYxLDggQEAgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0 bXQgKnBsYW5uZWRzdG10LCBDYWNoZWRQbGFuICpjcGxhbiwKIAlpZiAoaW50bykKIAkJZWZsYWdz IHw9IEdldEludG9SZWxFRmxhZ3MoaW50byk7CiAKLQkvKiBQcmVwYXJlIHRoZSBwbGFuIGZvciBl eGVjdXRpb24uICovCi0JaWYgKHF1ZXJ5RGVzYy0+Y3BsYW4pCi0JewotCQlFeGVjdXRvclN0YXJ0 Q2FjaGVkUGxhbihxdWVyeURlc2MsIGVmbGFncywgcGxhbnNvdXJjZSwgcXVlcnlfaW5kZXgpOwot CQlBc3NlcnQocXVlcnlEZXNjLT5wbGFuc3RhdGUpOwotCX0KLQllbHNlCi0JewotCQlpZiAoIUV4 ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBlZmxhZ3MpKQotCQkJZWxvZyhFUlJPUiwgIkV4ZWN1dG9y U3RhcnQoKSBmYWlsZWQgdW5leHBlY3RlZGx5Iik7Ci0JfQorCS8qIGNhbGwgRXhlY3V0b3JTdGFy dCB0byBwcmVwYXJlIHRoZSBwbGFuIGZvciBleGVjdXRpb24gKi8KKwlFeGVjdXRvclN0YXJ0KHF1 ZXJ5RGVzYywgZWZsYWdzKTsKIAogCS8qIEV4ZWN1dGUgdGhlIHBsYW4gZm9yIHN0YXRpc3RpY3Mg aWYgYXNrZWQgZm9yICovCiAJaWYgKGVzLT5hbmFseXplKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24u YwppbmRleCA3M2M1MmU5NzBmNi4uZTZmOWFiNmRmZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lv bi5jCkBAIC05OTMsMTMgKzk5MywxMSBAQCBleGVjdXRlX3NxbF9zdHJpbmcoY29uc3QgY2hhciAq c3FsLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAkJCQlRdWVyeURlc2MgICpxZGVzYzsKIAogCQkJ CXFkZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHN0bXQsCi0JCQkJCQkJCQkJTlVMTCwKIAkJCQkJCQkJ CQlzcWwsCiAJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwgTlVMTCwKIAkJCQkJCQkJCQlk ZXN0LCBOVUxMLCBOVUxMLCAwKTsKIAotCQkJCWlmICghRXhlY3V0b3JTdGFydChxZGVzYywgMCkp Ci0JCQkJCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0KCkgZmFpbGVkIHVuZXhwZWN0ZWRseSIp OworCQkJCUV4ZWN1dG9yU3RhcnQocWRlc2MsIDApOwogCQkJCUV4ZWN1dG9yUnVuKHFkZXNjLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwgMCk7CiAJCQkJRXhlY3V0b3JGaW5pc2gocWRlc2MpOwogCQkJ CUV4ZWN1dG9yRW5kKHFkZXNjKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCBlNzg1NGFkZDE3 OC4uMjdjMmNiMjZlZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTQzOCwxMyArNDM4LDEy IEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIgKmRlc3QsIFF1ZXJ5ICpx dWVyeSwKIAlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCiAJLyogQ3JlYXRlIGEg UXVlcnlEZXNjLCByZWRpcmVjdGluZyBvdXRwdXQgdG8gb3VyIHR1cGxlIHJlY2VpdmVyICovCi0J cXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIE5VTEwsIHF1ZXJ5U3RyaW5nLAorCXF1 ZXJ5RGVzYyA9IENyZWF0ZVF1ZXJ5RGVzYyhwbGFuLCBxdWVyeVN0cmluZywKIAkJCQkJCQkJR2V0 QWN0aXZlU25hcHNob3QoKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJCQlkZXN0LCBOVUxMLCBO VUxMLCAwKTsKIAogCS8qIGNhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRoZSBwbGFuIGZv ciBleGVjdXRpb24gKi8KLQlpZiAoIUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCAwKSkKLQkJZWxv ZyhFUlJPUiwgIkV4ZWN1dG9yU3RhcnQoKSBmYWlsZWQgdW5leHBlY3RlZGx5Iik7CisJRXhlY3V0 b3JTdGFydChxdWVyeURlc2MsIDApOwogCiAJLyogcnVuIHRoZSBwbGFuICovCiAJRXhlY3V0b3JS dW4ocXVlcnlEZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgMCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb3J0 YWxjbWRzLmMKaW5kZXggNGMyYWMwNDUyMjQuLmU3YzgxNzFjMTAyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wb3J0YWxjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cG9ydGFsY21kcy5jCkBAIC0xMTcsNyArMTE3LDYgQEAgUGVyZm9ybUN1cnNvck9wZW4oUGFyc2VT dGF0ZSAqcHN0YXRlLCBEZWNsYXJlQ3Vyc29yU3RtdCAqY3N0bXQsIFBhcmFtTGlzdEluZm8gcGEK IAkJCQkJICBxdWVyeVN0cmluZywKIAkJCQkJICBDTURUQUdfU0VMRUNULAkvKiBjdXJzb3IncyBx dWVyeSBpcyBhbHdheXMgYSBTRUxFQ1QgKi8KIAkJCQkJICBsaXN0X21ha2UxKHBsYW4pLAotCQkJ CQkgIE5VTEwsCiAJCQkJCSAgTlVMTCk7CiAKIAkvKi0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBh cmUuYwppbmRleCBiZjdkMmIyMzA5Zi4uMzRiNjQxMGQ2YTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ByZXBhcmUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJl LmMKQEAgLTIwNSw4ICsyMDUsNyBAQCBFeGVjdXRlUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLAog CQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBlbnRyeS0+cGxhbnNvdXJjZS0+Y29tbWFuZFRh ZywKIAkJCQkJICBwbGFuX2xpc3QsCi0JCQkJCSAgY3BsYW4sCi0JCQkJCSAgZW50cnktPnBsYW5z b3VyY2UpOworCQkJCQkgIGNwbGFuKTsKIAogCS8qCiAJICogRm9yIENSRUFURSBUQUJMRSAuLi4g QVMgRVhFQ1VURSwgd2UgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgcHJlcGFyZWQKQEAgLTU4Niw3ICs1 ODUsNiBAQCBFeHBsYWluRXhlY3V0ZVF1ZXJ5KEV4ZWN1dGVTdG10ICpleGVjc3RtdCwgSW50b0Ns YXVzZSAqaW50bywgRXhwbGFpblN0YXRlICplcywKIAlNZW1vcnlDb250ZXh0Q291bnRlcnMgbWVt X2NvdW50ZXJzOwogCU1lbW9yeUNvbnRleHQgcGxhbm5lcl9jdHggPSBOVUxMOwogCU1lbW9yeUNv bnRleHQgc2F2ZWRfY3R4ID0gTlVMTDsKLQlpbnQJCQlxdWVyeV9pbmRleCA9IDA7CiAKIAlpZiAo ZXMtPm1lbW9yeSkKIAl7CkBAIC02NTksOCArNjU3LDcgQEAgRXhwbGFpbkV4ZWN1dGVRdWVyeShF eGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAqZXMs CiAJCVBsYW5uZWRTdG10ICpwc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBwKTsKIAog CQlpZiAocHN0bXQtPmNvbW1hbmRUeXBlICE9IENNRF9VVElMSVRZKQotCQkJRXhwbGFpbk9uZVBs YW4ocHN0bXQsIGNwbGFuLCBlbnRyeS0+cGxhbnNvdXJjZSwgcXVlcnlfaW5kZXgsCi0JCQkJCQkg ICBpbnRvLCBlcywgcXVlcnlfc3RyaW5nLCBwYXJhbUxJLCBwc3RhdGUtPnBfcXVlcnlFbnYsCisJ CQlFeHBsYWluT25lUGxhbihwc3RtdCwgaW50bywgZXMsIHF1ZXJ5X3N0cmluZywgcGFyYW1MSSwg cHN0YXRlLT5wX3F1ZXJ5RW52LAogCQkJCQkJICAgJnBsYW5kdXJhdGlvbiwgKGVzLT5idWZmZXJz ID8gJmJ1ZnVzYWdlIDogTlVMTCksCiAJCQkJCQkgICBlcy0+bWVtb3J5ID8gJm1lbV9jb3VudGVy cyA6IE5VTEwpOwogCQllbHNlCkBAIC02NzEsOCArNjY4LDYgQEAgRXhwbGFpbkV4ZWN1dGVRdWVy eShFeGVjdXRlU3RtdCAqZXhlY3N0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5TdGF0ZSAq ZXMsCiAJCS8qIFNlcGFyYXRlIHBsYW5zIHdpdGggYW4gYXBwcm9wcmlhdGUgc2VwYXJhdG9yICov CiAJCWlmIChsbmV4dChwbGFuX2xpc3QsIHApICE9IE5VTEwpCiAJCQlFeHBsYWluU2VwYXJhdGVQ bGFucyhlcyk7Ci0KLQkJcXVlcnlfaW5kZXgrKzsKIAl9CiAKIAlpZiAoZXN0YXRlKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdHJpZ2dlci5jCmluZGV4IGM5ZjYxMTMwYzY5Li42N2Y4ZTcwZjljMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RyaWdnZXIuYwpAQCAtNTA1NywyMSArNTA1Nyw2IEBAIEFmdGVyVHJpZ2dlckJlZ2luUXVlcnko dm9pZCkKIH0KIAogCi0vKiAtLS0tLS0tLS0tCi0gKiBBZnRlclRyaWdnZXJBYm9ydFF1ZXJ5KCkK LSAqCi0gKiBDYWxsZWQgYnkgc3RhbmRhcmRfRXhlY3V0b3JFbmQoKSBpZiB0aGUgcXVlcnkgZXhl Y3V0aW9uIHdhcyBhYm9ydGVkIGR1ZSB0bwotICogdGhlIHBsYW4gYmVjb21pbmcgaW52YWxpZCBk dXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gKiAtLS0tLS0tLS0tCi0gKi8KLXZvaWQKLUFmdGVyVHJp Z2dlckFib3J0UXVlcnkodm9pZCkKLXsKLQkvKiBSZXZlcnQgdGhlIGFjdGlvbnMgb2YgQWZ0ZXJU cmlnZ2VyQmVnaW5RdWVyeSgpLiAqLwotCWFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGgtLTsKLX0K LQotCiAvKiAtLS0tLS0tLS0tCiAgKiBBZnRlclRyaWdnZXJFbmRRdWVyeSgpCiAgKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvUkVBRE1FIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv UkVBRE1FCmluZGV4IDAyNzQ1YzIzZWQ5Li41NGY0NzgyZjMxYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL1JFQURNRQpA QCAtMjg1LDI4ICsyODUsNiBAQCBhcmUgdHlwaWNhbGx5IHJlc2V0IHRvIGVtcHR5IG9uY2UgcGVy IHR1cGxlLiAgUGVyLXR1cGxlIGNvbnRleHRzIGFyZSB1c3VhbGx5CiBhc3NvY2lhdGVkIHdpdGgg RXhwckNvbnRleHRzLCBhbmQgY29tbW9ubHkgZWFjaCBQbGFuU3RhdGUgbm9kZSBoYXMgaXRzIG93 bgogRXhwckNvbnRleHQgdG8gZXZhbHVhdGUgaXRzIHF1YWwgYW5kIHRhcmdldGxpc3QgZXhwcmVz c2lvbnMgaW4uCiAKLVJlbGF0aW9uIExvY2tpbmcKLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbiB0 aGUgZXhlY3V0b3IgaW5pdGlhbGl6ZXMgYSBwbGFuIHRyZWUgZm9yIGV4ZWN1dGlvbiwgaXQgZG9l c24ndCBsb2NrCi1ub24taW5kZXggcmVsYXRpb25zIGlmIHRoZSBwbGFuIHRyZWUgaXMgZnJlc2hs eSBnZW5lcmF0ZWQgYW5kIG5vdCBkZXJpdmVkCi1mcm9tIGEgQ2FjaGVkUGxhbi4gVGhpcyBpcyBi ZWNhdXNlIHN1Y2ggbG9ja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZXN0YWJsaXNoZWQKLWR1cmluZyB0 aGUgcXVlcnkncyBwYXJzaW5nLCByZXdyaXRpbmcsIGFuZCBwbGFubmluZyBwaGFzZXMuIEhvd2V2 ZXIsIHdpdGggYQotY2FjaGVkIHBsYW4gdHJlZSwgc29tZSByZWxhdGlvbnMgbWF5IHJlbWFpbiB1 bmxvY2tlZC4gVGhlIGZ1bmN0aW9uCi1BY3F1aXJlRXhlY3V0b3JMb2NrcygpIG9ubHkgbG9ja3Mg dW5wcnVuYWJsZSByZWxhdGlvbnMgaW4gdGhlIHBsYW4sIGRlZmVycmluZwotdGhlIGxvY2tpbmcg b2YgcHJ1bmFibGUgb25lcyB0byBleGVjdXRvciBpbml0aWFsaXphdGlvbi4gVGhpcyBhdm9pZHMK LXVubmVjZXNzYXJ5IGxvY2tpbmcgb2YgcmVsYXRpb25zIHRoYXQgd2lsbCBiZSBwcnVuZWQgZHVy aW5nICJpbml0aWFsIiBydW50aW1lCi1wcnVuaW5nIGluIEV4ZWNEb0luaXRpYWxQcnVuaW5nKCku Ci0KLVRoaXMgYXBwcm9hY2ggY3JlYXRlcyBhIHdpbmRvdyB3aGVyZSBhIGNhY2hlZCBwbGFuIHRy ZWUgd2l0aCBjaGlsZCB0YWJsZXMKLWNvdWxkIGJlY29tZSBvdXRkYXRlZCBpZiBhbm90aGVyIGJh Y2tlbmQgbW9kaWZpZXMgdGhlc2UgdGFibGVzIGJlZm9yZQotRXhlY0RvSW5pdGlhbFBydW5pbmco KSBsb2NrcyB0aGVtLiBBcyBhIHJlc3VsdCwgdGhlIGV4ZWN1dG9yIGhhcyB0aGUgYWRkZWQgZHV0 eQotdG8gdmVyaWZ5IHRoZSBwbGFuIHRyZWUncyB2YWxpZGl0eSB3aGVuZXZlciBpdCBsb2NrcyBh IGNoaWxkIHRhYmxlIGFmdGVyCi1kb2luZyBpbml0aWFsIHBydW5pbmcuIFRoaXMgdmFsaWRhdGlv biBpcyBkb25lIGJ5IGNoZWNraW5nIHRoZSBDYWNoZWRQbGFuLmlzX3ZhbGlkCi1mbGFnLiBJZiB0 aGUgcGxhbiB0cmVlIGlzIG91dGRhdGVkIChpc192YWxpZCA9IGZhbHNlKSwgdGhlIGV4ZWN1dG9y IHN0b3BzCi1mdXJ0aGVyIGluaXRpYWxpemF0aW9uLCBjbGVhbnMgdXAgYW55dGhpbmcgaW4gRVN0 YXRlIHRoYXQgd291bGQgaGF2ZSBiZWVuCi1hbGxvY2F0ZWQgdXAgdG8gdGhhdCBwb2ludCwgYW5k IHJldHJpZXMgZXhlY3V0aW9uIGFmdGVyIHJlY3JlYXRpbmcgdGhlCi1pbnZhbGlkIHBsYW4gaW4g dGhlIENhY2hlZFBsYW4uICBTZWUgRXhlY3V0b3JTdGFydENhY2hlZFBsYW4oKS4KIAogUXVlcnkg UHJvY2Vzc2luZyBDb250cm9sIEZsb3cKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA IC0zMTUsMTMgKzI5MywxMSBAQCBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRyb2wgZmxvdyBmb3Ig ZnVsbCBxdWVyeSBwcm9jZXNzaW5nOgogCiAJQ3JlYXRlUXVlcnlEZXNjCiAKLQlFeGVjdXRvclN0 YXJ0IG9yIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuCisJRXhlY3V0b3JTdGFydAogCQlDcmVhdGVF eGVjdXRvclN0YXRlCiAJCQljcmVhdGVzIHBlci1xdWVyeSBjb250ZXh0Ci0JCXN3aXRjaCB0byBw ZXItcXVlcnkgY29udGV4dCB0byBydW4gRXhlY0RvSW5pdGlhbFBydW5pbmcgYW5kIEV4ZWNJbml0 Tm9kZQorCQlzd2l0Y2ggdG8gcGVyLXF1ZXJ5IGNvbnRleHQgdG8gcnVuIEV4ZWNJbml0Tm9kZQog CQlBZnRlclRyaWdnZXJCZWdpblF1ZXJ5Ci0JCUV4ZWNEb0luaXRpYWxQcnVuaW5nCi0JCQlkb2Vz IGluaXRpYWwgcHJ1bmluZyBhbmQgbG9ja3Mgc3Vydml2aW5nIHBhcnRpdGlvbnMgaWYgbmVlZGVk CiAJCUV4ZWNJbml0Tm9kZSAtLS0gcmVjdXJzaXZlbHkgc2NhbnMgcGxhbiB0cmVlCiAJCQlFeGVj SW5pdE5vZGUKIAkJCQlyZWN1cnNlIGludG8gc3Vic2lkaWFyeSBub2RlcwpAQCAtMzQ1LDEyICsz MjEsNyBAQCBUaGlzIGlzIGEgc2tldGNoIG9mIGNvbnRyb2wgZmxvdyBmb3IgZnVsbCBxdWVyeSBw cm9jZXNzaW5nOgogCiAJRnJlZVF1ZXJ5RGVzYwogCi1BcyBtZW50aW9uZWQgaW4gdGhlICJSZWxh dGlvbiBMb2NraW5nIiBzZWN0aW9uLCBpZiB0aGUgcGxhbiB0cmVlIGlzIGZvdW5kIHRvCi1iZSBz dGFsZSBhZnRlciBsb2NraW5nIHBhcnRpdGlvbnMgaW4gRXhlY0RvSW5pdGlhbFBydW5pbmcoKSwg dGhlIGNvbnRyb2wgaXMKLWltbWVkaWF0ZWx5IHJldHVybmVkIHRvIEV4ZWN1dG9yU3RhcnRDYWNo ZWRQbGFuKCksIHdoaWNoIHdpbGwgY3JlYXRlIGEgbmV3IHBsYW4KLXRyZWUgYW5kIHBlcmZvcm0g dGhlIHN0ZXBzIHN0YXJ0aW5nIGZyb20gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpIGFnYWluLgotCi1Q ZXIgYWJvdmUgY29tbWVudHMsIGl0J3Mgbm90IHJlYWxseSBjcml0aWNhbCBmb3IgRXhlY0VuZFBs YW4gdG8gZnJlZSBhbnkKK1BlciBhYm92ZSBjb21tZW50cywgaXQncyBub3QgcmVhbGx5IGNyaXRp Y2FsIGZvciBFeGVjRW5kTm9kZSB0byBmcmVlIGFueQogbWVtb3J5OyBpdCdsbCBhbGwgZ28gYXdh eSBpbiBGcmVlRXhlY3V0b3JTdGF0ZSBhbnl3YXkuICBIb3dldmVyLCB3ZSBkbyBuZWVkIHRvCiBi ZSBjYXJlZnVsIHRvIGNsb3NlIHJlbGF0aW9ucywgZHJvcCBidWZmZXIgcGlucywgZXRjLCBzbyB3 ZSBkbyBuZWVkIHRvIHNjYW4KIHRoZSBwbGFuIHN0YXRlIHRyZWUgdG8gZmluZCB0aGVzZSBzb3J0 cyBvZiByZXNvdXJjZXMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCA3MjMwZjk2ODEwMS4u MDM5MTc5OGRkMmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNTUsMTMgKzU1LDExIEBA CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgotI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5o IgogI2luY2x1ZGUgInV0aWxzL2JhY2tlbmRfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGFydGNhY2hlLmgiCi0jaW5jbHVkZSAidXRpbHMv cGxhbmNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmxzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25h cG1nci5oIgogCkBAIC0xMTksMTYgKzExNywxMSBAQCBzdGF0aWMgdm9pZCBSZXBvcnROb3ROdWxs VmlvbGF0aW9uRXJyb3IoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKICAqIGdldCBjb250 cm9sIHdoZW4gRXhlY3V0b3JTdGFydCBpcyBjYWxsZWQuICBTdWNoIGEgcGx1Z2luIHdvdWxkCiAg KiBub3JtYWxseSBjYWxsIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoKS4KICAqCi0gKiBSZXR1cm4g dmFsdWUgaW5kaWNhdGVzIGlmIHRoZSBwbGFuIGhhcyBiZWVuIGluaXRpYWxpemVkIHN1Y2Nlc3Nm dWxseSBzbwotICogdGhhdCBxdWVyeURlc2MtPnBsYW5zdGF0ZSBjb250YWlucyBhIHZhbGlkIFBs YW5TdGF0ZSB0cmVlLiAgSXQgbWF5IG5vdAotICogaWYgdGhlIHBsYW4gZ290IGludmFsaWRhdGVk IGR1cmluZyBJbml0UGxhbigpLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1ib29sCit2b2lkCiBFeGVjdXRv clN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewotCWJvb2wJCXBsYW5f dmFsaWQ7Ci0KIAkvKgogCSAqIEluIHNvbWUgY2FzZXMgKGUuZy4gYW4gRVhFQ1VURSBzdGF0ZW1l bnQgb3IgYW4gZXhlY3V0ZSBtZXNzYWdlIHdpdGggdGhlCiAJICogZXh0ZW5kZWQgcXVlcnkgcHJv dG9jb2wpIHRoZSBxdWVyeV9pZCB3b24ndCBiZSByZXBvcnRlZCwgc28gZG8gaXQgbm93LgpAQCAt MTQwLDE0ICsxMzMsMTIgQEAgRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50 IGVmbGFncykKIAlwZ3N0YXRfcmVwb3J0X3F1ZXJ5X2lkKHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQt PnF1ZXJ5SWQsIGZhbHNlKTsKIAogCWlmIChFeGVjdXRvclN0YXJ0X2hvb2spCi0JCXBsYW5fdmFs aWQgPSAoKkV4ZWN1dG9yU3RhcnRfaG9vaykgKHF1ZXJ5RGVzYywgZWZsYWdzKTsKKwkJKCpFeGVj dXRvclN0YXJ0X2hvb2spIChxdWVyeURlc2MsIGVmbGFncyk7CiAJZWxzZQotCQlwbGFuX3ZhbGlk ID0gc3RhbmRhcmRfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7Ci0KLQlyZXR1cm4g cGxhbl92YWxpZDsKKwkJc3RhbmRhcmRfRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncyk7 CiB9CiAKLWJvb2wKK3ZvaWQKIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVy eURlc2MsIGludCBlZmxhZ3MpCiB7CiAJRVN0YXRlCSAgICplc3RhdGU7CkBAIC0yNzEsNjQgKzI2 Miw2IEBAIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBl ZmxhZ3MpCiAJSW5pdFBsYW4ocXVlcnlEZXNjLCBlZmxhZ3MpOwogCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwotCi0JcmV0dXJuIEV4ZWNQbGFuU3RpbGxWYWxpZChxdWVyeURl c2MtPmVzdGF0ZSk7Ci19Ci0KLS8qCi0gKiBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbgotICoJCVN0 YXJ0IGV4ZWN1dGlvbiBmb3IgYSBnaXZlbiBxdWVyeSBpbiB0aGUgQ2FjaGVkUGxhblNvdXJjZSwg cmVwbGFubmluZwotICoJCWlmIHRoZSBwbGFuIGlzIGludmFsaWRhdGVkIGR1ZSB0byBkZWZlcnJl ZCBsb2NrcyB0YWtlbiBkdXJpbmcgdGhlCi0gKgkJcGxhbidzIGluaXRpYWxpemF0aW9uCi0gKgot ICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZSBDYWNoZWRQbGFuIGdpdmVu IGluIHF1ZXJ5RGVzYy0+Y3BsYW4KLSAqIG1pZ2h0IGJlY29tZSBpbnZhbGlkIGR1cmluZyB0aGUg aW5pdGlhbGl6YXRpb24gb2YgdGhlIHBsYW4gZ2l2ZW4gaW4KLSAqIHF1ZXJ5RGVzYy0+cGxhbm5l ZHN0bXQsIHBhcnRpY3VsYXJseSB3aGVuIHBydW5hYmxlIHJlbGF0aW9ucyBpbiBpdCBhcmUKLSAq IGxvY2tlZCBhZnRlciBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZy4gSWYgdGhlIGxvY2tzIGlu dmFsaWRhdGUgdGhlIHBsYW4sCi0gKiB0aGUgZnVuY3Rpb24gY2FsbHMgVXBkYXRlQ2FjaGVkUGxh bigpIHRvIHJlcGxhbiBhbGwgcXVlcmllcyBpbiB0aGUKLSAqIENhY2hlZFBsYW4sIGFuZCB0aGVu IHJldHJpZXMgaW5pdGlhbGl6YXRpb24uCi0gKgotICogVGhlIGZ1bmN0aW9uIHJlcGVhdHMgdGhl IHByb2Nlc3MgdW50aWwgRXhlY3V0b3JTdGFydCgpIHN1Y2Nlc3NmdWxseQotICogaW5pdGlhbGl6 ZXMgdGhlIHBsYW4sIHRoYXQgaXMgd2l0aG91dCB0aGUgQ2FjaGVkUGxhbiBiZWNvbWluZyBpbnZh bGlkLgotICovCi12b2lkCi1FeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbihRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgaW50IGVmbGFncywKLQkJCQkJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCi0J CQkJCQlpbnQgcXVlcnlfaW5kZXgpCi17Ci0JaWYgKHVubGlrZWx5KHF1ZXJ5RGVzYy0+Y3BsYW4g PT0gTlVMTCkpCi0JCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbigpOiBtaXNz aW5nIENhY2hlZFBsYW4iKTsKLQlpZiAodW5saWtlbHkocGxhbnNvdXJjZSA9PSBOVUxMKSkKLQkJ ZWxvZyhFUlJPUiwgIkV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6IG1pc3NpbmcgQ2FjaGVkUGxh blNvdXJjZSIpOwotCi0JLyoKLQkgKiBMb29wIGFuZCByZXRyeSB3aXRoIGFuIHVwZGF0ZWQgcGxh biB1bnRpbCBubyBmdXJ0aGVyIGludmFsaWRhdGlvbgotCSAqIG9jY3Vycy4KLQkgKi8KLQl3aGls ZSAoMSkKLQl7Ci0JCWlmICghRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncykpCi0JCXsK LQkJCS8qCi0JCQkgKiBDbGVhbiB1cCB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhdGUgYmVmb3Jl IGNyZWF0aW5nIHRoZSBuZXcKLQkJCSAqIHBsYW4gdG8gcmV0cnkgRXhlY3V0b3JTdGFydCgpLiAg TWFyayBleGVjdXRpb24gYXMgYWJvcnRlZCB0bwotCQkJICogZW5zdXJlIHRoYXQgQUZURVIgdHJp Z2dlciBzdGF0ZSBpcyBwcm9wZXJseSByZXNldC4KLQkJCSAqLwotCQkJcXVlcnlEZXNjLT5lc3Rh dGUtPmVzX2Fib3J0ZWQgPSB0cnVlOwotCQkJRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsKLQotCQkJ LyogUmV0cnkgRXhlY3V0b3JTdGFydCgpIHdpdGggYW4gdXBkYXRlZCBwbGFuIHRyZWUuICovCi0J CQlxdWVyeURlc2MtPnBsYW5uZWRzdG10ID0gVXBkYXRlQ2FjaGVkUGxhbihwbGFuc291cmNlLCBx dWVyeV9pbmRleCwKLQkJCQkJCQkJCQkJCQkgIHF1ZXJ5RGVzYy0+cXVlcnlFbnYpOwotCQl9Ci0J CWVsc2UKLQotCQkJLyoKLQkJCSAqIEV4aXQgdGhlIGxvb3AgaWYgdGhlIHBsYW4gaXMgaW5pdGlh bGl6ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBubwotCQkJICogc2ludmFsIG1lc3NhZ2VzIHdlcmUgcmVj ZWl2ZWQgdGhhdCBpbnZhbGlkYXRlZCB0aGUgQ2FjaGVkUGxhbi4KLQkJCSAqLwotCQkJYnJlYWs7 Ci0JfQogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zODcsNyArMzIwLDYgQEAgc3RhbmRhcmRfRXhlY3V0 b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7 CiAKIAlBc3NlcnQoZXN0YXRlICE9IE5VTEwpOwotCUFzc2VydCghZXN0YXRlLT5lc19hYm9ydGVk KTsKIAlBc3NlcnQoIShlc3RhdGUtPmVzX3RvcF9lZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJTl9P TkxZKSk7CiAKIAkvKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHF1ZXJ5J3Mgc25hcHNob3QgaXMg YWN0aXZlICovCkBAIC00OTQsMTEgKzQyNiw4IEBAIHN0YW5kYXJkX0V4ZWN1dG9yRmluaXNoKFF1 ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCUFzc2VydChlc3RhdGUgIT0gTlVMTCk7CiAJQXNzZXJ0KCEo ZXN0YXRlLT5lc190b3BfZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkpOwogCi0JLyoK LQkgKiBUaGlzIHNob3VsZCBiZSBydW4gb25jZSBhbmQgb25seSBvbmNlIHBlciBFeGVjdXRvciBp bnN0YW5jZSBhbmQgbmV2ZXIKLQkgKiBpZiB0aGUgZXhlY3V0aW9uIHdhcyBhYm9ydGVkLgotCSAq LwotCUFzc2VydCghZXN0YXRlLT5lc19maW5pc2hlZCAmJiAhZXN0YXRlLT5lc19hYm9ydGVkKTsK KwkvKiBUaGlzIHNob3VsZCBiZSBydW4gb25jZSBhbmQgb25seSBvbmNlIHBlciBFeGVjdXRvciBp bnN0YW5jZSAqLworCUFzc2VydCghZXN0YXRlLT5lc19maW5pc2hlZCk7CiAKIAkvKiBTd2l0Y2gg aW50byBwZXItcXVlcnkgbWVtb3J5IGNvbnRleHQgKi8KIAlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKQEAgLTU2MSwxMCArNDkwLDExIEBA IHN0YW5kYXJkX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCQkJCQkJCQkJCQkg KFBnU3RhdF9Db3VudGVyKSBlc3RhdGUtPmVzX3BhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQpOwog CiAJLyoKLQkgKiBDaGVjayB0aGF0IEV4ZWN1dG9yRmluaXNoIHdhcyBjYWxsZWQsIHVubGVzcyBp biBFWFBMQUlOLW9ubHkgbW9kZSBvciBpZgotCSAqIGV4ZWN1dGlvbiB3YXMgYWJvcnRlZC4KKwkg KiBDaGVjayB0aGF0IEV4ZWN1dG9yRmluaXNoIHdhcyBjYWxsZWQsIHVubGVzcyBpbiBFWFBMQUlO LW9ubHkgbW9kZS4gVGhpcworCSAqIEFzc2VydCBpcyBuZWVkZWQgYmVjYXVzZSBFeGVjdXRvckZp bmlzaCBpcyBuZXcgYXMgb2YgOS4xLCBhbmQgY2FsbGVycworCSAqIG1pZ2h0IGZvcmdldCB0byBj YWxsIGl0LgogCSAqLwotCUFzc2VydChlc3RhdGUtPmVzX2ZpbmlzaGVkIHx8IGVzdGF0ZS0+ZXNf YWJvcnRlZCB8fAorCUFzc2VydChlc3RhdGUtPmVzX2ZpbmlzaGVkIHx8CiAJCSAgIChlc3RhdGUt PmVzX3RvcF9lZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJTl9PTkxZKSk7CiAKIAkvKgpAQCAtNTc4 LDE0ICs1MDgsNiBAQCBzdGFuZGFyZF9FeGVjdXRvckVuZChRdWVyeURlc2MgKnF1ZXJ5RGVzYykK IAlVbnJlZ2lzdGVyU25hcHNob3QoZXN0YXRlLT5lc19zbmFwc2hvdCk7CiAJVW5yZWdpc3RlclNu YXBzaG90KGVzdGF0ZS0+ZXNfY3Jvc3NjaGVja19zbmFwc2hvdCk7CiAKLQkvKgotCSAqIFJlc2V0 IEFGVEVSIHRyaWdnZXIgbW9kdWxlIGlmIHRoZSBxdWVyeSBleGVjdXRpb24gd2FzIGFib3J0ZWQu Ci0JICovCi0JaWYgKGVzdGF0ZS0+ZXNfYWJvcnRlZCAmJgotCQkhKGVzdGF0ZS0+ZXNfdG9wX2Vm bGFncyAmCi0JCSAgKEVYRUNfRkxBR19TS0lQX1RSSUdHRVJTIHwgRVhFQ19GTEFHX0VYUExBSU5f T05MWSkpKQotCQlBZnRlclRyaWdnZXJBYm9ydFF1ZXJ5KCk7Ci0KIAkvKgogCSAqIE11c3Qgc3dp dGNoIG91dCBvZiBjb250ZXh0IGJlZm9yZSBkZXN0cm95aW5nIGl0CiAJICovCkBAIC02ODQsMjEg KzYwNiw2IEBAIEV4ZWNDaGVja1Blcm1pc3Npb25zKExpc3QgKnJhbmdlVGFibGUsIExpc3QgKnJ0 ZXBlcm1pbmZvcywKIAkJCQkgICAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJgogCQkJ CQlydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9WSUVXKSk7CiAKLQkJCS8qCi0JCQkgKiBFbnN1cmUg dGhhdCB3ZSBoYXZlIGF0IGxlYXN0IGFuIEFjY2Vzc1NoYXJlTG9jayBvbiByZWxhdGlvbnMKLQkJ CSAqIHdob3NlIHBlcm1pc3Npb25zIG5lZWQgdG8gYmUgY2hlY2tlZC4KLQkJCSAqCi0JCQkgKiBT a2lwIHRoaXMgY2hlY2sgaW4gYSBwYXJhbGxlbCB3b3JrZXIgYmVjYXVzZSBsb2NrcyB3b24ndCBi ZQotCQkJICogdGFrZW4gdW50aWwgRXhlY0luaXROb2RlKCkgcGVyZm9ybXMgcGxhbiBpbml0aWFs aXphdGlvbi4KLQkJCSAqCi0JCQkgKiBYWFg6IEV4ZWNDaGVja1Blcm1pc3Npb25zKCkgaW4gYSBw YXJhbGxlbCB3b3JrZXIgbWF5IGJlCi0JCQkgKiByZWR1bmRhbnQgd2l0aCB0aGUgY2hlY2tzIGRv bmUgaW4gdGhlIGxlYWRlciBwcm9jZXNzLCBzbyB0aGlzCi0JCQkgKiBzaG91bGQgYmUgcmV2aWV3 ZWQgdG8gZW5zdXJlIGl04oCZcyBuZWNlc3NhcnkuCi0JCQkgKi8KLQkJCUFzc2VydChJc1BhcmFs bGVsV29ya2VyKCkgfHwKLQkJCQkgICBDaGVja1JlbGF0aW9uT2lkTG9ja2VkQnlNZShydGUtPnJl bGlkLCBBY2Nlc3NTaGFyZUxvY2ssCi0JCQkJCQkJCQkJCSAgdHJ1ZSkpOwotCiAJCQkodm9pZCkg Z2V0UlRFUGVybWlzc2lvbkluZm8ocnRlcGVybWluZm9zLCBydGUpOwogCQkJLyogTWFueS10by1v bmUgbWFwcGluZyBub3QgYWxsb3dlZCAqLwogCQkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKHJ0ZS0+ cGVybWluZm9pbmRleCwgaW5kZXhzZXQpKTsKQEAgLTkyNCwxMiArODMxLDYgQEAgRXhlY0NoZWNr WGFjdFJlYWRPbmx5KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCkKICAqCiAgKgkJSW5pdGlhbGl6 ZXMgdGhlIHF1ZXJ5IHBsYW46IG9wZW4gZmlsZXMsIGFsbG9jYXRlIHN0b3JhZ2UKICAqCQlhbmQg c3RhcnQgdXAgdGhlIHJ1bGUgbWFuYWdlcgotICoKLSAqCQlJZiB0aGUgcGxhbiBvcmlnaW5hdGVz IGZyb20gYSBDYWNoZWRQbGFuIChnaXZlbiBpbiBxdWVyeURlc2MtPmNwbGFuKSwKLSAqCQlpdCBj YW4gYmVjb21lIGludmFsaWQgZHVyaW5nIHJ1bnRpbWUgImluaXRpYWwiIHBydW5pbmcgd2hlbiB0 aGUKLSAqCQlyZW1haW5pbmcgc2V0IG9mIGxvY2tzIGlzIHRha2VuLiAgVGhlIGZ1bmN0aW9uIHJl dHVybnMgZWFybHkgaW4gdGhhdAotICoJCWNhc2Ugd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHBs YW4sIGFuZCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvCi0gKgkJcmV0cnkgd2l0aCBhIG5ldyB2 YWxpZCBwbGFuLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZApAQCAtOTM3LDcgKzgzOCw2 IEBAIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewogCUNtZFR5 cGUJCW9wZXJhdGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCVBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCA9IHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQ7Ci0JQ2FjaGVkUGxhbiAqY2FjaGVkcGxh biA9IHF1ZXJ5RGVzYy0+Y3BsYW47CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5uZWRzdG10LT5wbGFu VHJlZTsKIAlMaXN0CSAgICpyYW5nZVRhYmxlID0gcGxhbm5lZHN0bXQtPnJ0YWJsZTsKIAlFU3Rh dGUJICAgKmVzdGF0ZSA9IHF1ZXJ5RGVzYy0+ZXN0YXRlOwpAQCAtOTU4LDcgKzg1OCw2IEBAIElu aXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCQkJCQkgICBibXNfY29w eShwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlkcykpOwogCiAJZXN0YXRlLT5lc19wbGFubmVk c3RtdCA9IHBsYW5uZWRzdG10OwotCWVzdGF0ZS0+ZXNfY2FjaGVkcGxhbiA9IGNhY2hlZHBsYW47 CiAJZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zID0gcGxhbm5lZHN0bXQtPnBhcnRQcnVuZUlu Zm9zOwogCiAJLyoKQEAgLTk3Miw5ICs4NzEsNiBAQCBJbml0UGxhbihRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgaW50IGVmbGFncykKIAkgKi8KIAlFeGVjRG9Jbml0aWFsUHJ1bmluZyhlc3RhdGUpOwog Ci0JaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKLQkJcmV0dXJuOwotCiAJLyoKIAkg KiBOZXh0LCBidWlsZCB0aGUgRXhlY1Jvd01hcmsgYXJyYXkgZnJvbSB0aGUgUGxhblJvd01hcmso cyksIGlmIGFueS4KIAkgKi8KQEAgLTMwOTIsOSArMjk4OCw2IEBAIEV2YWxQbGFuUXVhbFN0YXJ0 KEVQUVN0YXRlICplcHFzdGF0ZSwgUGxhbiAqcGxhblRyZWUpCiAJICogdGhlIHNuYXBzaG90LCBy YW5nZXRhYmxlLCBhbmQgZXh0ZXJuYWwgUGFyYW0gaW5mby4gIFRoZXkgbmVlZCB0aGVpciBvd24K IAkgKiBjb3BpZXMgb2YgbG9jYWwgc3RhdGUsIGluY2x1ZGluZyBhIHR1cGxlIHRhYmxlLCBlc19w YXJhbV9leGVjX3ZhbHMsCiAJICogcmVzdWx0LXJlbCBpbmZvLCBldGMuCi0JICoKLQkgKiBlc19j YWNoZWRwbGFuIGlzIG5vdCBjb3BpZWQgYmVjYXVzZSBFUFEgcGxhbiBleGVjdXRpb24gZG9lcyBu b3QgYWNxdWlyZQotCSAqIGFueSBuZXcgbG9ja3MgdGhhdCBjb3VsZCBpbnZhbGlkYXRlIHRoZSBD YWNoZWRQbGFuLgogCSAqLwogCXJjZXN0YXRlLT5lc19kaXJlY3Rpb24gPSBGb3J3YXJkU2NhbkRp cmVjdGlvbjsKIAlyY2VzdGF0ZS0+ZXNfc25hcHNob3QgPSBwYXJlbnRlc3RhdGUtPmVzX3NuYXBz aG90OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYwppbmRleCAzOWM5OTBhZTYzOC4uZjNl NzdiZGEyNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJhbGxlbC5jCkBAIC0xMjc4LDE1ICsx Mjc4LDggQEAgRXhlY1BhcmFsbGVsR2V0UXVlcnlEZXNjKHNobV90b2MgKnRvYywgRGVzdFJlY2Vp dmVyICpyZWNlaXZlciwKIAlwYXJhbXNwYWNlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExF TF9LRVlfUEFSQU1MSVNUSU5GTywgZmFsc2UpOwogCXBhcmFtTEkgPSBSZXN0b3JlUGFyYW1MaXN0 KCZwYXJhbXNwYWNlKTsKIAotCS8qCi0JICogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVl cnkuICBXZSBwYXNzIE5VTEwgZm9yIGNhY2hlZHBsYW4sIGJlY2F1c2UKLQkgKiB3ZSBkb24ndCBo YXZlIGEgcG9pbnRlciB0byB0aGUgQ2FjaGVkUGxhbiBpbiB0aGUgbGVhZGVyJ3MgcHJvY2Vzcy4g SXQncwotCSAqIGZpbmUgYmVjYXVzZSB0aGUgb25seSByZWFzb24gdGhlIGV4ZWN1dG9yIG5lZWRz IHRvIHNlZSBpdCBpcyB0byBkZWNpZGUKLQkgKiBpZiBpdCBzaG91bGQgdGFrZSBsb2NrcyBvbiBj ZXJ0YWluIHJlbGF0aW9ucywgYnV0IHBhcmFsbGVsIHdvcmtlcnMKLQkgKiBhbHdheXMgdGFrZSBs b2NrcyBhbnl3YXkuCi0JICovCisJLyogQ3JlYXRlIGEgUXVlcnlEZXNjIGZvciB0aGUgcXVlcnku ICovCiAJcmV0dXJuIENyZWF0ZVF1ZXJ5RGVzYyhwc3RtdCwKLQkJCQkJCSAgIE5VTEwsCiAJCQkJ CQkgICBxdWVyeVN0cmluZywKIAkJCQkJCSAgIEdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRT bmFwc2hvdCwKIAkJCQkJCSAgIHJlY2VpdmVyLCBwYXJhbUxJLCBOVUxMLCBpbnN0cnVtZW50X29w dGlvbnMpOwpAQCAtMTQ3MSw4ICsxNDY0LDcgQEAgUGFyYWxsZWxRdWVyeU1haW4oZHNtX3NlZ21l bnQgKnNlZywgc2htX3RvYyAqdG9jKQogCiAJLyogU3RhcnQgdXAgdGhlIGV4ZWN1dG9yICovCiAJ cXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+aml0RmxhZ3MgPSBmcGVzLT5qaXRfZmxhZ3M7Ci0JaWYg KCFFeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZnBlcy0+ZWZsYWdzKSkKLQkJZWxvZyhFUlJPUiwg IkV4ZWN1dG9yU3RhcnQoKSBmYWlsZWQgdW5leHBlY3RlZGx5Iik7CisJRXhlY3V0b3JTdGFydChx dWVyeURlc2MsIGZwZXMtPmVmbGFncyk7CiAKIAkvKiBTcGVjaWFsIGV4ZWN1dG9yIGluaXRpYWxp emF0aW9uIHN0ZXBzIGZvciBwYXJhbGxlbCB3b3JrZXJzICovCiAJcXVlcnlEZXNjLT5wbGFuc3Rh dGUtPnN0YXRlLT5lc19xdWVyeV9kc2EgPSBhcmVhOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRp dGlvbi5jCmluZGV4IDNmOGE0Y2I1MjQ0Li4zMjk5ZGIyMmJkNSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgInBhcnRpdGlvbmlu Zy9wYXJ0ZGVzYy5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgog I2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3BhcnRjYWNoZS5oIgpAQCAtMTc3MSw4ICsxNzcwLDcgQEAgYWRqdXN0X3Bh cnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0ck1hcCkK ICAqIEV4ZWNEb0luaXRpYWxQcnVuaW5nOgogICoJCVBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIg cHJ1bmluZywgaWYgbmVjZXNzYXJ5LCB0byBkZXRlcm1pbmUgdGhlIHNldAogICoJCW9mIGNoaWxk IHN1Ym5vZGVzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXplZCBkdXJpbmcgRXhlY0luaXROb2Rl KCkgZm9yCi0gKgkJYWxsIHBsYW4gbm9kZXMgdGhhdCBjb250YWluIGEgUGFydGl0aW9uUHJ1bmVJ bmZvLiAgVGhpcyBhbHNvIGxvY2tzIHRoZQotICoJCWxlYWYgcGFydGl0aW9ucyB3aG9zZSBzdWJu b2RlcyB3aWxsIGJlIGluaXRpYWxpemVkIGlmIG5lZWRlZC4KKyAqCQlhbGwgcGxhbiBub2RlcyB0 aGF0IGNvbnRhaW4gYSBQYXJ0aXRpb25QcnVuZUluZm8uCiAgKgogICogRXhlY0luaXRQYXJ0aXRp b25FeGVjUHJ1bmluZzoKICAqCQlVcGRhdGVzIHRoZSBQYXJ0aXRpb25QcnVuZVN0YXRlIGZvdW5k IGF0IGdpdmVuIHBhcnRfcHJ1bmVfaW5kZXggaW4KQEAgLTE3OTMsMTMgKzE3OTEsMTEgQEAgYWRq dXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1hcCAqYXR0 ck1hcCkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLQogLyoKICAqIEV4ZWNEb0luaXRpYWxQ cnVuaW5nCiAgKgkJUGVyZm9ybSBydW50aW1lICJpbml0aWFsIiBwcnVuaW5nLCBpZiBuZWNlc3Nh cnksIHRvIGRldGVybWluZSB0aGUgc2V0CiAgKgkJb2YgY2hpbGQgc3Vibm9kZXMgdGhhdCBuZWVk IHRvIGJlIGluaXRpYWxpemVkIGR1cmluZyBFeGVjSW5pdE5vZGUoKSBmb3IKLSAqCQlwbGFuIG5v ZGVzIHRoYXQgc3VwcG9ydCBwYXJ0aXRpb24gcHJ1bmluZy4gIFRoaXMgYWxzbyBsb2NrcyB0aGUg bGVhZgotICoJCXBhcnRpdGlvbnMgd2hvc2Ugc3Vibm9kZXMgd2lsbCBiZSBpbml0aWFsaXplZCBp ZiBuZWVkZWQuCisgKgkJcGxhbiBub2RlcyB0aGF0IHN1cHBvcnQgcGFydGl0aW9uIHBydW5pbmcu CiAgKgogICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGVhY2ggUGFydGl0aW9uUHJ1bmVJ bmZvIGVudHJ5IGluCiAgKiBlc3RhdGUtPmVzX3BhcnRfcHJ1bmVfaW5mb3MuIEZvciBlYWNoIGVu dHJ5LCBpdCBjcmVhdGVzIGEgUGFydGl0aW9uUHJ1bmVTdGF0ZQpAQCAtMTgyMSw5ICsxODE3LDcg QEAgYWRqdXN0X3BhcnRpdGlvbl9jb2xub3NfdXNpbmdfbWFwKExpc3QgKmNvbG5vcywgQXR0ck1h cCAqYXR0ck1hcCkKIHZvaWQKIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKQog ewotCVBsYW5uZWRTdG10ICpzdG10ID0gZXN0YXRlLT5lc19wbGFubmVkc3RtdDsKIAlMaXN0Q2Vs bCAgICpsYzsKLQlMaXN0CSAgICpsb2NrZWRfcmVsaWRzID0gTklMOwogCiAJZm9yZWFjaChsYywg ZXN0YXRlLT5lc19wYXJ0X3BydW5lX2luZm9zKQogCXsKQEAgLTE4NDksNjggKzE4NDMsMTEgQEAg RXhlY0RvSW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUpCiAJCWVsc2UKIAkJCXZhbGlkc3Vi cGxhbl9ydGlzID0gYWxsX2xlYWZwYXJ0X3J0aXM7CiAKLQkJaWYgKEV4ZWNTaG91bGRMb2NrUmVs YXRpb25zKGVzdGF0ZSkpCi0JCXsKLQkJCWludAkJCXJ0aW5kZXggPSAtMTsKLQotCQkJd2hpbGUg KChydGluZGV4ID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxhbl9ydGlzLAotCQkJCQkJCQkJ CQkgIHJ0aW5kZXgpKSA+PSAwKQotCQkJewotCQkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IGV4ZWNf cnRfZmV0Y2gocnRpbmRleCwgZXN0YXRlKTsKLQotCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0g UlRFX1JFTEFUSU9OICYmCi0JCQkJCSAgIHJ0ZS0+cmVsbG9ja21vZGUgIT0gTm9Mb2NrKTsKLQkJ CQlMb2NrUmVsYXRpb25PaWQocnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7Ci0JCQkJbG9j a2VkX3JlbGlkcyA9IGxhcHBlbmRfaW50KGxvY2tlZF9yZWxpZHMsIHJ0aW5kZXgpOwotCQkJfQot CQl9CiAJCWVzdGF0ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXJzKGVzdGF0 ZS0+ZXNfdW5wcnVuZWRfcmVsaWRzLAogCQkJCQkJCQkJCQkJCSB2YWxpZHN1YnBsYW5fcnRpcyk7 CiAJCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9yZXN1bHRzID0gbGFwcGVuZChlc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfcmVzdWx0cywKIAkJCQkJCQkJCQkJCXZhbGlkc3VicGxhbnMpOwogCX0KLQotCS8q Ci0JICogTG9jayB0aGUgZmlyc3QgcmVzdWx0IHJlbGF0aW9uIG9mIGVhY2ggTW9kaWZ5VGFibGUg bm9kZSwgZXZlbiBpZiBpdCB3YXMKLQkgKiBwcnVuZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBF eGVjSW5pdE1vZGlmeVRhYmxlKCksIHdoaWNoIGtlZXBzIGl0cwotCSAqIGZpcnN0IHJlc3VsdCBy ZWxhdGlvbiBpZiBhbGwgb3RoZXIgcmVzdWx0IHJlbGF0aW9ucyBoYXZlIGJlZW4gcHJ1bmVkLAot CSAqIGJlY2F1c2Ugc29tZSBleGVjdXRvciBwYXRocyAoZS5nLiwgaW4gbm9kZU1vZGlmeVRhYmxl LmMgYW5kCi0JICogZXhlY1BhcnRpdGlvbi5jKSByZWx5IG9uIHRoZXJlIGJlaW5nIGF0IGxlYXN0 IG9uZSByZXN1bHQgcmVsYXRpb24uCi0JICoKLQkgKiBUaGVyZSdzIHJvb20gZm9yIGltcHJvdmVt ZW50IGhlcmUgLS0tIHdlIGFjdHVhbGx5IG9ubHkgbmVlZCB0byBkbyB0aGlzCi0JICogaWYgYWxs IG90aGVyIHJlc3VsdCByZWxhdGlvbnMgb2YgdGhlIE1vZGlmeVRhYmxlIG5vZGUgd2VyZSBwcnVu ZWQsIGJ1dAotCSAqIHdlIGRvbid0IGhhdmUgYW4gZWFzeSB3YXkgdG8gdGVsbCB0aGF0IGhlcmUu Ci0JICovCi0JaWYgKHN0bXQtPnJlc3VsdFJlbGF0aW9ucyAmJiBFeGVjU2hvdWxkTG9ja1JlbGF0 aW9ucyhlc3RhdGUpKQotCXsKLQkJZm9yZWFjaChsYywgc3RtdC0+Zmlyc3RSZXN1bHRSZWxzKQot CQl7Ci0JCQlJbmRleAkJZmlyc3RSZXN1bHRSZWwgPSBsZmlyc3RfaW50KGxjKTsKLQotCQkJaWYg KCFibXNfaXNfbWVtYmVyKGZpcnN0UmVzdWx0UmVsLCBlc3RhdGUtPmVzX3VucHJ1bmVkX3JlbGlk cykpCi0JCQl7Ci0JCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gZXhlY19ydF9mZXRjaChmaXJzdFJl c3VsdFJlbCwgZXN0YXRlKTsKLQotCQkJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFU SU9OICYmIHJ0ZS0+cmVsbG9ja21vZGUgIT0gTm9Mb2NrKTsKLQkJCQlMb2NrUmVsYXRpb25PaWQo cnRlLT5yZWxpZCwgcnRlLT5yZWxsb2NrbW9kZSk7Ci0JCQkJbG9ja2VkX3JlbGlkcyA9IGxhcHBl bmRfaW50KGxvY2tlZF9yZWxpZHMsIGZpcnN0UmVzdWx0UmVsKTsKLQkJCX0KLQkJfQotCX0KLQot CS8qCi0JICogUmVsZWFzZSB0aGUgdXNlbGVzcyBsb2NrcyBpZiB0aGUgcGxhbiB3b24ndCBiZSBl eGVjdXRlZC4gIFRoaXMgaXMgdGhlCi0JICogc2FtZSBhcyB3aGF0IENoZWNrQ2FjaGVkUGxhbigp IGluIHBsYW5jYWNoZS5jIGRvZXMuCi0JICovCi0JaWYgKCFFeGVjUGxhblN0aWxsVmFsaWQoZXN0 YXRlKSkKLQl7Ci0JCWZvcmVhY2gobGMsIGxvY2tlZF9yZWxpZHMpCi0JCXsKLQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSA9IGV4ZWNfcnRfZmV0Y2gobGZpcnN0X2ludChsYyksIGVzdGF0ZSk7Ci0KLQkJ CVVubG9ja1JlbGF0aW9uT2lkKHJ0ZS0+cmVsaWQsIHJ0ZS0+cmVsbG9ja21vZGUpOwotCQl9Ci0J fQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVXRpbHMuYwppbmRleCA3NzJjODZlNzBlOS4uZmRj NjVjMmI0MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCkBAIC0xNDcsNyArMTQ3LDYgQEAg Q3JlYXRlRXhlY3V0b3JTdGF0ZSh2b2lkKQogCWVzdGF0ZS0+ZXNfdG9wX2VmbGFncyA9IDA7CiAJ ZXN0YXRlLT5lc19pbnN0cnVtZW50ID0gMDsKIAllc3RhdGUtPmVzX2ZpbmlzaGVkID0gZmFsc2U7 Ci0JZXN0YXRlLT5lc19hYm9ydGVkID0gZmFsc2U7CiAKIAllc3RhdGUtPmVzX2V4cHJjb250ZXh0 cyA9IE5JTDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA4ZDRkMDYyZDU3OS4uYjFm OWMxN2Y5OGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC0xMzM4LDcgKzEzMzgsNiBA QCBwb3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVzLCBTUUxGdW5jdGlvbkNhY2hlUHRy IGZjYWNoZSkKIAkJZGVzdCA9IE5vbmVfUmVjZWl2ZXI7CiAKIAllcy0+cWQgPSBDcmVhdGVRdWVy eURlc2MoZXMtPnN0bXQsCi0JCQkJCQkJIE5VTEwsCiAJCQkJCQkJIGZjYWNoZS0+ZnVuYy0+c3Jj LAogCQkJCQkJCSBHZXRBY3RpdmVTbmFwc2hvdCgpLAogCQkJCQkJCSBJbnZhbGlkU25hcHNob3Qs CkBAIC0xMzYzLDggKzEzNjIsNyBAQCBwb3N0cXVlbF9zdGFydChleGVjdXRpb25fc3RhdGUgKmVz LCBTUUxGdW5jdGlvbkNhY2hlUHRyIGZjYWNoZSkKIAkJCWVmbGFncyA9IEVYRUNfRkxBR19TS0lQ X1RSSUdHRVJTOwogCQllbHNlCiAJCQllZmxhZ3MgPSAwOwkJCS8qIGRlZmF1bHQgcnVuLXRvLWNv bXBsZXRpb24gZmxhZ3MgKi8KLQkJaWYgKCFFeGVjdXRvclN0YXJ0KGVzLT5xZCwgZWZsYWdzKSkK LQkJCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0KCkgZmFpbGVkIHVuZXhwZWN0ZWRseSIpOwor CQlFeGVjdXRvclN0YXJ0KGVzLT5xZCwgZWZsYWdzKTsKIAl9CiAKIAllcy0+c3RhdHVzID0gRl9F WEVDX1JVTjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL3NwaS5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivc3BpLmMKaW5kZXggMzI4ODM5NmRlZjMuLmVjYjJlNGNjYWExIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9zcGkuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9zcGkuYwpAQCAtNzAsOCArNzAsNyBAQCBzdGF0aWMgaW50CV9TUElfZXhlY3V0ZV9wbGFu KFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0ZU9wdGlvbnMgKm9wdGlvbnMsCiBzdGF0 aWMgUGFyYW1MaXN0SW5mbyBfU1BJX2NvbnZlcnRfcGFyYW1zKGludCBuYXJncywgT2lkICphcmd0 eXBlcywKIAkJCQkJCQkJCQkgRGF0dW0gKlZhbHVlcywgY29uc3QgY2hhciAqTnVsbHMpOwogCi1z dGF0aWMgaW50CV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBib29sIGZpcmVfdHJp Z2dlcnMsIHVpbnQ2NCB0Y291bnQsCi0JCQkJCQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LCBpbnQgcXVlcnlfaW5kZXgpOworc3RhdGljIGludAlfU1BJX3BxdWVyeShRdWVyeURlc2MgKnF1 ZXJ5RGVzYywgYm9vbCBmaXJlX3RyaWdnZXJzLCB1aW50NjQgdGNvdW50KTsKIAogc3RhdGljIHZv aWQgX1NQSV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwogCkBAIC0xNjg2LDggKzE2ODUsNyBA QCBTUElfY3Vyc29yX29wZW5faW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgU1BJUGxhblB0ciBw bGFuLAogCQkJCQkgIHF1ZXJ5X3N0cmluZywKIAkJCQkJICBwbGFuc291cmNlLT5jb21tYW5kVGFn LAogCQkJCQkgIHN0bXRfbGlzdCwKLQkJCQkJICBjcGxhbiwKLQkJCQkJICBwbGFuc291cmNlKTsK KwkJCQkJICBjcGxhbik7CiAKIAkvKgogCSAqIFNldCB1cCBvcHRpb25zIGZvciBwb3J0YWwuICBE ZWZhdWx0IFNDUk9MTCB0eXBlIGlzIGNob3NlbiB0aGUgc2FtZSB3YXkKQEAgLTI1MDIsNyArMjUw MCw2IEBAIF9TUElfZXhlY3V0ZV9wbGFuKFNQSVBsYW5QdHIgcGxhbiwgY29uc3QgU1BJRXhlY3V0 ZU9wdGlvbnMgKm9wdGlvbnMsCiAJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UgPSAoQ2Fj aGVkUGxhblNvdXJjZSAqKSBsZmlyc3QobGMxKTsKIAkJTGlzdAkgICAqc3RtdF9saXN0OwogCQlM aXN0Q2VsbCAgICpsYzI7Ci0JCWludAkJCXF1ZXJ5X2luZGV4ID0gMDsKIAogCQlzcGljYWxsYmFj a2FyZy5xdWVyeSA9IHBsYW5zb3VyY2UtPnF1ZXJ5X3N0cmluZzsKIApAQCAtMjY5MywxNiArMjY5 MCwxNCBAQCBfU1BJX2V4ZWN1dGVfcGxhbihTUElQbGFuUHRyIHBsYW4sIGNvbnN0IFNQSUV4ZWN1 dGVPcHRpb25zICpvcHRpb25zLAogCQkJCQlzbmFwID0gSW52YWxpZFNuYXBzaG90OwogCiAJCQkJ cWRlc2MgPSBDcmVhdGVRdWVyeURlc2Moc3RtdCwKLQkJCQkJCQkJCQljcGxhbiwKIAkJCQkJCQkJ CQlwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcsCiAJCQkJCQkJCQkJc25hcCwgY3Jvc3NjaGVja19z bmFwc2hvdCwKIAkJCQkJCQkJCQlkZXN0LAogCQkJCQkJCQkJCW9wdGlvbnMtPnBhcmFtcywKIAkJ CQkJCQkJCQlfU1BJX2N1cnJlbnQtPnF1ZXJ5RW52LAogCQkJCQkJCQkJCTApOwotCi0JCQkJcmVz ID0gX1NQSV9wcXVlcnkocWRlc2MsIGZpcmVfdHJpZ2dlcnMsIGNhblNldFRhZyA/IG9wdGlvbnMt PnRjb3VudCA6IDAsCi0JCQkJCQkJCSAgcGxhbnNvdXJjZSwgcXVlcnlfaW5kZXgpOworCQkJCXJl cyA9IF9TUElfcHF1ZXJ5KHFkZXNjLCBmaXJlX3RyaWdnZXJzLAorCQkJCQkJCQkgIGNhblNldFRh ZyA/IG9wdGlvbnMtPnRjb3VudCA6IDApOwogCQkJCUZyZWVRdWVyeURlc2MocWRlc2MpOwogCQkJ fQogCQkJZWxzZQpAQCAtMjc5OSw4ICsyNzk0LDYgQEAgX1NQSV9leGVjdXRlX3BsYW4oU1BJUGxh blB0ciBwbGFuLCBjb25zdCBTUElFeGVjdXRlT3B0aW9ucyAqb3B0aW9ucywKIAkJCQlteV9yZXMg PSByZXM7CiAJCQkJZ290byBmYWlsOwogCQkJfQotCi0JCQlxdWVyeV9pbmRleCsrOwogCQl9CiAK IAkJLyogRG9uZSB3aXRoIHRoaXMgcGxhbiwgc28gcmVsZWFzZSByZWZjb3VudCAqLwpAQCAtMjg3 OCw4ICsyODcxLDcgQEAgX1NQSV9jb252ZXJ0X3BhcmFtcyhpbnQgbmFyZ3MsIE9pZCAqYXJndHlw ZXMsCiB9CiAKIHN0YXRpYyBpbnQKLV9TUElfcHF1ZXJ5KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBi b29sIGZpcmVfdHJpZ2dlcnMsIHVpbnQ2NCB0Y291bnQsCi0JCQlDYWNoZWRQbGFuU291cmNlICpw bGFuc291cmNlLCBpbnQgcXVlcnlfaW5kZXgpCitfU1BJX3BxdWVyeShRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgYm9vbCBmaXJlX3RyaWdnZXJzLCB1aW50NjQgdGNvdW50KQogewogCWludAkJCW9wZXJh dGlvbiA9IHF1ZXJ5RGVzYy0+b3BlcmF0aW9uOwogCWludAkJCWVmbGFnczsKQEAgLTI5MzUsMTYg KzI5MjcsNyBAQCBfU1BJX3BxdWVyeShRdWVyeURlc2MgKnF1ZXJ5RGVzYywgYm9vbCBmaXJlX3Ry aWdnZXJzLCB1aW50NjQgdGNvdW50LAogCWVsc2UKIAkJZWZsYWdzID0gRVhFQ19GTEFHX1NLSVBf VFJJR0dFUlM7CiAKLQlpZiAocXVlcnlEZXNjLT5jcGxhbikKLQl7Ci0JCUV4ZWN1dG9yU3RhcnRD YWNoZWRQbGFuKHF1ZXJ5RGVzYywgZWZsYWdzLCBwbGFuc291cmNlLCBxdWVyeV9pbmRleCk7Ci0J CUFzc2VydChxdWVyeURlc2MtPnBsYW5zdGF0ZSk7Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICghRXhl Y3V0b3JTdGFydChxdWVyeURlc2MsIGVmbGFncykpCi0JCQllbG9nKEVSUk9SLCAiRXhlY3V0b3JT dGFydCgpIGZhaWxlZCB1bmV4cGVjdGVkbHkiKTsKLQl9CisJRXhlY3V0b3JTdGFydChxdWVyeURl c2MsIGVmbGFncyk7CiAKIAlFeGVjdXRvclJ1bihxdWVyeURlc2MsIEZvcndhcmRTY2FuRGlyZWN0 aW9uLCB0Y291bnQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggNDlh ZDZlODM1NzguLmZmNjU4NjdlZWJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CkBAIC0zMzEsNyArMzMxLDYgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3MgPSBOSUw7CiAJZ2xvYi0+ZmluYWxyb3dtYXJrcyA9IE5JTDsKIAlnbG9iLT5yZXN1 bHRSZWxhdGlvbnMgPSBOSUw7Ci0JZ2xvYi0+Zmlyc3RSZXN1bHRSZWxzID0gTklMOwogCWdsb2It PmFwcGVuZFJlbGF0aW9ucyA9IE5JTDsKIAlnbG9iLT5wYXJ0UHJ1bmVJbmZvcyA9IE5JTDsKIAln bG9iLT5yZWxhdGlvbk9pZHMgPSBOSUw7CkBAIC01NzEsNyArNTcwLDYgQEAgc3RhbmRhcmRfcGxh bm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9w dGlvbnMsCiAJCQkJCQkJCQkJCSAgZ2xvYi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVy bUluZm9zID0gZ2xvYi0+ZmluYWxydGVwZXJtaW5mb3M7CiAJcmVzdWx0LT5yZXN1bHRSZWxhdGlv bnMgPSBnbG9iLT5yZXN1bHRSZWxhdGlvbnM7Ci0JcmVzdWx0LT5maXJzdFJlc3VsdFJlbHMgPSBn bG9iLT5maXJzdFJlc3VsdFJlbHM7CiAJcmVzdWx0LT5hcHBlbmRSZWxhdGlvbnMgPSBnbG9iLT5h cHBlbmRSZWxhdGlvbnM7CiAJcmVzdWx0LT5zdWJwbGFucyA9IGdsb2ItPnN1YnBsYW5zOwogCXJl c3VsdC0+cmV3aW5kUGxhbklEcyA9IGdsb2ItPnJld2luZFBsYW5JRHM7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggMTUwZTlmMDYwZWUuLjk5OWE1YThhYjVhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0xMjQ4LDkgKzEyNDgsNiBAQCBzZXRfcGxh bl9yZWZzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLCBpbnQgcnRvZmZzZXQpCiAJCQkJ CQlsYXBwZW5kX2ludChyb290LT5nbG9iLT5yZXN1bHRSZWxhdGlvbnMsCiAJCQkJCQkJCQlzcGxh bi0+cm9vdFJlbGF0aW9uKTsKIAkJCQl9Ci0JCQkJcm9vdC0+Z2xvYi0+Zmlyc3RSZXN1bHRSZWxz ID0KLQkJCQkJbGFwcGVuZF9pbnQocm9vdC0+Z2xvYi0+Zmlyc3RSZXN1bHRSZWxzLAotCQkJCQkJ CQlsaW5pdGlhbF9pbnQoc3BsYW4tPnJlc3VsdFJlbGF0aW9ucykpOwogCQkJfQogCQkJYnJlYWs7 CiAJCWNhc2UgVF9BcHBlbmQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggMWFlNTFiMWIzOTEuLjkyZGRl YmE3OGZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMjI2LDcgKzEyMjYsNiBAQCBleGVjX3NpbXBs ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCQkJCQkgIHF1ZXJ5X3N0cmluZywK IAkJCQkJCSAgY29tbWFuZFRhZywKIAkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKLQkJCQkJCSAgTlVM TCwKIAkJCQkJCSAgTlVMTCk7CiAKIAkJLyoKQEAgLTIwMjgsOCArMjAyNyw3IEBAIGV4ZWNfYmlu ZF9tZXNzYWdlKFN0cmluZ0luZm8gaW5wdXRfbWVzc2FnZSkKIAkJCQkJICBxdWVyeV9zdHJpbmcs CiAJCQkJCSAgcHNyYy0+Y29tbWFuZFRhZywKIAkJCQkJICBjcGxhbi0+c3RtdF9saXN0LAotCQkJ CQkgIGNwbGFuLAotCQkJCQkgIHBzcmMpOworCQkJCQkgIGNwbGFuKTsKIAogCS8qIFBvcnRhbCBp cyBkZWZpbmVkLCBzZXQgdGhlIHBsYW4gSUQgYmFzZWQgb24gaXRzIGNvbnRlbnRzLiAqLwogCWZv cmVhY2gobGMsIHBvcnRhbC0+c3RtdHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bx dWVyeS5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wcXVlcnkuYwppbmRleCA4MTY0ZDBmYmI0Zi4uZDE1 OTNmMzhiMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcHF1ZXJ5LmMKKysrIGIvc3Jj L2JhY2tlbmQvdGNvcC9wcXVlcnkuYwpAQCAtMTksNyArMTksNiBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCi0jaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY2Rlc2MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL3RzdG9yZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBA IC0zOCw5ICszNyw2IEBAIFBvcnRhbAkJQWN0aXZlUG9ydGFsID0gTlVMTDsKIAogCiBzdGF0aWMg dm9pZCBQcm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCi0JCQkJCQkgQ2FjaGVkUGxhbiAq Y3BsYW4sCi0JCQkJCQkgQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKLQkJCQkJCSBpbnQg cXVlcnlfaW5kZXgsCiAJCQkJCQkgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAkJCQkJCSBQYXJh bUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKQEAg LTcwLDcgKzY2LDYgQEAgc3RhdGljIHZvaWQgRG9Qb3J0YWxSZXdpbmQoUG9ydGFsIHBvcnRhbCk7 CiAgKi8KIFF1ZXJ5RGVzYyAqCiBDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5uZWRz dG10LAotCQkJCUNhY2hlZFBsYW4gKmNwbGFuLAogCQkJCWNvbnN0IGNoYXIgKnNvdXJjZVRleHQs CiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJCQkJU25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hv dCwKQEAgLTgzLDcgKzc4LDYgQEAgQ3JlYXRlUXVlcnlEZXNjKFBsYW5uZWRTdG10ICpwbGFubmVk c3RtdCwKIAogCXFkLT5vcGVyYXRpb24gPSBwbGFubmVkc3RtdC0+Y29tbWFuZFR5cGU7CS8qIG9w ZXJhdGlvbiAqLwogCXFkLT5wbGFubmVkc3RtdCA9IHBsYW5uZWRzdG10OwkvKiBwbGFuICovCi0J cWQtPmNwbGFuID0gY3BsYW47CQkJLyogQ2FjaGVkUGxhbiBzdXBwbHlpbmcgdGhlIHBsYW5uZWRz dG10ICovCiAJcWQtPnNvdXJjZVRleHQgPSBzb3VyY2VUZXh0OwkvKiBxdWVyeSB0ZXh0ICovCiAJ cWQtPnNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CS8qIHNuYXBzaG90ICov CiAJLyogUkkgY2hlY2sgc25hcHNob3QgKi8KQEAgLTEyOSw5ICsxMjMsNiBAQCBGcmVlUXVlcnlE ZXNjKFF1ZXJ5RGVzYyAqcWRlc2MpCiAgKgkJUE9SVEFMX09ORV9SRVRVUk5JTkcsIG9yIFBPUlRB TF9PTkVfTU9EX1dJVEggcG9ydGFsCiAgKgogICoJcGxhbjogdGhlIHBsYW4gdHJlZSBmb3IgdGhl IHF1ZXJ5Ci0gKgljcGxhbjogQ2FjaGVkUGxhbiBzdXBwbHlpbmcgdGhlIHBsYW4KLSAqCXBsYW5z b3VyY2U6IENhY2hlZFBsYW5Tb3VyY2Ugc3VwcGx5aW5nIHRoZSBjcGxhbgotICoJcXVlcnlfaW5k ZXg6IGluZGV4IG9mIHRoZSBxdWVyeSBpbiBwbGFuc291cmNlLT5xdWVyeV9saXN0CiAgKglzb3Vy Y2VUZXh0OiB0aGUgc291cmNlIHRleHQgb2YgdGhlIHF1ZXJ5CiAgKglwYXJhbXM6IGFueSBwYXJh bWV0ZXJzIG5lZWRlZAogICoJZGVzdDogd2hlcmUgdG8gc2VuZCByZXN1bHRzCkBAIC0xNDQsOSAr MTM1LDYgQEAgRnJlZVF1ZXJ5RGVzYyhRdWVyeURlc2MgKnFkZXNjKQogICovCiBzdGF0aWMgdm9p ZAogUHJvY2Vzc1F1ZXJ5KFBsYW5uZWRTdG10ICpwbGFuLAotCQkJIENhY2hlZFBsYW4gKmNwbGFu LAotCQkJIENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCi0JCQkgaW50IHF1ZXJ5X2luZGV4 LAogCQkJIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMs CiAJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCkBAIC0xNTgsMjMgKzE0NiwxNCBAQCBQ cm9jZXNzUXVlcnkoUGxhbm5lZFN0bXQgKnBsYW4sCiAJLyoKIAkgKiBDcmVhdGUgdGhlIFF1ZXJ5 RGVzYyBvYmplY3QKIAkgKi8KLQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MocGxhbiwgY3Bs YW4sIHNvdXJjZVRleHQsCisJcXVlcnlEZXNjID0gQ3JlYXRlUXVlcnlEZXNjKHBsYW4sIHNvdXJj ZVRleHQsCiAJCQkJCQkJCUdldEFjdGl2ZVNuYXBzaG90KCksIEludmFsaWRTbmFwc2hvdCwKIAkJ CQkJCQkJZGVzdCwgcGFyYW1zLCBxdWVyeUVudiwgMCk7CiAKIAkvKgotCSAqIFByZXBhcmUgdGhl IHBsYW4gZm9yIGV4ZWN1dGlvbgorCSAqIENhbGwgRXhlY3V0b3JTdGFydCB0byBwcmVwYXJlIHRo ZSBwbGFuIGZvciBleGVjdXRpb24KIAkgKi8KLQlpZiAocXVlcnlEZXNjLT5jcGxhbikKLQl7Ci0J CUV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKHF1ZXJ5RGVzYywgMCwgcGxhbnNvdXJjZSwgcXVlcnlf aW5kZXgpOwotCQlBc3NlcnQocXVlcnlEZXNjLT5wbGFuc3RhdGUpOwotCX0KLQllbHNlCi0Jewot CQlpZiAoIUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCAwKSkKLQkJCWVsb2coRVJST1IsICJFeGVj dXRvclN0YXJ0KCkgZmFpbGVkIHVuZXhwZWN0ZWRseSIpOwotCX0KKwlFeGVjdXRvclN0YXJ0KHF1 ZXJ5RGVzYywgMCk7CiAKIAkvKgogCSAqIFJ1biB0aGUgcGxhbiB0byBjb21wbGV0aW9uLgpAQCAt NTE1LDcgKzQ5NCw2IEBAIFBvcnRhbFN0YXJ0KFBvcnRhbCBwb3J0YWwsIFBhcmFtTGlzdEluZm8g cGFyYW1zLAogCQkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBEZXN0Tm9uZS4KIAkJCQkgKi8KIAkJ CQlxdWVyeURlc2MgPSBDcmVhdGVRdWVyeURlc2MobGluaXRpYWxfbm9kZShQbGFubmVkU3RtdCwg cG9ydGFsLT5zdG10cyksCi0JCQkJCQkJCQkJCXBvcnRhbC0+Y3BsYW4sCiAJCQkJCQkJCQkJCXBv cnRhbC0+c291cmNlVGV4dCwKIAkJCQkJCQkJCQkJR2V0QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJ CQkJCQkJSW52YWxpZFNuYXBzaG90LApAQCAtNTM1LDE5ICs1MTMsOSBAQCBQb3J0YWxTdGFydChQ b3J0YWwgcG9ydGFsLCBQYXJhbUxpc3RJbmZvIHBhcmFtcywKIAkJCQkJbXllZmxhZ3MgPSBlZmxh Z3M7CiAKIAkJCQkvKgotCQkJCSAqIFByZXBhcmUgdGhlIHBsYW4gZm9yIGV4ZWN1dGlvbi4KKwkJ CQkgKiBDYWxsIEV4ZWN1dG9yU3RhcnQgdG8gcHJlcGFyZSB0aGUgcGxhbiBmb3IgZXhlY3V0aW9u CiAJCQkJICovCi0JCQkJaWYgKHBvcnRhbC0+Y3BsYW4pCi0JCQkJewotCQkJCQlFeGVjdXRvclN0 YXJ0Q2FjaGVkUGxhbihxdWVyeURlc2MsIG15ZWZsYWdzLAotCQkJCQkJCQkJCQlwb3J0YWwtPnBs YW5zb3VyY2UsIDApOwotCQkJCQlBc3NlcnQocXVlcnlEZXNjLT5wbGFuc3RhdGUpOwotCQkJCX0K LQkJCQllbHNlCi0JCQkJewotCQkJCQlpZiAoIUV4ZWN1dG9yU3RhcnQocXVlcnlEZXNjLCBteWVm bGFncykpCi0JCQkJCQllbG9nKEVSUk9SLCAiRXhlY3V0b3JTdGFydCgpIGZhaWxlZCB1bmV4cGVj dGVkbHkiKTsKLQkJCQl9CisJCQkJRXhlY3V0b3JTdGFydChxdWVyeURlc2MsIG15ZWZsYWdzKTsK IAogCQkJCS8qCiAJCQkJICogVGhpcyB0ZWxscyBQb3J0YWxDbGVhbnVwIHRvIHNodXQgZG93biB0 aGUgZXhlY3V0b3IKQEAgLTEyMjEsNyArMTE4OSw2IEBAIFBvcnRhbFJ1bk11bHRpKFBvcnRhbCBw b3J0YWwsCiB7CiAJYm9vbAkJYWN0aXZlX3NuYXBzaG90X3NldCA9IGZhbHNlOwogCUxpc3RDZWxs ICAgKnN0bXRsaXN0X2l0ZW07Ci0JaW50CQkJcXVlcnlfaW5kZXggPSAwOwogCiAJLyoKIAkgKiBJ ZiB0aGUgZGVzdGluYXRpb24gaXMgRGVzdFJlbW90ZUV4ZWN1dGUsIGNoYW5nZSB0byBEZXN0Tm9u ZS4gIFRoZQpAQCAtMTMwMyw5ICsxMjcwLDYgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRh bCwKIAkJCXsKIAkJCQkvKiBzdGF0ZW1lbnQgY2FuIHNldCB0YWcgc3RyaW5nICovCiAJCQkJUHJv Y2Vzc1F1ZXJ5KHBzdG10LAotCQkJCQkJCSBwb3J0YWwtPmNwbGFuLAotCQkJCQkJCSBwb3J0YWwt PnBsYW5zb3VyY2UsCi0JCQkJCQkJIHF1ZXJ5X2luZGV4LAogCQkJCQkJCSBwb3J0YWwtPnNvdXJj ZVRleHQsCiAJCQkJCQkJIHBvcnRhbC0+cG9ydGFsUGFyYW1zLAogCQkJCQkJCSBwb3J0YWwtPnF1 ZXJ5RW52LApAQCAtMTMxNSw5ICsxMjc5LDYgQEAgUG9ydGFsUnVuTXVsdGkoUG9ydGFsIHBvcnRh bCwKIAkJCXsKIAkJCQkvKiBzdG10IGFkZGVkIGJ5IHJld3JpdGUgY2Fubm90IHNldCB0YWcgKi8K IAkJCQlQcm9jZXNzUXVlcnkocHN0bXQsCi0JCQkJCQkJIHBvcnRhbC0+Y3BsYW4sCi0JCQkJCQkJ IHBvcnRhbC0+cGxhbnNvdXJjZSwKLQkJCQkJCQkgcXVlcnlfaW5kZXgsCiAJCQkJCQkJIHBvcnRh bC0+c291cmNlVGV4dCwKIAkJCQkJCQkgcG9ydGFsLT5wb3J0YWxQYXJhbXMsCiAJCQkJCQkJIHBv cnRhbC0+cXVlcnlFbnYsCkBAIC0xMzgyLDggKzEzNDMsNiBAQCBQb3J0YWxSdW5NdWx0aShQb3J0 YWwgcG9ydGFsLAogCQkgKi8KIAkJaWYgKGxuZXh0KHBvcnRhbC0+c3RtdHMsIHN0bXRsaXN0X2l0 ZW0pICE9IE5VTEwpCiAJCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwotCi0JCXF1ZXJ5X2lu ZGV4Kys7CiAJfQogCiAJLyogUG9wIHRoZSBzbmFwc2hvdCBpZiB3ZSBwdXNoZWQgb25lLiAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwppbmRleCA5YmNiYzRjM2U5Ny4uODlhMWM3OWU5 ODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3BsYW5jYWNoZS5jCkBAIC05Miw4ICs5Miw3IEBAIHN0 YXRpYyB2b2lkIFJlbGVhc2VHZW5lcmljUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl KTsKIHN0YXRpYyBib29sIFN0bXRQbGFuUmVxdWlyZXNSZXZhbGlkYXRpb24oQ2FjaGVkUGxhblNv dXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMgYm9vbCBCdWlsZGluZ1BsYW5SZXF1aXJlc1NuYXBz aG90KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpOwogc3RhdGljIExpc3QgKlJldmFsaWRh dGVDYWNoZWRRdWVyeShDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAotCQkJCQkJCQkgICBR dWVyeUVudmlyb25tZW50ICpxdWVyeUVudiwKLQkJCQkJCQkJICAgYm9vbCByZWxlYXNlX2dlbmVy aWMpOworCQkJCQkJCQkgICBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiBzdGF0aWMgYm9v bCBDaGVja0NhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CiBzdGF0aWMg Q2FjaGVkUGxhbiAqQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2Us IExpc3QgKnFsaXN0LAogCQkJCQkJCQkgICBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zLCBRdWVy eUVudmlyb25tZW50ICpxdWVyeUVudik7CkBAIC02NjMsMTcgKzY2MiwxMCBAQCBCdWlsZGluZ1Bs YW5SZXF1aXJlc1NuYXBzaG90KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCiAgKiBUaGUg cmVzdWx0IHZhbHVlIGlzIHRoZSB0cmFuc2llbnQgYW5hbHl6ZWQtYW5kLXJld3JpdHRlbiBxdWVy eSB0cmVlIGlmIHdlCiAgKiBoYWQgdG8gZG8gcmUtYW5hbHlzaXMsIGFuZCBOSUwgb3RoZXJ3aXNl LiAgKFRoaXMgaXMgcmV0dXJuZWQganVzdCB0byBzYXZlCiAgKiBhIHRyZWUgY29weWluZyBzdGVw IGluIGEgc3Vic2VxdWVudCBCdWlsZENhY2hlZFBsYW4gY2FsbC4pCi0gKgotICogVGhpcyBhbHNv IHJlbGVhc2VzIGFuZCBkcm9wcyB0aGUgZ2VuZXJpYyBwbGFuIChwbGFuc291cmNlLT5ncGxhbiks IGlmIGFueSwKLSAqIGFzIG1vc3QgY2FsbGVycyB3aWxsIHR5cGljYWxseSBidWlsZCBhIG5ldyBD YWNoZWRQbGFuIGZvciB0aGUgcGxhbnNvdXJjZQotICogcmlnaHQgYWZ0ZXIgdGhpcy4gSG93ZXZl ciwgd2hlbiBjYWxsZWQgZnJvbSBVcGRhdGVDYWNoZWRQbGFuKCksIHRoZQotICogZnVuY3Rpb24g ZG9lcyBub3QgcmVsZWFzZSB0aGUgZ2VuZXJpYyBwbGFuLCBhcyBVcGRhdGVDYWNoZWRQbGFuKCkg dXBkYXRlcwotICogYW4gZXhpc3RpbmcgQ2FjaGVkUGxhbiBpbiBwbGFjZS4KICAqLwogc3RhdGlj IExpc3QgKgogUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsCi0JCQkJCSAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYsCi0JCQkJCSAgYm9vbCByZWxl YXNlX2dlbmVyaWMpCisJCQkJCSAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpCiB7CiAJYm9v bAkJc25hcHNob3Rfc2V0OwogCUxpc3QJICAgKnRsaXN0OwkJCS8qIHRyYW5zaWVudCBxdWVyeS10 cmVlIGxpc3QgKi8KQEAgLTc3Miw5ICs3NjQsOCBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShxY3h0KTsK IAl9CiAKLQkvKiBEcm9wIHRoZSBnZW5lcmljIHBsYW4gcmVmZXJlbmNlLCBpZiBhbnksIGFuZCBp ZiByZXF1ZXN0ZWQgKi8KLQlpZiAocmVsZWFzZV9nZW5lcmljKQotCQlSZWxlYXNlR2VuZXJpY1Bs YW4ocGxhbnNvdXJjZSk7CisJLyogRHJvcCB0aGUgZ2VuZXJpYyBwbGFuIHJlZmVyZW5jZSBpZiBh bnkgKi8KKwlSZWxlYXNlR2VuZXJpY1BsYW4ocGxhbnNvdXJjZSk7CiAKIAkvKgogCSAqIE5vdyBy ZS1kbyBwYXJzZSBhbmFseXNpcyBhbmQgcmV3cml0ZS4gIFRoaXMgbm90IGluY2lkZW50YWxseSBh Y3F1aXJlcwpAQCAtOTM3LDEwICs5MjgsOCBAQCBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkoQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKICAqIENhbGxlciBtdXN0IGhhdmUgYWxyZWFkeSBjYWxs ZWQgUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5IHRvIHZlcmlmeSB0aGF0IHRoZQogICogcXVlcnl0cmVl IGlzIHVwIHRvIGRhdGUuCiAgKgotICogT24gYSAidHJ1ZSIgcmV0dXJuLCB3ZSBoYXZlIGFjcXVp cmVkIGxvY2tzIG9uIHRoZSAidW5wcnVuYWJsZVJlbGlkcyIgc2V0Ci0gKiBmb3IgYWxsIHBsYW5z IGluIHBsYW5zb3VyY2UtPnN0bXRfbGlzdC4gSG93ZXZlciwgdGhlIHBsYW5zIGFyZSBub3QgZnVs bHkKLSAqIHJhY2UtY29uZGl0aW9uLWZyZWUgdW50aWwgdGhlIGV4ZWN1dG9yIGFjcXVpcmVzIGxv Y2tzIG9uIHRoZSBwcnVuYWJsZQotICogcmVsYXRpb25zIHRoYXQgc3Vydml2ZSBpbml0aWFsIHJ1 bnRpbWUgcHJ1bmluZyBkdXJpbmcgSW5pdFBsYW4oKS4KKyAqIE9uIGEgInRydWUiIHJldHVybiwg d2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9ja3MgbmVlZGVkIHRvIHJ1biB0aGUgcGxhbi4KKyAqIChX ZSBtdXN0IGRvIHRoaXMgZm9yIHRoZSAidHJ1ZSIgcmVzdWx0IHRvIGJlIHJhY2UtY29uZGl0aW9u LWZyZWUuKQogICovCiBzdGF0aWMgYm9vbAogQ2hlY2tDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3Vy Y2UgKnBsYW5zb3VyY2UpCkBAIC0xMDI1LDggKzEwMTQsNiBAQCBDaGVja0NhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSkKICAqIFBsYW5uaW5nIHdvcmsgaXMgZG9uZSBpbiB0 aGUgY2FsbGVyJ3MgbWVtb3J5IGNvbnRleHQuICBUaGUgZmluaXNoZWQgcGxhbgogICogaXMgaW4g YSBjaGlsZCBtZW1vcnkgY29udGV4dCwgd2hpY2ggdHlwaWNhbGx5IHNob3VsZCBnZXQgcmVwYXJl bnRlZAogICogKHVubGVzcyB0aGlzIGlzIGEgb25lLXNob3QgcGxhbiwgaW4gd2hpY2ggY2FzZSB3 ZSBkb24ndCBjb3B5IHRoZSBwbGFuKS4KLSAqCi0gKiBOb3RlOiBXaGVuIGNoYW5naW5nIHRoaXMs IHlvdSBzaG91bGQgYWxzbyBsb29rIGF0IFVwZGF0ZUNhY2hlZFBsYW4oKS4KICAqLwogc3RhdGlj IENhY2hlZFBsYW4gKgogQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3Vy Y2UsIExpc3QgKnFsaXN0LApAQCAtMTAzNyw3ICsxMDI0LDYgQEAgQnVpbGRDYWNoZWRQbGFuKENh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCWJvb2wJCXNuYXBzaG90 X3NldDsKIAlib29sCQlpc190cmFuc2llbnQ7CiAJTWVtb3J5Q29udGV4dCBwbGFuX2NvbnRleHQ7 Ci0JTWVtb3J5Q29udGV4dCBzdG10X2NvbnRleHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xk Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CiAJTGlzdENlbGwgICAqbGM7CiAKQEAgLTEwNTUs NyArMTA0MSw3IEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNl LCBMaXN0ICpxbGlzdCwKIAkgKiBsZXQncyB0cmVhdCBpdCBhcyByZWFsIGFuZCByZWRvIHRoZSBS ZXZhbGlkYXRlQ2FjaGVkUXVlcnkgY2FsbC4KIAkgKi8KIAlpZiAoIXBsYW5zb3VyY2UtPmlzX3Zh bGlkKQotCQlxbGlzdCA9IFJldmFsaWRhdGVDYWNoZWRRdWVyeShwbGFuc291cmNlLCBxdWVyeUVu diwgdHJ1ZSk7CisJCXFsaXN0ID0gUmV2YWxpZGF0ZUNhY2hlZFF1ZXJ5KHBsYW5zb3VyY2UsIHF1 ZXJ5RW52KTsKIAogCS8qCiAJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgY29weSBvZiB0 aGUgcXVlcnl0cmVlIGxpc3QgdGhhdCBjYW4gYmUKQEAgLTEwOTMsMTkgKzEwNzksMTAgQEAgQnVp bGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAog CQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCiAJLyoKLQkgKiBOb3JtYWxseSwgd2UgY3JlYXRlIGEg ZGVkaWNhdGVkIG1lbW9yeSBjb250ZXh0IGZvciB0aGUgQ2FjaGVkUGxhbiBhbmQKLQkgKiBpdHMg c3Vic2lkaWFyeSBkYXRhLiBBbHRob3VnaCBpdCdzIHVzdWFsbHkgbm90IHZlcnkgbGFyZ2UsIHRo ZSBjb250ZXh0Ci0JICogaXMgZGVzaWduZWQgdG8gYWxsb3cgZ3Jvd3RoIGlmIG5lY2Vzc2FyeS4K LQkgKgotCSAqIFRoZSBQbGFubmVkU3RtdHMgYXJlIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGNoaWxk IGNvbnRleHQgKHN0bXRfY29udGV4dCkKLQkgKiBvZiB0aGUgQ2FjaGVkUGxhbidzIG1lbW9yeSBj b250ZXh0LiBUaGlzIHNlcGFyYXRpb24gYWxsb3dzCi0JICogVXBkYXRlQ2FjaGVkUGxhbigpIHRv IGZyZWUgYW5kIHJlcGxhY2UgdGhlIFBsYW5uZWRTdG10cyB3aXRob3V0Ci0JICogYWZmZWN0aW5n IHRoZSBDYWNoZWRQbGFuIHN0cnVjdHVyZSBvciBpdHMgc3RtdF9saXN0IExpc3QuCi0JICoKLQkg KiBGb3Igb25lLXNob3QgcGxhbnMsIHdlIGluc3RlYWQgdXNlIHRoZSBjYWxsZXIncyBtZW1vcnkg Y29udGV4dCwgYXMgdGhlCi0JICogQ2FjaGVkUGxhbiB3aWxsIG5vdCBwZXJzaXN0LiAgc3RtdF9j b250ZXh0IHdpbGwgYmUgc2V0IHRvIE5VTEwgaW4gdGhpcwotCSAqIGNhc2UsIGJlY2F1c2UgVXBk YXRlQ2FjaGVkUGxhbigpIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkIG9uIGEgb25lLXNob3QKLQkg KiBwbGFuLgorCSAqIE5vcm1hbGx5IHdlIG1ha2UgYSBkZWRpY2F0ZWQgbWVtb3J5IGNvbnRleHQg Zm9yIHRoZSBDYWNoZWRQbGFuIGFuZCBpdHMKKwkgKiBzdWJzaWRpYXJ5IGRhdGEuICAoSXQncyBw cm9iYWJseSBub3QgZ29pbmcgdG8gYmUgbGFyZ2UsIGJ1dCBqdXN0IGluCisJICogY2FzZSwgYWxs b3cgaXQgdG8gZ3JvdyBsYXJnZS4gIEl0J3MgdHJhbnNpZW50IGZvciB0aGUgbW9tZW50LikgIEJ1 dCBmb3IKKwkgKiBhIG9uZS1zaG90IHBsYW4sIHdlIGp1c3QgbGVhdmUgaXQgaW4gdGhlIGNhbGxl cidzIG1lbW9yeSBjb250ZXh0LgogCSAqLwogCWlmICghcGxhbnNvdXJjZS0+aXNfb25lc2hvdCkK IAl7CkBAIC0xMTE0LDE3ICsxMDkxLDEyIEBAIEJ1aWxkQ2FjaGVkUGxhbihDYWNoZWRQbGFuU291 cmNlICpwbGFuc291cmNlLCBMaXN0ICpxbGlzdCwKIAkJCQkJCQkJCQkJIEFMTE9DU0VUX1NUQVJU X1NNQUxMX1NJWkVTKTsKIAkJTWVtb3J5Q29udGV4dENvcHlBbmRTZXRJZGVudGlmaWVyKHBsYW5f Y29udGV4dCwgcGxhbnNvdXJjZS0+cXVlcnlfc3RyaW5nKTsKIAotCQlzdG10X2NvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCQkJCSAi Q2FjaGVkUGxhbiBQbGFubmVkU3RtdHMiLAotCQkJCQkJCQkJCQkgQUxMT0NTRVRfU1RBUlRfU01B TExfU0laRVMpOwotCQlNZW1vcnlDb250ZXh0Q29weUFuZFNldElkZW50aWZpZXIoc3RtdF9jb250 ZXh0LCBwbGFuc291cmNlLT5xdWVyeV9zdHJpbmcpOwotCQlNZW1vcnlDb250ZXh0U2V0UGFyZW50 KHN0bXRfY29udGV4dCwgcGxhbl9jb250ZXh0KTsKKwkJLyoKKwkJICogQ29weSBwbGFuIGludG8g dGhlIG5ldyBjb250ZXh0LgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBsYW5fY29u dGV4dCk7CiAKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0bXRfY29udGV4dCk7CiAJCXBsaXN0 ID0gY29weU9iamVjdChwbGlzdCk7Ci0KLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBsYW5fY29u dGV4dCk7Ci0JCXBsaXN0ID0gbGlzdF9jb3B5KHBsaXN0KTsKIAl9CiAJZWxzZQogCQlwbGFuX2Nv bnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKQEAgLTExNjUsMTAgKzExMzcsOCBAQCBCdWls ZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgTGlzdCAqcWxpc3QsCiAJ CXBsYW4tPnNhdmVkX3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlwbGFuLT5yZWZjb3Vu dCA9IDA7CiAJcGxhbi0+Y29udGV4dCA9IHBsYW5fY29udGV4dDsKLQlwbGFuLT5zdG10X2NvbnRl eHQgPSBzdG10X2NvbnRleHQ7CiAJcGxhbi0+aXNfb25lc2hvdCA9IHBsYW5zb3VyY2UtPmlzX29u ZXNob3Q7CiAJcGxhbi0+aXNfc2F2ZWQgPSBmYWxzZTsKLQlwbGFuLT5pc19yZXVzZWQgPSBmYWxz ZTsKIAlwbGFuLT5pc192YWxpZCA9IHRydWU7CiAKIAkvKiBhc3NpZ24gZ2VuZXJhdGlvbiBudW1i ZXIgdG8gbmV3IHBsYW4gKi8KQEAgLTExNzksMTEzICsxMTQ5LDYgQEAgQnVpbGRDYWNoZWRQbGFu KENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCXJldHVybiBwbGFu OwogfQogCi0vKgotICogVXBkYXRlQ2FjaGVkUGxhbgotICoJCUNyZWF0ZSBmcmVzaCBwbGFucyBm b3IgYWxsIHF1ZXJpZXMgaW4gdGhlIENhY2hlZFBsYW5Tb3VyY2UsIHJlcGxhY2luZwotICoJCXRo b3NlIGluIHRoZSBnZW5lcmljIHBsYW4ncyBzdG10X2xpc3QsIGFuZCByZXR1cm4gdGhlIHBsYW4g Zm9yIHRoZQotICoJCXF1ZXJ5X2luZGV4J3RoIHF1ZXJ5LgotICoKLSAqIFRoaXMgZnVuY3Rpb24g aXMgcHJpbWFyaWx5IHVzZWQgYnkgRXhlY3V0b3JTdGFydENhY2hlZFBsYW4oKSB0byBoYW5kbGUK LSAqIGNhc2VzIHdoZXJlIHRoZSBvcmlnaW5hbCBnZW5lcmljIENhY2hlZFBsYW4gYmVjb21lcyBp bnZhbGlkLiBTdWNoCi0gKiBpbnZhbGlkYXRpb24gbWF5IG9jY3VyIHdoZW4gcHJ1bmFibGUgcmVs YXRpb25zIGluIHRoZSBvbGQgcGxhbiBmb3IgdGhlCi0gKiBxdWVyeV9pbmRleCd0aCBxdWVyeSBh cmUgbG9ja2VkIGluIHByZXBhcmF0aW9uIGZvciBleGVjdXRpb24uCi0gKgotICogTm90ZSB0aGF0 IGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5 X2luZGV4J3RoCi0gKiBxdWVyeSBjYW4gYWZmZWN0IGJvdGggdGhlIHF1ZXJpZXMgdGhhdCBoYXZl IGFscmVhZHkgZmluaXNoZWQgZXhlY3V0aW9uCi0gKiAoZS5nLiwgZHVlIHRvIGNvbmN1cnJlbnQg bW9kaWZpY2F0aW9ucyBvbiBwcnVuYWJsZSByZWxhdGlvbnMgdGhhdCB3ZXJlIG5vdAotICogbG9j a2VkIGR1cmluZyB0aGVpciBleGVjdXRpb24pIGFuZCBhbHNvIHRoZSBxdWVyaWVzIHRoYXQgaGF2 ZSBub3QgeWV0IGJlZW4KLSAqIGV4ZWN1dGVkLiAgQXMgYSByZXN1bHQsIHRoaXMgZnVuY3Rpb24g dXBkYXRlcyBhbGwgcGxhbnMgdG8gZW5zdXJlCi0gKiBDYWNoZWRQbGFuLmlzX3ZhbGlkIGlzIHNh ZmVseSBzZXQgdG8gdHJ1ZS4KLSAqCi0gKiBUaGUgb2xkIFBsYW5uZWRTdG10cyBpbiBwbGFuc291 cmNlLT5ncGxhbi0+c3RtdF9saXN0IGFyZSBmcmVlZCBoZXJlLCBzbwotICogdGhlIGNhbGxlciBh bmQgYW55IG9mIGl0cyBjYWxsZXJzIG11c3Qgbm90IHJlbHkgb24gdGhlbSByZW1haW5pbmcgYWNj ZXNzaWJsZQotICogYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gKi8KLVBsYW5uZWRT dG10ICoKLVVwZGF0ZUNhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgaW50 IHF1ZXJ5X2luZGV4LAotCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKLXsKLQlMaXN0 CSAgICpxdWVyeV9saXN0ID0gcGxhbnNvdXJjZS0+cXVlcnlfbGlzdCwKLQkJCSAgICpwbGFuX2xp c3Q7Ci0JTGlzdENlbGwgICAqbDEsCi0JCQkgICAqbDI7Ci0JQ2FjaGVkUGxhbiAqcGxhbiA9IHBs YW5zb3VyY2UtPmdwbGFuOwotCU1lbW9yeUNvbnRleHQgb2xkY3h0OwotCi0JQXNzZXJ0KEFjdGl2 ZVNuYXBzaG90U2V0KCkpOwotCi0JLyogU2FuaXR5IGNoZWNrcyAoWFhYIGNhbiBiZSBBc3NlcnRz PykgKi8KLQlpZiAocGxhbiA9PSBOVUxMKQotCQllbG9nKEVSUk9SLCAiVXBkYXRlQ2FjaGVkUGxh bigpIGNhbGxlZCBpbiB0aGUgd3JvbmcgY29udGV4dDogcGxhbnNvdXJjZS0+Z3BsYW4gaXMgTlVM TCIpOwotCWVsc2UgaWYgKHBsYW4tPmlzX3ZhbGlkKQotCQllbG9nKEVSUk9SLCAiVXBkYXRlQ2Fj aGVkUGxhbigpIGNhbGxlZCBpbiB0aGUgd3JvbmcgY29udGV4dDogcGxhbnNvdXJjZS0+Z3BsYW4t PmlzX3ZhbGlkIGlzIHRydWUiKTsKLQllbHNlIGlmIChwbGFuLT5pc19vbmVzaG90KQotCQllbG9n KEVSUk9SLCAiVXBkYXRlQ2FjaGVkUGxhbigpIGNhbGxlZCBpbiB0aGUgd3JvbmcgY29udGV4dDog cGxhbnNvdXJjZS0+Z3BsYW4tPmlzX29uZXNob3QgaXMgdHJ1ZSIpOwotCi0JLyoKLQkgKiBUaGUg cGxhbnNvdXJjZSBtaWdodCBoYXZlIGJlY29tZSBpbnZhbGlkIHNpbmNlIEdldENhY2hlZFBsYW4o KSByZXR1cm5lZAotCSAqIHRoZSBDYWNoZWRQbGFuLiBTZWUgdGhlIGNvbW1lbnQgaW4gQnVpbGRD YWNoZWRQbGFuKCkgZm9yIGRldGFpbHMgb24gd2h5Ci0JICogdGhpcyBtaWdodCBoYXBwZW4uICBB bHRob3VnaCBpbnZhbGlkYXRpb24gaXMgbGlrZWx5IGEgZmFsc2UgcG9zaXRpdmUgYXMKLQkgKiBz dGF0ZWQgdGhlcmUsIHdlIG1ha2UgdGhlIHBsYW4gdmFsaWQgdG8gZW5zdXJlIHRoZSBxdWVyeSBs aXN0IHVzZWQgZm9yCi0JICogcGxhbm5pbmcgaXMgdXAgdG8gZGF0ZS4KLQkgKgotCSAqIFRoZSBy aXNrIG9mIGNhdGNoaW5nIGFuIGludmFsaWRhdGlvbiBpcyBoaWdoZXIgaGVyZSB0aGFuIHdoZW4K LQkgKiBCdWlsZENhY2hlZFBsYW4oKSBpcyBjYWxsZWQgZnJvbSBHZXRDYWNoZWRQbGFuKCksIGJl Y2F1c2UgdGhpcyBmdW5jdGlvbgotCSAqIGlzIG5vcm1hbGx5IGNhbGxlZCBsb25nIGFmdGVyIEdl dENhY2hlZFBsYW4oKSByZXR1cm5zIHRoZSBDYWNoZWRQbGFuLAotCSAqIHNvIG11Y2ggbW9yZSBw cm9jZXNzaW5nIGNvdWxkIGhhdmUgb2NjdXJyZWQgaW5jbHVkaW5nIHRoaW5ncyB0aGF0IG1hcmsK LQkgKiB0aGUgQ2FjaGVkUGxhblNvdXJjZSBpbnZhbGlkLgotCSAqCi0JICogTm90ZTogRG8gbm90 IHJlbGVhc2UgcGxhbnNvdXJjZS0+Z3BsYW4sIGJlY2F1c2UgdGhlIHVwc3RyZWFtIGNhbGxlcnMK LQkgKiAoc3VjaCBhcyB0aGUgY2FsbGVycyBvZiBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbigpKSB3 b3VsZCBzdGlsbCBiZQotCSAqIHJlZmVyZW5jaW5nIGl0LgotCSAqLwotCWlmICghcGxhbnNvdXJj ZS0+aXNfdmFsaWQpCi0JCXF1ZXJ5X2xpc3QgPSBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkocGxhbnNv dXJjZSwgcXVlcnlFbnYsIGZhbHNlKTsKLQlBc3NlcnQocXVlcnlfbGlzdCAhPSBOSUwpOwotCi0J LyoKLQkgKiBCdWlsZCBhIG5ldyBnZW5lcmljIHBsYW4gZm9yIGFsbCB0aGUgcXVlcmllcyBhZnRl ciBtYWtpbmcgYSBjb3B5IHRvIGJlCi0JICogc2NyaWJibGVkIG9uIGJ5IHRoZSBwbGFubmVyLgot CSAqLwotCXF1ZXJ5X2xpc3QgPSBjb3B5T2JqZWN0KHF1ZXJ5X2xpc3QpOwotCi0JLyoKLQkgKiBQ bGFubmluZyB3b3JrIGlzIGRvbmUgaW4gdGhlIGNhbGxlcidzIG1lbW9yeSBjb250ZXh0LiAgVGhl IHJlc3VsdGluZwotCSAqIFBsYW5uZWRTdG10IGlzIHRoZW4gY29waWVkIGludG8gcGxhbi0+c3Rt dF9jb250ZXh0IGFmdGVyIHRocm93aW5nIGF3YXkKLQkgKiB0aGUgb2xkIG9uZXMuCi0JICovCi0J cGxhbl9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5X2xpc3QsIHBsYW5zb3VyY2UtPnF1ZXJ5 X3N0cmluZywKLQkJCQkJCQkJcGxhbnNvdXJjZS0+Y3Vyc29yX29wdGlvbnMsIE5VTEwpOwotCUFz c2VydChsaXN0X2xlbmd0aChwbGFuX2xpc3QpID09IGxpc3RfbGVuZ3RoKHBsYW4tPnN0bXRfbGlz dCkpOwotCi0JTWVtb3J5Q29udGV4dFJlc2V0KHBsYW4tPnN0bXRfY29udGV4dCk7Ci0Jb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBsYW4tPnN0bXRfY29udGV4dCk7Ci0JZm9yYm90aChs MSwgcGxhbl9saXN0LCBsMiwgcGxhbi0+c3RtdF9saXN0KQotCXsKLQkJUGxhbm5lZFN0bXQgKnBs YW5uZWRzdG10ID0gbGZpcnN0KGwxKTsKLQotCQlsZmlyc3QobDIpID0gY29weU9iamVjdChwbGFu bmVkc3RtdCk7Ci0JfQotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwotCi0JLyoKLQkg KiBYWFggU2hvdWxkIHRoaXMgYWxzbyAocmUpc2V0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBDYWNo ZWRQbGFuIHRoYXQgYXJlCi0JICogc2V0IGluIEJ1aWxkQ2FjaGVkUGxhbigpIGFmdGVyIGNyZWF0 aW5nIHRoZSBmcmVzaCBwbGFucyBzdWNoIGFzCi0JICogcGxhblJvbGVJZCwgZGVwZW5kc09uUm9s ZSwgYW5kIHNhdmVkX3htaW4/Ci0JICovCi0KLQkvKgotCSAqIFdlJ3ZlIHVwZGF0ZWQgYWxsIHRo ZSBwbGFucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCwgc28gbWFyawotCSAqIHRo ZSBDYWNoZWRQbGFuIGFzIHZhbGlkLgotCSAqLwotCXBsYW4tPmlzX3ZhbGlkID0gdHJ1ZTsKLQot CS8qIEFsc28gdXBkYXRlIGdlbmVyaWNfY29zdCBiZWNhdXNlIHdlIGp1c3QgY3JlYXRlZCBhIG5l dyBnZW5lcmljIHBsYW4uICovCi0JcGxhbnNvdXJjZS0+Z2VuZXJpY19jb3N0ID0gY2FjaGVkX3Bs YW5fY29zdChwbGFuLCBmYWxzZSk7Ci0KLQlyZXR1cm4gbGlzdF9udGhfbm9kZShQbGFubmVkU3Rt dCwgcGxhbi0+c3RtdF9saXN0LCBxdWVyeV9pbmRleCk7Ci19Ci0KIC8qCiAgKiBjaG9vc2VfY3Vz dG9tX3BsYW46IGNob29zZSB3aGV0aGVyIHRvIHVzZSBjdXN0b20gb3IgZ2VuZXJpYyBwbGFuCiAg KgpAQCAtMTQwMiwxMyArMTI2NSw4IEBAIGNhY2hlZF9wbGFuX2Nvc3QoQ2FjaGVkUGxhbiAqcGxh biwgYm9vbCBpbmNsdWRlX3BsYW5uZXIpCiAgKiBwbGFuIG9yIGEgY3VzdG9tIHBsYW4gZm9yIHRo ZSBnaXZlbiBwYXJhbWV0ZXJzOiB0aGUgY2FsbGVyIGRvZXMgbm90IGtub3cKICAqIHdoaWNoIGl0 IHdpbGwgZ2V0LgogICoKLSAqIE9uIHJldHVybiwgdGhlIHBsYW4gaXMgdmFsaWQsIGJ1dCBpZiBp dCBpcyBhIHJldXNlZCBnZW5lcmljIHBsYW4sIG5vdCBhbGwKLSAqIGxvY2tzIGFyZSBhY3F1aXJl ZC4gSW4gc3VjaCBjYXNlcywgQ2hlY2tDYWNoZWRQbGFuKCkgZG9lcyBub3QgdGFrZSBsb2Nrcwot ICogb24gcmVsYXRpb25zIHN1YmplY3QgdG8gaW5pdGlhbCBydW50aW1lIHBydW5pbmc7IGluc3Rl YWQsIHRoZXNlIGxvY2tzIGFyZQotICogZGVmZXJyZWQgdW50aWwgZXhlY3V0aW9uIHN0YXJ0dXAs IHdoZW4gRXhlY0RvSW5pdGlhbFBydW5pbmcoKSBwZXJmb3JtcwotICogaW5pdGlhbCBwcnVuaW5n LiAgVGhlIHBsYW4ncyAiaXNfcmV1c2VkIiBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0Ci0g KiBDYWNoZWRQbGFuUmVxdWlyZXNMb2NraW5nKCkgc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gY2Fs bGVkIGJ5Ci0gKiBFeGVjRG9Jbml0aWFsUHJ1bmluZygpLgorICogT24gcmV0dXJuLCB0aGUgcGxh biBpcyB2YWxpZCBhbmQgd2UgaGF2ZSBzdWZmaWNpZW50IGxvY2tzIHRvIGJlZ2luCisgKiBleGVj dXRpb24uCiAgKgogICogT24gcmV0dXJuLCB0aGUgcmVmY291bnQgb2YgdGhlIHBsYW4gaGFzIGJl ZW4gaW5jcmVtZW50ZWQ7IGEgbGF0ZXIKICAqIFJlbGVhc2VDYWNoZWRQbGFuKCkgY2FsbCBpcyBl eHBlY3RlZC4gIElmICJvd25lciIgaXMgbm90IE5VTEwgdGhlbgpAQCAtMTQzNCw3ICsxMjkyLDcg QEAgR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLCBQYXJhbUxpc3RJ bmZvIGJvdW5kUGFyYW1zLAogCQllbG9nKEVSUk9SLCAiY2Fubm90IGFwcGx5IFJlc291cmNlT3du ZXIgdG8gbm9uLXNhdmVkIGNhY2hlZCBwbGFuIik7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHF1ZXJ5 dHJlZSBsaXN0IGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHBhcnNlLXRpbWUgbG9ja3MgKi8KLQlxbGlz dCA9IFJldmFsaWRhdGVDYWNoZWRRdWVyeShwbGFuc291cmNlLCBxdWVyeUVudiwgdHJ1ZSk7CisJ cWxpc3QgPSBSZXZhbGlkYXRlQ2FjaGVkUXVlcnkocGxhbnNvdXJjZSwgcXVlcnlFbnYpOwogCiAJ LyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGEgY3VzdG9tIHBsYW4gKi8KIAljdXN0b21wbGFuID0g Y2hvb3NlX2N1c3RvbV9wbGFuKHBsYW5zb3VyY2UsIGJvdW5kUGFyYW1zKTsKQEAgLTE0NDYsOCAr MTMwNCw2IEBAIEdldENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFy YW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCS8qIFdlIHdhbnQgYSBnZW5lcmljIHBsYW4sIGFu ZCB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCBvbmUgKi8KIAkJCXBsYW4gPSBwbGFuc291cmNlLT5n cGxhbjsKIAkJCUFzc2VydChwbGFuLT5tYWdpYyA9PSBDQUNIRURQTEFOX01BR0lDKTsKLQkJCS8q IFJldXNpbmcgdGhlIGV4aXN0aW5nIHBsYW4sIHNvIG5vdCBhbGwgbG9ja3MgbWF5IGJlIGFjcXVp cmVkLiAqLwotCQkJcGxhbi0+aXNfcmV1c2VkID0gdHJ1ZTsKIAkJfQogCQllbHNlCiAJCXsKQEAg LTE5MTMsNyArMTc2OSw3IEBAIENhY2hlZFBsYW5HZXRUYXJnZXRMaXN0KENhY2hlZFBsYW5Tb3Vy Y2UgKnBsYW5zb3VyY2UsCiAJCXJldHVybiBOSUw7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHF1ZXJ5 dHJlZSBsaXN0IGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHBhcnNlLXRpbWUgbG9ja3MgKi8KLQlSZXZh bGlkYXRlQ2FjaGVkUXVlcnkocGxhbnNvdXJjZSwgcXVlcnlFbnYsIHRydWUpOworCVJldmFsaWRh dGVDYWNoZWRRdWVyeShwbGFuc291cmNlLCBxdWVyeUVudik7CiAKIAkvKiBHZXQgdGhlIHByaW1h cnkgc3RhdGVtZW50IGFuZCBmaW5kIG91dCB3aGF0IGl0IHJldHVybnMgKi8KIAlwc3RtdCA9IFF1 ZXJ5TGlzdEdldFByaW1hcnlTdG10KHBsYW5zb3VyY2UtPnF1ZXJ5X2xpc3QpOwpAQCAtMjAzNSw3 ICsxODkxLDcgQEAgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoTGlzdCAqc3RtdF9saXN0LCBib29sIGFj cXVpcmUpCiAJZm9yZWFjaChsYzEsIHN0bXRfbGlzdCkKIAl7CiAJCVBsYW5uZWRTdG10ICpwbGFu bmVkc3RtdCA9IGxmaXJzdF9ub2RlKFBsYW5uZWRTdG10LCBsYzEpOwotCQlpbnQJCQlydGluZGV4 OworCQlMaXN0Q2VsbCAgICpsYzI7CiAKIAkJaWYgKHBsYW5uZWRzdG10LT5jb21tYW5kVHlwZSA9 PSBDTURfVVRJTElUWSkKIAkJewpAQCAtMjA1MywxNiArMTkwOSwxMyBAQCBBY3F1aXJlRXhlY3V0 b3JMb2NrcyhMaXN0ICpzdG10X2xpc3QsIGJvb2wgYWNxdWlyZSkKIAkJCWNvbnRpbnVlOwogCQl9 CiAKLQkJcnRpbmRleCA9IC0xOwotCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIo cGxhbm5lZHN0bXQtPnVucHJ1bmFibGVSZWxpZHMsCi0JCQkJCQkJCQkJICBydGluZGV4KSkgPj0g MCkKKwkJZm9yZWFjaChsYzIsIHBsYW5uZWRzdG10LT5ydGFibGUpCiAJCXsKLQkJCVJhbmdlVGJs RW50cnkgKnJ0ZSA9IGxpc3RfbnRoX25vZGUoUmFuZ2VUYmxFbnRyeSwKLQkJCQkJCQkJCQkJICAg cGxhbm5lZHN0bXQtPnJ0YWJsZSwKLQkJCQkJCQkJCQkJICAgcnRpbmRleCAtIDEpOworCQkJUmFu Z2VUYmxFbnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjMik7CiAKLQkJCUFz c2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8Ci0JCQkJICAgKHJ0ZS0+cnRla2lu ZCA9PSBSVEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSkpOworCQkJaWYgKCEo cnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiB8fAorCQkJCSAgKHJ0ZS0+cnRla2luZCA9PSBS VEVfU1VCUVVFUlkgJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSkpKQorCQkJCWNvbnRpbnVlOwog CiAJCQkvKgogCQkJICogQWNxdWlyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBsb2NrIG9uIGVh Y2ggcmVsYXRpb24gT0lELiBOb3RlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdy L3BvcnRhbG1lbS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwppbmRleCBl MzUyNmU3ODA2NC4uMGJlMWMyYjBmZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21t Z3IvcG9ydGFsbWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9wb3J0YWxtZW0uYwpA QCAtMjg0LDggKzI4NCw3IEBAIFBvcnRhbERlZmluZVF1ZXJ5KFBvcnRhbCBwb3J0YWwsCiAJCQkJ ICBjb25zdCBjaGFyICpzb3VyY2VUZXh0LAogCQkJCSAgQ29tbWFuZFRhZyBjb21tYW5kVGFnLAog CQkJCSAgTGlzdCAqc3RtdHMsCi0JCQkJICBDYWNoZWRQbGFuICpjcGxhbiwKLQkJCQkgIENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UpCisJCQkJICBDYWNoZWRQbGFuICpjcGxhbikKIHsKIAlB c3NlcnQoUG9ydGFsSXNWYWxpZChwb3J0YWwpKTsKIAlBc3NlcnQocG9ydGFsLT5zdGF0dXMgPT0g UE9SVEFMX05FVyk7CkBAIC0zMDAsNyArMjk5LDYgQEAgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFs IHBvcnRhbCwKIAlwb3J0YWwtPmNvbW1hbmRUYWcgPSBjb21tYW5kVGFnOwogCXBvcnRhbC0+c3Rt dHMgPSBzdG10czsKIAlwb3J0YWwtPmNwbGFuID0gY3BsYW47Ci0JcG9ydGFsLT5wbGFuc291cmNl ID0gcGxhbnNvdXJjZTsKIAlwb3J0YWwtPnN0YXR1cyA9IFBPUlRBTF9ERUZJTkVEOwogfQogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluLmgKaW5kZXggMDNjNWIzZDczZTUuLjNiMTIyZjc5ZWQ4IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbi5oCkBAIC02MywxMCArNjMsOCBAQCBleHRlcm4gdm9pZCBFeHBsYWluT25l VXRpbGl0eShOb2RlICp1dGlsaXR5U3RtdCwgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJCQkgIHN0 cnVjdCBFeHBsYWluU3RhdGUgKmVzLCBQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJICBQYXJh bUxpc3RJbmZvIHBhcmFtcyk7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5PbmVQbGFuKFBsYW5uZWRT dG10ICpwbGFubmVkc3RtdCwgQ2FjaGVkUGxhbiAqY3BsYW4sCi0JCQkJCQkgICBDYWNoZWRQbGFu U291cmNlICpwbGFuc291cmNlLCBpbnQgcXVlcnlfaW5kZXgsCi0JCQkJCQkgICBJbnRvQ2xhdXNl ICppbnRvLCBzdHJ1Y3QgRXhwbGFpblN0YXRlICplcywKLQkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nLAorZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAorCQkJCQkJICAgc3RydWN0IEV4cGxhaW5TdGF0ZSAq ZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkJICAgUGFyYW1MaXN0SW5mbyBwYXJh bXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LAogCQkJCQkJICAgY29uc3QgaW5zdHJfdGlt ZSAqcGxhbmR1cmF0aW9uLAogCQkJCQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1ZnVzYWdlLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvdHJpZ2dlci5oCmluZGV4IDQxODA2MDFkY2Q0Li4yZWQyYzRiYjM3OCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3RyaWdnZXIuaApAQCAtMjU4LDcgKzI1OCw2IEBAIGV4dGVybiB2b2lkIEV4ZWNBU1Ry dW5jYXRlVHJpZ2dlcnMoRVN0YXRlICplc3RhdGUsCiBleHRlcm4gdm9pZCBBZnRlclRyaWdnZXJC ZWdpblhhY3Qodm9pZCk7CiBleHRlcm4gdm9pZCBBZnRlclRyaWdnZXJCZWdpblF1ZXJ5KHZvaWQp OwogZXh0ZXJuIHZvaWQgQWZ0ZXJUcmlnZ2VyRW5kUXVlcnkoRVN0YXRlICplc3RhdGUpOwotZXh0 ZXJuIHZvaWQgQWZ0ZXJUcmlnZ2VyQWJvcnRRdWVyeSh2b2lkKTsKIGV4dGVybiB2b2lkIEFmdGVy VHJpZ2dlckZpcmVEZWZlcnJlZCh2b2lkKTsKIGV4dGVybiB2b2lkIEFmdGVyVHJpZ2dlckVuZFhh Y3QoYm9vbCBpc0NvbW1pdCk7CiBleHRlcm4gdm9pZCBBZnRlclRyaWdnZXJCZWdpblN1YlhhY3Qo dm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjZGVzYy5oIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaAppbmRleCBiYTUzMzA1YWQ0Mi4uODZkYjNkYzhk MGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNkZXNjLmgKKysrIGIvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY2Rlc2MuaApAQCAtMzUsNyArMzUsNiBAQCB0eXBlZGVmIHN0 cnVjdCBRdWVyeURlc2MKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHByb3ZpZGVkIGJ5IENyZWF0ZVF1 ZXJ5RGVzYyAqLwogCUNtZFR5cGUJCW9wZXJhdGlvbjsJCS8qIENNRF9TRUxFQ1QsIENNRF9VUERB VEUsIGV0Yy4gKi8KIAlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQ7CS8qIHBsYW5uZXIncyBvdXRw dXQgKGNvdWxkIGJlIHV0aWxpdHksIHRvbykgKi8KLQlDYWNoZWRQbGFuICpjcGxhbjsJCQkvKiBD YWNoZWRQbGFuIHRoYXQgc3VwcGxpZXMgdGhlIHBsYW5uZWRzdG10ICovCiAJY29uc3QgY2hhciAq c291cmNlVGV4dDsJCS8qIHNvdXJjZSB0ZXh0IG9mIHRoZSBxdWVyeSAqLwogCVNuYXBzaG90CXNu YXBzaG90OwkJLyogc25hcHNob3QgdG8gdXNlIGZvciBxdWVyeSAqLwogCVNuYXBzaG90CWNyb3Nz Y2hlY2tfc25hcHNob3Q7CS8qIGNyb3NzY2hlY2sgZm9yIFJJIHVwZGF0ZS9kZWxldGUgKi8KQEAg LTU4LDcgKzU3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVlcnlEZXNjCiAKIC8qIGluIHBxdWVyeS5j ICovCiBleHRlcm4gUXVlcnlEZXNjICpDcmVhdGVRdWVyeURlc2MoUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LAotCQkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuLAogCQkJCQkJCQkgIGNvbnN0IGNo YXIgKnNvdXJjZVRleHQsCiAJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCSAg U25hcHNob3QgY3Jvc3NjaGVja19zbmFwc2hvdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4 IGFlOTk0MDdkYjg5Li5mYmU0YmYwODFmNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC03 Myw3ICs3Myw3IEBACiAKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBF eGVjdXRvclN0YXJ0KCkgKi8KLXR5cGVkZWYgYm9vbCAoKkV4ZWN1dG9yU3RhcnRfaG9va190eXBl KSAoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwordHlwZWRlZiB2b2lkICgqRXhl Y3V0b3JTdGFydF9ob29rX3R5cGUpIChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7 CiBleHRlcm4gUEdETExJTVBPUlQgRXhlY3V0b3JTdGFydF9ob29rX3R5cGUgRXhlY3V0b3JTdGFy dF9ob29rOwogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIEV4ZWN1dG9y UnVuKCkgKi8KQEAgLTIyOSwxMSArMjI5LDggQEAgRXhlY0dldEp1bmtBdHRyaWJ1dGUoVHVwbGVU YWJsZVNsb3QgKnNsb3QsIEF0dHJOdW1iZXIgYXR0bm8sIGJvb2wgKmlzTnVsbCkKIC8qCiAgKiBw cm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNNYWluLmMKICAqLwotZXh0ZXJuIGJvb2wg RXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7Ci1leHRlcm4g dm9pZCBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbihRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVm bGFncywKLQkJCQkJCQkJCUNhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCi0JCQkJCQkJCQlp bnQgcXVlcnlfaW5kZXgpOwotZXh0ZXJuIGJvb2wgc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVy eURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncyk7CitleHRlcm4gdm9pZCBFeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKTsKK2V4dGVybiB2b2lkIHN0YW5kYXJk X0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJu IHZvaWQgRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCQkJCQlTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50KTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1 dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLApAQCAtMzAwLDMwICsyOTcsNiBAQCBleHRlcm4g dm9pZCBFeGVjRW5kTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NodXRk b3duTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY1NldFR1cGxlQm91bmQo aW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2RlKTsKIAotLyoKLSAqIElz IHRoZSBDYWNoZWRQbGFuIGluIGVzX2NhY2hlZHBsYW4gc3RpbGwgdmFsaWQ/Ci0gKgotICogQ2Fs bGVkIGZyb20gSW5pdFBsYW4oKSBiZWNhdXNlIGludmFsaWRhdGlvbiBtZXNzYWdlcyB0aGF0IGFm ZmVjdCB0aGUgcGxhbgotICogbWlnaHQgYmUgcmVjZWl2ZWQgYWZ0ZXIgbG9ja3MgaGF2ZSBiZWVu IHRha2VuIG9uIHJ1bnRpbWUtcHJ1bmFibGUgcmVsYXRpb25zLgotICogVGhlIGNhbGxlciBzaG91 bGQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgdGhlIHBsYW4gaGFzIGJlY29tZSBpbnZhbGlk LgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLUV4ZWNQbGFuU3RpbGxWYWxpZChFU3RhdGUgKmVz dGF0ZSkKLXsKLQlyZXR1cm4gZXN0YXRlLT5lc19jYWNoZWRwbGFuID09IE5VTEwgPyB0cnVlIDoK LQkJQ2FjaGVkUGxhblZhbGlkKGVzdGF0ZS0+ZXNfY2FjaGVkcGxhbik7Ci19Ci0KLS8qCi0gKiBM b2NrcyBhcmUgbmVlZGVkIG9ubHkgaWYgcnVubmluZyBhIGNhY2hlZCBwbGFuIHRoYXQgbWlnaHQg Y29udGFpbiB1bmxvY2tlZAotICogcmVsYXRpb25zLCBzdWNoIGFzIGEgcmV1c2VkIGdlbmVyaWMg cGxhbi4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1FeGVjU2hvdWxkTG9ja1JlbGF0aW9ucyhF U3RhdGUgKmVzdGF0ZSkKLXsKLQlyZXR1cm4gZXN0YXRlLT5lc19jYWNoZWRwbGFuID09IE5VTEwg PyBmYWxzZSA6Ci0JCUNhY2hlZFBsYW5SZXF1aXJlc0xvY2tpbmcoZXN0YXRlLT5lc19jYWNoZWRw bGFuKTsKLX0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNQcm9jTm9kZQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCA1YjZjYWRiNWE2Yy4uMjQ5MjI4MjIxM2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBA IC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIK ICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcXVlcnllbnZpcm9u bWVudC5oIgotI2luY2x1ZGUgInV0aWxzL3BsYW5jYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bHRyaWdnZXIuaCIKICNpbmNsdWRlICJ1dGlscy9zaGFyZWR0dXBsZXN0b3JlLmgiCiAjaW5jbHVk ZSAidXRpbHMvc25hcHNob3QuaCIKQEAgLTY2NCw3ICs2NjMsNiBAQCB0eXBlZGVmIHN0cnVjdCBF U3RhdGUKIAkJCQkJCQkJCQkgKiBFeGVjUm93TWFya3MsIG9yIE5VTEwgaWYgbm9uZSAqLwogCUxp c3QJICAgKmVzX3J0ZXBlcm1pbmZvczsJLyogTGlzdCBvZiBSVEVQZXJtaXNzaW9uSW5mbyAqLwog CVBsYW5uZWRTdG10ICplc19wbGFubmVkc3RtdDsJLyogbGluayB0byB0b3Agb2YgcGxhbiB0cmVl ICovCi0JQ2FjaGVkUGxhbiAqZXNfY2FjaGVkcGxhbjsJLyogQ2FjaGVkUGxhbiBwcm92aWRpbmcg dGhlIHBsYW4gdHJlZSAqLwogCUxpc3QJICAgKmVzX3BhcnRfcHJ1bmVfaW5mb3M7CS8qIExpc3Qg b2YgUGFydGl0aW9uUHJ1bmVJbmZvICovCiAJTGlzdAkgICAqZXNfcGFydF9wcnVuZV9zdGF0ZXM7 CS8qIExpc3Qgb2YgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqLwogCUxpc3QJICAgKmVzX3BhcnRfcHJ1 bmVfcmVzdWx0czsJLyogTGlzdCBvZiBCaXRtYXBzZXQgKi8KQEAgLTcxNyw3ICs3MTUsNiBAQCB0 eXBlZGVmIHN0cnVjdCBFU3RhdGUKIAlpbnQJCQllc190b3BfZWZsYWdzOwkvKiBlZmxhZ3MgcGFz c2VkIHRvIEV4ZWN1dG9yU3RhcnQgKi8KIAlpbnQJCQllc19pbnN0cnVtZW50OwkvKiBPUiBvZiBJ bnN0cnVtZW50T3B0aW9uIGZsYWdzICovCiAJYm9vbAkJZXNfZmluaXNoZWQ7CS8qIHRydWUgd2hl biBFeGVjdXRvckZpbmlzaCBpcyBkb25lICovCi0JYm9vbAkJZXNfYWJvcnRlZDsJCS8qIHRydWUg d2hlbiBleGVjdXRpb24gd2FzIGFib3J0ZWQgKi8KIAogCUxpc3QJICAgKmVzX2V4cHJjb250ZXh0 czsJLyogTGlzdCBvZiBFeHByQ29udGV4dHMgd2l0aGluIEVTdGF0ZSAqLwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCmluZGV4IDFkZDJkMTU2MGNiLi42NTY3NzU5NTk1ZCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKQEAgLTEzOCw5ICsxMzgsNiBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyog ImZsYXQiIGxpc3Qgb2YgaW50ZWdlciBSVCBpbmRleGVzICovCiAJTGlzdAkgICAqcmVzdWx0UmVs YXRpb25zOwogCi0JLyogImZsYXQiIGxpc3Qgb2YgaW50ZWdlciBSVCBpbmRleGVzIChvbmUgcGVy IE1vZGlmeVRhYmxlIG5vZGUpICovCi0JTGlzdAkgICAqZmlyc3RSZXN1bHRSZWxzOwotCiAJLyog ImZsYXQiIGxpc3Qgb2YgQXBwZW5kUmVsSW5mb3MgKi8KIAlMaXN0CSAgICphcHBlbmRSZWxhdGlv bnM7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggNjU4ZDc2MjI1ZTQuLmYwZDUxNGU2ZTE1IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTA1LDEzICsxMDUsNiBAQCB0eXBlZGVmIHN0cnVjdCBQ bGFubmVkU3RtdAogCS8qIGludGVnZXIgbGlzdCBvZiBSVCBpbmRleGVzLCBvciBOSUwgKi8KIAlM aXN0CSAgICpyZXN1bHRSZWxhdGlvbnM7CiAKLQkvKgotCSAqIHJ0YWJsZSBpbmRleGVzIG9mIGZp cnN0IHRhcmdldCByZWxhdGlvbiBpbiBlYWNoIE1vZGlmeVRhYmxlIG5vZGUgaW4gdGhlCi0JICog cGxhbiBmb3IgSU5TRVJUL1VQREFURS9ERUxFVEUvTUVSR0UKLQkgKi8KLQkvKiBpbnRlZ2VyIGxp c3Qgb2YgUlQgaW5kZXhlcywgb3IgTklMICovCi0JTGlzdAkgICAqZmlyc3RSZXN1bHRSZWxzOwot CiAJLyogbGlzdCBvZiBBcHBlbmRSZWxJbmZvIG5vZGVzICovCiAJTGlzdAkgICAqYXBwZW5kUmVs YXRpb25zOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wbGFuY2FjaGUuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oCmluZGV4IDA3ZWM1MzE4ZGI3Li4xYmFhNmQ1MGJm ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKQEAgLTE4LDggKzE4LDYgQEAKICNpbmNsdWRlICJhY2Nl c3MvdHVwZGVzYy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgIm5vZGVzL3Bh cmFtcy5oIgotI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9w bGFubm9kZXMuaCIKICNpbmNsdWRlICJ0Y29wL2NtZHRhZy5oIgogI2luY2x1ZGUgInV0aWxzL3F1 ZXJ5ZW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgpAQCAtMTUzLDEx ICsxNTEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxhblNvdXJjZQogICogVGhlIHJlZmVy ZW5jZSBjb3VudCBpbmNsdWRlcyBib3RoIHRoZSBsaW5rIGZyb20gdGhlIHBhcmVudCBDYWNoZWRQ bGFuU291cmNlCiAgKiAoaWYgYW55KSwgYW5kIGFueSBhY3RpdmUgcGxhbiBleGVjdXRpb25zLCBz byB0aGUgcGxhbiBjYW4gYmUgZGlzY2FyZGVkCiAgKiBleGFjdGx5IHdoZW4gcmVmY291bnQgZ29l cyB0byB6ZXJvLiAgQm90aCB0aGUgc3RydWN0IGl0c2VsZiBhbmQgdGhlCi0gKiBzdWJzaWRpYXJ5 IGRhdGEsIGV4Y2VwdCB0aGUgUGxhbm5lZFN0bXRzIGluIHN0bXRfbGlzdCBsaXZlIGluIHRoZSBj b250ZXh0Ci0gKiBkZW5vdGVkIGJ5IHRoZSBjb250ZXh0IGZpZWxkOyB0aGUgUGxhbm5lZFN0bXRz IGxpdmUgaW4gdGhlIGNvbnRleHQgZGVub3RlZAotICogYnkgc3RtdF9jb250ZXh0LiAgU2VwYXJh dGUgY29udGV4dHMgbWFrZXMgaXQgZWFzeSB0byBmcmVlIGEgbm8tbG9uZ2VyLW5lZWRlZAotICog Y2FjaGVkIHBsYW4uIChIb3dldmVyLCBpZiBpc19vbmVzaG90IGlzIHRydWUsIHRoZSBjb250ZXh0 IGRvZXMgbm90IGJlbG9uZwotICogc29sZWx5IHRvIHRoZSBDYWNoZWRQbGFuIHNvIG5vIGZyZWVp bmcgaXMgcG9zc2libGUuKQorICogc3Vic2lkaWFyeSBkYXRhIGxpdmUgaW4gdGhlIGNvbnRleHQg ZGVub3RlZCBieSB0aGUgY29udGV4dCBmaWVsZC4KKyAqIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBm cmVlIGEgbm8tbG9uZ2VyLW5lZWRlZCBjYWNoZWQgcGxhbi4gIChIb3dldmVyLAorICogaWYgaXNf b25lc2hvdCBpcyB0cnVlLCB0aGUgY29udGV4dCBkb2VzIG5vdCBiZWxvbmcgc29sZWx5IHRvIHRo ZSBDYWNoZWRQbGFuCisgKiBzbyBubyBmcmVlaW5nIGlzIHBvc3NpYmxlLikKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgQ2FjaGVkUGxhbgogewpAQCAtMTY1LDcgKzE2Miw2IEBAIHR5cGVkZWYgc3RydWN0 IENhY2hlZFBsYW4KIAlMaXN0CSAgICpzdG10X2xpc3Q7CQkvKiBsaXN0IG9mIFBsYW5uZWRTdG10 cyAqLwogCWJvb2wJCWlzX29uZXNob3Q7CQkvKiBpcyBpdCBhICJvbmVzaG90IiBwbGFuPyAqLwog CWJvb2wJCWlzX3NhdmVkOwkJLyogaXMgQ2FjaGVkUGxhbiBpbiBhIGxvbmctbGl2ZWQgY29udGV4 dD8gKi8KLQlib29sCQlpc19yZXVzZWQ7CQkvKiBpcyBpdCBhIHJldXNlZCBnZW5lcmljIHBsYW4/ ICovCiAJYm9vbAkJaXNfdmFsaWQ7CQkvKiBpcyB0aGUgc3RtdF9saXN0IGN1cnJlbnRseSB2YWxp ZD8gKi8KIAlPaWQJCQlwbGFuUm9sZUlkOwkJLyogUm9sZSBJRCB0aGUgcGxhbiB3YXMgY3JlYXRl ZCBmb3IgKi8KIAlib29sCQlkZXBlbmRzT25Sb2xlOwkvKiBpcyBwbGFuIHNwZWNpZmljIHRvIHRo YXQgcm9sZT8gKi8KQEAgLTE3NCwxMCArMTcwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2FjaGVkUGxh bgogCWludAkJCWdlbmVyYXRpb247CQkvKiBwYXJlbnQncyBnZW5lcmF0aW9uIG51bWJlciBmb3Ig dGhpcyBwbGFuICovCiAJaW50CQkJcmVmY291bnQ7CQkvKiBjb3VudCBvZiBsaXZlIHJlZmVyZW5j ZXMgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CQkvKiBjb250ZXh0 IGNvbnRhaW5pbmcgdGhpcyBDYWNoZWRQbGFuICovCi0JTWVtb3J5Q29udGV4dCBzdG10X2NvbnRl eHQ7IC8qIGNvbnRleHQgY29udGFpbmluZyB0aGUgUGxhbm5lZFN0bXRzIGluCi0JCQkJCQkJCSAq IHN0bXRfbGlzdCwgYnV0IG5vdCB0aGUgTGlzdCBpdHNlbGYgd2hpY2ggaXMKLQkJCQkJCQkJICog aW4gdGhlIGFib3ZlIGNvbnRleHQ7IE5VTEwgaWYgaXNfb25lc2hvdCBpcwotCQkJCQkJCQkgKiB0 cnVlLiAqLwogfSBDYWNoZWRQbGFuOwogCiAvKgpAQCAtMjQ5LDEwICsyNDEsNiBAQCBleHRlcm4g Q2FjaGVkUGxhbiAqR2V0Q2FjaGVkUGxhbihDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAog CQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJCQkJCQkJIFJlc291cmNlT3du ZXIgb3duZXIsCiAJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7Ci1leHRlcm4g UGxhbm5lZFN0bXQgKlVwZGF0ZUNhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJj ZSwKLQkJCQkJCQkJCSBpbnQgcXVlcnlfaW5kZXgsCi0JCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVu dCAqcXVlcnlFbnYpOwotCiBleHRlcm4gdm9pZCBSZWxlYXNlQ2FjaGVkUGxhbihDYWNoZWRQbGFu ICpwbGFuLCBSZXNvdXJjZU93bmVyIG93bmVyKTsKIAogZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbkFs bG93c1NpbXBsZVZhbGlkaXR5Q2hlY2soQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKQEAg LTI2NSwzMCArMjUzLDQgQEAgZXh0ZXJuIGJvb2wgQ2FjaGVkUGxhbklzU2ltcGx5VmFsaWQoQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwKIGV4dGVybiBDYWNoZWRFeHByZXNzaW9uICpHZXRD YWNoZWRFeHByZXNzaW9uKE5vZGUgKmV4cHIpOwogZXh0ZXJuIHZvaWQgRnJlZUNhY2hlZEV4cHJl c3Npb24oQ2FjaGVkRXhwcmVzc2lvbiAqY2V4cHIpOwogCi0vKgotICogQ2FjaGVkUGxhblJlcXVp cmVzTG9ja2luZzogc2hvdWxkIHRoZSBleGVjdXRvciBhY3F1aXJlIGFkZGl0aW9uYWwgbG9ja3M/ Ci0gKgotICogSWYgdGhlIHBsYW4gaXMgYSBzYXZlZCBnZW5lcmljIHBsYW4sIHRoZSBleGVjdXRv ciBtdXN0IGFjcXVpcmUgbG9ja3MgZm9yCi0gKiByZWxhdGlvbnMgdGhhdCBhcmUgbm90IGNvdmVy ZWQgYnkgQWNxdWlyZUV4ZWN1dG9yTG9ja3MoKSwgc3VjaCBhcyBwYXJ0aXRpb25zCi0gKiB0aGF0 IGFyZSBzdWJqZWN0IHRvIGluaXRpYWwgcnVudGltZSBwcnVuaW5nLgotICovCi1zdGF0aWMgaW5s aW5lIGJvb2wKLUNhY2hlZFBsYW5SZXF1aXJlc0xvY2tpbmcoQ2FjaGVkUGxhbiAqY3BsYW4pCi17 Ci0JcmV0dXJuICFjcGxhbi0+aXNfb25lc2hvdCAmJiBjcGxhbi0+aXNfcmV1c2VkOwotfQotCi0v KgotICogQ2FjaGVkUGxhblZhbGlkCi0gKiAgICAgIFJldHVybnMgd2hldGhlciBhIGNhY2hlZCBn ZW5lcmljIHBsYW4gaXMgc3RpbGwgdmFsaWQuCi0gKgotICogSW52b2tlZCBieSB0aGUgZXhlY3V0 b3IgdG8gY2hlY2sgaWYgdGhlIHBsYW4gaGFzIG5vdCBiZWVuIGludmFsaWRhdGVkIGFmdGVyCi0g KiB0YWtpbmcgbG9ja3MgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGxhbi4KLSAq Lwotc3RhdGljIGlubGluZSBib29sCi1DYWNoZWRQbGFuVmFsaWQoQ2FjaGVkUGxhbiAqY3BsYW4p Ci17Ci0JcmV0dXJuIGNwbGFuLT5pc192YWxpZDsKLX0KLQogI2VuZGlmCQkJCQkJCS8qIFBMQU5D QUNIRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wb3J0YWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL3BvcnRhbC5oCmluZGV4IGRkZWUwMzFmNTUxLi4wYjYyMTQzYWY4YiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcG9ydGFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcG9ydGFsLmgKQEAgLTEzOCw3ICsxMzgsNiBAQCB0eXBlZGVmIHN0cnVjdCBQb3J0YWxEYXRh CiAJUXVlcnlDb21wbGV0aW9uIHFjOwkJCS8qIGNvbW1hbmQgY29tcGxldGlvbiBkYXRhIGZvciBl eGVjdXRlZCBxdWVyeSAqLwogCUxpc3QJICAgKnN0bXRzOwkJCS8qIGxpc3Qgb2YgUGxhbm5lZFN0 bXRzICovCiAJQ2FjaGVkUGxhbiAqY3BsYW47CQkJLyogQ2FjaGVkUGxhbiwgaWYgc3RtdHMgYXJl IGZyb20gb25lICovCi0JQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZTsJLyogQ2FjaGVkUGxh blNvdXJjZSwgZm9yIGNwbGFuICovCiAKIAlQYXJhbUxpc3RJbmZvIHBvcnRhbFBhcmFtczsgLyog cGFyYW1zIHRvIHBhc3MgdG8gcXVlcnkgKi8KIAlRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudjsg LyogZW52aXJvbm1lbnQgZm9yIHF1ZXJ5ICovCkBAIC0yNDEsOCArMjQwLDcgQEAgZXh0ZXJuIHZv aWQgUG9ydGFsRGVmaW5lUXVlcnkoUG9ydGFsIHBvcnRhbCwKIAkJCQkJCQkgIGNvbnN0IGNoYXIg KnNvdXJjZVRleHQsCiAJCQkJCQkJICBDb21tYW5kVGFnIGNvbW1hbmRUYWcsCiAJCQkJCQkJICBM aXN0ICpzdG10cywKLQkJCQkJCQkgIENhY2hlZFBsYW4gKmNwbGFuLAotCQkJCQkJCSAgQ2FjaGVk UGxhblNvdXJjZSAqcGxhbnNvdXJjZSk7CisJCQkJCQkJICBDYWNoZWRQbGFuICpjcGxhbik7CiBl eHRlcm4gUGxhbm5lZFN0bXQgKlBvcnRhbEdldFByaW1hcnlTdG10KFBvcnRhbCBwb3J0YWwpOwog ZXh0ZXJuIHZvaWQgUG9ydGFsQ3JlYXRlSG9sZFN0b3JlKFBvcnRhbCBwb3J0YWwpOwogZXh0ZXJu IHZvaWQgUG9ydGFsSGFzaFRhYmxlRGVsZXRlQWxsKHZvaWQpOwotLSAKMi40My4wCgo= --00000000000080fe360635a2bd4e--