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 1tdTFw-007TDa-TI for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jan 2025 12:02:49 +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 1tdTFw-00BOq4-0k for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jan 2025 12:02:48 +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 1tdTFv-00BOny-KI for pgsql-hackers@lists.postgresql.org; Thu, 30 Jan 2025 12:02:47 +0000 Received: from mail-yb1-xb30.google.com ([2607:f8b0:4864:20::b30]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tdTFs-002L4n-19 for pgsql-hackers@lists.postgresql.org; Thu, 30 Jan 2025 12:02:47 +0000 Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-e5acbbfc4e7so956977276.2 for ; Thu, 30 Jan 2025 04:02:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738238563; x=1738843363; 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=/TE3kFgo4b8EVtpUwDnvxTNvHy3c/3njNnKOtUVH9ds=; b=OKVR3axoDodppOq97KpTkFPBkDnaQ4J21H000EPKEfGELU7k4cVSwYXf5ZP+4TxwGT PuR0xtoD03i9oO5bfDaL6T93T8UDdNi/ZjU31TG+HbGcH84rRXnFz0JpBahR5T/9oy8g /OknS+/MmFvfSQIQ5vWafNBmV5ZzjyqLEi4NP7EiIm2N+zbld7E/N8c0Z4NNCPIb3thT aTEMfgMomoqqEeYHU8DVkJWaGBVwjpsOYt/1P5o62WF1YKV9tqe9yPx3XF5TdTeOQ0HO 4gNxKDlEv4guMiuiVK69vqLEGCvkVmzww5XQIK6EgIcu2NyuZaZ7vaxXU24RA6bmNj3P 3u+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738238563; x=1738843363; 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=/TE3kFgo4b8EVtpUwDnvxTNvHy3c/3njNnKOtUVH9ds=; b=idNZS2dee7j5YVLeufVLrn8OzdA5cYVswsvcjkRkgGpcddR7+PiNwz5vlasf7I2s8R /XB0XbMyIR6tAeQRXOu47/i4p+9UnIUNpsEY1YJSe+TTxO/equHb62Qk6mJbI84ko4Bm z01j18dSQR7k0hau05kSmHquXXTiS7IpxtgCd4FQgP7AIwe52YA1kEiQviXcu7Dlhx18 /mLYrcqJU+Qem1ARK5Z2cO7feVOEIywWvYT3V05qszvgT689nStiMynq0GlVhRe5gVrh P4HDmRzbIezwYIWV2T4BP9uHLzwaOgRVLI1o2Mi7uAG6c4Apqnw8bMtJJjVnj86hcXEH 1D8w== X-Gm-Message-State: AOJu0YzjlZdjshBM+5naEZPwzymrd51F8oUUmpCs+uYKxNM2j4IQGs7p yNEZEK+wCGWdvZY9rCrmVjgXPNduL+h+3LfcZbveKo7RpYh4VRdPAA65b6GMEss9WqpcJK7JryC diRg/Ub5cpz6qzqk+5zlcaXEuj85CHKRA X-Gm-Gg: ASbGncsyJw8wlYmZGabkLRKGC90vKOwvLZ14BGoWuoZJWjMLJEqraj/i9z3JkyG0dlr xwonYeZ4+ndCovQyjR4UOGXU5ECBLBx6eeAu5q/NFN/LVuRFiEeEqBhh/lYM68P8PXAqOz0+y63 s= X-Google-Smtp-Source: AGHT+IEsh+4N5v/rbTQE7i2DMJbPFjz6E5+2jm1EoJ5QN31iPJ4e66ET9CoppOucxZlPZdKAsnthh5XADZqnW+tam50= X-Received: by 2002:a05:690c:3001:b0:6f6:c924:befa with SMTP id 00721157ae682-6f7a835e306mr56406047b3.14.1738238563261; Thu, 30 Jan 2025 04:02:43 -0800 (PST) MIME-Version: 1.0 References: <12e49de4-8914-4602-bd1c-749cf2e56ad6@postgrespro.ru> In-Reply-To: <12e49de4-8914-4602-bd1c-749cf2e56ad6@postgrespro.ru> From: Shlok Kyal Date: Thu, 30 Jan 2025 17:32:30 +0530 X-Gm-Features: AWEUYZny18iHLy7_2F0lJgmVCs7Yd6aTS6k6qsOrdMOUjUP1NG4Huydn3CPEEGs Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: Sergey Tatarintsev Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000001973d3062ceb344c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001973d3062ceb344c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 29 Jan 2025 at 19:21, Sergey Tatarintsev wrote: > > > 29.01.2025 12:16, Shlok Kyal =D0=BF=D0=B8=D1=88=D0=B5=D1=82: > > Hi, > > > > As part of a discussion in [1], I am starting this thread to address > > the issue reported for foreign tables. > > > > Logical replication of foreign tables is not supported, and we throw > > an error in this case. But when we create a publication on a > > partitioned table that has a foreign table as a partition, the initial > > sync of such a table is successful. We should also throw an error in > > such cases. > > With this patch, we will throw an error when we try to create a > > publication on (or add to an existing publication) a partitioned table > > with a foreign table as its partition or attach such a table to > > existing published tables. > > > > [1] : https://www.postgresql.org/message-id/CAA4eK1Lhh4SgiYQLNiWSNKGdVS= zbd53%3Dsr2tQCKooEphDkUtgw%40mail.gmail.com > > > > Thanks and Regards, > > Shlok Kyal > Hi! > > Thanks for patch. > > I reviewed it and made some changes. > > 1. we should check foreign tables (not partitioned) > 2. added checking for foreign table creation > 3. some little corrections > > See attach > Hi Sergey, I have added most of the changes in v2-0002 with small changes except one change. @@ -1428,6 +1427,12 @@ check_foreign_tables_in_schema(Oid schemaid) errdetail("foreign table \"%s\" is a partition of partitioned table \"%s\"", get_rel_name(foreign_tbl_relid), parent_name= ))); } + else if (relForm->relkind =3D=3D RELKIND_FOREIGN_TABLE) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("cannot add relation \"%s\" to publication", + get_rel_name(relForm->oid)), + errdetail_relkind_not_supported(RELKIND_FOREIGN_TABLE)= )); } We should only throw error when foreign table is part of a partition table in case of 'FOR TABLES IN SCHEMA' . We should not throw an error otherwise because in case of 'FOR TABLES IN SCHEMA' foreign tables are not published by default. I have added the changes in v3-0001. Thanks and Regards, Shlok Kyal --0000000000001973d3062ceb344c Content-Type: application/octet-stream; name="v3-0001-Restrict-publishing-of-partitioned-table-with-a-f.patch" Content-Disposition: attachment; filename="v3-0001-Restrict-publishing-of-partitioned-table-with-a-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6j9t7g60 RnJvbSAzNDk3NTAzODVjZDNkZjEyYzAyNjU0YTkxOTk3ZjQ4ZjJhYmQ5ODMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjkgSmFuIDIwMjUgMTA6MTg6NTMgKzA1MzAKU3ViamVjdDogW1BBVENIIHYz XSBSZXN0cmljdCBwdWJsaXNoaW5nIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggYSBmb3JlaWdu CiB0YWJsZSBhcyBwYXJ0aXRpb24KCkxvZ2ljYWwgcmVwbGljYXRpb24gb2YgZm9yZWlnbiB0YWJs ZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3ZSB0aHJvdyBhbgplcnJvciBpbiB0aGlzIGNhc2UuIEJ1 dCB3aGVuIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG9uIGEgcGFydGl0aW9uZWQKdGFibGUgdGhhdCBo YXMgYSBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbiwgdGhlIGluaXRpYWwgc3luYyBvZiBzdWNo CnRhYmxlIGlzIHN1Y2Nlc3NmdWwuIFdlIHNob3VsZCBhbHNvIHRocm93IGFuIGVycm9yIGluIHN1 Y2ggY2FzZXMuCldpdGggdGhpcyBwYXRjaCB3ZSB3aWxsIHRocm93IGFuIGVycm9yIHdoZW4gd2Ug dHJ5IGNyZWF0ZSBhIHB1YmxpY2F0aW9uCm9uIChvciBhZGQgdG8gZXhpc3RpbmcgcHVibGljYXRp b24pIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduCnRhYmxlIGFzIGl0cyBwYXJ0aXRp b24uIFdlIHdpbGwgYWxzbyB0aHJvdyBhbiBlcnJvciB3aGVuIHdlIHRyeSB0bwphdHRhY2ggc3Vj aCB0YWJsZSB0byBleGlzdGluZyBwdWJsaXNoZWQgdGFibGVzLgotLS0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgIHwgMTUxICsrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMgICAgICAgIHwgIDQwICsrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgfCAgIDMgKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAgNDQgKysrKysrKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgfCAgIDggKysKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IHwgIDM5ICsrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsICAgICAgfCAgMzcgKysrKysrCiA3IGZpbGVzIGNoYW5n ZWQsIDMyMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmlu ZGV4IDQxZmZkNDk0YzguLjA3MWI0MjhiYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMKQEAgLTU1LDYgKzU1LDggQEAgdHlwZWRlZiBzdHJ1Y3QKIHN0YXRpYyB2b2lkCiBjaGVj a19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVsKQogeworCU9pZAkJ CWZvcmVpZ25fdGJsX3JlbGlkOworCiAJLyogTXVzdCBiZSBhIHJlZ3VsYXIgb3IgcGFydGl0aW9u ZWQgdGFibGUgKi8KIAlpZiAoUmVsYXRpb25HZXRGb3JtKHRhcmdldHJlbCktPnJlbGtpbmQgIT0g UkVMS0lORF9SRUxBVElPTiAmJgogCQlSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2lu ZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQpAQCAtNjQsNiArNjYsMTkgQEAgY2hlY2tf cHVibGljYXRpb25fYWRkX3JlbGF0aW9uKFJlbGF0aW9uIHRhcmdldHJlbCkKIAkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJlbCkpLAogCQkJCSBlcnJkZXRhaWxfcmVsa2luZF9u b3Rfc3VwcG9ydGVkKFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRyZWwpLT5yZWxraW5kKSkpOwogCisJ LyoKKwkgKiBDaGVjayBpZiBpdCBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBhbnkgZm9yZWln biB0YWJsZSBpcyBpdHMKKwkgKiBwYXJ0aXRpb24KKwkgKi8KKwlpZiAoY2hlY2tfcGFydHJlbF9o YXNfZm9yZWlnbl90YWJsZShSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKSwgJmZvcmVpZ25fdGJs X3JlbGlkKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgYWRkIHJlbGF0aW9uIFwiJXNc IiB0byBwdWJsaWNhdGlvbiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRy ZWwpKSwKKwkJCQkgZXJyZGV0YWlsKCJmb3JlaWduIHRhYmxlIFwiJXNcIiBpcyBhIHBhcnRpdGlv biBvZiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJICAgZ2V0X3JlbF9uYW1lKGZv cmVpZ25fdGJsX3JlbGlkKSwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdl dHJlbCkpKSk7CisKIAkvKiBDYW4ndCBiZSBzeXN0ZW0gdGFibGUgKi8KIAlpZiAoSXNDYXRhbG9n UmVsYXRpb24odGFyZ2V0cmVsKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTY5NSw2ICs3MTAsOSBA QCBwdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLCBib29sIGlm X25vdF9leGlzdHMpCiAKIAljaGVja19wdWJsaWNhdGlvbl9hZGRfc2NoZW1hKHNjaGVtYWlkKTsK IAorCS8qIGNoZWNrIGlmIHNjaGVtYSBoYXMgYW55IGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9u IHRhYmxlICovCisJY2hlY2tfZm9yZWlnbl90YWJsZXNfaW5fc2NoZW1hKHNjaGVtYWlkKTsKKwog CS8qIEZvcm0gYSB0dXBsZSAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsK IAltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKQEAgLTEzMjQsMyArMTM0Miwx MzYgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9BUkdTKQogCiAJU1JG X1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogfQorCisvKiBDaGVjayBpZiBhIHBhcnRpdGlvbmVkIHRh YmxlIGhhcyBhIGZvcmVpZ24gcGFydGl0aW9uKi8KK2Jvb2wKK2NoZWNrX3BhcnRyZWxfaGFzX2Zv cmVpZ25fdGFibGUoRm9ybV9wZ19jbGFzcyByZWxmb3JtLCBPaWQgKmZvcmVpZ25fdGJsX3JlbGlk KQoreworCWJvb2wJCWhhc19mb3JlaWduX3RibCA9IGZhbHNlOworCisJKmZvcmVpZ25fdGJsX3Jl bGlkID0gSW52YWxpZE9pZDsKKwlpZiAocmVsZm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFKQorCXsKKwkJTGlzdAkgICAqcmVsaWRzID0gTklMOworCisJCXJlbGlkcyA9 IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhyZWxpZHMsIFBVQkxJQ0FUSU9OX1BBUlRf TEVBRiwKKwkJCQkJCQkJCQkJCXJlbGZvcm0tPm9pZCk7CisKKwkJZm9yZWFjaF9vaWQocmVsaWQs IHJlbGlkcykKKwkJeworCQkJUmVsYXRpb24JcmVsID0gdGFibGVfb3BlbihyZWxpZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCQkJaWYgKFJlbGF0aW9uR2V0Rm9ybShyZWwpLT5yZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCXsKKwkJCQloYXNfZm9yZWlnbl90YmwgPSB0cnVlOwor CQkJCSpmb3JlaWduX3RibF9yZWxpZCA9IHJlbGlkOworCQkJfQorCisJCQl0YWJsZV9jbG9zZShy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChoYXNfZm9yZWlnbl90YmwpCisJCQkJYnJl YWs7CisJCX0KKwl9CisKKwlyZXR1cm4gaGFzX2ZvcmVpZ25fdGJsOworfQorCisvKiBDaGVjayBp ZiBhIHNjaGVtYSBoYXMgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aGljaCBoYXMgYSBmb3JlaWduIHBh cnRpdGlvbiAqLwordm9pZAorY2hlY2tfZm9yZWlnbl90YWJsZXNfaW5fc2NoZW1hKE9pZCBzY2hl bWFpZCkKK3sKKwlSZWxhdGlvbgljbGFzc1JlbDsKKwlTY2FuS2V5RGF0YSBrZXlbMl07CisJVGFi bGVTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWNsYXNzUmVsID0gdGFibGVf b3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5p dCgma2V5WzBdLAorCQkJCUFudW1fcGdfY2xhc3NfcmVsbmFtZXNwYWNlLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlzY2hlbWFpZCk7CisJU2NhbktleUluaXQoJmtl eVsxXSwKKwkJCQlBbnVtX3BnX2NsYXNzX3JlbGtpbmQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX0NIQVJFUSwKKwkJCQlDaGFyR2V0RGF0dW0oUkVMS0lORF9QQVJUSVRJT05FRF9UQUJM RSkpOworCisJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9jYXRhbG9nKGNsYXNzUmVsLCAyLCBrZXkp OworCXdoaWxlICgodHVwbGUgPSBoZWFwX2dldG5leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24pKSAhPSBOVUxMKQorCXsKKwkJRm9ybV9wZ19jbGFzcyByZWxGb3JtID0gKEZvcm1fcGdfY2xh c3MpIEdFVFNUUlVDVCh0dXBsZSk7CisJCU9pZAkJCWZvcmVpZ25fdGJsX3JlbGlkOworCisJCWlm IChjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKHJlbEZvcm0sICZmb3JlaWduX3RibF9y ZWxpZCkpCisJCXsKKwkJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0 b3JzKHJlbEZvcm0tPm9pZCk7CisJCQlPaWQJCQlwYXJlbnRfb2lkID0gcmVsRm9ybS0+b2lkOwor CQkJY2hhcgkgICAqcGFyZW50X25hbWU7CisKKwkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNl c3RvcnMpCisJCQl7CisJCQkJT2lkCQkJYW5jZXN0b3Jfc2NoZW1haWQgPSBnZXRfcmVsX25hbWVz cGFjZShhbmNlc3Rvcik7CisKKwkJCQlpZiAoYW5jZXN0b3Jfc2NoZW1haWQgPT0gc2NoZW1haWQp CisJCQkJCXBhcmVudF9vaWQgPSBhbmNlc3RvcjsKKwkJCX0KKworCQkJbGlzdF9mcmVlKGFuY2Vz dG9ycyk7CisJCQlwYXJlbnRfbmFtZSA9IGdldF9yZWxfbmFtZShwYXJlbnRfb2lkKTsKKworCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCSBlcnJtc2coImNhbm5vdCBhZGQgcmVsYXRpb24gXCIlc1wiIHRvIHB1Ymxp Y2F0aW9uIiwKKwkJCQkJCQlwYXJlbnRfbmFtZSksCisJCQkJCSBlcnJkZXRhaWwoImZvcmVpZ24g dGFibGUgXCIlc1wiIGlzIGEgcGFydGl0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiIs CisJCQkJCQkJICAgZ2V0X3JlbF9uYW1lKGZvcmVpZ25fdGJsX3JlbGlkKSwgcGFyZW50X25hbWUp KSk7CisJCX0KKwl9CisKKwl0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNsYXNz UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKiBDaGVjayBpZiBhbnkgZm9yZWlnbiB0YWJs ZSBpcyBhIHBhcnRpdGlvbiB0YWJsZSAqLwordm9pZAorY2hlY2tfZm9yZWlnbl90YWJsZXModm9p ZCkKK3sKKwlSZWxhdGlvbgljbGFzc1JlbDsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJVGFibGVT Y2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWNsYXNzUmVsID0gdGFibGVfb3Bl bihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgm a2V5WzBdLAorCQkJCUFudW1fcGdfY2xhc3NfcmVsa2luZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfQ0hBUkVRLAorCQkJCUNoYXJHZXREYXR1bShSRUxLSU5EX0ZPUkVJR05fVEFCTEUp KTsKKworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhjbGFzc1JlbCwgMSwga2V5KTsK Kwl3aGlsZSAoKHR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u KSkgIT0gTlVMTCkKKwl7CisJCUZvcm1fcGdfY2xhc3MgcmVsRm9ybSA9IChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCWlmIChyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbikKKwkJ eworCQkJT2lkCQkJcGFyZW50X29pZDsKKwkJCWNoYXIJICAgKnBhcmVudF9uYW1lOworCQkJTGlz dAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsRm9ybS0+b2lkKTsK KworCQkJcGFyZW50X29pZCA9IGxsYXN0X29pZChhbmNlc3RvcnMpOworCQkJcGFyZW50X25hbWUg PSBnZXRfcmVsX25hbWUocGFyZW50X29pZCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJj YW5ub3QgYWRkIHJlbGF0aW9uIFwiJXNcIiB0byBwdWJsaWNhdGlvbiIsCisJCQkJCQkJcGFyZW50 X25hbWUpLAorCQkJCQkgZXJyZGV0YWlsKCJmb3JlaWduIHRhYmxlIFwiJXNcIiBpcyBhIHBhcnRp dGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCSAgIE5hbWVTdHIocmVs Rm9ybS0+cmVsbmFtZSksIHBhcmVudF9uYW1lKSkpOworCQl9CisJfQorCisJdGFibGVfZW5kc2Nh bihzY2FuKTsKKwl0YWJsZV9jbG9zZShjbGFzc1JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9mb3JlaWduY21kcy5jCmluZGV4IGMxNGUwMzhkNTQuLjAwNGVkZDk1MTUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUg ImNhdGFsb2cvZGVwZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKICNp bmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGFydGl0 aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2ZvcmVpZ25fdGFibGUuaCIKQEAgLTE0MjMsNiArMTQyNCw0NSBAQCBDcmVhdGVGb3JlaWduVGFi bGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqc3RtdCwgT2lkIHJlbGlkKQogCiAJZnRyZWwgPSB0 YWJsZV9vcGVuKEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCisJ LyoKKwkgKiBDaGVjayBpZiBpdCBpcyBhIGZvcmVpZ24gcGFydGl0aW9uIGFuZCB0aGUgcGFydGl0 aW9uZWQgdGFibGUgaXMKKwkgKiBwdWJsaXNoZWQKKwkgKi8KKwlpZiAoc3RtdC0+YmFzZS5wYXJ0 Ym91bmQgIT0gTlVMTCkKKwl7CisJCVJhbmdlVmFyICAgKnJvb3QgPSBjYXN0Tm9kZShSYW5nZVZh ciwgbGZpcnN0KGxpc3RfaGVhZChzdG10LT5iYXNlLmluaFJlbGF0aW9ucykpKTsKKwkJUmVsYXRp b24Jcm9vdHJlbCA9IHRhYmxlX29wZW5ydihyb290LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlm IChSZWxhdGlvbkdldEZvcm0ocm9vdHJlbCktPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJeworCQkJT2lkCQkJc2NoZW1haWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShy b290cmVsKTsKKwkJCUxpc3QJICAgKnB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhy b290cmVsLT5yZF9pZCk7CisJCQlMaXN0CSAgICphbmNlc3RvcnM7CisKKwkJCXB1Ym9pZHMgPSBs aXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygp KTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldFNjaGVt YVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9h bmNlc3RvcnMocm9vdHJlbC0+cmRfaWQpOworCisJCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5j ZXN0b3JzKQorCQkJeworCQkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9p ZHMsCisJCQkJCQkJCQkJCQkgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJ CQlzY2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKKwkJCQlwdWJvaWRzID0g bGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJCQkJIEdldFNjaGVtYVB1 YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJfQorCQkJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisK KwkJCWlmIChwdWJvaWRzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCSBlcnJtc2coImNhbm5vdCBjcmVhdGUgZm9y ZWlnbiBwYXJ0aXRpb24gXCIlc1wiIGFzIHBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBpcyBwdWJs aXNoZWQiLAorCQkJCQkJCQlnZXRfcmVsX25hbWUocmVsaWQpLAorCQkJCQkJCQlSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyb290cmVsKSkpKTsKKwkJfQorCQl0YWJsZV9jbG9zZShyb290cmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCX0KKwogCS8qCiAJICogRm9yIG5vdyB0aGUgb3duZXIgY2Fubm90 IGJlIHNwZWNpZmllZCBvbiBjcmVhdGUuIFVzZSBlZmZlY3RpdmUgdXNlciBJRC4KIAkgKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggOTUxZmZhYmI2NS4uNzI1OGQ2 YzMzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTg1NSw2ICs4 NTUsOSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCkKIAkvKiBBc3NvY2lhdGUgb2JqZWN0cyB3aXRoIHRoZSBwdWJsaWNh dGlvbi4gKi8KIAlpZiAoc3RtdC0+Zm9yX2FsbF90YWJsZXMpCiAJeworCQkvKiBDaGVjayBpZiBh bnkgZm9yZWlnbiB0YWJsZSBpcyBhIHBhcnQgb2YgcGFydGl0aW9uZWQgdGFibGUgKi8KKwkJY2hl Y2tfZm9yZWlnbl90YWJsZXMoKTsKKwogCQkvKiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQg cHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiAqLwogCQlDYWNoZUludmFsaWRhdGVSZWxjYWNo ZUFsbCgpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZDYxN2M0YmM2My4uODJl MDc1MDlhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE5MjIyLDYgKzE5MjIyLDcg QEAgQVRFeGVjQXR0YWNoUGFydGl0aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgUGFy dGl0aW9uQ21kICpjbWQsCiAJT2lkCQkJZGVmYXVsdFBhcnRPaWQ7CiAJTGlzdAkgICAqcGFydEJv dW5kQ29uc3RyYWludDsKIAlQYXJzZVN0YXRlICpwc3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUoTlVM TCk7CisJT2lkCQkJZm9yZWlnbl90YmxfcmVsaWQ7CiAKIAlwc3RhdGUtPnBfc291cmNldGV4dCA9 IGNvbnRleHQtPnF1ZXJ5U3RyaW5nOwogCkBAIC0xOTM0Nyw2ICsxOTM0OCw0OSBAQCBBVEV4ZWNB dHRhY2hQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBQYXJ0aXRpb25DbWQg KmNtZCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKIAkJCQkgZXJy bXNnKCJjYW5ub3QgYXR0YWNoIHRlbXBvcmFyeSByZWxhdGlvbiBvZiBhbm90aGVyIHNlc3Npb24g YXMgcGFydGl0aW9uIikpKTsKIAorCS8qCisJICogQ2hlY2sgaWYgYXR0YWNocmVsIGlzIGEgZm9y ZWlnbiB0YWJsZSBvciBhIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGgKKwkgKiBmb3JlaWduIHBhcnRp dGlvbiBhbmQgcmVsIGlzIG5vdCBwdWJsaXNoZWQuCisJICovCisJaWYgKGF0dGFjaHJlbC0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSB8fAorCQljaGVja19wYXJ0cmVs X2hhc19mb3JlaWduX3RhYmxlKFJlbGF0aW9uR2V0Rm9ybShhdHRhY2hyZWwpLCAmZm9yZWlnbl90 YmxfcmVsaWQpKQorCXsKKwkJT2lkCQkJc2NoZW1haWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShy ZWwpOworCQlMaXN0CSAgICpwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsLT5y ZF9pZCk7CisJCUxpc3QJICAgKmFuY2VzdG9yczsKKworCQlwdWJvaWRzID0gbGlzdF9jb25jYXRf dW5pcXVlX29pZChwdWJvaWRzLCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKSk7CisJCXB1Ym9p ZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldFNjaGVtYVB1YmxpY2F0aW9u cyhzY2hlbWFpZCkpOworCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWwt PnJkX2lkKTsKKworCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0b3JzKQorCQl7CisJCQlw dWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJCQkgR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJCXNjaGVtYWlkID0gZ2V0X3JlbF9u YW1lc3BhY2UoYW5jZXN0b3IpOworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQo cHVib2lkcywKKwkJCQkJCQkJCQkJIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOwor CQl9CisJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJCWlmIChwdWJvaWRzKQorCQl7CisJCQlp ZiAoYXR0YWNocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJM RSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpF Q1RfVFlQRSksCisJCQkJCQkgZXJybXNnKCJjYW5ub3QgYXR0YWNoIGEgcGFydGl0aW9uZWQgdGFi bGUgd2l0aCBhIGZvcmVpZ24gcGFydGl0aW9uIHRvIGEgcHVibGlzaGVkIHRhYmxlIiksCisJCQkJ CQkgZXJyZGV0YWlsKCJmb3JlaWduIHRhYmxlIFwiJXNcIiBpcyBhIHBhcnRpdGlvbiBvZiBwYXJ0 aXRpb25lZCB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkgICBnZXRfcmVsX25hbWUoZm9yZWlnbl90 YmxfcmVsaWQpLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShhdHRhY2hyZWwp KSkpOworCQkJZWxzZQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImNhbm5vdCBhdHRhY2gg Zm9yZWlnbiB0YWJsZSBcIiVzXCIgdG8gYSBwdWJsaXNoZWQgdGFibGUiLAorCQkJCQkJCQlnZXRf cmVsX25hbWUoYXR0YWNocmVsLT5yZF9pZCkpKSk7CisKKwkJfQorCX0KKwogCS8qCiAJICogQ2hl Y2sgaWYgYXR0YWNocmVsIGhhcyBhbnkgaWRlbnRpdHkgY29sdW1ucyBvciBhbnkgY29sdW1ucyB0 aGF0IGFyZW4ndAogCSAqIGluIHRoZSBwYXJlbnQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmgKaW5kZXggNDhjN2QxYTg2MS4uYmE1MWY0YTcyMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb24uaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9nZW5i a2kuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9kLmgiCS8q IElXWVUgcHJhZ21hOiBleHBvcnQgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTkxLDQg KzE5MiwxMSBAQCBleHRlcm4gQml0bWFwc2V0ICpwdWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0 bWFwc2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xzLAogZXh0ZXJuIEJpdG1hcHNldCAqcHViX2Zv cm1fY29sc19tYXAoUmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCQlQdWJsaXNoR2VuY29sc1R5 cGUgaW5jbHVkZV9nZW5jb2xzX3R5cGUpOwogCitleHRlcm4gYm9vbCBjaGVja19wYXJ0cmVsX2hh c19mb3JlaWduX3RhYmxlKEZvcm1fcGdfY2xhc3MgcmVsZm9ybSwKKwkJCQkJCQkJCQkJT2lkICpm b3JlaWduX3RibF9uYW1lKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZm9yZWlnbl90YWJsZXNfaW5f c2NoZW1hKE9pZCBzY2hlbWFpZCk7CisKK2V4dGVybiB2b2lkIGNoZWNrX2ZvcmVpZ25fdGFibGVz KHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogUEdfUFVCTElDQVRJT05fSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBiYzM4OThmYmU1Li5iOTczZjQx ZTk0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMTg4 NSw2ICsxODg1LDQ1IEBAIERST1AgUFVCTElDQVRJT04gcHViMTsKIERST1AgUFVCTElDQVRJT04g cHViMjsKIERST1AgVEFCTEUgZ2VuY29sczsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7Cist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9u ZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0 X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0 X2ZkdzsKK0NSRUFURSBTQ0hFTUEgc2NoMzsKK0NSRUFURSBUQUJMRSBzY2gzLnRtYWluKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKK0NSRUFURSBUQUJMRSBzY2gzLnBhcnQxIFBBUlRJ VElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOworQ1JFQVRFIFRB QkxFIHNjaDMucGFydDIoaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIEZP UkVJR04gVEFCTEUgc2NoMy5wYXJ0Ml8xIFBBUlRJVElPTiBPRiBzY2gzLnBhcnQyIEZPUiBWQUxV RVMgRlJPTSAoNSkgVE8gKDEwKSBTRVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRBQkxFIHNjaDMu dG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8g KDEwKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluOworRVJS T1I6ICBjYW5ub3QgYWRkIHJlbGF0aW9uICJ0bWFpbiIgdG8gcHVibGljYXRpb24KK0RFVEFJTDog IGZvcmVpZ24gdGFibGUgInBhcnQyXzEiIGlzIGEgcGFydGl0aW9uIG9mIHBhcnRpdGlvbmVkIHRh YmxlICJ0bWFpbiIKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1B IHNjaDM7CitFUlJPUjogIGNhbm5vdCBhZGQgcmVsYXRpb24gInRtYWluIiB0byBwdWJsaWNhdGlv bgorREVUQUlMOiAgZm9yZWlnbiB0YWJsZSAicGFydDJfMSIgaXMgYSBwYXJ0aXRpb24gb2YgcGFy dGl0aW9uZWQgdGFibGUgInRtYWluIgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIEFMTCBU QUJMRVM7CitFUlJPUjogIGNhbm5vdCBhZGQgcmVsYXRpb24gInRtYWluIiB0byBwdWJsaWNhdGlv bgorREVUQUlMOiAgZm9yZWlnbiB0YWJsZSAicGFydDJfMSIgaXMgYSBwYXJ0aXRpb24gb2YgcGFy dGl0aW9uZWQgdGFibGUgInRtYWluIgorLS0gVGVzdCB3aGVuIGEgcGFydGl0aW9uZWQgdGFibGUg d2l0aCBmb3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9uIGlzIGF0dGFjaGVkCistLSB0byBwYXJ0 aXRpb25lZCB0YWJsZSB3aGljaCBpcyBhbHJlYWR5IHB1Ymxpc2hlZAorQUxURVIgVEFCTEUgc2No My50bWFpbiBERVRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDI7CitDUkVBVEUgUFVCTElDQVRJT04g cHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbjsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNI IFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKK0VSUk9S OiAgY2Fubm90IGF0dGFjaCBhIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggYSBmb3JlaWduIHBhcnRp dGlvbiB0byBhIHB1Ymxpc2hlZCB0YWJsZQorREVUQUlMOiAgZm9yZWlnbiB0YWJsZSAicGFydDJf MSIgaXMgYSBwYXJ0aXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUgInBhcnQyIgorLS0gQ2FuJ3Qg Y3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZQorQ1JFQVRFIEZPUkVJ R04gVEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMg RlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZkd19zZXJ2ZXI7CitFUlJPUjogIGNhbm5vdCBjcmVh dGUgZm9yZWlnbiBwYXJ0aXRpb24gInBhcnQzXzEiIGFzIHBhcnRpdGlvbmVkIHRhYmxlICJ0bWFp biIgaXMgcHVibGlzaGVkCistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVi bGlzaGVkIHRhYmxlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzIoaWQgaW50KSBT RVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElP TiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0VSUk9SOiAgY2Fu bm90IGF0dGFjaCBmb3JlaWduIHRhYmxlICJwYXJ0M18yIiB0byBhIHB1Ymxpc2hlZCB0YWJsZQor RFJPUCBQVUJMSUNBVElPTiBwdWIxOworRFJPUCBTQ0hFTUEgc2NoMyBDQVNDQURFOworRFJPUCBT RVJWRVIgZmR3X3NlcnZlcjsKK0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9mZHc7CiBS RVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlcl9kdW1teTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1 YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAppbmRl eCA0N2YwMzI5YzI0Li5iOTgxMTAzM2RjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24u c3FsCkBAIC0xMTg2LDYgKzExODYsNDMgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIyOwogRFJPUCBU QUJMRSBnZW5jb2xzOwogCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tIFRlc3Qg d2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUg b24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NS RUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKwor Q1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRBQkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9G IHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2No My5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9N ICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBB VFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOwor CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbjsKK0NSRUFURSBQ VUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDM7CitDUkVBVEUgUFVCTElD QVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUzsKKworLS0gVGVzdCB3aGVuIGEgcGFydGl0aW9uZWQg dGFibGUgd2l0aCBmb3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9uIGlzIGF0dGFjaGVkCistLSB0 byBwYXJ0aXRpb25lZCB0YWJsZSB3aGljaCBpcyBhbHJlYWR5IHB1Ymxpc2hlZAorQUxURVIgVEFC TEUgc2NoMy50bWFpbiBERVRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDI7CitDUkVBVEUgUFVCTElD QVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbjsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4g QVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsK KworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZQor Q1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJVElPTiBPRiBzY2gzLnRtYWlu IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZkd19zZXJ2ZXI7CisKKy0tIENh bid0IGF0dGFjaCBmb3JlaWduIHBhcnRpdGlvbiB0byBwdWJsaXNoZWQgdGFibGUKK0NSRUFURSBG T1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMihpZCBpbnQpIFNFUlZFUiBmZHdfc2VydmVyOworQUxU RVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFM VUVTIEZST00gKDE1KSBUTyAoMjApOworCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitEUk9QIFND SEVNQSBzY2gzIENBU0NBREU7CitEUk9QIFNFUlZFUiBmZHdfc2VydmVyOworRFJPUCBGT1JFSUdO IERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwog RFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyMjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7Ci0tIAoyLjM0 LjEKCg== --0000000000001973d3062ceb344c--