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 1wHEfJ-006yxZ-0W for pgsql-bugs@arkaria.postgresql.org; Mon, 27 Apr 2026 05:37:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wHEfI-00CJ7m-1J for pgsql-bugs@arkaria.postgresql.org; Mon, 27 Apr 2026 05:37:52 +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 1wHEfH-00CJ7e-2i for pgsql-bugs@lists.postgresql.org; Mon, 27 Apr 2026 05:37:52 +0000 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHEfF-00000002yjw-23eP for pgsql-bugs@lists.postgresql.org; Mon, 27 Apr 2026 05:37:50 +0000 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-79db5e18ac6so111247637b3.1 for ; Sun, 26 Apr 2026 22:37:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777268269; cv=none; d=google.com; s=arc-20240605; b=CBlmaYSRiX2A1ZYQiSTKKiLUZn7MphJ3wh1yLC9Y3MhdZuPDN3OvkwNNSaEjkTpl5u nlGsxj6c/78sVOu9bAvEzOQqQ5MrKeszOXvxbq4fcRS5YlK7Teziv57TgovpuRaVREMv v7WAkUM/fikmiBNhhEEG1Vt/pHvbO4lCKu0fRIV+PO7REEyIHpECC15/ENOJFM/LEUfQ mKl3vWqoYNOXvAibKXCNJirlXVSwGrZ6h/s1ZwW3z+oHmLmXAwD1J6Hv06pXxrhOenqR kT8UPxOSoxjo9stdiqFM+2MSKZmEgbQ9QMRPe6HSQBKn1c47GPlK7zuz5A1qMdP0oRa0 w+TA== 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=lOD4rziLOLXm3KDOz2L/wWpLMfWkHKs27NkLuAxWMP4=; fh=lHuc46tqR9UOrKX7Vmk1y3l42hfR2yn1NN4VaIsXdOk=; b=CCs61/bonwnPUF5rgCIOWPW1DNi4ZQYAkJMAH6pk1NAI/F/CEU4FcmFaYGu9Sv5EXy xBHcSBc1OAnRtjBvhUMY/o3XYvq6WHKmT54NCVfOHLg6ZmhvT990+EP1kmEsAPUI5/kN Ddv3kOhSUlkAa51pCAkLIKIqB+LD9G+JNEMpsjhUjwma4ha12FWyUFTi+eBANpr44XzD +odq5yU1rv+DDYM6gAqlMV2S9i0IxoBlAG4Zt03D3HzVCL7A4w7aJpDN5toSCqxKz/iB CrHUHrgRfuR9kYrCsCMIgek19JSNwtNEDmfoklsVb+H0SsY5pptR1RzVoum+tMtNPBnN qnOg==; 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=20251104; t=1777268269; x=1777873069; 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=lOD4rziLOLXm3KDOz2L/wWpLMfWkHKs27NkLuAxWMP4=; b=SstTSq+K4O4LsFUhXT3wHlrJuIaBqtFiPtJVhNmk6RaxitEtPJ49eiQ+Qj1XcYusGE kUKExVu9pLxPolB7uSsYNug8F88vBrjFdtPFFZJQUuH4d3V/FUmbzn7L4WKHtrl5BPdL UxfG+Nvse0zNFj9s4TXvXAAVhDebH/eoYqWL0xI8zfcT9foExtWxcYDKYwsKpc3rs9IS nKQ/y1vGw1/nbpFWiPOwQJYjeaa0ADvJkNXxIGVyw30fw/mjA25IrknKKg+DG5p/4M7G Wzi+WuTC2/03MSutcolqZV6Z9yf0M2+XpRmI78ZInl7oh7I6x1eIeYV4FbxUwypPHD16 2pbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777268269; x=1777873069; 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=lOD4rziLOLXm3KDOz2L/wWpLMfWkHKs27NkLuAxWMP4=; b=pNUeMrpnI7iBDWE9KFBQy2A06r9nilnzbVIpF3BHZqfl9Y5LYiXtNfY+Pin4BBoGqq 2dWihEbrXOqTJWMjngZB9AbTFF1d11fFhUoaRAnhESap8y6UxyC6nksMf2g0YawuW/79 /zUA7iy59tYV49LnRz9uHDMgSAMDZtgPsAJdzKDGmxRpyaefBnezy6M/7nylh2OKkuCQ y6CrTqZ13JJLZvdN/Ob2FySgFukuSYjqPxfIxxWjGWLlptO/LIaoYchDGi+iVgsziLgA anadvKurVEiAi+R3o6EeiyX6N22OjPD7dW0hJvIRRMXT3m9Tjd0ZXxLsbdf55tuAUU7L 0sqQ== X-Forwarded-Encrypted: i=1; AFNElJ/tmKMhCsTBONXq5/a0Sn+OwHLOS03JlPIaD9wcm0RpObxvhEgSmUuh+NxwOepl8Z16vTmgenwbQxYH@lists.postgresql.org X-Gm-Message-State: AOJu0YwiBFsRVMku18dM7hjaLwrJDFI7ubSJ2DLV9tiBzkYALR0NAmt9 EJPQ2+bfhH5ONL5p/69jTs3r1B8QfZF0Q55ejifd6mLSjG/tBWNzci0bTKUuBRxO1A1MVi/39dz 3O/s88d6vf9+mE+xVCFkt8KeAKcdcIwA= X-Gm-Gg: AeBDiev5zoUgROJNZed7raQmrQAS0Q0zpJNl/q8iTAcCagSITU2BgVAktGg7ySDZ40c ZUQOyFtesj6tKaNqWhYEV/WQkWXPfHCbUwesEtCkIJVtrkiydFn2rElKNm7Jh+j5mOdQ/JUbRqY sbfHsaj4zZysVs7dsec3yD+pIsSBeNhh5pI445f5fWGPGzurr2AeT5qwg+V7Tp0L9wGPRvmWN/n j3ReDEZJXvziTZgLbNp4n8BZLf0sdBdQg14a6N5Ysl9/pjDeFgmcGuAUzskF9NpXAQAzECiXZSc lCDrBhGgIm5/qLI0TLFtHKpH133G+HPVwrhaiR+nVmfGbDnhW46Pfe+Y/Rv1 X-Received: by 2002:a05:690c:9990:b0:7b9:f136:56d8 with SMTP id 00721157ae682-7b9f1365e67mr314552877b3.30.1777268269197; Sun, 26 Apr 2026 22:37:49 -0700 (PDT) MIME-Version: 1.0 References: <19466-dc32827173299fd4@postgresql.org> In-Reply-To: From: Ayush Tiwari Date: Mon, 27 Apr 2026 11:07:43 +0530 X-Gm-Features: AVHnY4ICB1Ao-RUaV2rS5hv9hGmq_q6EjA71O9d_PpYm1FQJchSBVJ1FmX8pG-E Message-ID: Subject: Re: BUG #19466: Server crash (SIGSEGV) when FETCH after ALTER TYPE during open cursor To: haogangmao@gmail.com, pgsql-bugs@lists.postgresql.org Cc: David Rowley Content-Type: multipart/mixed; boundary="000000000000dbaae306506a83ed" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dbaae306506a83ed Content-Type: multipart/alternative; boundary="000000000000dbaae206506a83eb" --000000000000dbaae206506a83eb Content-Type: text/plain; charset="UTF-8" Hi, On Sat, 25 Apr 2026 at 15:45, Ayush Tiwari wrote: > Hi, > > On Sat, 25 Apr 2026 at 14:34, PG Bug reporting form < > noreply@postgresql.org> wrote: > >> The following bug has been logged on the website: >> >> Summary: >> PostgreSQL crashes with SIGSEGV when a cursor is open over a composite >> type and the type is modified via ALTER TYPE during the same transaction, >> followed by a second FETCH. >> >> Reproduction steps (minimal): >> CREATE TYPE foo AS (a INT, b INT); >> BEGIN; >> DECLARE c CURSOR FOR >> SELECT (i, power(2, 30))::foo >> FROM generate_series(1,10) i; >> FETCH c; >> ALTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT; >> FETCH c; >> COMMIT; >> >> Expected: Error message (type modified during active cursor) >> Actual: Server process terminated with signal 11 (Segmentation fault) >> >> Server log: >> client backend (PID 85) was terminated by signal 11: Segmentation fault >> Failed process was running: [above SQL] >> > > > I confirmed the crash on master and traced the root cause. EEOP_ROW was the > only rowtype-aware expression step that cached its TupleDesc at init > time without an ExprEvalRowtypeCache guard. When ALTER TYPE changes > an attribute's storage properties (e.g. int to text), the stale > descriptor leads to SIGSEGV. > > I looked through nearby rowtype-producing paths and found a few more cases with the same general shape, so I split the proposed fix into two patches: 0001: Detect row type changes in EEOP_ROW expressions EEOP_ROW was caching the target composite type's TupleDesc at executor startup and never re-checking it. The patch stores the TypeCacheEntry pointer and tupDesc_identifier for named composite row results, then compares the identifier in ExecEvalRow() before forming the composite Datum. If the type changed, the cursor now reports: ERROR: row type has changed instead of producing a malformed Datum that can later crash the backend. 0002: Detect row type changes in additional composite result paths While checking for similar stale TupleDesc reuse, I found the same kind of guard is also needed for: - whole-row Vars returning a named composite type - SQL-language functions returning a whole named composite result - targetlist SRFs returning named composite results The second patch adds the same typcache TupleDesc identity check in those paths and adds regression coverage for cursor/ALTER TYPE/FETCH cases that previously crashed or could reuse stale layout information. With these patches, the original repro and the additional repro cases fail cleanly with "row type ... has changed" errors, and the backend remains running. Thoughts? Regards, Ayush --000000000000dbaae206506a83eb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Sat, 25 Apr 2= 026 at 15:45, Ayush Tiwari <ayushtiwari.slg01@gmail.com> wrote:
Hi,
On Sat, = 25 Apr 2026 at 14:34, PG Bug reporting form <noreply@postgresql.org> wrote:
<= /div>
The following bug ha= s been logged on the website:

