From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8238EC31E5B for ; Mon, 17 Jun 2019 14:54:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 57B6B208C4 for ; Mon, 17 Jun 2019 14:54:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="P8cGqfrW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 57B6B208C4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=fsf7HprYcZL+zXrLBoKH/LaX8oH7Q3GQMFDqRwf7NXo=; b=P8cGqfrW2tHUUB TcLEOLvt8dZWa7ut4sxlU92V+B3jox9vO7aDqvdcQmRvtmAnLOiFOz1RrygzUgAL5rvS+EFbrZLMj EWwwoF6M0+7A8iFaX9K7lr9n+jNETgERldy2mrDBGISzuVeHA2nmTHZAE45c3fSDLthEJLtHhbml0 ziRhz2jlcy55Qe+gMMVI6b3ena/FabRDWZQTQNDu3vh5ROKqrAOGY7nUOIrUBHY0a7frs4DBYKGhd cxSCaJc65G6u7IYgGD86QsSmgkDHDZI15GZGrZZSBzszEuQ1UfSXr+Nn/DYQDTNNbAdL8RNBgrdF0 nin/ufZ0prrBL0lDlULQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hct1q-0006og-1q; Mon, 17 Jun 2019 14:54:38 +0000 Received: from relay2-d.mail.gandi.net ([217.70.183.194]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hcszc-00059d-31 for linux-arm-kernel@lists.infradead.org; Mon, 17 Jun 2019 14:52:23 +0000 X-Originating-IP: 90.88.23.150 Received: from localhost (aaubervilliers-681-1-81-150.w90-88.abo.wanadoo.fr [90.88.23.150]) (Authenticated sender: maxime.ripard@bootlin.com) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 7856040005; Mon, 17 Jun 2019 14:52:14 +0000 (UTC) From: Maxime Ripard To: Maarten Lankhorst , Sean Paul , Maxime Ripard , Daniel Vetter , David Airlie Subject: [PATCH v5 05/12] drm/modes: Rewrite the command line parser Date: Mon, 17 Jun 2019 16:51:32 +0200 Message-Id: X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_075220_515213_1D111130 X-CRM114-Status: GOOD ( 18.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: eben@raspberrypi.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Eric Anholt , noralf@tronnes.org, Thomas Petazzoni , Maxime Ripard , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CgpS ZXdyaXRlIHRoZSBjb21tYW5kIGxpbmUgcGFyc2VyIGluIG9yZGVyIHRvIGdldCBhd2F5IGZyb20g dGhlIHN0YXRlIG1hY2hpbmUKcGFyc2luZyB0aGUgdmlkZW8gbW9kZSBsaW5lcy4KCkhvcGVmdWxs eSwgdGhpcyB3aWxsIGFsbG93IHRvIGV4dGVuZCBpdCBtb3JlIGVhc2lseSB0byBzdXBwb3J0IG5h bWVkIG1vZGVzCmFuZCAvIG9yIHByb3BlcnRpZXMgc2V0IGRpcmVjdGx5IG9uIHRoZSBjb21tYW5k IGxpbmUuCgpSZXZpZXdlZC1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+ ClNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJv bnMuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYyB8IDMyNSArKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjEwIGluc2VydGlv bnMoKyksIDExNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJt X21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKaW5kZXggNWEwN2EyOGZlYzZk Li42ZGViYmQ2YzE3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIGF1 dGhvcml6YXRpb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSBhbmQgYXV0aG9yKHMpLgog ICovCiAKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4K ICNpbmNsdWRlIDxsaW51eC9saXN0X3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4K QEAgLTE0MDgsNiArMTQwOSwxNTEgQEAgdm9pZCBkcm1fY29ubmVjdG9yX2xpc3RfdXBkYXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jb25u ZWN0b3JfbGlzdF91cGRhdGUpOwogCitzdGF0aWMgaW50IGRybV9tb2RlX3BhcnNlX2NtZGxpbmVf YnBwKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZF9wdHIsCisJCQkJICAgICAgc3RydWN0IGRy bV9jbWRsaW5lX21vZGUgKm1vZGUpCit7CisJdW5zaWduZWQgaW50IGJwcDsKKworCWlmIChzdHJb MF0gIT0gJy0nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cisrOworCWJwcCA9IHNpbXBsZV9z dHJ0b2woc3RyLCBlbmRfcHRyLCAxMCk7CisJaWYgKCplbmRfcHRyID09IHN0cikKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwltb2RlLT5icHAgPSBicHA7CisJbW9kZS0+YnBwX3NwZWNpZmllZCA9IHRy dWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcm1fbW9kZV9wYXJzZV9jbWRsaW5l X3JlZnJlc2goY29uc3QgY2hhciAqc3RyLCBjaGFyICoqZW5kX3B0ciwKKwkJCQkJICBzdHJ1Y3Qg ZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVmcmVzaDsKKworCWlm IChzdHJbMF0gIT0gJ0AnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cisrOworCXJlZnJlc2gg PSBzaW1wbGVfc3RydG9sKHN0ciwgZW5kX3B0ciwgMTApOworCWlmICgqZW5kX3B0ciA9PSBzdHIp CisJCXJldHVybiAtRUlOVkFMOworCisJbW9kZS0+cmVmcmVzaCA9IHJlZnJlc2g7CisJbW9kZS0+ cmVmcmVzaF9zcGVjaWZpZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZHJtX21vZGVfcGFyc2VfY21kbGluZV9leHRyYShjb25zdCBjaGFyICpzdHIsIGludCBsZW5ndGgs CisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXN0cnVjdCBkcm1f Y21kbGluZV9tb2RlICptb2RlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0 aDsgaSsrKSB7CisJCXN3aXRjaCAoc3RyW2ldKSB7CisJCWNhc2UgJ2knOgorCQkJbW9kZS0+aW50 ZXJsYWNlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCW1vZGUtPm1hcmdpbnMg PSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJaWYgKG1vZGUtPmZvcmNlICE9IERS TV9GT1JDRV9VTlNQRUNJRklFRCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKChjb25u ZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSAmJgorCQkJ ICAgIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1J QikpCisJCQkJbW9kZS0+Zm9yY2UgPSBEUk1fRk9SQ0VfT047CisJCQllbHNlCisJCQkJbW9kZS0+ Zm9yY2UgPSBEUk1fRk9SQ0VfT05fRElHSVRBTDsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJ CWlmIChtb2RlLT5mb3JjZSAhPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQpCisJCQkJcmV0dXJuIC1F SU5WQUw7CisKKwkJCW1vZGUtPmZvcmNlID0gRFJNX0ZPUkNFX09GRjsKKwkJCWJyZWFrOworCQlj YXNlICdlJzoKKwkJCWlmIChtb2RlLT5mb3JjZSAhPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQpCisJ CQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCW1vZGUtPmZvcmNlID0gRFJNX0ZPUkNFX09OOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGRybV9tb2RlX3BhcnNlX2NtZGxpbmVfcmVzX21vZGUoY29u c3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQkJCQkgICBib29sIGV4dHJhcywK KwkJCQkJICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0 IGRybV9jbWRsaW5lX21vZGUgKm1vZGUpCit7CisJY29uc3QgY2hhciAqc3RyX3N0YXJ0ID0gc3Ry OworCWJvb2wgcmIgPSBmYWxzZSwgY3Z0ID0gZmFsc2U7CisJaW50IHhyZXMgPSAwLCB5cmVzID0g MDsKKwlpbnQgcmVtYWluaW5nLCBpOworCWNoYXIgKmVuZF9wdHI7CisKKwl4cmVzID0gc2ltcGxl X3N0cnRvbChzdHIsICZlbmRfcHRyLCAxMCk7CisJaWYgKGVuZF9wdHIgPT0gc3RyKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmIChlbmRfcHRyWzBdICE9ICd4JykKKwkJcmV0dXJuIC1FSU5WQUw7 CisJZW5kX3B0cisrOworCisJc3RyID0gZW5kX3B0cjsKKwl5cmVzID0gc2ltcGxlX3N0cnRvbChz dHIsICZlbmRfcHRyLCAxMCk7CisJaWYgKGVuZF9wdHIgPT0gc3RyKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJlbWFpbmluZyA9IGxlbmd0aCAtIChlbmRfcHRyIC0gc3RyX3N0YXJ0KTsKKwlpZiAo cmVtYWluaW5nIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVt YWluaW5nOyBpKyspIHsKKwkJc3dpdGNoIChlbmRfcHRyW2ldKSB7CisJCWNhc2UgJ00nOgorCQkJ Y3Z0ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlICdSJzoKKwkJCXJiID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIFRyeSB0byBwYXNzIHRoYXQgdG8gb3VyIGV4 dHJhcyBwYXJzaW5nCisJCQkgKiBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhl CisJCQkgKiBleHRyYXMgYXJlIGRpcmVjdGx5IGFmdGVyIHRoZSByZXNvbHV0aW9uCisJCQkgKi8K KwkJCWlmIChleHRyYXMpIHsKKwkJCQlpbnQgcmV0ID0gZHJtX21vZGVfcGFyc2VfY21kbGluZV9l eHRyYShlbmRfcHRyICsgaSwKKwkJCQkJCQkJICAgICAgIDEsCisJCQkJCQkJCSAgICAgICBjb25u ZWN0b3IsCisJCQkJCQkJCSAgICAgICBtb2RlKTsKKwkJCQlpZiAocmV0KQorCQkJCQlyZXR1cm4g cmV0OworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKwor CW1vZGUtPnhyZXMgPSB4cmVzOworCW1vZGUtPnlyZXMgPSB5cmVzOworCW1vZGUtPmN2dCA9IGN2 dDsKKwltb2RlLT5yYiA9IHJiOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZHJtX21vZGVf cGFyc2VfY29tbWFuZF9saW5lX2Zvcl9jb25uZWN0b3IgLSBwYXJzZSBjb21tYW5kIGxpbmUgbW9k ZWxpbmUgZm9yIGNvbm5lY3RvcgogICogQG1vZGVfb3B0aW9uOiBvcHRpb25hbCBwZXIgY29ubmVj dG9yIG1vZGUgb3B0aW9uCkBAIC0xNDM0LDEzICsxNTgwLDEyIEBAIGJvb2wgZHJtX21vZGVfcGFy c2VfY29tbWFuZF9saW5lX2Zvcl9jb25uZWN0b3IoY29uc3QgY2hhciAqbW9kZV9vcHRpb24sCiAJ CQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSkKIHsKIAljb25zdCBjaGFy ICpuYW1lOwotCXVuc2lnbmVkIGludCBuYW1lbGVuOwotCWJvb2wgcmVzX3NwZWNpZmllZCA9IGZh bHNlLCBicHBfc3BlY2lmaWVkID0gZmFsc2UsIHJlZnJlc2hfc3BlY2lmaWVkID0gZmFsc2U7Ci0J dW5zaWduZWQgaW50IHhyZXMgPSAwLCB5cmVzID0gMCwgYnBwID0gMzIsIHJlZnJlc2ggPSAwOwot CWJvb2wgeXJlc19zcGVjaWZpZWQgPSBmYWxzZSwgY3Z0ID0gZmFsc2UsIHJiID0gZmFsc2U7Ci0J Ym9vbCBpbnRlcmxhY2UgPSBmYWxzZSwgbWFyZ2lucyA9IGZhbHNlLCB3YXNfZGlnaXQgPSBmYWxz ZTsKLQlpbnQgaTsKLQllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2UgPSBEUk1fRk9SQ0Vf VU5TUEVDSUZJRUQ7CisJYm9vbCBwYXJzZV9leHRyYXMgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQg YnBwX29mZiA9IDAsIHJlZnJlc2hfb2ZmID0gMDsKKwl1bnNpZ25lZCBpbnQgbW9kZV9lbmQgPSAw OworCWNoYXIgKmJwcF9wdHIgPSBOVUxMLCAqcmVmcmVzaF9wdHIgPSBOVUxMLCAqZXh0cmFfcHRy ID0gTlVMTDsKKwljaGFyICpicHBfZW5kX3B0ciA9IE5VTEwsICpyZWZyZXNoX2VuZF9wdHIgPSBO VUxMOworCWludCByZXQ7CiAKICNpZmRlZiBDT05GSUdfRkIKIAlpZiAoIW1vZGVfb3B0aW9uKQpA QCAtMTQ1MywxMjcgKzE1OTgsNzcgQEAgYm9vbCBkcm1fbW9kZV9wYXJzZV9jb21tYW5kX2xpbmVf Zm9yX2Nvbm5lY3Rvcihjb25zdCBjaGFyICptb2RlX29wdGlvbiwKIAl9CiAKIAluYW1lID0gbW9k ZV9vcHRpb247Ci0JbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKLQlmb3IgKGkgPSBuYW1lbGVuLTE7 IGkgPj0gMDsgaS0tKSB7Ci0JCXN3aXRjaCAobmFtZVtpXSkgewotCQljYXNlICdAJzoKLQkJCWlm ICghcmVmcmVzaF9zcGVjaWZpZWQgJiYgIWJwcF9zcGVjaWZpZWQgJiYKLQkJCSAgICAheXJlc19z cGVjaWZpZWQgJiYgIWN2dCAmJiAhcmIgJiYgd2FzX2RpZ2l0KSB7Ci0JCQkJcmVmcmVzaCA9IHNp bXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwgMTApOwotCQkJCXJlZnJlc2hfc3BlY2lmaWVk ID0gdHJ1ZTsKLQkJCQl3YXNfZGlnaXQgPSBmYWxzZTsKLQkJCX0gZWxzZQotCQkJCWdvdG8gZG9u ZTsKLQkJCWJyZWFrOwotCQljYXNlICctJzoKLQkJCWlmICghYnBwX3NwZWNpZmllZCAmJiAheXJl c19zcGVjaWZpZWQgJiYgIWN2dCAmJgotCQkJICAgICFyYiAmJiB3YXNfZGlnaXQpIHsKLQkJCQli cHAgPSBzaW1wbGVfc3RydG9sKCZuYW1lW2krMV0sIE5VTEwsIDEwKTsKLQkJCQlicHBfc3BlY2lm aWVkID0gdHJ1ZTsKLQkJCQl3YXNfZGlnaXQgPSBmYWxzZTsKLQkJCX0gZWxzZQotCQkJCWdvdG8g ZG9uZTsKLQkJCWJyZWFrOwotCQljYXNlICd4JzoKLQkJCWlmICgheXJlc19zcGVjaWZpZWQgJiYg d2FzX2RpZ2l0KSB7Ci0JCQkJeXJlcyA9IHNpbXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwg MTApOwotCQkJCXlyZXNfc3BlY2lmaWVkID0gdHJ1ZTsKLQkJCQl3YXNfZGlnaXQgPSBmYWxzZTsK LQkJCX0gZWxzZQotCQkJCWdvdG8gZG9uZTsKLQkJCWJyZWFrOwotCQljYXNlICcwJyAuLi4gJzkn OgotCQkJd2FzX2RpZ2l0ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlICdNJzoKLQkJCWlmICh5 cmVzX3NwZWNpZmllZCB8fCBjdnQgfHwgd2FzX2RpZ2l0KQotCQkJCWdvdG8gZG9uZTsKLQkJCWN2 dCA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAnUic6Ci0JCQlpZiAoeXJlc19zcGVjaWZpZWQg fHwgY3Z0IHx8IHJiIHx8IHdhc19kaWdpdCkKLQkJCQlnb3RvIGRvbmU7Ci0JCQlyYiA9IHRydWU7 Ci0JCQlicmVhazsKLQkJY2FzZSAnbSc6Ci0JCQlpZiAoY3Z0IHx8IHlyZXNfc3BlY2lmaWVkIHx8 IHdhc19kaWdpdCkKLQkJCQlnb3RvIGRvbmU7Ci0JCQltYXJnaW5zID0gdHJ1ZTsKLQkJCWJyZWFr OwotCQljYXNlICdpJzoKLQkJCWlmIChjdnQgfHwgeXJlc19zcGVjaWZpZWQgfHwgd2FzX2RpZ2l0 KQotCQkJCWdvdG8gZG9uZTsKLQkJCWludGVybGFjZSA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2Fz ZSAnZSc6Ci0JCQlpZiAoeXJlc19zcGVjaWZpZWQgfHwgYnBwX3NwZWNpZmllZCB8fCByZWZyZXNo X3NwZWNpZmllZCB8fAotCQkJICAgIHdhc19kaWdpdCB8fCAoZm9yY2UgIT0gRFJNX0ZPUkNFX1VO U1BFQ0lGSUVEKSkKLQkJCQlnb3RvIGRvbmU7CiAKLQkJCWZvcmNlID0gRFJNX0ZPUkNFX09OOwot CQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJaWYgKHlyZXNfc3BlY2lmaWVkIHx8IGJwcF9zcGVj aWZpZWQgfHwgcmVmcmVzaF9zcGVjaWZpZWQgfHwKLQkJCSAgICB3YXNfZGlnaXQgfHwgKGZvcmNl ICE9IERSTV9GT1JDRV9VTlNQRUNJRklFRCkpCi0JCQkJZ290byBkb25lOworCWlmICghaXNkaWdp dChuYW1lWzBdKSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVj dG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpICYmCi0JCQkgICAgKGNvbm5lY3Rv ci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKLQkJCQlmb3Jj ZSA9IERSTV9GT1JDRV9PTjsKLQkJCWVsc2UKLQkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTl9ESUdJ VEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ2QnOgotCQkJaWYgKHlyZXNfc3BlY2lmaWVkIHx8IGJw cF9zcGVjaWZpZWQgfHwgcmVmcmVzaF9zcGVjaWZpZWQgfHwKLQkJCSAgICB3YXNfZGlnaXQgfHwg KGZvcmNlICE9IERSTV9GT1JDRV9VTlNQRUNJRklFRCkpCi0JCQkJZ290byBkb25lOworCS8qIFRy eSB0byBsb2NhdGUgdGhlIGJwcCBhbmQgcmVmcmVzaCBzcGVjaWZpZXJzLCBpZiBhbnkgKi8KKwli cHBfcHRyID0gc3RyY2hyKG5hbWUsICctJyk7CisJaWYgKGJwcF9wdHIpIHsKKwkJYnBwX29mZiA9 IGJwcF9wdHIgLSBuYW1lOworCQltb2RlLT5icHBfc3BlY2lmaWVkID0gdHJ1ZTsKKwl9CiAKLQkJ CWZvcmNlID0gRFJNX0ZPUkNFX09GRjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZ290byBk b25lOwotCQl9CisJcmVmcmVzaF9wdHIgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwlpZiAocmVmcmVz aF9wdHIpIHsKKwkJcmVmcmVzaF9vZmYgPSByZWZyZXNoX3B0ciAtIG5hbWU7CisJCW1vZGUtPnJl ZnJlc2hfc3BlY2lmaWVkID0gdHJ1ZTsKIAl9CiAKLQlpZiAoaSA8IDAgJiYgeXJlc19zcGVjaWZp ZWQpIHsKLQkJY2hhciAqY2g7Ci0JCXhyZXMgPSBzaW1wbGVfc3RydG9sKG5hbWUsICZjaCwgMTAp OwotCQlpZiAoKGNoICE9IE5VTEwpICYmICgqY2ggPT0gJ3gnKSkKLQkJCXJlc19zcGVjaWZpZWQg PSB0cnVlOwotCQllbHNlCi0JCQlpID0gY2ggLSBuYW1lOwotCX0gZWxzZSBpZiAoIXlyZXNfc3Bl Y2lmaWVkICYmIHdhc19kaWdpdCkgewotCQkvKiBjYXRjaCBtb2RlIHRoYXQgYmVnaW5zIHdpdGgg ZGlnaXRzIGJ1dCBoYXMgbm8gJ3gnICovCi0JCWkgPSAwOworCS8qIExvY2F0ZSB0aGUgZW5kIG9m IHRoZSBuYW1lIC8gcmVzb2x1dGlvbiwgYW5kIHBhcnNlIGl0ICovCisJaWYgKGJwcF9wdHIgJiYg cmVmcmVzaF9wdHIpIHsKKwkJbW9kZV9lbmQgPSBtaW4oYnBwX29mZiwgcmVmcmVzaF9vZmYpOwor CX0gZWxzZSBpZiAoYnBwX3B0cikgeworCQltb2RlX2VuZCA9IGJwcF9vZmY7CisJfSBlbHNlIGlm IChyZWZyZXNoX3B0cikgeworCQltb2RlX2VuZCA9IHJlZnJlc2hfb2ZmOworCX0gZWxzZSB7CisJ CW1vZGVfZW5kID0gc3RybGVuKG5hbWUpOworCQlwYXJzZV9leHRyYXMgPSB0cnVlOwogCX0KLWRv bmU6Ci0JaWYgKGkgPj0gMCkgewotCQlwcl93YXJuKCJbZHJtXSBwYXJzZSBlcnJvciBhdCBwb3Np dGlvbiAlaSBpbiB2aWRlbyBtb2RlICclcydcbiIsCi0JCQlpLCBuYW1lKTsKLQkJbW9kZS0+c3Bl Y2lmaWVkID0gZmFsc2U7CisKKwlyZXQgPSBkcm1fbW9kZV9wYXJzZV9jbWRsaW5lX3Jlc19tb2Rl KG5hbWUsIG1vZGVfZW5kLAorCQkJCQkgICAgICBwYXJzZV9leHRyYXMsCisJCQkJCSAgICAgIGNv bm5lY3RvciwKKwkJCQkJICAgICAgbW9kZSk7CisJaWYgKHJldCkKIAkJcmV0dXJuIGZhbHNlOwot CX0KKwltb2RlLT5zcGVjaWZpZWQgPSB0cnVlOwogCi0JaWYgKHJlc19zcGVjaWZpZWQpIHsKLQkJ bW9kZS0+c3BlY2lmaWVkID0gdHJ1ZTsKLQkJbW9kZS0+eHJlcyA9IHhyZXM7Ci0JCW1vZGUtPnly ZXMgPSB5cmVzOworCWlmIChicHBfcHRyKSB7CisJCXJldCA9IGRybV9tb2RlX3BhcnNlX2NtZGxp bmVfYnBwKGJwcF9wdHIsICZicHBfZW5kX3B0ciwgbW9kZSk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gZmFsc2U7CiAJfQogCi0JaWYgKHJlZnJlc2hfc3BlY2lmaWVkKSB7Ci0JCW1vZGUtPnJlZnJl c2hfc3BlY2lmaWVkID0gdHJ1ZTsKLQkJbW9kZS0+cmVmcmVzaCA9IHJlZnJlc2g7CisJaWYgKHJl ZnJlc2hfcHRyKSB7CisJCXJldCA9IGRybV9tb2RlX3BhcnNlX2NtZGxpbmVfcmVmcmVzaChyZWZy ZXNoX3B0ciwKKwkJCQkJCSAgICAgJnJlZnJlc2hfZW5kX3B0ciwgbW9kZSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGJwcF9zcGVjaWZpZWQpIHsKLQkJbW9kZS0+ YnBwX3NwZWNpZmllZCA9IHRydWU7Ci0JCW1vZGUtPmJwcCA9IGJwcDsKKwkvKgorCSAqIExvY2F0 ZSB0aGUgZW5kIG9mIHRoZSBicHAgLyByZWZyZXNoLCBhbmQgcGFyc2UgdGhlIGV4dHJhcworCSAq IGlmIHJlbGV2YW50CisJICovCisJaWYgKGJwcF9wdHIgJiYgcmVmcmVzaF9wdHIpCisJCWV4dHJh X3B0ciA9IG1heChicHBfZW5kX3B0ciwgcmVmcmVzaF9lbmRfcHRyKTsKKwllbHNlIGlmIChicHBf cHRyKQorCQlleHRyYV9wdHIgPSBicHBfZW5kX3B0cjsKKwllbHNlIGlmIChyZWZyZXNoX3B0cikK KwkJZXh0cmFfcHRyID0gcmVmcmVzaF9lbmRfcHRyOworCisJaWYgKGV4dHJhX3B0cikgeworCQlp bnQgcmVtYWluaW5nID0gc3RybGVuKG5hbWUpIC0gKGV4dHJhX3B0ciAtIG5hbWUpOworCisJCS8q CisJCSAqIFdlIHN0aWxsIGhhdmUgY2hhcmFjdGVycyB0byBwcm9jZXNzLCB3aGlsZQorCQkgKiB3 ZSBzaG91bGRuJ3QgaGF2ZSBhbnkKKwkJICovCisJCWlmIChyZW1haW5pbmcgPiAwKQorCQkJcmV0 dXJuIGZhbHNlOwogCX0KLQltb2RlLT5yYiA9IHJiOwotCW1vZGUtPmN2dCA9IGN2dDsKLQltb2Rl LT5pbnRlcmxhY2UgPSBpbnRlcmxhY2U7Ci0JbW9kZS0+bWFyZ2lucyA9IG1hcmdpbnM7Ci0JbW9k ZS0+Zm9yY2UgPSBmb3JjZTsKIAogCXJldHVybiB0cnVlOwogfQotLSAKZ2l0LXNlcmllcyAwLjku MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=