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 1vLTy3-0015EH-0X for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 22:14:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLTx1-009AhY-0Y for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Nov 2025 22:13:27 +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.96) (envelope-from ) id 1vLTx0-009AhQ-23 for pgsql-hackers@lists.postgresql.org; Tue, 18 Nov 2025 22:13:27 +0000 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLTwx-000FN6-2o for pgsql-hackers@postgresql.org; Tue, 18 Nov 2025 22:13:26 +0000 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-bc0e89640b9so4118126a12.1 for ; Tue, 18 Nov 2025 14:13:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763504001; x=1764108801; darn=postgresql.org; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=M+sQ3f4ExlpXg6DTAIVMZfDmufUE4A5Xrff0nETEO6U=; b=dnOhZ4mTPRxxkXVAWdXXB/1lAYknzC+kWLmtBNDzHEvYyMKHHb6Fg4ZVTDKmH9/zy6 fvFu2EjDKAjw+tXbi+6sGxu17FPzR5kxVd6GRMqNOcnSyG/QwwNGa5V/4h2xf0l4HeZg U4nzGF9MRHWauemyIV7P83G1BvkklYCqkXn4cLU//OxCOAcZ7DsPSwxDfu1vZFvsQlMS phbjclWg7bxJ2eTRg8Q9VL7USUlmavOXoG8ERSY8WiOvzNGTDL0aWghDa9NKcbOmc8bJ 22bTp20UxipqBGJxQvS/5UeHEC3o7gPd/InEHn7kLGMkLP/vkERdlea8LXLb8xJOYZOT LFGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763504001; x=1764108801; h=in-reply-to:references:cc:to:from:subject:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=M+sQ3f4ExlpXg6DTAIVMZfDmufUE4A5Xrff0nETEO6U=; b=RRHBLe77UkXKze90liqHRI2md3Xx6mD/WXHBhYiToKyvPmEI1hYjf5t7E8ZO2gG+jC eAaTTs9uHNU7HisBaZv6hM6H26n8ZbVRzaToLfHlH3CMnH2oOwj8zDJizA79GiepXJXH VlS+LCNNi6aX33sIv7u2/VGnDcI8U/z0SIhZHTjtd/Q97d2TkHSjyITYwBckNffYYC+0 OGaUGFDx3XzpLd/dK9vMDhrLSvBpDb0vENbV6dTjFNTAO2kAvtBtw/j5fxVbqM6BJ6Zx fZIzo86G9ru7oreflkWrxMoQPQMZ5stnDE8M1sgMPZeaRVaRORZx2Pt54k4ZaYMJYpZu uYYA== X-Forwarded-Encrypted: i=1; AJvYcCW24EnFnaSI3CIe+Ypyy2JzUDsWOtuXlNBdUJBioEDPfxMB1NYAFdbovo9d6g5lezGLCLOVoC/7tCXih66B@postgresql.org X-Gm-Message-State: AOJu0Yy0twZhzIdU5V40fxZxxnb3Ig4oui/7JsnBy633SQnH+EW8w0gE 0LrQreEEKt5N/NxY0bO8RGvFwJWRX8wXJLTYJBF3H5B8lHZaIA81mbUI X-Gm-Gg: ASbGncuMXFZjz3ozqgOiHY1dHiSgzqlIhAy2KBIFkwecWQZvUHq7vE/u7xxkTSLaGWP 8rl3FWH3A6tYZxrsposyaTf6dWgSi45xl9ppcmyPO2F8hphPNP6jAwkRdyMUPZIQWEKPGarJ0of TkfKTHutEXJ7ysbzLdgZkUHUJsArIJkKUp2oH5UyQ/7MAQ8Iq19JMTsz1lz/FPZqkIFhGDH+W4p sZjjwmcho4kmKDjf5iaMzV6kkJpOO2THiwqBQSAUzD1kIB+bQhKeVSMP4ESdoVm6WYiUk2sGdhE ojM6BUGIAuJE80dDRALZmgMuYoSLRytKn3ke315H7Rgp8/+w6DAaTQPGyPjdQV/wqCgsCk5nu2u 6BszFdy95Uq/UgtigxjooKE9ZEiC4PRxQ1W7SBKqJvZakSOt00rEwKjEf8jGc0hun15oQVfJIQB rm9jJlqrsdnfrNwlz6h3pjcWrJWvep40Hhrw== X-Google-Smtp-Source: AGHT+IH0RDbYygnrSJPNDKnwmCRdFNRuF1YRqQhtcPAFoZ9YrVgfL+c9mGoVnucUAKGXapUVOLrgBg== X-Received: by 2002:a05:7022:7e88:b0:11b:9386:a37e with SMTP id a92af1059eb24-11b9386a51bmr3608328c88.45.1763504000849; Tue, 18 Nov 2025 14:13:20 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:7cc7:10da:a3ea:8e51]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2a6d2570e69sm6496740eec.2.2025.11.18.14.13.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 18 Nov 2025 14:13:20 -0800 (PST) Content-Type: multipart/mixed; boundary=467300f00731441b9077350599f3e26bfb6cd736d6329a75ef0e275aa956 Mime-Version: 1.0 Date: Tue, 18 Nov 2025 19:13:17 -0300 Message-Id: Subject: Re: postgres_fdw: Use COPY to speed up batch inserts From: "Matheus Alcantara" To: "Masahiko Sawada" Cc: "Andrew Dunstan" , "jian he" , "Tomas Vondra" , X-Mailer: aerc 0.21.0 References: <5c52f4c7-74fa-4594-8378-53fd49f39329@dunslane.net> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --467300f00731441b9077350599f3e26bfb6cd736d6329a75ef0e275aa956 Content-Type: multipart/alternative; boundary=c75bc02979c017bf63d7ed59739e054eed40ae9a6642506f2db491786062 --c75bc02979c017bf63d7ed59739e054eed40ae9a6642506f2db491786062 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 On Mon Nov 17, 2025 at 11:03 PM -03, Masahiko Sawada wrote: > IIUC the performance regression occurs when users insert many rows > into a foreign table with batch_size =3D 1 and use_copy_for_insert =3D > true (tps: 133.451518 vs. 132.644801 vs. 88.998804). Since batch_size > defaults to 1, users might experience performance issues if they > enable use_copy_for_insert without adjusting the batch_size. I'm > worried that users could easily find themselves in this situation. > Yes, you are correct. The 0002 patch aims to reduce this issue by using the COPY command only if the use_copy_for_insert =3D true and if batch_size > 1 which will reduce the cases but the regression can still happen if the user send a single row to insert into a foreign table. Inserting a single row into a foreign table using COPY is a bit slower compared with using INSERT. See the followinw pgbench results: (Single row using INSERT) tps =3D 19814.535944 (Single row using COPY) tps =3D 16562.324025 I think that the documentation should mention that just changing use_copy_for_insert without also changing the batch_size option could cause performance regression. > One possible solution would be to introduce a threshold, like > copy_min_row, which would specify the minimum number of rows needed > before switching to the COPY command. However, this would require > coordination with batch_size since having copy_min_row lower than > batch_size wouldn't make sense. > The only problem that I see with this approach is that it would make EXPLAIN(VERBOSE) and EXPLAIN(ANALYZE, VERBOSE) remote SQL output different. The user will never know with EXPLAIN (without analyze) if the COPY will be used or not. Is this a problem or I'm being to much conservative? I think that we can do such coordination on postgres_fdw_validator(). Also if we decide to go with this idea it seems to me that we would have to much table options to configure to enable the COPY opitimization, we would need "copy_min_row", "batch_size" and "use_copy_for_insert". What about decide to use the COPY command if use_copy_for_insert =3D true and the number of rows being inserted is >=3D batch_size?=20 > Alternatively, when users are using batch insertion (batch_size > 0), > we could use the COPY command only for full batches and fall back to > INSERT for partial ones. > IIUC in this case we would sent COPY and INSERT statements to the foreign server for the same execution, for example, if batch_size =3D 100 and the user try insert 105 rows into the foreign table we will send a COPY statement with 100 rows and then an INSERT with the 5 rows remaining? If that's the case which SQL we should show on Remote SQL from EXPLAIN(ANALYZE, VERBOSE) output? I think that this can cause some confusion. > BTW I noticed that use_copy_for_insert option doesn't work with COPY > FROM command. I got the following error with use_copy_for_insert=3Dtrue > and batch_size=3D3: > > postgres(1:2546195)=3D# copy t from '/tmp/a.csv'; -- table 't' is a forei= gn table. > ERROR: there is no parameter $1 > CONTEXT: remote SQL command: INSERT INTO public.t(c) VALUES ($1) > COPY t > Thanks for testing this case. The problem was that I as checking if the COPY can be used inside create_foreign_modify() that is called by BeginForeignInsert and also BeginForeignModify() and the COPY can be used only by the foreign modify path. To fix this issue I've moved the check to postgresBeginForeignModify(). I'm attaching v6 with the following changes: - I've squashed 0002 into 0001, so now the COPY will only be used if use_copy_for_insert =3D true and if batch_size > 1 - Fix for the bug of COPY FROM a foreign table - New test case for the COPY bug -- Matheus Alcantara EDB: http://www.enterprisedb.com --c75bc02979c017bf63d7ed59739e054eed40ae9a6642506f2db491786062-- --467300f00731441b9077350599f3e26bfb6cd736d6329a75ef0e275aa956 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v6-0001-postgres_fdw-Enable-the-use-of-COPY-to-speed-up-i.patch Content-Type: text/plain; charset=utf-8; name=v6-0001-postgres_fdw-Enable-the-use-of-COPY-to-speed-up-i.patch RnJvbSBkZDI5ZThiM2IwMDkyYTRiYTU0Y2VmOWIwMDg5MmY1NzdkMjQ2MWRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IEZyaSwgMTAgT2N0IDIwMjUgMTY6MDc6MDggLTAzMDAKU3ViamVjdDogW1BBVENIIHY2XSBw b3N0Z3Jlc19mZHc6IEVuYWJsZSB0aGUgdXNlIG9mIENPUFkgdG8gc3BlZWQgdXAgaW5zZXJ0cwoK LS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMgICAgICAgICAgICAgICAgfCAgMzAg KysrCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAxNzAg KysrKysrKysrKysrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyAgICAgICAgICAg ICAgICAgfCAgIDMgKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAgICAg ICAgIHwgMTk4ICsrKysrKysrKysrKysrKysrLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmggICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0 Z3Jlc19mZHcuc3FsICAgICB8ICA3OSArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDQ2NiBpbnNl cnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVz X2Zkdy9kZXBhcnNlLmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKaW5kZXggZjJm YjAwNTE4NDMuLjFjZGYxZDhjYzhkIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9k ZXBhcnNlLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCkBAIC0yMjM2LDYg KzIyMzYsMzYgQEAgcmVidWlsZEluc2VydFNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs LAogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBvcmlnX3F1ZXJ5ICsgdmFsdWVzX2VuZF9s ZW4pOwogfQogCisvKgorICogIEJ1aWxkIGEgQ09QWSBGUk9NIFNURElOIHN0YXRlbWVudCB1c2lu ZyB0aGUgVEVYVCBmb3JtYXQKKyAqLwordm9pZAorZGVwYXJzZUNvcHlTcWwoU3RyaW5nSW5mbyBi dWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqdGFyZ2V0X2F0dHJzKQoreworCVR1cGxlRGVzYwl0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiQ09QWSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwp OworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiKCIpOworCisJZm9yZWFjaF9pbnQoYXR0bnVtLCB0 YXJnZXRfYXR0cnMpCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKworCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkKQorCQkJ Y29udGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiLCAiKTsKKworCQlmaXJzdCA9IGZhbHNlOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0ci0+YXR0bmFtZSkpKTsKKwl9CisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIpIEZST00gU1RESU4iKTsKK30KKwogLyoKICAqIGRl cGFyc2UgcmVtb3RlIFVQREFURSBzdGF0ZW1lbnQKICAqCmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCBjZDI4MTI2MDQ5ZC4uMDY0OGE5NjQ1 MjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91 dApAQCAtNTAsNiArNTAsMTggQEAgQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDQiICgKIAljMyB0ZXh0 LAogCUNPTlNUUkFJTlQgdDRfcGtleSBQUklNQVJZIEtFWSAoYzEpCiApOworQ1JFQVRFIFRBQkxF ICJTIDEiLiJUIDUiKAorICAgIHggaW50CispOworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDYiKAor ICAgIGlkIGludCBub3QgbnVsbCwKKyAgICBub3RlIHRleHQsCisgICAgdmFsdWUgaW50IE5PVCBO VUxMCispOworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDciKAorICAgIGlkIGludCwKKyAgICB0IHRl eHQKKyk7CiAtLSBEaXNhYmxlIGF1dG92YWN1dW0gZm9yIHRoZXNlIHRhYmxlcyB0byBhdm9pZCB1 bmV4cGVjdGVkIGVmZmVjdHMgb2YgdGhhdAogQUxURVIgVEFCTEUgIlMgMSIuIlQgMSIgU0VUIChh dXRvdmFjdXVtX2VuYWJsZWQgPSAnZmFsc2UnKTsKIEFMVEVSIFRBQkxFICJTIDEiLiJUIDIiIFNF VCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CkBAIC0xMzIsNiArMTQ0LDI0IEBAIENS RUFURSBGT1JFSUdOIFRBQkxFIGZ0NyAoCiAJYzIgaW50IE5PVCBOVUxMLAogCWMzIHRleHQKICkg U0VSVkVSIGxvb3BiYWNrMyBPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAn VCA0Jyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDggKAorICAgIHggaW50CispCitTRVJWRVIg bG9vcGJhY2sKK09QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDUnLCB1 c2VfY29weV9mb3JfaW5zZXJ0ICd0cnVlJywgYmF0Y2hfc2l6ZSAnMTAnKTsKK0NSRUFURSBGT1JF SUdOIFRBQkxFIGZ0OSAoCisgICAgaWQgaW50IG5vdCBudWxsLAorICAgIG5vdGUgdGV4dCwKKyAg ICB2YWx1ZSBpbnQgTk9UIE5VTEwKKykKK1NFUlZFUiBsb29wYmFjaworT1BUSU9OUyAoc2NoZW1h X25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNicsIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUn LCBiYXRjaF9zaXplICcxMCcpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQxMCAoCisgICAgaWQg aW50LAorICAgIHQgdGV4dAorKQorU0VSVkVSIGxvb3BiYWNrCitPUFRJT05TIChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJh dGNoX3NpemUgJzEwJyk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0cyBmb3IgdmFsaWRhdG9yCiAt LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CkBAIC0yMDUsMTYgKzIzNSwxOSBAQCBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0 MiBPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCAxJyk7CiBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzEgT1BUSU9OUyAoY29sdW1uX25hbWUgJ0Mg MScpOwogQUxURVIgRk9SRUlHTiBUQUJMRSBmdDIgQUxURVIgQ09MVU1OIGMxIE9QVElPTlMgKGNv bHVtbl9uYW1lICdDIDEnKTsKIFxkZXQrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIGZvcmVpZ24gdGFibGVzCi0gU2NoZW1hIHwgVGFibGUgfCAgU2VydmVyICAgfCAgICAg ICAgICAgICAgRkRXIG9wdGlvbnMgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gCi0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tCi0gcHVibGljIHwgZnQxICAgfCBsb29wYmFjayAgfCAoc2NoZW1h X25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgMScpIHwgCi0gcHVibGljIHwgZnQyICAgfCBsb29w YmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgMScpIHwgCi0gcHVibGlj IHwgZnQ0ICAgfCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1Qg MycpIHwgCi0gcHVibGljIHwgZnQ1ICAgfCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScs IHRhYmxlX25hbWUgJ1QgNCcpIHwgCi0gcHVibGljIHwgZnQ2ICAgfCBsb29wYmFjazIgfCAoc2No ZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNCcpIHwgCi0gcHVibGljIHwgZnQ3ICAgfCBs b29wYmFjazMgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNCcpIHwgCi0oNiBy b3dzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKKyBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2ZXIgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRXIG9wdGlvbnMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBw dWJsaWMgfCBmdDEgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFt ZSAnVCAxJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAK KyBwdWJsaWMgfCBmdDEwICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVf bmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJhdGNoX3NpemUgJzEwJykg fCAKKyBwdWJsaWMgfCBmdDIgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFi bGVfbmFtZSAnVCAxJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAKKyBwdWJsaWMgfCBmdDQgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywg dGFibGVfbmFtZSAnVCAzJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAKKyBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAx JywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDYgICB8IGxvb3BiYWNrMiB8IChzY2hlbWFfbmFtZSAn UyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDcgICB8IGxvb3BiYWNrMyB8IChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDggICB8IGxvb3BiYWNrICB8IChzY2hlbWFf bmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA1JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScs IGJhdGNoX3NpemUgJzEwJykgfCAKKyBwdWJsaWMgfCBmdDkgICB8IGxvb3BiYWNrICB8IChzY2hl bWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1 ZScsIGJhdGNoX3NpemUgJzEwJykgfCAKKyg5IHJvd3MpCiAKIC0tIFRlc3QgdGhhdCBhbHRlcmF0 aW9uIG9mIHNlcnZlciBvcHRpb25zIGNhdXNlcyByZWNvbm5lY3Rpb24KIC0tIFJlbW90ZSdzIGVy cm9ycyBtaWdodCBiZSBub24tRW5nbGlzaCwgc28gaGlkZSB0aGVtIHRvIGVuc3VyZSBzdGFibGUg cmVzdWx0cwpAQCAtMTI2NjUsNiArMTI2OTgsMTIzIEBAIEFOQUxZWkUgYW5hbHl6ZV9mdGFibGU7 CiBEUk9QIEZPUkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGU7CiBEUk9QIFRBQkxFIGFuYWx5emVf dGFibGU7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CistLSB0ZXN0IGZvciBDT1BZIHVzYWdlIHRvIHBlcmZvcm0g SU5TRVJUJ3MKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3QgdGhhdCB0YXJnZXQgYXR0ciBpcyBjb3Jy ZWN0bHkgdXNlZCB0byBidWlsZCB0aGUgQ09QWSBjb21tYW5kCitBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0OCBEUk9QIENPTFVNTiB4OworQUxURVIgRk9SRUlHTiBUQUJMRSBmdDggYWRkIENPTFVNTiB4 IGludDsKK0VYUExBSU4oQU5BTFlaRSwgVkVSQk9TRSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwg QlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpCitJTlNFUlQgSU5UTyBmdDggU0VMRUNUICogRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEluc2VydCBvbiBwdWJsaWMuZnQ4IChhY3R1YWwgcm93cz0w LjAwIGxvb3BzPTEpCisgICBSZW1vdGUgU1FMOiBDT1BZICJTIDEiLiJUIDUiKHgpIEZST00gU1RE SU4KKyAgIEJhdGNoIFNpemU6IDEwCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcyBpIChhY3R1YWwgcm93cz0xMC4wMCBsb29wcz0xKQorICAgICAgICAg T3V0cHV0OiBOVUxMOjppbnRlZ2VyLCBpLmkKKyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVy YXRlX3NlcmllcygxLCAxMCkKKyg2IHJvd3MpCisKK1NFTEVDVCAqIEZST00gZnQ4OworIHggIAor LS0tLQorICAxCisgIDIKKyAgMworICA0CisgIDUKKyAgNgorICA3CisgIDgKKyAgOQorIDEwCiso MTAgcm93cykKKworLS0gVGVzdCBvdXRlciBvZiBvcmRlciBjb2x1bW5zCitFWFBMQUlOKEFOQUxZ WkUsIFZFUkJPU0UsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIEJVRkZFUlMgT0ZGLCBUSU1JTkcg T0ZGKSBJTlNFUlQgSU5UTyBmdDkgKGlkLCB2YWx1ZSwgbm90ZSkKK1NFTEVDVCBnLAorICAgICAg IGcgKiAyLAorICAgICAgICdiYXRjaCBpbnNlcnQgdGVzdCBkYXRhJyB8fCBnCitGUk9NIGdlbmVy YXRlX3NlcmllcygxLCAyMCkgZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgSW5zZXJ0IG9uIHB1YmxpYy5mdDkgKGFjdHVhbCByb3dzPTAuMDAg bG9vcHM9MSkKKyAgIFJlbW90ZSBTUUw6IENPUFkgIlMgMSIuIlQgNiIoaWQsIG5vdGUsIHZhbHVl KSBGUk9NIFNURElOCisgICBCYXRjaCBTaXplOiAxMAorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24g cGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgZyAoYWN0dWFsIHJvd3M9MjAuMDAgbG9vcHM9MSkK KyAgICAgICAgIE91dHB1dDogZy5nLCAoJ2JhdGNoIGluc2VydCB0ZXN0IGRhdGEnOjp0ZXh0IHx8 IChnLmcpOjp0ZXh0KSwgKGcuZyAqIDIpCisgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjApCisoNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGZ0OTsKKyBpZCB8ICAg ICAgICAgICBub3RlICAgICAgICAgICB8IHZhbHVlIAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tCisgIDEgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMSAgfCAgICAgMgor ICAyIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTIgIHwgICAgIDQKKyAgMyB8IGJhdGNoIGluc2Vy dCB0ZXN0IGRhdGEzICB8ICAgICA2CisgIDQgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhNCAgfCAg ICAgOAorICA1IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTUgIHwgICAgMTAKKyAgNiB8IGJhdGNo IGluc2VydCB0ZXN0IGRhdGE2ICB8ICAgIDEyCisgIDcgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRh NyAgfCAgICAxNAorICA4IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTggIHwgICAgMTYKKyAgOSB8 IGJhdGNoIGluc2VydCB0ZXN0IGRhdGE5ICB8ICAgIDE4CisgMTAgfCBiYXRjaCBpbnNlcnQgdGVz dCBkYXRhMTAgfCAgICAyMAorIDExIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTExIHwgICAgMjIK KyAxMiB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExMiB8ICAgIDI0CisgMTMgfCBiYXRjaCBpbnNl cnQgdGVzdCBkYXRhMTMgfCAgICAyNgorIDE0IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTE0IHwg ICAgMjgKKyAxNSB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExNSB8ICAgIDMwCisgMTYgfCBiYXRj aCBpbnNlcnQgdGVzdCBkYXRhMTYgfCAgICAzMgorIDE3IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0 YTE3IHwgICAgMzQKKyAxOCB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExOCB8ICAgIDM2CisgMTkg fCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMTkgfCAgICAzOAorIDIwIHwgYmF0Y2ggaW5zZXJ0IHRl c3QgZGF0YTIwIHwgICAgNDAKKygyMCByb3dzKQorCistLSBUZXN0IGJ1ZmZlciBsaW1pdCBvZiBj b3B5IGRhdGEgb24gQ09QWUJVRlNJWgorSU5TRVJUIElOVE8gZnQxMCAoaWQsIHQpCitTRUxFQ1Qg cywgcmVwZWF0KG1kNShzOjp0ZXh0KSwgMTAwMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEwMCwg MTAzKSBzOworU0VMRUNUIENPVU5UKCopIEZST00gZnQxMDsKKyBjb3VudCAKKy0tLS0tLS0KKyAg ICAgNAorKDEgcm93KQorCistLSBEaXNhYmxlIHRoZSB1c2VfY29weV9mb3JfaW5zZXJ0IHRhYmxl IG9wdGlvbiBhbmQgY2hlY2sgdGhhdCB0aGUgSU5TRVJUIGlzCistLSB1c2VkCitBTFRFUiBGT1JF SUdOIFRBQkxFIGZ0OCBPUFRJT05TKERST1AgdXNlX2NvcHlfZm9yX2luc2VydCk7CitFWFBMQUlO KFZFUkJPU0UsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIEJVRkZFUlMgT0ZGLCBUSU1JTkcgT0ZG KQorSU5TRVJUIElOVE8gZnQ4IFZBTFVFUyAoMTApOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24gcHVibGljLmZ0OAorICAg UmVtb3RlIFNRTDogSU5TRVJUIElOVE8gIlMgMSIuIlQgNSIoeCkgVkFMVUVTICgkMSkKKyAgIEJh dGNoIFNpemU6IDEwCisgICAtPiAgUmVzdWx0CisgICAgICAgICBPdXRwdXQ6IE5VTEw6OmludGVn ZXIsIDEwCisoNSByb3dzKQorCistLSBFbmFibGUgdGhlIHVzZV9jb3B5X2Zvcl9pbnNlcnQgZm9y IHRoZSBmb3JlaWduIHNlcnZlciBhbmQgY2hlY2sgdGhhdCB0aGUKKy0tIENPUFkgaXMgdXNlZAor QUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMoQUREIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3Ry dWUnKTsKK0VYUExBSU4oVkVSQk9TRSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBP RkYsIFRJTUlORyBPRkYpCitJTlNFUlQgSU5UTyBmdDggVkFMVUVTICgyMCk7CisgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5zZXJ0IG9uIHB1YmxpYy5mdDgKKyAgIFJl bW90ZSBTUUw6IENPUFkgIlMgMSIuIlQgNSIoeCkgRlJPTSBTVERJTgorICAgQmF0Y2ggU2l6ZTog MTAKKyAgIC0+ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogTlVMTDo6aW50ZWdlciwgMjAKKyg1 IHJvd3MpCisKKy0tIENoZWNrIHRoYXQgQ09QWSB3b3JrIGNvcnJlY3RseSBmb3IgYSBmb3JlaWdu IHRhYmxlIHRoYXQgaGFzCistLSB1c2VfY29weV9mb3JfaW5zZXJ0IGVuYWJsZWQKK0NPUFkgZnQ4 KHgpIEZST00gc3RkaW47CistLSBSZXNldCBzdGF0ZQorQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9Q VElPTlMoRFJPUCB1c2VfY29weV9mb3JfaW5zZXJ0KTsKK0FMVEVSIEZPUkVJR04gVEFCTEUgZnQ4 IE9QVElPTlMoQUREIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K IC0tIHRlc3QgZm9yIHBvc3RncmVzX2Zkd19nZXRfY29ubmVjdGlvbnMgZnVuY3Rpb24gd2l0aCBj aGVja19jb25uID0gdHJ1ZQogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gRGlzYWJsZSBkZWJ1Z19kaXNjYXJk X2NhY2hlcyBpbiBvcmRlciB0byBtYW5hZ2UgcmVtb3RlIGNvbm5lY3Rpb25zCmRpZmYgLS1naXQg YS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29w dGlvbi5jCmluZGV4IDA0Nzg4YjdlOGIzLi5kZTBmNTkzMzJjMyAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9u LmMKQEAgLTI2Myw2ICsyNjMsOSBAQCBJbml0UGdGZHdPcHRpb25zKHZvaWQpCiAJCS8qIGJhdGNo X3NpemUgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLwogCQl7ImJhdGNo X3NpemUiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7ImJhdGNoX3NpemUi LCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCisJCS8qIHVzZV9jb3B5X2Zvcl9pbnNl cnQgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLworCQl7InVzZV9jb3B5 X2Zvcl9pbnNlcnQiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAorCQl7InVzZV9j b3B5X2Zvcl9pbnNlcnQiLCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCiAJCS8qIGFz eW5jX2NhcGFibGUgaXMgYXZhaWxhYmxlIG9uIGJvdGggc2VydmVyIGFuZCB0YWJsZSAqLwogCQl7 ImFzeW5jX2NhcGFibGUiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7ImFz eW5jX2NhcGFibGUiLCBGb3JlaWduVGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCmRpZmYgLS1naXQg YS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDA2YjUyYzY1MzAwLi42NDE3NDcyN2QwOSAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTYzLDYgKzYzLDkgQEAgUEdfTU9EVUxFX01B R0lDX0VYVCgKIC8qIElmIG5vIHJlbW90ZSBlc3RpbWF0ZXMsIGFzc3VtZSBhIHNvcnQgY29zdHMg MjAlIGV4dHJhICovCiAjZGVmaW5lIERFRkFVTFRfRkRXX1NPUlRfTVVMVElQTElFUiAxLjIKIAor LyogQnVmZmVyIHNpemUgdG8gc2VuZCBDT1BZIElOIGRhdGEqLworI2RlZmluZSBDT1BZQlVGU0la IDgxOTIKKwogLyoKICAqIEluZGV4ZXMgb2YgRkRXLXByaXZhdGUgaW5mb3JtYXRpb24gc3RvcmVk IGluIGZkd19wcml2YXRlIGxpc3RzLgogICoKQEAgLTE5Nyw2ICsyMDAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBQZ0Zkd01vZGlmeVN0YXRlCiAJaW50CQkJYmF0Y2hfc2l6ZTsJCS8qIHZhbHVlIG9mIEZE VyBvcHRpb24gImJhdGNoX3NpemUiICovCiAJYm9vbAkJaGFzX3JldHVybmluZzsJLyogaXMgdGhl cmUgYSBSRVRVUk5JTkcgY2xhdXNlPyAqLwogCUxpc3QJICAgKnJldHJpZXZlZF9hdHRyczsJLyog YXR0ciBudW1iZXJzIHJldHJpZXZlZCBieSBSRVRVUk5JTkcgKi8KKwlib29sCQl1c2VfY29weV9m b3JfaW5zZXJ0OwkvKiBpcyB0aGUgQ09QWSBlbmFibGVkIGZvciBJTlNFUlQncz8gKi8KIAogCS8q IGluZm8gYWJvdXQgcGFyYW1ldGVycyBmb3IgcHJlcGFyZWQgc3RhdGVtZW50ICovCiAJQXR0ck51 bWJlcgljdGlkQXR0bm87CQkvKiBhdHRudW0gb2YgaW5wdXQgcmVzanVuayBjdGlkIGNvbHVtbiAq LwpAQCAtNTQ1LDYgKzU0OSwxMCBAQCBzdGF0aWMgdm9pZCBtZXJnZV9mZHdfb3B0aW9ucyhQZ0Zk d1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxhdGlvbkluZm8g KmZwaW5mb19vLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxhdGlvbkluZm8gKmZwaW5mb19pKTsK IHN0YXRpYyBpbnQJZ2V0X2JhdGNoX3NpemVfb3B0aW9uKFJlbGF0aW9uIHJlbCk7CitzdGF0aWMg Ym9vbCBnZXRfdXNlX2NvcHlfZm9yX2luc2VydChSZWxhdGlvbiByZWwpOworc3RhdGljIFR1cGxl VGFibGVTbG90ICoqZXhlY3V0ZV9mb3JlaWduX2luc2VydF91c2luZ19jb3B5KFBnRmR3TW9kaWZ5 U3RhdGUgKmZtc3RhdGUsCisJCQkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKipzbG90cywK KwkJCQkJCQkJCQkJCQkJICBpbnQgKm51bVNsb3RzKTsKIAogCiAvKgpAQCAtMTc4OCw2ICsxNzk2 LDcgQEAgcG9zdGdyZXNQbGFuRm9yZWlnbk1vZGlmeShQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0 CSAgICpyZXRyaWV2ZWRfYXR0cnMgPSBOSUw7CiAJYm9vbAkJZG9Ob3RoaW5nID0gZmFsc2U7CiAJ aW50CQkJdmFsdWVzX2VuZF9sZW4gPSAtMTsKKwlib29sCQl1c2VfY29weV9mb3JfaW5zZXJ0ID0g ZmFsc2U7CiAKIAlpbml0U3RyaW5nSW5mbygmc3FsKTsKIApAQCAtMTg2NywxNyArMTg3NiwzMCBA QCBwb3N0Z3Jlc1BsYW5Gb3JlaWduTW9kaWZ5KFBsYW5uZXJJbmZvICpyb290LAogCQllbG9nKEVS Uk9SLCAidW5leHBlY3RlZCBPTiBDT05GTElDVCBzcGVjaWZpY2F0aW9uOiAlZCIsCiAJCQkgKGlu dCkgcGxhbi0+b25Db25mbGljdEFjdGlvbik7CiAKKwlpZiAob3BlcmF0aW9uID09IENNRF9JTlNF UlQgJiYgcGxhbi0+cmV0dXJuaW5nTGlzdHMgPT0gTlVMTCkKKwl7CisJCWludAkJCWJhdGNoX3Np emUgPSBnZXRfYmF0Y2hfc2l6ZV9vcHRpb24ocmVsKTsKKworCQlpZiAoYmF0Y2hfc2l6ZSA+IDEp CisJCQl1c2VfY29weV9mb3JfaW5zZXJ0ID0gZ2V0X3VzZV9jb3B5X2Zvcl9pbnNlcnQocmVsKTsK Kwl9CisKIAkvKgogCSAqIENvbnN0cnVjdCB0aGUgU1FMIGNvbW1hbmQgc3RyaW5nLgogCSAqLwog CXN3aXRjaCAob3BlcmF0aW9uKQogCXsKIAkJY2FzZSBDTURfSU5TRVJUOgotCQkJZGVwYXJzZUlu c2VydFNxbCgmc3FsLCBydGUsIHJlc3VsdFJlbGF0aW9uLCByZWwsCi0JCQkJCQkJIHRhcmdldEF0 dHJzLCBkb05vdGhpbmcsCi0JCQkJCQkJIHdpdGhDaGVja09wdGlvbkxpc3QsIHJldHVybmluZ0xp c3QsCi0JCQkJCQkJICZyZXRyaWV2ZWRfYXR0cnMsICZ2YWx1ZXNfZW5kX2xlbik7Ci0JCQlicmVh azsKKwkJCXsKKwkJCQlpZiAodXNlX2NvcHlfZm9yX2luc2VydCkKKwkJCQkJZGVwYXJzZUNvcHlT cWwoJnNxbCwgcmVsLCB0YXJnZXRBdHRycyk7CisJCQkJZWxzZQorCQkJCQlkZXBhcnNlSW5zZXJ0 U3FsKCZzcWwsIHJ0ZSwgcmVzdWx0UmVsYXRpb24sIHJlbCwKKwkJCQkJCQkJCSB0YXJnZXRBdHRy cywgZG9Ob3RoaW5nLAorCQkJCQkJCQkJIHdpdGhDaGVja09wdGlvbkxpc3QsIHJldHVybmluZ0xp c3QsCisJCQkJCQkJCQkgJnJldHJpZXZlZF9hdHRycywgJnZhbHVlc19lbmRfbGVuKTsKKwkJCQli cmVhazsKKwkJCX0KIAkJY2FzZSBDTURfVVBEQVRFOgogCQkJZGVwYXJzZVVwZGF0ZVNxbCgmc3Fs LCBydGUsIHJlc3VsdFJlbGF0aW9uLCByZWwsCiAJCQkJCQkJIHRhcmdldEF0dHJzLApAQCAtMTky NSw2ICsxOTQ3LDcgQEAgcG9zdGdyZXNCZWdpbkZvcmVpZ25Nb2RpZnkoTW9kaWZ5VGFibGVTdGF0 ZSAqbXRzdGF0ZSwKIAlpbnQJCQl2YWx1ZXNfZW5kX2xlbjsKIAlMaXN0CSAgICpyZXRyaWV2ZWRf YXR0cnM7CiAJUmFuZ2VUYmxFbnRyeSAqcnRlOworCVJlbGF0aW9uCXJlbCA9IHJlc3VsdFJlbElu Zm8tPnJpX1JlbGF0aW9uRGVzYzsKIAogCS8qCiAJICogRG8gbm90aGluZyBpbiBFWFBMQUlOIChu byBBTkFMWVpFKSBjYXNlLiAgcmVzdWx0UmVsSW5mby0+cmlfRmR3U3RhdGUKQEAgLTE5NjEsNiAr MTk4NCwxMCBAQCBwb3N0Z3Jlc0JlZ2luRm9yZWlnbk1vZGlmeShNb2RpZnlUYWJsZVN0YXRlICpt dHN0YXRlLAogCQkJCQkJCQkJaGFzX3JldHVybmluZywKIAkJCQkJCQkJCXJldHJpZXZlZF9hdHRy cyk7CiAKKwkvKiBDYW4gQ09QWSBiZSB1c2VkIGZvciBiYXRjaCBpbnNlcnQ/ICovCisJaWYgKG10 c3RhdGUtPm9wZXJhdGlvbiA9PSBDTURfSU5TRVJUICYmICFmbXN0YXRlLT5oYXNfcmV0dXJuaW5n ICYmIGZtc3RhdGUtPmJhdGNoX3NpemUgPiAxKQorCQlmbXN0YXRlLT51c2VfY29weV9mb3JfaW5z ZXJ0ID0gZ2V0X3VzZV9jb3B5X2Zvcl9pbnNlcnQocmVsKTsKKwogCXJlc3VsdFJlbEluZm8tPnJp X0Zkd1N0YXRlID0gZm1zdGF0ZTsKIH0KIApAQCAtNDA2Niw2ICs0MDkzLDUwIEBAIGNyZWF0ZV9m b3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAlyZXR1cm4gZm1zdGF0ZTsKIH0KIAorLyoK KyAqICBXcml0ZSB0YXJnZXQgYXR0cmlidXRlIHZhbHVlcyBmcm9tIGZtc3RhdGUgaW50byBidWYg YnVmZmVyIHRvIGJlIHNlbnQgYXMKKyAqICBDT1BZIEZST00gU1RESU4gZGF0YQorICovCitzdGF0 aWMgdm9pZAorY29udmVydF9zbG90X3RvX2NvcHlfdGV4dChTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJ CSAgUGdGZHdNb2RpZnlTdGF0ZSAqZm1zdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNs b3QpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKGZtc3RhdGUtPnJl bCk7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCWludAkJCWkgPSAwOworCisJZm9yZWFjaF9pbnQo YXR0bnVtLCBmbXN0YXRlLT50YXJnZXRfYXR0cnMpCisJeworCQlDb21wYWN0QXR0cmlidXRlICph dHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgYXR0bnVtIC0gMSk7CisJCURhdHVt CQlkYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCisJCS8qIElnbm9yZSBnZW5lcmF0ZWQgY29sdW1u czsgdGhleSBhcmUgc2V0IHRvIERFRkFVTFQgKi8KKwkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKGJ1ZiwgJ1x0Jyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJZGF0dW0gPSBzbG90X2dldGF0 dHIoc2xvdCwgYXR0bnVtLCAmaXNudWxsKTsKKworCQlpZiAoaXNudWxsKQorCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICJcXE4iKTsKKwkJZWxzZQorCQl7CisJCQljb25zdCBjaGFyICp2 YWx1ZSA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmZm1zdGF0ZS0+cF9mbGluZm9baV0sCisJCQkJCQkJ CQkJCQkgICBkYXR1bSk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCB2YWx1ZSk7 CisJCX0KKwkJaSsrOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAnXG4n KTsKK30KKwogLyoKICAqIGV4ZWN1dGVfZm9yZWlnbl9tb2RpZnkKICAqCQlQZXJmb3JtIGZvcmVp Z24tdGFibGUgbW9kaWZpY2F0aW9uIGFzIHJlcXVpcmVkLCBhbmQgZmV0Y2ggUkVUVVJOSU5HCkBA IC00MDk3LDYgKzQxNjgsMTQgQEAgZXhlY3V0ZV9mb3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0 ZSwKIAlpZiAoZm1zdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0FyZXEpCiAJCXByb2Nlc3NfcGVu ZGluZ19yZXF1ZXN0KGZtc3RhdGUtPmNvbm5fc3RhdGUtPnBlbmRpbmdBcmVxKTsKIAorCS8qIENo ZWNrIGlmIHRoZSBDT1BZIGNvbW1hbmQgaXMgZW5hYmxlZCB0byB1c2UgZm9yIElOU0VSVCdzICov CisJaWYgKG9wZXJhdGlvbiA9PSBDTURfSU5TRVJUICYmIGZtc3RhdGUtPnVzZV9jb3B5X2Zvcl9p bnNlcnQpCisJeworCQkvKiBDT1BZIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBJTlNFUlQgd2l0 aG91dCBSRVRVUk5JTkcgY2xhdXNlLiAqLworCQlBc3NlcnQoIWZtc3RhdGUtPmhhc19yZXR1cm5p bmcpOworCQlyZXR1cm4gZXhlY3V0ZV9mb3JlaWduX2luc2VydF91c2luZ19jb3B5KGZtc3RhdGUs IHNsb3RzLCBudW1TbG90cyk7CisJfQorCiAJLyoKIAkgKiBJZiB0aGUgZXhpc3RpbmcgcXVlcnkg d2FzIGRlcGFyc2VkIGFuZCBwcmVwYXJlZCBmb3IgYSBkaWZmZXJlbnQgbnVtYmVyCiAJICogb2Yg cm93cywgcmVidWlsZCBpdCBmb3IgdGhlIHByb3BlciBudW1iZXIuCkBAIC03ODg2LDMgKzc5NjUs MTEyIEBAIGdldF9iYXRjaF9zaXplX29wdGlvbihSZWxhdGlvbiByZWwpCiAKIAlyZXR1cm4gYmF0 Y2hfc2l6ZTsKIH0KKworLyoKKyAqIERldGVybWluZSBpZiB0aGUgdXNhZ2Ugb2YgdGhlIENPUFkg Y29tbWFuZCB0byBleGVjdXRlIGEgSU5TRVJUIGludG8gYSBmb3JlaWduCisgKiB0YWJsZSBpcyBl bmFibGVkLiBUaGUgb3B0aW9uIHNwZWNpZmllZCBmb3IgYSB0YWJsZSBoYXMgcHJlY2VkZW5jZS4K KyAqLworc3RhdGljIGJvb2wKK2dldF91c2VfY29weV9mb3JfaW5zZXJ0KFJlbGF0aW9uIHJlbCkK K3sKKwlPaWQJCQlmb3JlaWdudGFibGVpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwlMaXN0 CSAgICpvcHRpb25zID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCUZvcmVpZ25UYWJsZSAqdGFi bGU7CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCWJvb2wJCWVuYWJsZV9iYXRjaF93aXRoX2Nv cHkgPSBmYWxzZTsKKworCS8qCisJICogTG9hZCBvcHRpb25zIGZvciB0YWJsZSBhbmQgc2VydmVy LiBXZSBhcHBlbmQgc2VydmVyIG9wdGlvbnMgYWZ0ZXIgdGFibGUKKwkgKiBvcHRpb25zLCBiZWNh dXNlIHRhYmxlIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlLgorCSAqLworCXRhYmxlID0gR2V0Rm9y ZWlnblRhYmxlKGZvcmVpZ250YWJsZWlkKTsKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKHRh YmxlLT5zZXJ2ZXJpZCk7CisKKwlvcHRpb25zID0gbGlzdF9jb25jYXQob3B0aW9ucywgdGFibGUt Pm9wdGlvbnMpOworCW9wdGlvbnMgPSBsaXN0X2NvbmNhdChvcHRpb25zLCBzZXJ2ZXItPm9wdGlv bnMpOworCisJLyogU2VlIGlmIGVpdGhlciB0YWJsZSBvciBzZXJ2ZXIgc3BlY2lmaWVzIGVuYWJs ZV9iYXRjaF93aXRoX2NvcHkuICovCisJZm9yZWFjaChsYywgb3B0aW9ucykKKwl7CisJCURlZkVs ZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHN0cmNtcChkZWYt PmRlZm5hbWUsICJ1c2VfY29weV9mb3JfaW5zZXJ0IikgPT0gMCkKKwkJeworCQkJKHZvaWQpIHBh cnNlX2Jvb2woZGVmR2V0U3RyaW5nKGRlZiksICZlbmFibGVfYmF0Y2hfd2l0aF9jb3B5KTsKKwkJ CWJyZWFrOworCQl9CisJfQorCXJldHVybiBlbmFibGVfYmF0Y2hfd2l0aF9jb3B5OworfQorCisv KiBFeGVjdXRlIGFuIGluc2VydCBpbnRvIGEgZm9yZWlnbiB0YWJsZSB1c2luZyB0aGUgQ09QWSBj b21tYW5kICovCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKioKK2V4ZWN1dGVfZm9yZWlnbl9pbnNl cnRfdXNpbmdfY29weShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkgIFR1cGxl VGFibGVTbG90ICoqc2xvdHMsCisJCQkJCQkJCSAgaW50ICpudW1TbG90cykKK3sKKwlQR3Jlc3Vs dCAgICpyZXM7CisJU3RyaW5nSW5mb0RhdGEgY29weV9kYXRhOworCWludAkJCW5fcm93czsKKwlp bnQJCQlpOworCisJLyogU2VuZCBDT1BZIGNvbW1hbmQgKi8KKwlpZiAoIVBRc2VuZFF1ZXJ5KGZt c3RhdGUtPmNvbm4sIGZtc3RhdGUtPnF1ZXJ5KSkKKwkJcGdmZHdfcmVwb3J0X2Vycm9yKE5VTEws IGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPnF1ZXJ5KTsKKworCS8qIGdldCB0aGUgQ09QWSByZXN1 bHQgKi8KKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3RhdGUtPmNvbm4pOworCWlmIChQUXJl c3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJCXBnZmR3X3JlcG9ydF9lcnJvcihy ZXMsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPnF1ZXJ5KTsKKworCS8qIENvbnZlcnQgdGhlIFR1 cGxlVGFibGVTbG90IGRhdGEgaW50byBhIFRFWFQtZm9ybWF0dGVkIGxpbmUgKi8KKwlpbml0U3Ry aW5nSW5mbygmY29weV9kYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgKm51bVNsb3RzOyBpKyspCisJ eworCQljb252ZXJ0X3Nsb3RfdG9fY29weV90ZXh0KCZjb3B5X2RhdGEsIGZtc3RhdGUsIHNsb3Rz W2ldKTsKKworCQkvKgorCQkgKiBTZW5kIGluaXRpYWwgQ09QWSBkYXRhIGlmIHRoZSBidWZmZXIg cmVhY2ggdGhlIGxpbWl0IHRvIGF2b2lkIGxhcmdlCisJCSAqIG1lbW9yeSB1c2FnZS4KKwkJICov CisJCWlmIChjb3B5X2RhdGEubGVuID49IENPUFlCVUZTSVopCisJCXsKKwkJCWlmIChQUXB1dENv cHlEYXRhKGZtc3RhdGUtPmNvbm4sIGNvcHlfZGF0YS5kYXRhLCBjb3B5X2RhdGEubGVuKSA8PSAw KQorCQkJCXBnZmR3X3JlcG9ydF9lcnJvcihOVUxMLCBmbXN0YXRlLT5jb25uLCBmbXN0YXRlLT5x dWVyeSk7CisJCQlyZXNldFN0cmluZ0luZm8oJmNvcHlfZGF0YSk7CisJCX0KKwl9CisKKwkvKiBT ZW5kIHRoZSByZW1haW5pbmcgQ09QWSBkYXRhICovCisJaWYgKGNvcHlfZGF0YS5sZW4gPiAwKQor CXsKKwkJaWYgKFBRcHV0Q29weURhdGEoZm1zdGF0ZS0+Y29ubiwgY29weV9kYXRhLmRhdGEsIGNv cHlfZGF0YS5sZW4pIDw9IDApCisJCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+ Y29ubiwgZm1zdGF0ZS0+cXVlcnkpOworCX0KKworCS8qIEVuZCB0aGUgQ09QWSBvcGVyYXRpb24g Ki8KKwlpZiAoUFFwdXRDb3B5RW5kKGZtc3RhdGUtPmNvbm4sIE5VTEwpIDwgMCB8fCBQUWZsdXNo KGZtc3RhdGUtPmNvbm4pKQorCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29u biwgZm1zdGF0ZS0+cXVlcnkpOworCisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCwgYW5kIGNoZWNr IGZvciBzdWNjZXNzLgorCSAqLworCXJlcyA9IHBnZmR3X2dldF9yZXN1bHQoZm1zdGF0ZS0+Y29u bik7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJcGdm ZHdfcmVwb3J0X2Vycm9yKHJlcywgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+cXVlcnkpOworCisJ bl9yb3dzID0gYXRvaShQUWNtZFR1cGxlcyhyZXMpKTsKKworCS8qIEFuZCBjbGVhbiB1cCAqLwor CVBRY2xlYXIocmVzKTsKKworCU1lbW9yeUNvbnRleHRSZXNldChmbXN0YXRlLT50ZW1wX2N4dCk7 CisKKwkqbnVtU2xvdHMgPSBuX3Jvd3M7CisKKwkvKgorCSAqIFJldHVybiBOVUxMIGlmIG5vdGhp bmcgd2FzIGluc2VydGVkIG9uIHRoZSByZW1vdGUgZW5kCisJICovCisJcmV0dXJuIChuX3Jvd3Mg PiAwKSA/IHNsb3RzIDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5oIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKaW5k ZXggZTY5NzM1Mjk4ZDcuLmFhNTRkNmJiYTUzIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19m ZHcuaApAQCAtMjA0LDYgKzIwNCw3IEBAIGV4dGVybiB2b2lkIHJlYnVpbGRJbnNlcnRTcWwoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkgY2hhciAqb3JpZ19xdWVyeSwgTGlz dCAqdGFyZ2V0X2F0dHJzLAogCQkJCQkJCSBpbnQgdmFsdWVzX2VuZF9sZW4sIGludCBudW1fcGFy YW1zLAogCQkJCQkJCSBpbnQgbnVtX3Jvd3MpOworZXh0ZXJuIHZvaWQgZGVwYXJzZUNvcHlTcWwo U3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqdGFyZ2V0X2F0dHJzKTsKIGV4dGVy biB2b2lkIGRlcGFyc2VVcGRhdGVTcWwoU3RyaW5nSW5mbyBidWYsIFJhbmdlVGJsRW50cnkgKnJ0 ZSwKIAkJCQkJCQkgSW5kZXggcnRpbmRleCwgUmVsYXRpb24gcmVsLAogCQkJCQkJCSBMaXN0ICp0 YXJnZXRBdHRycywKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jl c19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5k ZXggOWE4ZjllMjgxMzUuLjBjNDgzY2Q0OWE1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwv cG9zdGdyZXNfZmR3LnNxbApAQCAtNTQsNiArNTQsMTggQEAgQ1JFQVRFIFRBQkxFICJTIDEiLiJU IDQiICgKIAljMyB0ZXh0LAogCUNPTlNUUkFJTlQgdDRfcGtleSBQUklNQVJZIEtFWSAoYzEpCiAp OworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDUiKAorICAgIHggaW50CispOworQ1JFQVRFIFRBQkxF ICJTIDEiLiJUIDYiKAorICAgIGlkIGludCBub3QgbnVsbCwKKyAgICBub3RlIHRleHQsCisgICAg dmFsdWUgaW50IE5PVCBOVUxMCispOworQ1JFQVRFIFRBQkxFICJTIDEiLiJUIDciKAorICAgIGlk IGludCwKKyAgICB0IHRleHQKKyk7CiAKIC0tIERpc2FibGUgYXV0b3ZhY3V1bSBmb3IgdGhlc2Ug dGFibGVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgZWZmZWN0cyBvZiB0aGF0CiBBTFRFUiBUQUJMRSAi UyAxIi4iVCAxIiBTRVQgKGF1dG92YWN1dW1fZW5hYmxlZCA9ICdmYWxzZScpOwpAQCAtMTQ2LDYg KzE1OCwyNyBAQCBDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDcgKAogCWMzIHRleHQKICkgU0VSVkVS IGxvb3BiYWNrMyBPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0Jyk7 CiAKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGZ0OCAoCisgICAgeCBpbnQKKykKK1NFUlZFUiBsb29w YmFjaworT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNScsIHVzZV9j b3B5X2Zvcl9pbnNlcnQgJ3RydWUnLCBiYXRjaF9zaXplICcxMCcpOworCitDUkVBVEUgRk9SRUlH TiBUQUJMRSBmdDkgKAorICAgIGlkIGludCBub3QgbnVsbCwKKyAgICBub3RlIHRleHQsCisgICAg dmFsdWUgaW50IE5PVCBOVUxMCispCitTRVJWRVIgbG9vcGJhY2sKK09QVElPTlMgKHNjaGVtYV9u YW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDYnLCB1c2VfY29weV9mb3JfaW5zZXJ0ICd0cnVlJywg YmF0Y2hfc2l6ZSAnMTAnKTsKKworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQxMCAoCisgICAgaWQg aW50LAorICAgIHQgdGV4dAorKQorU0VSVkVSIGxvb3BiYWNrCitPUFRJT05TIChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCA3JywgdXNlX2NvcHlfZm9yX2luc2VydCAndHJ1ZScsIGJh dGNoX3NpemUgJzEwJyk7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3RzIGZvciB2YWxpZGF0b3IK IC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KQEAgLTQzNzksNiArNDQxMiw1MiBAQCBBTkFMWVpFIGFuYWx5emVfZnRh YmxlOwogRFJPUCBGT1JFSUdOIFRBQkxFIGFuYWx5emVfZnRhYmxlOwogRFJPUCBUQUJMRSBhbmFs eXplX3RhYmxlOwogCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSB0ZXN0IGZvciBDT1BZIHVzYWdlIHRvIHBl cmZvcm0gSU5TRVJUJ3MKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gVGVzdCB0aGF0IHRhcmdldCBhdHRy IGlzIGNvcnJlY3RseSB1c2VkIHRvIGJ1aWxkIHRoZSBDT1BZIGNvbW1hbmQKK0FMVEVSIEZPUkVJ R04gVEFCTEUgZnQ4IERST1AgQ09MVU1OIHg7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBhZGQg Q09MVU1OIHggaW50OworRVhQTEFJTihBTkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1B UlkgT0ZGLCBCVUZGRVJTIE9GRiwgVElNSU5HIE9GRikKK0lOU0VSVCBJTlRPIGZ0OCBTRUxFQ1Qg KiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMCkgaTsKK1NFTEVDVCAqIEZST00gZnQ4OworCist LSBUZXN0IG91dGVyIG9mIG9yZGVyIGNvbHVtbnMKK0VYUExBSU4oQU5BTFlaRSwgVkVSQk9TRSwg Q09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpIElOU0VSVCBJ TlRPIGZ0OSAoaWQsIHZhbHVlLCBub3RlKQorU0VMRUNUIGcsCisgICAgICAgZyAqIDIsCisgICAg ICAgJ2JhdGNoIGluc2VydCB0ZXN0IGRhdGEnIHx8IGcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDIwKSBnOworU0VMRUNUICogRlJPTSBmdDk7CisKKy0tIFRlc3QgYnVmZmVyIGxpbWl0IG9mIGNv cHkgZGF0YSBvbiBDT1BZQlVGU0laCitJTlNFUlQgSU5UTyBmdDEwIChpZCwgdCkKK1NFTEVDVCBz LCByZXBlYXQobWQ1KHM6OnRleHQpLCAxMDAwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAx MDMpIHM7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBmdDEwOworCistLSBEaXNhYmxlIHRoZSB1c2Vf Y29weV9mb3JfaW5zZXJ0IHRhYmxlIG9wdGlvbiBhbmQgY2hlY2sgdGhhdCB0aGUgSU5TRVJUIGlz CistLSB1c2VkCitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBPUFRJT05TKERST1AgdXNlX2NvcHlf Zm9yX2luc2VydCk7CitFWFBMQUlOKFZFUkJPU0UsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIEJV RkZFUlMgT0ZGLCBUSU1JTkcgT0ZGKQorSU5TRVJUIElOVE8gZnQ4IFZBTFVFUyAoMTApOworCist LSBFbmFibGUgdGhlIHVzZV9jb3B5X2Zvcl9pbnNlcnQgZm9yIHRoZSBmb3JlaWduIHNlcnZlciBh bmQgY2hlY2sgdGhhdCB0aGUKKy0tIENPUFkgaXMgdXNlZAorQUxURVIgU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMoQUREIHVzZV9jb3B5X2Zvcl9pbnNlcnQgJ3RydWUnKTsKK0VYUExBSU4oVkVSQk9T RSwgQ09TVFMgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpCitJTlNF UlQgSU5UTyBmdDggVkFMVUVTICgyMCk7CisKKy0tIENoZWNrIHRoYXQgQ09QWSB3b3JrIGNvcnJl Y3RseSBmb3IgYSBmb3JlaWduIHRhYmxlIHRoYXQgaGFzCistLSB1c2VfY29weV9mb3JfaW5zZXJ0 IGVuYWJsZWQKK0NPUFkgZnQ4KHgpIEZST00gc3RkaW47CiszMAorXC4KKworLS0gUmVzZXQgc3Rh dGUKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TKERST1AgdXNlX2NvcHlfZm9yX2luc2Vy dCk7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBPUFRJT05TKEFERCB1c2VfY29weV9mb3JfaW5z ZXJ0ICd0cnVlJyk7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3QgZm9yIHBvc3RncmVzX2Zkd19n ZXRfY29ubmVjdGlvbnMgZnVuY3Rpb24gd2l0aCBjaGVja19jb25uID0gdHJ1ZQogLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLSAKMi41MS4yCgo= --467300f00731441b9077350599f3e26bfb6cd736d6329a75ef0e275aa956--