Summary:
PostgreSQL crashes with SIGSEGV when a cursor is open over a composite
type and the type is modified via ALTER TYPE during the same transaction, followed by a second FETCH.

Reproduction steps (minimal):
=C2=A0 CREATE TYPE foo AS (a INT, b INT);
=C2=A0 BEGIN;
=C2=A0 DECLARE c CURSOR FOR
=C2=A0 =C2=A0 SELECT (i, power(2, 30))::foo
=C2=A0 =C2=A0 FROM generate_series(1,10) i;
=C2=A0 FETCH c;
=C2=A0 ALTER TYPE foo ALTER ATTRIBUTE b TYPE TEXT;
=C2=A0 FETCH c;
=C2=A0 COMMIT;

Expected: Error message (type modified during active cursor)
Actual:=C2=A0 =C2=A0Server process terminated with signal 11 (Segmentation = fault)

Server log:
=C2=A0 client backend (PID 85) was terminated by signal 11: Segmentation fa= ult
=C2=A0 Failed process was running: [above SQL]
=C2=A0<= /div>
I confirmed the crash on master and traced the root cause. EEOP_RO= W was the
only rowtype-aware expression step that cached its TupleDesc a= t init
time without an ExprEvalRowtypeCache guard. When ALTER TYPE chang= es
an attribute's storage properties (e.g. int to text), the staledescriptor leads to SIGSEGV.


I l= ooked through nearby rowtype-producing paths and found a few more cases
= with the same general shape, so I split the proposed fix into two patches:<= br>
=C2=A0 0001: Detect row type changes in EEOP_ROW expressions

= =C2=A0 =C2=A0 EEOP_ROW was caching the target composite type's TupleDes= c at executor
=C2=A0 =C2=A0 startup and never re-checking it.=C2=A0 The = patch stores the TypeCacheEntry
=C2=A0 =C2=A0 pointer and tupDesc_identi= fier for named composite row results, then
=C2=A0 =C2=A0 compares the id= entifier in ExecEvalRow() before forming the composite
=C2=A0 =C2=A0 Dat= um.=C2=A0 If the type changed, the cursor now reports:

=C2=A0 =C2=A0= =C2=A0 ERROR: =C2=A0row type <type-name> has changed

=C2=A0 = =C2=A0 instead of producing a malformed Datum that can later crash the back= end.

=C2=A0 0002: Detect row type changes in additional composite re= sult paths

=C2=A0 =C2=A0 While checking for similar stale TupleDesc = reuse, I found the same kind
=C2=A0 =C2=A0 of guard is also needed for:<= br>
=C2=A0 =C2=A0 =C2=A0 - whole-row Vars returning a named composite ty= pe
=C2=A0 =C2=A0 =C2=A0 - SQL-language functions returning a whole named= composite result
=C2=A0 =C2=A0 =C2=A0 - targetlist SRFs returning named= composite results

=C2=A0 =C2=A0 The second patch adds the same typc= ache TupleDesc identity check in
=C2=A0 =C2=A0 those paths and adds regr= ession coverage for cursor/ALTER TYPE/FETCH
=C2=A0 =C2=A0 cases that pre= viously crashed or could reuse stale layout information.

With these = patches, the original repro and the additional repro cases fail
cleanly = with "row type ... has changed" errors, and the backend remainsrunning.

Thoughts?

