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 1szMHp-005e9R-8c for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Oct 2024 20:30:57 +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 1szMHm-00B0wM-KW for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Oct 2024 20:30:54 +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 1szMHl-00B0vz-Rp for pgsql-hackers@lists.postgresql.org; Fri, 11 Oct 2024 20:30:54 +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 1szMHj-000PuG-3I for pgsql-hackers@lists.postgresql.org; Fri, 11 Oct 2024 20:30:52 +0000 Received: from phl-compute-11.internal (phl-compute-11.phl.internal [10.202.2.51]) by mailfhigh.phl.internal (Postfix) with ESMTP id A5FBB1140220 for ; Fri, 11 Oct 2024 16:30:49 -0400 (EDT) Received: from phl-imap-02 ([10.202.2.81]) by phl-compute-11.internal (MEProxy); Fri, 11 Oct 2024 16:30:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:content-type:content-type:date:date:from:from:in-reply-to :message-id:mime-version:reply-to:subject:subject:to:to; s=fm2; t=1728678649; x=1728765049; bh=xEl6K2SukxAKUZJOu+bu13tYA93e7fHq 40SvzgC3q/U=; b=qDAMuA6hWDir0Bu19wrlJ/DB5zJP3GzP6bTv9/gHzoc5TbYd Q2wup/w0xg8+l8KXF1lc5qCw5mOAXqbVY+1wVQ9ND9MFs0qXLx2mUevw/gcqhwdy hd971LBUPHTxwEcPFkOMeJmNT8uCsGcwjASSMXmmDXJWr3tZQM+u+ywBRjTOS7Tf qkvd1Wj1wZvjVkbD96lnyoJPNroossT3HiHxZdnPBkRykt3J0Gz1CYgYFUhdScfr f5oFM6hzbyh/LKdb+FPpuOJzUr7srdZL5dsc/feAxzThZ0srzn0iniGjwSW2ZVQM iDY6MCalcD1jgwqN7IAqou499FK7M8nr05MQVA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:message-id :mime-version:reply-to:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1728678649; x=1728765049; bh=xEl6K2SukxAKUZJOu+bu13tYA93e7fHq40S vzgC3q/U=; b=MJdi0QIZNf61Bm1cMdth81HVyoWnDc2lwSmbeSdPeY/fX19pUTO bemnGvv7n7YP23amTu6/gccru00STTWc7VwsADl5iMDejZOBIJabNYCQQ0CH+iNN WS+s8I7lLqUkiWG98NUHcWpYLRxr/OWth3hjnUyDTCxCXjFScN1pu8wo9HcPJAAE YtgoTKdSPyS4sIBS1bfTdUv2WIKyFkUUb5xK7Ic/UdCnl66VLhlRnd1fvXBCHDYk I4jcreQhYOvd5PIjn0fOTS33RbPtXgPe/u+vWvpDL9rJjzc2zrR9wNtKxvfJfWsk B5sGmezAQDMZk9YkjuOask6buyq5+nxj1WQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrvdefkedgudegkecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecunecujfgurhepofggff fhvffkufgtsehmtderreertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdf uceojhhovghlsegtohhmphhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepudejhe evgeffjeevueegtdevgfehjeetkeefvdehheeiieeilefgteeifeeuleeinecuffhomhgr ihhnpehpohhsthhgrhdrvghsnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpe hmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnhgspghrtghpthht ohepuddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvg hrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 3B899B00068; Fri, 11 Oct 2024 16:30:49 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 Date: Fri, 11 Oct 2024 22:29:15 +0200 From: "Joel Jacobson" To: pgsql-hackers@lists.postgresql.org Message-Id: Subject: New "raw" COPY format Content-Type: multipart/mixed; boundary=f1bf6761bdf74f248b3316aa99ba32b1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --f1bf6761bdf74f248b3316aa99ba32b1 Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi hackers, This thread is about implementing a new "raw" COPY format. This idea came up in a different thread [1], moved here. [1] https://postgr.es/m/47b5c6a7-5c0e-40aa-8ea2-c7b95ccf296f%40app.fastmail.com The main use-case for the raw format, is when needing to import arbitrary unstructured text files, such as log files, into a single text column of a table. The name "raw" is just a working title. Andrew had some other good name ideas: > WFM, so something like FORMAT {SIMPLE, RAW, FAST, SINGLE}? Below is the draft of its description, sent previously [1], adjusted thanks to feedback from Daniel Verite, who made me realize the HEADER option should be made available also for this format. --- START OF DESCRIPTION --- Raw Format The "raw" format is used for importing and exporting files containing unstructured text, where each line is treated as a single field. This format is ideal when dealing with data that doesn't conform to a structured, tabular format and lacks delimiters. Key Characteristics: - No Field Delimiters: Each line is considered a complete value without any field separation. - Single Column Requirement: The COPY command must specify exactly one column when using the raw format. Specifying multiple columns will result in an error. - Literal Data Interpretation: All characters are taken literally. There is no special handling for quotes, backslashes, or escape sequences. - No NULL Distinction: Empty lines are imported as empty strings, not as NULL values. Notes: - Error Handling: An error will occur if you use the raw format without specifying exactly one column or if the table has multiple columns and no column list is provided. - Data Preservation: All characters, including whitespace and special characters, are preserved exactly as they appear in the file. --- END OF DESCRIPTION --- After having studied the code that will be affected, I feel that before making any changes, I would like to try to improve ProcessCopyOptions, in terms of readability and maintainability, first. This seems possible by just reorganize it a bit. It is actually already organized quite nicely, where the code is mostly organized per-option, but not always, as it sometimes is spread across different sections. It seems possible to organize even more of it per-option, which would make it easier to reason about each option separately. This seems possible by organizing the checks per option, under a single if-branch per option, and moving the setting of defaults per option (when applicable) to the corresponding else-branch. This would also avoid setting defaults for options that are not applicable for a given format, and instead let their initial NULL value remain untouched, rather than setting unnecessary defaults. Some of the checks depend on multiple options in an interdependent way, not belonging to a specific option more than another. I think such checks would be nice to place at the end under a separate section. I also think it would be more readable to use the existing bool variables named [option]_specified, to determine if an option has been set, rather than relying on the option's default enum value to evaluate to false. The attached patch implements the above ideas. I think with these changes, it would be easier to hack on new and existing copy options and formats. /Joel --f1bf6761bdf74f248b3316aa99ba32b1 Content-Disposition: attachment; filename*0="v1-0001-Replace-binary-flags-binary-and-csv_mode-with-format."; filename*1="patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?v1-0001-Replace-binary-flags-binary-and-csv=5Fmode-with-format?= =?UTF-8?Q?.patch?=" Content-Transfer-Encoding: base64 RnJvbSBkNjIxYmIyZmQwZDBkNjA3OWVjMTZhOTJmNWM5MjVmZDlmYTBiYWFhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEpha29ic3NvbiA8Z2l0aHViQGNvbXBpbGVy Lm9yZz4KRGF0ZTogVGh1LCAxMCBPY3QgMjAyNCAwODozMzozMyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggMS8yXSBSZXBsYWNlIGJpbmFyeSBmbGFncyBgYmluYXJ5YCBhbmQgYGNzdl9tb2Rl YCB3aXRoCiBgZm9ybWF0YCBlbnVtLgoKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMgICAgICAgICAgfCA0NCArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgfCAxMCArKystLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgfCAzNCArKysrKysrKysrLS0tLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jICAgICAgICB8IDIwICsrKysrKy0tLS0t LS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCAgICAgICAgICB8IDEzICsrKysrKy0t CiA1IGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDU2IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvcHkuYwppbmRleCAwM2ViN2E0ZWJhLi4yMDIxMzAwMzA4IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jCkBAIC00OTMsMTEgKzQ5MywxMSBAQCBQcm9jZXNzQ29weU9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVs LCBwc3RhdGUpOwogCQkJZm9ybWF0X3NwZWNpZmllZCA9IHRydWU7CiAJCQlpZiAoc3RyY21w KGZtdCwgInRleHQiKSA9PSAwKQotCQkJCSAvKiBkZWZhdWx0IGZvcm1hdCAqLyA7CisJCQkJ b3B0c19vdXQtPmZvcm1hdCA9IENPUFlfRk9STUFUX1RFWFQ7CiAJCQllbHNlIGlmIChzdHJj bXAoZm10LCAiY3N2IikgPT0gMCkKLQkJCQlvcHRzX291dC0+Y3N2X21vZGUgPSB0cnVlOwor CQkJCW9wdHNfb3V0LT5mb3JtYXQgPSBDT1BZX0ZPUk1BVF9DU1Y7CiAJCQllbHNlIGlmIChz dHJjbXAoZm10LCAiYmluYXJ5IikgPT0gMCkKLQkJCQlvcHRzX291dC0+YmluYXJ5ID0gdHJ1 ZTsKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID0gQ09QWV9GT1JNQVRfQklOQVJZOwogCQkJZWxz ZQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKQEAgLTY1MCwzNiArNjUwLDM2IEBAIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJICogQ2hlY2sgZm9yIGluY29tcGF0aWJsZSBv cHRpb25zIChtdXN0IGRvIHRoZXNlIHR3byBiZWZvcmUgaW5zZXJ0aW5nCiAJICogZGVmYXVs dHMpCiAJICovCi0JaWYgKG9wdHNfb3V0LT5iaW5hcnkgJiYgb3B0c19vdXQtPmRlbGltKQor CWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291 dC0+ZGVsaW0pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZ IG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwogCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5 ICVzIGluIEJJTkFSWSBtb2RlIiwgIkRFTElNSVRFUiIpKSk7CiAKLQlpZiAob3B0c19vdXQt PmJpbmFyeSAmJiBvcHRzX291dC0+bnVsbF9wcmludCkKKwlpZiAob3B0c19vdXQtPmZvcm1h dCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYgb3B0c19vdXQtPm51bGxfcHJpbnQpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJ CSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIk5VTEwiKSkp OwogCi0JaWYgKG9wdHNfb3V0LT5iaW5hcnkgJiYgb3B0c19vdXQtPmRlZmF1bHRfcHJpbnQp CisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZICYmIG9wdHNf b3V0LT5kZWZhdWx0X3ByaW50KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBp biBCSU5BUlkgbW9kZSIsICJERUZBVUxUIikpKTsKIAotCWlmIChvcHRzX291dC0+YmluYXJ5 ICYmIG9wdHNfb3V0LT5vbl9lcnJvciAhPSBDT1BZX09OX0VSUk9SX1NUT1ApCisJaWYgKG9w dHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZICYmIG9wdHNfb3V0LT5vbl9l cnJvciAhPSBDT1BZX09OX0VSUk9SX1NUT1ApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coIm9ubHkgT05fRVJS T1IgU1RPUCBpcyBhbGxvd2VkIGluIEJJTkFSWSBtb2RlIikpKTsKIAogCS8qIFNldCBkZWZh dWx0cyBmb3Igb21pdHRlZCBvcHRpb25zICovCiAJaWYgKCFvcHRzX291dC0+ZGVsaW0pCi0J CW9wdHNfb3V0LT5kZWxpbSA9IG9wdHNfb3V0LT5jc3ZfbW9kZSA/ICIsIiA6ICJcdCI7CisJ CW9wdHNfb3V0LT5kZWxpbSA9IG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NW ID8gIiwiIDogIlx0IjsKIAogCWlmICghb3B0c19vdXQtPm51bGxfcHJpbnQpCi0JCW9wdHNf b3V0LT5udWxsX3ByaW50ID0gb3B0c19vdXQtPmNzdl9tb2RlID8gIiIgOiAiXFxOIjsKKwkJ b3B0c19vdXQtPm51bGxfcHJpbnQgPSBvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFU X0NTViA/ICIiIDogIlxcTiI7CiAJb3B0c19vdXQtPm51bGxfcHJpbnRfbGVuID0gc3RybGVu KG9wdHNfb3V0LT5udWxsX3ByaW50KTsKIAotCWlmIChvcHRzX291dC0+Y3N2X21vZGUpCisJ aWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQogCXsKIAkJaWYgKCFv cHRzX291dC0+cXVvdGUpCiAJCQlvcHRzX291dC0+cXVvdGUgPSAiXCIiOwpAQCAtNzI3LDcg KzcyNyw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJICog ZnV0dXJlLXByb29maW5nLiAgTGlrZXdpc2Ugd2UgZGlzYWxsb3cgYWxsIGRpZ2l0cyB0aG91 Z2ggb25seSBvY3RhbAogCSAqIGRpZ2l0cyBhcmUgYWN0dWFsbHkgZGFuZ2Vyb3VzLgogCSAq LwotCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQg IT0gQ09QWV9GT1JNQVRfQ1NWICYmCiAJCXN0cmNocigiXFwuYWJjZGVmZ2hpamtsbW5vcHFy c3R1dnd4eXowMTIzNDU2Nzg5IiwKIAkJCSAgIG9wdHNfb3V0LT5kZWxpbVswXSkgIT0gTlVM TCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTczNSw0MyArNzM1LDQzIEBAIFByb2Nlc3NDb3B5 T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJIGVycm1zZygiQ09QWSBkZWxpbWl0 ZXIgY2Fubm90IGJlIFwiJXNcIiIsIG9wdHNfb3V0LT5kZWxpbSkpKTsKIAogCS8qIENoZWNr IGhlYWRlciAqLwotCWlmIChvcHRzX291dC0+YmluYXJ5ICYmIG9wdHNfb3V0LT5oZWFkZXJf bGluZSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYg b3B0c19vdXQtPmhlYWRlcl9saW5lKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJLyotIHRyYW5zbGF0b3I6ICVz IGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KIAkJCQkg ZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJIRUFERVIiKSkp OwogCiAJLyogQ2hlY2sgcXVvdGUgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBv cHRzX291dC0+cXVvdGUgIT0gTlVMTCkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZ X0ZPUk1BVF9DU1YgJiYgb3B0c19vdXQtPnF1b3RlICE9IE5VTEwpCiAJCWVyZXBvcnQoRVJS T1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkv Ki0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBP Tl9FUlJPUiAqLwogCQkJCSBlcnJtc2coIkNPUFkgJXMgcmVxdWlyZXMgQ1NWIG1vZGUiLCAi UVVPVEUiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBzdHJsZW4ob3B0c19v dXQtPnF1b3RlKSAhPSAxKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFU X0NTViAmJiBzdHJsZW4ob3B0c19vdXQtPnF1b3RlKSAhPSAxKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkg ZXJybXNnKCJDT1BZIHF1b3RlIG11c3QgYmUgYSBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVy IikpKTsKIAotCWlmIChvcHRzX291dC0+Y3N2X21vZGUgJiYgb3B0c19vdXQtPmRlbGltWzBd ID09IG9wdHNfb3V0LT5xdW90ZVswXSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZ X0ZPUk1BVF9DU1YgJiYgb3B0c19vdXQtPmRlbGltWzBdID09IG9wdHNfb3V0LT5xdW90ZVsw XSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBhbmQgcXVvdGUg bXVzdCBiZSBkaWZmZXJlbnQiKSkpOwogCiAJLyogQ2hlY2sgZXNjYXBlICovCi0JaWYgKCFv cHRzX291dC0+Y3N2X21vZGUgJiYgb3B0c19vdXQtPmVzY2FwZSAhPSBOVUxMKQorCWlmIChv cHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiBvcHRzX291dC0+ZXNjYXBl ICE9IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUg b2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwogCQkJCSBlcnJtc2coIkNPUFkg JXMgcmVxdWlyZXMgQ1NWIG1vZGUiLCAiRVNDQVBFIikpKTsKIAotCWlmIChvcHRzX291dC0+ Y3N2X21vZGUgJiYgc3RybGVuKG9wdHNfb3V0LT5lc2NhcGUpICE9IDEpCisJaWYgKG9wdHNf b3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmIHN0cmxlbihvcHRzX291dC0+ZXNj YXBlKSAhPSAxKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJDT1BZIGVzY2FwZSBtdXN0IGJl IGEgc2luZ2xlIG9uZS1ieXRlIGNoYXJhY3RlciIpKSk7CiAKIAkvKiBDaGVjayBmb3JjZV9x dW90ZSAqLwotCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIChvcHRzX291dC0+Zm9yY2Vf cXVvdGUgfHwgb3B0c19vdXQtPmZvcmNlX3F1b3RlX2FsbCkpCisJaWYgKG9wdHNfb3V0LT5m b3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIChvcHRzX291dC0+Zm9yY2VfcXVvdGUgfHwg b3B0c19vdXQtPmZvcmNlX3F1b3RlX2FsbCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRv cjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwpA QCAtNzg1LDcgKzc4NSw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3Rh dGUsCiAJCQkJCQkiQ09QWSBGUk9NIikpKTsKIAogCS8qIENoZWNrIGZvcmNlX25vdG51bGwg Ki8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+Zm9yY2Vfbm90bnVs bCAhPSBOSUwpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYm IG9wdHNfb3V0LT5mb3JjZV9ub3RudWxsICE9IE5JTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFu c2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9S ICovCkBAIC03OTksNyArNzk5LDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQkJCSJDT1BZIFRPIikpKTsKIAogCS8qIENoZWNrIGZvcmNlX251bGwg Ki8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+Zm9yY2VfbnVsbCAh PSBOSUwpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9w dHNfb3V0LT5mb3JjZV9udWxsICE9IE5JTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFuc2xhdG9y OiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCkBA IC04MjIsNyArODIyLDcgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAkJCQkJCSJOVUxMIikpKTsKIAogCS8qIERvbid0IGFsbG93IHRoZSBDU1YgcXVvdGUg Y2hhciB0byBhcHBlYXIgaW4gdGhlIG51bGwgc3RyaW5nLiAqLwotCWlmIChvcHRzX291dC0+ Y3N2X21vZGUgJiYKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1Yg JiYKIAkJc3RyY2hyKG9wdHNfb3V0LT5udWxsX3ByaW50LCBvcHRzX291dC0+cXVvdGVbMF0p ICE9IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC04NTgsNyArODU4LDcgQEAgUHJvY2Vzc0NvcHlP cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkiREVGQVVMVCIpKSk7CiAKIAkJ LyogRG9uJ3QgYWxsb3cgdGhlIENTViBxdW90ZSBjaGFyIHRvIGFwcGVhciBpbiB0aGUgZGVm YXVsdCBzdHJpbmcuICovCi0JCWlmIChvcHRzX291dC0+Y3N2X21vZGUgJiYKKwkJaWYgKG9w dHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmCiAJCQlzdHJjaHIob3B0c19v dXQtPmRlZmF1bHRfcHJpbnQsIG9wdHNfb3V0LT5xdW90ZVswXSkgIT0gTlVMTCkKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDkxMzlhNDA3ODUuLjQ2YTY2 MjQ2NWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMTIyLDcgKzEyMiw3IEBA IENvcHlGcm9tRXJyb3JDYWxsYmFjayh2b2lkICphcmcpCiAJCQkJICAgY3N0YXRlLT5jdXJf cmVsbmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJ aWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJ LyogY2FuJ3QgdXNlZnVsbHkgZGlzcGxheSB0aGUgZGF0YSAqLwogCQlpZiAoY3N0YXRlLT5j dXJfYXR0bmFtZSkKQEAgLTE1NzYsNyArMTU3Niw3IEBAIEJlZ2luQ29weUZyb20oUGFyc2VT dGF0ZSAqcHN0YXRlLAogCWNzdGF0ZS0+cmF3X2J1Zl9pbmRleCA9IGNzdGF0ZS0+cmF3X2J1 Zl9sZW4gPSAwOwogCWNzdGF0ZS0+cmF3X3JlYWNoZWRfZW9mID0gZmFsc2U7CiAKLQlpZiAo IWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09Q WV9GT1JNQVRfQklOQVJZKQogCXsKIAkJLyoKIAkJICogSWYgZW5jb2RpbmcgY29udmVyc2lv biBpcyBuZWVkZWQsIHdlIG5lZWQgYW5vdGhlciBidWZmZXIgdG8gaG9sZApAQCAtMTYyNyw3 ICsxNjI3LDcgQEAgQmVnaW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQljb250 aW51ZTsKIAogCQkvKiBGZXRjaCB0aGUgaW5wdXQgZnVuY3Rpb24gYW5kIHR5cGlvcGFyYW0g aW5mbyAqLwotCQlpZiAoY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwkJaWYgKGNzdGF0ZS0+b3B0 cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCQkJZ2V0VHlwZUJpbmFyeUlucHV0 SW5mbyhhdHQtPmF0dHR5cGlkLAogCQkJCQkJCQkgICAmaW5fZnVuY19vaWQsICZ0eXBpb3Bh cmFtc1thdHRudW0gLSAxXSk7CiAJCWVsc2UKQEAgLTE3NjgsMTQgKzE3NjgsMTQgQEAgQmVn aW5Db3B5RnJvbShQYXJzZVN0YXRlICpwc3RhdGUsCiAKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX211bHRpX3BhcmFtKDMsIHByb2dyZXNzX2NvbHMsIHByb2dyZXNzX3ZhbHMpOwogCi0J aWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0g Q09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJLyogUmVhZCBhbmQgdmVyaWZ5IGJpbmFyeSBo ZWFkZXIgKi8KIAkJUmVjZWl2ZUNvcHlCaW5hcnlIZWFkZXIoY3N0YXRlKTsKIAl9CiAKIAkv KiBjcmVhdGUgd29ya3NwYWNlIGZvciBDb3B5UmVhZEF0dHJpYnV0ZXMgcmVzdWx0cyAqLwot CWlmICghY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCAh PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJewogCQlBdHRyTnVtYmVyCWF0dHJfY291bnQgPSBs aXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3QpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5ZnJvbXBhcnNlLmMKaW5kZXggNjU0ZmVjYjFiMS4uNTBiYjRiNzc1MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHlmcm9tcGFyc2UuYwpAQCAtMTYzLDcgKzE2Myw3IEBAIFJlY2Vp dmVDb3B5QmVnaW4oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiB7CiAJU3RyaW5nSW5mb0RhdGEg YnVmOwogCWludAkJCW5hdHRzID0gbGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KTsK LQlpbnQxNgkJZm9ybWF0ID0gKGNzdGF0ZS0+b3B0cy5iaW5hcnkgPyAxIDogMCk7CisJaW50 MTYJCWZvcm1hdCA9IChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFS WSA/IDEgOiAwKTsKIAlpbnQJCQlpOwogCiAJcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNn X0NvcHlJblJlc3BvbnNlKTsKQEAgLTc0OSw3ICs3NDksNyBAQCBOZXh0Q29weUZyb21SYXdG aWVsZHMoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVs ZHMpCiAJYm9vbAkJZG9uZTsKIAogCS8qIG9ubHkgYXZhaWxhYmxlIGZvciB0ZXh0IG9yIGNz diBpbnB1dCAqLwotCUFzc2VydCghY3N0YXRlLT5vcHRzLmJpbmFyeSk7CisJQXNzZXJ0KGNz dGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQklOQVJZKTsKIAogCS8qIG9uIGlu cHV0IGNoZWNrIHRoYXQgdGhlIGhlYWRlciBsaW5lIGlzIGNvcnJlY3QgaWYgbmVlZGVkICov CiAJaWYgKGNzdGF0ZS0+Y3VyX2xpbmVubyA9PSAwICYmIGNzdGF0ZS0+b3B0cy5oZWFkZXJf bGluZSkKQEAgLTc2Niw3ICs3NjYsNyBAQCBOZXh0Q29weUZyb21SYXdGaWVsZHMoQ29weUZy b21TdGF0ZSBjc3RhdGUsIGNoYXIgKioqZmllbGRzLCBpbnQgKm5maWVsZHMpCiAJCXsKIAkJ CWludAkJCWZsZG51bTsKIAotCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkKKwkJCWlm IChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJCQlmbGRjdCA9 IENvcHlSZWFkQXR0cmlidXRlc0NTVihjc3RhdGUpOwogCQkJZWxzZQogCQkJCWZsZGN0ID0g Q29weVJlYWRBdHRyaWJ1dGVzVGV4dChjc3RhdGUpOwpAQCAtODIxLDcgKzgyMSw3IEBAIE5l eHRDb3B5RnJvbVJhd0ZpZWxkcyhDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgY2hhciAqKipmaWVs ZHMsIGludCAqbmZpZWxkcykKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogUGFyc2UgdGhlIGxp bmUgaW50byBkZS1lc2NhcGVkIGZpZWxkIHZhbHVlcyAqLwotCWlmIChjc3RhdGUtPm9wdHMu Y3N2X21vZGUpCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NW KQogCQlmbGRjdCA9IENvcHlSZWFkQXR0cmlidXRlc0NTVihjc3RhdGUpOwogCWVsc2UKIAkJ ZmxkY3QgPSBDb3B5UmVhZEF0dHJpYnV0ZXNUZXh0KGNzdGF0ZSk7CkBAIC04NjUsNyArODY1 LDcgQEAgTmV4dENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBFeHByQ29udGV4dCAq ZWNvbnRleHQsCiAJTWVtU2V0KG51bGxzLCB0cnVlLCBudW1fcGh5c19hdHRycyAqIHNpemVv Zihib29sKSk7CiAJTWVtU2V0KGNzdGF0ZS0+ZGVmYXVsdHMsIGZhbHNlLCBudW1fcGh5c19h dHRycyAqIHNpemVvZihib29sKSk7CiAKLQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJ aWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJ Y2hhcgkgICoqZmllbGRfc3RyaW5nczsKIAkJTGlzdENlbGwgICAqY3VyOwpAQCAtOTA2LDcg KzkwNiw3IEBAIE5leHRDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlpZiAoY3N0YXRlLT5v cHRzLmNzdl9tb2RlKQorCQkJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JN QVRfQ1NWKQogCQkJewogCQkJCWlmIChzdHJpbmcgPT0gTlVMTCAmJgogCQkJCQljc3RhdGUt Pm9wdHMuZm9yY2Vfbm90bnVsbF9mbGFnc1ttXSkKQEAgLTExNzksNyArMTE3OSw3IEBAIENv cHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJY2hhcgkJcXVvdGVjID0g J1wwJzsKIAljaGFyCQllc2NhcGVjID0gJ1wwJzsKIAotCWlmIChjc3RhdGUtPm9wdHMuY3N2 X21vZGUpCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQog CXsKIAkJcXVvdGVjID0gY3N0YXRlLT5vcHRzLnF1b3RlWzBdOwogCQllc2NhcGVjID0gY3N0 YXRlLT5vcHRzLmVzY2FwZVswXTsKQEAgLTEyNTYsNyArMTI1Niw3IEBAIENvcHlSZWFkTGlu ZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCXByZXZfcmF3X3B0ciA9IGlucHV0X2J1 Zl9wdHI7CiAJCWMgPSBjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRyKytdOwogCi0JCWlm IChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCisJCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09 IENPUFlfRk9STUFUX0NTVikKIAkJewogCQkJLyoKIAkJCSAqIElmIGNoYXJhY3RlciBpcyAn XHInLCB3ZSBtYXkgbmVlZCB0byBsb29rIGFoZWFkIGJlbG93LiAgRm9yY2UKQEAgLTEyOTUs NyArMTI5NSw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJ CX0KIAogCQkvKiBQcm9jZXNzIFxyICovCi0JCWlmIChjID09ICdccicgJiYgKCFjc3RhdGUt Pm9wdHMuY3N2X21vZGUgfHwgIWluX3F1b3RlKSkKKwkJaWYgKGMgPT0gJ1xyJyAmJiAoY3N0 YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgfHwgIWluX3F1b3RlKSkKIAkJ ewogCQkJLyogQ2hlY2sgZm9yIFxyXG4gb24gZmlyc3QgbGluZSwgX2FuZF8gaGFuZGxlIFxy XG4uICovCiAJCQlpZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfVU5LTk9XTiB8fApAQCAt MTMyMywxMCArMTMyMywxMCBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0 YXRlKQogCQkJCQlpZiAoY3N0YXRlLT5lb2xfdHlwZSA9PSBFT0xfQ1JOTCkKIAkJCQkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9G T1JNQVQpLAotCQkJCQkJCQkgIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSA/CisJCQkJCQkJCSBj c3RhdGUtPm9wdHMuZm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViA/CiAJCQkJCQkJCSBlcnJt c2coImxpdGVyYWwgY2FycmlhZ2UgcmV0dXJuIGZvdW5kIGluIGRhdGEiKSA6CiAJCQkJCQkJ CSBlcnJtc2coInVucXVvdGVkIGNhcnJpYWdlIHJldHVybiBmb3VuZCBpbiBkYXRhIiksCi0J CQkJCQkJCSAhY3N0YXRlLT5vcHRzLmNzdl9tb2RlID8KKwkJCQkJCQkJIGNzdGF0ZS0+b3B0 cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWID8KIAkJCQkJCQkJIGVycmhpbnQoIlVzZSBc IlxcclwiIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikgOgogCQkJCQkJCQkgZXJy aGludCgiVXNlIHF1b3RlZCBDU1YgZmllbGQgdG8gcmVwcmVzZW50IGNhcnJpYWdlIHJldHVy bi4iKSkpOwogCkBAIC0xMzQwLDEwICsxMzQwLDEwIEBAIENvcHlSZWFkTGluZVRleHQoQ29w eUZyb21TdGF0ZSBjc3RhdGUpCiAJCQllbHNlIGlmIChjc3RhdGUtPmVvbF90eXBlID09IEVP TF9OTCkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURf Q09QWV9GSUxFX0ZPUk1BVCksCi0JCQkJCQkgIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSA/CisJ CQkJCQkgY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgPwogCQkJCQkJ IGVycm1zZygibGl0ZXJhbCBjYXJyaWFnZSByZXR1cm4gZm91bmQgaW4gZGF0YSIpIDoKIAkJ CQkJCSBlcnJtc2coInVucXVvdGVkIGNhcnJpYWdlIHJldHVybiBmb3VuZCBpbiBkYXRhIiks Ci0JCQkJCQkgIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSA/CisJCQkJCQkgY3N0YXRlLT5vcHRz LmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgPwogCQkJCQkJIGVycmhpbnQoIlVzZSBcIlxc clwiIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikgOgogCQkJCQkJIGVycmhpbnQo IlVzZSBxdW90ZWQgQ1NWIGZpZWxkIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikp KTsKIAkJCS8qIElmIHJlYWNoIGhlcmUsIHdlIGhhdmUgZm91bmQgdGhlIGxpbmUgdGVybWlu YXRvciAqLwpAQCAtMTM1MSwxNSArMTM1MSwxNSBAQCBDb3B5UmVhZExpbmVUZXh0KENvcHlG cm9tU3RhdGUgY3N0YXRlKQogCQl9CiAKIAkJLyogUHJvY2VzcyBcbiAqLwotCQlpZiAoYyA9 PSAnXG4nICYmICghY3N0YXRlLT5vcHRzLmNzdl9tb2RlIHx8ICFpbl9xdW90ZSkpCisJCWlm IChjID09ICdcbicgJiYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NW IHx8ICFpbl9xdW90ZSkpCiAJCXsKIAkJCWlmIChjc3RhdGUtPmVvbF90eXBlID09IEVPTF9D UiB8fCBjc3RhdGUtPmVvbF90eXBlID09IEVPTF9DUk5MKQogCQkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKLQkJCQkJ CSAhY3N0YXRlLT5vcHRzLmNzdl9tb2RlID8KKwkJCQkJCSBjc3RhdGUtPm9wdHMuZm9ybWF0 ICE9IENPUFlfRk9STUFUX0NTViA/CiAJCQkJCQkgZXJybXNnKCJsaXRlcmFsIG5ld2xpbmUg Zm91bmQgaW4gZGF0YSIpIDoKIAkJCQkJCSBlcnJtc2coInVucXVvdGVkIG5ld2xpbmUgZm91 bmQgaW4gZGF0YSIpLAotCQkJCQkJICFjc3RhdGUtPm9wdHMuY3N2X21vZGUgPworCQkJCQkJ IGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWID8KIAkJCQkJCSBlcnJo aW50KCJVc2UgXCJcXG5cIiB0byByZXByZXNlbnQgbmV3bGluZS4iKSA6CiAJCQkJCQkgZXJy aGludCgiVXNlIHF1b3RlZCBDU1YgZmllbGQgdG8gcmVwcmVzZW50IG5ld2xpbmUuIikpKTsK IAkJCWNzdGF0ZS0+ZW9sX3R5cGUgPSBFT0xfTkw7CS8qIGluIGNhc2Ugbm90IHNldCB5ZXQg Ki8KQEAgLTEzNzEsNyArMTM3MSw3IEBAIENvcHlSZWFkTGluZVRleHQoQ29weUZyb21TdGF0 ZSBjc3RhdGUpCiAJCSAqIFByb2Nlc3MgYmFja3NsYXNoLCBleGNlcHQgaW4gQ1NWIG1vZGUg d2hlcmUgYmFja3NsYXNoIGlzIGEgbm9ybWFsCiAJCSAqIGNoYXJhY3Rlci4KIAkJICovCi0J CWlmIChjID09ICdcXCcgJiYgIWNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkKKwkJaWYgKGMgPT0g J1xcJyAmJiBjc3RhdGUtPm9wdHMuZm9ybWF0ICE9IENPUFlfRk9STUFUX0NTVikKIAkJewog CQkJY2hhcgkJYzI7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0 by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKaW5kZXggNDYzMDgzZTY0NS4u Nzg1MzFhZTg0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAgLTEzNCw3ICsxMzQsNyBA QCBTZW5kQ29weUJlZ2luKENvcHlUb1N0YXRlIGNzdGF0ZSkKIHsKIAlTdHJpbmdJbmZvRGF0 YSBidWY7CiAJaW50CQkJbmF0dHMgPSBsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3Qp OwotCWludDE2CQlmb3JtYXQgPSAoY3N0YXRlLT5vcHRzLmJpbmFyeSA/IDEgOiAwKTsKKwlp bnQxNgkJZm9ybWF0ID0gKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklO QVJZID8gMSA6IDApOwogCWludAkJCWk7CiAKIAlwcV9iZWdpbm1lc3NhZ2UoJmJ1ZiwgUHFN c2dfQ29weU91dFJlc3BvbnNlKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBDb3B5U2VuZEVuZE9m Um93KENvcHlUb1N0YXRlIGNzdGF0ZSkKIAlzd2l0Y2ggKGNzdGF0ZS0+Y29weV9kZXN0KQog CXsKIAkJY2FzZSBDT1BZX0ZJTEU6Ci0JCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJ CQlpZiAoY3N0YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJCQl7 CiAJCQkJLyogRGVmYXVsdCBsaW5lIHRlcm1pbmF0aW9uIGRlcGVuZHMgb24gcGxhdGZvcm0g Ki8KICNpZm5kZWYgV0lOMzIKQEAgLTIzNiw3ICsyMzYsNyBAQCBDb3B5U2VuZEVuZE9mUm93 KENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJCWJyZWFrOwogCQljYXNlIENPUFlfRlJPTlRFTkQ6 CiAJCQkvKiBUaGUgRkUvQkUgcHJvdG9jb2wgdXNlcyBcbiBhcyBuZXdsaW5lIGZvciBhbGwg cGxhdGZvcm1zICovCi0JCQlpZiAoIWNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJCQlpZiAoY3N0 YXRlLT5vcHRzLmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9CSU5BUlkpCiAJCQkJQ29weVNlbmRD aGFyKGNzdGF0ZSwgJ1xuJyk7CiAKIAkJCS8qIER1bXAgdGhlIGFjY3VtdWxhdGVkIHJvdyBh cyBvbmUgQ29weURhdGEgbWVzc2FnZSAqLwpAQCAtNzcxLDcgKzc3MSw3IEBAIERvQ29weVRv KENvcHlUb1N0YXRlIGNzdGF0ZSkKIAkJYm9vbAkJaXN2YXJsZW5hOwogCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBhdHRudW0gLSAxKTsKIAot CQlpZiAoY3N0YXRlLT5vcHRzLmJpbmFyeSkKKwkJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQg PT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCQkJZ2V0VHlwZUJpbmFyeU91dHB1dEluZm8oYXR0 ci0+YXR0dHlwaWQsCiAJCQkJCQkJCQkmb3V0X2Z1bmNfb2lkLAogCQkJCQkJCQkJJmlzdmFy bGVuYSk7CkBAIC03OTIsNyArNzkyLDcgQEAgRG9Db3B5VG8oQ29weVRvU3RhdGUgY3N0YXRl KQogCQkJCQkJCQkJCQkgICAiQ09QWSBUTyIsCiAJCQkJCQkJCQkJCSAgIEFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOwogCi0JaWYgKGNzdGF0ZS0+b3B0cy5iaW5hcnkpCisJaWYgKGNzdGF0 ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZKQogCXsKIAkJLyogR2VuZXJh dGUgaGVhZGVyIGZvciBhIGJpbmFyeSBjb3B5ICovCiAJCWludDMyCQl0bXA7CkBAIC04MzMs NyArODMzLDcgQEAgRG9Db3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQogCiAJCQkJY29sbmFt ZSA9IE5hbWVTdHIoVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBhdHRudW0gLSAxKS0+YXR0bmFt ZSk7CiAKLQkJCQlpZiAoY3N0YXRlLT5vcHRzLmNzdl9tb2RlKQorCQkJCWlmIChjc3RhdGUt Pm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJCQkJQ29weUF0dHJpYnV0ZU91 dENTVihjc3RhdGUsIGNvbG5hbWUsIGZhbHNlKTsKIAkJCQllbHNlCiAJCQkJCUNvcHlBdHRy aWJ1dGVPdXRUZXh0KGNzdGF0ZSwgY29sbmFtZSk7CkBAIC04ODAsNyArODgwLDcgQEAgRG9D b3B5VG8oQ29weVRvU3RhdGUgY3N0YXRlKQogCQlwcm9jZXNzZWQgPSAoKERSX2NvcHkgKikg Y3N0YXRlLT5xdWVyeURlc2MtPmRlc3QpLT5wcm9jZXNzZWQ7CiAJfQogCi0JaWYgKGNzdGF0 ZS0+b3B0cy5iaW5hcnkpCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JN QVRfQklOQVJZKQogCXsKIAkJLyogR2VuZXJhdGUgdHJhaWxlciBmb3IgYSBiaW5hcnkgY29w eSAqLwogCQlDb3B5U2VuZEludDE2KGNzdGF0ZSwgLTEpOwpAQCAtOTA4LDcgKzkwOCw3IEBA IENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90 KQogCU1lbW9yeUNvbnRleHRSZXNldChjc3RhdGUtPnJvd2NvbnRleHQpOwogCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3N0YXRlLT5yb3djb250ZXh0KTsKIAotCWlm IChjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENP UFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qIEJpbmFyeSBwZXItdHVwbGUgaGVhZGVyICov CiAJCUNvcHlTZW5kSW50MTYoY3N0YXRlLCBsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxp c3QpKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBDb3B5T25lUm93VG8oQ29weVRvU3RhdGUgY3N0 YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIAkvKiBNYWtlIHN1cmUgdGhlIHR1cGxlIGlz IGZ1bGx5IGRlY29uc3RydWN0ZWQgKi8KIAlzbG90X2dldGFsbGF0dHJzKHNsb3QpOwogCi0J aWYgKCFjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3RhdGUtPm9wdHMuZm9ybWF0ICE9 IENPUFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCWJvb2wJCW5lZWRfZGVsaW0gPSBmYWxzZTsK IApAQCAtOTM3LDcgKzkzNyw3IEBAIENvcHlPbmVSb3dUbyhDb3B5VG9TdGF0ZSBjc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90KQogCQkJewogCQkJCXN0cmluZyA9IE91dHB1dEZ1bmN0 aW9uQ2FsbCgmb3V0X2Z1bmN0aW9uc1thdHRudW0gLSAxXSwKIAkJCQkJCQkJCQkJdmFsdWUp OwotCQkJCWlmIChjc3RhdGUtPm9wdHMuY3N2X21vZGUpCisJCQkJaWYgKGNzdGF0ZS0+b3B0 cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQogCQkJCQlDb3B5QXR0cmlidXRlT3V0Q1NW KGNzdGF0ZSwgc3RyaW5nLAogCQkJCQkJCQkJCWNzdGF0ZS0+b3B0cy5mb3JjZV9xdW90ZV9m bGFnc1thdHRudW0gLSAxXSk7CiAJCQkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCmluZGV4IDZm NjRkOTdmZGQuLjRiNDA3OWRiOTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKQEAgLTUxLDYgKzUx LDE2IEBAIHR5cGVkZWYgZW51bSBDb3B5TG9nVmVyYm9zaXR5Q2hvaWNlCiAJQ09QWV9MT0df VkVSQk9TSVRZX1ZFUkJPU0UsIC8qIGxvZ3MgYWRkaXRpb25hbCBtZXNzYWdlcyAqLwogfSBD b3B5TG9nVmVyYm9zaXR5Q2hvaWNlOwogCisvKgorICogUmVwcmVzZW50cyB0aGUgZm9ybWF0 IG9mIHRoZSBDT1BZIG9wZXJhdGlvbi4KKyAqLwordHlwZWRlZiBlbnVtIENvcHlGb3JtYXQK K3sKKwlDT1BZX0ZPUk1BVF9URVhULAorCUNPUFlfRk9STUFUX0JJTkFSWSwKKwlDT1BZX0ZP Uk1BVF9DU1YKK30gQ29weUZvcm1hdDsKKwogLyoKICAqIEEgc3RydWN0IHRvIGhvbGQgQ09Q WSBvcHRpb25zLCBpbiBhIHBhcnNlZCBmb3JtLiBBbGwgb2YgdGhlc2UgYXJlIHJlbGF0ZWQK ICAqIHRvIGZvcm1hdHRpbmcsIGV4Y2VwdCBmb3IgJ2ZyZWV6ZScsIHdoaWNoIGRvZXNuJ3Qg cmVhbGx5IGJlbG9uZyBoZXJlLCBidXQKQEAgLTYxLDkgKzcxLDggQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29weUZvcm1hdE9wdGlvbnMKIAkvKiBwYXJhbWV0ZXJzIGZyb20gdGhlIENPUFkgY29t bWFuZCAqLwogCWludAkJCWZpbGVfZW5jb2Rpbmc7CS8qIGZpbGUgb3IgcmVtb3RlIHNpZGUn cyBjaGFyYWN0ZXIgZW5jb2RpbmcsCiAJCQkJCQkJCSAqIC0xIGlmIG5vdCBzcGVjaWZpZWQg Ki8KLQlib29sCQliaW5hcnk7CQkJLyogYmluYXJ5IGZvcm1hdD8gKi8KKwlDb3B5Rm9ybWF0 CWZvcm1hdDsJCQkvKiBmb3JtYXQgb2YgdGhlIENPUFkgb3BlcmF0aW9uICovCiAJYm9vbAkJ ZnJlZXplOwkJCS8qIGZyZWV6ZSByb3dzIG9uIGxvYWRpbmc/ICovCi0JYm9vbAkJY3N2X21v ZGU7CQkvKiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9ybWF0PyAqLwogCUNvcHlIZWFkZXJD aG9pY2UgaGVhZGVyX2xpbmU7CS8qIGhlYWRlciBsaW5lPyAqLwogCWNoYXIJICAgKm51bGxf cHJpbnQ7CQkvKiBOVUxMIG1hcmtlciBzdHJpbmcgKHNlcnZlciBlbmNvZGluZyEpICovCiAJ aW50CQkJbnVsbF9wcmludF9sZW47IC8qIGxlbmd0aCBvZiBzYW1lICovCi0tIAoyLjQ1LjEK Cg== --f1bf6761bdf74f248b3316aa99ba32b1 Content-Disposition: attachment; filename*0="v1-0002-Reorganize-ProcessCopyOptions-for-clarity-and-consis."; filename*1="patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?v1-0002-Reorganize-ProcessCopyOptions-for-clarity-and-consis.p?= =?UTF-8?Q?atch?=" Content-Transfer-Encoding: base64 RnJvbSBkNWMxYTQ1ZWU0OGJmYzBmMTRlYTk5MjU4OTgwOWIwZGExNDRkNzU1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEpha29ic3NvbiA8Z2l0aHViQGNvbXBpbGVy Lm9yZz4KRGF0ZTogRnJpLCAxMSBPY3QgMjAyNCAyMToyNjoyMiArMDIwMApTdWJqZWN0OiBb UEFUQ0ggMi8yXSBSZW9yZ2FuaXplIFByb2Nlc3NDb3B5T3B0aW9ucyBmb3IgY2xhcml0eSBh bmQgY29uc2lzdGVudAogb3B0aW9uIGhhbmRsaW5nLgoKTm8gY2hhbmdlcyB0byB0aGUgZnVu Y3Rpb24ncyBzaWduYXR1cmUgb3IgYmVoYXZpb3I7IHRoZSByZWZhY3RvcmluZyBzb2xlbHkK aW1wcm92ZXMgY29kZSBzdHJ1Y3R1cmUgYW5kIHJlYWRhYmlsaXR5LgoKQ2hhbmdlczoKCiog UmVmYWN0b3JlZCBQcm9jZXNzQ29weU9wdGlvbnMgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBh bmQgbWFpbnRhaW5hYmlsaXR5CmJ5IGdyb3VwaW5nIHBlci1vcHRpb24gY2hlY2tzIGFuZCBk ZWZhdWx0IGFzc2lnbm1lbnRzIGludG8gZGVkaWNhdGVkIHNlY3Rpb25zLgpUaGlzIGVuaGFu Y2VzIHRoZSBsb2dpY2FsIGZsb3cgYW5kIG1ha2VzIGl0IGVhc2llciB0byB1bmRlcnN0YW5k IGhvdyBlYWNoIENPUFkKb3B0aW9uIGlzIHByb2Nlc3NlZC4KCiogRXhwbGljaXRseSBzZXQg dGhlIGRlZmF1bHQgZm9ybWF0IHRvIENPUFlfRk9STUFUX1RFWFQgd2hlbiB0aGUgRk9STUFU IG9wdGlvbgppcyBub3Qgc3BlY2lmaWVkLiBQcmV2aW91c2x5LCB0aGUgZGVmYXVsdCB3YXMg aW1wbGllZCBkdWUgdG8KemVyby1pbml0aWFsaXphdGlvbiwgYnV0IG1ha2luZyBpdCBleHBs aWNpdCBjbGFyaWZpZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCgoqIENvbnNpc3RlbnRseSB1 c2UgYm9vbGVhbiBzcGVjaWZpZWQtdmFyaWFibGVzIHRvIGRldGVybWluZSBpZiBhbiBvcHRp b24gaGFzCmJlZW4gcHJvdmlkZWQsIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gZGVmYXVsdCB2 YWx1ZXMgZnJvbSB6ZXJvLWluaXRpYWxpemF0aW9uLgoKKiBBZGRlZCBhc3NlcnRpb25zIHRv IGVuc3VyZSBuZWNlc3Nhcnkgb3B0aW9ucyBhcmUgc2V0IGJlZm9yZSBwZXJmb3JtaW5nCmRl cGVuZGVudCBjaGVja3MsIGV4cGxpY2l0bHkgaW5kaWNhdGluZyB0aGF0IHRoZXkgaGF2ZSBi ZWVuIGFzc2lnbmVkIGVpdGhlcgpzcGVjaWZpZWQgb3IgZGVmYXVsdCB2YWx1ZXMuCgoqIFJl bG9jYXRlZCBpbnRlcmRlcGVuZGVudCBvcHRpb24gdmFsaWRhdGlvbnMgdG8gYSBkZWRpY2F0 ZWQgc2VjdGlvbiBmb3IKYWRkaXRpb25hbCBjbGFyaXR5LgotLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHkuYyB8IDQzMyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCAyNzEgaW5zZXJ0aW9ucygrKSwgMTYyIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCAyMDIxMzAwMzA4Li5iNGY2ZDNlZTkzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weS5jCkBAIC02NDcsMjAwICs2NDcsMjYwIEBAIFByb2Nlc3NDb3B5T3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJfQogCiAJLyoKLQkgKiBDaGVjayBmb3IgaW5j b21wYXRpYmxlIG9wdGlvbnMgKG11c3QgZG8gdGhlc2UgdHdvIGJlZm9yZSBpbnNlcnRpbmcK LQkgKiBkZWZhdWx0cykKKwkgKiBTZXQgZGVmYXVsdCBmb3JtYXQgaWYgbm90IHNwZWNpZmll ZC4KKwkgKiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSBDT1BZX0ZPUk1B VF9URVhUIGlzIDAgYW5kCisJICogb3B0c19vdXQgaXMgcGFsbG9jMCdkLCBidXQgZG8gaXQg Zm9yIGNsYXJpdHkuCiAJICovCi0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JN QVRfQklOQVJZICYmIG9wdHNfb3V0LT5kZWxpbSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCS8qLSB0cmFuc2xhdG9yOiAlcyBp cyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCi0JCQkJIGVy cm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiREVMSU1JVEVSIikp KTsKKwlpZiAoIWZvcm1hdF9zcGVjaWZpZWQpCisJCW9wdHNfb3V0LT5mb3JtYXQgPSBDT1BZ X0ZPUk1BVF9URVhUOwogCi0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRf QklOQVJZICYmIG9wdHNfb3V0LT5udWxsX3ByaW50KQotCQllcmVwb3J0KEVSUk9SLAotCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkgZXJybXNnKCJjYW5ub3Qg c3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJOVUxMIikpKTsKKwkvKgorCSAqIEJlZ2lu IHBlci1vcHRpb24gY2hlY2tzIGFuZCBzZXQgZGVmYXVsdHMgd2hlcmUgbmVjZXNzYXJ5CisJ ICovCiAKLQlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYg b3B0c19vdXQtPmRlZmF1bHRfcHJpbnQpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5 ICVzIGluIEJJTkFSWSBtb2RlIiwgIkRFRkFVTFQiKSkpOworCS8qIC0tLSBGT1JNQVQgb3B0 aW9uIGlzIGFsd2F5cyBhbGxvd2VkOyBubyBhZGRpdGlvbmFsIGNoZWNrcyBuZWVkZWQgLS0t ICovCiAKLQlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYg b3B0c19vdXQtPm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfU1RPUCkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJIGVycm1z Zygib25seSBPTl9FUlJPUiBTVE9QIGlzIGFsbG93ZWQgaW4gQklOQVJZIG1vZGUiKSkpOwor CS8qIC0tLSBGUkVFWkUgb3B0aW9uIC0tLSAqLworCWlmIChmcmVlemVfc3BlY2lmaWVkKQor CXsKKwkJaWYgKCFpc19mcm9tKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkvKi0gdHJhbnNsYXRvcjog Zmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiwK KwkJCXNlY29uZCAlcyBpcyBhIENPUFkgd2l0aCBkaXJlY3Rpb24sIGUuZy4gQ09QWSBUTyAq LworCQkJCQllcnJtc2coIkNPUFkgJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIsICJGUkVF WkUiLAorCQkJCQkJCSJDT1BZIFRPIikpKTsKKwl9CisJZWxzZQorCXsKKwkJLyogRGVmYXVs dCBpcyBmYWxzZTsgbm8gYWN0aW9uIG5lZWRlZCAqLworCX0KIAotCS8qIFNldCBkZWZhdWx0 cyBmb3Igb21pdHRlZCBvcHRpb25zICovCi0JaWYgKCFvcHRzX291dC0+ZGVsaW0pCi0JCW9w dHNfb3V0LT5kZWxpbSA9IG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWID8g IiwiIDogIlx0IjsKKwkvKiAtLS0gREVMSU1JVEVSIG9wdGlvbiAtLS0gKi8KKwlpZiAob3B0 c19vdXQtPmRlbGltKQorCXsKKwkJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JN QVRfQklOQVJZKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEg Q09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KKwkJCQkJZXJybXNnKCJjYW5ub3Qgc3Bl Y2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJERUxJTUlURVIiKSkpOwogCi0JaWYgKCFvcHRz X291dC0+bnVsbF9wcmludCkKLQkJb3B0c19vdXQtPm51bGxfcHJpbnQgPSBvcHRzX291dC0+ Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTViA/ICIiIDogIlxcTiI7Ci0Jb3B0c19vdXQtPm51 bGxfcHJpbnRfbGVuID0gc3RybGVuKG9wdHNfb3V0LT5udWxsX3ByaW50KTsKKwkJLyogT25s eSBzaW5nbGUtYnl0ZSBkZWxpbWl0ZXIgc3RyaW5ncyBhcmUgc3VwcG9ydGVkLiAqLworCQlp ZiAoc3RybGVuKG9wdHNfb3V0LT5kZWxpbSkgIT0gMSkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJy bXNnKCJDT1BZIGRlbGltaXRlciBtdXN0IGJlIGEgc2luZ2xlIG9uZS1ieXRlIGNoYXJhY3Rl ciIpKSk7CiAKLQlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YpCisJ CS8qIERpc2FsbG93IGVuZC1vZi1saW5lIGNoYXJhY3RlcnMgKi8KKwkJaWYgKHN0cmNocihv cHRzX291dC0+ZGVsaW0sICdccicpICE9IE5VTEwgfHwKKwkJCXN0cmNocihvcHRzX291dC0+ ZGVsaW0sICdcbicpICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJDT1BZ IGRlbGltaXRlciBjYW5ub3QgYmUgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4iKSkpOwor CisJCS8qCisJCSAqIERpc2FsbG93IHVuc2FmZSBkZWxpbWl0ZXIgY2hhcmFjdGVycyBpbiBu b24tQ1NWIG1vZGUuICBXZSBjYW4ndCBhbGxvdworCQkgKiBiYWNrc2xhc2ggYmVjYXVzZSBp dCB3b3VsZCBiZSBhbWJpZ3VvdXMuICBXZSBjYW4ndCBhbGxvdyB0aGUgb3RoZXIKKwkJICog Y2FzZXMgYmVjYXVzZSBkYXRhIGNoYXJhY3RlcnMgbWF0Y2hpbmcgdGhlIGRlbGltaXRlciBt dXN0IGJlCisJCSAqIGJhY2tzbGFzaGVkLCBhbmQgY2VydGFpbiBiYWNrc2xhc2ggY29tYmlu YXRpb25zIGFyZSBpbnRlcnByZXRlZAorCQkgKiBub24tbGl0ZXJhbGx5IGJ5IENPUFkgSU4u ICBEaXNhbGxvd2luZyBhbGwgbG93ZXIgY2FzZSBBU0NJSSBsZXR0ZXJzIGlzCisJCSAqIG1v cmUgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBzZWVtcyBiZXN0IGZvciBjb25zaXN0 ZW5jeSBhbmQKKwkJICogZnV0dXJlLXByb29maW5nLiAgTGlrZXdpc2Ugd2UgZGlzYWxsb3cg YWxsIGRpZ2l0cyB0aG91Z2ggb25seSBvY3RhbAorCQkgKiBkaWdpdHMgYXJlIGFjdHVhbGx5 IGRhbmdlcm91cy4KKwkJICovCisJCWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9S TUFUX0NTViAmJgorCQkJc3RyY2hyKCJcXC5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx MjM0NTY3ODkiLAorCQkJCW9wdHNfb3V0LT5kZWxpbVswXSkgIT0gTlVMTCkKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQllcnJtc2coIkNPUFkgZGVsaW1pdGVyIGNhbm5vdCBiZSBcIiVzXCIiLCBv cHRzX291dC0+ZGVsaW0pKSk7CisJfQorCWVsc2UgaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0g Q09QWV9GT1JNQVRfQklOQVJZKQogCXsKLQkJaWYgKCFvcHRzX291dC0+cXVvdGUpCi0JCQlv cHRzX291dC0+cXVvdGUgPSAiXCIiOwotCQlpZiAoIW9wdHNfb3V0LT5lc2NhcGUpCi0JCQlv cHRzX291dC0+ZXNjYXBlID0gb3B0c19vdXQtPnF1b3RlOworCQkvKiBTZXQgZGVmYXVsdCBk ZWxpbWl0ZXIgKi8KKwkJb3B0c19vdXQtPmRlbGltID0gb3B0c19vdXQtPmZvcm1hdCA9PSBD T1BZX0ZPUk1BVF9DU1YgPyAiLCIgOiAiXHQiOwogCX0KIAotCS8qIE9ubHkgc2luZ2xlLWJ5 dGUgZGVsaW1pdGVyIHN0cmluZ3MgYXJlIHN1cHBvcnRlZC4gKi8KLQlpZiAoc3RybGVuKG9w dHNfb3V0LT5kZWxpbSkgIT0gMSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygiQ09QWSBkZWxp bWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBvbmUtYnl0ZSBjaGFyYWN0ZXIiKSkpOworCS8qIC0t LSBOVUxMIG9wdGlvbiAtLS0gKi8KKwlpZiAob3B0c19vdXQtPm51bGxfcHJpbnQpCisJewor CQlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CWVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiTlVMTCIpKSk7 CiAKLQkvKiBEaXNhbGxvdyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzICovCi0JaWYgKHN0cmNo cihvcHRzX291dC0+ZGVsaW0sICdccicpICE9IE5VTEwgfHwKLQkJc3RyY2hyKG9wdHNfb3V0 LT5kZWxpbSwgJ1xuJykgIT0gTlVMTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJCQkgZXJybXNnKCJDT1BZ IGRlbGltaXRlciBjYW5ub3QgYmUgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1cm4iKSkpOwor CQkvKiBEaXNhbGxvdyBlbmQtb2YtbGluZSBjaGFyYWN0ZXJzICovCisJCWlmIChzdHJjaHIo b3B0c19vdXQtPm51bGxfcHJpbnQsICdccicpICE9IE5VTEwgfHwKKwkJCXN0cmNocihvcHRz X291dC0+bnVsbF9wcmludCwgJ1xuJykgIT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQll cnJtc2coIkNPUFkgbnVsbCByZXByZXNlbnRhdGlvbiBjYW5ub3QgdXNlIG5ld2xpbmUgb3Ig Y2FycmlhZ2UgcmV0dXJuIikpKTsKKwl9CisJZWxzZSBpZiAob3B0c19vdXQtPmZvcm1hdCAh PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCisJeworCQkvKiBTZXQgZGVmYXVsdCBudWxsX3ByaW50 ICovCisJCW9wdHNfb3V0LT5udWxsX3ByaW50ID0gb3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZ X0ZPUk1BVF9DU1YgPyAiIiA6ICJcXE4iOworCX0KKwlpZiAob3B0c19vdXQtPm51bGxfcHJp bnQpCisJCW9wdHNfb3V0LT5udWxsX3ByaW50X2xlbiA9IHN0cmxlbihvcHRzX291dC0+bnVs bF9wcmludCk7CiAKLQlpZiAoc3RyY2hyKG9wdHNfb3V0LT5udWxsX3ByaW50LCAnXHInKSAh PSBOVUxMIHx8Ci0JCXN0cmNocihvcHRzX291dC0+bnVsbF9wcmludCwgJ1xuJykgIT0gTlVM TCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKLQkJCQkgZXJybXNnKCJDT1BZIG51bGwgcmVwcmVzZW50YXRpb24g Y2Fubm90IHVzZSBuZXdsaW5lIG9yIGNhcnJpYWdlIHJldHVybiIpKSk7CisJLyogLS0tIEhF QURFUiBvcHRpb24gLS0tICovCisJaWYgKGhlYWRlcl9zcGVjaWZpZWQpCisJeworCQlpZiAo b3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5n LiBPTl9FUlJPUiAqLworCQkJCQllcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFS WSBtb2RlIiwgIkhFQURFUiIpKSk7CisJfQorCWVsc2UKKwl7CisJCS8qIERlZmF1bHQgaXMg ZmFsc2U7IG5vIGFjdGlvbiBuZWVkZWQgKi8KKwl9CiAKLQlpZiAob3B0c19vdXQtPmRlZmF1 bHRfcHJpbnQpCisJLyogLS0tIFFVT1RFIG9wdGlvbiAtLS0gKi8KKwlpZiAob3B0c19vdXQt PnF1b3RlKQogCXsKLQkJb3B0c19vdXQtPmRlZmF1bHRfcHJpbnRfbGVuID0gc3RybGVuKG9w dHNfb3V0LT5kZWZhdWx0X3ByaW50KTsKKwkJaWYgKG9wdHNfb3V0LT5mb3JtYXQgIT0gQ09Q WV9GT1JNQVRfQ1NWKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRo ZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KKwkJCQkJZXJybXNn KCJDT1BZICVzIHJlcXVpcmVzIENTViBtb2RlIiwgIlFVT1RFIikpKTsKIAotCQlpZiAoc3Ry Y2hyKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50LCAnXHInKSAhPSBOVUxMIHx8Ci0JCQlzdHJj aHIob3B0c19vdXQtPmRlZmF1bHRfcHJpbnQsICdcbicpICE9IE5VTEwpCisJCWlmIChzdHJs ZW4ob3B0c19vdXQtPnF1b3RlKSAhPSAxKQogCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJCSBlcnJtc2co IkNPUFkgZGVmYXVsdCByZXByZXNlbnRhdGlvbiBjYW5ub3QgdXNlIG5ld2xpbmUgb3IgY2Fy cmlhZ2UgcmV0dXJuIikpKTsKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCQllcnJtc2coIkNPUFkgcXVvdGUgbXVzdCBiZSBhIHNpbmdsZSBv bmUtYnl0ZSBjaGFyYWN0ZXIiKSkpOworCX0KKwllbHNlIGlmIChvcHRzX291dC0+Zm9ybWF0 ID09IENPUFlfRk9STUFUX0NTVikKKwl7CisJCS8qIFNldCBkZWZhdWx0IHF1b3RlICovCisJ CW9wdHNfb3V0LT5xdW90ZSA9ICJcIiI7CiAJfQogCi0JLyoKLQkgKiBEaXNhbGxvdyB1bnNh ZmUgZGVsaW1pdGVyIGNoYXJhY3RlcnMgaW4gbm9uLUNTViBtb2RlLiAgV2UgY2FuJ3QgYWxs b3cKLQkgKiBiYWNrc2xhc2ggYmVjYXVzZSBpdCB3b3VsZCBiZSBhbWJpZ3VvdXMuICBXZSBj YW4ndCBhbGxvdyB0aGUgb3RoZXIKLQkgKiBjYXNlcyBiZWNhdXNlIGRhdGEgY2hhcmFjdGVy cyBtYXRjaGluZyB0aGUgZGVsaW1pdGVyIG11c3QgYmUKLQkgKiBiYWNrc2xhc2hlZCwgYW5k IGNlcnRhaW4gYmFja3NsYXNoIGNvbWJpbmF0aW9ucyBhcmUgaW50ZXJwcmV0ZWQKLQkgKiBu b24tbGl0ZXJhbGx5IGJ5IENPUFkgSU4uICBEaXNhbGxvd2luZyBhbGwgbG93ZXIgY2FzZSBB U0NJSSBsZXR0ZXJzIGlzCi0JICogbW9yZSB0aGFuIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0 IHNlZW1zIGJlc3QgZm9yIGNvbnNpc3RlbmN5IGFuZAotCSAqIGZ1dHVyZS1wcm9vZmluZy4g IExpa2V3aXNlIHdlIGRpc2FsbG93IGFsbCBkaWdpdHMgdGhvdWdoIG9ubHkgb2N0YWwKLQkg KiBkaWdpdHMgYXJlIGFjdHVhbGx5IGRhbmdlcm91cy4KLQkgKi8KLQlpZiAob3B0c19vdXQt PmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYKLQkJc3RyY2hyKCJcXC5hYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLAotCQkJICAgb3B0c19vdXQtPmRlbGltWzBd KSAhPSBOVUxMKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCSBlcnJtc2coIkNPUFkgZGVsaW1pdGVyIGNh bm5vdCBiZSBcIiVzXCIiLCBvcHRzX291dC0+ZGVsaW0pKSk7CisJLyogLS0tIEVTQ0FQRSBv cHRpb24gLS0tICovCisJaWYgKG9wdHNfb3V0LT5lc2NhcGUpCisJeworCQlpZiAob3B0c19v dXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkvKi0gdHJh bnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJP UiAqLworCQkJCQllcnJtc2coIkNPUFkgJXMgcmVxdWlyZXMgQ1NWIG1vZGUiLCAiRVNDQVBF IikpKTsKIAotCS8qIENoZWNrIGhlYWRlciAqLwotCWlmIChvcHRzX291dC0+Zm9ybWF0ID09 IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+aGVhZGVyX2xpbmUpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAotCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwg ZS5nLiBPTl9FUlJPUiAqLwotCQkJCSBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJ TkFSWSBtb2RlIiwgIkhFQURFUiIpKSk7CisJCWlmIChzdHJsZW4ob3B0c19vdXQtPmVzY2Fw ZSkgIT0gMSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJybXNnKCJDT1BZIGVzY2FwZSBtdXN0IGJl IGEgc2luZ2xlIG9uZS1ieXRlIGNoYXJhY3RlciIpKSk7CisJfQorCWVsc2UgaWYgKG9wdHNf b3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQorCXsKKwkJLyogU2V0IGRlZmF1bHQg ZXNjYXBlIHRvIHF1b3RlIGNoYXJhY3RlciAqLworCQlvcHRzX291dC0+ZXNjYXBlID0gb3B0 c19vdXQtPnF1b3RlOworCX0KIAotCS8qIENoZWNrIHF1b3RlICovCi0JaWYgKG9wdHNfb3V0 LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0LT5xdW90ZSAhPSBOVUxM KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKLQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09Q WSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KLQkJCQkgZXJybXNnKCJDT1BZICVzIHJlcXVp cmVzIENTViBtb2RlIiwgIlFVT1RFIikpKTsKKwkvKiAtLS0gRk9SQ0VfUVVPVEUgb3B0aW9u IC0tLSAqLworCWlmIChvcHRzX291dC0+Zm9yY2VfcXVvdGUgfHwgb3B0c19vdXQtPmZvcmNl X3F1b3RlX2FsbCkKKwl7CisJCWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFU X0NTVikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBv ZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCisJCQkJCWVycm1zZygiQ09QWSAl cyByZXF1aXJlcyBDU1YgbW9kZSIsICJGT1JDRV9RVU9URSIpKSk7CiAKLQlpZiAob3B0c19v dXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YgJiYgc3RybGVuKG9wdHNfb3V0LT5xdW90 ZSkgIT0gMSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJIGVycm1zZygiQ09QWSBxdW90ZSBtdXN0IGJlIGEg c2luZ2xlIG9uZS1ieXRlIGNoYXJhY3RlciIpKSk7CisJCWlmIChpc19mcm9tKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJLyotIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09Q WSBvcHRpb24sIGUuZy4gT05fRVJST1IsCisJCQlzZWNvbmQgJXMgaXMgYSBDT1BZIHdpdGgg ZGlyZWN0aW9uLCBlLmcuIENPUFkgVE8gKi8KKwkJCQkJZXJybXNnKCJDT1BZICVzIGNhbm5v dCBiZSB1c2VkIHdpdGggJXMiLCAiRk9SQ0VfUVVPVEUiLAorCQkJCQkJCSJDT1BZIEZST00i KSkpOworCX0KKwllbHNlCisJeworCQkvKiBObyBkZWZhdWx0IGFjdGlvbiBuZWVkZWQgKi8K Kwl9CiAKLQlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YgJiYgb3B0 c19vdXQtPmRlbGltWzBdID09IG9wdHNfb3V0LT5xdW90ZVswXSkKLQkJZXJlcG9ydChFUlJP UiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJ CQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBhbmQgcXVvdGUgbXVzdCBiZSBkaWZmZXJlbnQi KSkpOworCS8qIC0tLSBGT1JDRV9OT1RfTlVMTCBvcHRpb24gLS0tICovCisJaWYgKG9wdHNf b3V0LT5mb3JjZV9ub3RudWxsIHx8IG9wdHNfb3V0LT5mb3JjZV9ub3RudWxsX2FsbCkKKwl7 CisJCWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTVikKKwkJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9u LCBlLmcuIE9OX0VSUk9SICovCisJCQkJCWVycm1zZygiQ09QWSAlcyByZXF1aXJlcyBDU1Yg bW9kZSIsICJGT1JDRV9OT1RfTlVMTCIpKSk7CiAKLQkvKiBDaGVjayBlc2NhcGUgKi8KLQlp ZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYgb3B0c19vdXQtPmVz Y2FwZSAhPSBOVUxMKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBu YW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KLQkJCQkgZXJybXNnKCJD T1BZICVzIHJlcXVpcmVzIENTViBtb2RlIiwgIkVTQ0FQRSIpKSk7CisJCWlmICghaXNfZnJv bSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJLyotIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBu YW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IsCisJCQlzZWNvbmQgJXMgaXMg YSBDT1BZIHdpdGggZGlyZWN0aW9uLCBlLmcuIENPUFkgVE8gKi8KKwkJCQkJZXJybXNnKCJD T1BZICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiRk9SQ0VfTk9UX05VTEwiLAorCQkJ CQkJCSJDT1BZIFRPIikpKTsKKwl9CisJZWxzZQorCXsKKwkJLyogTm8gZGVmYXVsdCBhY3Rp b24gbmVlZGVkICovCisJfQogCi0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JN QVRfQ1NWICYmIHN0cmxlbihvcHRzX291dC0+ZXNjYXBlKSAhPSAxKQotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJ CQkgZXJybXNnKCJDT1BZIGVzY2FwZSBtdXN0IGJlIGEgc2luZ2xlIG9uZS1ieXRlIGNoYXJh Y3RlciIpKSk7CisJLyogLS0tIEZPUkNFX05VTEwgb3B0aW9uIC0tLSAqLworCWlmIChvcHRz X291dC0+Zm9yY2VfbnVsbCB8fCBvcHRzX291dC0+Zm9yY2VfbnVsbF9hbGwpCisJeworCQlp ZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5n LiBPTl9FUlJPUiAqLworCQkJCQllcnJtc2coIkNPUFkgJXMgcmVxdWlyZXMgQ1NWIG1vZGUi LCAiRk9SQ0VfTlVMTCIpKSk7CiAKLQkvKiBDaGVjayBmb3JjZV9xdW90ZSAqLwotCWlmIChv cHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiAob3B0c19vdXQtPmZvcmNl X3F1b3RlIHx8IG9wdHNfb3V0LT5mb3JjZV9xdW90ZV9hbGwpKQotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJLyot IHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05f RVJST1IgKi8KLQkJCQkgZXJybXNnKCJDT1BZICVzIHJlcXVpcmVzIENTViBtb2RlIiwgIkZP UkNFX1FVT1RFIikpKTsKLQlpZiAoKG9wdHNfb3V0LT5mb3JjZV9xdW90ZSB8fCBvcHRzX291 dC0+Zm9yY2VfcXVvdGVfYWxsKSAmJiBpc19mcm9tKQotCQllcmVwb3J0KEVSUk9SLAotCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJLyotIHRyYW5z bGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05f RVJST1IsCi0JCSBzZWNvbmQgJXMgaXMgYSBDT1BZIHdpdGggZGlyZWN0aW9uLCBlLmcuIENP UFkgVE8gKi8KLQkJCQkgZXJybXNnKCJDT1BZICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMi LCAiRk9SQ0VfUVVPVEUiLAotCQkJCQkJIkNPUFkgRlJPTSIpKSk7CisJCWlmICghaXNfZnJv bSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJLyotIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBu YW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gT05fRVJST1IsCisJCQlzZWNvbmQgJXMgaXMg YSBDT1BZIHdpdGggZGlyZWN0aW9uLCBlLmcuIENPUFkgVE8gKi8KKwkJCQkJZXJybXNnKCJD T1BZICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiRk9SQ0VfTlVMTCIsCisJCQkJCQkJ IkNPUFkgVE8iKSkpOworCX0KKwllbHNlCisJeworCQkvKiBObyBkZWZhdWx0IGFjdGlvbiBu ZWVkZWQgKi8KKwl9CiAKLQkvKiBDaGVjayBmb3JjZV9ub3RudWxsICovCi0JaWYgKG9wdHNf b3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0LT5mb3JjZV9ub3Ru dWxsICE9IE5JTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFt ZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCi0JCQkJIGVycm1zZygiQ09Q WSAlcyByZXF1aXJlcyBDU1YgbW9kZSIsICJGT1JDRV9OT1RfTlVMTCIpKSk7Ci0JaWYgKG9w dHNfb3V0LT5mb3JjZV9ub3RudWxsICE9IE5JTCAmJiAhaXNfZnJvbSkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK LQkJLyotIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRp b24sIGUuZy4gT05fRVJST1IsCi0JCSBzZWNvbmQgJXMgaXMgYSBDT1BZIHdpdGggZGlyZWN0 aW9uLCBlLmcuIENPUFkgVE8gKi8KLQkJCQkgZXJybXNnKCJDT1BZICVzIGNhbm5vdCBiZSB1 c2VkIHdpdGggJXMiLCAiRk9SQ0VfTk9UX05VTEwiLAotCQkJCQkJIkNPUFkgVE8iKSkpOwor CS8qIC0tLSBPTl9FUlJPUiBvcHRpb24gLS0tICovCisJaWYgKG9uX2Vycm9yX3NwZWNpZmll ZCkKKwl7CisJCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAm JgorCQkJb3B0c19vdXQtPm9uX2Vycm9yICE9IENPUFlfT05fRVJST1JfU1RPUCkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJ CQkJZXJybXNnKCJvbmx5IE9OX0VSUk9SIFNUT1AgaXMgYWxsb3dlZCBpbiBCSU5BUlkgbW9k ZSIpKSk7CiAKLQkvKiBDaGVjayBmb3JjZV9udWxsICovCi0JaWYgKG9wdHNfb3V0LT5mb3Jt YXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0LT5mb3JjZV9udWxsICE9IE5JTCkK LQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCi0JCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkg b3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCi0JCQkJIGVycm1zZygiQ09QWSAlcyByZXF1aXJl cyBDU1YgbW9kZSIsICJGT1JDRV9OVUxMIikpKTsKKwl9CisJZWxzZQorCXsKKwkJLyogRGVm YXVsdCBpcyBDT1BZX09OX0VSUk9SX1NUT1AgKi8KKwkJb3B0c19vdXQtPm9uX2Vycm9yID0g Q09QWV9PTl9FUlJPUl9TVE9QOworCX0KIAotCWlmIChvcHRzX291dC0+Zm9yY2VfbnVsbCAh PSBOSUwgJiYgIWlzX2Zyb20pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCS8qLSB0cmFuc2xhdG9yOiBmaXJz dCAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SLAotCQkg c2Vjb25kICVzIGlzIGEgQ09QWSB3aXRoIGRpcmVjdGlvbiwgZS5nLiBDT1BZIFRPICovCi0J CQkJIGVycm1zZygiQ09QWSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiwgIkZPUkNFX05V TEwiLAotCQkJCQkJIkNPUFkgVE8iKSkpOworCS8qIC0tLSBERUZBVUxUIG9wdGlvbiAtLS0g Ki8KKwlpZiAob3B0c19vdXQtPmRlZmF1bHRfcHJpbnQpCisJeworCQlpZiAob3B0c19vdXQt PmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImNhbm5v dCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIkRFRkFVTFQiKSkpOwogCi0JLyogRG9u J3QgYWxsb3cgdGhlIGRlbGltaXRlciB0byBhcHBlYXIgaW4gdGhlIG51bGwgc3RyaW5nLiAq LwotCWlmIChzdHJjaHIob3B0c19vdXQtPm51bGxfcHJpbnQsIG9wdHNfb3V0LT5kZWxpbVsw XSkgIT0gTlVMTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKLQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBu YW1lIG9mIGEgQ09QWSBvcHRpb24sIGUuZy4gTlVMTCAqLwotCQkJCSBlcnJtc2coIkNPUFkg ZGVsaW1pdGVyIGNoYXJhY3RlciBtdXN0IG5vdCBhcHBlYXIgaW4gdGhlICVzIHNwZWNpZmlj YXRpb24iLAotCQkJCQkJIk5VTEwiKSkpOworCQkvKiBBc3NlcnQgb3B0aW9ucyBoYXZlIGJl ZW4gc2V0IChkZWZhdWx0cyBhcHBsaWVkIGlmIG5vdCBzcGVjaWZpZWQpICovCisJCUFzc2Vy dChvcHRzX291dC0+ZGVsaW0pOworCQlBc3NlcnQob3B0c19vdXQtPnF1b3RlKTsKKwkJQXNz ZXJ0KG9wdHNfb3V0LT5udWxsX3ByaW50KTsKIAotCS8qIERvbid0IGFsbG93IHRoZSBDU1Yg cXVvdGUgY2hhciB0byBhcHBlYXIgaW4gdGhlIG51bGwgc3RyaW5nLiAqLwotCWlmIChvcHRz X291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTViAmJgotCQlzdHJjaHIob3B0c19vdXQt Pm51bGxfcHJpbnQsIG9wdHNfb3V0LT5xdW90ZVswXSkgIT0gTlVMTCkKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK LQkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09QWSBvcHRpb24sIGUu Zy4gTlVMTCAqLwotCQkJCSBlcnJtc2coIkNTViBxdW90ZSBjaGFyYWN0ZXIgbXVzdCBub3Qg YXBwZWFyIGluIHRoZSAlcyBzcGVjaWZpY2F0aW9uIiwKLQkJCQkJCSJOVUxMIikpKTsKKwkJ b3B0c19vdXQtPmRlZmF1bHRfcHJpbnRfbGVuID0gc3RybGVuKG9wdHNfb3V0LT5kZWZhdWx0 X3ByaW50KTsKIAotCS8qIENoZWNrIGZyZWV6ZSAqLwotCWlmIChvcHRzX291dC0+ZnJlZXpl ICYmICFpc19mcm9tKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkvKi0gdHJhbnNsYXRvcjogZmlyc3QgJXMg aXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiwKLQkJIHNlY29u ZCAlcyBpcyBhIENPUFkgd2l0aCBkaXJlY3Rpb24sIGUuZy4gQ09QWSBUTyAqLwotCQkJCSBl cnJtc2coIkNPUFkgJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIsICJGUkVFWkUiLAotCQkJ CQkJIkNPUFkgVE8iKSkpOworCQlpZiAoc3RyY2hyKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50 LCAnXHInKSAhPSBOVUxMIHx8CisJCQlzdHJjaHIob3B0c19vdXQtPmRlZmF1bHRfcHJpbnQs ICdcbicpICE9IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiQ09QWSBkZWZh dWx0IHJlcHJlc2VudGF0aW9uIGNhbm5vdCB1c2UgbmV3bGluZSBvciBjYXJyaWFnZSByZXR1 cm4iKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50KQotCXsKIAkJaWYgKCFp c19mcm9tKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLApAQCAtODc0LDYgKzkzNCw1NSBAQCBQcm9jZXNzQ29weU9w dGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coIk5VTEwgc3BlY2lmaWNhdGlvbiBh bmQgREVGQVVMVCBzcGVjaWZpY2F0aW9uIGNhbm5vdCBiZSB0aGUgc2FtZSIpKSk7CiAJfQor CWVsc2UKKwl7CisJCS8qIE5vIGRlZmF1bHQgZm9yIGRlZmF1bHRfcHJpbnQ7IHJlbWFpbnMg TlVMTCAqLworCX0KKworCS8qCisJICogQWRkaXRpb25hbCBjaGVja3MgZm9yIGludGVyZGVw ZW5kZW50IG9wdGlvbnMKKwkgKi8KKworCSAvKiBDaGVja3Mgc3BlY2lmaWMgdG8gdGhlIENT ViBhbmQgVEVYVCBmb3JtYXRzICovCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9G T1JNQVRfVEVYVCB8fAorCQlvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikK Kwl7CisJCS8qIEFzc2VydCBvcHRpb25zIGhhdmUgYmVlbiBzZXQgKGRlZmF1bHRzIGFwcGxp ZWQgaWYgbm90IHNwZWNpZmllZCkgKi8KKwkJQXNzZXJ0KG9wdHNfb3V0LT5kZWxpbSk7CisJ CUFzc2VydChvcHRzX291dC0+bnVsbF9wcmludCk7CisKKwkJLyogRG9uJ3QgYWxsb3cgdGhl IGRlbGltaXRlciB0byBhcHBlYXIgaW4gdGhlIE5VTEwgb3IgREVGQVVMVCBzdHJpbmdzICov CisKKwkJaWYgKHN0cmNocihvcHRzX291dC0+bnVsbF9wcmludCwgb3B0c19vdXQtPmRlbGlt WzBdKSAhPSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMg dGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBOVUxMICovCisJCQkJCWVycm1zZygi Q09QWSBkZWxpbWl0ZXIgY2hhcmFjdGVyIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgJXMgc3Bl Y2lmaWNhdGlvbiIsCisJCQkJCQkJIk5VTEwiKSkpOworCX0KKworCSAvKiBDaGVja3Mgc3Bl Y2lmaWMgdG8gdGhlIENTViBmb3JtYXQgKi8KKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBD T1BZX0ZPUk1BVF9DU1YpCisJeworCQkvKiBBc3NlcnQgb3B0aW9ucyBoYXZlIGJlZW4gc2V0 IChkZWZhdWx0cyBhcHBsaWVkIGlmIG5vdCBzcGVjaWZpZWQpICovCisJCUFzc2VydChvcHRz X291dC0+ZGVsaW0pOworCQlBc3NlcnQob3B0c19vdXQtPnF1b3RlKTsKKwkJQXNzZXJ0KG9w dHNfb3V0LT5udWxsX3ByaW50KTsKKworCQlpZiAob3B0c19vdXQtPmRlbGltWzBdID09IG9w dHNfb3V0LT5xdW90ZVswXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coIkNPUFkgZGVs aW1pdGVyIGFuZCBxdW90ZSBtdXN0IGJlIGRpZmZlcmVudCIpKSk7CisKKwkJLyogRG9uJ3Qg YWxsb3cgdGhlIENTViBxdW90ZSBjaGFyYWN0ZXIgaW4gdGhlIE5VTEwgb3IgREVGQVVMVCBz dHJpbmdzICovCisKKwkJaWYgKHN0cmNocihvcHRzX291dC0+bnVsbF9wcmludCwgb3B0c19v dXQtPnF1b3RlWzBdKSAhPSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkvKi0gdHJhbnNsYXRv cjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBOVUxMICovCisJCQkJ CSBlcnJtc2coIkNTViBxdW90ZSBjaGFyYWN0ZXIgbXVzdCBub3QgYXBwZWFyIGluIHRoZSAl cyBzcGVjaWZpY2F0aW9uIiwKKwkJCQkJCQkiTlVMTCIpKSk7CisJfQogfQogCiAvKgotLSAK Mi40NS4xCgo= --f1bf6761bdf74f248b3316aa99ba32b1--