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 1tAOen-00FUsS-0E for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Nov 2024 07:16:16 +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 1tAOek-00C7OR-Do for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Nov 2024 07:16:14 +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 1tAOej-00C7OI-Qq for pgsql-hackers@lists.postgresql.org; Mon, 11 Nov 2024 07:16:14 +0000 Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tAOef-001Fx6-8U for pgsql-hackers@postgresql.org; Mon, 11 Nov 2024 07:16:13 +0000 Received: from phl-compute-06.internal (phl-compute-06.phl.internal [10.202.2.46]) by mailfhigh.phl.internal (Postfix) with ESMTP id 015CC114013B; Mon, 11 Nov 2024 02:16:08 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Mon, 11 Nov 2024 02:16:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eisentraut.org; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1731309367; x= 1731395767; bh=MscGV71fofqgXL4BEEnuRrborwSDZomPzDci1K6KZ/s=; b=E CC/PzReeYxkIfrt4bhDslSe7z7fQxNp9v93iz81FNfEN9xJF4AhXr0Arz5f8SPH4 DkYNOMpezngduP7mwQDZId61QmJI2LOLrDRhqP1QzpiNg5ol52cVY+GD0bcbFyGA Wdh0xPMdCVjTtcuYXaJhwhF6fyfsgIjPaYOvIVOAUw03wJAO8CHxFvuiFTzTaA/l r2SiGqZYElhlLOjQS5yaW/tR8FlzxW07PSkWEVoJpxjlPsQPst9UAghRARgPMw27 olZSR6zEjrpJbrgZ+dmel8hit988VWh14L3/a37u8aJir5QJYrq9/gCt3A8M1ROU PGKpwey3c3/YqP/1B0UCg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1731309367; x=1731395767; bh=MscGV71fofqgXL4BEEnuRrborwSDZomPzDc i1K6KZ/s=; b=hb3FdHudEJ2dw/jSRn1D7EelsUte9HJuDWydjD1s+V5EFjFJROW UEGBbN3GlVItb8lANEgSi6nIqcIqyhB1q4/ab/QOl87Wu5z0VtOsWCTp8SyHU8zd YSX32Ts7sazjXanhkEecE6tb/ggGBNf3uYo+Gnd5fNL4mBfUG8Uavi5rfdKvR1VV cFSzO3v2ues1NRNePO5mFGbRKMTv3lmsjTntAHFpAeMNvb4rjktvrRren6zyRkNq vVgI99JJ0OgpjymB3+2bGWy8oQbLVhpPAA8glLrXmzU74Ve7AjINZwD1fNEjoKGt xE3qiOqjnGhh1DS5wIKgzZ7AUnhCgI4vEIw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefuddruddugddutdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggvpdfu rfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnh htshculddquddttddmnecujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeen ucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhesvghishgvnh htrhgruhhtrdhorhhgqeenucggtffrrghtthgvrhhnpeektdeutdfhvdfhveeigfffteeg vdejvdfhhfevfeevgfdtgfelgeehieevhffgieenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrsegvihhsvghnthhrrghuthdrohhr ghdpnhgspghrtghpthhtohepiedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepug grvhhiugesjhhushhtrghthhgvohhrhidrtghomhdprhgtphhtthhopegtrhgrihhgrdhr ihhnghgvrhesvghnthgvrhhprhhishgvuggsrdgtohhmpdhrtghpthhtohepghgrsghrih gvlhgvrdgsrghrthholhhinhhisegvnhhtvghrphhrihhsvggusgdrtghomhdprhgtphht thhopehrohgsvghrthhmhhgrrghssehgmhgrihhlrdgtohhmpdhrtghpthhtoheprghlvh hhvghrrhgvsegrlhhvhhdrnhhoqdhiphdrohhrghdprhgtphhtthhopehpghhsqhhlqdhh rggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ie0a040ee:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 11 Nov 2024 02:16:06 -0500 (EST) Content-Type: multipart/mixed; boundary="------------4mucMqCvmIHaYr91lUvZrO9F" Message-ID: <0d384836-7e6e-4932-af3b-8dad1f6fee43@eisentraut.org> Date: Mon, 11 Nov 2024 08:16:05 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: RFC: Additional Directory for Extensions To: "David E. Wheeler" , Craig Ringer Cc: Gabriele Bartolini , Robert Haas , Alvaro Herrera , PostgreSQL-development References: <202406251012.brdp2dobkf7n@alvherre.pgsql> From: Peter Eisentraut Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------4mucMqCvmIHaYr91lUvZrO9F Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit I implemented a patch along the lines Craig had suggested. It's a new GUC variable that is a path for extension control files. It's called extension_control_path, and it works exactly the same way as dynamic_library_path. Except that the magic token is called $system instead of $libdir. In fact, most of the patch is refactoring the routines in dfmgr.c to not hardcode dynamic_library_path but allow searching for any file in any path. Once a control file is found, the other extension support files (script files and auxiliary control files) are looked for in the same directory. This works pretty much fine for the use cases that have been presented here, including installing extensions outside of the core installation tree (for CNPG and Postgres.app) and for testing uninstalled extensions (for Debian). There are some TODOs in the patch. Some of those are for documentation that needs to be completed. Others are for functions like pg_available_extensions() that need to be rewritten to be aware of the path. I think this would be pretty straightforward. Some open problems or discussion points: - You can install extensions into alternative directories using PGXS like make install datadir=/else/where/share pkglibdir=/else/where/lib This works. I was hoping it would work to use make install prefix=/else/where but that doesn't because of some details in Makefile.global. I think we can tweak that a little bit to make that work too. - With the current patch, if you install into datadir=/else/where/share, then you need to set extension_control_path=/else/where/share/extension. This is a bit confusing. Maybe we want to make the "extension" part implicit. - The biggest problem is that many extensions set in their control file module_pathname = '$libdir/foo' This disables the use of dynamic_library_path, so this whole idea of installing an extension elsewhere won't work that way. The obvious solution is that extensions change this to just 'foo'. But this will require a lot updating work for many extensions, or a lot of patching by packagers. Maybe we could devise some sort of rule that if the extension control file is found via the path outside of $system, then the leading $libdir is ignored. --------------4mucMqCvmIHaYr91lUvZrO9F Content-Type: text/plain; charset=UTF-8; name="v0-0001-extension_control_path.patch" Content-Disposition: attachment; filename="v0-0001-extension_control_path.patch" Content-Transfer-Encoding: base64 RnJvbSAwODYyMGJhZTU1MWJiNmIyZTNhNDRhYTNkZjRjODc1MWFkMDZmODA0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxMSBOb3YgMjAyNCAwNzoyOTo0NyArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjBdIGV4dGVuc2lvbl9jb250cm9sX3BhdGgKClRoZSBuZXcgR1VDIGV4dGVu c2lvbl9jb250cm9sX3BhdGggc3BlY2lmaWVzIGEgcGF0aCB0byBsb29rIGZvcgpleHRlbnNp b24gY29udHJvbCBmaWxlcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICRzeXN0ZW0sIHdoaWNo IGxvb2tzIGluCnRoZSBjb21waWxlZC1pbiBsb2NhdGlvbiwgYXMgYmVmb3JlLgoKVGhlIHBh dGggc2VhcmNoIHVzZXMgdGhlIHNhbWUgY29kZSBhbmQgd29ya3MgaW4gdGhlIHNhbWUgd2F5 IGFzCmR5bmFtaWNfbGlicmFyeV9wYXRoLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0U3QzdCRkZCLTg4NTctNDhENC1BNzFGLTg4 QjM1OUZBRENGREBqdXN0YXRoZW9yeS5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwgICAgICAgICAgICAgICAgICAgICAgfCAxMyArKysrCiBkb2Mvc3JjL3NnbWwvZXh0ZW5k LnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBkb2Mvc3JjL3NnbWwvcmVmL2Ny ZWF0ZV9leHRlbnNpb24uc2dtbCAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHRlbnNpb24uYyAgICAgICAgICAgICAgfCA1NiArKysrKysrKysrKysrKy0tCiBzcmMv YmFja2VuZC91dGlscy9mbWdyL2RmbWdyLmMgICAgICAgICAgICAgICAgfCA2NCArKysrKysr KysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAg ICAgICAgfCAxMiArKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29u Zi5zYW1wbGUgfCAgMSArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHRlbnNpb24uaCAgICAg ICAgICAgICAgfCAgMiArCiBzcmMvaW5jbHVkZS9mbWdyLmggICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAz NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggZDU0ZjkwNDk1NjkuLmM0NzkwZGU3 MTAyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCkBAIC0xMDQzNCw2ICsxMDQzNCwxOSBAQCA8dGl0bGU+T3Ro ZXIgRGVmYXVsdHM8L3RpdGxlPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWV4dGVuc2lvbi1jb250cm9s LXBhdGgiIHhyZWZsYWJlbD0iZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCI+CisgICAgICA8dGVy bT48dmFybmFtZT5leHRlbnNpb25fY29udHJvbF9wYXRoPC92YXJuYW1lPiAoPHR5cGU+c3Ry aW5nPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5h bWU+ZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJh bWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVE9ETworICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1naW4tZnV6enktc2VhcmNoLWxpbWl0IiB4cmVmbGFi ZWw9Imdpbl9mdXp6eV9zZWFyY2hfbGltaXQiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+Z2lu X2Z1enp5X3NlYXJjaF9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQog ICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9leHRlbmQuc2dt bCBiL2RvYy9zcmMvc2dtbC9leHRlbmQuc2dtbAppbmRleCAyMTg5NDBlZTVjZS4uNzdhNTE3 ZDUxNjcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9leHRlbmQuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvZXh0ZW5kLnNnbWwKQEAgLTYzNSw2ICs2MzUsNyBAQCA8dGl0bGU+RXh0ZW5z aW9uIEZpbGVzPC90aXRsZT4KICAgICA8cHJpbWFyeT5jb250cm9sIGZpbGU8L3ByaW1hcnk+ CiAgICA8L2luZGV4dGVybT4KIAorICAgIDwhLS0gVE9ETyAtLT4KICAgICA8cGFyYT4KICAg ICAgVGhlIDxjb21tYW5kPkNSRUFURSBFWFRFTlNJT048L2NvbW1hbmQ+IGNvbW1hbmQgcmVs aWVzIG9uIGEgY29udHJvbAogICAgICBmaWxlIGZvciBlYWNoIGV4dGVuc2lvbiwgd2hpY2gg bXVzdCBiZSBuYW1lZCB0aGUgc2FtZSBhcyB0aGUgZXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9leHRlbnNpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX2V4dGVuc2lvbi5zZ21sCmluZGV4IGNhMmI4MGQ2NjljLi5jMjYyMThmM2Fk ZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZXh0ZW5zaW9uLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZXh0ZW5zaW9uLnNnbWwKQEAgLTkyLDYg KzkyLDcgQEAgPHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgogICAgICAgICBpbnN0YWxsZWQu IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gd2lsbCBjcmVhdGUgdGhl CiAgICAgICAgIGV4dGVuc2lvbiB1c2luZyBkZXRhaWxzIGZyb20gdGhlIGZpbGUKICAgICAg ICAgPGxpdGVyYWw+U0hBUkVESVIvZXh0ZW5zaW9uLzwvbGl0ZXJhbD48cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZXh0ZW5zaW9uX25hbWU8L3JlcGxhY2VhYmxlPjxsaXRlcmFs Pi5jb250cm9sPC9saXRlcmFsPi4KKyAgICAgICAgPCEtLSBUT0RPIC0tPgogICAgICAgIDwv cGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXh0ZW5zaW9uLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHRlbnNpb24uYwppbmRleCBhZjZiZDhmZjQyNi4uYjMyOGU4ZTI4ZjQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCkBAIC02OSw2ICs2OSw5IEBACiAjaW5jbHVk ZSAidXRpbHMvdmFybGVuYS5oIgogCiAKKy8qIEdVQyAqLworY2hhcgkgICAqRXh0ZW5zaW9u X2NvbnRyb2xfcGF0aDsKKwogLyogR2xvYmFsbHkgdmlzaWJsZSBzdGF0ZSB2YXJpYWJsZXMg Ki8KIGJvb2wJCWNyZWF0aW5nX2V4dGVuc2lvbiA9IGZhbHNlOwogT2lkCQkJQ3VycmVudEV4 dGVuc2lvbk9iamVjdCA9IEludmFsaWRPaWQ7CkBAIC03OSw2ICs4Miw3IEBAIE9pZAkJCUN1 cnJlbnRFeHRlbnNpb25PYmplY3QgPSBJbnZhbGlkT2lkOwogdHlwZWRlZiBzdHJ1Y3QgRXh0 ZW5zaW9uQ29udHJvbEZpbGUKIHsKIAljaGFyCSAgICpuYW1lOwkJCS8qIG5hbWUgb2YgdGhl IGV4dGVuc2lvbiAqLworCWNoYXIJICAgKmNvbnRyb2xfZGlyOwkvKiBkaXJlY3Rvcnkgd2hl cmUgY29udHJvbCBmaWxlIHdhcyBmb3VuZCAqLwogCWNoYXIJICAgKmRpcmVjdG9yeTsJCS8q IGRpcmVjdG9yeSBmb3Igc2NyaXB0IGZpbGVzICovCiAJY2hhcgkgICAqZGVmYXVsdF92ZXJz aW9uOwkvKiBkZWZhdWx0IGluc3RhbGwgdGFyZ2V0IHZlcnNpb24sIGlmIGFueSAqLwogCWNo YXIJICAgKm1vZHVsZV9wYXRobmFtZTsJLyogc3RyaW5nIHRvIHN1YnN0aXR1dGUgZm9yCkBA IC0zMjgsNiArMzMyLDkgQEAgaXNfZXh0ZW5zaW9uX3NjcmlwdF9maWxlbmFtZShjb25zdCBj aGFyICpmaWxlbmFtZSkKIAlyZXR1cm4gKGV4dGVuc2lvbiAhPSBOVUxMKSAmJiAoc3RyY21w KGV4dGVuc2lvbiwgIi5zcWwiKSA9PSAwKTsKIH0KIAorLy8gVE9ETworLy8gVGhpcyBpcyBu b3cgb25seSBmb3IgZmluZGluZy9saXN0aW5nIGF2YWlsYWJsZSBleHRlbnNpb25zLiAgUmV3 cml0ZSB0byB1c2UKKy8vIHBhdGguICBTZWUgZnVydGhlciBUT0RPcyBiZWxvdy4KIHN0YXRp YyBjaGFyICoKIGdldF9leHRlbnNpb25fY29udHJvbF9kaXJlY3Rvcnkodm9pZCkKIHsKQEAg LTM0MSwxNiArMzQ4LDM2IEBAIGdldF9leHRlbnNpb25fY29udHJvbF9kaXJlY3Rvcnkodm9p ZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogRmluZCBjb250cm9sIGZpbGUgZm9y IGV4dGVuc2lvbiB3aXRoIG5hbWUgaW4gY29udHJvbC0+bmFtZSwgbG9va2luZyBpbiB0aGUK KyAqIHBhdGguICBSZXR1cm4gdGhlIGZ1bGwgZmlsZSBuYW1lLCBvciBOVUxMIGlmIG5vdCBm b3VuZC4gIElmIGZvdW5kLCB0aGUKKyAqIGRpcmVjdG9yeSBpcyByZWNvcmRlZCBpbiBjb250 cm9sLT5jb250cm9sX2Rpci4KKyAqLwogc3RhdGljIGNoYXIgKgotZ2V0X2V4dGVuc2lvbl9j b250cm9sX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmV4dG5hbWUpCitmaW5kX2V4dGVuc2lvbl9j b250cm9sX2ZpbGVuYW1lKEV4dGVuc2lvbkNvbnRyb2xGaWxlICpjb250cm9sKQogewogCWNo YXIJCXNoYXJlcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJICAgKnN5c3RlbV9kaXI7CisJY2hh cgkgICAqYmFzZW5hbWU7CiAJY2hhcgkgICAqcmVzdWx0OwogCisJQXNzZXJ0KGNvbnRyb2wt Pm5hbWUpOworCiAJZ2V0X3NoYXJlX3BhdGgobXlfZXhlY19wYXRoLCBzaGFyZXBhdGgpOwot CXJlc3VsdCA9IChjaGFyICopIHBhbGxvYyhNQVhQR1BBVEgpOwotCXNucHJpbnRmKHJlc3Vs dCwgTUFYUEdQQVRILCAiJXMvZXh0ZW5zaW9uLyVzLmNvbnRyb2wiLAotCQkJIHNoYXJlcGF0 aCwgZXh0bmFtZSk7CisJc3lzdGVtX2RpciA9IHBzcHJpbnRmKCIlcy9leHRlbnNpb24iLCBz aGFyZXBhdGgpOworCisJYmFzZW5hbWUgPSBwc3ByaW50ZigiJXMuY29udHJvbCIsIGNvbnRy b2wtPm5hbWUpOworCisJcmVzdWx0ID0gZmluZF9pbl9wYXRoKGJhc2VuYW1lLCBFeHRlbnNp b25fY29udHJvbF9wYXRoLCAiZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCIsICIkc3lzdGVtIiwg c3lzdGVtX2Rpcik7CisKKwlpZiAocmVzdWx0KQorCXsKKwkJY29uc3QgY2hhciAqcDsKKwor CQlwID0gc3RycmNocihyZXN1bHQsICcvJyk7CisJCUFzc2VydChwKTsKKwkJY29udHJvbC0+ Y29udHJvbF9kaXIgPSBwbnN0cmR1cChyZXN1bHQsIHAgLSByZXN1bHQpOworCX0KIAogCXJl dHVybiByZXN1bHQ7CiB9CkBAIC0zNjYsNyArMzkzLDcgQEAgZ2V0X2V4dGVuc2lvbl9zY3Jp cHRfZGlyZWN0b3J5KEV4dGVuc2lvbkNvbnRyb2xGaWxlICpjb250cm9sKQogCSAqIGluc3Rh bGxhdGlvbidzIHNoYXJlIGRpcmVjdG9yeS4KIAkgKi8KIAlpZiAoIWNvbnRyb2wtPmRpcmVj dG9yeSkKLQkJcmV0dXJuIGdldF9leHRlbnNpb25fY29udHJvbF9kaXJlY3RvcnkoKTsKKwkJ cmV0dXJuIHBzdHJkdXAoY29udHJvbC0+Y29udHJvbF9kaXIpOwogCiAJaWYgKGlzX2Fic29s dXRlX3BhdGgoY29udHJvbC0+ZGlyZWN0b3J5KSkKIAkJcmV0dXJuIHBzdHJkdXAoY29udHJv bC0+ZGlyZWN0b3J5KTsKQEAgLTQ0NCw3ICs0NzEsMTUgQEAgcGFyc2VfZXh0ZW5zaW9uX2Nv bnRyb2xfZmlsZShFeHRlbnNpb25Db250cm9sRmlsZSAqY29udHJvbCwKIAlpZiAodmVyc2lv bikKIAkJZmlsZW5hbWUgPSBnZXRfZXh0ZW5zaW9uX2F1eF9jb250cm9sX2ZpbGVuYW1lKGNv bnRyb2wsIHZlcnNpb24pOwogCWVsc2UKLQkJZmlsZW5hbWUgPSBnZXRfZXh0ZW5zaW9uX2Nv bnRyb2xfZmlsZW5hbWUoY29udHJvbC0+bmFtZSk7CisJCWZpbGVuYW1lID0gZmluZF9leHRl bnNpb25fY29udHJvbF9maWxlbmFtZShjb250cm9sKTsKKworCWlmICghZmlsZW5hbWUpCisJ eworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwgLy8gWFhYPworCQkJCSBlcnJtc2coImV4dGVuc2lvbiBcIiVzXCIgaXMg bm90IGF2YWlsYWJsZSIsIGNvbnRyb2wtPm5hbWUpLAorCQkJCSBlcnJoaW50KCJUaGUgZXh0 ZW5zaW9uIG11c3QgZmlyc3QgYmUgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gd2hlcmUgUG9z dGdyZVNRTCBpcyBydW5uaW5nLiIpKSk7CisJfQogCiAJaWYgKChmaWxlID0gQWxsb2NhdGVG aWxlKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKQogCXsKQEAgLTQ1Nyw2ICs0OTIsNyBAQCBw YXJzZV9leHRlbnNpb25fY29udHJvbF9maWxlKEV4dGVuc2lvbkNvbnRyb2xGaWxlICpjb250 cm9sLAogCQkJCXJldHVybjsKIAkJCX0KIAorCQkJLy8gVE9ETzogdGhpcyBjaGVjayBpcyBv YnNvbGV0ZT8KIAkJCS8qIG1pc3NpbmcgY29udHJvbCBmaWxlIGluZGljYXRlcyBleHRlbnNp b24gaXMgbm90IGluc3RhbGxlZCAqLwogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApAQCAtMjExNCw2ICsyMTUwLDgg QEAgUmVtb3ZlRXh0ZW5zaW9uQnlJZChPaWQgZXh0SWQpCiAgKiBUaGUgc3lzdGVtIHZpZXcg cGdfYXZhaWxhYmxlX2V4dGVuc2lvbnMgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZSB0byB0 aGlzCiAgKiBTUkYsIGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIHRoZSBleHRl bnNpb25zIGFyZSBpbnN0YWxsZWQgaW4gdGhlCiAgKiBjdXJyZW50IERCLgorICoKKyAqIFRP RE8KICAqLwogRGF0dW0KIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCkBAIC0yMTk0LDYgKzIyMzIsOCBAQCBwZ19hdmFpbGFibGVfZXh0ZW5zaW9ucyhQR19G VU5DVElPTl9BUkdTKQogICogVGhlIHN5c3RlbSB2aWV3IHBnX2F2YWlsYWJsZV9leHRlbnNp b25fdmVyc2lvbnMgcHJvdmlkZXMgYSB1c2VyIGludGVyZmFjZQogICogdG8gdGhpcyBTUkYs IGFkZGluZyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCB2ZXJzaW9ucyBhcmUgaW5zdGFsbGVk IGluIHRoZQogICogY3VycmVudCBEQi4KKyAqCisgKiBUT0RPCiAgKi8KIERhdHVtCiBwZ19h dmFpbGFibGVfZXh0ZW5zaW9uX3ZlcnNpb25zKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC0yMzY2 LDYgKzI0MDYsOCBAQCBnZXRfYXZhaWxhYmxlX3ZlcnNpb25zX2Zvcl9leHRlbnNpb24oRXh0 ZW5zaW9uQ29udHJvbEZpbGUgKnBjb250cm9sLAogICogZGlyZWN0b3J5LiAgVGhhdCdzIG5v dCBhIGJ1bGxldHByb29mIGNoZWNrLCBzaW5jZSB0aGUgZmlsZSBtaWdodCBiZQogICogaW52 YWxpZCwgYnV0IHRoaXMgaXMgb25seSB1c2VkIGZvciBoaW50cyBzbyBpdCBkb2Vzbid0IGhh dmUgdG8gYmUgMTAwJQogICogcmlnaHQuCisgKgorICogVE9ETwogICovCiBib29sCiBleHRl bnNpb25fZmlsZV9leGlzdHMoY29uc3QgY2hhciAqZXh0ZW5zaW9uTmFtZSkKQEAgLTI0NDUs NiArMjQ4Nyw4IEBAIGNvbnZlcnRfcmVxdWlyZXNfdG9fZGF0dW0oTGlzdCAqcmVxdWlyZXMp CiAvKgogICogVGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSB2ZXJzaW9uIHVwZGF0ZSBwYXRo cyB0aGF0IGV4aXN0IGZvciB0aGUKICAqIHNwZWNpZmllZCBleHRlbnNpb24uCisgKgorICog VE9ETwogICovCiBEYXR1bQogcGdfZXh0ZW5zaW9uX3VwZGF0ZV9wYXRocyhQR19GVU5DVElP Tl9BUkdTKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9kZm1nci5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvZm1nci9kZm1nci5jCmluZGV4IGM3YWE3ODliNTFiLi5kMzQ4 ZDMwZDllNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9kZm1nci5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZGZtZ3IuYwpAQCAtODEsOCArODEsNyBAQCBz dGF0aWMgdm9pZCBpbmNvbXBhdGlibGVfbW9kdWxlX2Vycm9yKGNvbnN0IGNoYXIgKmxpYm5h bWUsCiAJCQkJCQkJCQkgIGNvbnN0IFBnX21hZ2ljX3N0cnVjdCAqbW9kdWxlX21hZ2ljX2Rh dGEpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIGNoYXIgKmV4cGFuZF9keW5h bWljX2xpYnJhcnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKIHN0YXRpYyB2b2lkIGNoZWNr X3Jlc3RyaWN0ZWRfbGlicmFyeV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwotc3RhdGljIGNo YXIgKnN1YnN0aXR1dGVfbGlicGF0aF9tYWNybyhjb25zdCBjaGFyICpuYW1lKTsKLXN0YXRp YyBjaGFyICpmaW5kX2luX2R5bmFtaWNfbGlicGF0aChjb25zdCBjaGFyICpiYXNlbmFtZSk7 CitzdGF0aWMgY2hhciAqc3Vic3RpdHV0ZV9wYXRoX21hY3JvKGNvbnN0IGNoYXIgKnN0ciwg Y29uc3QgY2hhciAqbWFjcm8sIGNvbnN0IGNoYXIgKnZhbHVlKTsKIAogLyogTWFnaWMgc3Ry dWN0dXJlIHRoYXQgbW9kdWxlIG5lZWRzIHRvIG1hdGNoIHRvIGJlIGFjY2VwdGVkICovCiBz dGF0aWMgY29uc3QgUGdfbWFnaWNfc3RydWN0IG1hZ2ljX2RhdGEgPSBQR19NT0RVTEVfTUFH SUNfREFUQTsKQEAgLTQwOCw3ICs0MDcsNyBAQCBpbmNvbXBhdGlibGVfbW9kdWxlX2Vycm9y KGNvbnN0IGNoYXIgKmxpYm5hbWUsCiAvKgogICogSWYgbmFtZSBjb250YWlucyBhIHNsYXNo LCBjaGVjayBpZiB0aGUgZmlsZSBleGlzdHMsIGlmIHNvIHJldHVybgogICogdGhlIG5hbWUu ICBFbHNlIChubyBzbGFzaCkgdHJ5IHRvIGV4cGFuZCB1c2luZyBzZWFyY2ggcGF0aCAoc2Vl Ci0gKiBmaW5kX2luX2R5bmFtaWNfbGlicGF0aCBiZWxvdyk7IGlmIHRoYXQgd29ya3MsIHJl dHVybiB0aGUgZnVsbHkKKyAqIGZpbmRfaW5fcGF0aCBiZWxvdyk7IGlmIHRoYXQgd29ya3Ms IHJldHVybiB0aGUgZnVsbHkKICAqIGV4cGFuZGVkIGZpbGUgbmFtZS4gIElmIHRoZSBwcmV2 aW91cyBmYWlsZWQsIGFwcGVuZCBETFNVRkZJWCBhbmQKICAqIHRyeSBhZ2Fpbi4gIElmIGFs bCBmYWlscywganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIG5hbWUuCiAgKgpAQCAtNDI3LDEz ICs0MjYsMTMgQEAgZXhwYW5kX2R5bmFtaWNfbGlicmFyeV9uYW1lKGNvbnN0IGNoYXIgKm5h bWUpCiAKIAlpZiAoIWhhdmVfc2xhc2gpCiAJewotCQlmdWxsID0gZmluZF9pbl9keW5hbWlj X2xpYnBhdGgobmFtZSk7CisJCWZ1bGwgPSBmaW5kX2luX3BhdGgobmFtZSwgRHluYW1pY19s aWJyYXJ5X3BhdGgsICJkeW5hbWljX2xpYnJhcnlfcGF0aCIsICIkbGliZGlyIiwgcGtnbGli X3BhdGgpOwogCQlpZiAoZnVsbCkKIAkJCXJldHVybiBmdWxsOwogCX0KIAllbHNlCiAJewot CQlmdWxsID0gc3Vic3RpdHV0ZV9saWJwYXRoX21hY3JvKG5hbWUpOworCQlmdWxsID0gc3Vi c3RpdHV0ZV9wYXRoX21hY3JvKG5hbWUsICIkbGliZGlyIiwgcGtnbGliX3BhdGgpOwogCQlp ZiAocGdfZmlsZV9leGlzdHMoZnVsbCkpCiAJCQlyZXR1cm4gZnVsbDsKIAkJcGZyZWUoZnVs bCk7CkBAIC00NDMsMTQgKzQ0MiwxNCBAQCBleHBhbmRfZHluYW1pY19saWJyYXJ5X25hbWUo Y29uc3QgY2hhciAqbmFtZSkKIAogCWlmICghaGF2ZV9zbGFzaCkKIAl7Ci0JCWZ1bGwgPSBm aW5kX2luX2R5bmFtaWNfbGlicGF0aChuZXcpOworCQlmdWxsID0gZmluZF9pbl9wYXRoKG5l dywgRHluYW1pY19saWJyYXJ5X3BhdGgsICJkeW5hbWljX2xpYnJhcnlfcGF0aCIsICIkbGli ZGlyIiwgcGtnbGliX3BhdGgpOwogCQlwZnJlZShuZXcpOwogCQlpZiAoZnVsbCkKIAkJCXJl dHVybiBmdWxsOwogCX0KIAllbHNlCiAJewotCQlmdWxsID0gc3Vic3RpdHV0ZV9saWJwYXRo X21hY3JvKG5ldyk7CisJCWZ1bGwgPSBzdWJzdGl0dXRlX3BhdGhfbWFjcm8obmV3LCAiJGxp YmRpciIsIHBrZ2xpYl9wYXRoKTsKIAkJcGZyZWUobmV3KTsKIAkJaWYgKHBnX2ZpbGVfZXhp c3RzKGZ1bGwpKQogCQkJcmV0dXJuIGZ1bGw7CkBAIC00ODUsNDcgKzQ4NCw1NiBAQCBjaGVj a19yZXN0cmljdGVkX2xpYnJhcnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQogICogUmVzdWx0 IGlzIGFsd2F5cyBmcmVzaGx5IHBhbGxvYydkLgogICovCiBzdGF0aWMgY2hhciAqCi1zdWJz dGl0dXRlX2xpYnBhdGhfbWFjcm8oY29uc3QgY2hhciAqbmFtZSkKK3N1YnN0aXR1dGVfcGF0 aF9tYWNybyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKm1hY3JvLCBjb25zdCBjaGFy ICp2YWx1ZSkKIHsKIAljb25zdCBjaGFyICpzZXBfcHRyOwogCi0JQXNzZXJ0KG5hbWUgIT0g TlVMTCk7CisJQXNzZXJ0KHN0ciAhPSBOVUxMKTsKKwlBc3NlcnQobWFjcm9bMF0gPT0gJyQn KTsKIAotCS8qIEN1cnJlbnRseSwgd2Ugb25seSByZWNvZ25pemUgJGxpYmRpciBhdCB0aGUg c3RhcnQgb2YgdGhlIHN0cmluZyAqLwotCWlmIChuYW1lWzBdICE9ICckJykKLQkJcmV0dXJu IHBzdHJkdXAobmFtZSk7CisJLyogQ3VycmVudGx5LCB3ZSBvbmx5IHJlY29nbml6ZSAkbWFj cm8gYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgKi8KKwlpZiAoc3RyWzBdICE9ICckJykK KwkJcmV0dXJuIHBzdHJkdXAoc3RyKTsKIAotCWlmICgoc2VwX3B0ciA9IGZpcnN0X2Rpcl9z ZXBhcmF0b3IobmFtZSkpID09IE5VTEwpCi0JCXNlcF9wdHIgPSBuYW1lICsgc3RybGVuKG5h bWUpOworCWlmICgoc2VwX3B0ciA9IGZpcnN0X2Rpcl9zZXBhcmF0b3Ioc3RyKSkgPT0gTlVM TCkKKwkJc2VwX3B0ciA9IHN0ciArIHN0cmxlbihzdHIpOwogCi0JaWYgKHN0cmxlbigiJGxp YmRpciIpICE9IHNlcF9wdHIgLSBuYW1lIHx8Ci0JCXN0cm5jbXAobmFtZSwgIiRsaWJkaXIi LCBzdHJsZW4oIiRsaWJkaXIiKSkgIT0gMCkKKwlpZiAoc3RybGVuKG1hY3JvKSAhPSBzZXBf cHRyIC0gc3RyIHx8CisJCXN0cm5jbXAoc3RyLCBtYWNybywgc3RybGVuKG1hY3JvKSkgIT0g MCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfTkFN RSksCi0JCQkJIGVycm1zZygiaW52YWxpZCBtYWNybyBuYW1lIGluIGR5bmFtaWMgbGlicmFy eSBwYXRoOiAlcyIsCi0JCQkJCQluYW1lKSkpOworCQkJCSBlcnJtc2coImludmFsaWQgbWFj cm8gbmFtZSBpbiBwYXRoOiAlcyIsCisJCQkJCQlzdHIpKSk7CiAKLQlyZXR1cm4gcHNwcmlu dGYoIiVzJXMiLCBwa2dsaWJfcGF0aCwgc2VwX3B0cik7CisJcmV0dXJuIHBzcHJpbnRmKCIl cyVzIiwgdmFsdWUsIHNlcF9wdHIpOwogfQogCiAKIC8qCiAgKiBTZWFyY2ggZm9yIGEgZmls ZSBjYWxsZWQgJ2Jhc2VuYW1lJyBpbiB0aGUgY29sb24tc2VwYXJhdGVkIHNlYXJjaAotICog cGF0aCBEeW5hbWljX2xpYnJhcnlfcGF0aC4gIElmIHRoZSBmaWxlIGlzIGZvdW5kLCB0aGUg ZnVsbCBmaWxlIG5hbWUKKyAqIHBhdGggZ2l2ZW4uICBJZiB0aGUgZmlsZSBpcyBmb3VuZCwg dGhlIGZ1bGwgZmlsZSBuYW1lCiAgKiBpcyByZXR1cm5lZCBpbiBmcmVzaGx5IHBhbGxvYydk IG1lbW9yeS4gIElmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCwKICAqIHJldHVybiBOVUxMLgor ICoKKyAqIHBhdGhfcGFyYW0gaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB0aGF0IHBh dGggY2FtZSBmcm9tLCBmb3IgZXJyb3IKKyAqIG1lc3NhZ2VzLgorICoKKyAqIG1hY3JvIGFu ZCBtYWNyb192YWwgYWxsb3cgc3Vic3RpdHV0aW5nIGEgbWFjcm87IHNlZQorICogc3Vic3Rp dHV0ZV9wYXRoX21hY3JvKCkuCiAgKi8KLXN0YXRpYyBjaGFyICoKLWZpbmRfaW5fZHluYW1p Y19saWJwYXRoKGNvbnN0IGNoYXIgKmJhc2VuYW1lKQorY2hhciAqCitmaW5kX2luX3BhdGgo Y29uc3QgY2hhciAqYmFzZW5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBh dGhfcGFyYW0sCisJCQkgY29uc3QgY2hhciAqbWFjcm8sIGNvbnN0IGNoYXIgKm1hY3JvX3Zh bCkKIHsKIAljb25zdCBjaGFyICpwOwogCXNpemVfdAkJYmFzZWxlbjsKIAogCUFzc2VydChi YXNlbmFtZSAhPSBOVUxMKTsKIAlBc3NlcnQoZmlyc3RfZGlyX3NlcGFyYXRvcihiYXNlbmFt ZSkgPT0gTlVMTCk7Ci0JQXNzZXJ0KER5bmFtaWNfbGlicmFyeV9wYXRoICE9IE5VTEwpOwor CUFzc2VydChwYXRoICE9IE5VTEwpOworCUFzc2VydChwYXRoX3BhcmFtICE9IE5VTEwpOwog Ci0JcCA9IER5bmFtaWNfbGlicmFyeV9wYXRoOworCXAgPSBwYXRoOwogCWlmIChzdHJsZW4o cCkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTU0Miw3ICs1NTAsNyBAQCBmaW5kX2lu X2R5bmFtaWNfbGlicGF0aChjb25zdCBjaGFyICpiYXNlbmFtZSkKIAkJaWYgKHBpZWNlID09 IHApCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf TkFNRSksCi0JCQkJCSBlcnJtc2coInplcm8tbGVuZ3RoIGNvbXBvbmVudCBpbiBwYXJhbWV0 ZXIgXCJkeW5hbWljX2xpYnJhcnlfcGF0aFwiIikpKTsKKwkJCQkJIGVycm1zZygiemVyby1s ZW5ndGggY29tcG9uZW50IGluIHBhcmFtZXRlciBcIiVzXCIiLCBwYXRoX3BhcmFtKSkpOwog CiAJCWlmIChwaWVjZSA9PSBOVUxMKQogCQkJbGVuID0gc3RybGVuKHApOwpAQCAtNTUyLDcg KzU2MCw3IEBAIGZpbmRfaW5fZHluYW1pY19saWJwYXRoKGNvbnN0IGNoYXIgKmJhc2VuYW1l KQogCQlwaWVjZSA9IHBhbGxvYyhsZW4gKyAxKTsKIAkJc3RybGNweShwaWVjZSwgcCwgbGVu ICsgMSk7CiAKLQkJbWFuZ2xlZCA9IHN1YnN0aXR1dGVfbGlicGF0aF9tYWNybyhwaWVjZSk7 CisJCW1hbmdsZWQgPSBzdWJzdGl0dXRlX3BhdGhfbWFjcm8ocGllY2UsIG1hY3JvLCBtYWNy b192YWwpOwogCQlwZnJlZShwaWVjZSk7CiAKIAkJY2Fub25pY2FsaXplX3BhdGgobWFuZ2xl ZCk7CkBAIC01NjEsMTMgKzU2OSwxMyBAQCBmaW5kX2luX2R5bmFtaWNfbGlicGF0aChjb25z dCBjaGFyICpiYXNlbmFtZSkKIAkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKG1hbmdsZWQpKQog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX05BTUUp LAotCQkJCQkgZXJybXNnKCJjb21wb25lbnQgaW4gcGFyYW1ldGVyIFwiZHluYW1pY19saWJy YXJ5X3BhdGhcIiBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCIpKSk7CisJCQkJCSBlcnJtc2co ImNvbXBvbmVudCBpbiBwYXJhbWV0ZXIgXCIlc1wiIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRo IiwgcGF0aF9wYXJhbSkpKTsKIAogCQlmdWxsID0gcGFsbG9jKHN0cmxlbihtYW5nbGVkKSAr IDEgKyBiYXNlbGVuICsgMSk7CiAJCXNwcmludGYoZnVsbCwgIiVzLyVzIiwgbWFuZ2xlZCwg YmFzZW5hbWUpOwogCQlwZnJlZShtYW5nbGVkKTsKIAotCQllbG9nKERFQlVHMywgImZpbmRf aW5fZHluYW1pY19saWJwYXRoOiB0cnlpbmcgXCIlc1wiIiwgZnVsbCk7CisJCWVsb2coREVC VUczLCAiJXM6IHRyeWluZyBcIiVzXCIiLCBfX2Z1bmNfXywgZnVsbCk7CiAKIAkJaWYgKHBn X2ZpbGVfZXhpc3RzKGZ1bGwpKQogCQkJcmV0dXJuIGZ1bGw7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jCmluZGV4IDhhNjdmMDEyMDBjLi41YTAwYjk5ZGFiYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs dWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXh0 ZW5zaW9uLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2Vy LmgiCkBAIC00MjMzLDYgKzQyMzQsMTcgQEAgc3RydWN0IGNvbmZpZ19zdHJpbmcgQ29uZmln dXJlTmFtZXNTdHJpbmdbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7 ImV4dGVuc2lvbl9jb250cm9sX3BhdGgiLCBQR0NfU1VTRVQsIENMSUVOVF9DT05OX09USEVS LAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBwYXRoIGZvciBleHRlbnNpb24gY29udHJv bCBmaWxlcy4iKSwKKwkJCWdldHRleHRfbm9vcCgiVE9ETyIpLAorCQkJR1VDX1NVUEVSVVNF Ul9PTkxZCisJCX0sCisJCSZFeHRlbnNpb25fY29udHJvbF9wYXRoLAorCQkiJHN5c3RlbSIs CisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImtyYl9zZXJ2ZXJfa2V5Zmls ZSIsIFBHQ19TSUdIVVAsIENPTk5fQVVUSF9BVVRILAogCQkJZ2V0dGV4dF9ub29wKCJTZXRz IHRoZSBsb2NhdGlvbiBvZiB0aGUgS2VyYmVyb3Mgc2VydmVyIGtleSBmaWxlLiIpLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4 IDM5YTNhYzIzMTI3Li41MThjNGY0MDcxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNzcyLDYgKzc3Miw3IEBACiAjIC0g T3RoZXIgRGVmYXVsdHMgLQogCiAjZHluYW1pY19saWJyYXJ5X3BhdGggPSAnJGxpYmRpcicK KyNleHRlbnNpb25fY29udHJvbF9wYXRoID0gJyRzeXN0ZW0nCiAjZ2luX2Z1enp5X3NlYXJj aF9saW1pdCA9IDAKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHRl bnNpb24uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4dGVuc2lvbi5oCmluZGV4IGM2ZjNm ODY3ZWI3Li5mZThhOTc1NzBlYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXh0ZW5zaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXh0ZW5zaW9uLmgKQEAg LTE3LDYgKzE3LDggQEAKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNp bmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCisvKiBHVUMgKi8KK2V4dGVybiBQR0RM TElNUE9SVCBjaGFyICpFeHRlbnNpb25fY29udHJvbF9wYXRoOwogCiAvKgogICogY3JlYXRp bmdfZXh0ZW5zaW9uIGlzIG9ubHkgdHJ1ZSB3aGlsZSBydW5uaW5nIGEgQ1JFQVRFIEVYVEVO U0lPTiBvciBBTFRFUgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZm1nci5oIGIvc3JjL2lu Y2x1ZGUvZm1nci5oCmluZGV4IDFlMzc5NWRlNGE4Li4yOTMwYjYxY2VlNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL2ZtZ3IuaApAQCAtNzQw LDYgKzc0MCw4IEBAIGV4dGVybiBib29sIENoZWNrRnVuY3Rpb25WYWxpZGF0b3JBY2Nlc3Mo T2lkIHZhbGlkYXRvck9pZCwgT2lkIGZ1bmN0aW9uT2lkKTsKICAqLwogZXh0ZXJuIFBHRExM SU1QT1JUIGNoYXIgKkR5bmFtaWNfbGlicmFyeV9wYXRoOwogCitleHRlcm4gY2hhciAqZmlu ZF9pbl9wYXRoKGNvbnN0IGNoYXIgKmJhc2VuYW1lLCBjb25zdCBjaGFyICpwYXRoLCBjb25z dCBjaGFyICpwYXRoX3BhcmFtLAorCQkJCQkJICBjb25zdCBjaGFyICptYWNybywgY29uc3Qg Y2hhciAqbWFjcm9fdmFsKTsKIGV4dGVybiB2b2lkICpsb2FkX2V4dGVybmFsX2Z1bmN0aW9u KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmdW5jbmFtZSwKIAkJCQkJCQkJ CWJvb2wgc2lnbmFsTm90Rm91bmQsIHZvaWQgKipmaWxlaGFuZGxlKTsKIGV4dGVybiB2b2lk ICpsb29rdXBfZXh0ZXJuYWxfZnVuY3Rpb24odm9pZCAqZmlsZWhhbmRsZSwgY29uc3QgY2hh ciAqZnVuY25hbWUpOwoKYmFzZS1jb21taXQ6IGU3YTk0OTZkZTkwNjU3ZTIxNjFmNjhiM2E1 YTliMmQ5YjBiN2JiMDcKLS0gCjIuNDcuMAoK --------------4mucMqCvmIHaYr91lUvZrO9F--