Regards,
Ayush
=C2=A0
=
--000000000000dbaae206506a83eb-- --000000000000dbaae306506a83ed Content-Type: application/octet-stream; name="v1-0001-Detect-row-type-changes-in-EEOP_ROW-expressions 2.patch" Content-Disposition: attachment; filename="v1-0001-Detect-row-type-changes-in-EEOP_ROW-expressions 2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mogrlom11 RnJvbSA2NjJmNjc2YzAwN2ViNmFlOTQ5ZGVlYTIyMjNiMDBhOGI4YTI4ZTBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAyNyBBcHIgMjAyNiAwNToxMDozOSArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjEgMS8yXSBEZXRlY3Qgcm93IHR5cGUgY2hhbmdlcyBpbiBFRU9QX1JPVyBleHByZXNzaW9u cwoKRUVPUF9ST1cgY2FjaGVkIHRoZSB0YXJnZXQgY29tcG9zaXRlIHR5cGUncyBUdXBsZURlc2Mg YXQgZXhlY3V0b3IKc3RhcnR1cCBhbmQgbmV2ZXIgcmUtY2hlY2tlZCBpdC4gIElmIEFMVEVSIFRZ UEUgbW9kaWZpZWQgdGhlIHR5cGUKd2hpbGUgYSBjdXJzb3Igd2FzIHN0aWxsIG9wZW4sIHRoZSBu ZXh0IEZFVENIIHdvdWxkIHVzZSB0aGUgc3RhbGUKZGVzY3JpcHRvciwgd2hpY2ggY291bGQgY3Jh c2ggdGhlIGJhY2tlbmQgd2l0aCBTSUdTRUdWIHdoZW4gYXR0cmlidXRlCnN0b3JhZ2UgcHJvcGVy dGllcyBjaGFuZ2VkIChlLmcuIGludCAtPiB0ZXh0KS4KCk90aGVyIHJvd3R5cGUtYXdhcmUgc3Rl cHMgKEVFT1BfRklFTERTRUxFQ1QsIEVFT1BfRklFTERTVE9SRV9ERUZPUk0sCkVFT1BfTlVMTFRF U1RfUk9XKiwgRUVPUF9DT05WRVJUX1JPV1RZUEUpIGFscmVhZHkgZ3VhcmQgYWdhaW5zdCB0aGlz CnZpYSBFeHByRXZhbFJvd3R5cGVDYWNoZS4gIEFkZCB0aGUgc2FtZSBjaGVjayB0byBFRU9QX1JP Vzogc3Rhc2ggdGhlClR5cGVDYWNoZUVudHJ5IHBvaW50ZXIgYW5kIHR1cERlc2NfaWRlbnRpZmll ciBhdCBpbml0IHRpbWUsIGFuZApjb21wYXJlIGF0IHJ1bnRpbWUgaW4gRXhlY0V2YWxSb3coKSwg cmFpc2luZyBhbiBlcnJvciBpZiB0aGUgdHlwZSBoYXMKY2hhbmdlZC4KLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICB8IDE1ICsrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyAgfCAxMSArKysrKysrKysrKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICAgfCAgMSArCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Jvd3R5cGVzLm91dCB8IDE3ICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9yb3d0eXBlcy5zcWwgICAgICB8IDEyICsrKysrKysrKysrKwogNSBmaWxlcyBj aGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHByLmMKaW5kZXggNzcyMjkxNDFiMzguLjhiODNlNWQ3MWVhIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHByLmMKQEAgLTIwMTEsMTEgKzIwMTEsMjQgQEAgRXhlY0luaXRFeHByUmVjKEV4cHIgKm5vZGUs IEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCUV4ZWNUeXBlU2V0Q29sTmFtZXModHVwZGVzYywgcm93 ZXhwci0+Y29sbmFtZXMpOwogCQkJCQkvKiBCbGVzcyB0aGUgdHVwZGVzYyBzbyBpdCBjYW4gYmUg bG9va2VkIHVwIGxhdGVyICovCiAJCQkJCUJsZXNzVHVwbGVEZXNjKHR1cGRlc2MpOworCQkJCQlz Y3JhdGNoLmQucm93LnJvd2NhY2hlLmNhY2hlcHRyID0gTlVMTDsKKwkJCQkJc2NyYXRjaC5kLnJv dy5yb3djYWNoZS50dXBkZXNjX2lkID0gMDsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKKwkJCQkJ VHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5OworCiAJCQkJCS8qIGl0J3MgYmVlbiBjYXN0IHRvIGEg bmFtZWQgdHlwZSwgdXNlIHRoYXQgKi8KLQkJCQkJdHVwZGVzYyA9IGxvb2t1cF9yb3d0eXBlX3R1 cGRlc2NfY29weShyb3dleHByLT5yb3dfdHlwZWlkLCAtMSk7CisJCQkJCXR5cGVudHJ5ID0gbG9v a3VwX3R5cGVfY2FjaGUocm93ZXhwci0+cm93X3R5cGVpZCwKKwkJCQkJCQkJCQkJICAgVFlQRUNB Q0hFX1RVUERFU0MpOworCQkJCQlpZiAodHlwZW50cnktPnR1cERlc2MgPT0gTlVMTCkKKwkJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZ UEUpLAorCQkJCQkJCQkgZXJybXNnKCJ0eXBlICVzIGlzIG5vdCBjb21wb3NpdGUiLAorCQkJCQkJ CQkJCWZvcm1hdF90eXBlX2JlKHJvd2V4cHItPnJvd190eXBlaWQpKSkpOworCQkJCQl0dXBkZXNj ID0gQ3JlYXRlVHVwbGVEZXNjQ29weUNvbnN0cih0eXBlbnRyeS0+dHVwRGVzYyk7CisJCQkJCXNj cmF0Y2guZC5yb3cucm93Y2FjaGUuY2FjaGVwdHIgPSB0eXBlbnRyeTsKKwkJCQkJc2NyYXRjaC5k LnJvdy5yb3djYWNoZS50dXBkZXNjX2lkID0gdHlwZW50cnktPnR1cERlc2NfaWRlbnRpZmllcjsK IAkJCQl9CiAKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXgg MDYzNGFmOTY0YTkuLjBlYzA2ZTg3Mjc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50 ZXJwLmMKQEAgLTM2NjcsNiArMzY2NywxNyBAQCBFeGVjRXZhbFJvdyhFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wKQogewogCUhlYXBUdXBsZQl0dXBsZTsKIAorCWlmIChvcC0+ZC5y b3cucm93Y2FjaGUudHVwZGVzY19pZCAhPSAwKQorCXsKKwkJVHlwZUNhY2hlRW50cnkgKnR5cGVu dHJ5ID0gKFR5cGVDYWNoZUVudHJ5ICopIG9wLT5kLnJvdy5yb3djYWNoZS5jYWNoZXB0cjsKKwor CQlpZiAodHlwZW50cnktPnR1cERlc2NfaWRlbnRpZmllciAhPSBvcC0+ZC5yb3cucm93Y2FjaGUu dHVwZGVzY19pZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfREFU QVRZUEVfTUlTTUFUQ0gpLAorCQkJCQkgZXJybXNnKCJyb3cgdHlwZSAlcyBoYXMgY2hhbmdlZCIs CisJCQkJCQkJZm9ybWF0X3R5cGVfYmUob3AtPmQucm93LnR1cGRlc2MtPnRkdHlwZWlkKSkpKTsK Kwl9CisKIAkvKiBidWlsZCB0dXBsZSBmcm9tIGV2YWx1YXRlZCBmaWVsZCB2YWx1ZXMgKi8KIAl0 dXBsZSA9IGhlYXBfZm9ybV90dXBsZShvcC0+ZC5yb3cudHVwZGVzYywKIAkJCQkJCQlvcC0+ZC5y b3cuZWxlbXZhbHVlcywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHBy LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmluZGV4IGM2MWIzZDYyNGQ1Li41 MzJlMDFiN2I2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBAIC00OTksNiArNDk5LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCXN0cnVjdAogCQl7CiAJCQlUdXBsZURlc2MJ dHVwZGVzYzsJLyogZGVzY3JpcHRvciBmb3IgcmVzdWx0IHR1cGxlcyAqLworCQkJRXhwckV2YWxS b3d0eXBlQ2FjaGUgcm93Y2FjaGU7CiAJCQkvKiB3b3Jrc3BhY2UgZm9yIHRoZSB2YWx1ZXMgY29u c3RpdHV0aW5nIHRoZSByb3c6ICovCiAJCQlEYXR1bQkgICAqZWxlbXZhbHVlczsKIAkJCWJvb2wJ ICAgKmVsZW1udWxsczsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93 dHlwZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3d0eXBlcy5vdXQKaW5kZXgg OTU2YmMyZDAyZmMuLjdlZGU0NWIzMjBhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3Jvd3R5cGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3R5 cGVzLm91dApAQCAtMTQwOCwzICsxNDA4LDIwIEBAIEVSUk9SOiAgY29sdW1uICJvaWQiIG5vdCBm b3VuZCBpbiBkYXRhIHR5cGUgY29tcG9zaXRldGFibGUKIExJTkUgMTogU0VMRUNUIChOVUxMOjpj b21wb3NpdGV0YWJsZSkub2lkOwogICAgICAgICAgICAgICAgIF4KIERST1AgVEFCTEUgY29tcG9z aXRldGFibGU7CistLSBBIG5hbWVkIFJPVygpIHJlc3VsdCBtdXN0IG5vdCBzdXJ2aXZlIEFMVEVS IFRZUEUgd2l0aCB0aGUgb2xkIGxheW91dC4KK0NSRUFURSBUWVBFIGN1cnNvcl9yb3d0eXBlIEFT IChhIGludCwgYiBpbnQpOworQkVHSU47CitERUNMQVJFIGMgQ1VSU09SIEZPUgorICBTRUxFQ1Qg KGksIHBvd2VyKDIsIDMwKSk6OmN1cnNvcl9yb3d0eXBlCisgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDIpIGk7CitGRVRDSCBjOworICAgICAgcm93ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLQor ICgxLDEwNzM3NDE4MjQpCisoMSByb3cpCisKK0FMVEVSIFRZUEUgY3Vyc29yX3Jvd3R5cGUgQUxU RVIgQVRUUklCVVRFIGIgVFlQRSB0ZXh0OworRkVUQ0ggYzsKK0VSUk9SOiAgcm93IHR5cGUgY3Vy c29yX3Jvd3R5cGUgaGFzIGNoYW5nZWQKK1JPTExCQUNLOworRFJPUCBUWVBFIGN1cnNvcl9yb3d0 eXBlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93dHlwZXMuc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcm93dHlwZXMuc3FsCmluZGV4IDE3NGIwNjIxNDRhLi5lYzY0Zjk2 OGJlOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93dHlwZXMuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3R5cGVzLnNxbApAQCAtNTYyLDMgKzU2MiwxNSBAQCBT RUxFQ1QgKE5VTEw6OmNvbXBvc2l0ZXRhYmxlKS5hOwogU0VMRUNUIChOVUxMOjpjb21wb3NpdGV0 YWJsZSkub2lkOwogCiBEUk9QIFRBQkxFIGNvbXBvc2l0ZXRhYmxlOworCistLSBBIG5hbWVkIFJP VygpIHJlc3VsdCBtdXN0IG5vdCBzdXJ2aXZlIEFMVEVSIFRZUEUgd2l0aCB0aGUgb2xkIGxheW91 dC4KK0NSRUFURSBUWVBFIGN1cnNvcl9yb3d0eXBlIEFTIChhIGludCwgYiBpbnQpOworQkVHSU47 CitERUNMQVJFIGMgQ1VSU09SIEZPUgorICBTRUxFQ1QgKGksIHBvd2VyKDIsIDMwKSk6OmN1cnNv cl9yb3d0eXBlCisgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIpIGk7CitGRVRDSCBjOworQUxU RVIgVFlQRSBjdXJzb3Jfcm93dHlwZSBBTFRFUiBBVFRSSUJVVEUgYiBUWVBFIHRleHQ7CitGRVRD SCBjOworUk9MTEJBQ0s7CitEUk9QIFRZUEUgY3Vyc29yX3Jvd3R5cGU7Ci0tIAoyLjQzLjAKCg== --000000000000dbaae306506a83ed Content-Type: application/octet-stream; name="v1-0002-Detect-row-type-changes-in-additional-rowtype-result-paths 1.patch" Content-Disposition: attachment; filename="v1-0002-Detect-row-type-changes-in-additional-rowtype-result-paths 1.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mogrlolq0 RnJvbSAwNTBhMWU0MDVhOTVkMDBmYzZiZjE3Y2Y5YmQ5MDc5YjkxMzFmZGIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAyNyBBcHIgMjAyNiAwNToyMDoxNiArMDAwMApTdWJqZWN0OiBbUEFU Q0ggdjEgMi8yXSBEZXRlY3Qgcm93IHR5cGUgY2hhbmdlcyBpbiBhZGRpdGlvbmFsIGNvbXBvc2l0 ZSByZXN1bHQKIHBhdGhzCgpFRU9QX1JPVyBpcyBub3QgdGhlIG9ubHkgbG9uZy1saXZlZCBleGVj dXRvciBwYXRoIHRoYXQgY2FuIHJldXNlIGEKbmFtZWQgY29tcG9zaXRlIFR1cGxlRGVzYyBhZnRl ciBBTFRFUiBUWVBFIGNoYW5nZXMgdGhlIHJvdyBsYXlvdXQuICBBCndob2xlLXJvdyBWYXIsIGEg U1FMIGZ1bmN0aW9uIHJldHVybmluZyBhIHdob2xlIGNvbXBvc2l0ZSByZXN1bHQsIGFuZCBhCnRh cmdldGxpc3QgU1JGIHJldHVybmluZyBhIGNvbXBvc2l0ZSByZXN1bHQgY2FuIGFsbCBjYWNoZSBv ciBjb3B5IGEKZGVzY3JpcHRvciBhbmQgbGF0ZXIgZm9ybSBvciByZXR1cm4gYSBjb21wb3NpdGUg RGF0dW0gdXNpbmcgc3RhbGUgbGF5b3V0CmluZm9ybWF0aW9uLgoKVHJhY2sgdGhlIHR5cGNhY2hl IFR1cGxlRGVzYyBpZGVudGl0eSBpbiB0aG9zZSBwYXRocyBhbmQgcmFpc2UgdGhlIHNhbWUKInJv dyB0eXBlIGhhcyBjaGFuZ2VkIiBlcnJvciBpZiB0aGUgbmFtZWQgcm93IHR5cGUgY2hhbmdlcyBi ZWZvcmUgdGhlCmNhY2hlZCBkZXNjcmlwdG9yIGlzIHJldXNlZC4gIEFkZCByZWdyZXNzaW9uIGNv dmVyYWdlIGZvciB0aGUgYWRkaXRpb25hbApjdXJzb3IvRERML0ZFVENILWFnYWluIGNhc2VzIHRo YXQgcHJldmlvdXNseSBjcmFzaGVkLgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy LmMgICAgICAgIHwgIDggKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YyAgfCAzNiArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5j ICAgICAgICAgfCA0OSArKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRv ci9mdW5jdGlvbnMuYyAgICAgICB8IDQ2ICsrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCAgICAgICAgICB8ICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93 dHlwZXMub3V0IHwgNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3Jvd3R5cGVzLnNxbCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrCiA4IGZpbGVz IGNoYW5nZWQsIDIzNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXgg OGI4M2U1ZDcxZWEuLjg4ZTI3MTA3OWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTMy MTIsNiArMzIxMiwxNCBAQCBFeGVjSW5pdFdob2xlUm93VmFyKEV4cHJFdmFsU3RlcCAqc2NyYXRj aCwgVmFyICp2YXJpYWJsZSwgRXhwclN0YXRlICpzdGF0ZSkKIAlzY3JhdGNoLT5kLndob2xlcm93 LmZpcnN0ID0gdHJ1ZTsKIAlzY3JhdGNoLT5kLndob2xlcm93LnNsb3cgPSBmYWxzZTsKIAlzY3Jh dGNoLT5kLndob2xlcm93LnR1cGRlc2MgPSBOVUxMOyAvKiBmaWxsZWQgYXQgcnVudGltZSAqLwor CWlmICh2YXJpYWJsZS0+dmFydHlwZSAhPSBSRUNPUkRPSUQpCisJeworCQlzY3JhdGNoLT5kLndo b2xlcm93LnJvd2NhY2hlID0gcGFsbG9jX29iamVjdChFeHByRXZhbFJvd3R5cGVDYWNoZSk7CisJ CXNjcmF0Y2gtPmQud2hvbGVyb3cucm93Y2FjaGUtPmNhY2hlcHRyID0gTlVMTDsKKwkJc2NyYXRj aC0+ZC53aG9sZXJvdy5yb3djYWNoZS0+dHVwZGVzY19pZCA9IDA7CisJfQorCWVsc2UKKwkJc2Ny YXRjaC0+ZC53aG9sZXJvdy5yb3djYWNoZSA9IE5VTEw7CiAJc2NyYXRjaC0+ZC53aG9sZXJvdy5q dW5rRmlsdGVyID0gTlVMTDsKIAogCS8qIHVwZGF0ZSBFeHByU3RhdGUgZmxhZ3MgaWYgVmFyIHJl ZmVycyB0byBPTEQvTkVXICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj RXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRl eCAwZWMwNmU4NzI3OC4uYzQ0OGU5NGVjZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYwpAQCAtMjU0Niw2ICsyNTQ2LDI2IEBAIGdldF9jYWNoZWRfcm93dHlwZShPaWQgdHlw ZV9pZCwgaW50MzIgdHlwbW9kLAogCX0KIH0KIAorc3RhdGljIFR5cGVDYWNoZUVudHJ5ICoKK2xv b2t1cF9uYW1lZF9yb3d0eXBlX3RjYWNoZShPaWQgdHlwZV9pZCkKK3sKKwlUeXBlQ2FjaGVFbnRy eSAqdHlwZW50cnk7CisKKwl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHR5cGVfaWQsCisJ CQkJCQkJICBUWVBFQ0FDSEVfVFVQREVTQyB8CisJCQkJCQkJICBUWVBFQ0FDSEVfRE9NQUlOX0JB U0VfSU5GTyk7CisJaWYgKHR5cGVudHJ5LT50eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCQl0 eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKHR5cGVudHJ5LT5kb21haW5CYXNlVHlwZSwKKwkJ CQkJCQkJICAgVFlQRUNBQ0hFX1RVUERFU0MpOworCWlmICh0eXBlbnRyeS0+dHVwRGVzYyA9PSBO VUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNU X1RZUEUpLAorCQkJCSBlcnJtc2coInR5cGUgJXMgaXMgbm90IGNvbXBvc2l0ZSIsCisJCQkJCQlm b3JtYXRfdHlwZV9iZSh0eXBlX2lkKSkpKTsKKworCXJldHVybiB0eXBlbnRyeTsKK30KKwogCiAv KgogICogRmFzdC1wYXRoIGZ1bmN0aW9ucywgZm9yIHZlcnkgc2ltcGxlIGV4cHJlc3Npb25zCkBA IC01NDk1LDYgKzU1MTUsNyBAQCBFeGVjRXZhbFdob2xlUm93VmFyKEV4cHJTdGF0ZSAqc3RhdGUs IEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkKIAkJICovCiAJCWlmICh2 YXJpYWJsZS0+dmFydHlwZSAhPSBSRUNPUkRPSUQpCiAJCXsKKwkJCVR5cGVDYWNoZUVudHJ5ICp0 eXBlbnRyeTsKIAkJCVR1cGxlRGVzYwl2YXJfdHVwZGVzYzsKIAkJCVR1cGxlRGVzYwlzbG90X3R1 cGRlc2M7CiAKQEAgLTU1MTMsNiArNTUzNCwxMCBAQCBFeGVjRXZhbFdob2xlUm93VmFyKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkKIAkJ CSAqIElmIHZhcnR5cGUgaXMgYSBkb21haW4gb3ZlciBjb21wb3NpdGUsIGp1c3QgbG9vayB0aHJv dWdoIHRoYXQKIAkJCSAqIHRvIHRoZSBiYXNlIGNvbXBvc2l0ZSB0eXBlLgogCQkJICovCisJCQl0 eXBlbnRyeSA9IGxvb2t1cF9uYW1lZF9yb3d0eXBlX3RjYWNoZSh2YXJpYWJsZS0+dmFydHlwZSk7 CisJCQlvcC0+ZC53aG9sZXJvdy5yb3djYWNoZS0+Y2FjaGVwdHIgPSB0eXBlbnRyeTsKKwkJCW9w LT5kLndob2xlcm93LnJvd2NhY2hlLT50dXBkZXNjX2lkID0gdHlwZW50cnktPnR1cERlc2NfaWRl bnRpZmllcjsKKwogCQkJdmFyX3R1cGRlc2MgPSBsb29rdXBfcm93dHlwZV90dXBkZXNjX2RvbWFp bih2YXJpYWJsZS0+dmFydHlwZSwKIAkJCQkJCQkJCQkJCQkJLTEsIGZhbHNlKTsKIApAQCAtNTYw OSw2ICs1NjM0LDE3IEBAIEV4ZWNFdmFsV2hvbGVSb3dWYXIoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCiAJCW9wLT5kLndob2xlcm93 LmZpcnN0ID0gZmFsc2U7CiAJfQorCWVsc2UgaWYgKHZhcmlhYmxlLT52YXJ0eXBlICE9IFJFQ09S RE9JRCkKKwl7CisJCVR5cGVDYWNoZUVudHJ5ICp0eXBlbnRyeTsKKworCQl0eXBlbnRyeSA9IChU eXBlQ2FjaGVFbnRyeSAqKSBvcC0+ZC53aG9sZXJvdy5yb3djYWNoZS0+Y2FjaGVwdHI7CisJCWlm ICh0eXBlbnRyeS0+dHVwRGVzY19pZGVudGlmaWVyICE9IG9wLT5kLndob2xlcm93LnJvd2NhY2hl LT50dXBkZXNjX2lkKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBVFlQRV9NSVNNQVRDSCksCisJCQkJCSBlcnJtc2coInJvdyB0eXBlICVzIGhhcyBjaGFuZ2Vk IiwKKwkJCQkJCQlmb3JtYXRfdHlwZV9iZShvcC0+ZC53aG9sZXJvdy50dXBkZXNjLT50ZHR5cGVp ZCkpKSk7CisJfQogCiAJLyoKIAkgKiBNYWtlIHN1cmUgYWxsIGNvbHVtbnMgb2YgdGhlIHNsb3Qg YXJlIGFjY2Vzc2libGUgaW4gdGhlIHNsb3QncwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1NSRi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NSRi5jCmluZGV4IDhh ZWRjYzZhNDU5Li41MDk5OWI4ODc2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1NSRi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTUkYuYwpAQCAtMjEsNiAr MjEsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJjYXRh bG9nL29iamVjdGFjY2Vzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTQ1LDYgKzQ2LDgg QEAgc3RhdGljIHZvaWQgRXhlY1ByZXBhcmVUdXBsZXN0b3JlUmVzdWx0KFNldEV4cHJTdGF0ZSAq c2V4cHIsCiAJCQkJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0LAogCQkJCQkJCQkJCVR1cGxl c3RvcmVzdGF0ZSAqcmVzdWx0U3RvcmUsCiAJCQkJCQkJCQkJVHVwbGVEZXNjIHJlc3VsdERlc2Mp Oworc3RhdGljIFR5cGVDYWNoZUVudHJ5ICpsb29rdXBfc3JmX3Jlc3VsdF90Y2FjaGUoT2lkIGZ1 bmNyZXR0eXBlKTsKK3N0YXRpYyB2b2lkIGNoZWNrX3NyZl9yZXN1bHRfcm93dHlwZShTZXRFeHBy U3RhdGUgKnNleHByKTsKIHN0YXRpYyB2b2lkIHR1cGxlZGVzY19tYXRjaChUdXBsZURlc2MgZHN0 X3R1cGRlc2MsIFR1cGxlRGVzYyBzcmNfdHVwZGVzYyk7CiAKIApAQCAtNTQzLDYgKzU0Niw3IEBA IHJlc3RhcnQ6CiAJCQl7CiAJCQkJLyogV2UgbXVzdCByZXR1cm4gdGhlIHdob2xlIHR1cGxlIGFz IGEgRGF0dW0uICovCiAJCQkJKmlzTnVsbCA9IGZhbHNlOworCQkJCWNoZWNrX3NyZl9yZXN1bHRf cm93dHlwZShmY2FjaGUpOwogCQkJCXJldHVybiBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlRGF0dW0o ZmNhY2hlLT5mdW5jUmVzdWx0U2xvdCk7CiAJCQl9CiAJCQllbHNlCkBAIC02NDMsNiArNjQ3LDkg QEAgcmVzdGFydDoKIAl7CiAJCWlmICgqaXNEb25lICE9IEV4cHJFbmRSZXN1bHQpCiAJCXsKKwkJ CWlmIChmY2FjaGUtPmZ1bmNSZXR1cm5zVHVwbGUgJiYgISppc051bGwpCisJCQkJY2hlY2tfc3Jm X3Jlc3VsdF9yb3d0eXBlKGZjYWNoZSk7CisKIAkJCS8qCiAJCQkgKiBTYXZlIHRoZSBjdXJyZW50 IGFyZ3VtZW50IHZhbHVlcyB0byByZS11c2Ugb24gdGhlIG5leHQgY2FsbC4KIAkJCSAqLwpAQCAt NjY5LDYgKzY3Niw5IEBAIHJlc3RhcnQ6CiAJCQkJCSBlcnJtc2coInRhYmxlLWZ1bmN0aW9uIHBy b3RvY29sIGZvciBtYXRlcmlhbGl6ZSBtb2RlIHdhcyBub3QgZm9sbG93ZWQiKSkpOwogCQlpZiAo cnNpbmZvLnNldFJlc3VsdCAhPSBOVUxMKQogCQl7CisJCQlpZiAoZmNhY2hlLT5mdW5jUmV0dXJu c1R1cGxlKQorCQkJCWNoZWNrX3NyZl9yZXN1bHRfcm93dHlwZShmY2FjaGUpOworCiAJCQkvKiBw cmVwYXJlIHRvIHJldHVybiB2YWx1ZXMgZnJvbSB0aGUgdHVwbGVzdG9yZSAqLwogCQkJRXhlY1By ZXBhcmVUdXBsZXN0b3JlUmVzdWx0KGZjYWNoZSwgZWNvbnRleHQsCiAJCQkJCQkJCQkJcnNpbmZv LnNldFJlc3VsdCwKQEAgLTc2Nyw2ICs3NzcsMTAgQEAgaW5pdF9zZXhwcihPaWQgZm9pZCwgT2lk IGlucHV0X2NvbGxhdGlvbiwgRXhwciAqbm9kZSwKIAkJCS8qIE11c3QgY29weSBpdCBvdXQgb2Yg dHlwY2FjaGUgZm9yIHNhZmV0eSAqLwogCQkJc2V4cHItPmZ1bmNSZXN1bHREZXNjID0gQ3JlYXRl VHVwbGVEZXNjQ29weSh0dXBkZXNjKTsKIAkJCXNleHByLT5mdW5jUmV0dXJuc1R1cGxlID0gdHJ1 ZTsKKwkJCXNleHByLT5mdW5jUmVzdWx0VHlwZW50cnkgPSBsb29rdXBfc3JmX3Jlc3VsdF90Y2Fj aGUoZnVuY3JldHR5cGUpOworCQkJaWYgKHNleHByLT5mdW5jUmVzdWx0VHlwZW50cnkgIT0gTlVM TCkKKwkJCQlzZXhwci0+ZnVuY1Jlc3VsdERlc2NJZCA9CisJCQkJCSgoVHlwZUNhY2hlRW50cnkg Kikgc2V4cHItPmZ1bmNSZXN1bHRUeXBlbnRyeSktPnR1cERlc2NfaWRlbnRpZmllcjsKIAkJfQog CQllbHNlIGlmIChmdW5jdHlwY2xhc3MgPT0gVFlQRUZVTkNfU0NBTEFSKQogCQl7CkBAIC04NzAs NiArODg0LDggQEAgRXhlY1ByZXBhcmVUdXBsZXN0b3JlUmVzdWx0KFNldEV4cHJTdGF0ZSAqc2V4 cHIsCiAJCQkJCQkJVHVwbGVEZXNjIHJlc3VsdERlc2MpCiB7CiAJc2V4cHItPmZ1bmNSZXN1bHRT dG9yZSA9IHJlc3VsdFN0b3JlOworCWlmIChzZXhwci0+ZnVuY1JldHVybnNUdXBsZSkKKwkJY2hl Y2tfc3JmX3Jlc3VsdF9yb3d0eXBlKHNleHByKTsKIAogCWlmIChzZXhwci0+ZnVuY1Jlc3VsdFNs b3QgPT0gTlVMTCkKIAl7CkBAIC05MzIsNiArOTQ4LDM5IEBAIEV4ZWNQcmVwYXJlVHVwbGVzdG9y ZVJlc3VsdChTZXRFeHByU3RhdGUgKnNleHByLAogCX0KIH0KIAorc3RhdGljIFR5cGVDYWNoZUVu dHJ5ICoKK2xvb2t1cF9zcmZfcmVzdWx0X3RjYWNoZShPaWQgZnVuY3JldHR5cGUpCit7CisJVHlw ZUNhY2hlRW50cnkgKnR5cGVudHJ5OworCisJaWYgKGZ1bmNyZXR0eXBlID09IFJFQ09SRE9JRCkK KwkJcmV0dXJuIE5VTEw7CisKKwl0eXBlbnRyeSA9IGxvb2t1cF90eXBlX2NhY2hlKGZ1bmNyZXR0 eXBlLAorCQkJCQkJCSAgVFlQRUNBQ0hFX1RVUERFU0MgfAorCQkJCQkJCSAgVFlQRUNBQ0hFX0RP TUFJTl9CQVNFX0lORk8pOworCWlmICh0eXBlbnRyeS0+dHlwdHlwZSA9PSBUWVBUWVBFX0RPTUFJ TikKKwkJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZSh0eXBlbnRyeS0+ZG9tYWluQmFzZVR5 cGUsCisJCQkJCQkJCSAgIFRZUEVDQUNIRV9UVVBERVNDKTsKKwlpZiAodHlwZW50cnktPnR1cERl c2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdHlwZW50cnk7Cit9CisKK3N0 YXRpYyB2b2lkCitjaGVja19zcmZfcmVzdWx0X3Jvd3R5cGUoU2V0RXhwclN0YXRlICpzZXhwcikK K3sKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnkgPSAoVHlwZUNhY2hlRW50cnkgKikgc2V4cHIt PmZ1bmNSZXN1bHRUeXBlbnRyeTsKKworCWlmICh0eXBlbnRyeSAhPSBOVUxMICYmCisJCXR5cGVu dHJ5LT50dXBEZXNjX2lkZW50aWZpZXIgIT0gc2V4cHItPmZ1bmNSZXN1bHREZXNjSWQpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCisJ CQkJIGVycm1zZygicm93IHR5cGUgJXMgaGFzIGNoYW5nZWQiLAorCQkJCQkJZm9ybWF0X3R5cGVf YmUoc2V4cHItPmZ1bmNSZXN1bHREZXNjLT50ZHR5cGVpZCkpKSk7Cit9CisKIC8qCiAgKiBDaGVj ayB0aGF0IGZ1bmN0aW9uIHJlc3VsdCB0dXBsZSB0eXBlIChzcmNfdHVwZGVzYykgbWF0Y2hlcyBv ciBjYW4KICAqIGJlIGNvbnNpZGVyZWQgdG8gbWF0Y2ggd2hhdCB0aGUgcXVlcnkgZXhwZWN0cyAo ZHN0X3R1cGRlc2MpLiBJZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rp b25zLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9mdW5jdGlvbnMuYwppbmRleCA4ODEwOTM0ODgx Ny4uODlhOGI3NjAyOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9u cy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCkBAIC0zOCw2ICszOCw3 IEBACiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgorI2luY2x1ZGUgInV0aWxzL3R5cGNh Y2hlLmgiCiAKIAogLyoKQEAgLTEyOSw2ICsxMzAsOCBAQCB0eXBlZGVmIHN0cnVjdCBTUUxGdW5j dGlvbkhhc2hFbnRyeQogCWNoYXIJCXByb2tpbmQ7CQkvKiBwcm9raW5kIGZyb20gcGdfcHJvYyBy b3cgKi8KIAogCVR1cGxlRGVzYwlyZXR0dXBkZXNjOwkJLyogcmVzdWx0IHR1cGxlIGRlc2NyaXB0 b3IgKi8KKwlUeXBlQ2FjaGVFbnRyeSAqcmV0dHVwZGVzY190eXBlbnRyeTsKKwl1aW50NjQJCXJl dHR1cGRlc2NfaWQ7CiAKIAlMaXN0CSAgICpzb3VyY2VfbGlzdDsJLyogUmF3U3RtdHMgb3IgUXVl cmllcyByZWFkIGZyb20gcGdfcHJvYyAqLwogCWludAkJCW51bV9xdWVyaWVzOwkvKiBvcmlnaW5h bCBsZW5ndGggb2Ygc291cmNlX2xpc3QgKi8KQEAgLTIwMyw2ICsyMDYsOCBAQCBzdGF0aWMgTm9k ZSAqc3FsX2ZuX3Jlc29sdmVfcGFyYW1fbmFtZShTUUxGdW5jdGlvblBhcnNlSW5mb1B0ciBwaW5m bywKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBhcmFtbmFtZSwgaW50IGxvY2F0aW9uKTsKIHN0 YXRpYyBTUUxGdW5jdGlvbkNhY2hlICppbml0X3NxbF9mY2FjaGUoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sCiAJCQkJCQkJCQkJIGJvb2wgbGF6eUV2YWxPSyk7CitzdGF0aWMgVHlwZUNhY2hlRW50 cnkgKmxvb2t1cF9zcWxfZm5fcmV0dmFsX3RjYWNoZShPaWQgcmV0dHlwZSk7CitzdGF0aWMgdm9p ZCBjaGVja19zcWxfZm5fcmV0dmFsX3Jvd3R5cGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBmY2FjaGUp Owogc3RhdGljIGJvb2wgaW5pdF9leGVjdXRpb25fc3RhdGUoU1FMRnVuY3Rpb25DYWNoZVB0ciBm Y2FjaGUpOwogc3RhdGljIHZvaWQgcHJlcGFyZV9uZXh0X3F1ZXJ5KFNRTEZ1bmN0aW9uSGFzaEVu dHJ5ICpmdW5jKTsKIHN0YXRpYyB2b2lkIHNxbF9jb21waWxlX2NhbGxiYWNrKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLApAQCAtMTEwMiw2ICsxMTA3LDEwIEBAIHNxbF9jb21waWxlX2NhbGxiYWNr KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGNvbnRl eHQpOwogCQlmdW5jLT5yZXR0dXBkZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weShyZXR0dXBkZXNj KTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCWZ1bmMtPnJldHR1 cGRlc2NfdHlwZW50cnkgPSBsb29rdXBfc3FsX2ZuX3JldHZhbF90Y2FjaGUocmV0dHlwZSk7CisJ CWlmIChmdW5jLT5yZXR0dXBkZXNjX3R5cGVudHJ5ICE9IE5VTEwpCisJCQlmdW5jLT5yZXR0dXBk ZXNjX2lkID0gZnVuYy0+cmV0dHVwZGVzY190eXBlbnRyeS0+dHVwRGVzY19pZGVudGlmaWVyOwog CX0KIAogCS8qIEZldGNoIHRoZSB0eXBsZW4gYW5kIGJ5dmFsIGluZm8gZm9yIHRoZSByZXN1bHQg dHlwZSAqLwpAQCAtMTU1MCw2ICsxNTU5LDcgQEAgcG9zdHF1ZWxfZ2V0X3NpbmdsZV9yZXN1bHQo VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJewogCQkvKiBXZSBtdXN0IHJldHVybiB0aGUgd2hvbGUg dHVwbGUgYXMgYSBEYXR1bS4gKi8KIAkJZmNpbmZvLT5pc251bGwgPSBmYWxzZTsKKwkJY2hlY2tf c3FsX2ZuX3JldHZhbF9yb3d0eXBlKGZjYWNoZSk7CiAJCXZhbHVlID0gRXhlY0ZldGNoU2xvdEhl YXBUdXBsZURhdHVtKHNsb3QpOwogCX0KIAllbHNlCkBAIC0xODI4LDcgKzE4MzgsMTAgQEAgZm1n cl9zcWwoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWZjYWNoZS0+dHN0b3JlID0gTlVMTDsKIAkJCS8q IG11c3QgY29weSBkZXNjIGJlY2F1c2UgZXhlY1NSRi5jIHdpbGwgZnJlZSBpdCAqLwogCQkJaWYg KGZjYWNoZS0+anVua0ZpbHRlcikKKwkJCXsKKwkJCQljaGVja19zcWxfZm5fcmV0dmFsX3Jvd3R5 cGUoZmNhY2hlKTsKIAkJCQlyc2ktPnNldERlc2MgPSBDcmVhdGVUdXBsZURlc2NDb3B5KGZjYWNo ZS0+anVua0ZpbHRlci0+amZfY2xlYW5UdXBUeXBlKTsKKwkJCX0KIAogCQkJZmNpbmZvLT5pc251 bGwgPSB0cnVlOwogCQkJcmVzdWx0ID0gKERhdHVtKSAwOwpAQCAtMTg4OCw2ICsxOTAxLDM5IEBA IGZtZ3Jfc3FsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGlj IFR5cGVDYWNoZUVudHJ5ICoKK2xvb2t1cF9zcWxfZm5fcmV0dmFsX3RjYWNoZShPaWQgcmV0dHlw ZSkKK3sKKwlUeXBlQ2FjaGVFbnRyeSAqdHlwZW50cnk7CisKKwlpZiAocmV0dHlwZSA9PSBSRUNP UkRPSUQpCisJCXJldHVybiBOVUxMOworCisJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZShy ZXR0eXBlLAorCQkJCQkJCSAgVFlQRUNBQ0hFX1RVUERFU0MgfAorCQkJCQkJCSAgVFlQRUNBQ0hF X0RPTUFJTl9CQVNFX0lORk8pOworCWlmICh0eXBlbnRyeS0+dHlwdHlwZSA9PSBUWVBUWVBFX0RP TUFJTikKKwkJdHlwZW50cnkgPSBsb29rdXBfdHlwZV9jYWNoZSh0eXBlbnRyeS0+ZG9tYWluQmFz ZVR5cGUsCisJCQkJCQkJCSAgIFRZUEVDQUNIRV9UVVBERVNDKTsKKwlpZiAodHlwZW50cnktPnR1 cERlc2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdHlwZW50cnk7Cit9CisK K3N0YXRpYyB2b2lkCitjaGVja19zcWxfZm5fcmV0dmFsX3Jvd3R5cGUoU1FMRnVuY3Rpb25DYWNo ZVB0ciBmY2FjaGUpCit7CisJVHlwZUNhY2hlRW50cnkgKnR5cGVudHJ5ID0gZmNhY2hlLT5mdW5j LT5yZXR0dXBkZXNjX3R5cGVudHJ5OworCisJaWYgKHR5cGVudHJ5ICE9IE5VTEwgJiYKKwkJdHlw ZW50cnktPnR1cERlc2NfaWRlbnRpZmllciAhPSBmY2FjaGUtPmZ1bmMtPnJldHR1cGRlc2NfaWQp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRD SCksCisJCQkJIGVycm1zZygicm93IHR5cGUgJXMgaGFzIGNoYW5nZWQiLAorCQkJCQkJZm9ybWF0 X3R5cGVfYmUoZmNhY2hlLT5mdW5jLT5yZXR0dXBkZXNjLT50ZHR5cGVpZCkpKSk7Cit9CisKIAog LyoKICAqIGVycm9yIGNvbnRleHQgY2FsbGJhY2sgdG8gbGV0IHVzIHN1cHBseSBhIHRyYWNlYmFj ayBkdXJpbmcgY29tcGlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4 cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggNTMyZTAxYjdiNmMu LmU1YmUzYzE4NWJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTM0OCw2ICszNDgsNyBA QCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCWJvb2wJCWZpcnN0OwkvKiBmaXJzdCB0 aW1lIHRocm91Z2gsIG5lZWQgdG8gaW5pdGlhbGl6ZT8gKi8KIAkJCWJvb2wJCXNsb3c7CS8qIG5l ZWQgcnVudGltZSBjaGVjayBmb3IgbnVsbHM/ICovCiAJCQlUdXBsZURlc2MJdHVwZGVzYzsJLyog ZGVzY3JpcHRvciBmb3IgcmVzdWx0aW5nIHR1cGxlcyAqLworCQkJRXhwckV2YWxSb3d0eXBlQ2Fj aGUgKnJvd2NhY2hlOyAvKiBjYWNoZWQgZGVzY3JpcHRvciBpZGVudGl0eSAqLwogCQkJSnVua0Zp bHRlciAqanVua0ZpbHRlcjsgLyogSnVua0ZpbHRlciB0byByZW1vdmUgcmVzanVuayBjb2xzICov CiAJCX0JCQl3aG9sZXJvdzsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxMzM1OTE4MGQyNS4u OGM1YzE1YWY5ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xMDA2LDYgKzEwMDYsOCBAQCB0 eXBlZGVmIHN0cnVjdCBTZXRFeHByU3RhdGUKIAkgKi8KIAlUdXBsZURlc2MJZnVuY1Jlc3VsdERl c2M7CiAJYm9vbAkJZnVuY1JldHVybnNUdXBsZTsJLyogdmFsaWQgd2hlbiBmdW5jUmVzdWx0RGVz YyBpc24ndCBOVUxMICovCisJdm9pZAkgICAqZnVuY1Jlc3VsdFR5cGVudHJ5OwkvKiBjYWNoZWQg VHlwZUNhY2hlRW50cnkgZm9yIHJlc3VsdCByb3d0eXBlICovCisJdWludDY0CQlmdW5jUmVzdWx0 RGVzY0lkOwkvKiBsYXN0LXNlZW4gdHVwZGVzYyBpZGVudGlmaWVyLCBvciAwICovCiAKIAkvKgog CSAqIFJlbWVtYmVyIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHRvIHJldHVybiBh IHNldC4gIFRoaXMgaXMgc2V0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3Jvd3R5cGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93dHlwZXMub3V0Cmlu ZGV4IDdlZGU0NWIzMjBhLi5mNDY4ZmQ1NmQzNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9yb3d0eXBlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y b3d0eXBlcy5vdXQKQEAgLTE0MjUsMyArMTQyNSw1OSBAQCBGRVRDSCBjOwogRVJST1I6ICByb3cg dHlwZSBjdXJzb3Jfcm93dHlwZSBoYXMgY2hhbmdlZAogUk9MTEJBQ0s7CiBEUk9QIFRZUEUgY3Vy c29yX3Jvd3R5cGU7CistLSBBIHdob2xlLXJvdyBWYXIgb3ZlciBhIG5hbWVkIHJvdyB0eXBlIG11 c3QgZGV0ZWN0IEFMVEVSIFRZUEUgdG9vLgorQ1JFQVRFIFRZUEUgY3Vyc29yX3dob2xlcm93X3R5 cGUgQVMgKGEgaW50LCBiIGludCk7CitDUkVBVEUgRlVOQ1RJT04gY3Vyc29yX3dob2xlcm93X2Z1 bmMoKSBSRVRVUk5TIFNFVE9GIGN1cnNvcl93aG9sZXJvd190eXBlCitMQU5HVUFHRSBzcWwgQVMg JCQgU0VMRUNUIGksIHBvd2VyKDIsIDMwKTo6aW50IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIp IGkgJCQ7CitCRUdJTjsKK0RFQ0xBUkUgYyBDVVJTT1IgRk9SIFNFTEVDVCB4IEZST00gY3Vyc29y X3dob2xlcm93X2Z1bmMoKSBBUyB4OworRkVUQ0ggYzsKKyAgICAgICB4ICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0KKyAoMSwxMDczNzQxODI0KQorKDEgcm93KQorCitBTFRFUiBUWVBFIGN1cnNv cl93aG9sZXJvd190eXBlIEFMVEVSIEFUVFJJQlVURSBiIFRZUEUgdGV4dDsKK0ZFVENIIGM7CitF UlJPUjogIHJvdyB0eXBlIGN1cnNvcl93aG9sZXJvd190eXBlIGhhcyBjaGFuZ2VkCitST0xMQkFD SzsKK0RST1AgRlVOQ1RJT04gY3Vyc29yX3dob2xlcm93X2Z1bmMoKTsKK0RST1AgVFlQRSBjdXJz b3Jfd2hvbGVyb3dfdHlwZTsKKy0tIEEgU1FMIGZ1bmN0aW9uIHJldHVybmluZyBhIHdob2xlIG5h bWVkIHJvdyBtdXN0IG5vdCB1c2UgaXRzIG9sZCB0dXBkZXNjLgorQ1JFQVRFIFRZUEUgY3Vyc29y X3NxbGZ1bmNfdHlwZSBBUyAoYSBpbnQsIGIgaW50KTsKK0NSRUFURSBGVU5DVElPTiBjdXJzb3Jf c3FsZnVuYyhpIGludCkgUkVUVVJOUyBjdXJzb3Jfc3FsZnVuY190eXBlCitMQU5HVUFHRSBzcWwg QVMgJCQgU0VMRUNUIGksIHBvd2VyKDIsIDMwKTo6aW50ICQkOworQkVHSU47CitERUNMQVJFIGMg Q1VSU09SIEZPUiBTRUxFQ1QgY3Vyc29yX3NxbGZ1bmMoaSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwgMikgaTsKK0ZFVENIIGM7CisgY3Vyc29yX3NxbGZ1bmMgCistLS0tLS0tLS0tLS0tLS0tCisg KDEsMTA3Mzc0MTgyNCkKKygxIHJvdykKKworQUxURVIgVFlQRSBjdXJzb3Jfc3FsZnVuY190eXBl IEFMVEVSIEFUVFJJQlVURSBiIFRZUEUgdGV4dDsKK0ZFVENIIGM7CitFUlJPUjogIHJvdyB0eXBl IGN1cnNvcl9zcWxmdW5jX3R5cGUgaGFzIGNoYW5nZWQKK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24g ImN1cnNvcl9zcWxmdW5jIiBzdGF0ZW1lbnQgMQorUk9MTEJBQ0s7CitEUk9QIEZVTkNUSU9OIGN1 cnNvcl9zcWxmdW5jKGludCk7CitEUk9QIFRZUEUgY3Vyc29yX3NxbGZ1bmNfdHlwZTsKKy0tIEEg dGFyZ2V0bGlzdCBTUkYgcmV0dXJuaW5nIGEgbmFtZWQgcm93IG11c3Qgbm90IHVzZSBpdHMgb2xk IHR1cGRlc2MuCitDUkVBVEUgVFlQRSBjdXJzb3Jfc3JmX3R5cGUgQVMgKGEgaW50LCBiIGludCk7 CitDUkVBVEUgRlVOQ1RJT04gY3Vyc29yX3NyZl9mdW5jKCkgUkVUVVJOUyBTRVRPRiBjdXJzb3Jf c3JmX3R5cGUKK0xBTkdVQUdFIHNxbCBBUyAkJCBTRUxFQ1QgaSwgcG93ZXIoMiwgMzApOjppbnQg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgaSAkJDsKK0JFR0lOOworREVDTEFSRSBjIENVUlNP UiBGT1IgU0VMRUNUIGN1cnNvcl9zcmZfZnVuYygpOworRkVUQ0ggYzsKKyBjdXJzb3Jfc3JmX2Z1 bmMgCistLS0tLS0tLS0tLS0tLS0tLQorICgxLDEwNzM3NDE4MjQpCisoMSByb3cpCisKK0FMVEVS IFRZUEUgY3Vyc29yX3NyZl90eXBlIEFMVEVSIEFUVFJJQlVURSBiIFRZUEUgdGV4dDsKK0ZFVENI IGM7CitFUlJPUjogIHJvdyB0eXBlIGN1cnNvcl9zcmZfdHlwZSBoYXMgY2hhbmdlZAorQ09OVEVY VDogIFNRTCBmdW5jdGlvbiAiY3Vyc29yX3NyZl9mdW5jIiBzdGF0ZW1lbnQgMQorUk9MTEJBQ0s7 CitEUk9QIEZVTkNUSU9OIGN1cnNvcl9zcmZfZnVuYygpOworRFJPUCBUWVBFIGN1cnNvcl9zcmZf dHlwZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3R5cGVzLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3R5cGVzLnNxbAppbmRleCBlYzY0Zjk2OGJlOC4uOGI0YWVl MjNhZWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jvd3R5cGVzLnNxbAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3d0eXBlcy5zcWwKQEAgLTU3NCwzICs1NzQsNDIgQEAg QUxURVIgVFlQRSBjdXJzb3Jfcm93dHlwZSBBTFRFUiBBVFRSSUJVVEUgYiBUWVBFIHRleHQ7CiBG RVRDSCBjOwogUk9MTEJBQ0s7CiBEUk9QIFRZUEUgY3Vyc29yX3Jvd3R5cGU7CisKKy0tIEEgd2hv bGUtcm93IFZhciBvdmVyIGEgbmFtZWQgcm93IHR5cGUgbXVzdCBkZXRlY3QgQUxURVIgVFlQRSB0 b28uCitDUkVBVEUgVFlQRSBjdXJzb3Jfd2hvbGVyb3dfdHlwZSBBUyAoYSBpbnQsIGIgaW50KTsK K0NSRUFURSBGVU5DVElPTiBjdXJzb3Jfd2hvbGVyb3dfZnVuYygpIFJFVFVSTlMgU0VUT0YgY3Vy c29yX3dob2xlcm93X3R5cGUKK0xBTkdVQUdFIHNxbCBBUyAkJCBTRUxFQ1QgaSwgcG93ZXIoMiwg MzApOjppbnQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgaSAkJDsKK0JFR0lOOworREVDTEFS RSBjIENVUlNPUiBGT1IgU0VMRUNUIHggRlJPTSBjdXJzb3Jfd2hvbGVyb3dfZnVuYygpIEFTIHg7 CitGRVRDSCBjOworQUxURVIgVFlQRSBjdXJzb3Jfd2hvbGVyb3dfdHlwZSBBTFRFUiBBVFRSSUJV VEUgYiBUWVBFIHRleHQ7CitGRVRDSCBjOworUk9MTEJBQ0s7CitEUk9QIEZVTkNUSU9OIGN1cnNv cl93aG9sZXJvd19mdW5jKCk7CitEUk9QIFRZUEUgY3Vyc29yX3dob2xlcm93X3R5cGU7CisKKy0t IEEgU1FMIGZ1bmN0aW9uIHJldHVybmluZyBhIHdob2xlIG5hbWVkIHJvdyBtdXN0IG5vdCB1c2Ug aXRzIG9sZCB0dXBkZXNjLgorQ1JFQVRFIFRZUEUgY3Vyc29yX3NxbGZ1bmNfdHlwZSBBUyAoYSBp bnQsIGIgaW50KTsKK0NSRUFURSBGVU5DVElPTiBjdXJzb3Jfc3FsZnVuYyhpIGludCkgUkVUVVJO UyBjdXJzb3Jfc3FsZnVuY190eXBlCitMQU5HVUFHRSBzcWwgQVMgJCQgU0VMRUNUIGksIHBvd2Vy KDIsIDMwKTo6aW50ICQkOworQkVHSU47CitERUNMQVJFIGMgQ1VSU09SIEZPUiBTRUxFQ1QgY3Vy c29yX3NxbGZ1bmMoaSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMikgaTsKK0ZFVENIIGM7CitB TFRFUiBUWVBFIGN1cnNvcl9zcWxmdW5jX3R5cGUgQUxURVIgQVRUUklCVVRFIGIgVFlQRSB0ZXh0 OworRkVUQ0ggYzsKK1JPTExCQUNLOworRFJPUCBGVU5DVElPTiBjdXJzb3Jfc3FsZnVuYyhpbnQp OworRFJPUCBUWVBFIGN1cnNvcl9zcWxmdW5jX3R5cGU7CisKKy0tIEEgdGFyZ2V0bGlzdCBTUkYg cmV0dXJuaW5nIGEgbmFtZWQgcm93IG11c3Qgbm90IHVzZSBpdHMgb2xkIHR1cGRlc2MuCitDUkVB VEUgVFlQRSBjdXJzb3Jfc3JmX3R5cGUgQVMgKGEgaW50LCBiIGludCk7CitDUkVBVEUgRlVOQ1RJ T04gY3Vyc29yX3NyZl9mdW5jKCkgUkVUVVJOUyBTRVRPRiBjdXJzb3Jfc3JmX3R5cGUKK0xBTkdV QUdFIHNxbCBBUyAkJCBTRUxFQ1QgaSwgcG93ZXIoMiwgMzApOjppbnQgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMikgaSAkJDsKK0JFR0lOOworREVDTEFSRSBjIENVUlNPUiBGT1IgU0VMRUNUIGN1 cnNvcl9zcmZfZnVuYygpOworRkVUQ0ggYzsKK0FMVEVSIFRZUEUgY3Vyc29yX3NyZl90eXBlIEFM VEVSIEFUVFJJQlVURSBiIFRZUEUgdGV4dDsKK0ZFVENIIGM7CitST0xMQkFDSzsKK0RST1AgRlVO Q1RJT04gY3Vyc29yX3NyZl9mdW5jKCk7CitEUk9QIFRZUEUgY3Vyc29yX3NyZl90eXBlOwotLSAK Mi40My4wCgo= --000000000000dbaae306506a83ed--