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 1tKZba-009Toi-5l for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Dec 2024 08:59:02 +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 1tKZbX-005lTy-Lo for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Dec 2024 08:59:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tKZbX-005lTp-96 for pgsql-hackers@lists.postgresql.org; Mon, 09 Dec 2024 08:59:00 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tKZbV-001pxX-L2 for pgsql-hackers@postgresql.org; Mon, 09 Dec 2024 08:58:59 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4676a3c3434so2861521cf.3 for ; Mon, 09 Dec 2024 00:58:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733734736; x=1734339536; 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=7VOGjCkqPde1AS6ptZp1GEposd8/X1sieZR2VD7YuyI=; b=Wr4UsQh2T1diN3uUCKZ07Lv5jc78Dp8PC74+RMBQdvAR/vwrxTNoPM1oXDcuS9LKyQ K1FN/G1zkIvQxwS+ub0aeNCqKAefYW0XCRPFE0uqAzsILl/DE/0+ODEHZ0WYc4m6MXaa Zdpkyvf49wegYXoCvSxyKe4OwYWxcASn6ZtkdzOp0h9pOj1vSdlqf6ovbnDXAP9wpbl5 joG2rztpUZmpzspGsMvtntHmxrBxfDMu/t3UNcqfUHNZAPgR0Tuvvx9VM0GR1XCVmGxh QNhHfZh5Tk67mihfa2nlNFz4bAYUjEYvOMGmrlKhvmEQJkhbOFWv0XfwrZQUyC0hutMg InCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733734736; x=1734339536; 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=7VOGjCkqPde1AS6ptZp1GEposd8/X1sieZR2VD7YuyI=; b=ru4LOE4nlVDO8K0BlchtTaUB+CEesw13rUmByN/acfcyVd6DFjiALFX8maHZiQQYF7 UVomRph4KrD3zQ/pR/GPXCY7NzRmdBqpB6JbILti7HHcR6SO8Z8zioxLD4MiLGaBJk1I 7Ri3GwdTADwgIrbqOWcgspJlus5iizTznC5/ueZl3pjmCA4t6r4z5y6ftJOCMzQ8zS3m /zT/TdbtR//dd45eNulPCDzTc2M/toE5Yluaz4L5MfNtRLCOhaMuoPB4MmZTPdfTs3ew gUSRVnby6ySXzH7wAK9/di6y3x9BaY+C0pk/ditoVzt/InulmS5bMFOZimQK8LuXXpBu R94g== X-Forwarded-Encrypted: i=1; AJvYcCXNT1IpsTECakYfgIhIz3KGtWw6IuZRDTuTfqlhDrrsvECLt5IJOp5xdsPFV9vDI1BnPpqNAMbJ2xePpsSh@postgresql.org X-Gm-Message-State: AOJu0YxwFCjLAIe9whmSYQNUh4eSP8DPYiCMIm0nOkWHW27u5j2qu+s+ oilgILEdnFsxZztTp9BlhbYXXUqX9zfeJikzBTont5EgmGqnzxuPJZiVfzOTQ8linG4t83JQZAe dhl/McyPIr4wRGEZAtNdDbdFbJfl7PjYV X-Gm-Gg: ASbGncvyQpTtQrWR14kBf509GNqoIEn/vq0GTNzBvCBESYlBKBnumCHo2mIfh6cxchC Y7ne9fx8UKKtIUupGYWyjWo/cC0ema8kIjoI+ X-Google-Smtp-Source: AGHT+IFewVZhA+QRfCZTRMLG+sRfEwpYhzVXvMCEtd8Wvf7Lqw9BAxlGoXvTD6klCDkwVdfXMYPcUqj8fMOheMDeiGo= X-Received: by 2002:a17:90b:17d2:b0:2ee:bc1d:f98b with SMTP id 98e67ed59e1d1-2ef6ab271abmr13250699a91.31.1733728241765; Sun, 08 Dec 2024 23:10:41 -0800 (PST) MIME-Version: 1.0 References: <54c35fb9-da3a-4754-ab8c-46ed0b612465@vondra.me> <684c70d7-180e-461d-9377-600c2db581ba@vondra.me> In-Reply-To: From: Amit Langote Date: Mon, 9 Dec 2024 16:10:24 +0900 Message-ID: Subject: Re: generic plans and "initial" pruning To: Tomas Vondra Cc: Robert Haas , Alvaro Herrera , Andres Freund , Daniel Gustafsson , David Rowley , PostgreSQL Hackers , Thom Brown , Tom Lane Content-Type: multipart/mixed; boundary="000000000000fd59390628d10f5a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fd59390628d10f5a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Dec 6, 2024 at 5:18=E2=80=AFPM Amit Langote wrote: > On Thu, Dec 5, 2024 at 11:07=E2=80=AFPM Tomas Vondra wr= ote: > > On 12/5/24 12:28, Amit Langote wrote: > > > On Thu, Dec 5, 2024 at 3:53=E2=80=AFPM Amit Langote wrote: > > >> On Thu, Dec 5, 2024 at 2:20=E2=80=AFAM Tomas Vondra wrote: > > >>> Sure, changing the APIs is allowed, I'm just wondering if maybe the= re > > >>> might be a way to not have this issue, or at least notice the missi= ng > > >>> call early. > > >>> > > >>> I haven't tried, wouldn't it be better to modify ExecutorStart() to= do > > >>> the retries internally? I mean, the extensions wouldn't need to che= ck if > > >>> the plan is still valid, ExecutorStart() would take care of that. Y= eah, > > >>> it might need some new arguments, but that's more obvious. > > >> > > >> One approach could be to move some code from standard_ExecutorStart(= ) > > >> into ExecutorStart(). Specifically, the code responsible for setting > > >> up enough state in the EState to perform ExecDoInitialPruning(), whi= ch > > >> takes locks that might invalidate the plan. If the plan does become > > >> invalid, the hook and standard_ExecutorStart() are not called. > > >> Instead, the caller, ExecutorStartExt() in this case, creates a new > > >> plan. > > >> > > >> This avoids the need to add ExecPlanStillValid() checks anywhere, > > >> whether in core or extension code. However, it does mean accessing t= he > > >> PlannedStmt earlier than InitPlan(), but the current placement of th= e > > >> code is not exactly set in stone. > > > > > > I tried this approach and found that it essentially disables testing > > > of this patch using the delay_execution module, which relies on the > > > ExecutorStart_hook(). The way the testing works is that the hook in > > > delay_execution.c pauses the execution of a cached plan to allow a > > > concurrent session to drop an index referenced in the plan. When > > > unpaused, execution initialization resumes by calling > > > standard_ExecutorStart(). At this point, obtaining the lock on the > > > partition whose index has been dropped invalidates the plan, which th= e > > > hook detects and reports. It then also reports the successful > > > re-execution of an updated plan that no longer references the dropped > > > index. Hmm. > > > > > > > It's not clear to me why the change disables this testing, and I can't > > try without a patch. Could you explain? > > Sorry, PFA the delta patch for the change I described above. It > applies on top of v58 series of patches that I posted yesterday. > You'll notice that delay_execution test fails if you apply and do > check-world. > > As for how the change breaks the testing, here is a before and after > of the flow of a isolation test in > src/test/modules/delay_execution/specs/cached-plan-inval.spec (s1 is > the session used to run a cached plan, s2 to perform concurrent DDL > that invalidates the plan): > > * Before (working): > > 1. s2 takes advisory lock > 2. s1 runs cached plan -> goes to ExecutorStart_hook -> waits for the > advisory lock > 3. s2 drops an index referenced in the plan > 4. s2 unlocks advisory lock > 5. s1 locks unpruned partitions -> detects plan invalidation due to > dropped index. > > * After (stops working because initial pruning and locking are done > before calling ExecutorStart_hook): > > 1. s2 takes advisory lock > 2. s1 runs cached plan -> locks unpruned partitions -> goes to > ExecutorStart_hook to get advisory lock -> waits for advisory lock > 3. s2 drops an index referenced in the plan -> waits for lock on the > unpruned partition -> deadlock! > > One idea I had after sending the email yesterday is to introduce > ExecutorStartCachedPlan_hook for the advisory lock based waiting. > ExecutorStartCachedPlan() is the new function that you will find in > v58-0004 that wraps ExecutorStart() to handle plan invalidation. This > new hook would be called before ExecutorStartCachedPlan() calls > ExecutorStart(), so the original testing flow can still work. Here's that patch with this idea implemented that fixes the delay_execution test breakage. Applies on top of v58 series of patches. However, as mentioned in my previous reply, since extensions might need to adjust their ExecutorStart hook code to check if the RT index is in EState.es_unpruned_relids when accessing child relations directly via ExecGetRangeTableRelation(), I can accept them also adding a check for ExecPlanStillValid() in their ExecutorStart hook. So we may not want to add a new hook even if only for testing. --=20 Thanks, Amit Langote --000000000000fd59390628d10f5a Content-Type: application/octet-stream; name="0005-Remove-the-need-to-check-if-plan-is-valid-from-Execu.patch" Content-Disposition: attachment; filename="0005-Remove-the-need-to-check-if-plan-is-valid-from-Execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4gp0buj0 RnJvbSBhMTVmMTRhYWI2ZGQ3MGRkMTNmNGZiYWU2Yzk5NmE2ODc1YTkzYzZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgOSBEZWMgMjAyNCAxMjozNDowNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggNS81 XSBSZW1vdmUgdGhlIG5lZWQgdG8gY2hlY2sgaWYgcGxhbiBpcyB2YWxpZCBmcm9tCiBFeGVjdXRv clN0YXJ0IGhvb2tzCgpGb3IgdGVzdGluZyB1c2luZyBkZWxheV9leGVjdXRpb24sIGEgbmV3IGhv b2sKRXhlY3V0b3RTdGFydENhY2hlZFBsYW5faG9vayBpcyBhZGRlZC4gIFRoaXMgaG9vayBhbGxv d3MgdGhlCmRlbGF5X2V4ZWN1dGlvbiBtb2R1bGUgdG8gYmxvY2sgdGhlIGV4ZWN1dGlvbiBvZiB0 aGUgY2FjaGVkIHBsYW4gdG8KYWxsb3cgYSBjb25jdXJyZW50IHNlc3Npb24gdG8gbW9kaWZ5IHRo ZSBvYmplY3RzIHJlZmVyZW5jZWQgaW4gdGhlCnBsYW4sIHdoaWNoIGlzIHRoZW4gZGV0ZWN0ZWQg d2hlbiB0aGUgbG9ja3MgYXJlIHRha2VuIG9uIHBydW5hYmxlCnJlbGF0aW9ucyBpbiBFeGVjdXRv clN0YXJ0KCkuCi0tLQogY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMgICAgICAg ICAgIHwgICA0IC0KIC4uLi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMg ICB8ICAgNCAtCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAgICAgICAg fCAyNTQgKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0 aW9uLmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRp b24uaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAg ICAgICAgICAgICAgIHwgIDM0ICstLQogLi4uL21vZHVsZXMvZGVsYXlfZXhlY3V0aW9uL2RlbGF5 X2V4ZWN1dGlvbi5jIHwgIDIwICstCiAuLi4vZXhwZWN0ZWQvY2FjaGVkLXBsYW4taW52YWwub3V0 ICAgICAgICAgICAgfCAgMjYgKy0KIDggZmlsZXMgY2hhbmdlZCwgMTc4IGluc2VydGlvbnMoKyks IDE3MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRv X2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmluZGV4IDhi NWVhZjNlZjMuLjYyM2E2NzRmOTkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1 dG9fZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBA IC0yOTgsMTAgKzI5OCw2IEBAIGV4cGxhaW5fRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5 RGVzYywgaW50IGVmbGFncykKIAllbHNlCiAJCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQocXVlcnlE ZXNjLCBlZmxhZ3MpOwogCi0JLyogVGhlIHBsYW4gbWF5IGhhdmUgYmVjb21lIGludmFsaWQgZHVy aW5nIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoKSAqLwotCWlmICghRXhlY1BsYW5TdGlsbFZhbGlk KHF1ZXJ5RGVzYy0+ZXN0YXRlKSkKLQkJcmV0dXJuOwotCiAJaWYgKGF1dG9fZXhwbGFpbl9lbmFi bGVkKCkpCiAJewogCQkvKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuYwppbmRleCBiMTE2OTFhZTI2Li40OWM2NTdiM2UwIDEwMDY0NAotLS0gYS9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysgYi9jb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAtOTk0LDEwICs5 OTQsNiBAQCBwZ3NzX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpCiAJZWxzZQogCQlzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsK IAotCS8qIFRoZSBwbGFuIG1heSBoYXZlIGJlY29tZSBpbnZhbGlkIGR1cmluZyBzdGFuZGFyZF9F eGVjdXRvclN0YXJ0KCkgKi8KLQlpZiAoIUV4ZWNQbGFuU3RpbGxWYWxpZChxdWVyeURlc2MtPmVz dGF0ZSkpCi0JCXJldHVybjsKLQogCS8qCiAJICogSWYgcXVlcnkgaGFzIHF1ZXJ5SWQgemVybywg ZG9uJ3QgdHJhY2sgaXQuICBUaGlzIHByZXZlbnRzIGRvdWJsZQogCSAqIGNvdW50aW5nIG9mIG9w dGltaXphYmxlIHN0YXRlbWVudHMgdGhhdCBhcmUgZGlyZWN0bHkgY29udGFpbmVkIGluCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY01haW4uYwppbmRleCA5NTQzZDk0OTBjLi5jMmE5YTBlODZlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMKQEAgLTY4LDYgKzY4LDcgQEAKIAogLyogSG9va3MgZm9yIHBsdWdpbnMg dG8gZ2V0IGNvbnRyb2wgaW4gRXhlY3V0b3JTdGFydC9SdW4vRmluaXNoL0VuZCAqLwogRXhlY3V0 b3JTdGFydF9ob29rX3R5cGUgRXhlY3V0b3JTdGFydF9ob29rID0gTlVMTDsKK0V4ZWN1dG9yU3Rh cnRDYWNoZWRQbGFuX2hvb2tfdHlwZSBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbl9ob29rID0gTlVM TDsKIEV4ZWN1dG9yUnVuX2hvb2tfdHlwZSBFeGVjdXRvclJ1bl9ob29rID0gTlVMTDsKIEV4ZWN1 dG9yRmluaXNoX2hvb2tfdHlwZSBFeGVjdXRvckZpbmlzaF9ob29rID0gTlVMTDsKIEV4ZWN1dG9y RW5kX2hvb2tfdHlwZSBFeGVjdXRvckVuZF9ob29rID0gTlVMTDsKQEAgLTEyMyw2ICsxMjQsMTYg QEAgc3RhdGljIHZvaWQgRXZhbFBsYW5RdWFsU3RhcnQoRVBRU3RhdGUgKmVwcXN0YXRlLCBQbGFu ICpwbGFuVHJlZSk7CiB2b2lkCiBFeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBp bnQgZWZsYWdzKQogeworCUVTdGF0ZQkgICAqZXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKKwlQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQgPSBxdWVyeURlc2MtPnBsYW5uZWRzdG10 OworCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3RtdC0+cnRhYmxlOworCUNhY2hlZFBs YW4gKmNhY2hlZHBsYW4gPSBxdWVyeURlc2MtPmNwbGFuOworCisJLyogc2FuaXR5IGNoZWNrczog cXVlcnlEZXNjIG11c3Qgbm90IGJlIHN0YXJ0ZWQgYWxyZWFkeSAqLworCUFzc2VydChxdWVyeURl c2MgIT0gTlVMTCk7CisJQXNzZXJ0KHF1ZXJ5RGVzYy0+ZXN0YXRlID09IE5VTEwpOworCiAJLyoK IAkgKiBJbiBzb21lIGNhc2VzIChlLmcuIGFuIEVYRUNVVEUgc3RhdGVtZW50IG9yIGFuIGV4ZWN1 dGUgbWVzc2FnZSB3aXRoIHRoZQogCSAqIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sKSB0aGUgcXVl cnlfaWQgd29uJ3QgYmUgcmVwb3J0ZWQsIHNvIGRvIGl0IG5vdy4KQEAgLTEzMyw2ICsxNDQsMTE3 IEBAIEV4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpCiAJICov CiAJcGdzdGF0X3JlcG9ydF9xdWVyeV9pZChxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlk LCBmYWxzZSk7CiAKKwkvKgorCSAqIEJ1aWxkIEVTdGF0ZSwgc3dpdGNoIGludG8gcGVyLXF1ZXJ5 IG1lbW9yeSBjb250ZXh0IGZvciBzdGFydHVwLgorCSAqLworCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1 dG9yU3RhdGUoKTsKKwlxdWVyeURlc2MtPmVzdGF0ZSA9IGVzdGF0ZTsKKworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOworCisJLyoKKwkg KiBGaWxsIGluIGV4dGVybmFsIHBhcmFtZXRlcnMsIGlmIGFueSwgZnJvbSBxdWVyeURlc2M7IGFu ZCBhbGxvY2F0ZQorCSAqIHdvcmtzcGFjZSBmb3IgaW50ZXJuYWwgcGFyYW1ldGVycworCSAqLwor CWVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZvID0gcXVlcnlEZXNjLT5wYXJhbXM7CisKKwlpZiAo cXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cGFyYW1FeGVjVHlwZXMgIT0gTklMKQorCXsKKwkJaW50 CQkJblBhcmFtRXhlYzsKKworCQluUGFyYW1FeGVjID0gbGlzdF9sZW5ndGgocXVlcnlEZXNjLT5w bGFubmVkc3RtdC0+cGFyYW1FeGVjVHlwZXMpOworCQllc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFs cyA9IChQYXJhbUV4ZWNEYXRhICopCisJCQlwYWxsb2MwKG5QYXJhbUV4ZWMgKiBzaXplb2YoUGFy YW1FeGVjRGF0YSkpOworCX0KKworCS8qIFdlIG5vdyByZXF1aXJlIGFsbCBjYWxsZXJzIHRvIHBy b3ZpZGUgc291cmNlVGV4dCAqLworCUFzc2VydChxdWVyeURlc2MtPnNvdXJjZVRleHQgIT0gTlVM TCk7CisJZXN0YXRlLT5lc19zb3VyY2VUZXh0ID0gcXVlcnlEZXNjLT5zb3VyY2VUZXh0OworCisJ LyoKKwkgKiBGaWxsIGluIHRoZSBxdWVyeSBlbnZpcm9ubWVudCwgaWYgYW55LCBmcm9tIHF1ZXJ5 RGVzYy4KKwkgKi8KKwllc3RhdGUtPmVzX3F1ZXJ5RW52ID0gcXVlcnlEZXNjLT5xdWVyeUVudjsK KworCS8qCisJICogSWYgbm9uLXJlYWQtb25seSBxdWVyeSwgc2V0IHRoZSBjb21tYW5kIElEIHRv IG1hcmsgb3V0cHV0IHR1cGxlcyB3aXRoCisJICovCisJc3dpdGNoIChxdWVyeURlc2MtPm9wZXJh dGlvbikKKwl7CisJCWNhc2UgQ01EX1NFTEVDVDoKKworCQkJLyoKKwkJCSAqIFNFTEVDVCBGT1Ig W0tFWV0gVVBEQVRFL1NIQVJFIGFuZCBtb2RpZnlpbmcgQ1RFcyBuZWVkIHRvIG1hcmsKKwkJCSAq IHR1cGxlcworCQkJICovCisJCQlpZiAocXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cm93TWFya3Mg IT0gTklMIHx8CisJCQkJcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+aGFzTW9kaWZ5aW5nQ1RFKQor CQkJCWVzdGF0ZS0+ZXNfb3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7CisK KwkJCS8qCisJCQkgKiBBIFNFTEVDVCB3aXRob3V0IG1vZGlmeWluZyBDVEVzIGNhbid0IHBvc3Np Ymx5IHF1ZXVlIHRyaWdnZXJzLAorCQkJICogc28gZm9yY2Ugc2tpcC10cmlnZ2VycyBtb2RlLiBU aGlzIGlzIGp1c3QgYSBtYXJnaW5hbCBlZmZpY2llbmN5CisJCQkgKiBoYWNrLCBzaW5jZSBBZnRl clRyaWdnZXJCZWdpblF1ZXJ5L0FmdGVyVHJpZ2dlckVuZFF1ZXJ5IGFyZW4ndAorCQkJICogYWxs IHRoYXQgZXhwZW5zaXZlLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBkbyBpdC4KKwkJCSAqLworCQkJ aWYgKCFxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5oYXNNb2RpZnlpbmdDVEUpCisJCQkJZWZsYWdz IHw9IEVYRUNfRkxBR19TS0lQX1RSSUdHRVJTOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTURfSU5T RVJUOgorCQljYXNlIENNRF9ERUxFVEU6CisJCWNhc2UgQ01EX1VQREFURToKKwkJY2FzZSBDTURf TUVSR0U6CisJCQllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRy dWUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgb3BlcmF0aW9uIGNvZGU6ICVkIiwKKwkJCQkgKGludCkgcXVlcnlEZXNjLT5vcGVyYXRpb24p OworCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBDb3B5IG90aGVyIGltcG9ydGFudCBpbmZvcm1h dGlvbiBpbnRvIHRoZSBFU3RhdGUKKwkgKi8KKwllc3RhdGUtPmVzX3NuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChxdWVyeURlc2MtPnNuYXBzaG90KTsKKwllc3RhdGUtPmVzX2Nyb3NzY2hlY2tf c25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KHF1ZXJ5RGVzYy0+Y3Jvc3NjaGVja19zbmFwc2hv dCk7CisJZXN0YXRlLT5lc190b3BfZWZsYWdzID0gZWZsYWdzOworCWVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCA9IHF1ZXJ5RGVzYy0+aW5zdHJ1bWVudF9vcHRpb25zOworCWVzdGF0ZS0+ZXNfaml0X2Zs YWdzID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+aml0RmxhZ3M7CisKKwllc3RhdGUtPmVzX3Bh cnRfcHJ1bmVfaW5mb3MgPSBwbGFubmVkc3RtdC0+cGFydFBydW5lSW5mb3M7CisJZXN0YXRlLT5l c191bnBydW5lZF9yZWxpZHMgPSBibXNfY29weShwbGFubmVkc3RtdC0+dW5wcnVuYWJsZVJlbGlk cyk7CisKKwkvKgorCSAqIERvIHBlcm1pc3Npb25zIGNoZWNrcworCSAqLworCUV4ZWNDaGVja1Bl cm1pc3Npb25zKHJhbmdlVGFibGUsIHBsYW5uZWRzdG10LT5wZXJtSW5mb3MsIHRydWUpOworCisJ LyoKKwkgKiBpbml0aWFsaXplIHRoZSBub2RlJ3MgZXhlY3V0aW9uIHN0YXRlCisJICovCisJRXhl Y0luaXRSYW5nZVRhYmxlKGVzdGF0ZSwgcmFuZ2VUYWJsZSwgcGxhbm5lZHN0bXQtPnBlcm1JbmZv cyk7CisKKwkvKgorCSAqIFBlcmZvcm0gcnVudGltZSAiaW5pdGlhbCIgcHJ1bmluZyB0byBpZGVu dGlmeSB3aGljaCBjaGlsZCBzdWJwbGFucywKKwkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGls ZHJlbiBvZiBwbGFuIG5vZGVzIHRoYXQgY29udGFpbgorCSAqIFBhcnRpdGlvblBydW5lSW5mbyBz dWNoIGFzIEFwcGVuZCwgd2lsbCBub3QgYmUgZXhlY3V0ZWQuIFRoZSByZXN1bHRzLAorCSAqIHdo aWNoIGFyZSBiaXRtYXBzZXRzIG9mIGluZGV4ZXMgb2YgdGhlIGNoaWxkIHN1YnBsYW5zIHRoYXQg d2lsbCBiZQorCSAqIGV4ZWN1dGVkLCBhcmUgc2F2ZWQgaW4gZXNfcGFydF9wcnVuZV9yZXN1bHRz LiAgVGhlc2UgcmVzdWx0cyBjb3JyZXNwb25kCisJICogdG8gZWFjaCBQYXJ0aXRpb25QcnVuZUlu Zm8gZW50cnksIGFuZCB0aGUgZXNfcGFydF9wcnVuZV9yZXN1bHRzIGxpc3QgaXMKKwkgKiBwYXJh bGxlbCB0byBlc19wYXJ0X3BydW5lX2luZm9zLgorCSAqCisJICogVGhpcyB3aWxsIGFsc28gYWRk IHRoZSBSVCBpbmRleGVzIG9mIHN1cnZpdmluZyBsZWFmIHBhcnRpdGlvbnMgdG8KKwkgKiBlc191 bnBydW5lZF9yZWxpZHMuCisJICovCisJRXhlY0RvSW5pdGlhbFBydW5pbmcoZXN0YXRlLCBjYWNo ZWRwbGFuKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCWlmIChj YWNoZWRwbGFuICYmICFDYWNoZWRQbGFuVmFsaWQoY2FjaGVkcGxhbikpCisJCXJldHVybjsKKwog CWlmIChFeGVjdXRvclN0YXJ0X2hvb2spCiAJCSgqRXhlY3V0b3JTdGFydF9ob29rKSAocXVlcnlE ZXNjLCBlZmxhZ3MpOwogCWVsc2UKQEAgLTE1OSw2ICsyODEsMjAgQEAgdm9pZAogRXhlY3V0b3JT dGFydENhY2hlZFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsCiAJCQkJCQlD YWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJaW50IHF1ZXJ5X2luZGV4KQorewor CWlmIChFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbl9ob29rKQorCQkoKkV4ZWN1dG9yU3RhcnRDYWNo ZWRQbGFuX2hvb2spIChxdWVyeURlc2MsIGVmbGFncywgcGxhbnNvdXJjZSwKKwkJCQkJCQkJCQkg cXVlcnlfaW5kZXgpOworCWVsc2UKKwkJc3RhbmRhcmRfRXhlY3V0b3JTdGFydENhY2hlZFBsYW4o cXVlcnlEZXNjLCBlZmxhZ3MsIHBsYW5zb3VyY2UsCisJCQkJCQkJCQkJIHF1ZXJ5X2luZGV4KTsK KworfQorCit2b2lkCitzdGFuZGFyZF9FeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbihRdWVyeURlc2Mg KnF1ZXJ5RGVzYywgaW50IGVmbGFncywKKwkJCQkJCQkJIENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5z b3VyY2UsCisJCQkJCQkJCSBpbnQgcXVlcnlfaW5kZXgpCiB7CiAJaWYgKHVubGlrZWx5KHF1ZXJ5 RGVzYy0+Y3BsYW4gPT0gTlVMTCkpCiAJCWVsb2coRVJST1IsICJFeGVjdXRvclN0YXJ0Q2FjaGVk UGxhbigpOiBtaXNzaW5nIENhY2hlZFBsYW4iKTsKQEAgLTE5OCwxMiArMzM0LDEyIEBAIEV4ZWN1 dG9yU3RhcnRDYWNoZWRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzLAogdm9p ZAogc3RhbmRhcmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFn cykKIHsKLQlFU3RhdGUJICAgKmVzdGF0ZTsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ RVN0YXRlCSAgICplc3RhdGU7CiAKIAkvKiBzYW5pdHkgY2hlY2tzOiBxdWVyeURlc2MgbXVzdCBu b3QgYmUgc3RhcnRlZCBhbHJlYWR5ICovCiAJQXNzZXJ0KHF1ZXJ5RGVzYyAhPSBOVUxMKTsKLQlB c3NlcnQocXVlcnlEZXNjLT5lc3RhdGUgPT0gTlVMTCk7CisJQXNzZXJ0KHF1ZXJ5RGVzYy0+ZXN0 YXRlICE9IE5VTEwpOwogCiAJLyogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBxdWVyeSdzIHNuYXBz aG90IGlzIGFjdGl2ZSAqLwogCUFzc2VydChHZXRBY3RpdmVTbmFwc2hvdCgpID09IHF1ZXJ5RGVz Yy0+c25hcHNob3QpOwpAQCAtMjI3LDg1ICszNjMsNiBAQCBzdGFuZGFyZF9FeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCQkhKGVmbGFncyAmIEVYRUNfRkxB R19FWFBMQUlOX09OTFkpKQogCQlFeGVjQ2hlY2tYYWN0UmVhZE9ubHkocXVlcnlEZXNjLT5wbGFu bmVkc3RtdCk7CiAKLQkvKgotCSAqIEJ1aWxkIEVTdGF0ZSwgc3dpdGNoIGludG8gcGVyLXF1ZXJ5 IG1lbW9yeSBjb250ZXh0IGZvciBzdGFydHVwLgotCSAqLwotCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1 dG9yU3RhdGUoKTsKLQlxdWVyeURlc2MtPmVzdGF0ZSA9IGVzdGF0ZTsKLQotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZXN0YXRlLT5lc19xdWVyeV9jeHQpOwotCi0JLyoKLQkg KiBGaWxsIGluIGV4dGVybmFsIHBhcmFtZXRlcnMsIGlmIGFueSwgZnJvbSBxdWVyeURlc2M7IGFu ZCBhbGxvY2F0ZQotCSAqIHdvcmtzcGFjZSBmb3IgaW50ZXJuYWwgcGFyYW1ldGVycwotCSAqLwot CWVzdGF0ZS0+ZXNfcGFyYW1fbGlzdF9pbmZvID0gcXVlcnlEZXNjLT5wYXJhbXM7Ci0KLQlpZiAo cXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cGFyYW1FeGVjVHlwZXMgIT0gTklMKQotCXsKLQkJaW50 CQkJblBhcmFtRXhlYzsKLQotCQluUGFyYW1FeGVjID0gbGlzdF9sZW5ndGgocXVlcnlEZXNjLT5w bGFubmVkc3RtdC0+cGFyYW1FeGVjVHlwZXMpOwotCQllc3RhdGUtPmVzX3BhcmFtX2V4ZWNfdmFs cyA9IChQYXJhbUV4ZWNEYXRhICopCi0JCQlwYWxsb2MwKG5QYXJhbUV4ZWMgKiBzaXplb2YoUGFy YW1FeGVjRGF0YSkpOwotCX0KLQotCS8qIFdlIG5vdyByZXF1aXJlIGFsbCBjYWxsZXJzIHRvIHBy b3ZpZGUgc291cmNlVGV4dCAqLwotCUFzc2VydChxdWVyeURlc2MtPnNvdXJjZVRleHQgIT0gTlVM TCk7Ci0JZXN0YXRlLT5lc19zb3VyY2VUZXh0ID0gcXVlcnlEZXNjLT5zb3VyY2VUZXh0OwotCi0J LyoKLQkgKiBGaWxsIGluIHRoZSBxdWVyeSBlbnZpcm9ubWVudCwgaWYgYW55LCBmcm9tIHF1ZXJ5 RGVzYy4KLQkgKi8KLQllc3RhdGUtPmVzX3F1ZXJ5RW52ID0gcXVlcnlEZXNjLT5xdWVyeUVudjsK LQotCS8qCi0JICogSWYgbm9uLXJlYWQtb25seSBxdWVyeSwgc2V0IHRoZSBjb21tYW5kIElEIHRv IG1hcmsgb3V0cHV0IHR1cGxlcyB3aXRoCi0JICovCi0Jc3dpdGNoIChxdWVyeURlc2MtPm9wZXJh dGlvbikKLQl7Ci0JCWNhc2UgQ01EX1NFTEVDVDoKLQotCQkJLyoKLQkJCSAqIFNFTEVDVCBGT1Ig W0tFWV0gVVBEQVRFL1NIQVJFIGFuZCBtb2RpZnlpbmcgQ1RFcyBuZWVkIHRvIG1hcmsKLQkJCSAq IHR1cGxlcwotCQkJICovCi0JCQlpZiAocXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cm93TWFya3Mg IT0gTklMIHx8Ci0JCQkJcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+aGFzTW9kaWZ5aW5nQ1RFKQot CQkJCWVzdGF0ZS0+ZXNfb3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0K LQkJCS8qCi0JCQkgKiBBIFNFTEVDVCB3aXRob3V0IG1vZGlmeWluZyBDVEVzIGNhbid0IHBvc3Np Ymx5IHF1ZXVlIHRyaWdnZXJzLAotCQkJICogc28gZm9yY2Ugc2tpcC10cmlnZ2VycyBtb2RlLiBU aGlzIGlzIGp1c3QgYSBtYXJnaW5hbCBlZmZpY2llbmN5Ci0JCQkgKiBoYWNrLCBzaW5jZSBBZnRl clRyaWdnZXJCZWdpblF1ZXJ5L0FmdGVyVHJpZ2dlckVuZFF1ZXJ5IGFyZW4ndAotCQkJICogYWxs IHRoYXQgZXhwZW5zaXZlLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBkbyBpdC4KLQkJCSAqLwotCQkJ aWYgKCFxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5oYXNNb2RpZnlpbmdDVEUpCi0JCQkJZWZsYWdz IHw9IEVYRUNfRkxBR19TS0lQX1RSSUdHRVJTOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDTURfSU5T RVJUOgotCQljYXNlIENNRF9ERUxFVEU6Ci0JCWNhc2UgQ01EX1VQREFURToKLQkJY2FzZSBDTURf TUVSR0U6Ci0JCQllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRy dWUpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgb3BlcmF0aW9uIGNvZGU6ICVkIiwKLQkJCQkgKGludCkgcXVlcnlEZXNjLT5vcGVyYXRpb24p OwotCQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBDb3B5IG90aGVyIGltcG9ydGFudCBpbmZvcm1h dGlvbiBpbnRvIHRoZSBFU3RhdGUKLQkgKi8KLQllc3RhdGUtPmVzX3NuYXBzaG90ID0gUmVnaXN0 ZXJTbmFwc2hvdChxdWVyeURlc2MtPnNuYXBzaG90KTsKLQllc3RhdGUtPmVzX2Nyb3NzY2hlY2tf c25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KHF1ZXJ5RGVzYy0+Y3Jvc3NjaGVja19zbmFwc2hv dCk7Ci0JZXN0YXRlLT5lc190b3BfZWZsYWdzID0gZWZsYWdzOwotCWVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCA9IHF1ZXJ5RGVzYy0+aW5zdHJ1bWVudF9vcHRpb25zOwotCWVzdGF0ZS0+ZXNfaml0X2Zs YWdzID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+aml0RmxhZ3M7Ci0KIAkvKgogCSAqIFNldCB1 cCBhbiBBRlRFUi10cmlnZ2VyIHN0YXRlbWVudCBjb250ZXh0LCB1bmxlc3MgdG9sZCBub3QgdG8s IG9yCiAJICogdW5sZXNzIGl0J3MgRVhQTEFJTi1vbmx5IG1vZGUgKHdoZW4gRXhlY3V0b3JGaW5p c2ggd29uJ3QgYmUgY2FsbGVkKS4KQEAgLTMxMyw2ICszNzAsOSBAQCBzdGFuZGFyZF9FeGVjdXRv clN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCWlmICghKGVmbGFncyAm IChFWEVDX0ZMQUdfU0tJUF9UUklHR0VSUyB8IEVYRUNfRkxBR19FWFBMQUlOX09OTFkpKSkKIAkJ QWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeSgpOwogCisJZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7 CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlc3RhdGUtPmVzX3F1ZXJ5X2N4 dCk7CisKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHBsYW4gc3RhdGUgdHJlZQogCSAqLwpAQCAt OTIyLDQ2ICs5ODIsMTQgQEAgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxh Z3MpCiB7CiAJQ21kVHlwZQkJb3BlcmF0aW9uID0gcXVlcnlEZXNjLT5vcGVyYXRpb247CiAJUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10ID0gcXVlcnlEZXNjLT5wbGFubmVkc3RtdDsKLQlDYWNoZWRQ bGFuICpjYWNoZWRwbGFuID0gcXVlcnlEZXNjLT5jcGxhbjsKIAlQbGFuCSAgICpwbGFuID0gcGxh bm5lZHN0bXQtPnBsYW5UcmVlOwotCUxpc3QJICAgKnJhbmdlVGFibGUgPSBwbGFubmVkc3RtdC0+ cnRhYmxlOwogCUVTdGF0ZQkgICAqZXN0YXRlID0gcXVlcnlEZXNjLT5lc3RhdGU7CiAJUGxhblN0 YXRlICAqcGxhbnN0YXRlOwogCVR1cGxlRGVzYwl0dXBUeXBlOwogCUxpc3RDZWxsICAgKmw7CiAJ aW50CQkJaTsKIAotCS8qCi0JICogRG8gcGVybWlzc2lvbnMgY2hlY2tzCi0JICovCi0JRXhlY0No ZWNrUGVybWlzc2lvbnMocmFuZ2VUYWJsZSwgcGxhbm5lZHN0bXQtPnBlcm1JbmZvcywgdHJ1ZSk7 Ci0KLQkvKgotCSAqIGluaXRpYWxpemUgdGhlIG5vZGUncyBleGVjdXRpb24gc3RhdGUKLQkgKi8K LQlFeGVjSW5pdFJhbmdlVGFibGUoZXN0YXRlLCByYW5nZVRhYmxlLCBwbGFubmVkc3RtdC0+cGVy bUluZm9zKTsKLQogCWVzdGF0ZS0+ZXNfcGxhbm5lZHN0bXQgPSBwbGFubmVkc3RtdDsKLQllc3Rh dGUtPmVzX2NhY2hlZHBsYW4gPSBjYWNoZWRwbGFuOwotCWVzdGF0ZS0+ZXNfcGFydF9wcnVuZV9p bmZvcyA9IHBsYW5uZWRzdG10LT5wYXJ0UHJ1bmVJbmZvczsKLQllc3RhdGUtPmVzX3VucHJ1bmVk X3JlbGlkcyA9IGJtc19jb3B5KHBsYW5uZWRzdG10LT51bnBydW5hYmxlUmVsaWRzKTsKLQotCS8q Ci0JICogUGVyZm9ybSBydW50aW1lICJpbml0aWFsIiBwcnVuaW5nIHRvIGlkZW50aWZ5IHdoaWNo IGNoaWxkIHN1YnBsYW5zLAotCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoaWxkcmVuIG9mIHBs YW4gbm9kZXMgdGhhdCBjb250YWluCi0JICogUGFydGl0aW9uUHJ1bmVJbmZvIHN1Y2ggYXMgQXBw ZW5kLCB3aWxsIG5vdCBiZSBleGVjdXRlZC4gVGhlIHJlc3VsdHMsCi0JICogd2hpY2ggYXJlIGJp dG1hcHNldHMgb2YgaW5kZXhlcyBvZiB0aGUgY2hpbGQgc3VicGxhbnMgdGhhdCB3aWxsIGJlCi0J ICogZXhlY3V0ZWQsIGFyZSBzYXZlZCBpbiBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuICBUaGVzZSBy ZXN1bHRzIGNvcnJlc3BvbmQKLQkgKiB0byBlYWNoIFBhcnRpdGlvblBydW5lSW5mbyBlbnRyeSwg YW5kIHRoZSBlc19wYXJ0X3BydW5lX3Jlc3VsdHMgbGlzdCBpcwotCSAqIHBhcmFsbGVsIHRvIGVz X3BhcnRfcHJ1bmVfaW5mb3MuCi0JICoKLQkgKiBUaGlzIHdpbGwgYWxzbyBhZGQgdGhlIFJUIGlu ZGV4ZXMgb2Ygc3Vydml2aW5nIGxlYWYgcGFydGl0aW9ucyB0bwotCSAqIGVzX3VucHJ1bmVkX3Jl bGlkcy4KLQkgKi8KLQlFeGVjRG9Jbml0aWFsUHJ1bmluZyhlc3RhdGUpOwotCi0JaWYgKCFFeGVj UGxhblN0aWxsVmFsaWQoZXN0YXRlKSkKLQkJcmV0dXJuOwogCiAJLyoKIAkgKiBOZXh0LCBidWls ZCB0aGUgRXhlY1Jvd01hcmsgYXJyYXkgZnJvbSB0aGUgUGxhblJvd01hcmsocyksIGlmIGFueS4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwppbmRleCA5M2NkYWU2Zjg5Li40NTVlMGQw Zjg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xODEyLDcgKzE4MTIs NyBAQCBhZGp1c3RfcGFydGl0aW9uX2NvbG5vc191c2luZ19tYXAoTGlzdCAqY29sbm9zLCBBdHRy TWFwICphdHRyTWFwKQogICogdXNlIHRoZSBzYW1lIGluZGV4IHRvIHJldHJpZXZlIHRoZSBwcnVu aW5nIHJlc3VsdHMuCiAgKi8KIHZvaWQKLUV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0 YXRlKQorRXhlY0RvSW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUsIENhY2hlZFBsYW4gKmNw bGFuKQogewogCUxpc3RDZWxsICAgKmxjOwogCUxpc3QJICAgKmxvY2tlZF9yZWxpZHMgPSBOSUw7 CkBAIC0xODM4LDcgKzE4MzgsNyBAQCBFeGVjRG9Jbml0aWFsUHJ1bmluZyhFU3RhdGUgKmVzdGF0 ZSkKIAogCQkJdmFsaWRzdWJwbGFucyA9IEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0 YXRlLCB0cnVlLAogCQkJCQkJCQkJCQkJCSAmdmFsaWRzdWJwbGFuX3J0aXMpOwotCQkJaWYgKEV4 ZWNTaG91bGRMb2NrUmVsYXRpb25zKGVzdGF0ZSkpCisJCQlpZiAoY3BsYW4gJiYgQ2FjaGVkUGxh blJlcXVpcmVzTG9ja2luZyhjcGxhbikpCiAJCQl7CiAJCQkJaW50CQlydGluZGV4ID0gLTE7CiAK QEAgLTE4NjYsNyArMTg2Niw3IEBAIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRl KQogCSAqIFJlbGVhc2UgdGhlIHVzZWxlc3MgbG9ja3MgaWYgdGhlIHBsYW4gd29uJ3QgYmUgZXhl Y3V0ZWQuICBUaGlzIGlzIHRoZQogCSAqIHNhbWUgYXMgd2hhdCBDaGVja0NhY2hlZFBsYW4oKSBp biBwbGFuY2FjaGUuYyBkb2VzLgogCSAqLwotCWlmICghRXhlY1BsYW5TdGlsbFZhbGlkKGVzdGF0 ZSkpCisJaWYgKGNwbGFuICYmICFDYWNoZWRQbGFuVmFsaWQoY3BsYW4pKQogCXsKIAkJZm9yZWFj aChsYywgbG9ja2VkX3JlbGlkcykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5o CmluZGV4IGEwODQzNDgxZjcuLjk1ZDg4Njg4NGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFy dGl0aW9uLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgi CiAjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5oIgorI2luY2x1ZGUgInV0aWxzL3BsYW5jYWNoZS5oIgogCiAvKiBTZWUgZXhlY1Bh cnRpdGlvbi5jIGZvciB0aGUgZGVmaW5pdGlvbnMuICovCiB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRp b25EaXNwYXRjaERhdGEgKlBhcnRpdGlvbkRpc3BhdGNoOwpAQCAtMTM2LDcgKzEzNyw3IEBAIHR5 cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUKIAlQYXJ0aXRpb25QcnVuaW5nRGF0YSAq cGFydHBydW5lZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBQYXJ0aXRpb25QcnVuZVN0 YXRlOwogCi12b2lkIEV4ZWNEb0luaXRpYWxQcnVuaW5nKEVTdGF0ZSAqZXN0YXRlKTsKK3ZvaWQg RXhlY0RvSW5pdGlhbFBydW5pbmcoRVN0YXRlICplc3RhdGUsIENhY2hlZFBsYW4gKmNwbGFuKTsK IGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5n KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJCQkJCQkgaW50IG5fdG90YWxfc3VicGxh bnMsCiAJCQkJCQkJCQkJCQkJCSBpbnQgcGFydF9wcnVuZV9pbmRleCwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj dXRvci5oCmluZGV4IDZkNzJmN2Q5ZDYuLjE2NDc0NjFmMGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0 b3IuaApAQCAtNzYsNiArNzYsMTIgQEAKIHR5cGVkZWYgdm9pZCAoKkV4ZWN1dG9yU3RhcnRfaG9v a190eXBlKSAoUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwogZXh0ZXJuIFBHRExM SU1QT1JUIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIEV4ZWN1dG9yU3RhcnRfaG9vazsKIAorLyog SG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxh bigpICovCit0eXBlZGVmIHZvaWQgKCpFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbl9ob29rX3R5cGUp IChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncywKKwkJCQkJCQkJCQkJCSAgIENhY2hl ZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCisJCQkJCQkJCQkJCQkgICBpbnQgcXVlcnlfaW5kZXgp OworZXh0ZXJuIFBHRExMSU1QT1JUIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuX2hvb2tfdHlwZSBF eGVjdXRvclN0YXJ0Q2FjaGVkUGxhbl9ob29rOworCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGluIEV4ZWN1dG9yUnVuKCkgKi8KIHR5cGVkZWYgdm9pZCAoKkV4ZWN1dG9yUnVu X2hvb2tfdHlwZSkgKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCkBAIC0yMDMsNiArMjA5LDkgQEAgZXh0ZXJuIHZvaWQgRXhlY3V0b3JT dGFydENhY2hlZFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsCiAJCQkJCQkJ CQlDYWNoZWRQbGFuU291cmNlICpwbGFuc291cmNlLAogCQkJCQkJCQkJaW50IHF1ZXJ5X2luZGV4 KTsKIGV4dGVybiB2b2lkIHN0YW5kYXJkX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVyeURl c2MsIGludCBlZmxhZ3MpOworZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JTdGFydENhY2hl ZFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MsCisJCQkJCQkJCQkJCSBDYWNo ZWRQbGFuU291cmNlICpwbGFuc291cmNlLAorCQkJCQkJCQkJCQkgaW50IHF1ZXJ5X2luZGV4KTsK IGV4dGVybiB2b2lkIEV4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAogCQkJCQkJU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sIHVpbnQ2NCBjb3VudCwgYm9vbCBleGVjdXRlX29uY2UpOwog ZXh0ZXJuIHZvaWQgc3RhbmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCkBA IC0yNjUsMzEgKzI3NCw2IEBAIGV4dGVybiB2b2lkIEV4ZWNFbmROb2RlKFBsYW5TdGF0ZSAqbm9k ZSk7CiBleHRlcm4gdm9pZCBFeGVjU2h1dGRvd25Ob2RlKFBsYW5TdGF0ZSAqbm9kZSk7CiBleHRl cm4gdm9pZCBFeGVjU2V0VHVwbGVCb3VuZChpbnQ2NCB0dXBsZXNfbmVlZGVkLCBQbGFuU3RhdGUg KmNoaWxkX25vZGUpOwogCi0vKgotICogSXMgdGhlIENhY2hlZFBsYW4gaW4gZXNfY2FjaGVkcGxh biBzdGlsbCB2YWxpZD8KLSAqCi0gKiBDYWxsZWQgZnJvbSBJbml0UGxhbigpIGJlY2F1c2UgaW52 YWxpZGF0aW9uIG1lc3NhZ2VzIHRoYXQgYWZmZWN0IHRoZSBwbGFuCi0gKiBtaWdodCBiZSByZWNl aXZlZCBhZnRlciBsb2NrcyBoYXZlIGJlZW4gdGFrZW4gb24gcnVudGltZS1wcnVuYWJsZSByZWxh dGlvbnMuCi0gKiBUaGUgY2FsbGVyIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiB0 aGUgcGxhbiBoYXMgYmVjb21lIGludmFsaWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotRXhl Y1BsYW5TdGlsbFZhbGlkKEVTdGF0ZSAqZXN0YXRlKQotewotCXJldHVybiBlc3RhdGUtPmVzX2Nh Y2hlZHBsYW4gPT0gTlVMTCA/IHRydWUgOgotCQlDYWNoZWRQbGFuVmFsaWQoZXN0YXRlLT5lc19j YWNoZWRwbGFuKTsKLX0KLQotLyoKLSAqIExvY2tzIGFyZSBuZWVkZWQgb25seSBpZiBydW5uaW5n IGEgY2FjaGVkIHBsYW4gdGhhdCBtaWdodCBjb250YWluIHVubG9ja2VkCi0gKiByZWxhdGlvbnMs IHN1Y2ggYXMgYSByZXVzZWQgZ2VuZXJpYyBwbGFuLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wK LUV4ZWNTaG91bGRMb2NrUmVsYXRpb25zKEVTdGF0ZSAqZXN0YXRlKQotewotCXJldHVybiBlc3Rh dGUtPmVzX2NhY2hlZHBsYW4gPT0gTlVMTCA/IGZhbHNlIDoKLQkJQ2FjaGVkUGxhblJlcXVpcmVz TG9ja2luZyhlc3RhdGUtPmVzX2NhY2hlZHBsYW4pOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhl Y1Byb2NOb2RlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRp b24vZGVsYXlfZXhlY3V0aW9uLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9k ZWxheV9leGVjdXRpb24uYwppbmRleCA0NGFhODI4ZmRmLi5hM2JmYWVkMzcyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9kZWxheV9leGVjdXRpb24uYworKysg Yi9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9kZWxheV9leGVjdXRpb24uYwpAQCAt NDEsNyArNDEsNyBAQCBzdGF0aWMgaW50CWV4ZWN1dG9yX3N0YXJ0X2xvY2tfaWQgPSAwOwogCiAv KiBTYXZlIHByZXZpb3VzIGhvb2sgdXNlcnMgdG8gYmUgYSBnb29kIGNpdGl6ZW4gKi8KIHN0YXRp YyBwbGFubmVyX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfaG9vayA9IE5VTEw7Ci1zdGF0aWMgRXhl Y3V0b3JTdGFydF9ob29rX3R5cGUgcHJldl9FeGVjdXRvclN0YXJ0X2hvb2sgPSBOVUxMOworc3Rh dGljIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yU3RhcnRD YWNoZWRQbGFuX2hvb2sgPSBOVUxMOwogCiAKIC8qIHBsYW5uZXJfaG9vayBmdW5jdGlvbiB0byBw cm92aWRlIHRoZSBkZXNpcmVkIGRlbGF5ICovCkBAIC03OSw3ICs3OSw5IEBAIGRlbGF5X2V4ZWN1 dGlvbl9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCiAv KiBFeGVjdXRvclN0YXJ0X2hvb2sgZnVuY3Rpb24gdG8gcHJvdmlkZSB0aGUgZGVzaXJlZCBkZWxh eSAqLwogc3RhdGljIHZvaWQKLWRlbGF5X2V4ZWN1dGlvbl9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVz YyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQorZGVsYXlfZXhlY3V0aW9uX0V4ZWN1dG9yU3RhcnRD YWNoZWRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzLAorCQkJCQkJCQkJCUNh Y2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsCisJCQkJCQkJCQkJaW50IHF1ZXJ5X2luZGV4KQog ewogCS8qIElmIGVuYWJsZWQsIGRlbGF5IGJ5IHRha2luZyBhbmQgcmVsZWFzaW5nIHRoZSBzcGVj aWZpZWQgbG9jayAqLwogCWlmIChleGVjdXRvcl9zdGFydF9sb2NrX2lkICE9IDApCkBAIC05Nywx MyArOTksMTUgQEAgZGVsYXlfZXhlY3V0aW9uX0V4ZWN1dG9yU3RhcnQoUXVlcnlEZXNjICpxdWVy eURlc2MsIGludCBlZmxhZ3MpCiAJfQogCiAJLyogTm93IHN0YXJ0IHRoZSBleGVjdXRvciwgcG9z c2libHkgdmlhIGEgcHJldmlvdXMgaG9vayB1c2VyICovCi0JaWYgKHByZXZfRXhlY3V0b3JTdGFy dF9ob29rKQotCQlwcmV2X0V4ZWN1dG9yU3RhcnRfaG9vayhxdWVyeURlc2MsIGVmbGFncyk7CisJ aWYgKHByZXZfRXhlY3V0b3JTdGFydENhY2hlZFBsYW5faG9vaykKKwkJcHJldl9FeGVjdXRvclN0 YXJ0Q2FjaGVkUGxhbl9ob29rKHF1ZXJ5RGVzYywgZWZsYWdzLCBwbGFuc291cmNlLAorCQkJCQkJ CQkJCSAgcXVlcnlfaW5kZXgpOwogCWVsc2UKLQkJc3RhbmRhcmRfRXhlY3V0b3JTdGFydChxdWVy eURlc2MsIGVmbGFncyk7CisJCXN0YW5kYXJkX0V4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKHF1ZXJ5 RGVzYywgZWZsYWdzLCBwbGFuc291cmNlLAorCQkJCQkJCQkJCSBxdWVyeV9pbmRleCk7CiAKIAlp ZiAoZXhlY3V0b3Jfc3RhcnRfbG9ja19pZCAhPSAwKQotCQllbG9nKE5PVElDRSwgIkZpbmlzaGVk IEV4ZWN1dG9yU3RhcnQoKTogQ2FjaGVkUGxhbiBpcyAlcyIsCisJCWVsb2coTk9USUNFLCAiRmlu aXNoZWQgRXhlY3V0b3JTdGFydENhY2hlZFBsYW4oKTogQ2FjaGVkUGxhbiBpcyAlcyIsCiAJCQkg Q2FjaGVkUGxhblZhbGlkKHF1ZXJ5RGVzYy0+Y3BsYW4pID8gInZhbGlkIiA6ICJub3QgdmFsaWQi KTsKIH0KIApAQCAtMTM5LDYgKzE0Myw2IEBAIF9QR19pbml0KHZvaWQpCiAJLyogSW5zdGFsbCBv dXIgaG9va3MuICovCiAJcHJldl9wbGFubmVyX2hvb2sgPSBwbGFubmVyX2hvb2s7CiAJcGxhbm5l cl9ob29rID0gZGVsYXlfZXhlY3V0aW9uX3BsYW5uZXI7Ci0JcHJldl9FeGVjdXRvclN0YXJ0X2hv b2sgPSBFeGVjdXRvclN0YXJ0X2hvb2s7Ci0JRXhlY3V0b3JTdGFydF9ob29rID0gZGVsYXlfZXhl Y3V0aW9uX0V4ZWN1dG9yU3RhcnQ7CisJcHJldl9FeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbl9ob29r ID0gRXhlY3V0b3JTdGFydENhY2hlZFBsYW5faG9vazsKKwlFeGVjdXRvclN0YXJ0Q2FjaGVkUGxh bl9ob29rID0gZGVsYXlfZXhlY3V0aW9uX0V4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuOwogfQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vZXhwZWN0ZWQvY2FjaGVk LXBsYW4taW52YWwub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9kZWxheV9leGVjdXRpb24vZXhwZWN0 ZWQvY2FjaGVkLXBsYW4taW52YWwub3V0CmluZGV4IDViZmIyYjMzYjMuLjE2NWY4NjViN2EgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZGVsYXlfZXhlY3V0aW9uL2V4cGVjdGVkL2NhY2hl ZC1wbGFuLWludmFsLm91dAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2RlbGF5X2V4ZWN1dGlvbi9l eHBlY3RlZC9jYWNoZWQtcGxhbi1pbnZhbC5vdXQKQEAgLTMyLDggKzMyLDcgQEAgdAogKDEgcm93 KQogCiBzdGVwIHMxZXhlYzogPC4uLiBjb21wbGV0ZWQ+Ci1zMTogTk9USUNFOiAgRmluaXNoZWQg RXhlY3V0b3JTdGFydCgpOiBDYWNoZWRQbGFuIGlzIG5vdCB2YWxpZAotczE6IE5PVElDRTogIEZp bmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTogQ2FjaGVkUGxhbiBpcyB2YWxpZAorczE6IE5PVElDRTog IEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6IENhY2hlZFBsYW4gaXMgdmFsaWQK IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIExvY2tSb3dzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKQEAgLTQ4LDcgKzQ3LDcgQEAgc3RhcnRpbmcgcGVybXV0YXRpb246IHMxcHJlcDIgczJsb2Nr IHMxZXhlYzIgczJkcm9waSBzMnVubG9jawogc3RlcCBzMXByZXAyOiBTRVQgcGxhbl9jYWNoZV9t b2RlID0gZm9yY2VfZ2VuZXJpY19wbGFuOwogCQkgIFBSRVBBUkUgcTIgQVMgU0VMRUNUICogRlJP TSBmb292IFdIRVJFIGEgPSBvbmUoKSBvciBhID0gdHdvKCk7CiAJCSAgRVhQTEFJTiAoQ09TVFMg T0ZGKSBFWEVDVVRFIHEyOwotczE6IE5PVElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTog Q2FjaGVkUGxhbiBpcyB2YWxpZAorczE6IE5PVElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnRD YWNoZWRQbGFuKCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQXBwZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKQEAgLTgxLDggKzgwLDcgQEAgdAogKDEgcm93KQogCiBzdGVwIHMx ZXhlYzI6IDwuLi4gY29tcGxldGVkPgotczE6IE5PVElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3Rh cnQoKTogQ2FjaGVkUGxhbiBpcyBub3QgdmFsaWQKLXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVj dXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKK3MxOiBOT1RJQ0U6ICBGaW5pc2hlZCBF eGVjdXRvclN0YXJ0Q2FjaGVkUGxhbigpOiBDYWNoZWRQbGFuIGlzIHZhbGlkCiBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFwcGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCkBAIC05OCw5ICs5Niw5IEBAIHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMXBy ZXAzIHMybG9jayBzMWV4ZWMzIHMyZHJvcGkgczJ1bmxvY2sKIHN0ZXAgczFwcmVwMzogU0VUIHBs YW5fY2FjaGVfbW9kZSA9IGZvcmNlX2dlbmVyaWNfcGxhbjsKIAkJICBQUkVQQVJFIHEzIEFTIFVQ REFURSBmb292IFNFVCBhID0gYSBXSEVSRSBhID0gb25lKCkgb3IgYSA9IHR3bygpOwogCQkgIEVY UExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBxMzsKLXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVj dXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKLXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBF eGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKLXMxOiBOT1RJQ0U6ICBGaW5pc2hl ZCBFeGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKK3MxOiBOT1RJQ0U6ICBGaW5p c2hlZCBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbigpOiBDYWNoZWRQbGFuIGlzIHZhbGlkCitzMTog Tk9USUNFOiAgRmluaXNoZWQgRXhlY3V0b3JTdGFydENhY2hlZFBsYW4oKTogQ2FjaGVkUGxhbiBp cyB2YWxpZAorczE6IE5PVElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6 IENhY2hlZFBsYW4gaXMgdmFsaWQKIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmVzdGVkIExvb3AgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE3OCwxMCArMTc2 LDkgQEAgdAogKDEgcm93KQogCiBzdGVwIHMxZXhlYzM6IDwuLi4gY29tcGxldGVkPgotczE6IE5P VElDRTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTogQ2FjaGVkUGxhbiBpcyBub3QgdmFsaWQK LXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMgdmFs aWQKLXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4gaXMg dmFsaWQKLXMxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVjdXRvclN0YXJ0KCk6IENhY2hlZFBsYW4g aXMgdmFsaWQKK3MxOiBOT1RJQ0U6ICBGaW5pc2hlZCBFeGVjdXRvclN0YXJ0Q2FjaGVkUGxhbigp OiBDYWNoZWRQbGFuIGlzIHZhbGlkCitzMTogTk9USUNFOiAgRmluaXNoZWQgRXhlY3V0b3JTdGFy dENhY2hlZFBsYW4oKTogQ2FjaGVkUGxhbiBpcyB2YWxpZAorczE6IE5PVElDRTogIEZpbmlzaGVk IEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6IENhY2hlZFBsYW4gaXMgdmFsaWQKIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIE5lc3RlZCBMb29wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKQEAgLTIzMyw3ICsyMzAsNyBAQCBzdGVwIHMxcHJlcDQ6IFNFVCBwbGFuX2NhY2hl X21vZGUgPSBmb3JjZV9nZW5lcmljX3BsYW47CiAJCSAgU0VUIGVuYWJsZV9zZXFzY2FuIFRPIG9m ZjsKIAkJICBQUkVQQVJFIHE0IEFTIFNFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEp IFdIRVJFIEVYSVNUUyAoU0VMRUNUICogRlJPTSBmb292IFdIRVJFIGEgPSAkMSBGT1IgVVBEQVRF KTsKIAkJICBFWFBMQUlOIChDT1NUUyBPRkYpIEVYRUNVVEUgcTQgKDEpOwotczE6IE5PVElDRTog IEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTogQ2FjaGVkUGxhbiBpcyB2YWxpZAorczE6IE5PVElD RTogIEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6IENhY2hlZFBsYW4gaXMgdmFs aWQKIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI2NCw4ICsyNjEsNyBAQCB0CiAoMSByb3cp CiAKIHN0ZXAgczFleGVjNDogPC4uLiBjb21wbGV0ZWQ+Ci1zMTogTk9USUNFOiAgRmluaXNoZWQg RXhlY3V0b3JTdGFydCgpOiBDYWNoZWRQbGFuIGlzIG5vdCB2YWxpZAotczE6IE5PVElDRTogIEZp bmlzaGVkIEV4ZWN1dG9yU3RhcnQoKTogQ2FjaGVkUGxhbiBpcyB2YWxpZAorczE6IE5PVElDRTog IEZpbmlzaGVkIEV4ZWN1dG9yU3RhcnRDYWNoZWRQbGFuKCk6IENhY2hlZFBsYW4gaXMgdmFsaWQK IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBSZXN1bHQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0gCjIuNDMuMAoK --000000000000fd59390628d10f5a--