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 1vcksM-00AQPs-0R for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Jan 2026 13:44:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vcksK-002BgX-2n for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Jan 2026 13:44:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vcksK-002BgO-11 for pgsql-hackers@lists.postgresql.org; Mon, 05 Jan 2026 13:44:01 +0000 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vcksI-004KTH-1x for pgsql-hackers@postgresql.org; Mon, 05 Jan 2026 13:43:59 +0000 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-c03e8ac1da3so12162993a12.2 for ; Mon, 05 Jan 2026 05:43:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767620637; x=1768225437; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4HLODy2xkk7RS7VDZa5yQ0l/1LYtNA7LZGceS7QGWKk=; b=j4VyPN738v0fWrYQIPEMmGCNhnd6pSKDjogm6Waplmx6ZQyplBb4h92ywRuh+OTWRR bo0Ii5aA9FLJTJjSKerIZs5wXrGxjUh5XOPC51i7EBVJ183yp7wMZqUG3cPf08eBJe8X 8OkPExUi670jI3fGxLwkaDJDjFG80J2X3+WEYUOzfdje6WMs47bqT462kjQmyX7lK+0S gRE5dzEaS34JR+uib9NvOoFXm5P6pZ4z8uzc9BaQuEjO3rkxQN0dPI64W4ORmAPYn8sK qSRsFCO8dYgPy9YT66hLSE6qfU3ZW5n9xg5SWg/80M0oPVa6uqSaXPbn8iF98OMfu21E Fafw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767620637; x=1768225437; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4HLODy2xkk7RS7VDZa5yQ0l/1LYtNA7LZGceS7QGWKk=; b=hnkJ8CTsLo2G07en+4e7/E7/6Q6HEMLUQKINmScXPtTkBGhHLSaUUCpoe7z8WMun0Y 5Y3cdynk4KOmiDqD2+5sgCbCEDvfXvyfeBkLr8oGSPyGPQMD3hfjMuM5vR8AjusKP8ZW 4bVy82JN4cLyG8K8mN2wYn+76vBJG+n2bbRI3lkoUx0lDLelvsEu5oQkE3YkHO241+EB a1pccEoR67L2J9X7jH/AGTHeWGINanJ89JXhmBSNGgfmVKHDA6T0IJ62Z8ZZPZS51v4v mEXgL2+XE/vt9QhcEf0l99xJM+N/Hm2TzyA8MalqRxITPSnCuUPuOdWSa425olA/AC+T sG3Q== X-Forwarded-Encrypted: i=1; AJvYcCVLcZcYtQS4k2+v+WqhALseoaK6Y2bOTyNmkrcz1tbo2HmoXFqReU1q/kf7dpWdScn37MvQbAY7JN9lGwNu@postgresql.org X-Gm-Message-State: AOJu0Yzm8loKenZj/oAdBOeFHM6iNQxwnL+6gpY24yUxviahcIZc3nNx xQ+nke5ZuSUf8buJKkDmV98lesljZLhd6YAZLRDnqhcki8VYXDTHcazA X-Gm-Gg: AY/fxX4Ow1WHPOql4KUw9LzD6svX34hhcZLfB5SMfi8ibSW2HhdNAWSPak5+04KrnAF rQDIvty8Tl++J3n+Xd1RMjVVtuNv6KnEFqLD36KaQQbEo6/T7ItM3kNHcDBqc3O2CuyLksXSV7m k4FpciBjlkRKmIG3DjcfzWDyXv3PZMnn57GwjLEFfwQHv819n6qUKQ33Z7ACRAGQRMJ2QQSX0Gp mvvVBWms2YOflV4B0YTMlP8uHiAvjLCRaQCjlx5FQ6uuZlgsJ4E5BwVqE4tx4hBUyaOQSACy8H/ Hd8bqnowwqlLMC8LvaNEXi1vRpFJFHi7Aytg7QJze/QmiMhLQME9mRQJqFoU3vobjoAVG4oYEJU XkV3NoNzaYsGZy/0lu5fqHkYeuZ8rfv7CaztRLlQL4wA+GsdURCfgfmVCP5tcfiL6kQMCPIqu6F 2eEyZYp12S+tvW8wwiApLUpbgW374g5aeepw== X-Google-Smtp-Source: AGHT+IGDzq6RBX0SYSOU5B0Pp8VOC8lY3nFPn6u/r+WSLNGI8K7/D/Es44Yppm40/uqY+TN3zwcs8Q== X-Received: by 2002:a05:7300:f407:b0:2b0:5289:8c2c with SMTP id 5a478bee46e88-2b05ec30c43mr36878149eec.24.1767620636991; Mon, 05 Jan 2026 05:43:56 -0800 (PST) Received: from localhost ([2804:14d:328a:a59c:c439:408e:2399:dbf9]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b140c42e7esm11399250eec.22.2026.01.05.05.43.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 05 Jan 2026 05:43:56 -0800 (PST) Content-Type: multipart/mixed; boundary=de9568beb313c837bfd26937a6e49315a658052cf1568b75b98945155e3f Mime-Version: 1.0 Date: Mon, 05 Jan 2026 10:43:52 -0300 Message-Id: Cc: "Andrew Dunstan" , "jian he" , "Tomas Vondra" , "pgsql-hackers" Subject: Re: postgres_fdw: Use COPY to speed up batch inserts From: "Matheus Alcantara" To: "Dewei Dai" , "Matheus Alcantara" , "Masahiko Sawada" X-Mailer: aerc 0.21.0 References: <5c52f4c7-74fa-4594-8378-53fd49f39329@dunslane.net> <202601032045434521683@163.com> In-Reply-To: <202601032045434521683@163.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --de9568beb313c837bfd26937a6e49315a658052cf1568b75b98945155e3f Content-Type: multipart/alternative; boundary=0f6a98c4cbd0a31d9442d658a635dd22d099710edf604bc92b004f02a49a --0f6a98c4cbd0a31d9442d658a635dd22d099710edf604bc92b004f02a49a Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Hi, thank you for reviewing this patch! On Sat Jan 3, 2026 at 9:45 AM -03, Dewei Dai wrote: > 1 - in function `execute_foreign_modify_using_copy` > The `res` object obtained from the first call to `pgfdw_get_result` > is not freed, maybe you can use `PQclear` to release it > Fixed. > 2 - in function `execute_foreign_modify_using_copy` > After using `copy_data`,it appears it can be released by > calling `destroyStringInfo`. > I'm wondering if we should call destroyStringInfo(©_data) or pfree(copy_data.data). Other functions use the pfree version, so I decided to use the same. (I actually tried to use destroyStringInfo() but the postgres_fdw tests kept running for longer than usual, so I think that using the pfree is correct) > 3 - in function `convert_slot_to_copy_text` > The value returned by the OutputFunctionCall function can be > freed by calling pfree > =20 We have other calls to OutputFunctionCall() on postgres_fdw.c and I'm not seeing a subsequent call to pfree. IIUC the returned valued will be allocated on the current memory context which will be free at the end of query execution, so I don't think that a pfree here is necessary, or I'm missing something? > 4 - in function `execute_foreign_modify_using_copy` > ```Send initial COPY data if the buffer reach the limit to avoid large > ``` > Typo: reach -> reaches=20 > Fixed -- Matheus Alcantara EDB: https://www.enterprisedb.com --0f6a98c4cbd0a31d9442d658a635dd22d099710edf604bc92b004f02a49a-- --de9568beb313c837bfd26937a6e49315a658052cf1568b75b98945155e3f Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0001-postgres_fdw-speed-up-batch-inserts-using-COPY.patch Content-Type: text/plain; charset=utf-8; name=v9-0001-postgres_fdw-speed-up-batch-inserts-using-COPY.patch RnJvbSBmNGRjZDlkODM2MTM3NTg5YzgzNDViNzRjYjI0YWIzZTdkYzE4ZWViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IFdlZCwgMjYgTm92IDIwMjUgMTY6MzQ6NDYgLTAzMDAKU3ViamVjdDogW1BBVENIIHY5XSBw b3N0Z3Jlc19mZHc6IHNwZWVkIHVwIGJhdGNoIGluc2VydHMgdXNpbmcgQ09QWQoKVGhpcyBjb21t aXQgaW5jbHVkZSBhIG5ldyBmb3JlaWduIHRhYmxlL3NlcnZlciBvcHRpb24KImJhdGNoX3dpdGhf Y29weV90aHJlc2hvbGQiIHRoYXQgZW5hYmxlIHRoZSB1c2FnZSBvZiB0aGUgQ09QWSBjb21tYW5k IHRvCnNwZWVkIHVwIGJhdGNoIGluc2VydHMgd2hlbiBhIENPUFkgRlJPTSBvciBhbiBpbnNlcnQg aW50byBhIHRhYmxlCnBhcnRpdGlvbiB0aGF0IGlzIGEgZm9yZWlnbiB0YWJsZSBpcyBleGVjdXRl ZC4gSW4gYm90aCBjYXNlcyB0aGUKQmVnaW5Gb3JlaWduSW5zZXJ0IGZkdyByb3V0aW5lIGlzIGNh bGxlZCwgc28gdGhpcyBuZXcgb3B0aW9uIGlzCnJldHJpZXZlZCBvbmx5IG9uIHRoaXMgcm91dGlu ZS4gRm9yIHRoZSBvdGhlciBjYXNlcyB0aGF0IHVzZSB0aGUKRm9yZWlnbk1vZGlmeSByb3V0aW5l cyBzdGlsbCB1c2UgdGhlIElOU0VSVCBhcyBhIHJlbW90ZSBTUUwuCgpOb3RlIHRoYXQgdGhlIENP UFkgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIGJhdGNoIGluc2VydHMgYW5kIG9ubHkgaWYgdGhlCmN1 cnJlbnQgbnVtYmVyIG9mIHJvd3MgYmVpbmcgaW5zZXJ0ZWQgb24gdGhlIGJhdGNoIG9wZXJhdGlv biBpcyA+PQpiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkLiBJZiBiYXRjaF9zaXplPTEwMCwgYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZD01MAphbmQgbnVtYmVyIG9mIHJvd3MgYmVpbmcgaW5zZXJ0 ZWQgaXMgMTIwIHRoZSBmaXJzdCAxMDAgcm93cyB3aWxsIGJlCmluc2VydGVkIHVzaW5nIHRoZSBD T1BZIGNvbW1hbmQgYW5kIHRoZSByZW1haW5pbmcgMjAgcm93cyB3aWxsIGJlCmluc2VydGVkIHVz aW5nIElOU0VSVCBzdGF0ZW1lbnQgYmVjYXVzZSBpdCBkaWQgbm90IHJlYWNoIHRoZSBjb3B5CnRo cmVzaG9sZC4KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMgICAgICAgICAgICAg ICAgfCAgMzUgKysrCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAgMjYgKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYyAgICAgICAgICAgICAg ICAgfCAgIDYgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgICAgICAg ICB8IDIxNSArKysrKysrKysrKysrKysrKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5oICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbCAgICAgfCAgMjMgKysKIDYgZmlsZXMgY2hhbmdlZCwgMzAzIGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVw YXJzZS5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCmluZGV4IGViZTJjM2E1OTZh Li43ODMzNWRiMTg4OSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5j CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwpAQCAtMjIzNiw2ICsyMjM2LDQx IEBAIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKIAlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgb3JpZ19xdWVyeSArIHZhbHVlc19lbmRfbGVuKTsKIH0K IAorLyoKKyAqICBCdWlsZCBhIENPUFkgRlJPTSBTVERJTiBzdGF0ZW1lbnQgdXNpbmcgdGhlIFRF WFQgZm9ybWF0CisgKi8KK3ZvaWQKK2RlcGFyc2VDb3B5U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxh dGlvbiByZWwsIExpc3QgKnRhcmdldF9hdHRycykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJl bGF0aW9uR2V0RGVzY3IocmVsKTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJaW50CQkJbmF0dHJz ID0gbGlzdF9sZW5ndGgodGFyZ2V0X2F0dHJzKTsKKworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi Q09QWSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwpOworCWlmIChuYXR0cnMgPiAwKQor CQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIigiKTsKKworCWZvcmVhY2hfaW50KGF0dG51bSwgdGFy Z2V0X2F0dHJzKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIo dHVwZGVzYywgYXR0bnVtIC0gMSk7CisKKwkJaWYgKGF0dHItPmF0dGdlbmVyYXRlZCkKKwkJCWNv bnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IiwgIik7CisKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSk7CisJfQorCWlmIChu YXR0cnMgPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIikgRlJPTSBTVERJTiIp OworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRlJPTSBTVERJTiIpOwor fQorCiAvKgogICogZGVwYXJzZSByZW1vdGUgVVBEQVRFIHN0YXRlbWVudAogICoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IDYwNjY1MTBj N2MwLi44YmJjMjdiN2IzYiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0 ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CkBAIC05MjE1LDYgKzkyMTUsMTkgQEAgd2l0aCByZXN1bHQgYXMgKGlu c2VydCBpbnRvIGl0cnRlc3QgdmFsdWVzICgxLCAndGVzdDEnKSwgKDIsICd0ZXN0MicpIHJldHVy bmluZwogCiBkcm9wIHRyaWdnZXIgbG9jdDFfYnJfaW5zZXJ0X3RyaWdnZXIgb24gbG9jdDE7CiBk cm9wIHRyaWdnZXIgbG9jdDJfYnJfaW5zZXJ0X3RyaWdnZXIgb24gbG9jdDI7CistLSBUZXN0IGJh dGNoIGluc2VydCB1c2luZyBDT1BZIHdpdGggYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZAorZGVs ZXRlIGZyb20gaXRydGVzdDsKK2FsdGVyIHNlcnZlciBsb29wYmFjayBvcHRpb25zIChhZGQgYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCAnMicsIGJhdGNoX3NpemUgJzMnKTsKK2luc2VydCBpbnRv IGl0cnRlc3QgdmFsdWVzICgxLCAndGVzdDEnKSwgKDIsICd0ZXN0MicpLCAoMiwgJ3Rlc3QzJyk7 CitzZWxlY3QgKiBmcm9tIGl0cnRlc3Q7CisgYSB8ICAgYiAgIAorLS0tKy0tLS0tLS0KKyAxIHwg dGVzdDEKKyAyIHwgdGVzdDIKKyAyIHwgdGVzdDMKKygzIHJvd3MpCisKK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChkcm9wIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQsIGRyb3AgYmF0 Y2hfc2l6ZSk7CiBkcm9wIHRhYmxlIGl0cnRlc3Q7CiBkcm9wIHRhYmxlIGxvY3QxOwogZHJvcCB0 YWJsZSBsb2N0MjsKQEAgLTk1MjQsNiArOTUzNywxOSBAQCBzZWxlY3QgKiBmcm9tIHJlbTI7CiAg IDIgfCBiYXIKICgyIHJvd3MpCiAKK2RlbGV0ZSBmcm9tIHJlbTI7CistLSBUZXN0IENPUFkgd2l0 aCBiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkCithbHRlciBmb3JlaWduIHRhYmxlIHJlbTIgb3B0 aW9ucyAoYWRkIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQgJzInKTsKKy0tIEluc2VydCAzIHJv d3Mgc28gdGhhdCB0aGUgdGhpcmQgcm93IGZhbGxiYWNrIHRvIG5vcm1hbCBJTlNFUlQgc3RhdGVt ZW50IHBhdGgKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworc2VsZWN0ICogZnJvbSByZW0yOworIGYx IHwgZjIgIAorLS0tLSstLS0tLQorICAxIHwgZm9vCisgIDIgfCBiYXIKKyAgMyB8IGJhegorKDMg cm93cykKKwogZGVsZXRlIGZyb20gcmVtMjsKIC0tIFRlc3QgY2hlY2sgY29uc3RyYWludHMKIGFs dGVyIHRhYmxlIGxvYzIgYWRkIGNvbnN0cmFpbnQgbG9jMl9mMXBvc2l0aXZlIGNoZWNrIChmMSA+ PSAwKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKaW5kZXggYjBiZDcyZDFlNTguLjQ1NDVjMmY5YmExIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYworKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9vcHRpb24uYwpAQCAtMTU3LDcgKzE1Nyw4IEBAIHBvc3RncmVzX2Zkd192YWxp ZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAkJCSh2b2lkKSBFeHRyYWN0RXh0ZW5zaW9uTGlzdChk ZWZHZXRTdHJpbmcoZGVmKSwgdHJ1ZSk7CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVm bmFtZSwgImZldGNoX3NpemUiKSA9PSAwIHx8Ci0JCQkJIHN0cmNtcChkZWYtPmRlZm5hbWUsICJi YXRjaF9zaXplIikgPT0gMCkKKwkJCQkgc3RyY21wKGRlZi0+ZGVmbmFtZSwgImJhdGNoX3NpemUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChkZWYtPmRlZm5hbWUsICJiYXRjaF93aXRoX2NvcHlfdGhy ZXNob2xkIikgPT0gMCkKIAkJewogCQkJY2hhcgkgICAqdmFsdWU7CiAJCQlpbnQJCQlpbnRfdmFs OwpAQCAtMjYzLDYgKzI2NCw5IEBAIEluaXRQZ0Zkd09wdGlvbnModm9pZCkKIAkJLyogYmF0Y2hf c2l6ZSBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCiAJCXsiYmF0Y2hf c2l6ZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsiYmF0Y2hfc2l6ZSIs IEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJLyogYmF0Y2hfd2l0aF9jb3B5X3Ro cmVzaG9sZCBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCisJCXsiYmF0 Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0s CisJCXsiYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQs IGZhbHNlfSwKIAkJLyogYXN5bmNfY2FwYWJsZSBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIg YW5kIHRhYmxlICovCiAJCXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklk LCBmYWxzZX0sCiAJCXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZh bHNlfSwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggMzU3MjY4OWUzM2IuLjJm Yjk1MTY3YTFjIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjMsNiArNjMs OSBAQCBQR19NT0RVTEVfTUFHSUNfRVhUKAogLyogSWYgbm8gcmVtb3RlIGVzdGltYXRlcywgYXNz dW1lIGEgc29ydCBjb3N0cyAyMCUgZXh0cmEgKi8KICNkZWZpbmUgREVGQVVMVF9GRFdfU09SVF9N VUxUSVBMSUVSIDEuMgogCisvKiBCdWZmZXIgc2l6ZSB0byBzZW5kIENPUFkgSU4gZGF0YSovCisj ZGVmaW5lIENPUFlCVUZTSVogODE5MgorCiAvKgogICogSW5kZXhlcyBvZiBGRFctcHJpdmF0ZSBp bmZvcm1hdGlvbiBzdG9yZWQgaW4gZmR3X3ByaXZhdGUgbGlzdHMuCiAgKgpAQCAtMTk4LDYgKzIw MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Zkd01vZGlmeVN0YXRlCiAJYm9vbAkJaGFzX3JldHVy bmluZzsJLyogaXMgdGhlcmUgYSBSRVRVUk5JTkcgY2xhdXNlPyAqLwogCUxpc3QJICAgKnJldHJp ZXZlZF9hdHRyczsJLyogYXR0ciBudW1iZXJzIHJldHJpZXZlZCBieSBSRVRVUk5JTkcgKi8KIAor CS8qIENPUFkgdXNhZ2Ugc3R1ZmYgKi8KKwlpbnQJCQliYXRjaF93aXRoX2NvcHlfdGhyZXNob2xk OwkvKiB2YWx1ZSBvZiBGRFcgb3B0aW9uICovCisJY2hhcgkgICAqY21kX2NvcHk7CQkvKiBDT1BZ IHN0YXRlbWVudCAqLworCiAJLyogaW5mbyBhYm91dCBwYXJhbWV0ZXJzIGZvciBwcmVwYXJlZCBz dGF0ZW1lbnQgKi8KIAlBdHRyTnVtYmVyCWN0aWRBdHRubzsJCS8qIGF0dG51bSBvZiBpbnB1dCBy ZXNqdW5rIGN0aWQgY29sdW1uICovCiAJaW50CQkJcF9udW1zOwkJCS8qIG51bWJlciBvZiBwYXJh bWV0ZXJzIHRvIHRyYW5zbWl0ICovCkBAIC01NDUsNiArNTUyLDEwIEBAIHN0YXRpYyB2b2lkIG1l cmdlX2Zkd19vcHRpb25zKFBnRmR3UmVsYXRpb25JbmZvICpmcGluZm8sCiAJCQkJCQkJICBjb25z dCBQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvX28sCiAJCQkJCQkJICBjb25zdCBQZ0Zkd1JlbGF0 aW9uSW5mbyAqZnBpbmZvX2kpOwogc3RhdGljIGludAlnZXRfYmF0Y2hfc2l6ZV9vcHRpb24oUmVs YXRpb24gcmVsKTsKK3N0YXRpYyBpbnQJZ2V0X2JhdGNoX3dpdGhfY29weV90aHJlc2hvbGQoUmVs YXRpb24gcmVsKTsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqKmV4ZWN1dGVfZm9yZWlnbl9tb2Rp ZnlfdXNpbmdfY29weShQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCisJCQkJCQkJCQkJCQkJCSAgaW50ICpudW1TbG90cyk7 CiAKIAogLyoKQEAgLTIwMTMsOCArMjAyNCwzMCBAQCBwb3N0Z3Jlc0V4ZWNGb3JlaWduQmF0Y2hJ bnNlcnQoRVN0YXRlICplc3RhdGUsCiAJICovCiAJaWYgKGZtc3RhdGUtPmF1eF9mbXN0YXRlKQog CQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdTdGF0ZSA9IGZtc3RhdGUtPmF1eF9mbXN0YXRlOwotCXJz bG90ID0gZXhlY3V0ZV9mb3JlaWduX21vZGlmeShlc3RhdGUsIHJlc3VsdFJlbEluZm8sIENNRF9J TlNFUlQsCi0JCQkJCQkJCSAgIHNsb3RzLCBwbGFuU2xvdHMsIG51bVNsb3RzKTsKKworCS8qCisJ ICogQ2hlY2sgaWYgImJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQiIGlzIGVuYWJsZSAoPiAwKSBh bmQgaWYgdGhlIENPUFkKKwkgKiBjYW4gYmUgdXNlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJv d3MgYmVpbmcgaW5zZXJ0ZWQgb24gdGhpcyBiYXRjaC4KKwkgKiBUaGUgb3JpZ2luYWwgcXVlcnkg YWxzbyBzaG91bGQgbm90IGhhdmUgYSBSRVRVUk5JTkcgY2xhdXNlLgorCSAqLworCWlmIChmbXN0 YXRlLT5iYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkID4gMCAmJgorCQlmbXN0YXRlLT5iYXRjaF93 aXRoX2NvcHlfdGhyZXNob2xkIDw9ICpudW1TbG90cyAmJgorCQkhZm1zdGF0ZS0+aGFzX3JldHVy bmluZykKKwl7CisJCWlmIChmbXN0YXRlLT5jbWRfY29weSA9PSBOVUxMKQorCQl7CisJCQlTdHJp bmdJbmZvRGF0YSBzcWw7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCQkJZGVwYXJzZUNv cHlTcWwoJnNxbCwgZm1zdGF0ZS0+cmVsLCBmbXN0YXRlLT50YXJnZXRfYXR0cnMpOworCQkJZm1z dGF0ZS0+Y21kX2NvcHkgPSBzcWwuZGF0YTsKKwkJfQorCisJCXJzbG90ID0gZXhlY3V0ZV9mb3Jl aWduX21vZGlmeV91c2luZ19jb3B5KGZtc3RhdGUsIHNsb3RzLCBudW1TbG90cyk7CisJfQorCWVs c2UKKwkJcnNsb3QgPSBleGVjdXRlX2ZvcmVpZ25fbW9kaWZ5KGVzdGF0ZSwgcmVzdWx0UmVsSW5m bywgQ01EX0lOU0VSVCwKKwkJCQkJCQkJCSAgIHNsb3RzLCBwbGFuU2xvdHMsIG51bVNsb3RzKTsK IAkvKiBSZXZlcnQgdGhhdCBjaGFuZ2UgKi8KIAlpZiAoZm1zdGF0ZS0+YXV4X2Ztc3RhdGUpCiAJ CXJlc3VsdFJlbEluZm8tPnJpX0Zkd1N0YXRlID0gZm1zdGF0ZTsKQEAgLTIyNjUsNiArMjI5OCwx NiBAQCBwb3N0Z3Jlc0JlZ2luRm9yZWlnbkluc2VydChNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRl LAogCQkJCQkJCQkJcmV0cmlldmVkX2F0dHJzICE9IE5JTCwKIAkJCQkJCQkJCXJldHJpZXZlZF9h dHRycyk7CiAKKworCS8qCisJICogU2V0IGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQgZnJvbSBm b3JlaWduIHNlcnZlci90YWJsZSBvcHRpb25zLiBXZSBkbworCSAqIHRoaXMgb3V0c2lkZSBvZiBj cmVhdGVfZm9yZWlnbl9tb2RpZnkoKSBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byB1c2UKKwkgKiBD T1BZIGFzIGEgcmVtb3RlIFNRTCB3aGVuIGEgQ09QWSBGUk9NIG9uIGEgZm9yZWlnbiB0YWJsZSBp cyBleGVjdXRlZCBvcgorCSAqIGFuIGluc2VydCBpcyBiZWluZyBwZXJmb3JtZWQgb24gYSB0YWJs ZSBwYXJ0aXRpb24uIEluIGJvdGggY2FzZXMgdGhlCisJICogQmVnaW5Gb3JlaWduSW5zZXJ0IGZk dyByb3V0aW5lIGlzIGNhbGxlZC4KKwkgKi8KKwlmbXN0YXRlLT5iYXRjaF93aXRoX2NvcHlfdGhy ZXNob2xkID0gZ2V0X2JhdGNoX3dpdGhfY29weV90aHJlc2hvbGQocmVsKTsKKwogCS8qCiAJICog SWYgdGhlIGdpdmVuIHJlc3VsdFJlbEluZm8gYWxyZWFkeSBoYXMgUGdGZHdNb2RpZnlTdGF0ZSBz ZXQsIGl0IG1lYW5zCiAJICogdGhlIGZvcmVpZ24gdGFibGUgaXMgYW4gVVBEQVRFIHN1YnBsYW4g cmVzdWx0IHJlbDsgaW4gd2hpY2ggY2FzZSwgc3RvcmUKQEAgLTQwNjYsNiArNDEwOSw1MCBAQCBj cmVhdGVfZm9yZWlnbl9tb2RpZnkoRVN0YXRlICplc3RhdGUsCiAJcmV0dXJuIGZtc3RhdGU7CiB9 CiAKKy8qCisgKiAgV3JpdGUgdGFyZ2V0IGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBmbXN0YXRlIGlu dG8gYnVmIGJ1ZmZlciB0byBiZSBzZW50IGFzCisgKiAgQ09QWSBGUk9NIFNURElOIGRhdGEKKyAq Lworc3RhdGljIHZvaWQKK2NvbnZlcnRfc2xvdF90b19jb3B5X3RleHQoU3RyaW5nSW5mbyBidWYs CisJCQkJCQkgIFBnRmR3TW9kaWZ5U3RhdGUgKmZtc3RhdGUsCisJCQkJCQkgIFR1cGxlVGFibGVT bG90ICpzbG90KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihmbXN0 YXRlLT5yZWwpOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlpbnQJCQlpID0gMDsKKworCWZvcmVh Y2hfaW50KGF0dG51bSwgZm1zdGF0ZS0+dGFyZ2V0X2F0dHJzKQorCXsKKwkJQ29tcGFjdEF0dHJp YnV0ZSAqYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOwor CQlEYXR1bQkJZGF0dW07CisJCWJvb2wJCWlzbnVsbDsKKworCQkvKiBJZ25vcmUgZ2VuZXJhdGVk IGNvbHVtbnM7IHRoZXkgYXJlIHNldCB0byBERUZBVUxUICovCisJCWlmIChhdHRyLT5hdHRnZW5l cmF0ZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybyhidWYsICdcdCcpOworCQlmaXJzdCA9IGZhbHNlOworCisJCWRhdHVtID0gc2xv dF9nZXRhdHRyKHNsb3QsIGF0dG51bSwgJmlzbnVsbCk7CisKKwkJaWYgKGlzbnVsbCkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXFxOIik7CisJCWVsc2UKKwkJeworCQkJY29uc3Qg Y2hhciAqdmFsdWUgPSBPdXRwdXRGdW5jdGlvbkNhbGwoJmZtc3RhdGUtPnBfZmxpbmZvW2ldLAor CQkJCQkJCQkJCQkJICAgZGF0dW0pOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg dmFsdWUpOworCQl9CisJCWkrKzsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1 ZiwgJ1xuJyk7Cit9CisKIC8qCiAgKiBleGVjdXRlX2ZvcmVpZ25fbW9kaWZ5CiAgKgkJUGVyZm9y bSBmb3JlaWduLXRhYmxlIG1vZGlmaWNhdGlvbiBhcyByZXF1aXJlZCwgYW5kIGZldGNoIFJFVFVS TklORwpAQCAtNzg4NiwzICs3OTczLDEyNyBAQCBnZXRfYmF0Y2hfc2l6ZV9vcHRpb24oUmVsYXRp b24gcmVsKQogCiAJcmV0dXJuIGJhdGNoX3NpemU7CiB9CisKKy8qCisgKiBEZXRlcm1pbmUgQ09Q WSB1c2FnZSB0aHJlc2hvbGQgZm9yIGJhdGNoaW5nIGluc2VydHMgZm9yIGEgZ2l2ZW4gZm9yZWln bgorICogdGFibGUuIFRoZSBvcHRpb24gc3BlY2lmaWVkIGZvciBhIHRhYmxlIGhhcyBwcmVjZWRl bmNlLgorICovCitzdGF0aWMgaW50CitnZXRfYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZChSZWxh dGlvbiByZWwpCit7CisJT2lkCQkJZm9yZWlnbnRhYmxlaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bCk7CisJTGlzdAkgICAqb3B0aW9ucyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlGb3JlaWdu VGFibGUgKnRhYmxlOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCS8qCisJICogV2UgdXNl IDAgYXMgZGVmYXVsdCwgd2hpY2ggbWVhbnMgdGhhdCBDT1BZIHdpbGwgbm90IGJlIHVzZWQgYnkg ZGVmYXVsdAorCSAqIGZvciBiYXRjaGluZyBpbnNlcnQuCisJICovCisJaW50CQkJY29weV9mb3Jf YmF0Y2hfaW5zZXJ0X3RocmVzaG9sZCA9IDA7CisKKwkvKgorCSAqIExvYWQgb3B0aW9ucyBmb3Ig dGFibGUgYW5kIHNlcnZlci4gV2UgYXBwZW5kIHNlcnZlciBvcHRpb25zIGFmdGVyIHRhYmxlCisJ ICogb3B0aW9ucywgYmVjYXVzZSB0YWJsZSBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4KKwkgKi8K Kwl0YWJsZSA9IEdldEZvcmVpZ25UYWJsZShmb3JlaWdudGFibGVpZCk7CisJc2VydmVyID0gR2V0 Rm9yZWlnblNlcnZlcih0YWJsZS0+c2VydmVyaWQpOworCisJb3B0aW9ucyA9IGxpc3RfY29uY2F0 KG9wdGlvbnMsIHRhYmxlLT5vcHRpb25zKTsKKwlvcHRpb25zID0gbGlzdF9jb25jYXQob3B0aW9u cywgc2VydmVyLT5vcHRpb25zKTsKKworCS8qIFNlZSBpZiBlaXRoZXIgdGFibGUgb3Igc2VydmVy IHNwZWNpZmllcyBlbmFibGVfYmF0Y2hfd2l0aF9jb3B5LiAqLworCWZvcmVhY2gobGMsIG9wdGlv bnMpCisJeworCQlEZWZFbGVtICAgICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QobGMpOworCisJ CWlmIChzdHJjbXAoZGVmLT5kZWZuYW1lLCAiYmF0Y2hfd2l0aF9jb3B5X3RocmVzaG9sZCIpID09 IDApCisJCXsKKwkJCSh2b2lkKSBwYXJzZV9pbnQoZGVmR2V0U3RyaW5nKGRlZiksICZjb3B5X2Zv cl9iYXRjaF9pbnNlcnRfdGhyZXNob2xkLCAwLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJfQor CXJldHVybiBjb3B5X2Zvcl9iYXRjaF9pbnNlcnRfdGhyZXNob2xkOworfQorCisvKgorICogZXhl Y3V0ZV9mb3JlaWduX21vZGlmeV91c2luZ19jb3B5CisgKgkJUGVyZm9ybSBmb3JlaWduLXRhYmxl IG1vZGlmaWNhdGlvbiB1c2luZyB0aGUgQ09QWSBjb21tYW5kLgorICovCitzdGF0aWMgVHVwbGVU YWJsZVNsb3QgKioKK2V4ZWN1dGVfZm9yZWlnbl9tb2RpZnlfdXNpbmdfY29weShQZ0Zkd01vZGlm eVN0YXRlICpmbXN0YXRlLAorCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCisJCQkJ CQkJCSAgaW50ICpudW1TbG90cykKK3sKKwlQR3Jlc3VsdCAgICpyZXM7CisJU3RyaW5nSW5mb0Rh dGEgY29weV9kYXRhOworCWludAkJCW5fcm93czsKKwlpbnQJCQlpOworCisJQXNzZXJ0KGZtc3Rh dGUtPmNtZF9jb3B5ICE9IE5VTEwpOworCisJLyogU2VuZCBDT1BZIGNvbW1hbmQgKi8KKwlpZiAo IVBRc2VuZFF1ZXJ5KGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KSkKKwkJcGdmZHdf cmVwb3J0X2Vycm9yKE5VTEwsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KTsKKwor CS8qIGdldCB0aGUgQ09QWSByZXN1bHQgKi8KKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3Rh dGUtPmNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJ CXBnZmR3X3JlcG9ydF9lcnJvcihyZXMsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5 KTsKKworCS8qIENsZWFuIHVwIHRoZSBDT1BZIGNvbW1hbmQgcmVzdWx0ICovCisJUFFjbGVhcihy ZXMpOworCisJLyogQ29udmVydCB0aGUgVHVwbGVUYWJsZVNsb3QgZGF0YSBpbnRvIGEgVEVYVC1m b3JtYXR0ZWQgbGluZSAqLworCWluaXRTdHJpbmdJbmZvKCZjb3B5X2RhdGEpOworCWZvciAoaSA9 IDA7IGkgPCAqbnVtU2xvdHM7IGkrKykKKwl7CisJCWNvbnZlcnRfc2xvdF90b19jb3B5X3RleHQo JmNvcHlfZGF0YSwgZm1zdGF0ZSwgc2xvdHNbaV0pOworCisJCS8qCisJCSAqIFNlbmQgaW5pdGlh bCBDT1BZIGRhdGEgaWYgdGhlIGJ1ZmZlciByZWFjaGVzIHRoZSBsaW1pdCB0byBhdm9pZAorCQkg KiBsYXJnZSBtZW1vcnkgdXNhZ2UuCisJCSAqLworCQlpZiAoY29weV9kYXRhLmxlbiA+PSBDT1BZ QlVGU0laKQorCQl7CisJCQlpZiAoUFFwdXRDb3B5RGF0YShmbXN0YXRlLT5jb25uLCBjb3B5X2Rh dGEuZGF0YSwgY29weV9kYXRhLmxlbikgPD0gMCkKKwkJCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVM TCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y21kX2NvcHkpOworCQkJcmVzZXRTdHJpbmdJbmZv KCZjb3B5X2RhdGEpOworCQl9CisJfQorCisJLyogU2VuZCB0aGUgcmVtYWluaW5nIENPUFkgZGF0 YSAqLworCWlmIChjb3B5X2RhdGEubGVuID4gMCkKKwl7CisJCWlmIChQUXB1dENvcHlEYXRhKGZt c3RhdGUtPmNvbm4sIGNvcHlfZGF0YS5kYXRhLCBjb3B5X2RhdGEubGVuKSA8PSAwKQorCQkJcGdm ZHdfcmVwb3J0X2Vycm9yKE5VTEwsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KTsK Kwl9CisKKwlwZnJlZShjb3B5X2RhdGEuZGF0YSk7CisKKwkvKiBFbmQgdGhlIENPUFkgb3BlcmF0 aW9uICovCisJaWYgKFBRcHV0Q29weUVuZChmbXN0YXRlLT5jb25uLCBOVUxMKSA8IDAgfHwgUFFm bHVzaChmbXN0YXRlLT5jb25uKSkKKwkJcGdmZHdfcmVwb3J0X2Vycm9yKE5VTEwsIGZtc3RhdGUt PmNvbm4sIGZtc3RhdGUtPmNtZF9jb3B5KTsKKworCS8qCisJICogR2V0IHRoZSByZXN1bHQsIGFu ZCBjaGVjayBmb3Igc3VjY2Vzcy4KKwkgKi8KKwlyZXMgPSBwZ2Zkd19nZXRfcmVzdWx0KGZtc3Rh dGUtPmNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0sp CisJCXBnZmR3X3JlcG9ydF9lcnJvcihyZXMsIGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNtZF9j b3B5KTsKKworCW5fcm93cyA9IGF0b2koUFFjbWRUdXBsZXMocmVzKSk7CisKKwkvKiBBbmQgY2xl YW4gdXAgKi8KKwlQUWNsZWFyKHJlcyk7CisKKwlNZW1vcnlDb250ZXh0UmVzZXQoZm1zdGF0ZS0+ dGVtcF9jeHQpOworCisJKm51bVNsb3RzID0gbl9yb3dzOworCisJLyoKKwkgKiBSZXR1cm4gTlVM TCBpZiBub3RoaW5nIHdhcyBpbnNlcnRlZCBvbiB0aGUgcmVtb3RlIGVuZAorCSAqLworCXJldHVy biAobl9yb3dzID4gMCkgPyBzbG90cyA6IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5oCmluZGV4IGEyYmIxZmYzNTJjLi5mYzY5MjJkZGQ0ZiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmgKQEAgLTIwNCw2ICsyMDQsNyBAQCBleHRlcm4gdm9pZCByZWJ1aWxkSW5z ZXJ0U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCiAJCQkJCQkJIGNoYXIgKm9yaWdf cXVlcnksIExpc3QgKnRhcmdldF9hdHRycywKIAkJCQkJCQkgaW50IHZhbHVlc19lbmRfbGVuLCBp bnQgbnVtX3BhcmFtcywKIAkJCQkJCQkgaW50IG51bV9yb3dzKTsKK2V4dGVybiB2b2lkIGRlcGFy c2VDb3B5U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIExpc3QgKnRhcmdldF9hdHRy cyk7CiBleHRlcm4gdm9pZCBkZXBhcnNlVXBkYXRlU3FsKFN0cmluZ0luZm8gYnVmLCBSYW5nZVRi bEVudHJ5ICpydGUsCiAJCQkJCQkJIEluZGV4IHJ0aW5kZXgsIFJlbGF0aW9uIHJlbCwKIAkJCQkJ CQkgTGlzdCAqdGFyZ2V0QXR0cnMsCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9z cWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19m ZHcuc3FsCmluZGV4IDRmN2FiMmVkMGFjLi44NDBlOTdmZWQyZiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTI2NDMsNiArMjY0MywxNiBAQCB3aXRoIHJl c3VsdCBhcyAoaW5zZXJ0IGludG8gaXRydGVzdCB2YWx1ZXMgKDEsICd0ZXN0MScpLCAoMiwgJ3Rl c3QyJykgcmV0dXJuaW5nCiBkcm9wIHRyaWdnZXIgbG9jdDFfYnJfaW5zZXJ0X3RyaWdnZXIgb24g bG9jdDE7CiBkcm9wIHRyaWdnZXIgbG9jdDJfYnJfaW5zZXJ0X3RyaWdnZXIgb24gbG9jdDI7CiAK Ky0tIFRlc3QgYmF0Y2ggaW5zZXJ0IHVzaW5nIENPUFkgd2l0aCBiYXRjaF93aXRoX2NvcHlfdGhy ZXNob2xkCitkZWxldGUgZnJvbSBpdHJ0ZXN0OworYWx0ZXIgc2VydmVyIGxvb3BiYWNrIG9wdGlv bnMgKGFkZCBiYXRjaF93aXRoX2NvcHlfdGhyZXNob2xkICcyJywgYmF0Y2hfc2l6ZSAnMycpOwor CitpbnNlcnQgaW50byBpdHJ0ZXN0IHZhbHVlcyAoMSwgJ3Rlc3QxJyksICgyLCAndGVzdDInKSwg KDIsICd0ZXN0MycpOworCitzZWxlY3QgKiBmcm9tIGl0cnRlc3Q7CisKK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChkcm9wIGJhdGNoX3dpdGhfY29weV90aHJlc2hvbGQsIGRyb3AgYmF0 Y2hfc2l6ZSk7CisKIGRyb3AgdGFibGUgaXRydGVzdDsKIGRyb3AgdGFibGUgbG9jdDE7CiBkcm9w IHRhYmxlIGxvY3QyOwpAQCAtMjgxNSw2ICsyODI1LDE5IEBAIHNlbGVjdCAqIGZyb20gcmVtMjsK IAogZGVsZXRlIGZyb20gcmVtMjsKIAorLS0gVGVzdCBDT1BZIHdpdGggYmF0Y2hfd2l0aF9jb3B5 X3RocmVzaG9sZAorYWx0ZXIgZm9yZWlnbiB0YWJsZSByZW0yIG9wdGlvbnMgKGFkZCBiYXRjaF93 aXRoX2NvcHlfdGhyZXNob2xkICcyJyk7CisKKy0tIEluc2VydCAzIHJvd3Mgc28gdGhhdCB0aGUg dGhpcmQgcm93IGZhbGxiYWNrIHRvIG5vcm1hbCBJTlNFUlQgc3RhdGVtZW50IHBhdGgKK2NvcHkg cmVtMiBmcm9tIHN0ZGluOworMQlmb28KKzIJYmFyCiszCWJhegorXC4KK3NlbGVjdCAqIGZyb20g cmVtMjsKKworZGVsZXRlIGZyb20gcmVtMjsKKwogLS0gVGVzdCBjaGVjayBjb25zdHJhaW50cwog YWx0ZXIgdGFibGUgbG9jMiBhZGQgY29uc3RyYWludCBsb2MyX2YxcG9zaXRpdmUgY2hlY2sgKGYx ID49IDApOwogYWx0ZXIgZm9yZWlnbiB0YWJsZSByZW0yIGFkZCBjb25zdHJhaW50IHJlbTJfZjFw b3NpdGl2ZSBjaGVjayAoZjEgPj0gMCk7Ci0tIAoyLjUxLjIKCg== --de9568beb313c837bfd26937a6e49315a658052cf1568b75b98945155e3f--