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 1thoOU-0078kD-JL for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Feb 2025 11:25:34 +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 1thoOR-009pPm-HR for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Feb 2025 11:25:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1thoOQ-009pPY-Ts for pgsql-hackers@lists.postgresql.org; Tue, 11 Feb 2025 11:25:31 +0000 Received: from mail-yw1-x112b.google.com ([2607:f8b0:4864:20::112b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1thoOO-000Ca6-2V for pgsql-hackers@lists.postgresql.org; Tue, 11 Feb 2025 11:25:29 +0000 Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-6f754678c29so47851017b3.0 for ; Tue, 11 Feb 2025 03:25:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739273128; x=1739877928; 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=OWHl0x5UJMIvTpIjRGFpjraKbjfkoZidpVspu7wjT3s=; b=F3moq6DU4dmVHib9H4jNiNpRN0/uY1fpBsnxZH9yk8q9B7edYis5RsTQpB5ppPJR2A CPHS8MZlrz/yTJ+pT75UTDFxDXloqKJC1SXEfrBj5SH1obN/3uVa0fwrN8SbtbwDYp1S GnzLwjouZQNAjTUCt13zFt06yrzBHZZlTiZ3bhwe3+jMUeXPysWkBUmZOd2PRbkHAoQd pI5/T+QETAO11p6VUPpRfAIvodnRNhR1dpTKvdVTnsaZ17wQOSzg4v4KOKEpWJqNbx0a hitctaj21zijemre6JJcqm5RlrmnGdOkOZO6X1370OU0tQH1+qNlf7+jiZ5ML+wzrUCP IesA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739273128; x=1739877928; 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=OWHl0x5UJMIvTpIjRGFpjraKbjfkoZidpVspu7wjT3s=; b=w2YS1zYkDEHC9UJvB+XJAA65LWmvnkwrhb4VaYL5sESNUDPi5nt8X9a6qQ5pe+KqHj Ufr7B14Z3KpGb3AcwEH04dRzNaTf4tjrK3AWQqJftuzSCwhWninZFatpp2plYBrh8rSG VLOlhEkv/ZcOT3oQqwDZMpEYLNaUZttMUPcTQRk+1njzkIBKdmcs1LI3BMJbaYYcNCBc PrqI+74i2wzNwW0JJZ8Fo7ehLdNQIGLPCbFD6hkFcUwAnIcnFUsunVyXKah7Zd/Bkrt6 +x2iK5l0w8hK8Q2jfgnCFeHyuMHb8OCJZslpjBQoG/uMsX1B/Cjj9qGVeKZVAn09H1Gc OrMA== X-Forwarded-Encrypted: i=1; AJvYcCUeFYl8ewyT4MYaDMh9q0tHZgll+Qg/ZN3TnZGvE6mSkGbSuujYsaUcUtfcwXyhJJehbRbWL3tlVLQwoC5B@lists.postgresql.org X-Gm-Message-State: AOJu0YyDJ+bw9GI0bvpwIy2aqzd+EfC73qKJ5veUUGvOraVtjsFkHxWg H/S3gmM9iBjnlPCGS/q+edb/LTzz+rVivdlQJCXpkMKIWs4SGBJTAY6sfqFM3BSnR9/rbzUUr/d QqZWWFHBLG6UfJ28Mc5Sq0Hqd6h0= X-Gm-Gg: ASbGnctZirdcYhZg47+oY2Z83Jrt6JjD3OQB5awasvJdJnyP+VT8ZvmnHfgTzVL3mWK /pYs3vewyj7Ha47RZByw7Ht6NNobYW2H9BY2KnDfDRyFgeLicemXfTX4RKAG7FxIoSJ/d+Rl7aS I= X-Google-Smtp-Source: AGHT+IGNoM21QyF8bGxTtraicQGX8jQSrYp/tNBbbOnQyOfIvbHVfAK/wF+fGAu0GjxOklsZos7KzMVYd3sNPdp593s= X-Received: by 2002:a05:690c:4513:b0:6f7:ad19:abd2 with SMTP id 00721157ae682-6f9b2843de5mr170983727b3.1.1739273127708; Tue, 11 Feb 2025 03:25:27 -0800 (PST) MIME-Version: 1.0 References: <202502050844.4lrgg3aoudat@alvherre.pgsql> In-Reply-To: <202502050844.4lrgg3aoudat@alvherre.pgsql> From: Shlok Kyal Date: Tue, 11 Feb 2025 16:55:15 +0530 X-Gm-Features: AWEUYZnSofNnHlh6f3Zvj7cTa9abXNbt46IM9oS1pvJj4gPg-zWcRMaMZdofMTE Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: vignesh C , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000f20c08062ddc1411" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f20c08062ddc1411 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 5 Feb 2025 at 14:14, =C3=81lvaro Herrera = wrote: > > On 2025-Feb-05, vignesh C wrote: > > > We can maintain the behavior you suggested when the > > PUBLISH_VIA_PARTITION_ROOT option is set to false. However, when > > PUBLISH_VIA_PARTITION_ROOT is true, the table data is copied from the > > root table (as intended by the user), which will also include the > > foreign table data. In this case, wouldn=E2=80=99t it be better to thro= w an > > error? > > It sounds to me a reasonable restriction that you can only add a > partitioned table to a publication if publish_via_partition_root=3Dfalse. > Then the case of hybrid partitioned tables is supported, but it requires > that changes are published directly by partitions, which is sensible > anyway. > I have created a patch with the above approach. We can create a publication on a partition table with foreign partition when publish_via_partition_root=3Dfalse. In this case foreign partitions will not be published. And if publish_via_partition_root=3Dtrue we will throw an error. Please find the v5 patch. > In this case, during CREATE FOREIGN TABLE of a partition with this > condition, we must check whether any publications include the schema > that the table is being created on (or attached, for ALTER TABLE ATTACH > PARTITION), and whether there are any publications that are FOR ALL > TABLES that would be affected. > I have handled the above cases and added tests for the same. > (If we later figure out a way to allow publish_via_partition_root and > skip the tuples in foreign partitions, it's easy to remove the > restriction.) > Thanks and Regards, Shlok Kyal --000000000000f20c08062ddc1411 Content-Type: application/octet-stream; name="v5-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Disposition: attachment; filename="v5-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m70eaq2w0 RnJvbSAyNjYzNjZhZGVkNDViNGM3Y2RjMTUyNWM0NTI4NmVmMTk4ZjAyMWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTEgRmViIDIwMjUgMTU6MzI6NTUgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1 XSBSZXN0cmljdCBwdWJsaXNoaW5nIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbgog cGFydGl0aW9uCgpMb2dpY2FsIHJlcGxpY2F0aW9uIG9mIGZvcmVpZ24gdGFibGUgaXMgbm90IHN1 cHBvcnRlZCBhbmQgd2UgdGhyb3cgYW4KZXJyb3IgaW4gdGhpcyBjYXNlLiBCdXQgd2hlbiBjcmVh dGUgYSBwdWJsaWNhdGlvbiBvbiBhIHBhcnRpdGlvbmVkCnRhYmxlIHRoYXQgaGFzIGEgZm9yZWln biBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5bmMgb2Ygc3VjaCB0YWJsZSBpcwpzdWNjZXNzZnVs IGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBjYXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyLCB3aGVu IHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQ6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlClJvb3QgdGFibGUgaXMgcHVibGlzaGVkIGFuZCB0aGUgaW5pdGlhbCBkYXRhIG9m IGZvcmVpZ24gcGFydGl0aW9ucwphcmUgcmVwbGljYXRlZC4KCjIuIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQgRk9SIEFMTCBUQUJMRVMKQWxsIGxlYWYgdGFibGVz IGV4Y2VwdCBmb3JlaWduIHBhcnRpdGlvbnMgYXJlIHB1Ymxpc2hlZC4KCjMuIHdpdGggcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxFLyBGT1IgVEFCTEVTIElO IFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4gSW5pdGlhbCBkYXRhIG9mIGZv cmVpZ24gcGFydGl0aW9ucyBhcmUKcmVwbGljYXRlZC4KCldpdGggdGhpcyBwYXRjaCB3ZSBoYXZl IGZvbGxvd2luZyBiZWhhdmlvdXI6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlCldlIHRocm93IGFuIGVycm9yIHdoZW4gd2UgdHJ5IHRvIHB1Ymxpc2ggYSBmb3JlaWdu IHBhcnRpdGl0b24uIEVycm9yCmlzIHRocm93biB3aGVuIHdlIHRyeSB0byBjcmVhdGUgYSBwdWJs aWNhdGlvbiBvbiAob3IgYWRkIHRvIGV4aXN0aW5nCnB1YmxpY2F0aW9uKSBhIHBhcnRpdGlvbmVk IHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24sIHdoZW4gdHJ5IHRvCmNyZWF0ZSBhIGZvcmVp Z24gcGFydGl0aW9uIGFuZCB3aGVuIHdlIHRyeSB0byBhdHRhY2ggZm9yZWlnbiB0YWJsZSAob3IK YSB0YWJsZSB3aXRoIGZvcmVpZ24gcGFydGl0aW9uKSB0byBleGlzdGluZyBwdWJsaXNoZWQgdGFi bGVzLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCldlIHNraXAg cHVibGlzaGluZyBmb3JlaWduIHBhcnRpdGlvbiB3aGljaCBhcmUgcGFydCBvZiB0aGUgcHVibGlj YXRpb24uClRoaXMgaXMgZG9uZSBieSBhdm9pZCBhZGRpbmcgZm9yZWlnbiBwYXJ0aXRpb25zIGlu IHBnX3N1YnNjcmlwdGlvbl9yZWwKY2F0YWxvZyB0YWJsZS4KLS0tCiBzcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICB8IDE4MSArKysrKysrKysrKysrKysrKysrKy0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jICAgICAgICB8ICA0NyArKysrKysKIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAgIHwgIDQ3ICsrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAgNTMgKysrKysrKwogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgfCAgIDcgKwogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgfCAgODkgKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgIHwgIDgxICsrKysrKysrKysKIDcg ZmlsZXMgY2hhbmdlZCwgNDg4IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCBkNmY5NGRiNWQ5Li5kMDIyZmY3MWI1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC01Myw3ICs1Myw3IEBAIHR5cGVk ZWYgc3RydWN0CiAgKiBlcnJvciBpZiBub3QuCiAgKi8KIHN0YXRpYyB2b2lkCi1jaGVja19wdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVsKQorY2hlY2tfcHVibGljYXRp b25fYWRkX3JlbGF0aW9uKFJlbGF0aW9uIHRhcmdldHJlbCwgUHVibGljYXRpb24gKnB1YikKIHsK IAkvKiBNdXN0IGJlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCWlmIChSZWxh dGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYmCkBA IC02NCw2ICs2NCwxOSBAQCBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24g dGFyZ2V0cmVsKQogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSksCiAJ CQkJIGVycmRldGFpbF9yZWxraW5kX25vdF9zdXBwb3J0ZWQoUmVsYXRpb25HZXRGb3JtKHRhcmdl dHJlbCktPnJlbGtpbmQpKSk7CiAKKwkvKgorCSAqIHB1Ymxpc2hfdmlhX3Jvb3RfcGFydGl0aW9u IGNhbm5vdCBiZSB0cnVlIGlmIGl0IGlzIGEgcGFydGl0aW9uZWQgdGFibGUKKwkgKiBhbmQgaGFz IGFueSBmb3JlaWduIHBhcnRpdGlvbgorCSAqLworCWlmIChwdWItPnB1YnZpYXJvb3QgJiYKKwkJ Y2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVs KSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiY2Fubm90IHNldCBwYXJhbWV0ZXIgXCIlc1wiIHRv IHRydWUgZm9yIHB1YmxpY2F0aW9uIFwiJXNcIiIsCisJCQkJCQkicHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QiLCBwdWItPm5hbWUpLAorCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBc IiVzXCIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbiIsCisJCQkJ CQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSkpOworCiAJLyogQ2FuJ3Qg YmUgc3lzdGVtIHRhYmxlICovCiAJaWYgKElzQ2F0YWxvZ1JlbGF0aW9uKHRhcmdldHJlbCkpCiAJ CWVyZXBvcnQoRVJST1IsCkBAIC0zMDQsNyArMzE3LDcgQEAgY2hlY2tfYW5kX2ZldGNoX2NvbHVt bl9saXN0KFB1YmxpY2F0aW9uICpwdWIsIE9pZCByZWxpZCwgTWVtb3J5Q29udGV4dCBtY3h0LAog CiAvKgogICogR2V0cyB0aGUgcmVsYXRpb25zIGJhc2VkIG9uIHRoZSBwdWJsaWNhdGlvbiBwYXJ0 aXRpb24gb3B0aW9uIGZvciBhIHNwZWNpZmllZAotICogcmVsYXRpb24uCisgKiByZWxhdGlvbi4g Rm9yZWlnbiB0YWJsZXMgYXJlIG5vdCBpbmNsdWRlZC4KICAqLwogTGlzdCAqCiBHZXRQdWJQYXJ0 aXRpb25PcHRpb25SZWxhdGlvbnMoTGlzdCAqcmVzdWx0LCBQdWJsaWNhdGlvblBhcnRPcHQgcHVi X3BhcnRvcHQsCkBAIC0zMTMsMjUgKzMyNiwyMSBAQCBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxh dGlvbnMoTGlzdCAqcmVzdWx0LCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQsCiAJaWYg KGdldF9yZWxfcmVsa2luZChyZWxpZCkgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgog CQlwdWJfcGFydG9wdCAhPSBQVUJMSUNBVElPTl9QQVJUX1JPT1QpCiAJewotCQlMaXN0CSAgICph bGxfcGFydHMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJlbGlkLCBOb0xvY2ssCi0JCQkJCQkJCQkJ CQkJTlVMTCk7CisJCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVs aWQsIE5vTG9jaywgTlVMTCk7CiAKLQkJaWYgKHB1Yl9wYXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BB UlRfQUxMKQotCQkJcmVzdWx0ID0gbGlzdF9jb25jYXQocmVzdWx0LCBhbGxfcGFydHMpOwotCQll bHNlIGlmIChwdWJfcGFydG9wdCA9PSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpCisJCWZvcmVhY2hf b2lkKHBhcnRPaWQsIGFsbF9wYXJ0cykKIAkJewotCQkJTGlzdENlbGwgICAqbGM7CisJCQljaGFy CQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHBhcnRPaWQpOwogCi0JCQlmb3JlYWNoKGxjLCBh bGxfcGFydHMpCi0JCQl7Ci0JCQkJT2lkCQkJcGFydE9pZCA9IGxmaXJzdF9vaWQobGMpOworCQkJ aWYgKHJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQorCQkJCWNvbnRpbnVlOwogCi0J CQkJaWYgKGdldF9yZWxfcmVsa2luZChwYXJ0T2lkKSAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQotCQkJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHBhcnRPaWQpOwotCQkJfQor CQkJaWYgKHB1Yl9wYXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRfTEVBRiAmJgorCQkJCXJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQljb250aW51ZTsKKworCQkJcmVz dWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBwYXJ0T2lkKTsKIAkJfQotCQllbHNlCi0JCQlBc3Nl cnQoZmFsc2UpOwogCX0KIAllbHNlCiAJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVs aWQpOwpAQCAtNDYzLDcgKzQ3Miw3IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHVi aWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUodGFyZ2V0cmVsKSwgcHViLT5uYW1lKSkpOwogCX0KIAotCWNoZWNrX3B1YmxpY2F0aW9uX2Fk ZF9yZWxhdGlvbih0YXJnZXRyZWwpOworCWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0 YXJnZXRyZWwsIHB1Yik7CiAKIAkvKiBWYWxpZGF0ZSBhbmQgdHJhbnNsYXRlIGNvbHVtbiBuYW1l cyBpbnRvIGEgQml0bWFwc2V0IG9mIGF0dG51bXMuICovCiAJYXR0bnVtcyA9IHB1Yl9jb2xsaXN0 X3ZhbGlkYXRlKHByaS0+cmVsYXRpb24sIHByaS0+Y29sdW1ucyk7CkBAIC03MDMsNiArNzEyLDEz IEBAIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1haWQsIGJvb2wg aWZfbm90X2V4aXN0cykKIAogCWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9zY2hlbWEoc2NoZW1haWQp OwogCisJLyoKKwkgKiBJZiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyB0cnVlLCBjaGVj ayBpZiBzY2hlbWEgaGFzIGFueSBmb3JlaWduCisJICogcGFydGl0aW9uCisJICovCisJaWYgKHB1 Yi0+cHVidmlhcm9vdCkKKwkJY2hlY2tfZm9yZWlnbl90YWJsZXNfaW5fc2NoZW1hKHNjaGVtYWlk LCBwdWItPm5hbWUpOworCiAJLyogRm9ybSBhIHR1cGxlICovCiAJbWVtc2V0KHZhbHVlcywgMCwg c2l6ZW9mKHZhbHVlcykpOwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpA QCAtMTMzMiwzICsxMzQ4LDEzNCBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBHX0ZVTkNU SU9OX0FSR1MpCiAKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CiB9CisKKy8qIENoZWNrIGlm IGEgcGFydGl0aW9uZWQgdGFibGUgaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24gKi8KK2Jvb2wKK2No ZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUoRm9ybV9wZ19jbGFzcyByZWxmb3JtKQorewor CWJvb2wJCWhhc19mb3JlaWduX3RibCA9IGZhbHNlOworCisJaWYgKHJlbGZvcm0tPnJlbGtpbmQg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCUxpc3QJICAgKnJlbGlkcyA9IE5J TDsKKworCQlyZWxpZHMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJlbGZvcm0tPm9pZCwgTm9Mb2Nr LCBOVUxMKTsKKworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVsaWRzKQorCQl7CisJCQlSZWxhdGlv bglyZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQlpZiAoUmVs YXRpb25HZXRGb3JtKHJlbCktPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQorCQkJ CWhhc19mb3JlaWduX3RibCA9IHRydWU7CisKKwkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCQkJaWYgKGhhc19mb3JlaWduX3RibCkKKwkJCQlicmVhazsKKwkJfQorCX0K KworCXJldHVybiBoYXNfZm9yZWlnbl90Ymw7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHNjaGVt YSBoYXMgYSBwYXJ0aXRpb24gdGFibGUgd2hpY2ggaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24uCisg KiBUaGUgcGFydGl0aW9uIHRhYmxlcyBpbiBhIHNjaGVtYSBjYW4gaGF2ZSBwYXJ0aXRpb25zIGlu IG90aGVyIHNjaGVtYS4gV2UgYWxzbworICogbmVlZCB0byBjaGVjayBpZiBzdWNoIHBhcnRpdGlv bnMgYXJlIGZvcmVpZ24gcGFydGl0aW9uLgorICovCit2b2lkCitjaGVja19mb3JlaWduX3RhYmxl c19pbl9zY2hlbWEoT2lkIHNjaGVtYWlkLCBjaGFyICpwdWJuYW1lKQoreworCVJlbGF0aW9uCWNs YXNzUmVsOworCVNjYW5LZXlEYXRhIGtleVsyXTsKKwlUYWJsZVNjYW5EZXNjIHNjYW47CisJSGVh cFR1cGxlCXR1cGxlOworCisJY2xhc3NSZWwgPSB0YWJsZV9vcGVuKFJlbGF0aW9uUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9w Z19jbGFzc19yZWxuYW1lc3BhY2UsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCXNjaGVtYWlkKTsKKwlTY2FuS2V5SW5pdCgma2V5WzFdLAorCQkJCUFudW1fcGdfY2xh c3NfcmVsa2luZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVRLAorCQkJCUNo YXJHZXREYXR1bShSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSk7CisKKwlzY2FuID0gdGFibGVf YmVnaW5zY2FuX2NhdGFsb2coY2xhc3NSZWwsIDIsIGtleSk7CisJd2hpbGUgKCh0dXBsZSA9IGhl YXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJeworCQlG b3JtX3BnX2NsYXNzIHJlbEZvcm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsK KworCQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShyZWxGb3JtKSkKKwkJewor CQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsRm9ybS0+ b2lkKTsKKwkJCU9pZAkJCXBhcmVudF9vaWQgPSByZWxGb3JtLT5vaWQ7CisJCQljaGFyCSAgICpw YXJlbnRfbmFtZTsKKworCQkJZm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJCXsK KwkJCQlPaWQJCQlhbmNlc3Rvcl9zY2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9y KTsKKworCQkJCWlmIChhbmNlc3Rvcl9zY2hlbWFpZCA9PSBzY2hlbWFpZCkKKwkJCQkJcGFyZW50 X29pZCA9IGFuY2VzdG9yOworCQkJfQorCisJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwkJCXBh cmVudF9uYW1lID0gZ2V0X3JlbF9uYW1lKHBhcmVudF9vaWQpOworCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ IGVycm1zZygiY2Fubm90IHNldCBwYXJhbWV0ZXIgXCIlc1wiIHRvIHRydWUgZm9yIHB1YmxpY2F0 aW9uIFwiJXNcIiIsCisJCQkJCQkJInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwgcHVibmFt ZSksCisJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaW4gcHVibGljYXRp b24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbiIsCisJCQkJCQkJICAgcGFyZW50X25hbWUp KSk7CisJCX0KKwl9CisKKwl0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNsYXNz UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKiBDaGVjayBpZiBhbnkgZm9yZWlnbiB0YWJs ZSBpcyBhIHBhcnRpdGlvbiB0YWJsZSAqLwordm9pZAorY2hlY2tfZm9yZWlnbl90YWJsZXMoY2hh ciAqcHVibmFtZSkKK3sKKwlSZWxhdGlvbgljbGFzc1JlbDsKKwlTY2FuS2V5RGF0YSBrZXlbMV07 CisJVGFibGVTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWNsYXNzUmVsID0g dGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2Fu S2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfY2xhc3NfcmVsa2luZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVRLAorCQkJCUNoYXJHZXREYXR1bShSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpKTsKKworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhjbGFzc1JlbCwg MSwga2V5KTsKKwl3aGlsZSAoKHR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl7CisJCUZvcm1fcGdfY2xhc3MgcmVsRm9ybSA9IChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCWlmIChyZWxGb3JtLT5yZWxpc3BhcnRp dGlvbikKKwkJeworCQkJT2lkCQkJcGFyZW50X29pZDsKKwkJCWNoYXIJICAgKnBhcmVudF9uYW1l OworCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsRm9y bS0+b2lkKTsKKworCQkJcGFyZW50X29pZCA9IGxsYXN0X29pZChhbmNlc3RvcnMpOworCQkJcGFy ZW50X25hbWUgPSBnZXRfcmVsX25hbWUocGFyZW50X29pZCk7CisKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRlciBcIiVzXCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRp b24gXCIlc1wiIiwKKwkJCQkJCQkicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCBwdWJuYW1l KSwKKwkJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlv biBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uIiwKKwkJCQkJCQkgICBwYXJlbnRfbmFtZSkp KTsKKwkJfQorCX0KKworCXRhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY2xhc3NS ZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9mb3JlaWduY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYwppbmRl eCBjMTRlMDM4ZDU0Li5mNDFhMjRhZWEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9mb3JlaWduY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMK QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3Mu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf Zm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2Vy dmVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3RhYmxlLmgiCkBAIC0xNDIzLDYg KzE0MjQsNTIgQEAgQ3JlYXRlRm9yZWlnblRhYmxlKENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKnN0 bXQsIE9pZCByZWxpZCkKIAogCWZ0cmVsID0gdGFibGVfb3BlbihGb3JlaWduVGFibGVSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCS8qCisJICogQ2hlY2sgaWYgaXQgaXMgYSBmb3Jl aWduIHBhcnRpdGlvbiBhbmQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGlzIG5vdAorCSAqIHB1Ymxp c2hlZCBvciBwdWJsaXNoZWQgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBvcHRpb24g YXMgZmFsc2UuCisJICovCisJaWYgKHN0bXQtPmJhc2UucGFydGJvdW5kICE9IE5VTEwpCisJewor CQlSYW5nZVZhciAgICpyb290ID0gY2FzdE5vZGUoUmFuZ2VWYXIsIGxmaXJzdChsaXN0X2hlYWQo c3RtdC0+YmFzZS5pbmhSZWxhdGlvbnMpKSk7CisJCVJlbGF0aW9uCXJvb3RyZWwgPSB0YWJsZV9v cGVucnYocm9vdCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlpZiAoUmVsYXRpb25HZXRGb3JtKHJv b3RyZWwpLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCXsKKwkJCU9p ZAkJCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2Uocm9vdHJlbCk7CisJCQlMaXN0CSAg ICpwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocm9vdHJlbC0+cmRfaWQpOworCQkJ TGlzdAkgICAqYW5jZXN0b3JzOworCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29p ZChwdWJvaWRzLCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKSk7CisJCQlwdWJvaWRzID0gbGlz dF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1h aWQpKTsKKwkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJvb3RyZWwtPnJk X2lkKTsKKworCQkJZm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJCXsKKwkJCQlw dWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJCQkJIEdl dFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQkJc2NoZW1haWQgPSBnZXRfcmVs X25hbWVzcGFjZShhbmNlc3Rvcik7CisJCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9v aWQocHVib2lkcywKKwkJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQp KTsKKwkJCX0KKwkJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJCQlmb3JlYWNoX29pZChwdWJv aWQsIHB1Ym9pZHMpCisJCQl7CisJCQkJUHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9u KHB1Ym9pZCk7CisKKwkJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJCSBl cnJtc2coImNhbm5vdCBjcmVhdGUgdGFibGUgZm9yZWlnbiBwYXJ0aXRpb24gXCIlc1wiIiwKKwkJ CQkJCQkJCWdldF9yZWxfbmFtZShyZWxpZCkpLAorCQkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlv biB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IiwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJvb3RyZWwp KSkpOworCQkJfQorCQl9CisKKwkJdGFibGVfY2xvc2Uocm9vdHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwl9CisKIAkvKgogCSAqIEZvciBub3cgdGhlIG93bmVyIGNhbm5vdCBiZSBzcGVjaWZpZWQg b24gY3JlYXRlLiBVc2UgZWZmZWN0aXZlIHVzZXIgSUQuCiAJICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDE1MGE3NjhkMTYuLmU3MWQ1NDA4YzcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC04NzYsNiArODc2LDEwIEBAIENyZWF0 ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10KQogCS8qIEFzc29jaWF0ZSBvYmplY3RzIHdpdGggdGhlIHB1YmxpY2F0aW9uLiAqLwogCWlm IChzdG10LT5mb3JfYWxsX3RhYmxlcykKIAl7CisJCS8qIENoZWNrIGlmIGFueSBmb3JlaWduIHRh YmxlIGlzIGEgcGFydCBvZiBwYXJ0aXRpb25lZCB0YWJsZSAqLworCQlpZiAocHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QpCisJCQljaGVja19mb3JlaWduX3RhYmxlcyhzdG10LT5wdWJuYW1lKTsK KwogCQkvKiBJbnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyBy ZWJ1aWx0LiAqLwogCQlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFsbCgpOwogCX0KQEAgLTEwNDEs NiArMTA0NSw0OSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQl9CiAJfQogCisJLyoKKwkgKiBJZiBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyBzZXQgdG8gdHJ1ZSwgY2hlY2sgaWYgdGhlIHB1Ymxp Y2F0aW9uCisJICogYWxyZWFkeSBoYXZlIGFueSBmb3JlaWduIHBhcnRpdGlvbgorCSAqLworCWlm IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiAmJiBwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCkKKwl7CisJCUxpc3QJICAgKnNjaGVtYW9pZHMgPSBOSUw7CisJCUxpc3QJICAgKnJl bGlkcyA9IE5JTDsKKworCQljaGFyCSAgICpwdWJuYW1lID0gc3RtdC0+cHVibmFtZTsKKworCQlp ZiAocHViZm9ybS0+cHViYWxsdGFibGVzKQorCQkJY2hlY2tfZm9yZWlnbl90YWJsZXMocHVibmFt ZSk7CisKKwkJc2NoZW1hb2lkcyA9IEdldFB1YmxpY2F0aW9uU2NoZW1hcyhwdWJmb3JtLT5vaWQp OworCisJCWZvcmVhY2hfb2lkKHNjaGVtYW9pZCwgc2NoZW1hb2lkcykKKwkJCWNoZWNrX2ZvcmVp Z25fdGFibGVzX2luX3NjaGVtYShzY2hlbWFvaWQsIHB1Ym5hbWUpOworCisJCXJlbGlkcyA9IEdl dFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwgUFVCTElDQVRJT05fUEFSVF9ST09U KTsKKworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVsaWRzKQorCQl7CisJCQlIZWFwVHVwbGUJcmVs dHVwOworCQkJRm9ybV9wZ19jbGFzcyByZWxmb3JtOworCisJCQlyZWx0dXAgPSBTZWFyY2hTeXND YWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisJCQlyZWxmb3JtID0gKEZv cm1fcGdfY2xhc3MpIEdFVFNUUlVDVChyZWx0dXApOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocmVs dHVwKTsKKworCQkJaWYgKGNoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUocmVsZm9ybSkp CisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiY2Fubm90IHNldCBwYXJhbWV0ZXIg XCIlc1wiIHRvIHRydWUgZm9yIHB1YmxpY2F0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSJwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCIsIHB1Ym5hbWUpLAorCQkJCQkJIGVycmRldGFpbCgicGFydGl0 aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0 aW9uIiwKKwkJCQkJCQkJICAgZ2V0X3JlbF9uYW1lKHJlbGlkKSkpKTsKKwkJCX0KKwkJfQorCX0K KwogCS8qIEV2ZXJ5dGhpbmcgb2ssIGZvcm0gYSBuZXcgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVl cywgMCwgc2l6ZW9mKHZhbHVlcykpOwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxs cykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA1ODIzZmNlOTM0Li5mY2NjMTA4MmY0 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTk0NDAsNiArMTk0NDAsNTkgQEAgQVRF eGVjQXR0YWNoUGFydGl0aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgUGFydGl0aW9u Q21kICpjbWQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJ IGVycm1zZygiY2Fubm90IGF0dGFjaCB0ZW1wb3JhcnkgcmVsYXRpb24gb2YgYW5vdGhlciBzZXNz aW9uIGFzIHBhcnRpdGlvbiIpKSk7CiAKKwkvKgorCSAqIENoZWNrIGlmIGF0dGFjaHJlbCBpcyBh IGZvcmVpZ24gdGFibGUgb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoCisJICogZm9yZWlnbiBw YXJ0aXRpb24gYW5kIHJlbCBpcyBub3QgcGFydCBvZiBwdWJsaWNhdGlvbiB3aXRoIG9wdGlvbgor CSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGFzIHRydWUuCisJICovCisJaWYgKGF0dGFj aHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSB8fAorCQljaGVj a19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKFJlbGF0aW9uR2V0Rm9ybShhdHRhY2hyZWwpKSkK Kwl7CisJCU9pZAkJCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwkJTGlz dAkgICAqcHVib2lkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbC0+cmRfaWQpOworCQlM aXN0CSAgICphbmNlc3RvcnM7CisJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVs LT5yZF9pZCk7CisJCWNoYXIJICAgKmF0dGFjaHJlbG5hbWUgPSBnZXRfcmVsX25hbWUoYXR0YWNo cmVsLT5yZF9pZCk7CisKKwkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lk cywgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCkpOworCQlwdWJvaWRzID0gbGlzdF9jb25jYXRf dW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJ YW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsLT5yZF9pZCk7CisKKwkJZm9y ZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJeworCQkJcHVib2lkcyA9IGxpc3RfY29u Y2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJCQkJCQkJCQkJIEdldFJlbGF0aW9uUHVibGljYXRp b25zKGFuY2VzdG9yKSk7CisJCQlzY2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9y KTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJ CQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJfQorCisJCWxpc3RfZnJl ZShhbmNlc3RvcnMpOworCisJCWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJeworCQkJ UHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9uKHB1Ym9pZCk7CisKKwkJCWlmIChwdWIt PnB1YnZpYXJvb3QpCisJCQl7CisJCQkJaWYgKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3Qg YXR0YWNoIGZvcmVpZ24gdGFibGUgXCIlc1wiIHRvIHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIiLAor CQkJCQkJCQkJYXR0YWNocmVsbmFtZSwgcmVsbmFtZSksCisJCQkJCQkJIGVycmRldGFpbCgicGFy dGl0aW9uIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAgcmVsbmFtZSkpKTsKKwkJCQllbHNlCisJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQ RSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IGF0dGFjaCB0YWJsZSBcIiVzXCIgd2l0aCBmb3Jl aWduIHBhcnRpdGlvbiB0byBwYXJ0aXRpb24gdGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJCWF0dGFj aHJlbG5hbWUsIHJlbG5hbWUpLAorCQkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBc IiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IiwKKwkJCQkJCQkJCSAgIHJlbG5hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIENo ZWNrIGlmIGF0dGFjaHJlbCBoYXMgYW55IGlkZW50aXR5IGNvbHVtbnMgb3IgYW55IGNvbHVtbnMg dGhhdCBhcmVuJ3QKIAkgKiBpbiB0aGUgcGFyZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCmluZGV4IDQ4YzdkMWE4NjEuLmIxYmI4NjRkMmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNhdGFsb2cvZ2Vu YmtpLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fZC5oIgkv KiBJV1lVIHByYWdtYTogZXhwb3J0ICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MSw0 ICsxOTIsMTAgQEAgZXh0ZXJuIEJpdG1hcHNldCAqcHViX2NvbGxpc3RfdG9fYml0bWFwc2V0KEJp dG1hcHNldCAqY29sdW1ucywgRGF0dW0gcHViY29scywKIGV4dGVybiBCaXRtYXBzZXQgKnB1Yl9m b3JtX2NvbHNfbWFwKFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJUHVibGlzaEdlbmNvbHNU eXBlIGluY2x1ZGVfZ2VuY29sc190eXBlKTsKIAorZXh0ZXJuIGJvb2wgY2hlY2tfcGFydHJlbF9o YXNfZm9yZWlnbl90YWJsZShGb3JtX3BnX2NsYXNzIHJlbGZvcm0pOworCitleHRlcm4gdm9pZCBj aGVja19mb3JlaWduX3RhYmxlc19pbl9zY2hlbWEoT2lkIHNjaGVtYWlkLCBjaGFyICpwdWJuYW1l KTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZm9yZWlnbl90YWJsZXMoY2hhciAqcHVibmFtZSk7CisK ICNlbmRpZgkJCQkJCQkvKiBQR19QVUJMSUNBVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDRkZTk2YzA0ZjkuLjZhMGMyNDViZDYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0xOTI0LDYgKzE5MjQs OTUgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIxOwogRFJPUCBQVUJMSUNBVElPTiBwdWIyOwogRFJP UCBUQUJMRSBnZW5jb2xzOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gVGVzdCB3 aGVuIGZvcmVpZ24gdGFibGUgaXMgYSBwYXJ0aXRpb24gb2YgYSBwYXJ0aXRpb25lZCB0YWJsZSBv biB3aGljaAorLS0gcHVibGljYXRpb24gaXMgY3JlYXRlZAorU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSAnRVJST1InOworQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OworQ1JF QVRFIFNFUlZFUiBmZHdfc2VydmVyIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OworQ1JF QVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRBQkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJUSVRJ T04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9GIHNj aDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2NoMy5w YXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBUQUJM RSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1 KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRB Q0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOworLS0g Q2FuJ3QgY3JlYXRlIHB1YmxpY2F0aW9ucyB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSwgaWYgdGFibGUKKy0tIGhhcyBhIGZvcmVpZ24gcGFydGl0aW9uCitDUkVBVEUgUFVC TElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbiBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcGFyYW1ldGVyICJwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gInB1YjEiCitERVRBSUw6ICBw YXJ0aXRpb24gdGFibGUgInRtYWluIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24g cGFydGl0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBz Y2gzIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNl dCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiB0byB0cnVlIGZvciBwdWJs aWNhdGlvbiAicHViMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGluIHB1Ymxp Y2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiBw dWIxIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0VS Uk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiB0 byB0cnVlIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAi dG1haW4iIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24KKy0tIFRl c3Qgd2hlbiBhIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBhIHBhcnRp dGlvbiBpcyBhdHRhY2hlZAorLS0gdG8gcGFydGl0aW9uZWQgdGFibGUgd2hpY2ggaXMgYWxyZWFk eSBwdWJsaXNoZWQKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gREVUQUNIIFBBUlRJVElPTiBzY2gz LnBhcnQyOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxFIHNjaDMudG1haW4gV0lU SCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBB VFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOwor RVJST1I6ICBjYW5ub3QgYXR0YWNoIHRhYmxlICJwYXJ0MiIgd2l0aCBmb3JlaWduIHBhcnRpdGlv biB0byBwYXJ0aXRpb24gdGFibGUgInRtYWluIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0 bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 CistLSBDYW4ndCBjcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVibGlzaGVkIHRhYmxlIHdp dGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04g VEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJP TSAoMTApIFRPICgxNSkgU0VSVkVSIGZkd19zZXJ2ZXI7CitFUlJPUjogIGNhbm5vdCBjcmVhdGUg dGFibGUgZm9yZWlnbiBwYXJ0aXRpb24gInBhcnQzXzEiCitERVRBSUw6ICBwYXJ0aXRpb24gdGFi bGUgInRtYWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QKKy0tIENhbid0IGF0dGFjaCBmb3JlaWduIHBhcnRpdGlvbiB0byBwdWJsaXNoZWQgdGFi bGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUgRk9S RUlHTiBUQUJMRSBzY2gzLnBhcnQzXzIoaWQgaW50KSBTRVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVS IFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVF UyBGUk9NICgxNSkgVE8gKDIwKTsKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCBmb3JlaWduIHRhYmxl ICJwYXJ0M18yIiB0byBwYXJ0aXRpb24gdGFibGUgInRtYWluIgorREVUQUlMOiAgcGFydGl0aW9u IHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290CitDUkVBVEUgU0NIRU1BIHNjaDQ7CitDUkVBVEUgVEFCTEUgc2NoNC50bWFpbihp ZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CistLSBwdWJsaWNhdGlvbiBjcmVhdGVkIHdp dGggRk9SIFRBQkxFUyBJTiBTQ0hFTUEKK0RST1AgUFVCTElDQVRJT04gcHViMTsKK0NSRUFURSBQ VUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDQgV0lUSCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpOworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9m IHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRy dWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoNC50 bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworRVJS T1I6ICBjYW5ub3QgY3JlYXRlIHRhYmxlIGZvcmVpZ24gcGFydGl0aW9uICJwYXJ0M18xIgorREVU QUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRp b24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZQorQUxURVIgVEFCTEUgc2NoNC50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFy dDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworRVJST1I6ICBjYW5ub3QgYXR0YWNo IGZvcmVpZ24gdGFibGUgInBhcnQzXzIiIHRvIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iCitERVRB SUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QKK0RST1AgUFVCTElDQVRJT04gcHViMTsKKy0tIFRlc3Qg d2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCistLSBGb3JlaWduIHBhcnRp dGlvbnMgYXJlIHNraXBwZWQgYnkgZGVmYXVsdAorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9S IFRBQkxFIHNjaDMudG1haW47CitDUkVBVEUgUFVCTElDQVRJT04gcHViMiBGT1IgVEFCTEVTIElO IFNDSEVNQSBzY2gzOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjMgRk9SIEFMTCBUQUJMRVM7Cist LSBDcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNj aDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBU TyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworLS0gQXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRv IHB1Ymxpc2hlZCB0YWJsZQorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQor QUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1Ig VkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworLS0gQ2hlY2sgdGhlIHB1Ymxpc2hlZCB0YWJsZXMK K1NFTEVDVCBwdWJuYW1lLCB0YWJsZW5hbWUgRlJPTSBwZ19wdWJsaWNhdGlvbl90YWJsZXMgV0hF UkUgc2NoZW1hbmFtZSBpbiAoJ3NjaDMnLCAnc2NoNCcpIE9SREVSIEJZIHB1Ym5hbWUsIHRhYmxl bmFtZTsKKyBwdWJuYW1lIHwgdGFibGVuYW1lIAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgcHVi MSAgICB8IHBhcnQxCisgcHViMiAgICB8IHBhcnQxCisgcHViMyAgICB8IHBhcnQxCisoMyByb3dz KQorCistLSBDYW4ndCBhbHRlciBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCB0byB0cnVlLCBp ZiBwdWJsaWNhdGlvbiBhbHJlYWR5IGhhdmUKKy0tIGZvcmVpZ24gcGFydGl0aW9uCitBTFRFUiBQ VUJMSUNBVElPTiBwdWIxIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6 ICBjYW5ub3Qgc2V0IHBhcmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvIHRy dWUgZm9yIHB1YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFp biIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbgorRFJPUCBQVUJM SUNBVElPTiBwdWIxOworRFJPUCBQVUJMSUNBVElPTiBwdWIyOworRFJPUCBQVUJMSUNBVElPTiBw dWIzOworRFJPUCBTQ0hFTUEgc2NoMyBDQVNDQURFOworRFJPUCBTQ0hFTUEgc2NoNCBDQVNDQURF OworRFJPUCBTRVJWRVIgZmR3X3NlcnZlcjsKK0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVz dF9mZHc7CiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9u LnNxbAppbmRleCA2ODAwMWRlNDAwLi40OWM5ZDk4YjY2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVi bGljYXRpb24uc3FsCkBAIC0xMjIzLDYgKzEyMjMsODcgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIy OwogRFJPUCBUQUJMRSBnZW5jb2xzOwogCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK Ky0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9u ZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0 X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0 X2ZkdzsKKworQ1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRBQkxFIHNjaDMudG1haW4oaWQg aW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDEgUEFS VElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CitDUkVBVEUg VEFCTEUgc2NoMy5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUg Rk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDMucGFydDIgRk9SIFZB TFVFUyBGUk9NICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFCTEUgc2No My50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBU TyAoMTApOworCistLSBDYW4ndCBjcmVhdGUgcHVibGljYXRpb25zIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSB0cnVlLCBpZiB0YWJsZQorLS0gaGFzIGEgZm9yZWlnbiBwYXJ0aXRp b24KK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBU QUJMRVMgSU4gU0NIRU1BIHNjaDMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwor Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QpOworCistLSBUZXN0IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRo IGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRpdGlv bmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gzLnRt YWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsK K0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBW QUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKKworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0 aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Yg c2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVy OworCistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxl IHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJ R04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGludCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBU QUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMg RlJPTSAoMTUpIFRPICgyMCk7CisKK0NSRUFURSBTQ0hFTUEgc2NoNDsKK0NSRUFURSBUQUJMRSBz Y2g0LnRtYWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKworLS0gcHVibGljYXRp b24gY3JlYXRlZCB3aXRoIEZPUiBUQUJMRVMgSU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9OIHB1 YjE7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0IFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVp Z24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJU SVRJT04gT0Ygc2NoNC50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBm ZHdfc2VydmVyOworCistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlz aGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQUxU RVIgVEFCTEUgc2NoNC50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFM VUVTIEZST00gKDE1KSBUTyAoMjApOworRFJPUCBQVUJMSUNBVElPTiBwdWIxOworCistLSBUZXN0 IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQorLS0gRm9yZWlnbiBwYXJ0 aXRpb25zIGFyZSBza2lwcGVkIGJ5IGRlZmF1bHQKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZP UiBUQUJMRSBzY2gzLnRtYWluOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFUyBJ TiBTQ0hFTUEgc2NoMzsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIzIEZPUiBBTEwgVEFCTEVTOwor CistLSBDcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0t IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0NSRUFURSBGT1JFSUdOIFRBQkxF IHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEw KSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBBdHRhY2ggZm9yZWlnbiBwYXJ0aXRp b24gdG8gcHVibGlzaGVkIHRhYmxlCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlCitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18y IEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CisKKy0tIENoZWNrIHRoZSBwdWJsaXNoZWQg dGFibGVzCitTRUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZST00gcGdfcHVibGljYXRpb25fdGFi bGVzIFdIRVJFIHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBwdWJuYW1l LCB0YWJsZW5hbWU7CisKKy0tIENhbid0IGFsdGVyIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IHRvIHRydWUsIGlmIHB1YmxpY2F0aW9uIGFscmVhZHkgaGF2ZQorLS0gZm9yZWlnbiBwYXJ0aXRp b24KK0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCk7CisKK0RST1AgUFVCTElDQVRJT04gcHViMTsKK0RST1AgUFVCTElDQVRJT04gcHViMjsKK0RS T1AgUFVCTElDQVRJT04gcHViMzsKK0RST1AgU0NIRU1BIHNjaDMgQ0FTQ0FERTsKK0RST1AgU0NI RU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0VSVkVSIGZkd19zZXJ2ZXI7CitEUk9QIEZPUkVJR04g REFUQSBXUkFQUEVSIHRlc3RfZmR3OworCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBE Uk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKLS0gCjIuMzQu MQoK --000000000000f20c08062ddc1411--