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.96) (envelope-from ) id 1vtOCV-003mC5-0B for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 10:57:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtOCT-007cGs-3C for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 10:57:34 +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.96) (envelope-from ) id 1vtOCT-007cGj-13 for pgsql-hackers@lists.postgresql.org; Fri, 20 Feb 2026 10:57:33 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vtOCQ-00000000LwP-0EbX for pgsql-hackers@lists.postgresql.org; Fri, 20 Feb 2026 10:57:32 +0000 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-38709888abbso15574471fa.1 for ; Fri, 20 Feb 2026 02:57:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771585049; cv=none; d=google.com; s=arc-20240605; b=gRRFGu5fd/PF3cq7Dbxs479Z0c6tAsk2mjd78z7efdAJiLXpVNRGiPMBWzo086C9S+ 0Jbi6znlnqCchYdZ20ZLMIFnMRpUT8hugyFx2CQGhwmWx/49C4wlx1ym3Ej09VBt+ku0 dikljLc7+IbrAnONFkgy1oJRqstij5uuAFukVjrFYfYz6ZQqo1LLgXLHPR6HIXgpXXlM elmJ4EhHbOd3JNhnnXjC8El+79/hMXuciHr0Ccr2uFSO/mHy8MqWNu38468UO3tWyyl7 /MW8dYbejy6rBbnmejF+d9ag5J6+X75id15YST0WnrfFeCqXPLZZtVi9yuC+9tT/NEKh Lkbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=3M2XqtmxJf4D6uCwRZYGdMxou0+b6o92K2gI/nj5yeE=; fh=QHlkX0lz9/FtdkqBwa2mPpFCxqiidemtOvhMO+KkaYQ=; b=bWCYnHRHohBtI6Wy/LrSLEEIYfoyoKt34nFc0i3JocHk5Sg+LfvP3V2zLCjbee2vng aBc3/yA5pem9Rk9IwTgco+a7xZM4n9UKehim33KZ46p70Mg3dguO6RJtFD1HUcFSPixo HU5Hm24Za54QXCBQGCyT/Xehdb1/6i8xTIuJiEi6cIhpH+sgATBzIH07mxY41xSh6qvs JpmdWA+mM7GDfhLRXsTR3O42g5j+uhstgP9gt546d3dbMd19Dxs4Mhera68RZnZPG5Vb uy3Ie6Wt4+E9ftbGoXmSNlwRVoKMjfOBaUyqAT/3DAOf/QGJtjXfZDbZcq1Wt6PBze9s iMSA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771585049; x=1772189849; darn=lists.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=3M2XqtmxJf4D6uCwRZYGdMxou0+b6o92K2gI/nj5yeE=; b=nK7VtcftI5t+SraQDJWLt8pdcTiEyk8QSPEDRYNyJDHyyFIxZgT3Tng67YhErJglL4 hOt5vN6ruisKC7MeMcAkojwc15mGM2jUNZpZFppNIROxO2WaAats7PN1BiBxs8b8lfC1 LIi6YQI6lRi61vLbY7LSNvJCTHKKpW4NTgTo9vMhAiRY94h/ormqKnYVUrFrRSrynUlj 0gTGZPCeJXzgbe9zlIoWSTPATE6jUP1o7kR4jY7sHYqUTq2W1htdg21EgQSPppo6LiZp lsbb7vNqpLjBTumu0PGI30s/kBPdLAr4sH6mvbh2UyXAUIIsYJMu161AFax736s1KS/P ez6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771585049; x=1772189849; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=3M2XqtmxJf4D6uCwRZYGdMxou0+b6o92K2gI/nj5yeE=; b=NaXUpK7jTZhydUSIBI3Q0wv3NqNMaS+y1K0F3KOaiqGtD+SP0fFzTK9tUgnl6oSXFQ hFOtO+quXXU/9TezCJ/uBiegcwcO5f8YThQxOnOapd3SVFVrcukFjvPPj7FpDOkHnm6W 20baeHN9a8MXI1eXpBTomYsdqPUp0f8w3Idbk/5tVtqrpUAO7Ppt6ngOp8ZI00TW5cTT 9tyrWHXdPSheEAzUYz88DGlYFpPdjcDiZ/7YOnAtB3utgdzE+nLRVPaAsC7cw0xDbH/R /ABycXIZvz/R8a2v7uDzDzthH9TwkXZZm5z67D1lGwm9JohXS7vnEoGsvPjwyYWZciF2 Tgsg== X-Forwarded-Encrypted: i=1; AJvYcCWEpm2cOekTeIeN2iOVMn6V1m8gMeMXkAD4wURuxvfWOOt5E7SAO8utIWQ7Jhq6nAUbakbr5lXn8gRE6IQk@lists.postgresql.org X-Gm-Message-State: AOJu0YykMJ8uA9r4bo+CADglPrb1B5cbLG5xJU1Glix+8JRWaQG68xu7 15qmXVKpaWk7MR01WVQ3WS938n19asl2kKSOSmfZUjyDxCqoy75f6hg3f/o2PiXUDlP8hJpySTD gFi+9hguomMCiiAHp4zsmGDH44q3po3A= X-Gm-Gg: AZuq6aJKCmVmktTCwWd3MMiSilLMj82tY2j402a/+zbuDbzC7Oj8jUXZ5bjm/0E7vrs 0LpDFTubkWPhnKpHqOmyl7uqcV6GvpbJdxZYJdVg/Kv9La1MXklQqEOBxpKUlIO4rNMczTVlryh +xMsL2JwAOAkW2oNDI/To+oMxhBaRtqv1jGPmTgim48XsHIkRb8/GQ8REjdQk+iEik11Em3a7OC QFCkoflmm0iVuSaU901+FVytUo1dQHY6E1mfGWLkY/r6y4+OZqyBjY1ZQN57st6OggDcoCmthgF nTI7WEiv X-Received: by 2002:a05:651c:198d:b0:387:17e6:1dd9 with SMTP id 38308e7fff4ca-38846e0f47emr31428311fa.23.1771585048767; Fri, 20 Feb 2026 02:57:28 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Fri, 20 Feb 2026 21:57:16 +1100 X-Gm-Features: AaiRm50_LCKfokytoTYIFS0KaajQ3N0VH0JbtcMolo1UPENmZ586-4pHsPWeGBs Message-ID: Subject: Re: [PATCH] Support automatic sequence replication To: shveta malik Cc: Ashutosh Sharma , PostgreSQL Hackers , Amit Kapila Content-Type: multipart/mixed; boundary="000000000000858cbe064b3f49d3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000858cbe064b3f49d3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 13, 2026 at 4:43=E2=80=AFPM Peter Smith = wrote: > > Hi Ajin. > > Some review comments for patch v4-0001 > > =3D=3D=3D=3D=3D=3D > src/backend/commands/sequence.c > > GetSequence: > > 1. > +/* > + * Read the current sequence values (last_value and is_called) > + * > + * This is a read-only operation that acquires AccessShareLock on the se= quence. > + * Used by logical replication sequence synchronization to detect drift. > + */ > > The comment seems stale. e.g. the function is not acquiring a lock > anymore, contrary to what that comment says. > Fixed. > > =3D=3D=3D=3D=3D=3D > .../replication/logical/sequencesync.c > > 2. > -static List *seqinfos =3D NIL; > > The removal of this global was not strictly part of this patch; it is > more like a prerequisite to make everything tidier, so your new code > does not go further down that track of side-affecting a global. From > that POV, I thought this global removal should be implemented as a > first/separate (0001) patch so that it might be quickly reviewed and > committed independently of the new seq-sync logic. > Keeping it as is for the time being. Let's see what everybody else thinks. > ~~~ > > LogicalRepSyncSequences: > > 3. > + /* Error on unexpected states */ > + if (relstate !=3D SUBREL_STATE_INIT && relstate !=3D SUBREL_STATE_READY= ) > + { > + table_close(sequence_rel, NoLock); > + ereport(ERROR, > + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), > + errmsg("unexpected relstate '%c' for sequence \"%s.%s\" in > subscription \"%s\"", > + relstate, > + get_namespace_name(RelationGetNamespace(sequence_rel)), > + RelationGetRelationName(sequence_rel), > + MySubscription->name))); > + } > + > > How is this possible? Should it just be Assert? > Fixed. > ~~~ > > start_sequence_sync: > > 4. > + /* > + * Synchronize all sequences (both READY and INIT states). > + * The function will process INIT sequences first, then READY sequences. > + */ > + sequence_copied =3D LogicalRepSyncSequences(LogRepWorkerWalRcvConn); > > Why is talking about the processing order relevant? > > Removed. > > =3D=3D=3D=3D=3D=3D > src/backend/replication/logical/syncutils.c > > 5. > + /* Check if any new sequences need syncing */ > + ProcessSequencesForSync(); > + > > Maybe don't say "new" because IIUC it also handles older sequences > where the values have drifted. > > =3D=3D=3D=3D=3D=3D > src/test/subscription/t/036_sequences.pl > > 6. > -$result =3D $node_publisher->safe_psql( > - 'postgres', qq( > - SELECT last_value, is_called FROM regress_s1; > -)); > -is($result, '200|t', 'Check sequence value in the publisher'); > - > -# Check - existing sequence ('regress_s1') is not synced > -$result =3D $node_subscriber->safe_psql( > - 'postgres', qq( > - SELECT last_value, is_called FROM regress_s1; > -)); > -is($result, '100|t', 'REFRESH PUBLICATION will not sync existing sequenc= e'); > - > > Since you are no longer testing "existing sequences" in this test > part, should you also remove the earlier INSERT for 'regress_s1'? > Fixed both the above comments. On Tue, Feb 17, 2026 at 10:21=E2=80=AFPM Ashutosh Sharma wrote: > > > How about retaining ALTER SUBSCRIPTION ... REFRESH SEQUENCES command? > > It can be useful in scenarios where automatic sequence replication > cannot be enabled, for example, due to the max_worker_processes limit > on the server preventing a new worker from being registered. Since > increasing max_worker_processes requires a server restart, which the > user may not want to perform immediately, this command would provide a > way to manually synchronize the sequences. > Retained ALTER SUBSCRIPTION ... REFRESH SEQUENCES similar to the behaviour on HEAD, it only changes the state of the sequence to INIT. The sequence worker will update these sequences unconditionally. > > One minor comment: > > * Sequence state transitions follow this pattern: > - * INIT -> READY > + * INIT --> READY ->-+ > + * ^ | (check/synchronzize) > + * | | > + * +--<---+ > > > "synchronzize" =E2=86=92 "synchronize" > Fixed. On Wed, Feb 18, 2026 at 9:04=E2=80=AFPM shveta malik wrote: > > Few comments: > > 1) > + /* Check if any new sequences need syncing */ > + ProcessSequencesForSync(); > + > > Shall we name it 'maybe_start_seqsync_worker()' (or something better?) > and move it immediately after 'maybe_advance_nonremovable_xid()'. > Thoughts? This is because we do not process sequences here, we just > check if the subscription includes sequences and start worker. > Since snak_case are used for static functions, I've renamed it to MaybeLaunchSequenceSyncWorker and called it immediately after maybe_advance_nonremovable_xid() > 2) > We can also change the comment atop ProcessSequencesForSync to mention > that. Currently it says: > /* > * Apply worker determines if sequence synchronization is needed. > * > * Start a sequencesync worker if one is not already running. > > Now, we shall change it to: > Apply worker determines whether a sequence sync worker is needed. > > Check if the subscription includes sequences and start a sequencesync > worker if one is not already running. > Fixed. > 3) > I noticed that copy_sequences is invoked twice per sync cycle=E2=80=94onc= e for > sequences in the INIT state, and once for sequences in the READY state > to detect drift. This means we ping the primary twice during each sync > cycle. We should consider combining this logic into a single > copy_sequences call. Since we already have the state information > (INIT, READY, etc.) for each local sequence, copy_sequences can > internally check the current state and decide whether to transition a > sequence to READY based on its previous state. This approach would > allow us to fetch all required information from the primary in a > single call. > Changed it. > I also think that we do not even need to mention the states here and > we can give a single message instead of 2: > DEBUG: logical replication sequence synchronization for subscription > "sub1" - for sequences in INIT state batch #1 =3D 5 attempted, 5 > succeeded, 0 mismatched, 0 insufficient permission, 0 missing from > publisher, 0 skipped, 0 no drift > DEBUG: logical replication sequence synchronization for subscription > "sub1" - for sequences in READY state batch #1 =3D 5 attempted, 0 > succeeded, 0 mismatched, 0 insufficient permission, 0 missing from > publisher, 0 skipped, 5 no drift > Yes, since states are now specific to each sequence and not to batches, I've removed it. I've also found that the sequence worker was not being stopped when SUBSCRIPTION was disabled. I've added checks to do this as well. All the above changes are part of the attached v5 patch . regards, Ajin Cherian Fujitsu Australia --000000000000858cbe064b3f49d3 Content-Type: application/octet-stream; name="v5-0001-Support-automatic-sequence-replication.patch" Content-Disposition: attachment; filename="v5-0001-Support-automatic-sequence-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mluruk9s0 RnJvbSBlOTQ3MjU2MTc4YTg4ODg3ZGIyZjljMDQ2YjhhNjc1YzBhZTg3ZDI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpEYXRl OiBGcmksIDIwIEZlYiAyMDI2IDIxOjEwOjQyICsxMTAwClN1YmplY3Q6IFtQQVRDSCB2NV0gU3Vw cG9ydCBhdXRvbWF0aWMgc2VxdWVuY2UgcmVwbGljYXRpb24uCgpMb2dpY2FsIHJlcGxpY2F0aW9u IHNlcXVlbmNlcyBjYW4gZHJpZnQgYmV0d2VlbiBwdWJsaXNoZXIgYW5kCnN1YnNjcmliZXIgYXMg dmFsdWVzIGFyZSBjb25zdW1lZCBpbmRlcGVuZGVudGx5IG9uIGVhY2ggbm9kZS4KUHJldmlvdXNs eSwgdGhlIHNlcXVlbmNlIHN5bmMgd29ya2VyIGV4aXRlZCBhZnRlciB0aGUgaW5pdGlhbApzeW5j aHJvbml6YXRpb24sIGFsbG93aW5nIHNlcXVlbmNlcyB0byBkaXZlcmdlIG92ZXIgdGltZS4KClRo aXMgY2hhbmdlIGtlZXBzIHRoZSBzZXF1ZW5jZSBzeW5jIHdvcmtlciBydW5uaW5nIGNvbnRpbnVv dXNseQpzbyBpdCBjYW4gbW9uaXRvciBzZXF1ZW5jZXMgYW5kIHJlc3luY2hyb25pemUgdGhlbSB3 aGVuIGRyaWZ0CmlzIGRldGVjdGVkLiBUaGUgd29ya2VyIHVzZXMgYW4gYWRhcHRpdmUgc2xlZXAg aW50ZXJ2YWw6Cml0IHN0YXJ0cyBhdCAyIHNlY29uZHMsIGRvdWJsZXMgdXAgdG8gYSBtYXhpbXVt IG9mIDMwIHNlY29uZHMKd2hlbiBubyBkcmlmdCBpcyBvYnNlcnZlZCwgYW5kIHJlc2V0cyB0byB0 aGUgbWluaW11bSBpbnRlcnZhbApvbmNlIGRyaWZ0IGlzIGZvdW5kLgoKU2VxdWVuY2VzIHJlbWFp biBpbiB0aGUgUkVBRFkgc3RhdGUgZHVyaW5nIGNvbnRpbnVvdXMKc3luY2hyb25pemF0aW9uLgoK QXV0aG9yOiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogU2h2 ZXRhIE1hbGlrIDxzaHZldGEubWFsaWtAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogUGV0ZXIgU21p dGggPHNtaXRocGIyMjUwQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFzaHV0b3NoIFNoYXJtYSA8 YXNodS5jb2VrODhAZ21haWwuY29tPgotLS0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0 aW9uLnNnbWwgICAgICAgICB8ICA1NiArLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNj cmlwdGlvbi5zZ21sICAgICAgfCAgIDkgLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2Uu YyAgICAgICAgICAgICAgIHwgIDI3ICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5j ZXN5bmMuYyAgICAgICAgfCAzMDIgKysrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3N5bmN1dGlscy5jICAgfCAgNDggKystCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAgIDQgKwogc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5pbi5jICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3N1YnNjcmlwdGlvbl9yZWwuaCAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMv c2VxdWVuY2UuaCAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgMiArLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3Qv MDI2X3N0YXRzLnBsICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Nl9zZXF1ZW5jZXMucGwgICAgICB8ICA3OSArLS0tLQogMTIgZmlsZXMgY2hhbmdlZCwgMzAwIGlu c2VydGlvbnMoKyksIDIzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv bG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRp b24uc2dtbAppbmRleCA1MDI4ZmU5YWYwOS4uY2ZlOWMyNzg4YzQgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2lj YWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTc3NSwyMCArMTc3NSwxNCBAQCBQdWJsaWNhdGlvbnM6 CiAgICAgICB0byBzeW5jaHJvbml6ZSBvbmx5IG5ld2x5IGFkZGVkIHNlcXVlbmNlcy4KICAgICAg PC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPgotICAgICA8cGFyYT4KLSAg ICAgIHVzZSA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJl c2gtc2VxdWVuY2VzIj4KLSAgICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVG UkVTSCBTRVFVRU5DRVM8L2NvbW1hbmQ+PC9saW5rPgotICAgICAgdG8gcmUtc3luY2hyb25pemUg YWxsIHNlcXVlbmNlcyBjdXJyZW50bHkga25vd24gdG8gdGhlIHN1YnNjcmlwdGlvbi4KLSAgICAg PC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+CiAgICA8L2l0ZW1pemVkbGlzdD4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgogICAgQSA8Zmlyc3R0ZXJtPnNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiB3b3Jr ZXI8L2ZpcnN0dGVybT4gd2lsbCBiZSBzdGFydGVkCi0gICBhZnRlciBleGVjdXRpbmcgYW55IG9m IHRoZSBhYm92ZSBzdWJzY3JpYmVyIGNvbW1hbmRzLCBhbmQgd2lsbCBleGl0IG9uY2UgdGhlCi0g ICBzZXF1ZW5jZXMgYXJlIHN5bmNocm9uaXplZC4KKyAgIGFmdGVyIGV4ZWN1dGluZyBhbnkgb2Yg dGhlIGFib3ZlIHN1YnNjcmliZXIgY29tbWFuZHMuIFRoZSB3b3JrZXIgd2lsbAorICAgcmVtYWlu IHJ1bm5pbmcgZm9yIHRoZSBsaWZlIG9mIHRoZSBzdWJzY3JpcHRpb24sIHBlcmlvZGljYWxseQor ICAgc3luY2hyb25pemluZyBhbGwgcHVibGlzaGVkIHNlcXVlbmNlcy4KICAgPC9wYXJhPgogICA8 cGFyYT4KICAgIFRoZSBhYmlsaXR5IHRvIGxhdW5jaCBhIHNlcXVlbmNlIHN5bmNocm9uaXphdGlv biB3b3JrZXIgaXMgbGltaXRlZCBieSB0aGUKQEAgLTE4MTUsMjEgKzE4MDksNyBAQCBQdWJsaWNh dGlvbnM6CiAgIDwvc2VjdDI+CiAKICAgPHNlY3QyIGlkPSJzZXF1ZW5jZXMtb3V0LW9mLXN5bmMi PgotICAgPHRpdGxlPlJlZnJlc2hpbmcgT3V0LW9mLVN5bmMgU2VxdWVuY2VzPC90aXRsZT4KLSAg IDxwYXJhPgotICAgIFN1YnNjcmliZXIgc2VxdWVuY2UgdmFsdWVzIHdpbGwgYmVjb21lIG91dCBv ZiBzeW5jIGFzIHRoZSBwdWJsaXNoZXIKLSAgICBhZHZhbmNlcyB0aGVtLgotICAgPC9wYXJhPgot ICAgPHBhcmE+Ci0gICAgVG8gZGV0ZWN0IHRoaXMsIGNvbXBhcmUgdGhlCi0gICAgPGxpbmsgbGlu a2VuZD0iY2F0YWxvZy1wZy1zdWJzY3JpcHRpb24tcmVsIj5wZ19zdWJzY3JpcHRpb25fcmVsPC9s aW5rPi48c3RydWN0ZmllbGQ+c3JzdWJsc248L3N0cnVjdGZpZWxkPgotICAgIG9uIHRoZSBzdWJz Y3JpYmVyIHdpdGggdGhlIDxzdHJ1Y3RmaWVsZD5wYWdlX2xzbjwvc3RydWN0ZmllbGQ+IG9idGFp bmVkCi0gICAgZnJvbSB0aGUgPGxpbmsgbGlua2VuZD0iZnVuYy1wZy1nZXQtc2VxdWVuY2UtZGF0 YSI+PGZ1bmN0aW9uPnBnX2dldF9zZXF1ZW5jZV9kYXRhPC9mdW5jdGlvbj48L2xpbms+Ci0gICAg ZnVuY3Rpb24gZm9yIHRoZSBzZXF1ZW5jZSBvbiB0aGUgcHVibGlzaGVyLiBUaGVuIHJ1bgotICAg IDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVzaC1zZXF1 ZW5jZXMiPgotICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFV RU5DRVM8L2NvbW1hbmQ+PC9saW5rPiB0bwotICAgIHJlLXN5bmNocm9uaXplIGlmIG5lY2Vzc2Fy eS4KLSAgIDwvcGFyYT4KKyAgIDx0aXRsZT5PdXQtb2YtU3luYyBTZXF1ZW5jZXM8L3RpdGxlPgog ICAgPHdhcm5pbmc+CiAgICAgPHBhcmE+CiAgICAgIEVhY2ggc2VxdWVuY2UgY2FjaGVzIGEgYmxv Y2sgb2YgdmFsdWVzICh0eXBpY2FsbHkgMzIpIGluIG1lbW9yeSBiZWZvcmUKQEAgLTE5NjEsMTYg KzE5NDEsNiBAQCBQdWJsaWNhdGlvbnM6CiAtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tCiAgICAgICAgIDYxMCB8IHQgICAgICAgICB8IDAvMDE3Q0VERjgKICgxIHJvdykKLTwv cHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgotCi0gICA8cGFyYT4KLSAgICBUaGUgZGlmZmVyZW5jZSBi ZXR3ZWVuIHRoZSBzZXF1ZW5jZSBwYWdlIExTTnMgb24gdGhlIHB1Ymxpc2hlciBhbmQgdGhlCi0g ICAgc2VxdWVuY2UgcGFnZSBMU05zIG9uIHRoZSBzdWJzY3JpYmVyIGluZGljYXRlcyB0aGF0IHRo ZSBzZXF1ZW5jZXMgYXJlIG91dAotICAgIG9mIHN5bmMuIFJlLXN5bmNocm9uaXplIGFsbCBzZXF1 ZW5jZXMga25vd24gdG8gdGhlIHN1YnNjcmliZXIgdXNpbmcKLSAgICA8bGluayBsaW5rZW5kPSJz cWwtYWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICA8Y29t bWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwv bGluaz4uCi08cHJvZ3JhbWxpc3Rpbmc+Ci0vKiBzdWIgIyAqLyBBTFRFUiBTVUJTQ1JJUFRJT04g c3ViMSBSRUZSRVNIIFNFUVVFTkNFUzsKIDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgogCiAgICA8 cGFyYT4KQEAgLTIzMzMsMjQgKzIzMDMsNiBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUg ZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAg IDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAKLSAgIDxsaXN0aXRlbT4KLSAgICA8cGFyYT4KLSAg ICAgSW5jcmVtZW50YWwgc2VxdWVuY2UgY2hhbmdlcyBhcmUgbm90IHJlcGxpY2F0ZWQuICBBbHRo b3VnaCB0aGUgZGF0YSBpbgotICAgICBzZXJpYWwgb3IgaWRlbnRpdHkgY29sdW1ucyBiYWNrZWQg Ynkgc2VxdWVuY2VzIHdpbGwgYmUgcmVwbGljYXRlZCBhcyBwYXJ0Ci0gICAgIG9mIHRoZSB0YWJs ZSwgdGhlIHNlcXVlbmNlcyB0aGVtc2VsdmVzIGRvIG5vdCByZXBsaWNhdGUgb25nb2luZyBjaGFu Z2VzLgotICAgICBPbiB0aGUgc3Vic2NyaWJlciwgYSBzZXF1ZW5jZSB3aWxsIHJldGFpbiB0aGUg bGFzdCB2YWx1ZSBpdCBzeW5jaHJvbml6ZWQKLSAgICAgZnJvbSB0aGUgcHVibGlzaGVyLiBJZiB0 aGUgc3Vic2NyaWJlciBpcyB1c2VkIGFzIGEgcmVhZC1vbmx5IGRhdGFiYXNlLAotICAgICB0aGVu IHRoaXMgc2hvdWxkIHR5cGljYWxseSBub3QgYmUgYSBwcm9ibGVtLiAgSWYsIGhvd2V2ZXIsIHNv bWUga2luZCBvZgotICAgICBzd2l0Y2hvdmVyIG9yIGZhaWxvdmVyIHRvIHRoZSBzdWJzY3JpYmVy IGRhdGFiYXNlIGlzIGludGVuZGVkLCB0aGVuIHRoZQotICAgICBzZXF1ZW5jZXMgd291bGQgbmVl ZCB0byBiZSB1cGRhdGVkIHRvIHRoZSBsYXRlc3QgdmFsdWVzLCBlaXRoZXIgYnkKLSAgICAgZXhl Y3V0aW5nIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVz aC1zZXF1ZW5jZXMiPgotICAgICA8Y29tbWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJF U0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwvbGluaz4KLSAgICAgb3IgYnkgY29weWluZyB0aGUgY3Vy cmVudCBkYXRhIGZyb20gdGhlIHB1Ymxpc2hlciAocGVyaGFwcyB1c2luZwotICAgICA8Y29tbWFu ZD5wZ19kdW1wPC9jb21tYW5kPikgb3IgYnkgZGV0ZXJtaW5pbmcgYSBzdWZmaWNpZW50bHkgaGln aCB2YWx1ZQotICAgICBmcm9tIHRoZSB0YWJsZXMgdGhlbXNlbHZlcy4KLSAgICA8L3BhcmE+Ci0g ICA8L2xpc3RpdGVtPgotCiAgICA8bGlzdGl0ZW0+CiAgICAgPHBhcmE+CiAgICAgIFJlcGxpY2F0 aW9uIG9mIDxjb21tYW5kPlRSVU5DQVRFPC9jb21tYW5kPiBjb21tYW5kcyBpcyBzdXBwb3J0ZWQs IGJ1dApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9zdWJzY3JpcHRpb24uc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwKaW5kZXggMjdjMDY0 MzlmNGYuLjM4NWY2ODU0NTZiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1 YnNjcmlwdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9u LnNnbWwKQEAgLTE5MCwxMSArMTkwLDYgQEAgQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1FIFRPIDwKICAgICAg ICAgICBQcmV2aW91c2x5IHN1YnNjcmliZWQgdGFibGVzIGFyZSBub3QgY29waWVkLCBldmVuIGlm IGEgdGFibGUncyByb3cKICAgICAgICAgICBmaWx0ZXIgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+ IGNsYXVzZSBoYXMgc2luY2UgYmVlbiBtb2RpZmllZC4KICAgICAgICAgIDwvcGFyYT4KLSAgICAg ICAgIDxwYXJhPgotICAgICAgICAgIFByZXZpb3VzbHkgc3Vic2NyaWJlZCBzZXF1ZW5jZXMgYXJl IG5vdCByZS1zeW5jaHJvbml6ZWQuIFRvIGRvIHRoYXQsCi0gICAgICAgICAgdXNlIDxsaW5rIGxp bmtlbmQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVzaC1zZXF1ZW5jZXMiPgot ICAgICAgICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5D RVM8L2NvbW1hbmQ+PC9saW5rPi4KLSAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgog ICAgICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJzZXF1ZW5jZS1kZWZpbml0aW9uLW1pc21hdGNo ZXMiLz4gZm9yIHJlY29tbWVuZGF0aW9ucyBvbiBob3cKICAgICAgICAgICB0byBoYW5kbGUgYW55 IHdhcm5pbmdzIGFib3V0IHNlcXVlbmNlIGRlZmluaXRpb24gZGlmZmVyZW5jZXMgYmV0d2VlbgpA QCAtMjM2LDEwICsyMzEsNiBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPAogICAgICAgcmVjb21t ZW5kYXRpb25zIG9uIGhvdyB0byBoYW5kbGUgYW55IHdhcm5pbmdzIGFib3V0IHNlcXVlbmNlIGRl ZmluaXRpb24KICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHB1Ymxpc2hlciBhbmQgdGhl IHN1YnNjcmliZXIuCiAgICAgIDwvcGFyYT4KLSAgICAgPHBhcmE+Ci0gICAgICBTZWUgPHhyZWYg bGlua2VuZD0ic2VxdWVuY2VzLW91dC1vZi1zeW5jIi8+IGZvciByZWNvbW1lbmRhdGlvbnMgb24g aG93IHRvCi0gICAgICBpZGVudGlmeSBhbmQgaGFuZGxlIG91dC1vZi1zeW5jIHNlcXVlbmNlcy4K LSAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggZTFiODA4YmJiNjAuLmFhODE1ZGQxOWFmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMKQEAgLTkyOSw2ICs5MjksMzMgQEAgbGFzdHZhbChQR19GVU5DVElP Tl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQpOwogfQogCisvKgorICogUmVhZCB0aGUg Y3VycmVudCBzZXF1ZW5jZSB2YWx1ZXMgKGxhc3RfdmFsdWUgYW5kIGlzX2NhbGxlZCkKKyAqCisg KiBUaGlzIGlzIGEgcmVhZC1vbmx5IG9wZXJhdGlvbiB1c2VkIGJ5IGxvZ2ljYWwgcmVwbGljYXRp b24gc2VxdWVuY2UKKyAqIHN5bmNocm9uaXphdGlvbiB0byBkZXRlY3QgZHJpZnQuCisgKi8KK3Zv aWQKK0dldFNlcXVlbmNlKFJlbGF0aW9uIHNlcXJlbCwgaW50NjQgKmxhc3RfdmFsdWUsIGJvb2wg KmlzX2NhbGxlZCkKK3sKKwlCdWZmZXIJCWJ1ZjsKKwlIZWFwVHVwbGVEYXRhIHNlcXR1cGxlOwor CUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisKKwkvKiBDb25maXJtIHRoYXQgdGhlIHJlbGF0 aW9uIGlzIGEgc2VxdWVuY2UgKi8KKwlBc3NlcnQoc2VxcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0g UkVMS0lORF9TRVFVRU5DRSk7CisKKwkvKiBSZWFkIHRoZSBzZXF1ZW5jZSB0dXBsZSAqLworCXNl cSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKworCS8qIEV4dHJh Y3QgdGhlIHZhbHVlcyAqLworCSpsYXN0X3ZhbHVlID0gc2VxLT5sYXN0X3ZhbHVlOworCSppc19j YWxsZWQgPSBzZXEtPmlzX2NhbGxlZDsKKworCS8qIFJlbGVhc2UgYnVmZmVyICovCisJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWYpOworfQorCiAvKgogICogTWFpbiBpbnRlcm5hbCBwcm9jZWR1cmUg dGhhdCBoYW5kbGVzIDIgJiAzIGFyZyBmb3JtcyBvZiBTRVRWQUwuCiAgKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMKaW5kZXggMTY1ZjkwOWIzYmEu LjliNTAyYTg5ZGQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NlcXVlbmNlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2Vx dWVuY2VzeW5jLmMKQEAgLTE5LDEwICsxOSw2IEBACiAgKiBDUkVBVEUgU1VCU0NSSVBUSU9OCiAg KiBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04KICAqCi0gKiBFeGVj dXRpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJlc2V0cyBhbGwgc2VxdWVuY2VzIGluIHRoZSBz dWJzY3JpcHRpb24gdG8KLSAqIHN0YXRlIElOSVQsIHRyaWdnZXJpbmcgcmUtc3luY2hyb25pemF0 aW9uOgotICogQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUwotICoKICAq IFRoZSBhcHBseSB3b3JrZXIgcGVyaW9kaWNhbGx5IHNjYW5zIHBnX3N1YnNjcmlwdGlvbl9yZWwg Zm9yIHNlcXVlbmNlcyBpbgogICogSU5JVCBzdGF0ZS4gV2hlbiBzdWNoIHNlcXVlbmNlcyBhcmUg Zm91bmQsIGl0IHNwYXducyBhIHNlcXVlbmNlc3luYyB3b3JrZXIKICAqIHRvIGhhbmRsZSBzeW5j aHJvbml6YXRpb24uCkBAIC0zNiw4ICszMiwyNCBAQAogICogbG9jYWwgc3Vic2NyaWJlciwgYW5k IGZpbmFsbHkgbWFya3MgZWFjaCBzZXF1ZW5jZSBhcyBSRUFEWSB1cG9uIHN1Y2Nlc3NmdWwKICAq IHN5bmNocm9uaXphdGlvbi4KICAqCisgKiBUaGUgc2VxdWVuY2VzeW5jIHdvcmtlciB0aGVuIGZl dGNoZXMgYWxsIHNlcXVlbmNlcyB0aGF0IGFyZQorICogaW4gdGhlIFJFQURZIHN0YXRlLCBxdWVy aWVzIHRoZSBwdWJsaXNoZXIgZm9yIGN1cnJlbnQgc2VxdWVuY2UgdmFsdWVzLCBhbmQKKyAqIHVw ZGF0ZXMgYW55IHNlcXVlbmNlcyB0aGF0IGhhdmUgZHJpZnRlZCBhbmQgdGhlbiBnb2VzIHRvIHNs ZWVwLiBUaGUgc2xlZXAKKyAqIGludGVydmFsIHN0YXJ0cyBhcyBTRVFTWU5DX01JTl9TTEVFUF9N UyBhbmQgZG91YmxlcyBhZnRlciBlYWNoIHdha2UgY3ljbGUKKyAqICh1cCB0byBTRVFTWU5DX01B WF9TTEVFUF9NUykuIFdoZW4gZHJpZnQgaXMgZGV0ZWN0ZWQsIHRoZSBpbnRlcnZhbCByZXNldHMg dG8KKyAqIHRoZSBtaW5pbXVtIHRvIGVuc3VyZSB0aW1lbHkgdXBkYXRlcy4KKyAqCisgKiBBZnRl ciBDUkVBVEUgU1VCU0NSSVBUSU9OLCBzZXF1ZW5jZXMgYmVnaW4gaW4gdGhlIElOSVQgc3RhdGUu IFNlcXVlbmNlcworICogYWRkZWQgdGhyb3VnaCBBTFRFUiBTVUJTQ1JJUFRJT04uLiBSRUZSRVNI IFBVQkxJQ0FUSU9OIGFsc28gc3RhcnQgaW4gdGhlIElOSVQKKyAqIHN0YXRlLiBBbGwgSU5JVCBz ZXF1ZW5jZXMgYXJlIHN5bmNocm9uaXplZCB1bmNvbmRpdGlvbmFsbHksIHRoZW4gdHJhbnNpdGlv bgorICogdG8gdGhlIFJFQURZIHN0YXRlLiBPbmNlIGluIHRoZSBSRUFEWSBzdGF0ZSwgc2VxdWVu Y2VzIGFyZSBjaGVja2VkIGZvciBkcmlmdAorICogZnJvbSB0aGUgcHVibGlzaGVyIGFuZCBzeW5j aHJvbml6ZWQgb25seSB3aGVuIGRyaWZ0IGlzIGRldGVjdGVkLgorICoKICAqIFNlcXVlbmNlIHN0 YXRlIHRyYW5zaXRpb25zIGZvbGxvdyB0aGlzIHBhdHRlcm46Ci0gKiAgIElOSVQgLT4gUkVBRFkK KyAqICBJTklUIC0tPiBSRUFEWSAtPi0rCisgKiAgICAgICAgICAgICBeICAgICAgfCAoY2hlY2sv c3luY2hyb25pemUpCisgKiAgICAgICAgICAgICB8ICAgICAgfAorICogICAgICAgICAgICAgKy0t PC0tLSsKICAqCiAgKiBUbyBhdm9pZCBjcmVhdGluZyB0b28gbWFueSB0cmFuc2FjdGlvbnMsIHVw IHRvIE1BWF9TRVFVRU5DRVNfU1lOQ19QRVJfQkFUQ0gKICAqIHNlcXVlbmNlcyBhcmUgc3luY2hy b25pemVkIHBlciB0cmFuc2FjdGlvbi4gVGhlIGxvY2tzIG9uIHRoZSBzZXF1ZW5jZQpAQCAtNjAs NiArNzIsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdy b2lkcy5oIgpAQCAtNzgsMjEgKzkxLDI3IEBAIHR5cGVkZWYgZW51bSBDb3B5U2VxUmVzdWx0CiAJ Q09QWVNFUV9TVUNDRVNTLAogCUNPUFlTRVFfTUlTTUFUQ0gsCiAJQ09QWVNFUV9JTlNVRkZJQ0lF TlRfUEVSTSwKLQlDT1BZU0VRX1NLSVBQRUQKKwlDT1BZU0VRX1NLSVBQRUQsCisJQ09QWVNFUV9O T1dPUkssCiB9IENvcHlTZXFSZXN1bHQ7CiAKLXN0YXRpYyBMaXN0ICpzZXFpbmZvcyA9IE5JTDsK Ky8qIFNsZWVwIGludGVydmFscyBmb3Igc3luYyAqLworI2RlZmluZSBTRVFTWU5DX01JTl9TTEVF UF9NUyAyMDAwCQkvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgU0VRU1lOQ19NQVhfU0xFRVBfTVMg MzAwMDAJCS8qIDMwIHNlY29uZHMgKi8KKworc3RhdGljIGxvbmcgc2xlZXBfbXMgPSBTRVFTWU5D X01JTl9TTEVFUF9NUzsKIAogLyoKLSAqIEFwcGx5IHdvcmtlciBkZXRlcm1pbmVzIGlmIHNlcXVl bmNlIHN5bmNocm9uaXphdGlvbiBpcyBuZWVkZWQuCisgKiBBcHBseSB3b3JrZXIgZGV0ZXJtaW5l cyB3aGV0aGVyIGEgc2VxdWVuY2Ugc3luYyB3b3JrZXIgaXMgbmVlZGVkLgogICoKLSAqIFN0YXJ0 IGEgc2VxdWVuY2VzeW5jIHdvcmtlciBpZiBvbmUgaXMgbm90IGFscmVhZHkgcnVubmluZy4gVGhl IGFjdGl2ZQotICogc2VxdWVuY2VzeW5jIHdvcmtlciB3aWxsIGhhbmRsZSBhbGwgcGVuZGluZyBz ZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24uIElmIGFueQotICogc2VxdWVuY2VzIHJlbWFpbiB1bnN5 bmNocm9uaXplZCBhZnRlciBpdCBleGl0cywgYSBuZXcgd29ya2VyIGNhbiBiZSBzdGFydGVkCi0g KiBpbiB0aGUgbmV4dCBpdGVyYXRpb24uCisgKiBDaGVjayBpZiB0aGUgc3Vic2NyaXB0aW9uIGlu Y2x1ZGVzIHNlcXVlbmNlcyBhbmQgc3RhcnQgYSBzZXF1ZW5jZXN5bmMKKyAqIHdvcmtlciBpZiBv bmUgaXMgbm90IGFscmVhZHkgcnVubmluZy4gVGhlIGFjdGl2ZSBzZXF1ZW5jZXN5bmMgd29ya2Vy IHdpbGwKKyAqIGhhbmRsZSBhbGwgcGVuZGluZyBzZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24uIElm IGFueSBzZXF1ZW5jZXMgcmVtYWluCisgKiB1bnN5bmNocm9uaXplZCBhZnRlciBpdCBleGl0cywg YSBuZXcgd29ya2VyIGNhbiBiZSBzdGFydGVkIGluIHRoZSBuZXh0CisgKiBpdGVyYXRpb24uCiAg Ki8KIHZvaWQKLVByb2Nlc3NTZXF1ZW5jZXNGb3JTeW5jKHZvaWQpCitNYXliZUxhdW5jaFNlcXVl bmNlU3luY1dvcmtlcih2b2lkKQogewogCUxvZ2ljYWxSZXBXb3JrZXIgKnNlcXVlbmNlc3luY193 b3JrZXI7CiAJaW50CQkJbnN5bmN3b3JrZXJzOwpAQCAtMTQ0LDcgKzE2Myw3IEBAIFByb2Nlc3NT ZXF1ZW5jZXNGb3JTeW5jKHZvaWQpCiAgKiBmb3IgdGhlIGdpdmVuIGxpc3Qgb2Ygc2VxdWVuY2Ug aW5kZXhlcy4KICAqLwogc3RhdGljIHZvaWQKLWdldF9zZXF1ZW5jZXNfc3RyaW5nKExpc3QgKnNl cWluZGV4ZXMsIFN0cmluZ0luZm8gYnVmKQorZ2V0X3NlcXVlbmNlc19zdHJpbmcoTGlzdCAqc2Vx aW5kZXhlcywgTGlzdCAqc2VxaW5mb3MsIFN0cmluZ0luZm8gYnVmKQogewogCXJlc2V0U3RyaW5n SW5mbyhidWYpOwogCWZvcmVhY2hfaW50KHNlcWlkeCwgc2VxaW5kZXhlcykKQEAgLTE3MSw3ICsx OTAsNyBAQCBnZXRfc2VxdWVuY2VzX3N0cmluZyhMaXN0ICpzZXFpbmRleGVzLCBTdHJpbmdJbmZv IGJ1ZikKICAqLwogc3RhdGljIHZvaWQKIHJlcG9ydF9zZXF1ZW5jZV9lcnJvcnMoTGlzdCAqbWlz bWF0Y2hlZF9zZXFzX2lkeCwgTGlzdCAqaW5zdWZmcGVybV9zZXFzX2lkeCwKLQkJCQkJICAgTGlz dCAqbWlzc2luZ19zZXFzX2lkeCkKKwkJCQkJICAgTGlzdCAqbWlzc2luZ19zZXFzX2lkeCwgTGlz dCAqc2VxaW5mb3MpCiB7CiAJU3RyaW5nSW5mbwlzZXFzdHI7CiAKQEAgLTE4Myw3ICsyMDIsNyBA QCByZXBvcnRfc2VxdWVuY2VfZXJyb3JzKExpc3QgKm1pc21hdGNoZWRfc2Vxc19pZHgsIExpc3Qg Kmluc3VmZnBlcm1fc2Vxc19pZHgsCiAKIAlpZiAobWlzbWF0Y2hlZF9zZXFzX2lkeCkKIAl7Ci0J CWdldF9zZXF1ZW5jZXNfc3RyaW5nKG1pc21hdGNoZWRfc2Vxc19pZHgsIHNlcXN0cik7CisJCWdl dF9zZXF1ZW5jZXNfc3RyaW5nKG1pc21hdGNoZWRfc2Vxc19pZHgsIHNlcWluZm9zLCBzZXFzdHIp OwogCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQllcnJtc2dfcGx1cmFsKCJtaXNtYXRjaGVkIG9yIHJl bmFtZWQgc2VxdWVuY2Ugb24gc3Vic2NyaWJlciAoJXMpIiwKQEAgLTE5NCw3ICsyMTMsNyBAQCBy ZXBvcnRfc2VxdWVuY2VfZXJyb3JzKExpc3QgKm1pc21hdGNoZWRfc2Vxc19pZHgsIExpc3QgKmlu c3VmZnBlcm1fc2Vxc19pZHgsCiAKIAlpZiAoaW5zdWZmcGVybV9zZXFzX2lkeCkKIAl7Ci0JCWdl dF9zZXF1ZW5jZXNfc3RyaW5nKGluc3VmZnBlcm1fc2Vxc19pZHgsIHNlcXN0cik7CisJCWdldF9z ZXF1ZW5jZXNfc3RyaW5nKGluc3VmZnBlcm1fc2Vxc19pZHgsIHNlcWluZm9zLCBzZXFzdHIpOwog CQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJF UkVRVUlTSVRFX1NUQVRFKSwKIAkJCQllcnJtc2dfcGx1cmFsKCJpbnN1ZmZpY2llbnQgcHJpdmls ZWdlcyBvbiBzZXF1ZW5jZSAoJXMpIiwKQEAgLTIwNSw3ICsyMjQsNyBAQCByZXBvcnRfc2VxdWVu Y2VfZXJyb3JzKExpc3QgKm1pc21hdGNoZWRfc2Vxc19pZHgsIExpc3QgKmluc3VmZnBlcm1fc2Vx c19pZHgsCiAKIAlpZiAobWlzc2luZ19zZXFzX2lkeCkKIAl7Ci0JCWdldF9zZXF1ZW5jZXNfc3Ry aW5nKG1pc3Npbmdfc2Vxc19pZHgsIHNlcXN0cik7CisJCWdldF9zZXF1ZW5jZXNfc3RyaW5nKG1p c3Npbmdfc2Vxc19pZHgsIHNlcWluZm9zLCBzZXFzdHIpOwogCQllcmVwb3J0KFdBUk5JTkcsCiAJ CQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJ CQllcnJtc2dfcGx1cmFsKCJtaXNzaW5nIHNlcXVlbmNlIG9uIHB1Ymxpc2hlciAoJXMpIiwKQEAg LTIyOSw3ICsyNDgsOCBAQCByZXBvcnRfc2VxdWVuY2VfZXJyb3JzKExpc3QgKm1pc21hdGNoZWRf c2Vxc19pZHgsIExpc3QgKmluc3VmZnBlcm1fc2Vxc19pZHgsCiAgKi8KIHN0YXRpYyBDb3B5U2Vx UmVzdWx0CiBnZXRfYW5kX3ZhbGlkYXRlX3NlcV9pbmZvKFR1cGxlVGFibGVTbG90ICpzbG90LCBS ZWxhdGlvbiAqc2VxdWVuY2VfcmVsLAotCQkJCQkJICBMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICoq c2VxaW5mbywgaW50ICpzZXFpZHgpCisJCQkJCQkgIExvZ2ljYWxSZXBTZXF1ZW5jZUluZm8gKipz ZXFpbmZvLCBpbnQgKnNlcWlkeCwKKwkJCQkJCSAgTGlzdCAqc2VxaW5mb3MpCiB7CiAJYm9vbAkJ aXNudWxsOwogCWludAkJCWNvbCA9IDA7CkBAIC0zMjUsMTEgKzM0NSwxMiBAQCBnZXRfYW5kX3Zh bGlkYXRlX3NlcV9pbmZvKFR1cGxlVGFibGVTbG90ICpzbG90LCBSZWxhdGlvbiAqc2VxdWVuY2Vf cmVsLAogfQogCiAvKgotICogQXBwbHkgcmVtb3RlIHNlcXVlbmNlIHN0YXRlIHRvIGxvY2FsIHNl cXVlbmNlIGFuZCBtYXJrIGl0IGFzCi0gKiBzeW5jaHJvbml6ZWQgKFJFQURZKS4KKyAqIEFwcGx5 IHJlbW90ZSBzZXF1ZW5jZSBzdGF0ZSB0byBsb2NhbCBzZXF1ZW5jZS4gSWYgd2UgYXJlIGRvaW5n IHRoaXMKKyAqIGZvciBzZXF1ZW5jZXMgaW4gdGhlIElOSVQgc3RhdGUsIG1vdmUgdGhlbSB0byB0 aGUgUkVBRFkgc3RhdGUgb25jZQorICogc3luY2hyb25pemVkLgogICovCiBzdGF0aWMgQ29weVNl cVJlc3VsdAotY29weV9zZXF1ZW5jZShMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXFpbmZvLCBP aWQgc2Vxb3duZXIpCitjb3B5X3NlcXVlbmNlKExvZ2ljYWxSZXBTZXF1ZW5jZUluZm8gKnNlcWlu Zm8sIE9pZCBzZXFvd25lciwgY2hhciByZWxzdGF0ZSkKIHsKIAlVc2VyQ29udGV4dCB1Y3h0Owog CUFjbFJlc3VsdAlhY2xyZXN1bHQ7CkBAIC0zNjgsMTkgKzM4OSw0NiBAQCBjb3B5X3NlcXVlbmNl KExvZ2ljYWxSZXBTZXF1ZW5jZUluZm8gKnNlcWluZm8sIE9pZCBzZXFvd25lcikKIAogCS8qCiAJ ICogUmVjb3JkIHRoZSByZW1vdGUgc2VxdWVuY2UncyBMU04gaW4gcGdfc3Vic2NyaXB0aW9uX3Jl bCBhbmQgbWFyayB0aGUKLQkgKiBzZXF1ZW5jZSBhcyBSRUFEWS4KKwkgKiBzZXF1ZW5jZSBhcyBS RUFEWSBpZiB1cGRhdGluZyBhIHNlcXVlbmNlIHRoYXQgaXMgaW4gSU5JVCBzdGF0ZS4KIAkgKi8K LQlVcGRhdGVTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCBzZXFvaWQs IFNVQlJFTF9TVEFURV9SRUFEWSwKLQkJCQkJCQkgICBzZXFpbmZvLT5wYWdlX2xzbiwgZmFsc2Up OworCWlmIChyZWxzdGF0ZSA9PSBTVUJSRUxfU1RBVEVfSU5JVCkKKwkJVXBkYXRlU3Vic2NyaXB0 aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgc2Vxb2lkLCBTVUJSRUxfU1RBVEVfUkVB RFksCisJCQkJCQkJCSAgIHNlcWluZm8tPnBhZ2VfbHNuLCBmYWxzZSk7CiAKIAlyZXR1cm4gQ09Q WVNFUV9TVUNDRVNTOwogfQogCisvKgorICogY2hlY2tfc2VxdWVuY2VfZHJpZnQKKyAqCisgKiBD aGVjayBpZiB0aGUgcmVtb3RlIHNlcXVlbmNlIHZhbHVlcyBkaWZmZXIgZnJvbSB0aGUgbG9jYWwg c2VxdWVuY2UuCisgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgYW55IHNlcXVlbmNlcyBkcmlmdGVk LgorICovCitzdGF0aWMgYm9vbAorY2hlY2tfc2VxdWVuY2VfZHJpZnQoUmVsYXRpb24gc2VxdWVu Y2VfcmVsLCBMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXFpbmZvKQoreworCWludDY0CQlsb2Nh bF9sYXN0X3ZhbHVlOworCWJvb2wJCWxvY2FsX2lzX2NhbGxlZDsKKworCS8qIEdldCBjdXJyZW50 IGxvY2FsIHNlcXVlbmNlIHN0YXRlICovCisJR2V0U2VxdWVuY2Uoc2VxdWVuY2VfcmVsLCAmbG9j YWxfbGFzdF92YWx1ZSwgJmxvY2FsX2lzX2NhbGxlZCk7CisKKwkvKiBDaGVjayBpZiB2YWx1ZXMg aGF2ZSBkcmlmdGVkIGFuZCByZXR1cm4gYWNjb3JkaW5nbHkgKi8KKwlyZXR1cm4gKGxvY2FsX2xh c3RfdmFsdWUgIT0gc2VxaW5mby0+bGFzdF92YWx1ZSB8fAorCQlsb2NhbF9pc19jYWxsZWQgIT0g c2VxaW5mby0+aXNfY2FsbGVkKTsKK30KKwogLyoKICAqIENvcHkgZXhpc3RpbmcgZGF0YSBvZiBz ZXF1ZW5jZXMgZnJvbSB0aGUgcHVibGlzaGVyLgorICoKKyAqIElmIHJlbHN0YXRlIGlzIFNVQlJF TF9TVEFURV9SRUFEWSwgb25seSBzeW5jaHJvbml6ZSBzZXF1ZW5jZXMgdGhhdAorICogaGF2ZSBk cmlmdGVkIGZyb20gdGhlaXIgcHVibGlzaGVyIHZhbHVlcy4gT3RoZXJ3aXNlLCBzeW5jaHJvbml6 ZQorICogYWxsIHNlcXVlbmNlcy4KKyAqCisgKiBSZXR1cm5zIHRydWUvZmFsc2UgaWYgYW55IHNl cXVlbmNlcyB3ZXJlIGFjdHVhbGx5IGNvcGllZC4KICAqLwotc3RhdGljIHZvaWQKLWNvcHlfc2Vx dWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKK3N0YXRpYyBib29sCitjb3B5X3NlcXVlbmNl cyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sIExpc3QgKnNlcWluZm9zKQogewogCWludAkJCWN1cl9i YXRjaF9iYXNlX2luZGV4ID0gMDsKIAlpbnQJCQluX3NlcWluZm9zID0gbGlzdF9sZW5ndGgoc2Vx aW5mb3MpOwpAQCAtMzkwLDEzICs0MzgsMTAgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJD b25uICpjb25uKQogCVN0cmluZ0luZm8Jc2Vxc3RyID0gbWFrZVN0cmluZ0luZm8oKTsKIAlTdHJp bmdJbmZvCWNtZCA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJ Ym9vbAkJc2VxdWVuY2VfY29waWVkID0gZmFsc2U7CiAKICNkZWZpbmUgTUFYX1NFUVVFTkNFU19T WU5DX1BFUl9CQVRDSCAxMDAKIAotCWVsb2coREVCVUcxLAotCQkgImxvZ2ljYWwgcmVwbGljYXRp b24gc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIC0gdG90 YWwgdW5zeW5jaHJvbml6ZWQ6ICVkIiwKLQkJIE15U3Vic2NyaXB0aW9uLT5uYW1lLCBuX3NlcWlu Zm9zKTsKLQogCXdoaWxlIChjdXJfYmF0Y2hfYmFzZV9pbmRleCA8IG5fc2VxaW5mb3MpCiAJewog CQlPaWQJCQlzZXFSb3dbUkVNT1RFX1NFUV9DT0xfQ09VTlRdID0ge0lOVDhPSUQsIElOVDhPSUQs CkBAIC00MDYsNiArNDUxLDcgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25u KQogCQlpbnQJCQliYXRjaF9taXNtYXRjaGVkX2NvdW50ID0gMDsKIAkJaW50CQkJYmF0Y2hfc2tp cHBlZF9jb3VudCA9IDA7CiAJCWludAkJCWJhdGNoX2luc3VmZnBlcm1fY291bnQgPSAwOworCQlp bnQJCQliYXRjaF9ub19kcmlmdCA9IDA7CiAJCWludAkJCWJhdGNoX21pc3NpbmdfY291bnQ7CiAJ CVJlbGF0aW9uCXNlcXVlbmNlX3JlbCA9IE5VTEw7CiAKQEAgLTUwMSwyMCArNTQ3LDM0IEBAIGNv cHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJCX0KIAogCQkJc3luY19zdGF0 dXMgPSBnZXRfYW5kX3ZhbGlkYXRlX3NlcV9pbmZvKHNsb3QsICZzZXF1ZW5jZV9yZWwsCi0JCQkJ CQkJCQkJCQkJJnNlcWluZm8sICZzZXFpZHgpOworCQkJCQkJCQkJCQkJCSZzZXFpbmZvLCAmc2Vx aWR4LCBzZXFpbmZvcyk7CisKKwkJCS8qCisJCQkgKiBGb3Igc2VxdWVuY2VzIGluIElOSVQgc3Rh dGUsIGFsd2F5cyBzeW5jLgorCQkJICogT3RoZXJ3aXNlLCBmb3Igc2VxdWVuY2VzIGluIFJFQURZ IHN0YXRlLCBvbmx5IHN5bmMgaWYgdGhlcmUncyBkcmlmdC4KKwkJCSAqLwogCQkJaWYgKHN5bmNf c3RhdHVzID09IENPUFlTRVFfU1VDQ0VTUykKLQkJCQlzeW5jX3N0YXR1cyA9IGNvcHlfc2VxdWVu Y2Uoc2VxaW5mbywKLQkJCQkJCQkJCQkJc2VxdWVuY2VfcmVsLT5yZF9yZWwtPnJlbG93bmVyKTsK KwkJCXsKKwkJCQlpZiAoKHNlcWluZm8tPnJlbHN0YXRlID09IFNVQlJFTF9TVEFURV9JTklUKSB8 fAorCQkJCSAgIGNoZWNrX3NlcXVlbmNlX2RyaWZ0KHNlcXVlbmNlX3JlbCwgc2VxaW5mbykpCisJ CQkJCXN5bmNfc3RhdHVzID0gY29weV9zZXF1ZW5jZShzZXFpbmZvLAorCQkJCQkJCQkJCQkJc2Vx dWVuY2VfcmVsLT5yZF9yZWwtPnJlbG93bmVyLAorCQkJCQkJCQkJCQkJc2VxaW5mby0+cmVsc3Rh dGUpOworCQkJCWVsc2UKKwkJCQkJc3luY19zdGF0dXMgPSBDT1BZU0VRX05PV09SSzsKKwkJCX0K IAogCQkJc3dpdGNoIChzeW5jX3N0YXR1cykKIAkJCXsKIAkJCQljYXNlIENPUFlTRVFfU1VDQ0VT UzoKIAkJCQkJZWxvZyhERUJVRzEsCi0JCQkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gc3luY2hy b25pemF0aW9uIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiLCBzZXF1ZW5jZSBcIiVzLiVzXCIgaGFz IGZpbmlzaGVkIiwKKwkJCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBzeW5jIGZvciBzdWJzY3Jp cHRpb24gXCIlc1wiLCBzZXF1ZW5jZSBcIiVzLiVzXCIgaGFzIGJlZW4gdXBkYXRlZCIsCiAJCQkJ CQkgTXlTdWJzY3JpcHRpb24tPm5hbWUsIHNlcWluZm8tPm5zcG5hbWUsCiAJCQkJCQkgc2VxaW5m by0+c2VxbmFtZSk7CiAJCQkJCWJhdGNoX3N1Y2NlZWRlZF9jb3VudCsrOworCQkJCQlzZXF1ZW5j ZV9jb3BpZWQgPSB0cnVlOwogCQkJCQlicmVhazsKKwogCQkJCWNhc2UgQ09QWVNFUV9NSVNNQVRD SDoKIAogCQkJCQkvKgpAQCAtNTI4LDYgKzU4OCw3IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2Vp dmVyQ29ubiAqY29ubikKIAkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CiAJCQkJ CWJhdGNoX21pc21hdGNoZWRfY291bnQrKzsKIAkJCQkJYnJlYWs7CisKIAkJCQljYXNlIENPUFlT RVFfSU5TVUZGSUNJRU5UX1BFUk06CiAKIAkJCQkJLyoKQEAgLTU0MSw2ICs2MDIsNyBAQCBjb3B5 X3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJCQkJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjdHgpOwogCQkJCQliYXRjaF9pbnN1ZmZwZXJtX2NvdW50Kys7CiAJCQkJCWJyZWFr OworCiAJCQkJY2FzZSBDT1BZU0VRX1NLSVBQRUQ6CiAKIAkJCQkJLyoKQEAgLTU1OCw2ICs2MjAs MTUgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQkJCQkJYmF0Y2hf c2tpcHBlZF9jb3VudCsrOwogCQkJCQl9CiAJCQkJCWJyZWFrOworCisJCQkJY2FzZSBDT1BZU0VR X05PV09SSzoKKwkJCQkJLyogTm90aGluZyB0byBkbyAqLworCQkJCQliYXRjaF9ub19kcmlmdCsr OworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1IsICJ1bnJlY29n bml6ZWQgU2VxdWVuY2UgcmVwbGljYXRpb24gcmVzdWx0OiAlZCIsIChpbnQpIHN5bmNfc3RhdHVz KTsKKwogCQkJfQogCiAJCQlpZiAoc2VxdWVuY2VfcmVsKQpAQCAtNTcyLDE0ICs2NDMsMTUgQEAg Y29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQliYXRjaF9taXNzaW5nX2Nv dW50ID0gYmF0Y2hfc2l6ZSAtIChiYXRjaF9zdWNjZWVkZWRfY291bnQgKwogCQkJCQkJCQkJCQli YXRjaF9taXNtYXRjaGVkX2NvdW50ICsKIAkJCQkJCQkJCQkJYmF0Y2hfaW5zdWZmcGVybV9jb3Vu dCArCi0JCQkJCQkJCQkJCWJhdGNoX3NraXBwZWRfY291bnQpOworCQkJCQkJCQkJCQliYXRjaF9z a2lwcGVkX2NvdW50ICsKKwkJCQkJCQkJCQkJYmF0Y2hfbm9fZHJpZnQpOwogCiAJCWVsb2coREVC VUcxLAotCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiBm b3Igc3Vic2NyaXB0aW9uIFwiJXNcIiAtIGJhdGNoICMlZCA9ICVkIGF0dGVtcHRlZCwgJWQgc3Vj Y2VlZGVkLCAlZCBtaXNtYXRjaGVkLCAlZCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiwgJWQgbWlz c2luZyBmcm9tIHB1Ymxpc2hlciwgJWQgc2tpcHBlZCIsCi0JCQkgTXlTdWJzY3JpcHRpb24tPm5h bWUsCi0JCQkgKGN1cl9iYXRjaF9iYXNlX2luZGV4IC8gTUFYX1NFUVVFTkNFU19TWU5DX1BFUl9C QVRDSCkgKyAxLAotCQkJIGJhdGNoX3NpemUsIGJhdGNoX3N1Y2NlZWRlZF9jb3VudCwgYmF0Y2hf bWlzbWF0Y2hlZF9jb3VudCwKLQkJCSBiYXRjaF9pbnN1ZmZwZXJtX2NvdW50LCBiYXRjaF9taXNz aW5nX2NvdW50LCBiYXRjaF9za2lwcGVkX2NvdW50KTsKKwkJICJsb2dpY2FsIHJlcGxpY2F0aW9u IHNlcXVlbmNlIHN5bmNocm9uaXphdGlvbiBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiAtIGJhdGNo ICMlZCA9ICVkIGF0dGVtcHRlZCwgJWQgc3VjY2VlZGVkLCAlZCBtaXNtYXRjaGVkLCAlZCBpbnN1 ZmZpY2llbnQgcGVybWlzc2lvbiwgJWQgbWlzc2luZyBmcm9tIHB1Ymxpc2hlciwgJWQgc2tpcHBl ZCwgJWQgbm8gZHJpZnQiLAorCQkgTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCSAoY3VyX2JhdGNo X2Jhc2VfaW5kZXggLyBNQVhfU0VRVUVOQ0VTX1NZTkNfUEVSX0JBVENIKSArIDEsCisJCSBiYXRj aF9zaXplLCBiYXRjaF9zdWNjZWVkZWRfY291bnQsIGJhdGNoX21pc21hdGNoZWRfY291bnQsCisJ CSBiYXRjaF9pbnN1ZmZwZXJtX2NvdW50LCBiYXRjaF9taXNzaW5nX2NvdW50LCBiYXRjaF9za2lw cGVkX2NvdW50LCBiYXRjaF9ub19kcmlmdCk7CiAKIAkJLyogQ29tbWl0IHRoaXMgYmF0Y2gsIGFu ZCBwcmVwYXJlIGZvciBuZXh0IGJhdGNoICovCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgp OwpAQCAtNjA3LDUxICs2NzksNTMgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpj b25uKQogCiAJLyogUmVwb3J0IG1pc21hdGNoZXMsIHBlcm1pc3Npb24gaXNzdWVzLCBvciBtaXNz aW5nIHNlcXVlbmNlcyAqLwogCXJlcG9ydF9zZXF1ZW5jZV9lcnJvcnMobWlzbWF0Y2hlZF9zZXFz X2lkeCwgaW5zdWZmcGVybV9zZXFzX2lkeCwKLQkJCQkJCSAgIG1pc3Npbmdfc2Vxc19pZHgpOwor CQkJCQkJICAgbWlzc2luZ19zZXFzX2lkeCwgc2VxaW5mb3MpOworCisJcmV0dXJuIHNlcXVlbmNl X2NvcGllZDsKIH0KIAogLyoKICAqIElkZW50aWZpZXMgc2VxdWVuY2VzIHRoYXQgcmVxdWlyZSBz eW5jaHJvbml6YXRpb24gYW5kIGluaXRpYXRlcyB0aGUKICAqIHN5bmNocm9uaXphdGlvbiBwcm9j ZXNzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBzZXF1ZW5jZXMgaGF2ZSBiZWVuIHVwZGF0ZWQu CiAgKi8KLXN0YXRpYyB2b2lkCi1Mb2dpY2FsUmVwU3luY1NlcXVlbmNlcyh2b2lkKQorc3RhdGlj IGJvb2wKK0xvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIHsK LQljaGFyCSAgICplcnI7Ci0JYm9vbAkJbXVzdF91c2VfcGFzc3dvcmQ7CiAJUmVsYXRpb24JcmVs OwogCUhlYXBUdXBsZQl0dXA7Ci0JU2NhbktleURhdGEgc2tleVsyXTsKKwlTY2FuS2V5RGF0YSBz a2V5WzFdOwogCVN5c1NjYW5EZXNjIHNjYW47CiAJT2lkCQkJc3ViaWQgPSBNeUxvZ2ljYWxSZXBX b3JrZXItPnN1YmlkOwotCVN0cmluZ0luZm9EYXRhIGFwcF9uYW1lOworCWJvb2wJCXNlcXVlbmNl X2NvcGllZCA9IGZhbHNlOworCUxpc3QJICAgKnNlcWluZm9zID0gTklMOwogCiAJU3RhcnRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKIAogCXJlbCA9IHRhYmxlX29wZW4oU3Vic2NyaXB0aW9uUmVsUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAorCS8qIFNjYW4gZm9yIGFsbCBzZXF1ZW5jZXMg YmVsb25naW5nIHRvIHRoaXMgc3Vic2NyaXB0aW9uICovCiAJU2NhbktleUluaXQoJnNrZXlbMF0s CiAJCQkJQW51bV9wZ19zdWJzY3JpcHRpb25fcmVsX3Nyc3ViaWQsCiAJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAogCQkJCU9iamVjdElkR2V0RGF0dW0oc3ViaWQpKTsKIAotCVNj YW5LZXlJbml0KCZza2V5WzFdLAotCQkJCUFudW1fcGdfc3Vic2NyaXB0aW9uX3JlbF9zcnN1YnN0 YXRlLAotCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9DSEFSRVEsCi0JCQkJQ2hhckdldERh dHVtKFNVQlJFTF9TVEFURV9JTklUKSk7Ci0KIAlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHJl bCwgSW52YWxpZE9pZCwgZmFsc2UsCi0JCQkJCQkJICBOVUxMLCAyLCBza2V5KTsKKwkJCQkJCQkg IE5VTEwsIDEsIHNrZXkpOworCiAJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFi bGVfZ2V0bmV4dChzY2FuKSkpCiAJewogCQlGb3JtX3BnX3N1YnNjcmlwdGlvbl9yZWwgc3VicmVs OwogCQlMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXE7CiAJCVJlbGF0aW9uCXNlcXVlbmNlX3Jl bDsKIAkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisJCWNoYXIJCXJlbHN0YXRlOwogCiAJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJc3VicmVsID0gKEZvcm1fcGdfc3Vic2NyaXB0aW9uX3Jl bCkgR0VUU1RSVUNUKHR1cCk7CisJCXJlbHN0YXRlID0gc3VicmVsLT5zcnN1YnN0YXRlOwogCiAJ CXNlcXVlbmNlX3JlbCA9IHRyeV90YWJsZV9vcGVuKHN1YnJlbC0+c3JyZWxpZCwgUm93RXhjbHVz aXZlTG9jayk7CiAKQEAgLTY2Niw2ICs3NDAsOCBAQCBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyh2 b2lkKQogCQkJY29udGludWU7CiAJCX0KIAorCQlBc3NlcnQocmVsc3RhdGUgPT0gU1VCUkVMX1NU QVRFX0lOSVQgfHwgcmVsc3RhdGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZKTsKKwogCQkvKgogCQkg KiBXb3JrZXIgbmVlZHMgdG8gcHJvY2VzcyBzZXF1ZW5jZXMgYWNyb3NzIHRyYW5zYWN0aW9uIGJv dW5kYXJ5LCBzbwogCQkgKiBhbGxvY2F0ZSB0aGVtIHVuZGVyIGxvbmctbGl2ZWQgY29udGV4dC4K QEAgLTY3Niw2ICs3NTIsNyBAQCBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyh2b2lkKQogCQlzZXEt PmxvY2FscmVsaWQgPSBzdWJyZWwtPnNycmVsaWQ7CiAJCXNlcS0+bnNwbmFtZSA9IGdldF9uYW1l c3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShzZXF1ZW5jZV9yZWwpKTsKIAkJc2VxLT5z ZXFuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXF1ZW5jZV9yZWwpKTsK KwkJc2VxLT5yZWxzdGF0ZSA9IHJlbHN0YXRlOwogCQlzZXFpbmZvcyA9IGxhcHBlbmQoc2VxaW5m b3MsIHNlcSk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CkBAIC02OTMsMzYg Kzc3MCwxOSBAQCBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyh2b2lkKQogCSAqIEV4aXQgZWFybHkg aWYgbm8gY2F0YWxvZyBlbnRyaWVzIGZvdW5kLCBsaWtlbHkgZHVlIHRvIGNvbmN1cnJlbnQgZHJv cHMuCiAJICovCiAJaWYgKCFzZXFpbmZvcykKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAK LQkvKiBJcyB0aGUgdXNlIG9mIGEgcGFzc3dvcmQgbWFuZGF0b3J5PyAqLwotCW11c3RfdXNlX3Bh c3N3b3JkID0gTXlTdWJzY3JpcHRpb24tPnBhc3N3b3JkcmVxdWlyZWQgJiYKLQkJIU15U3Vic2Ny aXB0aW9uLT5vd25lcnN1cGVydXNlcjsKKwkvKiBQcm9jZXNzIHNlcXVlbmNlcyAqLworCXNlcXVl bmNlX2NvcGllZCA9IGNvcHlfc2VxdWVuY2VzKGNvbm4sIHNlcWluZm9zKTsKIAotCWluaXRTdHJp bmdJbmZvKCZhcHBfbmFtZSk7Ci0JYXBwZW5kU3RyaW5nSW5mbygmYXBwX25hbWUsICJwZ18ldV9z ZXF1ZW5jZV9zeW5jXyIgVUlOVDY0X0ZPUk1BVCwKLQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQs IEdldFN5c3RlbUlkZW50aWZpZXIoKSk7CisJLyogQ2xlYW4gdXAgKi8KKwlsaXN0X2ZyZWUoc2Vx aW5mb3MpOwogCi0JLyoKLQkgKiBFc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHB1Ymxp c2hlciBmb3Igc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uLgotCSAqLwotCUxvZ1JlcFdvcmtlcldh bFJjdkNvbm4gPQotCQl3YWxyY3ZfY29ubmVjdChNeVN1YnNjcmlwdGlvbi0+Y29ubmluZm8sIHRy dWUsIHRydWUsCi0JCQkJCSAgIG11c3RfdXNlX3Bhc3N3b3JkLAotCQkJCQkgICBhcHBfbmFtZS5k YXRhLCAmZXJyKTsKLQlpZiAoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9PSBOVUxMKQotCQllcmVw b3J0KEVSUk9SLAotCQkJCWVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAotCQkJ CWVycm1zZygic2VxdWVuY2VzeW5jIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBjb3Vs ZCBub3QgY29ubmVjdCB0byB0aGUgcHVibGlzaGVyOiAlcyIsCi0JCQkJCSAgIE15U3Vic2NyaXB0 aW9uLT5uYW1lLCBlcnIpKTsKLQotCXBmcmVlKGFwcF9uYW1lLmRhdGEpOwotCi0JY29weV9zZXF1 ZW5jZXMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CisJcmV0dXJuIHNlcXVlbmNlX2NvcGllZDsK IH0KIAogLyoKLSAqIEV4ZWN1dGUgdGhlIGluaXRpYWwgc3luYyB3aXRoIGVycm9yIGhhbmRsaW5n LiBEaXNhYmxlIHRoZSBzdWJzY3JpcHRpb24sCisgKiBFeGVjdXRlIHRoZSBzZXF1ZW5jZSBzeW5j IHdpdGggZXJyb3IgaGFuZGxpbmcuIERpc2FibGUgdGhlIHN1YnNjcmlwdGlvbiwKICAqIGlmIHJl cXVpcmVkLgogICoKICAqIE5vdGUgdGhhdCB3ZSBkb24ndCBoYW5kbGUgRkFUQUwgZXJyb3JzIHdo aWNoIGFyZSBwcm9iYWJseSBiZWNhdXNlIG9mIHN5c3RlbQpAQCAtNzM1LDggKzc5NSw5MCBAQCBz dGFydF9zZXF1ZW5jZV9zeW5jKHZvaWQpCiAKIAlQR19UUlkoKTsKIAl7Ci0JCS8qIENhbGwgaW5p dGlhbCBzeW5jLiAqLwotCQlMb2dpY2FsUmVwU3luY1NlcXVlbmNlcygpOworCQljaGFyICAgICAg ICplcnI7CisJCWJvb2wJCW11c3RfdXNlX3Bhc3N3b3JkOworCQlTdHJpbmdJbmZvRGF0YSBhcHBf bmFtZTsKKworCQkvKiBJcyB0aGUgdXNlIG9mIGEgcGFzc3dvcmQgbWFuZGF0b3J5PyAqLworCQlt dXN0X3VzZV9wYXNzd29yZCA9IE15U3Vic2NyaXB0aW9uLT5wYXNzd29yZHJlcXVpcmVkICYmCisJ CQkhTXlTdWJzY3JpcHRpb24tPm93bmVyc3VwZXJ1c2VyOworCisJCWluaXRTdHJpbmdJbmZvKCZh cHBfbmFtZSk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmFwcF9uYW1lLCAicGdfJXVfc2VxdWVuY2Vf c3luY18iIFVJTlQ2NF9GT1JNQVQsCisJCQkJCQkgTXlTdWJzY3JpcHRpb24tPm9pZCwgR2V0U3lz dGVtSWRlbnRpZmllcigpKTsKKworCQkvKgorCQkgKiBFc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24g dG8gdGhlIHB1Ymxpc2hlciBmb3Igc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uLgorCQkgKi8KKwkJ TG9nUmVwV29ya2VyV2FsUmN2Q29ubiA9CisJCQl3YWxyY3ZfY29ubmVjdChNeVN1YnNjcmlwdGlv bi0+Y29ubmluZm8sIHRydWUsIHRydWUsCisJCQkJCQkgICBtdXN0X3VzZV9wYXNzd29yZCwKKwkJ CQkJCSAgIGFwcF9uYW1lLmRhdGEsICZlcnIpOworCQlpZiAoTG9nUmVwV29ya2VyV2FsUmN2Q29u biA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0NPTk5F Q1RJT05fRkFJTFVSRSksCisJCQkJCWVycm1zZygic2VxdWVuY2VzeW5jIHdvcmtlciBmb3Igc3Vi c2NyaXB0aW9uIFwiJXNcIiBjb3VsZCBub3QgY29ubmVjdCB0byB0aGUgcHVibGlzaGVyOiAlcyIs CisJCQkJCQkgICBNeVN1YnNjcmlwdGlvbi0+bmFtZSwgZXJyKSk7CisKKwkJcGZyZWUoYXBwX25h bWUuZGF0YSk7CisKKwkJZm9yICg7OykKKwkJeworCQkJYm9vbCBzZXF1ZW5jZV9jb3BpZWQgPSBm YWxzZTsKKwkJCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCisKKwkJCS8qIE5lZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb24gZm9yIGNhY2hlIGxvb2t1 cCAqLworCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkJLyoKKwkJCSAqIENoZWNr IGlmIHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBkaXNhYmxlZC4KKwkJCSAqIFN3aXRjaCB0byBBcHBs eUNvbnRleHQgdGhhdCBvdXRsaXZlcyB0aGUgdHJhbnNhY3Rpb24gc28gdGhhdAorCQkJICogTXlT dWJzY3JpcHRpb24gcmVtYWlucyB2YWxpZCBldmVuIGFmdGVyIENvbW1pdFRyYW5zYWN0aW9uQ29t bWFuZCgpLgorCQkJICovCisJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlD b250ZXh0KTsKKwkJCU15U3Vic2NyaXB0aW9uID0gR2V0U3Vic2NyaXB0aW9uKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIGZhbHNlKTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgp OworCisJCQlpZiAoIU15U3Vic2NyaXB0aW9uLT5lbmFibGVkKQorCQkJeworCQkJCWVyZXBvcnQo TE9HLAorCQkJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBzZXF1ZW5jZXN5bmMgd29y a2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIHRoZSBzdWJzY3Jp cHRpb24gd2FzIGRpc2FibGVkIiwKKwkJCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJ CQkJcHJvY19leGl0KDApOworCQkJfQorCisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCQkJLyoKKwkJCSAqIFN5bmNocm9uaXplIGFsbCBzZXF1ZW5jZXMgKGJvdGggUkVBRFkgYW5k IElOSVQgc3RhdGVzKS4KKwkJCSAqLworCQkJc2VxdWVuY2VfY29waWVkID0gTG9naWNhbFJlcFN5 bmNTZXF1ZW5jZXMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubik7CisKKwkJCS8qIEFkanVzdCBzbGVl cCBpbnRlcnZhbCBiYXNlZCBvbiB3aGV0aGVyIHNlcXVlbmNlcyB3ZXJlIGNvcGllZCBvdmVyICov CisJCQlpZiAoc2VxdWVuY2VfY29waWVkKQorCQkJeworCQkJCXNsZWVwX21zID0gU0VRU1lOQ19N SU5fU0xFRVBfTVM7CisJCQl9CisJCQllbHNlCisJCQl7CisKKwkJCS8qCisJCQkgKiBEb3VibGUg dGhlIHNsZWVwIHRpbWUsIGJ1dCBub3QgYmV5b25kCisJCQkgKiB0aGUgbWF4aW11bSBhbGxvd2Fi bGUgdmFsdWUuCisJCQkgKi8KKwkJCQlzbGVlcF9tcyA9IE1pbihzbGVlcF9tcyAqIDIsIFNFUVNZ TkNfTUFYX1NMRUVQX01TKTsKKwkJCX0KKworCQkJLyogU2xlZXAgZm9yIHRoZSBjb25maWd1cmVk IGludGVydmFsICovCisJCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJCQkJIFdMX0xB VENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSBzbGVl cF9tcywKKwkJCQkJCQkgV0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNfU1RBVEVfQ0hBTkdFKTsKKwkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCX0KIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3N5bmN1dGlscy5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zeW5jdXRpbHMuYwppbmRleCA1MzVmZmI2ZjA5ZS4u YWM3NjY5YmMyNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv c3luY3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zeW5jdXRp bHMuYwpAQCAtMTcxLDcgKzE3MSw2IEBAIFByb2Nlc3NTeW5jaW5nUmVsYXRpb25zKFhMb2dSZWNQ dHIgY3VycmVudF9sc24pCiAKIAkJY2FzZSBXT1JLRVJUWVBFX0FQUExZOgogCQkJUHJvY2Vzc1N5 bmNpbmdUYWJsZXNGb3JBcHBseShjdXJyZW50X2xzbik7Ci0JCQlQcm9jZXNzU2VxdWVuY2VzRm9y U3luYygpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXT1JLRVJUWVBFX1NFUVVFTkNFU1lOQzoKQEAg LTE5MCwxMyArMTg5LDEzIEBAIFByb2Nlc3NTeW5jaW5nUmVsYXRpb25zKFhMb2dSZWNQdHIgY3Vy cmVudF9sc24pCiAgKgogICogVGhlIHBnX3N1YnNjcmlwdGlvbl9yZWwgY2F0YWxvZyBpcyBzaGFy ZWQgYnkgdGFibGVzIGFuZCBzZXF1ZW5jZXMuIENoYW5nZXMKICAqIHRvIGVpdGhlciBzZXF1ZW5j ZXMgb3IgdGFibGVzIGNhbiBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHJlbGF0aW9uIHN0YXRlcywg c28KLSAqIHdlIGlkZW50aWZ5IG5vbi1SRUFEWSB0YWJsZXMgYW5kIG5vbi1SRUFEWSBzZXF1ZW5j ZXMgdG9nZXRoZXIgdG8gZW5zdXJlCisgKiB3ZSBpZGVudGlmeSBub24tUkVBRFkgdGFibGVzIGFu ZCBzZXF1ZW5jZXMgKGluIGFueSBzdGF0ZSkgdG9nZXRoZXIgdG8gZW5zdXJlCiAgKiBjb25zaXN0 ZW5jeS4KICAqCiAgKiBoYXNfcGVuZGluZ19zdWJ0YWJsZXM6IHRydWUgaWYgdGhlIHN1YnNjcmlw dGlvbiBoYXMgb25lIG9yIG1vcmUgdGFibGVzIHRoYXQKICAqIGFyZSBub3QgaW4gUkVBRFkgc3Rh dGUsIG90aGVyd2lzZSBmYWxzZS4KICAqIGhhc19wZW5kaW5nX3N1YnNlcXVlbmNlczogdHJ1ZSBp ZiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBvbmUgb3IgbW9yZSBzZXF1ZW5jZXMKLSAqIHRoYXQgYXJl IG5vdCBpbiBSRUFEWSBzdGF0ZSwgb3RoZXJ3aXNlIGZhbHNlLgorICogKGluIGFueSBzdGF0ZSks IG90aGVyd2lzZSBmYWxzZS4KICAqLwogdm9pZAogRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpo YXNfcGVuZGluZ19zdWJ0YWJsZXMsCkBAIC0yMDQsNTMgKzIwMyw0NyBAQCBGZXRjaFJlbGF0aW9u U3RhdGVzKGJvb2wgKmhhc19wZW5kaW5nX3N1YnRhYmxlcywKIAkJCQkJYm9vbCAqc3RhcnRlZF90 eCkKIHsKIAkvKgotCSAqIGhhc19zdWJ0YWJsZXMgYW5kIGhhc19zdWJzZXF1ZW5jZXNfbm9uX3Jl YWR5IGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsCisJICogaGFzX3N1YnRhYmxlcyBhbmQgaGFzX3N1 YnNlcXVlbmNlcyBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLAogCSAqIHNpbmNlIHRoZSBzYW1lIHZh bHVlIGNhbiBiZSB1c2VkIHVudGlsIHRoZSBzeXN0ZW0gdGFibGUgaXMgaW52YWxpZGF0ZWQuCiAJ ICovCiAJc3RhdGljIGJvb2wgaGFzX3N1YnRhYmxlcyA9IGZhbHNlOwotCXN0YXRpYyBib29sIGhh c19zdWJzZXF1ZW5jZXNfbm9uX3JlYWR5ID0gZmFsc2U7Ci0KKwlzdGF0aWMgYm9vbCBoYXNfc3Vi c2VxdWVuY2VzID0gZmFsc2U7CiAJKnN0YXJ0ZWRfdHggPSBmYWxzZTsKLQogCWlmIChyZWxhdGlv bl9zdGF0ZXNfdmFsaWRpdHkgIT0gU1lOQ19SRUxBVElPTlNfU1RBVEVfVkFMSUQpCiAJewogCQlN ZW1vcnlDb250ZXh0IG9sZGN0eDsKIAkJTGlzdAkgICAqcnN0YXRlczsKKwkJTGlzdAkgICAqc2Vx X3N0YXRlczsKIAkJU3Vic2NyaXB0aW9uUmVsU3RhdGUgKnJzdGF0ZTsKLQogCQlyZWxhdGlvbl9z dGF0ZXNfdmFsaWRpdHkgPSBTWU5DX1JFTEFUSU9OU19TVEFURV9SRUJVSUxEX1NUQVJURUQ7Ci0J CWhhc19zdWJzZXF1ZW5jZXNfbm9uX3JlYWR5ID0gZmFsc2U7Ci0KKwkJaGFzX3N1YnNlcXVlbmNl cyA9IGZhbHNlOwogCQkvKiBDbGVhbiB0aGUgb2xkIGxpc3RzLiAqLwogCQlsaXN0X2ZyZWVfZGVl cCh0YWJsZV9zdGF0ZXNfbm90X3JlYWR5KTsKIAkJdGFibGVfc3RhdGVzX25vdF9yZWFkeSA9IE5J TDsKLQogCQlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQogCQl7CiAJCQlTdGFydFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCQkJKnN0YXJ0ZWRfdHggPSB0cnVlOwogCQl9Ci0KLQkJLyogRmV0Y2gg dGFibGVzIGFuZCBzZXF1ZW5jZXMgdGhhdCBhcmUgaW4gbm9uLVJFQURZIHN0YXRlLiAqLwotCQly c3RhdGVzID0gR2V0U3Vic2NyaXB0aW9uUmVsYXRpb25zKE15U3Vic2NyaXB0aW9uLT5vaWQsIHRy dWUsIHRydWUsCisJCS8qIEZldGNoIHRhYmxlcyB0aGF0IGFyZSBpbiBub24tUkVBRFkgc3RhdGUu ICovCisJCXJzdGF0ZXMgPSBHZXRTdWJzY3JpcHRpb25SZWxhdGlvbnMoTXlTdWJzY3JpcHRpb24t Pm9pZCwgdHJ1ZSwgZmFsc2UsCiAJCQkJCQkJCQkJICAgdHJ1ZSk7Ci0KKwkJLyogRmV0Y2ggYWxs IHNlcXVlbmNlcyAocmVnYXJkbGVzcyBvZiBzdGF0ZSkuICovCisJCXNlcV9zdGF0ZXMgPSBHZXRT dWJzY3JpcHRpb25SZWxhdGlvbnMoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UsIHRydWUsCisJ CQkJCQkJCQkJCSAgZmFsc2UpOwogCQkvKiBBbGxvY2F0ZSB0aGUgdHJhY2tpbmcgaW5mbyBpbiBh IHBlcm1hbmVudCBtZW1vcnkgY29udGV4dC4gKi8KIAkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CiAJCWZvcmVhY2hfcHRyKFN1YnNjcmlwdGlvblJl bFN0YXRlLCBzdWJyZWwsIHJzdGF0ZXMpCiAJCXsKLQkJCWlmIChnZXRfcmVsX3JlbGtpbmQoc3Vi cmVsLT5yZWxpZCkgPT0gUkVMS0lORF9TRVFVRU5DRSkKLQkJCQloYXNfc3Vic2VxdWVuY2VzX25v bl9yZWFkeSA9IHRydWU7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJcnN0YXRlID0gcGFsbG9jX29iamVj dChTdWJzY3JpcHRpb25SZWxTdGF0ZSk7Ci0JCQkJbWVtY3B5KHJzdGF0ZSwgc3VicmVsLCBzaXpl b2YoU3Vic2NyaXB0aW9uUmVsU3RhdGUpKTsKLQkJCQl0YWJsZV9zdGF0ZXNfbm90X3JlYWR5ID0g bGFwcGVuZCh0YWJsZV9zdGF0ZXNfbm90X3JlYWR5LAotCQkJCQkJCQkJCQkJIHJzdGF0ZSk7Ci0J CQl9CisJCQlyc3RhdGUgPSBwYWxsb2Nfb2JqZWN0KFN1YnNjcmlwdGlvblJlbFN0YXRlKTsKKwkJ CW1lbWNweShyc3RhdGUsIHN1YnJlbCwgc2l6ZW9mKFN1YnNjcmlwdGlvblJlbFN0YXRlKSk7CisJ CQl0YWJsZV9zdGF0ZXNfbm90X3JlYWR5ID0gbGFwcGVuZCh0YWJsZV9zdGF0ZXNfbm90X3JlYWR5 LAorCQkJCQkJCQkJCQkgcnN0YXRlKTsKIAkJfQorCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55 IHNlcXVlbmNlcy4gKi8KKwkJaGFzX3N1YnNlcXVlbmNlcyA9IChzZXFfc3RhdGVzICE9IE5JTCk7 CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCisJCWxpc3RfZnJlZV9kZWVwKHNl cV9zdGF0ZXMpOwogCQkvKgogCQkgKiBEb2VzIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSB0YWJsZXM/ CiAJCSAqCkBAIC0yNjAsNyArMjUzLDYgQEAgRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpoYXNf cGVuZGluZ19zdWJ0YWJsZXMsCiAJCSAqLwogCQloYXNfc3VidGFibGVzID0gKHRhYmxlX3N0YXRl c19ub3RfcmVhZHkgIT0gTklMKSB8fAogCQkJSGFzU3Vic2NyaXB0aW9uVGFibGVzKE15U3Vic2Ny aXB0aW9uLT5vaWQpOwotCiAJCS8qCiAJCSAqIElmIHRoZSBzdWJzY3JpcHRpb24gcmVsYXRpb24g Y2FjaGUgaGFzIGJlZW4gaW52YWxpZGF0ZWQgc2luY2Ugd2UKIAkJICogZW50ZXJlZCB0aGlzIHJv dXRpbmUsIHdlIHN0aWxsIHVzZSBhbmQgcmV0dXJuIHRoZSByZWxhdGlvbnMgd2UganVzdApAQCAt MjcxLDEwICsyNjMsOCBAQCBGZXRjaFJlbGF0aW9uU3RhdGVzKGJvb2wgKmhhc19wZW5kaW5nX3N1 YnRhYmxlcywKIAkJaWYgKHJlbGF0aW9uX3N0YXRlc192YWxpZGl0eSA9PSBTWU5DX1JFTEFUSU9O U19TVEFURV9SRUJVSUxEX1NUQVJURUQpCiAJCQlyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkgPSBT WU5DX1JFTEFUSU9OU19TVEFURV9WQUxJRDsKIAl9Ci0KIAlpZiAoaGFzX3BlbmRpbmdfc3VidGFi bGVzKQogCQkqaGFzX3BlbmRpbmdfc3VidGFibGVzID0gaGFzX3N1YnRhYmxlczsKLQogCWlmICho YXNfcGVuZGluZ19zdWJzZXF1ZW5jZXMpCi0JCSpoYXNfcGVuZGluZ19zdWJzZXF1ZW5jZXMgPSBo YXNfc3Vic2VxdWVuY2VzX25vbl9yZWFkeTsKKwkJKmhhc19wZW5kaW5nX3N1YnNlcXVlbmNlcyA9 IGhhc19zdWJzZXF1ZW5jZXM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYwppbmRleCAzMjcyNWM0ODYyMy4uNWI0NzliZTdlYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtNDIxOSw2ICs0MjE5LDcgQEAgTG9naWNhbFJlcEFw cGx5TG9vcChYTG9nUmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJCQlQcm9jZXNzQ29uZmlnRmlsZShQ R0NfU0lHSFVQKTsKIAkJfQogCisKIAkJaWYgKHJjICYgV0xfVElNRU9VVCkKIAkJewogCQkJLyoK QEAgLTQyNjYsNiArNDI2Nyw5IEBAIExvZ2ljYWxSZXBBcHBseUxvb3AoWExvZ1JlY1B0ciBsYXN0 X3JlY2VpdmVkKQogCiAJCQltYXliZV9hZHZhbmNlX25vbnJlbW92YWJsZV94aWQoJnJkdF9kYXRh LCBmYWxzZSk7CiAKKwkJCS8qIENoZWNrIGlmIGFueSBuZXcgc2VxdWVuY2VzIG5lZWQgc3luY2lu ZyAqLworCQkJTWF5YmVMYXVuY2hTZXF1ZW5jZVN5bmNXb3JrZXIoKTsKKwogCQkJLyoKIAkJCSAq IEZvcmNlIHJlcG9ydGluZyB0byBlbnN1cmUgbG9uZyBpZGxlIHBlcmlvZHMgZG9uJ3QgbGVhZCB0 bwogCQkJICogYXJiaXRyYXJpbHkgZGVsYXllZCBzdGF0cy4gU3RhdHMgY2FuIG9ubHkgYmUgcmVw b3J0ZWQgb3V0c2lkZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5j IGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDhiOTFiYzAwMDYyLi5iOGJk ZmViYjE1YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBi L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMjMzMSw4ICsyMzMxLDggQEAgbWF0 Y2hfcHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQsCiAJLyogQUxURVIgU1VCU0NSSVBUSU9O IDxuYW1lPiAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlNVQlNDUklQVElPTiIsIE1h dGNoQW55KSkKIAkJQ09NUExFVEVfV0lUSCgiQ09OTkVDVElPTiIsICJFTkFCTEUiLCAiRElTQUJM RSIsICJPV05FUiBUTyIsCi0JCQkJCSAgIlJFTkFNRSBUTyIsICJSRUZSRVNIIFBVQkxJQ0FUSU9O IiwgIlJFRlJFU0ggU0VRVUVOQ0VTIiwKLQkJCQkJICAiU0VUIiwgIlNLSVAgKCIsICJBREQgUFVC TElDQVRJT04iLCAiRFJPUCBQVUJMSUNBVElPTiIpOworCQkJCQkgICJSRU5BTUUgVE8iLCAiUkVG UkVTSCBQVUJMSUNBVElPTiIsICJTRVQiLCAiU0tJUCAoIiwKKwkJCQkJICAiQUREIFBVQkxJQ0FU SU9OIiwgIkRST1AgUFVCTElDQVRJT04iKTsKIAkvKiBBTFRFUiBTVUJTQ1JJUFRJT04gPG5hbWU+ IFJFRlJFU0ggKi8KIAllbHNlIGlmIChNYXRjaGVzKCJBTFRFUiIsICJTVUJTQ1JJUFRJT04iLCBN YXRjaEFueSwgTWF0Y2hBbnlOLCAiUkVGUkVTSCIpKQogCQlDT01QTEVURV9XSVRIKCJQVUJMSUNB VElPTiIsICJTRVFVRU5DRVMiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf c3Vic2NyaXB0aW9uX3JlbC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb25f cmVsLmgKaW5kZXggZjgxMGIzNGM3OGQuLmE3YzgwOGFjZjIzIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3N1YnNjcmlwdGlvbl9yZWwuaApAQCAtOTIsNiArOTIsNyBAQCB0eXBlZGVmIHN0cnVj dCBMb2dpY2FsUmVwU2VxdWVuY2VJbmZvCiAJY2hhcgkgICAqc2VxbmFtZTsKIAljaGFyCSAgICpu c3BuYW1lOwogCU9pZAkJCWxvY2FscmVsaWQ7CisJY2hhcgkJcmVsc3RhdGU7CiAKIAkvKiBTZXF1 ZW5jZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgZnJvbSB0aGUgcHVibGlzaGVyIG5vZGUgKi8KIAlY TG9nUmVjUHRyCXBhZ2VfbHNuOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2Vx dWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggMmMzYzRhM2Yw NzQuLmYwMGVlYTlmYmQxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTQ3LDYgKzQ3LDcg QEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyU2VxU3RtdCAqc3RtdCk7CiBleHRlcm4gdm9pZCBTZXF1ZW5jZUNoYW5nZVBlcnNpc3Rl bmNlKE9pZCByZWxpZCwgY2hhciBuZXdyZWxwZXJzaXN0ZW5jZSk7CiBleHRlcm4gdm9pZCBEZWxl dGVTZXF1ZW5jZVR1cGxlKE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVlbmNlKE9p ZCBzZXFfcmVsaWQpOworZXh0ZXJuIHZvaWQgR2V0U2VxdWVuY2UoUmVsYXRpb24gc2VxcmVsLCBp bnQ2NCAqbGFzdF92YWx1ZSwgYm9vbCAqaXNfY2FsbGVkKTsKIGV4dGVybiB2b2lkIFNldFNlcXVl bmNlKE9pZCByZWxpZCwgaW50NjQgbmV4dCwgYm9vbCBpc2NhbGxlZCk7CiBleHRlcm4gdm9pZCBS ZXNldFNlcXVlbmNlQ2FjaGVzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtl cl9pbnRlcm5hbC5oCmluZGV4IGMxMjg1ZmRkMWJjLi41MzdlMTNmZTliOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTI4Niw3ICsyODYsNyBAQCBleHRl cm4gdm9pZCBVcGRhdGVUd29QaGFzZVN0YXRlKE9pZCBzdWJvaWQsIGNoYXIgbmV3X3N0YXRlKTsK IAogZXh0ZXJuIHZvaWQgUHJvY2Vzc1N5bmNpbmdUYWJsZXNGb3JTeW5jKFhMb2dSZWNQdHIgY3Vy cmVudF9sc24pOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1N5bmNpbmdUYWJsZXNGb3JBcHBseShYTG9n UmVjUHRyIGN1cnJlbnRfbHNuKTsKLWV4dGVybiB2b2lkIFByb2Nlc3NTZXF1ZW5jZXNGb3JTeW5j KHZvaWQpOworZXh0ZXJuIHZvaWQgTWF5YmVMYXVuY2hTZXF1ZW5jZVN5bmNXb3JrZXIodm9pZCk7 CiAKIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIEZpbmlzaFN5bmNXb3JrZXIodm9pZCk7CiBleHRl cm4gdm9pZCBJbnZhbGlkYXRlU3luY2luZ1JlbFN0YXRlcyhEYXR1bSBhcmcsIGludCBjYWNoZWlk LCB1aW50MzIgaGFzaHZhbHVlKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyNl9zdGF0cy5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbAppbmRl eCA1ZDQ1NzA2MGEwMi4uMmZlMjA5ZjQ2MWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAyNl9zdGF0cy5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjZfc3Rh dHMucGwKQEAgLTE2LDYgKzE2LDggQEAgJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKICMgQ3JlYXRl IHN1YnNjcmliZXIgbm9kZS4KIG15ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKICRub2RlX3N1YnNjcmliZXItPmluaXQ7Cisk bm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkibWF4X2xv Z2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEwIik7CiAkbm9kZV9zdWJzY3JpYmVyLT5zdGFy dDsKIAogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVuY2Vz LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2X3NlcXVlbmNlcy5wbAppbmRleCA0NzE3 ODBhMzU4NS4uMWQ4MTUxOGZlMjIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzNl9zZXF1ZW5jZXMucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2X3NlcXVl bmNlcy5wbApAQCAtNzUsOCArNzUsNyBAQCBpcygkcmVzdWx0LCAnMTAwfHQnLAogCiAjIyMjIyMj IyMjCiAjIyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04gc2hvdWxk IGNhdXNlIHN5bmMgb2YgbmV3Ci0jIHNlcXVlbmNlcyBvZiB0aGUgcHVibGlzaGVyLCBidXQgY2hh bmdlcyB0byBleGlzdGluZyBzZXF1ZW5jZXMgc2hvdWxkCi0jIG5vdCBiZSBzeW5jZWQuCisjIHNl cXVlbmNlcyBvZiB0aGUgcHVibGlzaGVyLgogIyMjIyMjIyMjIwogCiAjIENyZWF0ZSBhIG5ldyBz ZXF1ZW5jZSAncmVncmVzc19zMicsIGFuZCB1cGRhdGUgZXhpc3Rpbmcgc2VxdWVuY2UgJ3JlZ3Jl c3NfczEnCkBAIC04NCw5ICs4Myw2IEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAogCSdw b3N0Z3JlcycsIHFxKAogCUNSRUFURSBTRVFVRU5DRSByZWdyZXNzX3MyOwogCUlOU0VSVCBJTlRP IHJlZ3Jlc3Nfc2VxX3Rlc3QgU0VMRUNUIG5leHR2YWwoJ3JlZ3Jlc3NfczInKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMCk7Ci0KLQktLSBFeGlzdGluZyBzZXF1ZW5jZQotCUlOU0VSVCBJTlRP IHJlZ3Jlc3Nfc2VxX3Rlc3QgU0VMRUNUIG5leHR2YWwoJ3JlZ3Jlc3NfczEnKSBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMCk7CiApKTsKIAogIyBEbyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJF RlJFU0ggUFVCTElDQVRJT04KQEAgLTk3LDE5ICs5Myw2IEBAICRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoCiAkbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdw b3N0Z3JlcycsICRzeW5jZWRfcXVlcnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRp bmcgZm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CiAKLSRyZXN1bHQgPSAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlTRUxFQ1QgbGFzdF92 YWx1ZSwgaXNfY2FsbGVkIEZST00gcmVncmVzc19zMTsKLSkpOwotaXMoJHJlc3VsdCwgJzIwMHx0 JywgJ0NoZWNrIHNlcXVlbmNlIHZhbHVlIGluIHRoZSBwdWJsaXNoZXInKTsKLQotIyBDaGVjayAt IGV4aXN0aW5nIHNlcXVlbmNlICgncmVncmVzc19zMScpIGlzIG5vdCBzeW5jZWQKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNU IGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRyZXN1bHQs ICcxMDB8dCcsICdSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpbGwgbm90IHN5bmMgZXhpc3Rpbmcgc2Vx dWVuY2UnKTsKLQogIyBDaGVjayAtIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZSAoJ3JlZ3Jlc3Nf czInKSBpcyBzeW5jZWQKICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCiAJ J3Bvc3RncmVzJywgcXEoCkBAIC0xMTksMTYgKzEwMiwxMyBAQCBpcygkcmVzdWx0LCAnMTAwfHQn LAogCSdSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpbGwgc3luYyBuZXdseSBwdWJsaXNoZWQgc2VxdWVu Y2UnKTsKIAogIyMjIyMjIyMjIwotIyBUZXN0OiBSRUZSRVNIIFNFUVVFTkNFUyBhbmQgUkVGUkVT SCBQVUJMSUNBVElPTiAoY29weV9kYXRhID0gZmFsc2UpCi0jCi0jIDEuIEFMVEVSIFNVQlNDUklQ VElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMgc2hvdWxkIHJlLXN5bmNocm9uaXplIGFsbAotIyAg ICBleGlzdGluZyBzZXF1ZW5jZXMsIGJ1dCBub3Qgc3luY2hyb25pemUgbmV3bHkgYWRkZWQgb25l cy4KLSMgMi4gQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpdGgg KGNvcHlfZGF0YSA9IGZhbHNlKSBzaG91bGQKLSMgICAgYWxzbyBub3QgdXBkYXRlIHNlcXVlbmNl IHZhbHVlcyBmb3IgbmV3bHkgYWRkZWQgc2VxdWVuY2VzLgorIyBUZXN0OgorIyAxLiBBdXRvbWF0 aWMgdXBkYXRlIG9mIGV4aXN0aW5nIHNlcXVlbmNlIHZhbHVlcworIyAyLiBOZXdseSBhZGRlZCBz ZXF1ZW5jZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuCiAjIyMjIyMjIyMjCiAKLSMg Q3JlYXRlIGEgbmV3IHNlcXVlbmNlICdyZWdyZXNzX3MzJywgYW5kIHVwZGF0ZSB0aGUgZXhpc3Rp bmcgc2VxdWVuY2UKLSMgJ3JlZ3Jlc3NfczInLgorIyBDcmVhdGUgYSBuZXcgc2VxdWVuY2UgJ3Jl Z3Jlc3NfczMnLCBhbmQgdXBkYXRlIHRoZSBleGlzdGluZyBzZXF1ZW5jZXMKKyMgJ3JlZ3Jlc3Nf czInIGFuZCAncmVncmVzc19zMScuCiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKIAkncG9z dGdyZXMnLCBxcSgKIAlDUkVBVEUgU0VRVUVOQ0UgcmVncmVzc19zMzsKQEAgLTEzNiw1MyArMTE2 LDI4IEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAogCiAJLS0gRXhpc3Rpbmcgc2VxdWVu Y2UKIAlJTlNFUlQgSU5UTyByZWdyZXNzX3NlcV90ZXN0IFNFTEVDVCBuZXh0dmFsKCdyZWdyZXNz X3MyJykgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApOworCUlOU0VSVCBJTlRPIHJlZ3Jlc3Nf c2VxX3Rlc3QgU0VMRUNUIG5leHR2YWwoJ3JlZ3Jlc3NfczEnKSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMCk7CiApKTsKIAotIyAxLiBEbyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0gg U0VRVUVOQ0VTCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHFxKAotCUFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3NlcV9zdWIgUkVGUkVTSCBT RVFVRU5DRVM7Ci0pKTsKLSRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3Rn cmVzJywgJHN5bmNlZF9xdWVyeSkKLSAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBm b3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBkYXRhIjsKLQogIyBDaGVjayAtIGV4aXN0aW5n IHNlcXVlbmNlcyAoJ3JlZ3Jlc3NfczEnIGFuZCAncmVncmVzc19zMicpIGFyZSBzeW5jZWQKLSRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0J U0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRy ZXN1bHQsICcyMDB8dCcsICdSRUZSRVNIIFNFUVVFTkNFUyB3aWxsIHN5bmMgZXhpc3Rpbmcgc2Vx dWVuY2VzJyk7Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHFxKAotCVNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3My OwotKSk7Ci1pcygkcmVzdWx0LCAnMjAwfHQnLCAnUkVGUkVTSCBTRVFVRU5DRVMgd2lsbCBzeW5j IGV4aXN0aW5nIHNlcXVlbmNlcycpOwogCi0jIENoZWNrIC0gbmV3bHkgcHVibGlzaGVkIHNlcXVl bmNlICgncmVncmVzc19zMycpIGlzIG5vdCBzeW5jZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUsIGlz X2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczM7Ci0pKTsKLWlzKCRyZXN1bHQsICcxfGYnLAotCSdSRUZS RVNIIFNFUVVFTkNFUyB3aWxsIG5vdCBzeW5jIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZScpOwor IyBQb2xsIHVudGlsIHJlZ3Jlc3NfczEgcmVmbGVjdHMgdGhlIHVwZGF0ZWQgc2VxdWVuY2UgdmFs dWUKKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICBx cShTRUxFQ1QgbGFzdF92YWx1ZSA9IDIwMCBBTkQgaXNfY2FsbGVkID0gJ3QnIEZST00gcmVncmVz c19zMTspKQorICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciByZWdyZXNzX3Mx IHNlcXVlbmNlIHRvIHN5bmMiOwogCi0jIDIuIERvIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVG UkVTSCBQVUJMSUNBVElPTiB3aXRoIGNvcHlfZGF0YSBhcyBmYWxzZQotJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlBTFRFUiBTVUJTQ1JJ UFRJT04gcmVncmVzc19zZXFfc3ViIFJFRlJFU0ggUFVCTElDQVRJT04gV0lUSCAoY29weV9kYXRh ID0gZmFsc2UpOwotKSk7Ci0kbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0 Z3JlcycsICRzeW5jZWRfcXVlcnkpCi0gIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CisjIFBvbGwgdW50aWwgcmVncmVz c19zMiByZWZsZWN0cyB0aGUgdXBkYXRlZCBzZXF1ZW5jZSB2YWx1ZQorJG5vZGVfc3Vic2NyaWJl ci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIHFxKFNFTEVDVCBsYXN0X3ZhbHVl ID0gMjAwIEFORCBpc19jYWxsZWQgPSAndCcgRlJPTSByZWdyZXNzX3MyOykpCisgIG9yIGRpZSAi VGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHJlZ3Jlc3NfczIgc2VxdWVuY2UgdG8gc3luYyI7 CiAKLSMgQ2hlY2sgLSBuZXdseSBwdWJsaXNoZWQgc2VxdWVuY2UgKCdyZWdyZXNzX3MzJykgaXMg bm90IHN5bmNlZCB3aXRoIGNvcHlfZGF0YQotIyBhcyBmYWxzZS4KKyMgQ2hlY2sgLSBuZXdseSBw dWJsaXNoZWQgc2VxdWVuY2UgKCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZAogJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCBxcSgKIAlTRUxFQ1Qg bGFzdF92YWx1ZSwgaXNfY2FsbGVkIEZST00gcmVncmVzc19zMzsKICkpOwogaXMoJHJlc3VsdCwg JzF8ZicsCi0JJ1JFRlJFU0ggUFVCTElDQVRJT04gd2lsbCBub3Qgc3luYyBuZXdseSBwdWJsaXNo ZWQgc2VxdWVuY2Ugd2l0aCBjb3B5X2RhdGEgYXMgZmFsc2UnCi0pOworCSdOZXdseSBwdWJsaXNo ZWQgc2VxdWVuY2VzIGFyZSBub3Qgc3luY2VkIGF1dG9tYXRpY2FsbHknKTsKIAogIyMjIyMjIyMj IwogIyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04gc2hvdWxkIHJl cG9ydCBhbiBlcnJvciB3aGVuOgotLSAKMi40Ny4zCgo= --000000000000858cbe064b3f49d3--