Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ojFID-0007CK-IT for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Oct 2022 07:39:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ojFIC-0007GJ-5R for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Oct 2022 07:39:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ojFIB-0007G5-9U for pgsql-hackers@lists.postgresql.org; Fri, 14 Oct 2022 07:39:39 +0000 Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ojFI1-0006HS-TJ for pgsql-hackers@postgresql.org; Fri, 14 Oct 2022 07:39:38 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id A22373200413 for ; Fri, 14 Oct 2022 03:39:28 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 14 Oct 2022 03:39:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1665733168; x= 1665819568; bh=VAgSgI4SZMDDHCHDaMK3sJKjjFfpcg4NMxQjrilDpRg=; b=c InMPxtP5QKG3MON6NBBjiE5ViYdOMX8yHHv5aGgYbjoPQEIYUXl9RJfgFpRt9U9W xcgmiX4Biy+7v3V5dhOQ14xWZAqw7li4MfJ0xrvWbYn8AP8u6nKMH0TUvM5eXwq7 5xLxJTlR/enEHhbn/+24G81itKWGEo1G/vpH6iZPSH36ftpliUFxgYYoP/Ayp2Sn hp1JAg9+ZI74H3jIwJAWGj8kBboAKifMLwfI2Nr3cqVeHTDCKTakNr6wfHXTugSd b7lBkwE1/Gy22t1kZWN6H8CH+A2ZiEsChlLFrZNSBYE8Ybze6LcwJMoRHvo8KQja tnsDeUm3wLeVOquwYlQeQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrfeekuddguddvgecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurheptgfkffggfgfhuffvsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrghtth gvrhhnpeetveeuvdeikeeigefhveffhffhvdejveelleefieekieekvdffgeetkedutdef leenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvg htvghrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Fri, 14 Oct 2022 03:39:27 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------YAHrgDq4rV3jodJNVUAxqfPC" Message-ID: <95c30f96-4060-2f48-98b5-a4392d3b6066@enterprisedb.com> Date: Fri, 14 Oct 2022 09:39:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Content-Language: en-US From: Peter Eisentraut Subject: refactor ownercheck and aclcheck functions To: pgsql-hackers 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. --------------YAHrgDq4rV3jodJNVUAxqfPC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit These patches take the dozens of mostly-duplicate pg_foo_ownercheck() and pg_foo_aclcheck() functions and replace (most of) them by common functions that are driven by the ObjectProperty table. All the required information is already in that table. This is similar to the consolidation of the drop-by-OID functions that we did a while ago (b1d32d3e3230f00b5baba08f75b4f665c7d6dac6). --------------YAHrgDq4rV3jodJNVUAxqfPC Content-Type: text/plain; charset=UTF-8; name="0001-Refactor-ownercheck-functions.patch" Content-Disposition: attachment; filename="0001-Refactor-ownercheck-functions.patch" Content-Transfer-Encoding: base64 RnJvbSBmYzk4YTdiZGI5ZjJkMWE0N2Y2NzMwNWM3OGFlY2MzODVjYzEwZjIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxNCBPY3QgMjAyMiAwOToxNjo1MSArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIFJlZmFjdG9yIG93bmVyY2hlY2sgZnVuY3Rpb25zCgpJbnN0ZWFkIG9mIGRv emVucyBvZiBtb3N0bHktZHVwbGljYXRlIHBnX2Zvb19vd25lcmNoZWNrKCkgZnVuY3Rpb25z LAp3cml0ZSBvbmUgY29tbW9uIGZ1bmN0aW9uIG9iamVjdF9vd25lcmNoZWNrKCkgdGhhdCBj YW4gaGFuZGxlIGFsbW9zdAphbGwgb2YgdGhlbS4gIFdlIGFscmVhZHkgaGF2ZSBhbGwgdGhl IGluZm9ybWF0aW9uIHdlIG5lZWQsIHN1Y2ggYXMKd2hpY2ggc3lzdGVtIGNhdGFsb2cgY29y cmVzcG9uZHMgdG8gd2hpY2ggY2F0YWxvZyB0YWJsZSwgYW5kIHdoaWNoCmNvbHVtbiBpcyB0 aGUgb3duZXIgY29sdW1uLgoKSSBrZXB0IGEgZmV3IHBnX2Zvb19vd25lcmNoZWNrKCkgYXJv dW5kIGFzIHRoaW4gd3JhcHBlcnMgYmVjYXVzZSB0aGV5CmFyZSB3aWRlbHkgdXNlZCB0aHJv dWdoIHRoZSBjb2RlLiAgQW5kIHRoZXJlIGFyZSBhbHNvIGEgY291cGxlIHRoYXQKZG9uJ3Qg d29yayB2aWEgdGhlIGdlbmVyaWMgZnVuY3Rpb24sIHNvIHRob3NlIHN0YXkgYXMgaXMuCi0t LQogc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAgICAgICAgIHwgNTE3ICsrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNz LmMgICAgIHwgIDkyICstLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRz LmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAg ICB8ICAgNCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYyAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wcm9jbGFuZy5jICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICB8ICAgNCArLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgICAgICAgIHwgICAyICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgfCAgIDYgKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYyAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvdHNlYXJjaGNtZHMuYyAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS91dGls cy9hY2wuaCAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDcx IGluc2VydGlvbnMoKyksIDU5NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwpp bmRleCBhYTVhMmVkOTQ4M2UuLmQ2N2QzYjUyMmNlZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb252ZXJzaW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgpAQCAtNTExMSwyNSArNTExMiwzMCBAQCBw Z190eXBlX2FjbGNoZWNrKE9pZCB0eXBlX29pZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtb2Rl KQogfQogCiAvKgotICogT3duZXJzaGlwIGNoZWNrIGZvciBhIHJlbGF0aW9uIChzcGVjaWZp ZWQgYnkgT0lEKS4KKyAqIEdlbmVyaWMgb3duZXJzaGlwIGNoZWNrIGZvciBhbiBvYmplY3QK ICAqLwogYm9vbAotcGdfY2xhc3Nfb3duZXJjaGVjayhPaWQgY2xhc3Nfb2lkLCBPaWQgcm9s ZWlkKQorb2JqZWN0X293bmVyY2hlY2soT2lkIGNsYXNzaWQsIE9pZCBvYmplY3RpZCwgT2lk IHJvbGVpZCkKIHsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJT2lkCQkJb3duZXJJZDsKKwlib29s CQlpc251bGw7CiAKIAkvKiBTdXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVj a2luZy4gKi8KIAlpZiAoc3VwZXJ1c2VyX2FyZyhyb2xlaWQpKQogCQlyZXR1cm4gdHJ1ZTsK IAotCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShj bGFzc19vaWQpKTsKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShnZXRfb2JqZWN0X2NhdGNh Y2hlX29pZChjbGFzc2lkKSwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RpZCkpOwogCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCiAJCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9VTkRFRklORURfVEFCTEUpLAotCQkJCSBlcnJtc2coInJlbGF0aW9uIHdp dGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgY2xhc3Nfb2lkKSkpOworCQkJCShlcnJjb2Rl KEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygiJXMgd2l0aCBPSUQg JXUgZG9lcyBub3QgZXhpc3QiLCBnZXRfb2JqZWN0X2NsYXNzX2Rlc2NyKGNsYXNzaWQpLCBv YmplY3RpZCkpKTsKIAotCW93bmVySWQgPSAoKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCh0 dXBsZSkpLT5yZWxvd25lcjsKKwlvd25lcklkID0gRGF0dW1HZXRPYmplY3RJZChTeXNDYWNo ZUdldEF0dHIoZ2V0X29iamVjdF9jYXRjYWNoZV9vaWQoY2xhc3NpZCksCisJCQkJCQkJCQkJ CSAgIHR1cGxlLAorCQkJCQkJCQkJCQkgICBnZXRfb2JqZWN0X2F0dG51bV9vd25lcihjbGFz c2lkKSwKKwkJCQkJCQkJCQkJICAgJmlzbnVsbCkpOworCUFzc2VydCghaXNudWxsKTsKIAog CVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CiAKQEAgLTUxMzcsMTA3ICs1MTQzLDQzIEBAIHBn X2NsYXNzX293bmVyY2hlY2soT2lkIGNsYXNzX29pZCwgT2lkIHJvbGVpZCkKIH0KIAogLyoK LSAqIE93bmVyc2hpcCBjaGVjayBmb3IgYSB0eXBlIChzcGVjaWZpZWQgYnkgT0lEKS4KKyAq IFdyYXBwZXIgZnVuY3Rpb25zIGZvciBjb21tb25seSB1c2VkIGNhc2VzCiAgKi8KKwogYm9v bAotcGdfdHlwZV9vd25lcmNoZWNrKE9pZCB0eXBlX29pZCwgT2lkIHJvbGVpZCkKK3BnX2Ns YXNzX293bmVyY2hlY2soT2lkIGNsYXNzX29pZCwgT2lkIHJvbGVpZCkKIHsKLQlIZWFwVHVw bGUJdHVwbGU7Ci0JT2lkCQkJb3duZXJJZDsKLQotCS8qIFN1cGVydXNlcnMgYnlwYXNzIGFs bCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkp Ci0JCXJldHVybiB0cnVlOwotCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwg T2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJ0eXBlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4 aXN0IiwgdHlwZV9vaWQpKSk7Ci0KLQlvd25lcklkID0gKChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVCh0dXBsZSkpLT50eXBvd25lcjsKLQotCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJ cmV0dXJuIG9iamVjdF9vd25lcmNoZWNrKFJlbGF0aW9uUmVsYXRpb25JZCwgY2xhc3Nfb2lk LCByb2xlaWQpOworfQogCi0JcmV0dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3du ZXJJZCk7Citib29sCitwZ190eXBlX293bmVyY2hlY2soT2lkIHR5cGVfb2lkLCBPaWQgcm9s ZWlkKQoreworCXJldHVybiBvYmplY3Rfb3duZXJjaGVjayhUeXBlUmVsYXRpb25JZCwgdHlw ZV9vaWQsIHJvbGVpZCk7CiB9CiAKLS8qCi0gKiBPd25lcnNoaXAgY2hlY2sgZm9yIGFuIG9w ZXJhdG9yIChzcGVjaWZpZWQgYnkgT0lEKS4KLSAqLwogYm9vbAogcGdfb3Blcl9vd25lcmNo ZWNrKE9pZCBvcGVyX29pZCwgT2lkIHJvbGVpZCkKIHsKLQlIZWFwVHVwbGUJdHVwbGU7Ci0J T2lkCQkJb3duZXJJZDsKLQotCS8qIFN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9u IGNoZWNraW5nLiAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiB0 cnVlOwotCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvcGVyX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCWVy ZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfRlVOQ1RJT04p LAotCQkJCSBlcnJtc2coIm9wZXJhdG9yIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0Iiwg b3Blcl9vaWQpKSk7Ci0KLQlvd25lcklkID0gKChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJV Q1QodHVwbGUpKS0+b3Byb3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0J cmV0dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7CisJcmV0dXJuIG9i amVjdF9vd25lcmNoZWNrKE9wZXJhdG9yUmVsYXRpb25JZCwgb3Blcl9vaWQsIHJvbGVpZCk7 CiB9CiAKLS8qCi0gKiBPd25lcnNoaXAgY2hlY2sgZm9yIGEgZnVuY3Rpb24gKHNwZWNpZmll ZCBieSBPSUQpLgotICovCiBib29sCiBwZ19wcm9jX293bmVyY2hlY2soT2lkIHByb2Nfb2lk LCBPaWQgcm9sZWlkKQogewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJCQlvd25lcklkOwot Ci0JLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0J aWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2Nfb2lkKSk7 Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GVU5DVElPTiksCi0JCQkJIGVycm1zZygi ZnVuY3Rpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBwcm9jX29pZCkpKTsKLQot CW93bmVySWQgPSAoKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHR1cGxlKSktPnByb293bmVy OwotCi0JUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKLQotCXJldHVybiBoYXNfcHJpdnNfb2Zf cm9sZShyb2xlaWQsIG93bmVySWQpOworCXJldHVybiBvYmplY3Rfb3duZXJjaGVjayhQcm9j ZWR1cmVSZWxhdGlvbklkLCBwcm9jX29pZCwgcm9sZWlkKTsKIH0KIAotLyoKLSAqIE93bmVy c2hpcCBjaGVjayBmb3IgYSBwcm9jZWR1cmFsIGxhbmd1YWdlIChzcGVjaWZpZWQgYnkgT0lE KQotICovCiBib29sCi1wZ19sYW5ndWFnZV9vd25lcmNoZWNrKE9pZCBsYW5fb2lkLCBPaWQg cm9sZWlkKQorcGdfbmFtZXNwYWNlX293bmVyY2hlY2soT2lkIG5zcF9vaWQsIE9pZCByb2xl aWQpCiB7Ci0JSGVhcFR1cGxlCXR1cGxlOwotCU9pZAkJCW93bmVySWQ7Ci0KLQkvKiBTdXBl cnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KLQlpZiAoc3VwZXJ1 c2VyX2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXR1cGxlID0gU2VhcmNoU3lz Q2FjaGUxKExBTkdPSUQsIE9iamVjdElkR2V0RGF0dW0obGFuX29pZCkpOwotCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9VTkRFRklORURfRlVOQ1RJT04pLAotCQkJCSBlcnJtc2coImxhbmd1YWdlIHdp dGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgbGFuX29pZCkpKTsKLQotCW93bmVySWQgPSAo KEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVCh0dXBsZSkpLT5sYW5vd25lcjsKLQotCVJl bGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJcmV0dXJuIG9iamVjdF9vd25lcmNoZWNrKE5hbWVz cGFjZVJlbGF0aW9uSWQsIG5zcF9vaWQsIHJvbGVpZCk7Cit9CiAKLQlyZXR1cm4gaGFzX3By aXZzX29mX3JvbGUocm9sZWlkLCBvd25lcklkKTsKK2Jvb2wKK3BnX2RhdGFiYXNlX293bmVy Y2hlY2soT2lkIGRiX29pZCwgT2lkIHJvbGVpZCkKK3sKKwlyZXR1cm4gb2JqZWN0X293bmVy Y2hlY2soRGF0YWJhc2VSZWxhdGlvbklkLCBkYl9vaWQsIHJvbGVpZCk7CiB9CiAKIC8qCkBA IC01Mjg2LDMyNiArNTIyOCw2IEBAIHBnX2xhcmdlb2JqZWN0X293bmVyY2hlY2soT2lkIGxv Ympfb2lkLCBPaWQgcm9sZWlkKQogCXJldHVybiBoYXNfcHJpdnNfb2Zfcm9sZShyb2xlaWQs IG93bmVySWQpOwogfQogCi0vKgotICogT3duZXJzaGlwIGNoZWNrIGZvciBhIG5hbWVzcGFj ZSAoc3BlY2lmaWVkIGJ5IE9JRCkuCi0gKi8KLWJvb2wKLXBnX25hbWVzcGFjZV9vd25lcmNo ZWNrKE9pZCBuc3Bfb2lkLCBPaWQgcm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlP aWQJCQlvd25lcklkOwotCi0JLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24g Y2hlY2tpbmcuICovCi0JaWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRy dWU7Ci0KLQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShOQU1FU1BBQ0VPSUQsIE9iamVjdElk R2V0RGF0dW0obnNwX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0J CWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfU0NIRU1B KSwKLQkJCQkgZXJybXNnKCJzY2hlbWEgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBu c3Bfb2lkKSkpOwotCi0Jb3duZXJJZCA9ICgoRm9ybV9wZ19uYW1lc3BhY2UpIEdFVFNUUlVD VCh0dXBsZSkpLT5uc3Bvd25lcjsKLQotCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0KLQly ZXR1cm4gaGFzX3ByaXZzX29mX3JvbGUocm9sZWlkLCBvd25lcklkKTsKLX0KLQotLyoKLSAq IE93bmVyc2hpcCBjaGVjayBmb3IgYSB0YWJsZXNwYWNlIChzcGVjaWZpZWQgYnkgT0lEKS4K LSAqLwotYm9vbAotcGdfdGFibGVzcGFjZV9vd25lcmNoZWNrKE9pZCBzcGNfb2lkLCBPaWQg cm9sZWlkKQotewotCUhlYXBUdXBsZQlzcGN0dXBsZTsKLQlPaWQJCQlzcGNvd25lcjsKLQot CS8qIFN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwotCWlm IChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiB0cnVlOwotCi0JLyogU2VhcmNo IHN5c2NhY2hlIGZvciBwZ190YWJsZXNwYWNlICovCi0Jc3BjdHVwbGUgPSBTZWFyY2hTeXND YWNoZTEoVEFCTEVTUEFDRU9JRCwgT2JqZWN0SWRHZXREYXR1bShzcGNfb2lkKSk7Ci0JaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHNwY3R1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coInRhYmxl c3BhY2Ugd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBzcGNfb2lkKSkpOwotCi0Jc3Bj b3duZXIgPSAoKEZvcm1fcGdfdGFibGVzcGFjZSkgR0VUU1RSVUNUKHNwY3R1cGxlKSktPnNw Y293bmVyOwotCi0JUmVsZWFzZVN5c0NhY2hlKHNwY3R1cGxlKTsKLQotCXJldHVybiBoYXNf cHJpdnNfb2Zfcm9sZShyb2xlaWQsIHNwY293bmVyKTsKLX0KLQotLyoKLSAqIE93bmVyc2hp cCBjaGVjayBmb3IgYW4gb3BlcmF0b3IgY2xhc3MgKHNwZWNpZmllZCBieSBPSUQpLgotICov Ci1ib29sCi1wZ19vcGNsYXNzX293bmVyY2hlY2soT2lkIG9wY19vaWQsIE9pZCByb2xlaWQp Ci17Ci0JSGVhcFR1cGxlCXR1cGxlOwotCU9pZAkJCW93bmVySWQ7Ci0KLQkvKiBTdXBlcnVz ZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KLQlpZiAoc3VwZXJ1c2Vy X2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNfb2lkKSk7Ci0JaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coIm9wZXJhdG9yIGNsYXNzIHdp dGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCW9wY19vaWQpKSk7Ci0KLQlvd25l cklkID0gKChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVCh0dXBsZSkpLT5vcGNvd25lcjsK LQotCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0KLQlyZXR1cm4gaGFzX3ByaXZzX29mX3Jv bGUocm9sZWlkLCBvd25lcklkKTsKLX0KLQotLyoKLSAqIE93bmVyc2hpcCBjaGVjayBmb3Ig YW4gb3BlcmF0b3IgZmFtaWx5IChzcGVjaWZpZWQgYnkgT0lEKS4KLSAqLwotYm9vbAotcGdf b3BmYW1pbHlfb3duZXJjaGVjayhPaWQgb3BmX29pZCwgT2lkIHJvbGVpZCkKLXsKLQlIZWFw VHVwbGUJdHVwbGU7Ci0JT2lkCQkJb3duZXJJZDsKLQotCS8qIFN1cGVydXNlcnMgYnlwYXNz IGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVp ZCkpCi0JCXJldHVybiB0cnVlOwotCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1J TFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJvcGVyYXRvciBmYW1pbHkgd2l0aCBP SUQgJXUgZG9lcyBub3QgZXhpc3QiLAotCQkJCQkJb3BmX29pZCkpKTsKLQotCW93bmVySWQg PSAoKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVCh0dXBsZSkpLT5vcGZvd25lcjsKLQot CVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0KLQlyZXR1cm4gaGFzX3ByaXZzX29mX3JvbGUo cm9sZWlkLCBvd25lcklkKTsKLX0KLQotLyoKLSAqIE93bmVyc2hpcCBjaGVjayBmb3IgYSB0 ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IChzcGVjaWZpZWQgYnkgT0lEKS4KLSAqLwotYm9vbAot cGdfdHNfZGljdF9vd25lcmNoZWNrKE9pZCBkaWN0X29pZCwgT2lkIHJvbGVpZCkKLXsKLQlI ZWFwVHVwbGUJdHVwbGU7Ci0JT2lkCQkJb3duZXJJZDsKLQotCS8qIFN1cGVydXNlcnMgYnlw YXNzIGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJv bGVpZCkpCi0JCXJldHVybiB0cnVlOwotCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFNE SUNUT0lELCBPYmplY3RJZEdldERhdHVtKGRpY3Rfb2lkKSk7Ci0JaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RF X1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coInRleHQgc2VhcmNoIGRpY3Rpb25h cnkgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAotCQkJCQkJZGljdF9vaWQpKSk7Ci0K LQlvd25lcklkID0gKChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0dXBsZSkpLT5kaWN0 b3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0JcmV0dXJuIGhhc19wcml2 c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0KLS8qCi0gKiBPd25lcnNoaXAgY2hl Y2sgZm9yIGEgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiAoc3BlY2lmaWVkIGJ5IE9JRCku Ci0gKi8KLWJvb2wKLXBnX3RzX2NvbmZpZ19vd25lcmNoZWNrKE9pZCBjZmdfb2lkLCBPaWQg cm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJCQlvd25lcklkOwotCi0JLyog U3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0JaWYgKHN1 cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQl0dXBsZSA9IFNlYXJj aFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShjZmdfb2lkKSk7Ci0J aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coInRleHQg c2VhcmNoIGNvbmZpZ3VyYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAotCQkJ CQkJY2ZnX29pZCkpKTsKLQotCW93bmVySWQgPSAoKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRT VFJVQ1QodHVwbGUpKS0+Y2Znb3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwot Ci0JcmV0dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0KLS8q Ci0gKiBPd25lcnNoaXAgY2hlY2sgZm9yIGEgZm9yZWlnbi1kYXRhIHdyYXBwZXIgKHNwZWNp ZmllZCBieSBPSUQpLgotICovCi1ib29sCi1wZ19mb3JlaWduX2RhdGFfd3JhcHBlcl9vd25l cmNoZWNrKE9pZCBzcnZfb2lkLCBPaWQgcm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsK LQlPaWQJCQlvd25lcklkOwotCi0JLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Np b24gY2hlY2tpbmcuICovCi0JaWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJu IHRydWU7Ci0KLQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJP SUQsIE9iamVjdElkR2V0RGF0dW0oc3J2X29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRo IE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCi0JCQkJCQlzcnZfb2lkKSkpOwotCi0Jb3duZXJJ ZCA9ICgoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKHR1cGxlKSkt PmZkd293bmVyOwotCi0JUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKLQotCXJldHVybiBoYXNf cHJpdnNfb2Zfcm9sZShyb2xlaWQsIG93bmVySWQpOwotfQotCi0vKgotICogT3duZXJzaGlw IGNoZWNrIGZvciBhIGZvcmVpZ24gc2VydmVyIChzcGVjaWZpZWQgYnkgT0lEKS4KLSAqLwot Ym9vbAotcGdfZm9yZWlnbl9zZXJ2ZXJfb3duZXJjaGVjayhPaWQgc3J2X29pZCwgT2lkIHJv bGVpZCkKLXsKLQlIZWFwVHVwbGUJdHVwbGU7Ci0JT2lkCQkJb3duZXJJZDsKLQotCS8qIFN1 cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwotCWlmIChzdXBl cnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiB0cnVlOwotCi0JdHVwbGUgPSBTZWFyY2hT eXNDYWNoZTEoRk9SRUlHTlNFUlZFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShzcnZfb2lkKSk7 Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coImZv cmVpZ24gc2VydmVyIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCXNydl9v aWQpKSk7Ci0KLQlvd25lcklkID0gKChGb3JtX3BnX2ZvcmVpZ25fc2VydmVyKSBHRVRTVFJV Q1QodHVwbGUpKS0+c3J2b3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0J cmV0dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0KLS8qCi0g KiBPd25lcnNoaXAgY2hlY2sgZm9yIGFuIGV2ZW50IHRyaWdnZXIgKHNwZWNpZmllZCBieSBP SUQpLgotICovCi1ib29sCi1wZ19ldmVudF90cmlnZ2VyX293bmVyY2hlY2soT2lkIGV0X29p ZCwgT2lkIHJvbGVpZCkKLXsKLQlIZWFwVHVwbGUJdHVwbGU7Ci0JT2lkCQkJb3duZXJJZDsK LQotCS8qIFN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAqLwot CWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiB0cnVlOwotCi0JdHVwbGUg PSBTZWFyY2hTeXNDYWNoZTEoRVZFTlRUUklHR0VST0lELCBPYmplY3RJZEdldERhdHVtKGV0 X29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJS T1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKLQkJCQkgZXJy bXNnKCJldmVudCB0cmlnZ2VyIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJ CWV0X29pZCkpKTsKLQotCW93bmVySWQgPSAoKEZvcm1fcGdfZXZlbnRfdHJpZ2dlcikgR0VU U1RSVUNUKHR1cGxlKSktPmV2dG93bmVyOwotCi0JUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsK LQotCXJldHVybiBoYXNfcHJpdnNfb2Zfcm9sZShyb2xlaWQsIG93bmVySWQpOwotfQotCi0v KgotICogT3duZXJzaGlwIGNoZWNrIGZvciBhIGRhdGFiYXNlIChzcGVjaWZpZWQgYnkgT0lE KS4KLSAqLwotYm9vbAotcGdfZGF0YWJhc2Vfb3duZXJjaGVjayhPaWQgZGJfb2lkLCBPaWQg cm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJCQlkYmE7Ci0KLQkvKiBTdXBl cnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KLQlpZiAoc3VwZXJ1 c2VyX2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXR1cGxlID0gU2VhcmNoU3lz Q2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJZEdldERhdHVtKGRiX29pZCkpOwotCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9VTkRFRklORURfREFUQUJBU0UpLAotCQkJCSBlcnJtc2coImRhdGFiYXNl IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgZGJfb2lkKSkpOwotCi0JZGJhID0gKChG b3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwbGUpKS0+ZGF0ZGJhOwotCi0JUmVsZWFz ZVN5c0NhY2hlKHR1cGxlKTsKLQotCXJldHVybiBoYXNfcHJpdnNfb2Zfcm9sZShyb2xlaWQs IGRiYSk7Ci19Ci0KLS8qCi0gKiBPd25lcnNoaXAgY2hlY2sgZm9yIGEgY29sbGF0aW9uIChz cGVjaWZpZWQgYnkgT0lEKS4KLSAqLwotYm9vbAotcGdfY29sbGF0aW9uX293bmVyY2hlY2so T2lkIGNvbGxfb2lkLCBPaWQgcm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJ CQlvd25lcklkOwotCi0JLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hl Y2tpbmcuICovCi0JaWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRydWU7 Ci0KLQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVt KGNvbGxfb2lkKSk7Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9y dChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJ CSBlcnJtc2coImNvbGxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGNvbGxf b2lkKSkpOwotCi0Jb3duZXJJZCA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0 dXBsZSkpLT5jb2xsb3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0JcmV0 dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0KLS8qCi0gKiBP d25lcnNoaXAgY2hlY2sgZm9yIGEgY29udmVyc2lvbiAoc3BlY2lmaWVkIGJ5IE9JRCkuCi0g Ki8KLWJvb2wKLXBnX2NvbnZlcnNpb25fb3duZXJjaGVjayhPaWQgY29udl9vaWQsIE9pZCBy b2xlaWQpCi17Ci0JSGVhcFR1cGxlCXR1cGxlOwotCU9pZAkJCW93bmVySWQ7Ci0KLQkvKiBT dXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KLQlpZiAoc3Vw ZXJ1c2VyX2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXR1cGxlID0gU2VhcmNo U3lzQ2FjaGUxKENPTlZPSUQsIE9iamVjdElkR2V0RGF0dW0oY29udl9vaWQpKTsKLQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJj b2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCi0JCQkJIGVycm1zZygiY29udmVyc2lv biB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGNvbnZfb2lkKSkpOwotCi0Jb3duZXJJ ZCA9ICgoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QodHVwbGUpKS0+Y29ub3duZXI7 Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0JcmV0dXJuIGhhc19wcml2c19vZl9y b2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0KIC8qCiAgKiBPd25lcnNoaXAgY2hlY2sgZm9y IGFuIGV4dGVuc2lvbiAoc3BlY2lmaWVkIGJ5IE9JRCkuCiAgKi8KQEAgLTU2NDgsODUgKzUy NzAsNiBAQCBwZ19leHRlbnNpb25fb3duZXJjaGVjayhPaWQgZXh0X29pZCwgT2lkIHJvbGVp ZCkKIAlyZXR1cm4gaGFzX3ByaXZzX29mX3JvbGUocm9sZWlkLCBvd25lcklkKTsKIH0KIAot LyoKLSAqIE93bmVyc2hpcCBjaGVjayBmb3IgYSBwdWJsaWNhdGlvbiAoc3BlY2lmaWVkIGJ5 IE9JRCkuCi0gKi8KLWJvb2wKLXBnX3B1YmxpY2F0aW9uX293bmVyY2hlY2soT2lkIHB1Yl9v aWQsIE9pZCByb2xlaWQpCi17Ci0JSGVhcFR1cGxlCXR1cGxlOwotCU9pZAkJCW93bmVySWQ7 Ci0KLQkvKiBTdXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8K LQlpZiAoc3VwZXJ1c2VyX2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXR1cGxl ID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELCBPYmplY3RJZEdldERhdHVtKHB1 Yl9vaWQpKTsKLQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQotCQllcmVwb3J0KEVS Uk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCi0JCQkJIGVy cm1zZygicHVibGljYXRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBwdWJfb2lk KSkpOwotCi0Jb3duZXJJZCA9ICgoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHR1 cGxlKSktPnB1Ym93bmVyOwotCi0JUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKLQotCXJldHVy biBoYXNfcHJpdnNfb2Zfcm9sZShyb2xlaWQsIG93bmVySWQpOwotfQotCi0vKgotICogT3du ZXJzaGlwIGNoZWNrIGZvciBhIHN1YnNjcmlwdGlvbiAoc3BlY2lmaWVkIGJ5IE9JRCkuCi0g Ki8KLWJvb2wKLXBnX3N1YnNjcmlwdGlvbl9vd25lcmNoZWNrKE9pZCBzdWJfb2lkLCBPaWQg cm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJCQlvd25lcklkOwotCi0JLyog U3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0JaWYgKHN1 cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQl0dXBsZSA9IFNlYXJj aFN5c0NhY2hlMShTVUJTQ1JJUFRJT05PSUQsIE9iamVjdElkR2V0RGF0dW0oc3ViX29pZCkp OwotCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKLQkJCQkgZXJybXNnKCJz dWJzY3JpcHRpb24gd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBzdWJfb2lkKSkpOwot Ci0Jb3duZXJJZCA9ICgoRm9ybV9wZ19zdWJzY3JpcHRpb24pIEdFVFNUUlVDVCh0dXBsZSkp LT5zdWJvd25lcjsKLQotCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0KLQlyZXR1cm4gaGFz X3ByaXZzX29mX3JvbGUocm9sZWlkLCBvd25lcklkKTsKLX0KLQotLyoKLSAqIE93bmVyc2hp cCBjaGVjayBmb3IgYSBzdGF0aXN0aWNzIG9iamVjdCAoc3BlY2lmaWVkIGJ5IE9JRCkuCi0g Ki8KLWJvb2wKLXBnX3N0YXRpc3RpY3Nfb2JqZWN0X293bmVyY2hlY2soT2lkIHN0YXRfb2lk LCBPaWQgcm9sZWlkKQotewotCUhlYXBUdXBsZQl0dXBsZTsKLQlPaWQJCQlvd25lcklkOwot Ci0JLyogU3VwZXJ1c2VycyBieXBhc3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0J aWYgKHN1cGVydXNlcl9hcmcocm9sZWlkKSkKLQkJcmV0dXJuIHRydWU7Ci0KLQl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmplY3RJZEdldERhdHVtKHN0YXRfb2lk KSk7Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwK LQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2co InN0YXRpc3RpY3Mgb2JqZWN0IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJ CXN0YXRfb2lkKSkpOwotCi0Jb3duZXJJZCA9ICgoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBH RVRTVFJVQ1QodHVwbGUpKS0+c3R4b3duZXI7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUp OwotCi0JcmV0dXJuIGhhc19wcml2c19vZl9yb2xlKHJvbGVpZCwgb3duZXJJZCk7Ci19Ci0K IC8qCiAgKiBDaGVjayB3aGV0aGVyIHNwZWNpZmllZCByb2xlIGhhcyBDUkVBVEVST0xFIHBy aXZpbGVnZSAob3IgaXMgYSBzdXBlcnVzZXIpCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVj dGFkZHJlc3MuYwppbmRleCAyODRjYTU1NDY5ZTAuLjgwYzkxMTBmZDFhOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKKysrIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKQEAgLTI0NDMsMTEgKzI0NDMsNiBAQCBjaGVj a19vYmplY3Rfb3duZXJzaGlwKE9pZCByb2xlaWQsIE9iamVjdFR5cGUgb2JqdHlwZSwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzLAogCQkJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9P V05FUiwgb2JqdHlwZSwKIAkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxh dGlvbikpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgotCQkJaWYgKCFw Z19kYXRhYmFzZV9vd25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkpCi0JCQkJ YWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAotCQkJCQkJCSAg IHN0clZhbChvYmplY3QpKTsKLQkJCWJyZWFrOwogCQljYXNlIE9CSkVDVF9UWVBFOgogCQlj YXNlIE9CSkVDVF9ET01BSU46CiAJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKQEAgLTI0ODEs MjcgKzI0NzYsMzIgQEAgY2hlY2tfb2JqZWN0X293bmVyc2hpcChPaWQgcm9sZWlkLCBPYmpl Y3RUeXBlIG9ianR5cGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIAkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CiAJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKIAkJY2FzZSBPQkpFQ1RfUk9V VElORToKLQkJCWlmICghcGdfcHJvY19vd25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJv bGVpZCkpCi0JCQkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBl LAotCQkJCQkJCSAgIE5hbWVMaXN0VG9TdHJpbmcoKGNhc3ROb2RlKE9iamVjdFdpdGhBcmdz LCBvYmplY3QpKS0+b2JqbmFtZSkpOwotCQkJYnJlYWs7CiAJCWNhc2UgT0JKRUNUX09QRVJB VE9SOgotCQkJaWYgKCFwZ19vcGVyX293bmVyY2hlY2soYWRkcmVzcy5vYmplY3RJZCwgcm9s ZWlkKSkKKwkJCWlmICghb2JqZWN0X293bmVyY2hlY2soYWRkcmVzcy5jbGFzc0lkLCBhZGRy ZXNzLm9iamVjdElkLCByb2xlaWQpKQogCQkJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05P VF9PV05FUiwgb2JqdHlwZSwKIAkJCQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKChjYXN0Tm9k ZShPYmplY3RXaXRoQXJncywgb2JqZWN0KSktPm9iam5hbWUpKTsKIAkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJ Y2FzZSBPQkpFQ1RfRkRXOgorCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJY2Fz ZSBPQkpFQ1RfTEFOR1VBR0U6CisJCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OOgogCQljYXNl IE9CSkVDVF9TQ0hFTUE6Ci0JCQlpZiAoIXBnX25hbWVzcGFjZV9vd25lcmNoZWNrKGFkZHJl c3Mub2JqZWN0SWQsIHJvbGVpZCkpCisJCWNhc2UgT0JKRUNUX1NVQlNDUklQVElPTjoKKwkJ Y2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCWlmICghb2JqZWN0X293bmVyY2hlY2soYWRk cmVzcy5jbGFzc0lkLCBhZGRyZXNzLm9iamVjdElkLCByb2xlaWQpKQogCQkJCWFjbGNoZWNr X2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKIAkJCQkJCQkgICBzdHJWYWwo b2JqZWN0KSk7CiAJCQlicmVhazsKIAkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgotCQkJaWYg KCFwZ19jb2xsYXRpb25fb3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQpKQot CQkJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKLQkJCQkJ CQkgICBOYW1lTGlzdFRvU3RyaW5nKGNhc3ROb2RlKExpc3QsIG9iamVjdCkpKTsKLQkJCWJy ZWFrOwogCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgotCQkJaWYgKCFwZ19jb252ZXJzaW9u X293bmVyY2hlY2soYWRkcmVzcy5vYmplY3RJZCwgcm9sZWlkKSkKKwkJY2FzZSBPQkpFQ1Rf T1BDTEFTUzoKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCWNhc2UgT0JKRUNUX1NUQVRJ U1RJQ19FWFQ6CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1Rf VFNDT05GSUdVUkFUSU9OOgorCQkJaWYgKCFvYmplY3Rfb3duZXJjaGVjayhhZGRyZXNzLmNs YXNzSWQsIGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkpCiAJCQkJYWNsY2hlY2tfZXJyb3Io QUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAogCQkJCQkJCSAgIE5hbWVMaXN0VG9TdHJp bmcoY2FzdE5vZGUoTGlzdCwgb2JqZWN0KSkpOwogCQkJYnJlYWs7CkBAIC0yNTEwLDM2ICsy NTEwLDYgQEAgY2hlY2tfb2JqZWN0X293bmVyc2hpcChPaWQgcm9sZWlkLCBPYmplY3RUeXBl IG9ianR5cGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIAkJCQlhY2xjaGVja19lcnJvcihB Q0xDSEVDS19OT1RfT1dORVIsIG9ianR5cGUsCiAJCQkJCQkJICAgc3RyVmFsKG9iamVjdCkp OwogCQkJYnJlYWs7Ci0JCWNhc2UgT0JKRUNUX0ZEVzoKLQkJCWlmICghcGdfZm9yZWlnbl9k YXRhX3dyYXBwZXJfb3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQpKQotCQkJ CWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKLQkJCQkJCQkg ICBzdHJWYWwob2JqZWN0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9T RVJWRVI6Ci0JCQlpZiAoIXBnX2ZvcmVpZ25fc2VydmVyX293bmVyY2hlY2soYWRkcmVzcy5v YmplY3RJZCwgcm9sZWlkKSkKLQkJCQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dO RVIsIG9ianR5cGUsCi0JCQkJCQkJICAgc3RyVmFsKG9iamVjdCkpOwotCQkJYnJlYWs7Ci0J CWNhc2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6Ci0JCQlpZiAoIXBnX2V2ZW50X3RyaWdnZXJf b3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQpKQotCQkJCWFjbGNoZWNrX2Vy cm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKLQkJCQkJCQkgICBzdHJWYWwob2Jq ZWN0KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6Ci0JCQlpZiAoIXBn X2xhbmd1YWdlX293bmVyY2hlY2soYWRkcmVzcy5vYmplY3RJZCwgcm9sZWlkKSkKLQkJCQlh Y2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIsIG9ianR5cGUsCi0JCQkJCQkJICAg c3RyVmFsKG9iamVjdCkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0JKRUNUX09QQ0xBU1M6Ci0J CQlpZiAoIXBnX29wY2xhc3Nfb3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQp KQotCQkJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKLQkJ CQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKGNhc3ROb2RlKExpc3QsIG9iamVjdCkpKTsKLQkJ CWJyZWFrOwotCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKLQkJCWlmICghcGdfb3BmYW1pbHlf b3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQpKQotCQkJCWFjbGNoZWNrX2Vy cm9yKEFDTENIRUNLX05PVF9PV05FUiwgb2JqdHlwZSwKLQkJCQkJCQkgICBOYW1lTGlzdFRv U3RyaW5nKGNhc3ROb2RlKExpc3QsIG9iamVjdCkpKTsKLQkJCWJyZWFrOwogCQljYXNlIE9C SkVDVF9MQVJHRU9CSkVDVDoKIAkJCWlmICghbG9fY29tcGF0X3ByaXZpbGVnZXMgJiYKIAkJ CQkhcGdfbGFyZ2VvYmplY3Rfb3duZXJjaGVjayhhZGRyZXNzLm9iamVjdElkLCByb2xlaWQp KQpAQCAtMjU2NSwxNiArMjUzNSw2IEBAIGNoZWNrX29iamVjdF9vd25lcnNoaXAoT2lkIHJv bGVpZCwgT2JqZWN0VHlwZSBvYmp0eXBlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiAJCQkJ CQkJCQlmb3JtYXRfdHlwZV9iZSh0YXJnZXR0eXBlaWQpKSkpOwogCQkJfQogCQkJYnJlYWs7 Ci0JCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OOgotCQkJaWYgKCFwZ19wdWJsaWNhdGlvbl9v d25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkpCi0JCQkJYWNsY2hlY2tfZXJy b3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAotCQkJCQkJCSAgIHN0clZhbChvYmpl Y3QpKTsKLQkJCWJyZWFrOwotCQljYXNlIE9CSkVDVF9TVUJTQ1JJUFRJT046Ci0JCQlpZiAo IXBnX3N1YnNjcmlwdGlvbl9vd25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkp Ci0JCQkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAotCQkJ CQkJCSAgIHN0clZhbChvYmplY3QpKTsKLQkJCWJyZWFrOwogCQljYXNlIE9CSkVDVF9UUkFO U0ZPUk06CiAJCQl7CiAJCQkJVHlwZU5hbWUgICAqdHlwZW5hbWUgPSBsaW5pdGlhbF9ub2Rl KFR5cGVOYW1lLCBjYXN0Tm9kZShMaXN0LCBvYmplY3QpKTsKQEAgLTI1ODQsMjEgKzI1NDQs NiBAQCBjaGVja19vYmplY3Rfb3duZXJzaGlwKE9pZCByb2xlaWQsIE9iamVjdFR5cGUgb2Jq dHlwZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogCQkJCQlhY2xjaGVja19lcnJvcl90eXBl KEFDTENIRUNLX05PVF9PV05FUiwgdHlwZWlkKTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNl IE9CSkVDVF9UQUJMRVNQQUNFOgotCQkJaWYgKCFwZ190YWJsZXNwYWNlX293bmVyY2hlY2so YWRkcmVzcy5vYmplY3RJZCwgcm9sZWlkKSkKLQkJCQlhY2xjaGVja19lcnJvcihBQ0xDSEVD S19OT1RfT1dORVIsIG9ianR5cGUsCi0JCQkJCQkJICAgc3RyVmFsKG9iamVjdCkpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKLQkJCWlmICghcGdfdHNfZGlj dF9vd25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkpCi0JCQkJYWNsY2hlY2tf ZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAotCQkJCQkJCSAgIE5hbWVMaXN0 VG9TdHJpbmcoY2FzdE5vZGUoTGlzdCwgb2JqZWN0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug T0JKRUNUX1RTQ09ORklHVVJBVElPTjoKLQkJCWlmICghcGdfdHNfY29uZmlnX293bmVyY2hl Y2soYWRkcmVzcy5vYmplY3RJZCwgcm9sZWlkKSkKLQkJCQlhY2xjaGVja19lcnJvcihBQ0xD SEVDS19OT1RfT1dORVIsIG9ianR5cGUsCi0JCQkJCQkJICAgTmFtZUxpc3RUb1N0cmluZyhj YXN0Tm9kZShMaXN0LCBvYmplY3QpKSk7Ci0JCQlicmVhazsKIAkJY2FzZSBPQkpFQ1RfUk9M RToKIAogCQkJLyoKQEAgLTI2MzAsMTEgKzI1NzUsNiBAQCBjaGVja19vYmplY3Rfb3duZXJz aGlwKE9pZCByb2xlaWQsIE9iamVjdFR5cGUgb2JqdHlwZSwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwK IAkJCQkJCSBlcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIikpKTsKIAkJCWJyZWFrOwotCQlj YXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgotCQkJaWYgKCFwZ19zdGF0aXN0aWNzX29iamVj dF9vd25lcmNoZWNrKGFkZHJlc3Mub2JqZWN0SWQsIHJvbGVpZCkpCi0JCQkJYWNsY2hlY2tf ZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBvYmp0eXBlLAotCQkJCQkJCSAgIE5hbWVMaXN0 VG9TdHJpbmcoY2FzdE5vZGUoTGlzdCwgb2JqZWN0KSkpOwotCQkJYnJlYWs7CiAJCWRlZmF1 bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlOiAlZCIsCiAJ CQkJIChpbnQpIG9ianR5cGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5j CmluZGV4IGZjZmMwMmQyYWVkZS4uMjVjMWU0ODVjNDU4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29sbGF0aW9uY21kcy5jCkBAIC0zNjUsNyArMzY1LDcgQEAgQWx0ZXJDb2xsYXRpb24o QWx0ZXJDb2xsYXRpb25TdG10ICpzdG10KQogCXJlbCA9IHRhYmxlX29wZW4oQ29sbGF0aW9u UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAJY29sbE9pZCA9IGdldF9jb2xsYXRp b25fb2lkKHN0bXQtPmNvbGxuYW1lLCBmYWxzZSk7CiAKLQlpZiAoIXBnX2NvbGxhdGlvbl9v d25lcmNoZWNrKGNvbGxPaWQsIEdldFVzZXJJZCgpKSkKKwlpZiAoIW9iamVjdF9vd25lcmNo ZWNrKENvbGxhdGlvblJlbGF0aW9uSWQsIGNvbGxPaWQsIEdldFVzZXJJZCgpKSkKIAkJYWNs Y2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpFQ1RfQ09MTEFUSU9OLAogCQkJ CQkgICBOYW1lTGlzdFRvU3RyaW5nKHN0bXQtPmNvbGxuYW1lKSk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDFmMjlkNjg0ZmYuLjdlZDljODBmYzYz YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzc5LDcgKzM3 OSw3IEBAIEFsdGVyRXZlbnRUcmlnZ2VyKEFsdGVyRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAll dnRGb3JtID0gKEZvcm1fcGdfZXZlbnRfdHJpZ2dlcikgR0VUU1RSVUNUKHR1cCk7CiAJdHJp Z29pZCA9IGV2dEZvcm0tPm9pZDsKIAotCWlmICghcGdfZXZlbnRfdHJpZ2dlcl9vd25lcmNo ZWNrKHRyaWdvaWQsIEdldFVzZXJJZCgpKSkKKwlpZiAoIW9iamVjdF9vd25lcmNoZWNrKEV2 ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdvaWQsIEdldFVzZXJJZCgpKSkKIAkJYWNsY2hl Y2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpFQ1RfRVZFTlRfVFJJR0dFUiwKIAkJ CQkJICAgc3RtdC0+dHJpZ25hbWUpOwogCkBAIC00NzEsNyArNDcxLDcgQEAgQWx0ZXJFdmVu dFRyaWdnZXJPd25lcl9pbnRlcm5hbChSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIE9p ZCBuZXdPd25lcklkKQogCWlmIChmb3JtLT5ldnRvd25lciA9PSBuZXdPd25lcklkKQogCQly ZXR1cm47CiAKLQlpZiAoIXBnX2V2ZW50X3RyaWdnZXJfb3duZXJjaGVjayhmb3JtLT5vaWQs IEdldFVzZXJJZCgpKSkKKwlpZiAoIW9iamVjdF9vd25lcmNoZWNrKEV2ZW50VHJpZ2dlclJl bGF0aW9uSWQsIGZvcm0tPm9pZCwgR2V0VXNlcklkKCkpKQogCQlhY2xjaGVja19lcnJvcihB Q0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9FVkVOVF9UUklHR0VSLAogCQkJCQkgICBOYW1l U3RyKGZvcm0tPmV2dG5hbWUpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZm9yZWlnbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMK aW5kZXggOTFmNGRkMzBkZTE4Li5lNmU2ZDEyOGQxMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Zm9yZWlnbmNtZHMuYwpAQCAtMzU4LDcgKzM1OCw3IEBAIEFsdGVyRm9yZWlnblNlcnZlck93 bmVyX2ludGVybmFsKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cCwgT2lkIG5ld093bmVy SWQpCiAJCQlzcnZJZCA9IGZvcm0tPm9pZDsKIAogCQkJLyogTXVzdCBiZSBvd25lciAqLwot CQkJaWYgKCFwZ19mb3JlaWduX3NlcnZlcl9vd25lcmNoZWNrKHNydklkLCBHZXRVc2VySWQo KSkpCisJCQlpZiAoIW9iamVjdF9vd25lcmNoZWNrKEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklk LCBzcnZJZCwgR2V0VXNlcklkKCkpKQogCQkJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05P VF9PV05FUiwgT0JKRUNUX0ZPUkVJR05fU0VSVkVSLAogCQkJCQkJCSAgIE5hbWVTdHIoZm9y bS0+c3J2bmFtZSkpOwogCkBAIC05OTgsNyArOTk4LDcgQEAgQWx0ZXJGb3JlaWduU2VydmVy KEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKnN0bXQpCiAJLyoKIAkgKiBPbmx5IG93bmVyIG9y IGEgc3VwZXJ1c2VyIGNhbiBBTFRFUiBhIFNFUlZFUi4KIAkgKi8KLQlpZiAoIXBnX2ZvcmVp Z25fc2VydmVyX293bmVyY2hlY2soc3J2SWQsIEdldFVzZXJJZCgpKSkKKwlpZiAoIW9iamVj dF9vd25lcmNoZWNrKEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBzcnZJZCwgR2V0VXNlcklk KCkpKQogCQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9GT1JF SUdOX1NFUlZFUiwKIAkJCQkJICAgc3RtdC0+c2VydmVybmFtZSk7CiAKQEAgLTEwNzYsNyAr MTA3Niw3IEBAIHVzZXJfbWFwcGluZ19kZGxfYWNsY2hlY2soT2lkIHVtdXNlcmlkLCBPaWQg c2VydmVyaWQsIGNvbnN0IGNoYXIgKnNlcnZlcm5hbWUpCiB7CiAJT2lkCQkJY3VydXNlcmlk ID0gR2V0VXNlcklkKCk7CiAKLQlpZiAoIXBnX2ZvcmVpZ25fc2VydmVyX293bmVyY2hlY2so c2VydmVyaWQsIGN1cnVzZXJpZCkpCisJaWYgKCFvYmplY3Rfb3duZXJjaGVjayhGb3JlaWdu U2VydmVyUmVsYXRpb25JZCwgc2VydmVyaWQsIGN1cnVzZXJpZCkpCiAJewogCQlpZiAodW11 c2VyaWQgPT0gY3VydXNlcmlkKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wcm9jbGFuZy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHJvY2xhbmcuYwppbmRl eCA0YTA5M2Y0NWQ4NWEuLjk2YTUyNGJlMzZhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHJvY2xhbmcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcm9jbGFu Zy5jCkBAIC0xMzQsNyArMTM0LDcgQEAgQ3JlYXRlUHJvY2VkdXJhbExhbmd1YWdlKENyZWF0 ZVBMYW5nU3RtdCAqc3RtdCkKIAogCQkvKiBUaGlzIGlzIGN1cnJlbnRseSBwb2ludGxlc3Ms IHNpbmNlIHdlIGFscmVhZHkgY2hlY2tlZCBzdXBlcnVzZXIgKi8KICNpZmRlZiBOT1RfVVNF RAotCQlpZiAoIXBnX2xhbmd1YWdlX293bmVyY2hlY2sob2xkZm9ybS0+b2lkLCBsYW5ndWFn ZU93bmVyKSkKKwkJaWYgKCFvYmplY3Rfb3duZXJjaGVjayhMYW5ndWFnZVJlbGF0aW9uSWQs IG9sZGZvcm0tPm9pZCwgbGFuZ3VhZ2VPd25lcikpCiAJCQlhY2xjaGVja19lcnJvcihBQ0xD SEVDS19OT1RfT1dORVIsIE9CSkVDVF9MQU5HVUFHRSwKIAkJCQkJCSAgIGxhbmd1YWdlTmFt ZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5k ZXggYThiNzVlYjFiZThiLi4zZDBmNzEyYTRmYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMzk0LDcgKzEzOTQsNyBAQCBBbHRlclB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJ cHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKIAogCS8q IG11c3QgYmUgb3duZXIgKi8KLQlpZiAoIXBnX3B1YmxpY2F0aW9uX293bmVyY2hlY2socHVi Zm9ybS0+b2lkLCBHZXRVc2VySWQoKSkpCisJaWYgKCFvYmplY3Rfb3duZXJjaGVjayhQdWJs aWNhdGlvblJlbGF0aW9uSWQsIHB1YmZvcm0tPm9pZCwgR2V0VXNlcklkKCkpKQogCQlhY2xj aGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9QVUJMSUNBVElPTiwKIAkJ CQkJICAgc3RtdC0+cHVibmFtZSk7CiAKQEAgLTE5MDUsNyArMTkwNSw3IEBAIEFsdGVyUHVi bGljYXRpb25Pd25lcl9pbnRlcm5hbChSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIE9p ZCBuZXdPd25lcklkKQogCQlBY2xSZXN1bHQJYWNscmVzdWx0OwogCiAJCS8qIE11c3QgYmUg b3duZXIgKi8KLQkJaWYgKCFwZ19wdWJsaWNhdGlvbl9vd25lcmNoZWNrKGZvcm0tPm9pZCwg R2V0VXNlcklkKCkpKQorCQlpZiAoIW9iamVjdF9vd25lcmNoZWNrKFB1YmxpY2F0aW9uUmVs YXRpb25JZCwgZm9ybS0+b2lkLCBHZXRVc2VySWQoKSkpCiAJCQlhY2xjaGVja19lcnJvcihB Q0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9QVUJMSUNBVElPTiwKIAkJCQkJCSAgIE5hbWVT dHIoZm9ybS0+cHVibmFtZSkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9zdGF0c2NtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jCmluZGV4 IDU1MjE2ZDI4OTE2Yi4uMGQ4NzMxOGUwMjMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9zdGF0c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2Nt ZHMuYwpAQCAtNjY1LDcgKzY2NSw3IEBAIEFsdGVyU3RhdGlzdGljcyhBbHRlclN0YXRzU3Rt dCAqc3RtdCkKIAkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICV1Iiwgc3R4b2lkKTsKIAogCS8qIE11c3QgYmUgb3du ZXIgb2YgdGhlIGV4aXN0aW5nIHN0YXRpc3RpY3Mgb2JqZWN0ICovCi0JaWYgKCFwZ19zdGF0 aXN0aWNzX29iamVjdF9vd25lcmNoZWNrKHN0eG9pZCwgR2V0VXNlcklkKCkpKQorCWlmICgh b2JqZWN0X293bmVyY2hlY2soU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgc3R4b2lkLCBHZXRV c2VySWQoKSkpCiAJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgT0JKRUNU X1NUQVRJU1RJQ19FWFQsCiAJCQkJCSAgIE5hbWVMaXN0VG9TdHJpbmcoc3RtdC0+ZGVmbmFt ZXMpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4 IDhmYjg5YTkzOTJjOC4uYTY5YjlhMzhiZGNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jCkBAIC0xMDMyLDcgKzEwMzIsNyBAQCBBbHRlclN1YnNjcmlw dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwK IAlzdWJpZCA9IGZvcm0tPm9pZDsKIAogCS8qIG11c3QgYmUgb3duZXIgKi8KLQlpZiAoIXBn X3N1YnNjcmlwdGlvbl9vd25lcmNoZWNrKHN1YmlkLCBHZXRVc2VySWQoKSkpCisJaWYgKCFv YmplY3Rfb3duZXJjaGVjayhTdWJzY3JpcHRpb25SZWxhdGlvbklkLCBzdWJpZCwgR2V0VXNl cklkKCkpKQogCQlhY2xjaGVja19lcnJvcihBQ0xDSEVDS19OT1RfT1dORVIsIE9CSkVDVF9T VUJTQ1JJUFRJT04sCiAJCQkJCSAgIHN0bXQtPnN1Ym5hbWUpOwogCkBAIC0xNDEzLDcgKzE0 MTMsNyBAQCBEcm9wU3Vic2NyaXB0aW9uKERyb3BTdWJzY3JpcHRpb25TdG10ICpzdG10LCBi b29sIGlzVG9wTGV2ZWwpCiAJc3ViaWQgPSBmb3JtLT5vaWQ7CiAKIAkvKiBtdXN0IGJlIG93 bmVyICovCi0JaWYgKCFwZ19zdWJzY3JpcHRpb25fb3duZXJjaGVjayhzdWJpZCwgR2V0VXNl cklkKCkpKQorCWlmICghb2JqZWN0X293bmVyY2hlY2soU3Vic2NyaXB0aW9uUmVsYXRpb25J ZCwgc3ViaWQsIEdldFVzZXJJZCgpKSkKIAkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9U X09XTkVSLCBPQkpFQ1RfU1VCU0NSSVBUSU9OLAogCQkJCQkgICBzdG10LT5zdWJuYW1lKTsK IApAQCAtMTcwNCw3ICsxNzA0LDcgQEAgQWx0ZXJTdWJzY3JpcHRpb25Pd25lcl9pbnRlcm5h bChSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIE9pZCBuZXdPd25lcklkKQogCWlmIChm b3JtLT5zdWJvd25lciA9PSBuZXdPd25lcklkKQogCQlyZXR1cm47CiAKLQlpZiAoIXBnX3N1 YnNjcmlwdGlvbl9vd25lcmNoZWNrKGZvcm0tPm9pZCwgR2V0VXNlcklkKCkpKQorCWlmICgh b2JqZWN0X293bmVyY2hlY2soU3Vic2NyaXB0aW9uUmVsYXRpb25JZCwgZm9ybS0+b2lkLCBH ZXRVc2VySWQoKSkpCiAJCWFjbGNoZWNrX2Vycm9yKEFDTENIRUNLX05PVF9PV05FUiwgT0JK RUNUX1NVQlNDUklQVElPTiwKIAkJCQkJICAgTmFtZVN0cihmb3JtLT5zdWJuYW1lKSk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwppbmRleCBiNjlmZjM3ZGJiZGMuLjEyYzc5 OTNiMTVhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVzcGFjZS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlc3BhY2UuYwpAQCAtNDQ2LDcgKzQ0 Niw3IEBAIERyb3BUYWJsZVNwYWNlKERyb3BUYWJsZVNwYWNlU3RtdCAqc3RtdCkKIAl0YWJs ZXNwYWNlb2lkID0gc3BjZm9ybS0+b2lkOwogCiAJLyogTXVzdCBiZSB0YWJsZXNwYWNlIG93 bmVyICovCi0JaWYgKCFwZ190YWJsZXNwYWNlX293bmVyY2hlY2sodGFibGVzcGFjZW9pZCwg R2V0VXNlcklkKCkpKQorCWlmICghb2JqZWN0X293bmVyY2hlY2soVGFibGVTcGFjZVJlbGF0 aW9uSWQsIHRhYmxlc3BhY2VvaWQsIEdldFVzZXJJZCgpKSkKIAkJYWNsY2hlY2tfZXJyb3Io QUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpFQ1RfVEFCTEVTUEFDRSwKIAkJCQkJICAgdGFibGVz cGFjZW5hbWUpOwogCkBAIC05NjYsNyArOTY2LDcgQEAgUmVuYW1lVGFibGVTcGFjZShjb25z dCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lKQogCXRhYmxlX2VuZHNjYW4o c2Nhbik7CiAKIAkvKiBNdXN0IGJlIG93bmVyICovCi0JaWYgKCFwZ190YWJsZXNwYWNlX293 bmVyY2hlY2sodHNwSWQsIEdldFVzZXJJZCgpKSkKKwlpZiAoIW9iamVjdF9vd25lcmNoZWNr KFRhYmxlU3BhY2VSZWxhdGlvbklkLCB0c3BJZCwgR2V0VXNlcklkKCkpKQogCQlhY2xjaGVj a19lcnJvcihBQ0xDSEVDS19OT19QUklWLCBPQkpFQ1RfVEFCTEVTUEFDRSwgb2xkbmFtZSk7 CiAKIAkvKiBWYWxpZGF0ZSBuZXcgbmFtZSAqLwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgQWx0 ZXJUYWJsZVNwYWNlT3B0aW9ucyhBbHRlclRhYmxlU3BhY2VPcHRpb25zU3RtdCAqc3RtdCkK IAl0YWJsZXNwYWNlb2lkID0gKChGb3JtX3BnX3RhYmxlc3BhY2UpIEdFVFNUUlVDVCh0dXAp KS0+b2lkOwogCiAJLyogTXVzdCBiZSBvd25lciBvZiB0aGUgZXhpc3Rpbmcgb2JqZWN0ICov Ci0JaWYgKCFwZ190YWJsZXNwYWNlX293bmVyY2hlY2sodGFibGVzcGFjZW9pZCwgR2V0VXNl cklkKCkpKQorCWlmICghb2JqZWN0X293bmVyY2hlY2soVGFibGVTcGFjZVJlbGF0aW9uSWQs IHRhYmxlc3BhY2VvaWQsIEdldFVzZXJJZCgpKSkKIAkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hF Q0tfTk9UX09XTkVSLCBPQkpFQ1RfVEFCTEVTUEFDRSwKIAkJCQkJICAgc3RtdC0+dGFibGVz cGFjZW5hbWUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90c2VhcmNo Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHNlYXJjaGNtZHMuYwppbmRleCA0Y2M0 ZTNjMDBmOGUuLjM2NWJmZDMwZmRmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdHNlYXJjaGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90c2VhcmNoY21k cy5jCkBAIC01MTAsNyArNTEwLDcgQEAgQWx0ZXJUU0RpY3Rpb25hcnkoQWx0ZXJUU0RpY3Rp b25hcnlTdG10ICpzdG10KQogCQkJIGRpY3RJZCk7CiAKIAkvKiBtdXN0IGJlIG93bmVyICov Ci0JaWYgKCFwZ190c19kaWN0X293bmVyY2hlY2soZGljdElkLCBHZXRVc2VySWQoKSkpCisJ aWYgKCFvYmplY3Rfb3duZXJjaGVjayhUU0RpY3Rpb25hcnlSZWxhdGlvbklkLCBkaWN0SWQs IEdldFVzZXJJZCgpKSkKIAkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBP QkpFQ1RfVFNESUNUSU9OQVJZLAogCQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKHN0bXQtPmRp Y3RuYW1lKSk7CiAKQEAgLTExMjQsNyArMTEyNCw3IEBAIEFsdGVyVFNDb25maWd1cmF0aW9u KEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqc3RtdCkKIAljZmdJZCA9ICgoRm9ybV9wZ190 c19jb25maWcpIEdFVFNUUlVDVCh0dXApKS0+b2lkOwogCiAJLyogbXVzdCBiZSBvd25lciAq LwotCWlmICghcGdfdHNfY29uZmlnX293bmVyY2hlY2soY2ZnSWQsIEdldFVzZXJJZCgpKSkK KwlpZiAoIW9iamVjdF9vd25lcmNoZWNrKFRTQ29uZmlnUmVsYXRpb25JZCwgY2ZnSWQsIEdl dFVzZXJJZCgpKSkKIAkJYWNsY2hlY2tfZXJyb3IoQUNMQ0hFQ0tfTk9UX09XTkVSLCBPQkpF Q1RfVFNDT05GSUdVUkFUSU9OLAogCQkJCQkgICBOYW1lTGlzdFRvU3RyaW5nKHN0bXQtPmNm Z25hbWUpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggYi9zcmMv aW5jbHVkZS91dGlscy9hY2wuaAppbmRleCA5YTRkZjNhNWRhY2MuLmJmNDYxZjI0ZmRlNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvYWNsLmgKQEAgLTMwNiwyOCArMzA2LDIwIEBAIGV4dGVybiB2b2lkIHJlbW92ZUV4 dE9iakluaXRQcml2KE9pZCBvYmpvaWQsIE9pZCBjbGFzc29pZCk7CiAKIAogLyogb3duZXJj aGVjayByb3V0aW5lcyBqdXN0IHJldHVybiB0cnVlIChvd25lcikgb3IgZmFsc2UgKG5vdCkg Ki8KK2V4dGVybiBib29sIG9iamVjdF9vd25lcmNoZWNrKE9pZCBjbGFzc2lkLCBPaWQgb2Jq ZWN0aWQsIE9pZCByb2xlaWQpOworCisvKiB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgY29tbW9u bHkgdXNlZCBjYXNlcyAqLwogZXh0ZXJuIGJvb2wgcGdfY2xhc3Nfb3duZXJjaGVjayhPaWQg Y2xhc3Nfb2lkLCBPaWQgcm9sZWlkKTsKIGV4dGVybiBib29sIHBnX3R5cGVfb3duZXJjaGVj ayhPaWQgdHlwZV9vaWQsIE9pZCByb2xlaWQpOwogZXh0ZXJuIGJvb2wgcGdfb3Blcl9vd25l cmNoZWNrKE9pZCBvcGVyX29pZCwgT2lkIHJvbGVpZCk7CiBleHRlcm4gYm9vbCBwZ19wcm9j X293bmVyY2hlY2soT2lkIHByb2Nfb2lkLCBPaWQgcm9sZWlkKTsKLWV4dGVybiBib29sIHBn X2xhbmd1YWdlX293bmVyY2hlY2soT2lkIGxhbl9vaWQsIE9pZCByb2xlaWQpOwotZXh0ZXJu IGJvb2wgcGdfbGFyZ2VvYmplY3Rfb3duZXJjaGVjayhPaWQgbG9ial9vaWQsIE9pZCByb2xl aWQpOwogZXh0ZXJuIGJvb2wgcGdfbmFtZXNwYWNlX293bmVyY2hlY2soT2lkIG5zcF9vaWQs IE9pZCByb2xlaWQpOwotZXh0ZXJuIGJvb2wgcGdfdGFibGVzcGFjZV9vd25lcmNoZWNrKE9p ZCBzcGNfb2lkLCBPaWQgcm9sZWlkKTsKLWV4dGVybiBib29sIHBnX29wY2xhc3Nfb3duZXJj aGVjayhPaWQgb3BjX29pZCwgT2lkIHJvbGVpZCk7Ci1leHRlcm4gYm9vbCBwZ19vcGZhbWls eV9vd25lcmNoZWNrKE9pZCBvcGZfb2lkLCBPaWQgcm9sZWlkKTsKIGV4dGVybiBib29sIHBn X2RhdGFiYXNlX293bmVyY2hlY2soT2lkIGRiX29pZCwgT2lkIHJvbGVpZCk7Ci1leHRlcm4g Ym9vbCBwZ19jb2xsYXRpb25fb3duZXJjaGVjayhPaWQgY29sbF9vaWQsIE9pZCByb2xlaWQp OwotZXh0ZXJuIGJvb2wgcGdfY29udmVyc2lvbl9vd25lcmNoZWNrKE9pZCBjb252X29pZCwg T2lkIHJvbGVpZCk7Ci1leHRlcm4gYm9vbCBwZ190c19kaWN0X293bmVyY2hlY2soT2lkIGRp Y3Rfb2lkLCBPaWQgcm9sZWlkKTsKLWV4dGVybiBib29sIHBnX3RzX2NvbmZpZ19vd25lcmNo ZWNrKE9pZCBjZmdfb2lkLCBPaWQgcm9sZWlkKTsKLWV4dGVybiBib29sIHBnX2ZvcmVpZ25f ZGF0YV93cmFwcGVyX293bmVyY2hlY2soT2lkIHNydl9vaWQsIE9pZCByb2xlaWQpOwotZXh0 ZXJuIGJvb2wgcGdfZm9yZWlnbl9zZXJ2ZXJfb3duZXJjaGVjayhPaWQgc3J2X29pZCwgT2lk IHJvbGVpZCk7Ci1leHRlcm4gYm9vbCBwZ19ldmVudF90cmlnZ2VyX293bmVyY2hlY2soT2lk IGV0X29pZCwgT2lkIHJvbGVpZCk7CisKKy8qIHNwZWNpYWwgY2FzZXMgKi8KK2V4dGVybiBi b29sIHBnX2xhcmdlb2JqZWN0X293bmVyY2hlY2soT2lkIGxvYmpfb2lkLCBPaWQgcm9sZWlk KTsKIGV4dGVybiBib29sIHBnX2V4dGVuc2lvbl9vd25lcmNoZWNrKE9pZCBleHRfb2lkLCBP aWQgcm9sZWlkKTsKLWV4dGVybiBib29sIHBnX3B1YmxpY2F0aW9uX293bmVyY2hlY2soT2lk IHB1Yl9vaWQsIE9pZCByb2xlaWQpOwotZXh0ZXJuIGJvb2wgcGdfc3Vic2NyaXB0aW9uX293 bmVyY2hlY2soT2lkIHN1Yl9vaWQsIE9pZCByb2xlaWQpOwotZXh0ZXJuIGJvb2wgcGdfc3Rh dGlzdGljc19vYmplY3Rfb3duZXJjaGVjayhPaWQgc3RhdF9vaWQsIE9pZCByb2xlaWQpOwor CiBleHRlcm4gYm9vbCBoYXNfY3JlYXRlcm9sZV9wcml2aWxlZ2UoT2lkIHJvbGVpZCk7CiBl eHRlcm4gYm9vbCBoYXNfYnlwYXNzcmxzX3ByaXZpbGVnZShPaWQgcm9sZWlkKTsKIAotLSAK Mi4zNy4zCgo= --------------YAHrgDq4rV3jodJNVUAxqfPC Content-Type: text/plain; charset=UTF-8; name="0002-Refactor-aclcheck-functions.patch" Content-Disposition: attachment; filename="0002-Refactor-aclcheck-functions.patch" Content-Transfer-Encoding: base64 RnJvbSAxNWM2YTZkZDVhYjA4MDI3YTMyNGVlYjExYzBhOWI1MTljNGIzZDk0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAxNCBPY3QgMjAyMiAwOToxNjo1MSArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIFJlZmFjdG9yIGFjbGNoZWNrIGZ1bmN0aW9ucwoKSW5zdGVhZCBvZiBkb3pl bnMgb2YgbW9zdGx5LWR1cGxpY2F0ZSBwZ19mb29fYWNsY2hlY2soKSBmdW5jdGlvbnMsCndy aXRlIG9uZSBjb21tb24gZnVuY3Rpb24gb2JqZWN0X2FjbGNoZWNrKCkgdGhhdCBjYW4gaGFu ZGxlIGFsbW9zdCBhbGwKb2YgdGhlbS4gIFdlIGFscmVhZHkgaGF2ZSBhbGwgdGhlIGluZm9y bWF0aW9uIHdlIG5lZWQsIHN1Y2ggYXMgd2hpY2gKc3lzdGVtIGNhdGFsb2cgY29ycmVzcG9u ZHMgdG8gd2hpY2ggY2F0YWxvZyB0YWJsZSwgYW5kIHdoaWNoIGNvbHVtbiBpcwp0aGUgQUNM IGNvbHVtbi4KCkkga2VwdCBhIGZldyBwZ19mb29fYWNsY2hlY2soKSBhcm91bmQgYXMgdGhp biB3cmFwcGVycyBiZWNhdXNlIHRoZXkKYXJlIHdpZGVseSB1c2VkIHRocm91Z2ggdGhlIGNv ZGUuICBBbmQgdGhlcmUgYXJlIGFsc28gYSBmZXcgdGhhdCBkb24ndAp3b3JrIHZpYSB0aGUg Z2VuZXJpYyBmdW5jdGlvbiwgc28gdGhvc2Ugc3RheSBhcyBpcy4KCkkgYWxzbyBjaGFuZ2Vk IG1vc3QgcGdfZm9vX2FjbG1hc2soKSBmdW5jdGlvbnMgdG8gc3RhdGljIGZ1bmN0aW9ucywK c2luY2UgdGhleSBhcmUgbm90IHVzZWQgb3V0c2lkZSBvZiBhY2xjaGsuYy4KLS0tCiBjb250 cmliL2RibGluay9kYmxpbmsuYyAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYyAgICAgICAgfCA2MDEgKysrKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYyAgfCAgMTAgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jIHwgICA2ICstCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvYWNsLmMgICAgICAgICB8ICA1MiArLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2ZtZ3IvZm1nci5jICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9hY2wuaCAg ICAgICAgICAgICB8ICA0NyArLS0KIDcgZmlsZXMgY2hhbmdlZCwgMTg4IGluc2VydGlvbnMo KyksIDUzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2RibGluay9kYmxp bmsuYyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCmluZGV4IDllZWY0MTdjNDdiNy4uZjhi MDE3ZmQzYTI5IDEwMDY0NAotLS0gYS9jb250cmliL2RibGluay9kYmxpbmsuYworKysgYi9j b250cmliL2RibGluay9kYmxpbmsuYwpAQCAtMjgzOCw3ICsyODM4LDcgQEAgZ2V0X2Nvbm5l Y3Rfc3RyaW5nKGNvbnN0IGNoYXIgKnNlcnZlcm5hbWUpCiAJCWZkdyA9IEdldEZvcmVpZ25E YXRhV3JhcHBlcihmZHdpZCk7CiAKIAkJLyogQ2hlY2sgcGVybWlzc2lvbnMsIHVzZXIgbXVz dCBoYXZlIHVzYWdlIG9uIHRoZSBzZXJ2ZXIuICovCi0JCWFjbHJlc3VsdCA9IHBnX2ZvcmVp Z25fc2VydmVyX2FjbGNoZWNrKHNlcnZlcmlkLCB1c2VyaWQsIEFDTF9VU0FHRSk7CisJCWFj bHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgc2Vy dmVyaWQsIHVzZXJpZCwgQUNMX1VTQUdFKTsKIAkJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVD S19PSykKIAkJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JKRUNUX0ZPUkVJR05fU0VS VkVSLCBmb3JlaWduX3NlcnZlci0+c2VydmVybmFtZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j CmluZGV4IGQ2N2QzYjUyMmNlZi4uOWU4ZWMzMDZmNjM5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hr LmMKQEAgLTEzOSw4ICsxMzksMjYgQEAgc3RhdGljIEFjbE1vZGUgcmVzdHJpY3RfYW5kX2No ZWNrX2dyYW50KGJvb2wgaXNfZ3JhbnQsIEFjbE1vZGUgYXZhaWxfZ29wdGlvbnMsCiAJCQkJ CQkJCQkJT2lkIG9iamVjdElkLCBPaWQgZ3JhbnRvcklkLAogCQkJCQkJCQkJCU9iamVjdFR5 cGUgb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKIAkJCQkJCQkJCQlBdHRyTnVtYmVy IGF0dF9udW1iZXIsIGNvbnN0IGNoYXIgKmNvbG5hbWUpOwotc3RhdGljIEFjbE1vZGUgcGdf YWNsbWFzayhPYmplY3RUeXBlIG9ianR5cGUsIE9pZCB0YWJsZV9vaWQsIEF0dHJOdW1iZXIg YXR0bnVtLAorc3RhdGljIEFjbE1vZGUgcGdfYWNsbWFzayhPYmplY3RUeXBlIG9ianR5cGUs IE9pZCBvYmplY3Rfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwKIAkJCQkJCSAgT2lkIHJvbGVp ZCwgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CitzdGF0aWMgQWNsTW9kZSBvYmpl Y3RfYWNsbWFzayhPaWQgY2xhc3NpZCwgT2lkIG9iamVjdGlkLCBPaWQgcm9sZWlkLAorCQkJ CQkJCSAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CitzdGF0aWMgQWNsTW9kZSBw Z19hdHRyaWJ1dGVfYWNsbWFzayhPaWQgdGFibGVfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwK KwkJCQkJCQkJCU9pZCByb2xlaWQsIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwor c3RhdGljIEFjbE1vZGUgcGdfYXR0cmlidXRlX2FjbG1hc2tfZXh0KE9pZCB0YWJsZV9vaWQs IEF0dHJOdW1iZXIgYXR0bnVtLAorCQkJCQkJCQkJCU9pZCByb2xlaWQsIEFjbE1vZGUgbWFz aywKKwkJCQkJCQkJCQlBY2xNYXNrSG93IGhvdywgYm9vbCAqaXNfbWlzc2luZyk7CitzdGF0 aWMgQWNsTW9kZSBwZ19jbGFzc19hY2xtYXNrX2V4dChPaWQgdGFibGVfb2lkLCBPaWQgcm9s ZWlkLAorCQkJCQkJCQkJQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdywKKwkJCQkJCQkJ CWJvb2wgKmlzX21pc3NpbmcpOworc3RhdGljIEFjbE1vZGUgcGdfcGFyYW1ldGVyX2FjbF9h Y2xtYXNrKE9pZCBhY2xfb2lkLCBPaWQgcm9sZWlkLAorCQkJCQkJCQkJCUFjbE1vZGUgbWFz aywgQWNsTWFza0hvdyBob3cpOworc3RhdGljIEFjbE1vZGUgcGdfbGFyZ2VvYmplY3RfYWNs bWFza19zbmFwc2hvdChPaWQgbG9ial9vaWQsIE9pZCByb2xlaWQsCisJCQkJCQkJCQkJCSAg IEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3csIFNuYXBzaG90IHNuYXBzaG90KTsKK3N0 YXRpYyBBY2xNb2RlIHBnX25hbWVzcGFjZV9hY2xtYXNrKE9pZCBuc3Bfb2lkLCBPaWQgcm9s ZWlkLAorCQkJCQkJCQkJQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CitzdGF0aWMg QWNsTW9kZSBwZ190eXBlX2FjbG1hc2soT2lkIHR5cGVfb2lkLCBPaWQgcm9sZWlkLAorCQkJ CQkJCSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwogc3RhdGljIHZvaWQgcmVj b3JkRXh0ZW5zaW9uSW5pdFByaXYoT2lkIG9iam9pZCwgT2lkIGNsYXNzb2lkLCBpbnQgb2Jq c3ViaWQsCiAJCQkJCQkJCQlBY2wgKm5ld19hY2wpOwogc3RhdGljIHZvaWQgcmVjb3JkRXh0 ZW5zaW9uSW5pdFByaXZXb3JrZXIoT2lkIG9iam9pZCwgT2lkIGNsYXNzb2lkLCBpbnQgb2Jq c3ViaWQsCkBAIC0zNzg3LDQ3ICszODA1LDQ3IEBAIGFjbGNoZWNrX2Vycm9yX3R5cGUoQWNs UmVzdWx0IGFjbGVyciwgT2lkIHR5cGVPaWQpCiAgKiBSZWxheSBmb3IgdGhlIHZhcmlvdXMg cGdfKl9tYXNrIHJvdXRpbmVzIGRlcGVuZGluZyBvbiBvYmplY3Qga2luZAogICovCiBzdGF0 aWMgQWNsTW9kZQotcGdfYWNsbWFzayhPYmplY3RUeXBlIG9ianR5cGUsIE9pZCB0YWJsZV9v aWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBPaWQgcm9sZWlkLAorcGdfYWNsbWFzayhPYmplY3RU eXBlIG9ianR5cGUsIE9pZCBvYmplY3Rfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwgT2lkIHJv bGVpZCwKIAkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykKIHsKIAlzd2l0Y2gg KG9ianR5cGUpCiAJewogCQljYXNlIE9CSkVDVF9DT0xVTU46CiAJCQlyZXR1cm4KLQkJCQlw Z19jbGFzc19hY2xtYXNrKHRhYmxlX29pZCwgcm9sZWlkLCBtYXNrLCBob3cpIHwKLQkJCQlw Z19hdHRyaWJ1dGVfYWNsbWFzayh0YWJsZV9vaWQsIGF0dG51bSwgcm9sZWlkLCBtYXNrLCBo b3cpOworCQkJCXBnX2NsYXNzX2FjbG1hc2sob2JqZWN0X29pZCwgcm9sZWlkLCBtYXNrLCBo b3cpIHwKKwkJCQlwZ19hdHRyaWJ1dGVfYWNsbWFzayhvYmplY3Rfb2lkLCBhdHRudW0sIHJv bGVpZCwgbWFzaywgaG93KTsKIAkJY2FzZSBPQkpFQ1RfVEFCTEU6CiAJCWNhc2UgT0JKRUNU X1NFUVVFTkNFOgotCQkJcmV0dXJuIHBnX2NsYXNzX2FjbG1hc2sodGFibGVfb2lkLCByb2xl aWQsIG1hc2ssIGhvdyk7CisJCQlyZXR1cm4gcGdfY2xhc3NfYWNsbWFzayhvYmplY3Rfb2lk LCByb2xlaWQsIG1hc2ssIGhvdyk7CiAJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgotCQkJcmV0 dXJuIHBnX2RhdGFiYXNlX2FjbG1hc2sodGFibGVfb2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7 CisJCQlyZXR1cm4gb2JqZWN0X2FjbG1hc2soRGF0YWJhc2VSZWxhdGlvbklkLCBvYmplY3Rf b2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CiAJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgotCQkJ cmV0dXJuIHBnX3Byb2NfYWNsbWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsK KwkJCXJldHVybiBvYmplY3RfYWNsbWFzayhQcm9jZWR1cmVSZWxhdGlvbklkLCBvYmplY3Rf b2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CiAJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgotCQkJ cmV0dXJuIHBnX2xhbmd1YWdlX2FjbG1hc2sodGFibGVfb2lkLCByb2xlaWQsIG1hc2ssIGhv dyk7CisJCQlyZXR1cm4gb2JqZWN0X2FjbG1hc2soTGFuZ3VhZ2VSZWxhdGlvbklkLCBvYmpl Y3Rfb2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CiAJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNU OgotCQkJcmV0dXJuIHBnX2xhcmdlb2JqZWN0X2FjbG1hc2tfc25hcHNob3QodGFibGVfb2lk LCByb2xlaWQsCisJCQlyZXR1cm4gcGdfbGFyZ2VvYmplY3RfYWNsbWFza19zbmFwc2hvdChv YmplY3Rfb2lkLCByb2xlaWQsCiAJCQkJCQkJCQkJCQkgICBtYXNrLCBob3csIE5VTEwpOwog CQljYXNlIE9CSkVDVF9QQVJBTUVURVJfQUNMOgotCQkJcmV0dXJuIHBnX3BhcmFtZXRlcl9h Y2xfYWNsbWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsKKwkJCXJldHVybiBw Z19wYXJhbWV0ZXJfYWNsX2FjbG1hc2sob2JqZWN0X29pZCwgcm9sZWlkLCBtYXNrLCBob3cp OwogCQljYXNlIE9CSkVDVF9TQ0hFTUE6Ci0JCQlyZXR1cm4gcGdfbmFtZXNwYWNlX2FjbG1h c2sodGFibGVfb2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CisJCQlyZXR1cm4gcGdfbmFtZXNw YWNlX2FjbG1hc2sob2JqZWN0X29pZCwgcm9sZWlkLCBtYXNrLCBob3cpOwogCQljYXNlIE9C SkVDVF9TVEFUSVNUSUNfRVhUOgogCQkJZWxvZyhFUlJPUiwgImdyYW50YWJsZSByaWdodHMg bm90IHN1cHBvcnRlZCBmb3Igc3RhdGlzdGljcyBvYmplY3RzIik7CiAJCQkvKiBub3QgcmVh Y2hlZCwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCXJldHVybiBBQ0xfTk9fUklH SFRTOwogCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgotCQkJcmV0dXJuIHBnX3RhYmxlc3Bh Y2VfYWNsbWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsKKwkJCXJldHVybiBv YmplY3RfYWNsbWFzayhUYWJsZVNwYWNlUmVsYXRpb25JZCwgb2JqZWN0X29pZCwgcm9sZWlk LCBtYXNrLCBob3cpOwogCQljYXNlIE9CSkVDVF9GRFc6Ci0JCQlyZXR1cm4gcGdfZm9yZWln bl9kYXRhX3dyYXBwZXJfYWNsbWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsK KwkJCXJldHVybiBvYmplY3RfYWNsbWFzayhGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklk LCBvYmplY3Rfb2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CiAJCWNhc2UgT0JKRUNUX0ZPUkVJ R05fU0VSVkVSOgotCQkJcmV0dXJuIHBnX2ZvcmVpZ25fc2VydmVyX2FjbG1hc2sodGFibGVf b2lkLCByb2xlaWQsIG1hc2ssIGhvdyk7CisJCQlyZXR1cm4gb2JqZWN0X2FjbG1hc2soRm9y ZWlnblNlcnZlclJlbGF0aW9uSWQsIG9iamVjdF9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsK IAkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKIAkJCWVsb2coRVJST1IsICJncmFudGFi bGUgcmlnaHRzIG5vdCBzdXBwb3J0ZWQgZm9yIGV2ZW50IHRyaWdnZXJzIik7CiAJCQkvKiBu b3QgcmVhY2hlZCwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCXJldHVybiBBQ0xf Tk9fUklHSFRTOwogCQljYXNlIE9CSkVDVF9UWVBFOgotCQkJcmV0dXJuIHBnX3R5cGVfYWNs bWFzayh0YWJsZV9vaWQsIHJvbGVpZCwgbWFzaywgaG93KTsKKwkJCXJldHVybiBwZ190eXBl X2FjbG1hc2sob2JqZWN0X29pZCwgcm9sZWlkLCBtYXNrLCBob3cpOwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmp0eXBlOiAlZCIsCiAJCQkJIChpbnQp IG9ianR5cGUpOwpAQCAtMzg0OSwxNCArMzg2Nyw3MiBAQCBwZ19hY2xtYXNrKE9iamVjdFR5 cGUgb2JqdHlwZSwgT2lkIHRhYmxlX29pZCwgQXR0ck51bWJlciBhdHRudW0sIE9pZCByb2xl aWQsCiAgKi8KIAogLyoKLSAqIEV4cG9ydGVkIHJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVz ZXIncyBwcml2aWxlZ2VzIGZvciBhIGNvbHVtbgorICogR2VuZXJpYyByb3V0aW5lIGZvciBl eGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYW4gb2JqZWN0CisgKi8KK3N0YXRp YyBBY2xNb2RlCitvYmplY3RfYWNsbWFzayhPaWQgY2xhc3NpZCwgT2lkIG9iamVjdGlkLCBP aWQgcm9sZWlkLAorCQkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykKK3sKKwlB Y2xNb2RlCQlyZXN1bHQ7CisJSGVhcFR1cGxlCXR1cGxlOworCURhdHVtCQlhY2xEYXR1bTsK Kwlib29sCQlpc051bGw7CisJQWNsCQkgICAqYWNsOworCU9pZAkJCW93bmVySWQ7CisKKwkv KiBTdXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KKwlpZiAo c3VwZXJ1c2VyX2FyZyhyb2xlaWQpKQorCQlyZXR1cm4gbWFzazsKKworCS8qCisJICogR2V0 IHRoZSBvYmplY3RzJ3MgQUNMIGZyb20gaXRzIGNhdGFsb2cKKwkgKi8KKwl0dXBsZSA9IFNl YXJjaFN5c0NhY2hlMShnZXRfb2JqZWN0X2NhdGNhY2hlX29pZChjbGFzc2lkKSwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfREFU QUJBU0UpLAorCQkJCSBlcnJtc2coIiVzIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0Iiwg Z2V0X29iamVjdF9jbGFzc19kZXNjcihjbGFzc2lkKSwgb2JqZWN0aWQpKSk7CisKKwlvd25l cklkID0gRGF0dW1HZXRPYmplY3RJZChTeXNDYWNoZUdldEF0dHIoZ2V0X29iamVjdF9jYXRj YWNoZV9vaWQoY2xhc3NpZCksCisJCQkJCQkJCQkJCSAgIHR1cGxlLAorCQkJCQkJCQkJCQkg ICBnZXRfb2JqZWN0X2F0dG51bV9vd25lcihjbGFzc2lkKSwKKwkJCQkJCQkJCQkJICAgJmlz TnVsbCkpOworCUFzc2VydCghaXNOdWxsKTsKKworCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKGdldF9vYmplY3RfY2F0Y2FjaGVfb2lkKGNsYXNzaWQpLCB0dXBsZSwgZ2V0X29iamVj dF9hdHRudW1fYWNsKGNsYXNzaWQpLAorCQkJCQkJCSAgICZpc051bGwpOworCWlmIChpc051 bGwpCisJeworCQkvKiBObyBBQ0wsIHNvIGJ1aWxkIGRlZmF1bHQgQUNMICovCisJCWFjbCA9 IGFjbGRlZmF1bHQoZ2V0X29iamVjdF90eXBlKGNsYXNzaWQsIG9iamVjdGlkKSwgb3duZXJJ ZCk7CisJCWFjbERhdHVtID0gKERhdHVtKSAwOworCX0KKwllbHNlCisJeworCQkvKiBkZXRv YXN0IEFDTCBpZiBuZWNlc3NhcnkgKi8KKwkJYWNsID0gRGF0dW1HZXRBY2xQKGFjbERhdHVt KTsKKwl9CisKKwlyZXN1bHQgPSBhY2xtYXNrKGFjbCwgcm9sZWlkLCBvd25lcklkLCBtYXNr LCBob3cpOworCisJLyogaWYgd2UgaGF2ZSBhIGRldG9hc3RlZCBjb3B5LCBmcmVlIGl0ICov CisJaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVtR2V0UG9pbnRlcihhY2xEYXR1 bSkpCisJCXBmcmVlKGFjbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIn cyBwcml2aWxlZ2VzIGZvciBhIGNvbHVtbgogICoKICAqIE5vdGU6IHRoaXMgY29uc2lkZXJz IG9ubHkgcHJpdmlsZWdlcyBncmFudGVkIHNwZWNpZmljYWxseSBvbiB0aGUgY29sdW1uLgog ICogSXQgaXMgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gdGFrZSByZWxhdGlvbi1sZXZl bCBwcml2aWxlZ2VzIGludG8gYWNjb3VudAogICogYXMgYXBwcm9wcmlhdGUuICAoRm9yIHRo ZSBzYW1lIHJlYXNvbiwgd2UgaGF2ZSBubyBzcGVjaWFsIGNhc2UgZm9yCiAgKiBzdXBlcnVz ZXItbmVzcyBoZXJlLikKICAqLwotQWNsTW9kZQorc3RhdGljIEFjbE1vZGUKIHBnX2F0dHJp YnV0ZV9hY2xtYXNrKE9pZCB0YWJsZV9vaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBPaWQgcm9s ZWlkLAogCQkJCQkgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykKIHsKQEAgLTM4NjUs MTIgKzM5NDEsMTIgQEAgcGdfYXR0cmlidXRlX2FjbG1hc2soT2lkIHRhYmxlX29pZCwgQXR0 ck51bWJlciBhdHRudW0sIE9pZCByb2xlaWQsCiB9CiAKIC8qCi0gKiBFeHBvcnRlZCByb3V0 aW5lIGZvciBleGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSBjb2x1bW4KKyAq IFJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIGNvbHVt bgogICoKICAqIERvZXMgdGhlIGJ1bGsgb2YgdGhlIHdvcmsgZm9yIHBnX2F0dHJpYnV0ZV9h Y2xtYXNrKCksIGFuZCBhbGxvd3Mgb3RoZXIKICAqIGNhbGxlcnMgdG8gYXZvaWQgdGhlIG1p c3NpbmcgYXR0cmlidXRlIEVSUk9SIHdoZW4gaXNfbWlzc2luZyBpcyBub24tTlVMTC4KICAq LwotQWNsTW9kZQorc3RhdGljIEFjbE1vZGUKIHBnX2F0dHJpYnV0ZV9hY2xtYXNrX2V4dChP aWQgdGFibGVfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwgT2lkIHJvbGVpZCwKIAkJCQkJCSBB Y2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93LCBib29sICppc19taXNzaW5nKQogewpAQCAt Mzk4MywxMiArNDA1OSwxMiBAQCBwZ19jbGFzc19hY2xtYXNrKE9pZCB0YWJsZV9vaWQsIE9p ZCByb2xlaWQsCiB9CiAKIC8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZvciBleGFtaW5pbmcg YSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSB0YWJsZQorICogUm91dGluZSBmb3IgZXhhbWlu aW5nIGEgdXNlcidzIHByaXZpbGVnZXMgZm9yIGEgdGFibGUKICAqCiAgKiBEb2VzIHRoZSBi dWxrIG9mIHRoZSB3b3JrIGZvciBwZ19jbGFzc19hY2xtYXNrKCksIGFuZCBhbGxvd3Mgb3Ro ZXIKICAqIGNhbGxlcnMgdG8gYXZvaWQgdGhlIG1pc3NpbmcgcmVsYXRpb24gRVJST1Igd2hl biBpc19taXNzaW5nIGlzIG5vbi1OVUxMLgogICovCi1BY2xNb2RlCitzdGF0aWMgQWNsTW9k ZQogcGdfY2xhc3NfYWNsbWFza19leHQoT2lkIHRhYmxlX29pZCwgT2lkIHJvbGVpZCwgQWNs TW9kZSBtYXNrLAogCQkJCQkgQWNsTWFza0hvdyBob3csIGJvb2wgKmlzX21pc3NpbmcpCiB7 CkBAIC00MTA0LDY0ICs0MTgwLDEwIEBAIHBnX2NsYXNzX2FjbG1hc2tfZXh0KE9pZCB0YWJs ZV9vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbWFzaywKIH0KIAogLyoKLSAqIEV4cG9ydGVk IHJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIGRhdGFi YXNlCi0gKi8KLUFjbE1vZGUKLXBnX2RhdGFiYXNlX2FjbG1hc2soT2lkIGRiX29pZCwgT2lk IHJvbGVpZCwKLQkJCQkJQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykKLXsKLQlBY2xN b2RlCQlyZXN1bHQ7Ci0JSGVhcFR1cGxlCXR1cGxlOwotCURhdHVtCQlhY2xEYXR1bTsKLQli b29sCQlpc051bGw7Ci0JQWNsCQkgICAqYWNsOwotCU9pZAkJCW93bmVySWQ7Ci0KLQkvKiBT dXBlcnVzZXJzIGJ5cGFzcyBhbGwgcGVybWlzc2lvbiBjaGVja2luZy4gKi8KLQlpZiAoc3Vw ZXJ1c2VyX2FyZyhyb2xlaWQpKQotCQlyZXR1cm4gbWFzazsKLQotCS8qCi0JICogR2V0IHRo ZSBkYXRhYmFzZSdzIEFDTCBmcm9tIHBnX2RhdGFiYXNlCi0JICovCi0JdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZTEoREFUQUJBU0VPSUQsIE9iamVjdElkR2V0RGF0dW0oZGJfb2lkKSk7Ci0J aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9EQVRBQkFTRSksCi0JCQkJIGVycm1zZygiZGF0 YWJhc2Ugd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBkYl9vaWQpKSk7Ci0KLQlvd25l cklkID0gKChGb3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwbGUpKS0+ZGF0ZGJhOwot Ci0JYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cGxlLCBBbnVt X3BnX2RhdGFiYXNlX2RhdGFjbCwKLQkJCQkJCQkgICAmaXNOdWxsKTsKLQlpZiAoaXNOdWxs KQotCXsKLQkJLyogTm8gQUNMLCBzbyBidWlsZCBkZWZhdWx0IEFDTCAqLwotCQlhY2wgPSBh Y2xkZWZhdWx0KE9CSkVDVF9EQVRBQkFTRSwgb3duZXJJZCk7Ci0JCWFjbERhdHVtID0gKERh dHVtKSAwOwotCX0KLQllbHNlCi0JewotCQkvKiBkZXRvYXN0IEFDTCBpZiBuZWNlc3Nhcnkg Ki8KLQkJYWNsID0gRGF0dW1HZXRBY2xQKGFjbERhdHVtKTsKLQl9Ci0KLQlyZXN1bHQgPSBh Y2xtYXNrKGFjbCwgcm9sZWlkLCBvd25lcklkLCBtYXNrLCBob3cpOwotCi0JLyogaWYgd2Ug aGF2ZSBhIGRldG9hc3RlZCBjb3B5LCBmcmVlIGl0ICovCi0JaWYgKGFjbCAmJiAoUG9pbnRl cikgYWNsICE9IERhdHVtR2V0UG9pbnRlcihhY2xEYXR1bSkpCi0JCXBmcmVlKGFjbCk7Ci0K LQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoK LSAqIEV4cG9ydGVkIHJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2Vz IGZvciBhIGNvbmZpZ3VyYXRpb24KKyAqIFJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIn cyBwcml2aWxlZ2VzIGZvciBhIGNvbmZpZ3VyYXRpb24KICAqIHBhcmFtZXRlciAoR1VDKSwg aWRlbnRpZmllZCBieSBHVUMgbmFtZS4KICAqLwotQWNsTW9kZQorc3RhdGljIEFjbE1vZGUK IHBnX3BhcmFtZXRlcl9hY2xtYXNrKGNvbnN0IGNoYXIgKm5hbWUsIE9pZCByb2xlaWQsIEFj bE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpCiB7CiAJQWNsTW9kZQkJcmVzdWx0OwpAQCAt NDIyMiwxMCArNDI0NCwxMCBAQCBwZ19wYXJhbWV0ZXJfYWNsbWFzayhjb25zdCBjaGFyICpu YW1lLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93KQogfQogCiAv KgotICogRXhwb3J0ZWQgcm91dGluZSBmb3IgZXhhbWluaW5nIGEgdXNlcidzIHByaXZpbGVn ZXMgZm9yIGEgY29uZmlndXJhdGlvbgorICogUm91dGluZSBmb3IgZXhhbWluaW5nIGEgdXNl cidzIHByaXZpbGVnZXMgZm9yIGEgY29uZmlndXJhdGlvbgogICogcGFyYW1ldGVyIChHVUMp LCBpZGVudGlmaWVkIGJ5IHRoZSBPSUQgb2YgaXRzIHBnX3BhcmFtZXRlcl9hY2wgZW50cnku CiAgKi8KLUFjbE1vZGUKK3N0YXRpYyBBY2xNb2RlCiBwZ19wYXJhbWV0ZXJfYWNsX2FjbG1h c2soT2lkIGFjbF9vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBo b3cpCiB7CiAJQWNsTW9kZQkJcmVzdWx0OwpAQCAtNDI3MywxMTUgKzQyOTUsNyBAQCBwZ19w YXJhbWV0ZXJfYWNsX2FjbG1hc2soT2lkIGFjbF9vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUg bWFzaywgQWNsTWFza0hvdyBob3cpCiB9CiAKIC8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZv ciBleGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSBmdW5jdGlvbgotICovCi1B Y2xNb2RlCi1wZ19wcm9jX2FjbG1hc2soT2lkIHByb2Nfb2lkLCBPaWQgcm9sZWlkLAotCQkJ CUFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpCi17Ci0JQWNsTW9kZQkJcmVzdWx0Owot CUhlYXBUdXBsZQl0dXBsZTsKLQlEYXR1bQkJYWNsRGF0dW07Ci0JYm9vbAkJaXNOdWxsOwot CUFjbAkJICAgKmFjbDsKLQlPaWQJCQlvd25lcklkOwotCi0JLyogU3VwZXJ1c2VycyBieXBh c3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0JaWYgKHN1cGVydXNlcl9hcmcocm9s ZWlkKSkKLQkJcmV0dXJuIG1hc2s7Ci0KLQkvKgotCSAqIEdldCB0aGUgZnVuY3Rpb24ncyBB Q0wgZnJvbSBwZ19wcm9jCi0JICovCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgT2JqZWN0SWRHZXREYXR1bShwcm9jX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSkpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRF RklORURfRlVOQ1RJT04pLAotCQkJCSBlcnJtc2coImZ1bmN0aW9uIHdpdGggT0lEICV1IGRv ZXMgbm90IGV4aXN0IiwgcHJvY19vaWQpKSk7Ci0KLQlvd25lcklkID0gKChGb3JtX3BnX3By b2MpIEdFVFNUUlVDVCh0dXBsZSkpLT5wcm9vd25lcjsKLQotCWFjbERhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKFBST0NPSUQsIHR1cGxlLCBBbnVtX3BnX3Byb2NfcHJvYWNsLAotCQkJCQkJ CSAgICZpc051bGwpOwotCWlmIChpc051bGwpCi0JewotCQkvKiBObyBBQ0wsIHNvIGJ1aWxk IGRlZmF1bHQgQUNMICovCi0JCWFjbCA9IGFjbGRlZmF1bHQoT0JKRUNUX0ZVTkNUSU9OLCBv d25lcklkKTsKLQkJYWNsRGF0dW0gPSAoRGF0dW0pIDA7Ci0JfQotCWVsc2UKLQl7Ci0JCS8q IGRldG9hc3QgQUNMIGlmIG5lY2Vzc2FyeSAqLwotCQlhY2wgPSBEYXR1bUdldEFjbFAoYWNs RGF0dW0pOwotCX0KLQotCXJlc3VsdCA9IGFjbG1hc2soYWNsLCByb2xlaWQsIG93bmVySWQs IG1hc2ssIGhvdyk7Ci0KLQkvKiBpZiB3ZSBoYXZlIGEgZGV0b2FzdGVkIGNvcHksIGZyZWUg aXQgKi8KLQlpZiAoYWNsICYmIChQb2ludGVyKSBhY2wgIT0gRGF0dW1HZXRQb2ludGVyKGFj bERhdHVtKSkKLQkJcGZyZWUoYWNsKTsKLQotCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Ci0K LQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogRXhwb3J0ZWQgcm91dGluZSBmb3IgZXhh bWluaW5nIGEgdXNlcidzIHByaXZpbGVnZXMgZm9yIGEgbGFuZ3VhZ2UKLSAqLwotQWNsTW9k ZQotcGdfbGFuZ3VhZ2VfYWNsbWFzayhPaWQgbGFuZ19vaWQsIE9pZCByb2xlaWQsCi0JCQkJ CUFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpCi17Ci0JQWNsTW9kZQkJcmVzdWx0Owot CUhlYXBUdXBsZQl0dXBsZTsKLQlEYXR1bQkJYWNsRGF0dW07Ci0JYm9vbAkJaXNOdWxsOwot CUFjbAkJICAgKmFjbDsKLQlPaWQJCQlvd25lcklkOwotCi0JLyogU3VwZXJ1c2VycyBieXBh c3MgYWxsIHBlcm1pc3Npb24gY2hlY2tpbmcuICovCi0JaWYgKHN1cGVydXNlcl9hcmcocm9s ZWlkKSkKLQkJcmV0dXJuIG1hc2s7Ci0KLQkvKgotCSAqIEdldCB0aGUgbGFuZ3VhZ2UncyBB Q0wgZnJvbSBwZ19sYW5ndWFnZQotCSAqLwotCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKExB TkdPSUQsIE9iamVjdElkR2V0RGF0dW0obGFuZ19vaWQpKTsKLQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHVwbGUpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVf VU5ERUZJTkVEX09CSkVDVCksCi0JCQkJIGVycm1zZygibGFuZ3VhZ2Ugd2l0aCBPSUQgJXUg ZG9lcyBub3QgZXhpc3QiLCBsYW5nX29pZCkpKTsKLQotCW93bmVySWQgPSAoKEZvcm1fcGdf bGFuZ3VhZ2UpIEdFVFNUUlVDVCh0dXBsZSkpLT5sYW5vd25lcjsKLQotCWFjbERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKExBTkdPSUQsIHR1cGxlLCBBbnVtX3BnX2xhbmd1YWdlX2xhbmFj bCwKLQkJCQkJCQkgICAmaXNOdWxsKTsKLQlpZiAoaXNOdWxsKQotCXsKLQkJLyogTm8gQUNM LCBzbyBidWlsZCBkZWZhdWx0IEFDTCAqLwotCQlhY2wgPSBhY2xkZWZhdWx0KE9CSkVDVF9M QU5HVUFHRSwgb3duZXJJZCk7Ci0JCWFjbERhdHVtID0gKERhdHVtKSAwOwotCX0KLQllbHNl Ci0JewotCQkvKiBkZXRvYXN0IEFDTCBpZiBuZWNlc3NhcnkgKi8KLQkJYWNsID0gRGF0dW1H ZXRBY2xQKGFjbERhdHVtKTsKLQl9Ci0KLQlyZXN1bHQgPSBhY2xtYXNrKGFjbCwgcm9sZWlk LCBvd25lcklkLCBtYXNrLCBob3cpOwotCi0JLyogaWYgd2UgaGF2ZSBhIGRldG9hc3RlZCBj b3B5LCBmcmVlIGl0ICovCi0JaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVtR2V0 UG9pbnRlcihhY2xEYXR1bSkpCi0JCXBmcmVlKGFjbCk7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUo dHVwbGUpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIEV4cG9ydGVkIHJvdXRp bmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIGxhcmdlb2JqZWN0 CisgKiBSb3V0aW5lIGZvciBleGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSBs YXJnZW9iamVjdAogICoKICAqIFdoZW4gYSBsYXJnZSBvYmplY3QgaXMgb3BlbmVkIGZvciBy ZWFkaW5nLCBpdCBpcyBvcGVuZWQgcmVsYXRpdmUgdG8gdGhlCiAgKiBjYWxsZXIncyBzbmFw c2hvdCwgYnV0IHdoZW4gaXQgaXMgb3BlbmVkIGZvciB3cml0aW5nLCBhIGN1cnJlbnQKQEAg LTQzOTIsNyArNDMwNiw3IEBAIHBnX2xhbmd1YWdlX2FjbG1hc2soT2lkIGxhbmdfb2lkLCBP aWQgcm9sZWlkLAogICogc25hcHNob3QsIHNpbmNlIGFsbCB3ZSBkbyB3aXRoIHRoZSBzbmFw c2hvdCBhcmd1bWVudCBpcyBwYXNzIGl0IHRocm91Z2gKICAqIHRvIHN5c3RhYmxlX2JlZ2lu c2NhbigpLgogICovCi1BY2xNb2RlCitzdGF0aWMgQWNsTW9kZQogcGdfbGFyZ2VvYmplY3Rf YWNsbWFza19zbmFwc2hvdChPaWQgbG9ial9vaWQsIE9pZCByb2xlaWQsCiAJCQkJCQkJCUFj bE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3csCiAJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90 KQpAQCAtNDQ2Myw5ICs0Mzc3LDkgQEAgcGdfbGFyZ2VvYmplY3RfYWNsbWFza19zbmFwc2hv dChPaWQgbG9ial9vaWQsIE9pZCByb2xlaWQsCiB9CiAKIC8qCi0gKiBFeHBvcnRlZCByb3V0 aW5lIGZvciBleGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSBuYW1lc3BhY2UK KyAqIFJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIG5h bWVzcGFjZQogICovCi1BY2xNb2RlCitzdGF0aWMgQWNsTW9kZQogcGdfbmFtZXNwYWNlX2Fj bG1hc2soT2lkIG5zcF9vaWQsIE9pZCByb2xlaWQsCiAJCQkJCSBBY2xNb2RlIG1hc2ssIEFj bE1hc2tIb3cgaG93KQogewpAQCAtNDU1NSwxODkgKzQ0NjksOSBAQCBwZ19uYW1lc3BhY2Vf YWNsbWFzayhPaWQgbnNwX29pZCwgT2lkIHJvbGVpZCwKIH0KIAogLyoKLSAqIEV4cG9ydGVk IHJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIHRhYmxl c3BhY2UKKyAqIFJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZv ciBhIHR5cGUuCiAgKi8KLUFjbE1vZGUKLXBnX3RhYmxlc3BhY2VfYWNsbWFzayhPaWQgc3Bj X29pZCwgT2lkIHJvbGVpZCwKLQkJCQkJICBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93 KQotewotCUFjbE1vZGUJCXJlc3VsdDsKLQlIZWFwVHVwbGUJdHVwbGU7Ci0JRGF0dW0JCWFj bERhdHVtOwotCWJvb2wJCWlzTnVsbDsKLQlBY2wJCSAgICphY2w7Ci0JT2lkCQkJb3duZXJJ ZDsKLQotCS8qIFN1cGVydXNlcnMgYnlwYXNzIGFsbCBwZXJtaXNzaW9uIGNoZWNraW5nLiAq LwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiBtYXNrOwotCi0JLyoK LQkgKiBHZXQgdGhlIHRhYmxlc3BhY2UncyBBQ0wgZnJvbSBwZ190YWJsZXNwYWNlCi0JICov Ci0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVEFCTEVTUEFDRU9JRCwgT2JqZWN0SWRHZXRE YXR1bShzcGNfb2lkKSk7Ci0JaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJl cG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAot CQkJCSBlcnJtc2coInRhYmxlc3BhY2Ugd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLCBz cGNfb2lkKSkpOwotCi0Jb3duZXJJZCA9ICgoRm9ybV9wZ190YWJsZXNwYWNlKSBHRVRTVFJV Q1QodHVwbGUpKS0+c3Bjb3duZXI7Ci0KLQlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihU QUJMRVNQQUNFT0lELCB0dXBsZSwKLQkJCQkJCQkgICBBbnVtX3BnX3RhYmxlc3BhY2Vfc3Bj YWNsLAotCQkJCQkJCSAgICZpc051bGwpOwotCi0JaWYgKGlzTnVsbCkKLQl7Ci0JCS8qIE5v IEFDTCwgc28gYnVpbGQgZGVmYXVsdCBBQ0wgKi8KLQkJYWNsID0gYWNsZGVmYXVsdChPQkpF Q1RfVEFCTEVTUEFDRSwgb3duZXJJZCk7Ci0JCWFjbERhdHVtID0gKERhdHVtKSAwOwotCX0K LQllbHNlCi0JewotCQkvKiBkZXRvYXN0IEFDTCBpZiBuZWNlc3NhcnkgKi8KLQkJYWNsID0g RGF0dW1HZXRBY2xQKGFjbERhdHVtKTsKLQl9Ci0KLQlyZXN1bHQgPSBhY2xtYXNrKGFjbCwg cm9sZWlkLCBvd25lcklkLCBtYXNrLCBob3cpOwotCi0JLyogaWYgd2UgaGF2ZSBhIGRldG9h c3RlZCBjb3B5LCBmcmVlIGl0ICovCi0JaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERh dHVtR2V0UG9pbnRlcihhY2xEYXR1bSkpCi0JCXBmcmVlKGFjbCk7Ci0KLQlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIEV4cG9ydGVk IHJvdXRpbmUgZm9yIGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIGZvcmVp Z24KLSAqIGRhdGEgd3JhcHBlcgotICovCi1BY2xNb2RlCi1wZ19mb3JlaWduX2RhdGFfd3Jh cHBlcl9hY2xtYXNrKE9pZCBmZHdfb2lkLCBPaWQgcm9sZWlkLAotCQkJCQkJCQlBY2xNb2Rl IG1hc2ssIEFjbE1hc2tIb3cgaG93KQotewotCUFjbE1vZGUJCXJlc3VsdDsKLQlIZWFwVHVw bGUJdHVwbGU7Ci0JRGF0dW0JCWFjbERhdHVtOwotCWJvb2wJCWlzTnVsbDsKLQlBY2wJCSAg ICphY2w7Ci0JT2lkCQkJb3duZXJJZDsKLQotCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBw ZXIgZmR3Rm9ybTsKLQotCS8qIEJ5cGFzcyBwZXJtaXNzaW9uIGNoZWNrcyBmb3Igc3VwZXJ1 c2VycyAqLwotCWlmIChzdXBlcnVzZXJfYXJnKHJvbGVpZCkpCi0JCXJldHVybiBtYXNrOwot Ci0JLyoKLQkgKiBNdXN0IGdldCB0aGUgRkRXJ3MgdHVwbGUgZnJvbSBwZ19mb3JlaWduX2Rh dGFfd3JhcHBlcgotCSAqLwotCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRB V1JBUFBFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShmZHdfb2lkKSk7Ci0JaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR1cGxlKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAotCQkJCSBlcnJtc2coImZvcmVpZ24tZGF0YSB3cmFw cGVyIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCWZkd19vaWQpKSk7Ci0J ZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QodHVw bGUpOwotCi0JLyoKLQkgKiBOb3JtYWwgY2FzZTogZ2V0IHRoZSBGRFcncyBBQ0wgZnJvbSBw Z19mb3JlaWduX2RhdGFfd3JhcHBlcgotCSAqLwotCW93bmVySWQgPSBmZHdGb3JtLT5mZHdv d25lcjsKLQotCWFjbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKEZPUkVJR05EQVRBV1JBUFBF Uk9JRCwgdHVwbGUsCi0JCQkJCQkJICAgQW51bV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcl9m ZHdhY2wsICZpc051bGwpOwotCWlmIChpc051bGwpCi0JewotCQkvKiBObyBBQ0wsIHNvIGJ1 aWxkIGRlZmF1bHQgQUNMICovCi0JCWFjbCA9IGFjbGRlZmF1bHQoT0JKRUNUX0ZEVywgb3du ZXJJZCk7Ci0JCWFjbERhdHVtID0gKERhdHVtKSAwOwotCX0KLQllbHNlCi0JewotCQkvKiBk ZXRvYXN0IHJlbCdzIEFDTCBpZiBuZWNlc3NhcnkgKi8KLQkJYWNsID0gRGF0dW1HZXRBY2xQ KGFjbERhdHVtKTsKLQl9Ci0KLQlyZXN1bHQgPSBhY2xtYXNrKGFjbCwgcm9sZWlkLCBvd25l cklkLCBtYXNrLCBob3cpOwotCi0JLyogaWYgd2UgaGF2ZSBhIGRldG9hc3RlZCBjb3B5LCBm cmVlIGl0ICovCi0JaWYgKGFjbCAmJiAoUG9pbnRlcikgYWNsICE9IERhdHVtR2V0UG9pbnRl cihhY2xEYXR1bSkpCi0JCXBmcmVlKGFjbCk7Ci0KLQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUp OwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIEV4cG9ydGVkIHJvdXRpbmUgZm9y IGV4YW1pbmluZyBhIHVzZXIncyBwcml2aWxlZ2VzIGZvciBhIGZvcmVpZ24KLSAqIHNlcnZl ci4KLSAqLwotQWNsTW9kZQotcGdfZm9yZWlnbl9zZXJ2ZXJfYWNsbWFzayhPaWQgc3J2X29p ZCwgT2lkIHJvbGVpZCwKLQkJCQkJCSAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykK LXsKLQlBY2xNb2RlCQlyZXN1bHQ7Ci0JSGVhcFR1cGxlCXR1cGxlOwotCURhdHVtCQlhY2xE YXR1bTsKLQlib29sCQlpc051bGw7Ci0JQWNsCQkgICAqYWNsOwotCU9pZAkJCW93bmVySWQ7 Ci0KLQlGb3JtX3BnX2ZvcmVpZ25fc2VydmVyIHNydkZvcm07Ci0KLQkvKiBCeXBhc3MgcGVy bWlzc2lvbiBjaGVja3MgZm9yIHN1cGVydXNlcnMgKi8KLQlpZiAoc3VwZXJ1c2VyX2FyZyhy b2xlaWQpKQotCQlyZXR1cm4gbWFzazsKLQotCS8qCi0JICogTXVzdCBnZXQgdGhlIEZEVydz IHR1cGxlIGZyb20gcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIKLQkgKi8KLQl0dXBsZSA9IFNl YXJjaFN5c0NhY2hlMShGT1JFSUdOU0VSVkVST0lELCBPYmplY3RJZEdldERhdHVtKHNydl9v aWQpKTsKLQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQotCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCi0JCQkJIGVycm1z ZygiZm9yZWlnbiBzZXJ2ZXIgd2l0aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAotCQkJCQkJ c3J2X29pZCkpKTsKLQlzcnZGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9zZXJ2ZXIpIEdFVFNU UlVDVCh0dXBsZSk7Ci0KLQkvKgotCSAqIE5vcm1hbCBjYXNlOiBnZXQgdGhlIGZvcmVpZ24g c2VydmVyJ3MgQUNMIGZyb20gcGdfZm9yZWlnbl9zZXJ2ZXIKLQkgKi8KLQlvd25lcklkID0g c3J2Rm9ybS0+c3J2b3duZXI7Ci0KLQlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihGT1JF SUdOU0VSVkVST0lELCB0dXBsZSwKLQkJCQkJCQkgICBBbnVtX3BnX2ZvcmVpZ25fc2VydmVy X3NydmFjbCwgJmlzTnVsbCk7Ci0JaWYgKGlzTnVsbCkKLQl7Ci0JCS8qIE5vIEFDTCwgc28g YnVpbGQgZGVmYXVsdCBBQ0wgKi8KLQkJYWNsID0gYWNsZGVmYXVsdChPQkpFQ1RfRk9SRUlH Tl9TRVJWRVIsIG93bmVySWQpOwotCQlhY2xEYXR1bSA9IChEYXR1bSkgMDsKLQl9Ci0JZWxz ZQotCXsKLQkJLyogZGV0b2FzdCByZWwncyBBQ0wgaWYgbmVjZXNzYXJ5ICovCi0JCWFjbCA9 IERhdHVtR2V0QWNsUChhY2xEYXR1bSk7Ci0JfQotCi0JcmVzdWx0ID0gYWNsbWFzayhhY2ws IHJvbGVpZCwgb3duZXJJZCwgbWFzaywgaG93KTsKLQotCS8qIGlmIHdlIGhhdmUgYSBkZXRv YXN0ZWQgY29weSwgZnJlZSBpdCAqLwotCWlmIChhY2wgJiYgKFBvaW50ZXIpIGFjbCAhPSBE YXR1bUdldFBvaW50ZXIoYWNsRGF0dW0pKQotCQlwZnJlZShhY2wpOwotCi0JUmVsZWFzZVN5 c0NhY2hlKHR1cGxlKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBFeHBvcnRl ZCByb3V0aW5lIGZvciBleGFtaW5pbmcgYSB1c2VyJ3MgcHJpdmlsZWdlcyBmb3IgYSB0eXBl LgotICovCi1BY2xNb2RlCitzdGF0aWMgQWNsTW9kZQogcGdfdHlwZV9hY2xtYXNrKE9pZCB0 eXBlX29pZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdykKIHsK IAlBY2xNb2RlCQlyZXN1bHQ7CkBAIC00ODExLDYgKzQ1NDUsNDAgQEAgcGdfdHlwZV9hY2xt YXNrKE9pZCB0eXBlX29pZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93 IGhvdykKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogRXhwb3J0ZWQgZ2VuZXJpYyBy b3V0aW5lIGZvciBjaGVja2luZyBhIHVzZXIncyBhY2Nlc3MgcHJpdmlsZWdlcyB0byBhbiBv YmplY3QKKyAqLworQWNsUmVzdWx0CitvYmplY3RfYWNsY2hlY2soT2lkIGNsYXNzaWQsIE9p ZCBvYmplY3RpZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtb2RlKQoreworCWlmIChvYmplY3Rf YWNsbWFzayhjbGFzc2lkLCBvYmplY3RpZCwgcm9sZWlkLCBtb2RlLCBBQ0xNQVNLX0FOWSkg IT0gMCkKKwkJcmV0dXJuIEFDTENIRUNLX09LOworCWVsc2UKKwkJcmV0dXJuIEFDTENIRUNL X05PX1BSSVY7Cit9CisKKy8qCisgKiBXcmFwcGVyIGZ1bmN0aW9ucyBmb3IgY29tbW9ubHkg dXNlZCBjYXNlcworICovCisKK0FjbFJlc3VsdAorcGdfZGF0YWJhc2VfYWNsY2hlY2soT2lk IGRiX29pZCwgT2lkIHJvbGVpZCwgQWNsTW9kZSBtb2RlKQoreworCXJldHVybiBvYmplY3Rf YWNsY2hlY2soRGF0YWJhc2VSZWxhdGlvbklkLCBkYl9vaWQsIHJvbGVpZCwgbW9kZSk7Cit9 CisKK0FjbFJlc3VsdAorcGdfcHJvY19hY2xjaGVjayhPaWQgcHJvY19vaWQsIE9pZCByb2xl aWQsIEFjbE1vZGUgbW9kZSkKK3sKKwlyZXR1cm4gb2JqZWN0X2FjbGNoZWNrKFByb2NlZHVy ZVJlbGF0aW9uSWQsIHByb2Nfb2lkLCByb2xlaWQsIG1vZGUpOworfQorCitBY2xSZXN1bHQK K3BnX3RhYmxlc3BhY2VfYWNsY2hlY2soT2lkIHNwY19vaWQsIE9pZCByb2xlaWQsIEFjbE1v ZGUgbW9kZSkKK3sKKwlyZXR1cm4gb2JqZWN0X2FjbGNoZWNrKFRhYmxlU3BhY2VSZWxhdGlv bklkLCBzcGNfb2lkLCByb2xlaWQsIG1vZGUpOworfQorCiAvKgogICogRXhwb3J0ZWQgcm91 dGluZSBmb3IgY2hlY2tpbmcgYSB1c2VyJ3MgYWNjZXNzIHByaXZpbGVnZXMgdG8gYSBjb2x1 bW4KICAqCkBAIC00OTczLDE4ICs0NzQxLDYgQEAgcGdfY2xhc3NfYWNsY2hlY2tfZXh0KE9p ZCB0YWJsZV9vaWQsIE9pZCByb2xlaWQsCiAJCXJldHVybiBBQ0xDSEVDS19OT19QUklWOwog fQogCi0vKgotICogRXhwb3J0ZWQgcm91dGluZSBmb3IgY2hlY2tpbmcgYSB1c2VyJ3MgYWNj ZXNzIHByaXZpbGVnZXMgdG8gYSBkYXRhYmFzZQotICovCi1BY2xSZXN1bHQKLXBnX2RhdGFi YXNlX2FjbGNoZWNrKE9pZCBkYl9vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSkKLXsK LQlpZiAocGdfZGF0YWJhc2VfYWNsbWFzayhkYl9vaWQsIHJvbGVpZCwgbW9kZSwgQUNMTUFT S19BTlkpICE9IDApCi0JCXJldHVybiBBQ0xDSEVDS19PSzsKLQllbHNlCi0JCXJldHVybiBB Q0xDSEVDS19OT19QUklWOwotfQotCiAvKgogICogRXhwb3J0ZWQgcm91dGluZSBmb3IgY2hl Y2tpbmcgYSB1c2VyJ3MgYWNjZXNzIHByaXZpbGVnZXMgdG8gYSBjb25maWd1cmF0aW9uCiAg KiBwYXJhbWV0ZXIgKEdVQyksIGlkZW50aWZpZWQgYnkgR1VDIG5hbWUuCkBAIC00OTk4LDQz ICs0NzU0LDYgQEAgcGdfcGFyYW1ldGVyX2FjbGNoZWNrKGNvbnN0IGNoYXIgKm5hbWUsIE9p ZCByb2xlaWQsIEFjbE1vZGUgbW9kZSkKIAkJcmV0dXJuIEFDTENIRUNLX05PX1BSSVY7CiB9 CiAKLS8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZvciBjaGVja2luZyBhIHVzZXIncyBhY2Nl c3MgcHJpdmlsZWdlcyB0byBhIGNvbmZpZ3VyYXRpb24KLSAqIHBhcmFtZXRlciAoR1VDKSwg aWRlbnRpZmllZCBieSB0aGUgT0lEIG9mIGl0cyBwZ19wYXJhbWV0ZXJfYWNsIGVudHJ5Lgot ICovCi1BY2xSZXN1bHQKLXBnX3BhcmFtZXRlcl9hY2xfYWNsY2hlY2soT2lkIGFjbF9vaWQs IE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSkKLXsKLQlpZiAocGdfcGFyYW1ldGVyX2FjbF9h Y2xtYXNrKGFjbF9vaWQsIHJvbGVpZCwgbW9kZSwgQUNMTUFTS19BTlkpICE9IDApCi0JCXJl dHVybiBBQ0xDSEVDS19PSzsKLQllbHNlCi0JCXJldHVybiBBQ0xDSEVDS19OT19QUklWOwot fQotCi0vKgotICogRXhwb3J0ZWQgcm91dGluZSBmb3IgY2hlY2tpbmcgYSB1c2VyJ3MgYWNj ZXNzIHByaXZpbGVnZXMgdG8gYSBmdW5jdGlvbgotICovCi1BY2xSZXN1bHQKLXBnX3Byb2Nf YWNsY2hlY2soT2lkIHByb2Nfb2lkLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1vZGUpCi17Ci0J aWYgKHBnX3Byb2NfYWNsbWFzayhwcm9jX29pZCwgcm9sZWlkLCBtb2RlLCBBQ0xNQVNLX0FO WSkgIT0gMCkKLQkJcmV0dXJuIEFDTENIRUNLX09LOwotCWVsc2UKLQkJcmV0dXJuIEFDTENI RUNLX05PX1BSSVY7Ci19Ci0KLS8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZvciBjaGVja2lu ZyBhIHVzZXIncyBhY2Nlc3MgcHJpdmlsZWdlcyB0byBhIGxhbmd1YWdlCi0gKi8KLUFjbFJl c3VsdAotcGdfbGFuZ3VhZ2VfYWNsY2hlY2soT2lkIGxhbmdfb2lkLCBPaWQgcm9sZWlkLCBB Y2xNb2RlIG1vZGUpCi17Ci0JaWYgKHBnX2xhbmd1YWdlX2FjbG1hc2sobGFuZ19vaWQsIHJv bGVpZCwgbW9kZSwgQUNMTUFTS19BTlkpICE9IDApCi0JCXJldHVybiBBQ0xDSEVDS19PSzsK LQllbHNlCi0JCXJldHVybiBBQ0xDSEVDS19OT19QUklWOwotfQotCiAvKgogICogRXhwb3J0 ZWQgcm91dGluZSBmb3IgY2hlY2tpbmcgYSB1c2VyJ3MgYWNjZXNzIHByaXZpbGVnZXMgdG8g YSBsYXJnZW9iamVjdAogICovCkBAIC01MDYxLDQ0ICs0NzgwLDYgQEAgcGdfbmFtZXNwYWNl X2FjbGNoZWNrKE9pZCBuc3Bfb2lkLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1vZGUpCiAJCXJl dHVybiBBQ0xDSEVDS19OT19QUklWOwogfQogCi0vKgotICogRXhwb3J0ZWQgcm91dGluZSBm b3IgY2hlY2tpbmcgYSB1c2VyJ3MgYWNjZXNzIHByaXZpbGVnZXMgdG8gYSB0YWJsZXNwYWNl Ci0gKi8KLUFjbFJlc3VsdAotcGdfdGFibGVzcGFjZV9hY2xjaGVjayhPaWQgc3BjX29pZCwg T2lkIHJvbGVpZCwgQWNsTW9kZSBtb2RlKQotewotCWlmIChwZ190YWJsZXNwYWNlX2FjbG1h c2soc3BjX29pZCwgcm9sZWlkLCBtb2RlLCBBQ0xNQVNLX0FOWSkgIT0gMCkKLQkJcmV0dXJu IEFDTENIRUNLX09LOwotCWVsc2UKLQkJcmV0dXJuIEFDTENIRUNLX05PX1BSSVY7Ci19Ci0K LS8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZvciBjaGVja2luZyBhIHVzZXIncyBhY2Nlc3Mg cHJpdmlsZWdlcyB0byBhIGZvcmVpZ24KLSAqIGRhdGEgd3JhcHBlcgotICovCi1BY2xSZXN1 bHQKLXBnX2ZvcmVpZ25fZGF0YV93cmFwcGVyX2FjbGNoZWNrKE9pZCBmZHdfb2lkLCBPaWQg cm9sZWlkLCBBY2xNb2RlIG1vZGUpCi17Ci0JaWYgKHBnX2ZvcmVpZ25fZGF0YV93cmFwcGVy X2FjbG1hc2soZmR3X29pZCwgcm9sZWlkLCBtb2RlLCBBQ0xNQVNLX0FOWSkgIT0gMCkKLQkJ cmV0dXJuIEFDTENIRUNLX09LOwotCWVsc2UKLQkJcmV0dXJuIEFDTENIRUNLX05PX1BSSVY7 Ci19Ci0KLS8qCi0gKiBFeHBvcnRlZCByb3V0aW5lIGZvciBjaGVja2luZyBhIHVzZXIncyBh Y2Nlc3MgcHJpdmlsZWdlcyB0byBhIGZvcmVpZ24KLSAqIHNlcnZlcgotICovCi1BY2xSZXN1 bHQKLXBnX2ZvcmVpZ25fc2VydmVyX2FjbGNoZWNrKE9pZCBzcnZfb2lkLCBPaWQgcm9sZWlk LCBBY2xNb2RlIG1vZGUpCi17Ci0JaWYgKHBnX2ZvcmVpZ25fc2VydmVyX2FjbG1hc2soc3J2 X29pZCwgcm9sZWlkLCBtb2RlLCBBQ0xNQVNLX0FOWSkgIT0gMCkKLQkJcmV0dXJuIEFDTENI RUNLX09LOwotCWVsc2UKLQkJcmV0dXJuIEFDTENIRUNLX05PX1BSSVY7Ci19Ci0KIC8qCiAg KiBFeHBvcnRlZCByb3V0aW5lIGZvciBjaGVja2luZyBhIHVzZXIncyBhY2Nlc3MgcHJpdmls ZWdlcyB0byBhIHR5cGUKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Zm9yZWlnbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKaW5k ZXggZTZlNmQxMjhkMTFhLi41NWIwYmU5ZTFkMTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2ZvcmVpZ25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9y ZWlnbmNtZHMuYwpAQCAtMzY2LDcgKzM2Niw3IEBAIEFsdGVyRm9yZWlnblNlcnZlck93bmVy X2ludGVybmFsKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cCwgT2lkIG5ld093bmVySWQp CiAJCQljaGVja19pc19tZW1iZXJfb2Zfcm9sZShHZXRVc2VySWQoKSwgbmV3T3duZXJJZCk7 CiAKIAkJCS8qIE5ldyBvd25lciBtdXN0IGhhdmUgVVNBR0UgcHJpdmlsZWdlIG9uIGZvcmVp Z24tZGF0YSB3cmFwcGVyICovCi0JCQlhY2xyZXN1bHQgPSBwZ19mb3JlaWduX2RhdGFfd3Jh cHBlcl9hY2xjaGVjayhmb3JtLT5zcnZmZHcsIG5ld093bmVySWQsIEFDTF9VU0FHRSk7CisJ CQlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRp b25JZCwgZm9ybS0+c3J2ZmR3LCBuZXdPd25lcklkLCBBQ0xfVVNBR0UpOwogCQkJaWYgKGFj bHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKIAkJCXsKIAkJCQlGb3JlaWduRGF0YVdyYXBwZXIg KmZkdyA9IEdldEZvcmVpZ25EYXRhV3JhcHBlcihmb3JtLT5zcnZmZHcpOwpAQCAtODkxLDcg Kzg5MSw3IEBAIENyZWF0ZUZvcmVpZ25TZXJ2ZXIoQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQg KnN0bXQpCiAJICovCiAJZmR3ID0gR2V0Rm9yZWlnbkRhdGFXcmFwcGVyQnlOYW1lKHN0bXQt PmZkd25hbWUsIGZhbHNlKTsKIAotCWFjbHJlc3VsdCA9IHBnX2ZvcmVpZ25fZGF0YV93cmFw cGVyX2FjbGNoZWNrKGZkdy0+ZmR3aWQsIG93bmVySWQsIEFDTF9VU0FHRSk7CisJYWNscmVz dWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIGZk dy0+ZmR3aWQsIG93bmVySWQsIEFDTF9VU0FHRSk7CiAJaWYgKGFjbHJlc3VsdCAhPSBBQ0xD SEVDS19PSykKIAkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfRkRXLCBmZHct PmZkd25hbWUpOwogCkBAIC0xMDgyLDcgKzEwODIsNyBAQCB1c2VyX21hcHBpbmdfZGRsX2Fj bGNoZWNrKE9pZCB1bXVzZXJpZCwgT2lkIHNlcnZlcmlkLCBjb25zdCBjaGFyICpzZXJ2ZXJu YW1lKQogCQl7CiAJCQlBY2xSZXN1bHQJYWNscmVzdWx0OwogCi0JCQlhY2xyZXN1bHQgPSBw Z19mb3JlaWduX3NlcnZlcl9hY2xjaGVjayhzZXJ2ZXJpZCwgY3VydXNlcmlkLCBBQ0xfVVNB R0UpOworCQkJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVpZ25TZXJ2ZXJSZWxh dGlvbklkLCBzZXJ2ZXJpZCwgY3VydXNlcmlkLCBBQ0xfVVNBR0UpOwogCQkJaWYgKGFjbHJl c3VsdCAhPSBBQ0xDSEVDS19PSykKIAkJCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9C SkVDVF9GT1JFSUdOX1NFUlZFUiwgc2VydmVybmFtZSk7CiAJCX0KQEAgLTE0MzMsNyArMTQz Myw3IEBAIENyZWF0ZUZvcmVpZ25UYWJsZShDcmVhdGVGb3JlaWduVGFibGVTdG10ICpzdG10 LCBPaWQgcmVsaWQpCiAJICogZ2V0IHRoZSBhY3R1YWwgRkRXIGZvciBvcHRpb24gdmFsaWRh dGlvbiBldGMuCiAJICovCiAJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlckJ5TmFtZShzdG10 LT5zZXJ2ZXJuYW1lLCBmYWxzZSk7Ci0JYWNscmVzdWx0ID0gcGdfZm9yZWlnbl9zZXJ2ZXJf YWNsY2hlY2soc2VydmVyLT5zZXJ2ZXJpZCwgb3duZXJJZCwgQUNMX1VTQUdFKTsKKwlhY2xy ZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soRm9yZWlnblNlcnZlclJlbGF0aW9uSWQsIHNlcnZl ci0+c2VydmVyaWQsIG93bmVySWQsIEFDTF9VU0FHRSk7CiAJaWYgKGFjbHJlc3VsdCAhPSBB Q0xDSEVDS19PSykKIAkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfRk9SRUlH Tl9TRVJWRVIsIHNlcnZlci0+c2VydmVybmFtZSk7CiAKQEAgLTE0OTIsNyArMTQ5Miw3IEBA IEltcG9ydEZvcmVpZ25TY2hlbWEoSW1wb3J0Rm9yZWlnblNjaGVtYVN0bXQgKnN0bXQpCiAK IAkvKiBDaGVjayB0aGF0IHRoZSBmb3JlaWduIHNlcnZlciBleGlzdHMgYW5kIHRoYXQgd2Ug aGF2ZSBVU0FHRSBvbiBpdCAqLwogCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXJCeU5hbWUo c3RtdC0+c2VydmVyX25hbWUsIGZhbHNlKTsKLQlhY2xyZXN1bHQgPSBwZ19mb3JlaWduX3Nl cnZlcl9hY2xjaGVjayhzZXJ2ZXItPnNlcnZlcmlkLCBHZXRVc2VySWQoKSwgQUNMX1VTQUdF KTsKKwlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soRm9yZWlnblNlcnZlclJlbGF0aW9u SWQsIHNlcnZlci0+c2VydmVyaWQsIEdldFVzZXJJZCgpLCBBQ0xfVVNBR0UpOwogCWlmIChh Y2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCiAJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwg T0JKRUNUX0ZPUkVJR05fU0VSVkVSLCBzZXJ2ZXItPnNlcnZlcm5hbWUpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2Z1bmN0aW9uY21kcy5jCmluZGV4IGU2ZmNmYzIzYjkzMS4uZTAwNjAzM2Jk ODQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9mdW5jdGlvbmNtZHMuYwpAQCAtMTExMSw3ICsx MTExLDcgQEAgQ3JlYXRlRnVuY3Rpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVGdW5j dGlvblN0bXQgKnN0bXQpCiAJaWYgKGxhbmd1YWdlU3RydWN0LT5sYW5wbHRydXN0ZWQpCiAJ ewogCQkvKiBpZiB0cnVzdGVkIGxhbmd1YWdlLCBuZWVkIFVTQUdFIHByaXZpbGVnZSAqLwot CQlhY2xyZXN1bHQgPSBwZ19sYW5ndWFnZV9hY2xjaGVjayhsYW5ndWFnZU9pZCwgR2V0VXNl cklkKCksIEFDTF9VU0FHRSk7CisJCWFjbHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhMYW5n dWFnZVJlbGF0aW9uSWQsIGxhbmd1YWdlT2lkLCBHZXRVc2VySWQoKSwgQUNMX1VTQUdFKTsK IAkJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKIAkJCWFjbGNoZWNrX2Vycm9yKGFj bHJlc3VsdCwgT0JKRUNUX0xBTkdVQUdFLAogCQkJCQkJICAgTmFtZVN0cihsYW5ndWFnZVN0 cnVjdC0+bGFubmFtZSkpOwpAQCAtMTg0NCw3ICsxODQ0LDcgQEAgQ3JlYXRlVHJhbnNmb3Jt KENyZWF0ZVRyYW5zZm9ybVN0bXQgKnN0bXQpCiAJICovCiAJbGFuZ2lkID0gZ2V0X2xhbmd1 YWdlX29pZChzdG10LT5sYW5nLCBmYWxzZSk7CiAKLQlhY2xyZXN1bHQgPSBwZ19sYW5ndWFn ZV9hY2xjaGVjayhsYW5naWQsIEdldFVzZXJJZCgpLCBBQ0xfVVNBR0UpOworCWFjbHJlc3Vs dCA9IG9iamVjdF9hY2xjaGVjayhMYW5ndWFnZVJlbGF0aW9uSWQsIGxhbmdpZCwgR2V0VXNl cklkKCksIEFDTF9VU0FHRSk7CiAJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKIAkJ YWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfTEFOR1VBR0UsIHN0bXQtPmxhbmcp OwogCkBAIC0yMTEwLDcgKzIxMTAsNyBAQCBFeGVjdXRlRG9TdG10KFBhcnNlU3RhdGUgKnBz dGF0ZSwgRG9TdG10ICpzdG10LCBib29sIGF0b21pYykKIAkJLyogaWYgdHJ1c3RlZCBsYW5n dWFnZSwgbmVlZCBVU0FHRSBwcml2aWxlZ2UgKi8KIAkJQWNsUmVzdWx0CWFjbHJlc3VsdDsK IAotCQlhY2xyZXN1bHQgPSBwZ19sYW5ndWFnZV9hY2xjaGVjayhjb2RlYmxvY2stPmxhbmdP aWQsIEdldFVzZXJJZCgpLAorCQlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soTGFuZ3Vh Z2VSZWxhdGlvbklkLCBjb2RlYmxvY2stPmxhbmdPaWQsIEdldFVzZXJJZCgpLAogCQkJCQkJ CQkJCSBBQ0xfVVNBR0UpOwogCQlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQogCQkJ YWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfTEFOR1VBR0UsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvYWNsLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv YWNsLmMKaW5kZXggNGZhYzQwMmU1YjY0Li4wMTg2MmUyNmE5MTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9hY2wuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv YWNsLmMKQEAgLTIzLDcgKzIzLDExIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBw ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFyYW1l dGVyX2FjbC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMu aCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9jbGFuZy5oIgpAQCAtMzA5OSw3ICszMTAzLDcg QEAgaGFzX2ZvcmVpZ25fZGF0YV93cmFwcGVyX3ByaXZpbGVnZV9uYW1lX25hbWUoUEdfRlVO Q1RJT05fQVJHUykKIAlmZHdpZCA9IGNvbnZlcnRfZm9yZWlnbl9kYXRhX3dyYXBwZXJfbmFt ZShmZHduYW1lKTsKIAltb2RlID0gY29udmVydF9mb3JlaWduX2RhdGFfd3JhcHBlcl9wcml2 X3N0cmluZyhwcml2X3R5cGVfdGV4dCk7CiAKLQlhY2xyZXN1bHQgPSBwZ19mb3JlaWduX2Rh dGFfd3JhcHBlcl9hY2xjaGVjayhmZHdpZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xyZXN1bHQg PSBvYmplY3RfYWNsY2hlY2soRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgZmR3aWQs IHJvbGVpZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0gQUNMQ0hF Q0tfT0spOwogfQpAQCAtMzEyNCw3ICszMTI4LDcgQEAgaGFzX2ZvcmVpZ25fZGF0YV93cmFw cGVyX3ByaXZpbGVnZV9uYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZmR3aWQgPSBjb252ZXJ0 X2ZvcmVpZ25fZGF0YV93cmFwcGVyX25hbWUoZmR3bmFtZSk7CiAJbW9kZSA9IGNvbnZlcnRf Zm9yZWlnbl9kYXRhX3dyYXBwZXJfcHJpdl9zdHJpbmcocHJpdl90eXBlX3RleHQpOwogCi0J YWNscmVzdWx0ID0gcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXJfYWNsY2hlY2soZmR3aWQsIHJv bGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVpZ25EYXRh V3JhcHBlclJlbGF0aW9uSWQsIGZkd2lkLCByb2xlaWQsIG1vZGUpOwogCiAJUEdfUkVUVVJO X0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0KQEAgLTMxNTAsNyArMzE1NCw3 IEBAIGhhc19mb3JlaWduX2RhdGFfd3JhcHBlcl9wcml2aWxlZ2VfbmFtZV9pZChQR19GVU5D VElPTl9BUkdTKQogCWlmICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKEZPUkVJR05EQVRBV1JB UFBFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShmZHdpZCkpKQogCQlQR19SRVRVUk5fTlVMTCgp OwogCi0JYWNscmVzdWx0ID0gcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXJfYWNsY2hlY2soZmR3 aWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVp Z25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIGZkd2lkLCByb2xlaWQsIG1vZGUpOwogCiAJUEdf UkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0KQEAgLTMxNzYsNyAr MzE4MCw3IEBAIGhhc19mb3JlaWduX2RhdGFfd3JhcHBlcl9wcml2aWxlZ2VfaWQoUEdfRlVO Q1RJT05fQVJHUykKIAlpZiAoIVNlYXJjaFN5c0NhY2hlRXhpc3RzMShGT1JFSUdOREFUQVdS QVBQRVJPSUQsIE9iamVjdElkR2V0RGF0dW0oZmR3aWQpKSkKIAkJUEdfUkVUVVJOX05VTEwo KTsKIAotCWFjbHJlc3VsdCA9IHBnX2ZvcmVpZ25fZGF0YV93cmFwcGVyX2FjbGNoZWNrKGZk d2lkLCByb2xlaWQsIG1vZGUpOworCWFjbHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhGb3Jl aWduRGF0YVdyYXBwZXJSZWxhdGlvbklkLCBmZHdpZCwgcm9sZWlkLCBtb2RlKTsKIAogCVBH X1JFVFVSTl9CT09MKGFjbHJlc3VsdCA9PSBBQ0xDSEVDS19PSyk7CiB9CkBAIC0zMTk5LDcg KzMyMDMsNyBAQCBoYXNfZm9yZWlnbl9kYXRhX3dyYXBwZXJfcHJpdmlsZWdlX2lkX25hbWUo UEdfRlVOQ1RJT05fQVJHUykKIAlmZHdpZCA9IGNvbnZlcnRfZm9yZWlnbl9kYXRhX3dyYXBw ZXJfbmFtZShmZHduYW1lKTsKIAltb2RlID0gY29udmVydF9mb3JlaWduX2RhdGFfd3JhcHBl cl9wcml2X3N0cmluZyhwcml2X3R5cGVfdGV4dCk7CiAKLQlhY2xyZXN1bHQgPSBwZ19mb3Jl aWduX2RhdGFfd3JhcHBlcl9hY2xjaGVjayhmZHdpZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xy ZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwg ZmR3aWQsIHJvbGVpZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0g QUNMQ0hFQ0tfT0spOwogfQpAQCAtMzIyMyw3ICszMjI3LDcgQEAgaGFzX2ZvcmVpZ25fZGF0 YV93cmFwcGVyX3ByaXZpbGVnZV9pZF9pZChQR19GVU5DVElPTl9BUkdTKQogCWlmICghU2Vh cmNoU3lzQ2FjaGVFeGlzdHMxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShmZHdpZCkpKQogCQlQR19SRVRVUk5fTlVMTCgpOwogCi0JYWNscmVzdWx0ID0gcGdf Zm9yZWlnbl9kYXRhX3dyYXBwZXJfYWNsY2hlY2soZmR3aWQsIHJvbGVpZCwgbW9kZSk7CisJ YWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9u SWQsIGZkd2lkLCByb2xlaWQsIG1vZGUpOwogCiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0 ID09IEFDTENIRUNLX09LKTsKIH0KQEAgLTM0OTAsNyArMzQ5NCw3IEBAIGhhc19sYW5ndWFn ZV9wcml2aWxlZ2VfbmFtZV9uYW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJbGFuZ3VhZ2VvaWQg PSBjb252ZXJ0X2xhbmd1YWdlX25hbWUobGFuZ3VhZ2VuYW1lKTsKIAltb2RlID0gY29udmVy dF9sYW5ndWFnZV9wcml2X3N0cmluZyhwcml2X3R5cGVfdGV4dCk7CiAKLQlhY2xyZXN1bHQg PSBwZ19sYW5ndWFnZV9hY2xjaGVjayhsYW5ndWFnZW9pZCwgcm9sZWlkLCBtb2RlKTsKKwlh Y2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soTGFuZ3VhZ2VSZWxhdGlvbklkLCBsYW5ndWFn ZW9pZCwgcm9sZWlkLCBtb2RlKTsKIAogCVBHX1JFVFVSTl9CT09MKGFjbHJlc3VsdCA9PSBB Q0xDSEVDS19PSyk7CiB9CkBAIC0zNTE1LDcgKzM1MTksNyBAQCBoYXNfbGFuZ3VhZ2VfcHJp dmlsZWdlX25hbWUoUEdfRlVOQ1RJT05fQVJHUykKIAlsYW5ndWFnZW9pZCA9IGNvbnZlcnRf bGFuZ3VhZ2VfbmFtZShsYW5ndWFnZW5hbWUpOwogCW1vZGUgPSBjb252ZXJ0X2xhbmd1YWdl X3ByaXZfc3RyaW5nKHByaXZfdHlwZV90ZXh0KTsKIAotCWFjbHJlc3VsdCA9IHBnX2xhbmd1 YWdlX2FjbGNoZWNrKGxhbmd1YWdlb2lkLCByb2xlaWQsIG1vZGUpOworCWFjbHJlc3VsdCA9 IG9iamVjdF9hY2xjaGVjayhMYW5ndWFnZVJlbGF0aW9uSWQsIGxhbmd1YWdlb2lkLCByb2xl aWQsIG1vZGUpOwogCiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09L KTsKIH0KQEAgLTM1NDEsNyArMzU0NSw3IEBAIGhhc19sYW5ndWFnZV9wcml2aWxlZ2VfbmFt ZV9pZChQR19GVU5DVElPTl9BUkdTKQogCWlmICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKExB TkdPSUQsIE9iamVjdElkR2V0RGF0dW0obGFuZ3VhZ2VvaWQpKSkKIAkJUEdfUkVUVVJOX05V TEwoKTsKIAotCWFjbHJlc3VsdCA9IHBnX2xhbmd1YWdlX2FjbGNoZWNrKGxhbmd1YWdlb2lk LCByb2xlaWQsIG1vZGUpOworCWFjbHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhMYW5ndWFn ZVJlbGF0aW9uSWQsIGxhbmd1YWdlb2lkLCByb2xlaWQsIG1vZGUpOwogCiAJUEdfUkVUVVJO X0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0KQEAgLTM1NjcsNyArMzU3MSw3 IEBAIGhhc19sYW5ndWFnZV9wcml2aWxlZ2VfaWQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAo IVNlYXJjaFN5c0NhY2hlRXhpc3RzMShMQU5HT0lELCBPYmplY3RJZEdldERhdHVtKGxhbmd1 YWdlb2lkKSkpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAKLQlhY2xyZXN1bHQgPSBwZ19sYW5n dWFnZV9hY2xjaGVjayhsYW5ndWFnZW9pZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xyZXN1bHQg PSBvYmplY3RfYWNsY2hlY2soTGFuZ3VhZ2VSZWxhdGlvbklkLCBsYW5ndWFnZW9pZCwgcm9s ZWlkLCBtb2RlKTsKIAogCVBHX1JFVFVSTl9CT09MKGFjbHJlc3VsdCA9PSBBQ0xDSEVDS19P Syk7CiB9CkBAIC0zNTkwLDcgKzM1OTQsNyBAQCBoYXNfbGFuZ3VhZ2VfcHJpdmlsZWdlX2lk X25hbWUoUEdfRlVOQ1RJT05fQVJHUykKIAlsYW5ndWFnZW9pZCA9IGNvbnZlcnRfbGFuZ3Vh Z2VfbmFtZShsYW5ndWFnZW5hbWUpOwogCW1vZGUgPSBjb252ZXJ0X2xhbmd1YWdlX3ByaXZf c3RyaW5nKHByaXZfdHlwZV90ZXh0KTsKIAotCWFjbHJlc3VsdCA9IHBnX2xhbmd1YWdlX2Fj bGNoZWNrKGxhbmd1YWdlb2lkLCByb2xlaWQsIG1vZGUpOworCWFjbHJlc3VsdCA9IG9iamVj dF9hY2xjaGVjayhMYW5ndWFnZVJlbGF0aW9uSWQsIGxhbmd1YWdlb2lkLCByb2xlaWQsIG1v ZGUpOwogCiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0K QEAgLTM2MTQsNyArMzYxOCw3IEBAIGhhc19sYW5ndWFnZV9wcml2aWxlZ2VfaWRfaWQoUEdf RlVOQ1RJT05fQVJHUykKIAlpZiAoIVNlYXJjaFN5c0NhY2hlRXhpc3RzMShMQU5HT0lELCBP YmplY3RJZEdldERhdHVtKGxhbmd1YWdlb2lkKSkpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAK LQlhY2xyZXN1bHQgPSBwZ19sYW5ndWFnZV9hY2xjaGVjayhsYW5ndWFnZW9pZCwgcm9sZWlk LCBtb2RlKTsKKwlhY2xyZXN1bHQgPSBvYmplY3RfYWNsY2hlY2soTGFuZ3VhZ2VSZWxhdGlv bklkLCBsYW5ndWFnZW9pZCwgcm9sZWlkLCBtb2RlKTsKIAogCVBHX1JFVFVSTl9CT09MKGFj bHJlc3VsdCA9PSBBQ0xDSEVDS19PSyk7CiB9CkBAIC0zODc0LDcgKzM4NzgsNyBAQCBoYXNf c2VydmVyX3ByaXZpbGVnZV9uYW1lX25hbWUoUEdfRlVOQ1RJT05fQVJHUykKIAlzZXJ2ZXJp ZCA9IGNvbnZlcnRfc2VydmVyX25hbWUoc2VydmVybmFtZSk7CiAJbW9kZSA9IGNvbnZlcnRf c2VydmVyX3ByaXZfc3RyaW5nKHByaXZfdHlwZV90ZXh0KTsKIAotCWFjbHJlc3VsdCA9IHBn X2ZvcmVpZ25fc2VydmVyX2FjbGNoZWNrKHNlcnZlcmlkLCByb2xlaWQsIG1vZGUpOworCWFj bHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgc2Vy dmVyaWQsIHJvbGVpZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0g QUNMQ0hFQ0tfT0spOwogfQpAQCAtMzg5OSw3ICszOTAzLDcgQEAgaGFzX3NlcnZlcl9wcml2 aWxlZ2VfbmFtZShQR19GVU5DVElPTl9BUkdTKQogCXNlcnZlcmlkID0gY29udmVydF9zZXJ2 ZXJfbmFtZShzZXJ2ZXJuYW1lKTsKIAltb2RlID0gY29udmVydF9zZXJ2ZXJfcHJpdl9zdHJp bmcocHJpdl90eXBlX3RleHQpOwogCi0JYWNscmVzdWx0ID0gcGdfZm9yZWlnbl9zZXJ2ZXJf YWNsY2hlY2soc2VydmVyaWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0 X2FjbGNoZWNrKEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBzZXJ2ZXJpZCwgcm9sZWlkLCBt b2RlKTsKIAogCVBHX1JFVFVSTl9CT09MKGFjbHJlc3VsdCA9PSBBQ0xDSEVDS19PSyk7CiB9 CkBAIC0zOTI1LDcgKzM5MjksNyBAQCBoYXNfc2VydmVyX3ByaXZpbGVnZV9uYW1lX2lkKFBH X0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoRk9SRUlHTlNF UlZFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShzZXJ2ZXJpZCkpKQogCQlQR19SRVRVUk5fTlVM TCgpOwogCi0JYWNscmVzdWx0ID0gcGdfZm9yZWlnbl9zZXJ2ZXJfYWNsY2hlY2soc2VydmVy aWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKEZvcmVp Z25TZXJ2ZXJSZWxhdGlvbklkLCBzZXJ2ZXJpZCwgcm9sZWlkLCBtb2RlKTsKIAogCVBHX1JF VFVSTl9CT09MKGFjbHJlc3VsdCA9PSBBQ0xDSEVDS19PSyk7CiB9CkBAIC0zOTUxLDcgKzM5 NTUsNyBAQCBoYXNfc2VydmVyX3ByaXZpbGVnZV9pZChQR19GVU5DVElPTl9BUkdTKQogCWlm ICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKEZPUkVJR05TRVJWRVJPSUQsIE9iamVjdElkR2V0 RGF0dW0oc2VydmVyaWQpKSkKIAkJUEdfUkVUVVJOX05VTEwoKTsKIAotCWFjbHJlc3VsdCA9 IHBnX2ZvcmVpZ25fc2VydmVyX2FjbGNoZWNrKHNlcnZlcmlkLCByb2xlaWQsIG1vZGUpOwor CWFjbHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhGb3JlaWduU2VydmVyUmVsYXRpb25JZCwg c2VydmVyaWQsIHJvbGVpZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQg PT0gQUNMQ0hFQ0tfT0spOwogfQpAQCAtMzk3NCw3ICszOTc4LDcgQEAgaGFzX3NlcnZlcl9w cml2aWxlZ2VfaWRfbmFtZShQR19GVU5DVElPTl9BUkdTKQogCXNlcnZlcmlkID0gY29udmVy dF9zZXJ2ZXJfbmFtZShzZXJ2ZXJuYW1lKTsKIAltb2RlID0gY29udmVydF9zZXJ2ZXJfcHJp dl9zdHJpbmcocHJpdl90eXBlX3RleHQpOwogCi0JYWNscmVzdWx0ID0gcGdfZm9yZWlnbl9z ZXJ2ZXJfYWNsY2hlY2soc2VydmVyaWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0g b2JqZWN0X2FjbGNoZWNrKEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBzZXJ2ZXJpZCwgcm9s ZWlkLCBtb2RlKTsKIAogCVBHX1JFVFVSTl9CT09MKGFjbHJlc3VsdCA9PSBBQ0xDSEVDS19P Syk7CiB9CkBAIC0zOTk4LDcgKzQwMDIsNyBAQCBoYXNfc2VydmVyX3ByaXZpbGVnZV9pZF9p ZChQR19GVU5DVElPTl9BUkdTKQogCWlmICghU2VhcmNoU3lzQ2FjaGVFeGlzdHMxKEZPUkVJ R05TRVJWRVJPSUQsIE9iamVjdElkR2V0RGF0dW0oc2VydmVyaWQpKSkKIAkJUEdfUkVUVVJO X05VTEwoKTsKIAotCWFjbHJlc3VsdCA9IHBnX2ZvcmVpZ25fc2VydmVyX2FjbGNoZWNrKHNl cnZlcmlkLCByb2xlaWQsIG1vZGUpOworCWFjbHJlc3VsdCA9IG9iamVjdF9hY2xjaGVjayhG b3JlaWduU2VydmVyUmVsYXRpb25JZCwgc2VydmVyaWQsIHJvbGVpZCwgbW9kZSk7CiAKIAlQ R19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0gQUNMQ0hFQ0tfT0spOwogfQpAQCAtNDA2NSw3 ICs0MDY5LDcgQEAgaGFzX3RhYmxlc3BhY2VfcHJpdmlsZWdlX25hbWVfbmFtZShQR19GVU5D VElPTl9BUkdTKQogCXRhYmxlc3BhY2VvaWQgPSBjb252ZXJ0X3RhYmxlc3BhY2VfbmFtZSh0 YWJsZXNwYWNlbmFtZSk7CiAJbW9kZSA9IGNvbnZlcnRfdGFibGVzcGFjZV9wcml2X3N0cmlu Zyhwcml2X3R5cGVfdGV4dCk7CiAKLQlhY2xyZXN1bHQgPSBwZ190YWJsZXNwYWNlX2FjbGNo ZWNrKHRhYmxlc3BhY2VvaWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0 X2FjbGNoZWNrKFRhYmxlU3BhY2VSZWxhdGlvbklkLCB0YWJsZXNwYWNlb2lkLCByb2xlaWQs IG1vZGUpOwogCiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsK IH0KQEAgLTQwOTAsNyArNDA5NCw3IEBAIGhhc190YWJsZXNwYWNlX3ByaXZpbGVnZV9uYW1l KFBHX0ZVTkNUSU9OX0FSR1MpCiAJdGFibGVzcGFjZW9pZCA9IGNvbnZlcnRfdGFibGVzcGFj ZV9uYW1lKHRhYmxlc3BhY2VuYW1lKTsKIAltb2RlID0gY29udmVydF90YWJsZXNwYWNlX3By aXZfc3RyaW5nKHByaXZfdHlwZV90ZXh0KTsKIAotCWFjbHJlc3VsdCA9IHBnX3RhYmxlc3Bh Y2VfYWNsY2hlY2sodGFibGVzcGFjZW9pZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xyZXN1bHQg PSBvYmplY3RfYWNsY2hlY2soVGFibGVTcGFjZVJlbGF0aW9uSWQsIHRhYmxlc3BhY2VvaWQs IHJvbGVpZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0gQUNMQ0hF Q0tfT0spOwogfQpAQCAtNDExNiw3ICs0MTIwLDcgQEAgaGFzX3RhYmxlc3BhY2VfcHJpdmls ZWdlX25hbWVfaWQoUEdfRlVOQ1RJT05fQVJHUykKIAlpZiAoIVNlYXJjaFN5c0NhY2hlRXhp c3RzMShUQUJMRVNQQUNFT0lELCBPYmplY3RJZEdldERhdHVtKHRhYmxlc3BhY2VvaWQpKSkK IAkJUEdfUkVUVVJOX05VTEwoKTsKIAotCWFjbHJlc3VsdCA9IHBnX3RhYmxlc3BhY2VfYWNs Y2hlY2sodGFibGVzcGFjZW9pZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xyZXN1bHQgPSBvYmpl Y3RfYWNsY2hlY2soVGFibGVTcGFjZVJlbGF0aW9uSWQsIHRhYmxlc3BhY2VvaWQsIHJvbGVp ZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0gQUNMQ0hFQ0tfT0sp OwogfQpAQCAtNDE0Miw3ICs0MTQ2LDcgQEAgaGFzX3RhYmxlc3BhY2VfcHJpdmlsZWdlX2lk KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoVEFCTEVT UEFDRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0YWJsZXNwYWNlb2lkKSkpCiAJCVBHX1JFVFVS Tl9OVUxMKCk7CiAKLQlhY2xyZXN1bHQgPSBwZ190YWJsZXNwYWNlX2FjbGNoZWNrKHRhYmxl c3BhY2VvaWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNr KFRhYmxlU3BhY2VSZWxhdGlvbklkLCB0YWJsZXNwYWNlb2lkLCByb2xlaWQsIG1vZGUpOwog CiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0KQEAgLTQx NjUsNyArNDE2OSw3IEBAIGhhc190YWJsZXNwYWNlX3ByaXZpbGVnZV9pZF9uYW1lKFBHX0ZV TkNUSU9OX0FSR1MpCiAJdGFibGVzcGFjZW9pZCA9IGNvbnZlcnRfdGFibGVzcGFjZV9uYW1l KHRhYmxlc3BhY2VuYW1lKTsKIAltb2RlID0gY29udmVydF90YWJsZXNwYWNlX3ByaXZfc3Ry aW5nKHByaXZfdHlwZV90ZXh0KTsKIAotCWFjbHJlc3VsdCA9IHBnX3RhYmxlc3BhY2VfYWNs Y2hlY2sodGFibGVzcGFjZW9pZCwgcm9sZWlkLCBtb2RlKTsKKwlhY2xyZXN1bHQgPSBvYmpl Y3RfYWNsY2hlY2soVGFibGVTcGFjZVJlbGF0aW9uSWQsIHRhYmxlc3BhY2VvaWQsIHJvbGVp ZCwgbW9kZSk7CiAKIAlQR19SRVRVUk5fQk9PTChhY2xyZXN1bHQgPT0gQUNMQ0hFQ0tfT0sp OwogfQpAQCAtNDE4OSw3ICs0MTkzLDcgQEAgaGFzX3RhYmxlc3BhY2VfcHJpdmlsZWdlX2lk X2lkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoVEFC TEVTUEFDRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0YWJsZXNwYWNlb2lkKSkpCiAJCVBHX1JF VFVSTl9OVUxMKCk7CiAKLQlhY2xyZXN1bHQgPSBwZ190YWJsZXNwYWNlX2FjbGNoZWNrKHRh Ymxlc3BhY2VvaWQsIHJvbGVpZCwgbW9kZSk7CisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNo ZWNrKFRhYmxlU3BhY2VSZWxhdGlvbklkLCB0YWJsZXNwYWNlb2lkLCByb2xlaWQsIG1vZGUp OwogCiAJUEdfUkVUVVJOX0JPT0woYWNscmVzdWx0ID09IEFDTENIRUNLX09LKTsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZm1nci5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvZm1nci9mbWdyLmMKaW5kZXggYTlkZDA2ODA5NWJmLi5iMzhiZDEwMDNlYTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZm1nci5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2ZtZ3IvZm1nci5jCkBAIC0yMDU0LDcgKzIwNTQsNyBAQCBDaGVja0Z1bmN0 aW9uVmFsaWRhdG9yQWNjZXNzKE9pZCB2YWxpZGF0b3JPaWQsIE9pZCBmdW5jdGlvbk9pZCkK IAkJCQkJCWxhbmdTdHJ1Y3QtPmxhbnZhbGlkYXRvcikpKTsKIAogCS8qIGZpcnN0IHZhbGlk YXRlIHRoYXQgd2UgaGF2ZSBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGxhbmd1YWdlICovCi0J YWNscmVzdWx0ID0gcGdfbGFuZ3VhZ2VfYWNsY2hlY2socHJvY1N0cnVjdC0+cHJvbGFuZywg R2V0VXNlcklkKCksCisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKExhbmd1YWdlUmVs YXRpb25JZCwgcHJvY1N0cnVjdC0+cHJvbGFuZywgR2V0VXNlcklkKCksCiAJCQkJCQkJCQkg QUNMX1VTQUdFKTsKIAlpZiAoYWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQogCQlhY2xjaGVj a19lcnJvcihhY2xyZXN1bHQsIE9CSkVDVF9MQU5HVUFHRSwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2FjbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKaW5kZXggYmY0 NjFmMjRmZGU3Li5kYWM5OTkzYTBmYmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMzUsMzkgKzIzNSwx OCBAQCBleHRlcm4gdm9pZCBFeGVjQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQoUGFyc2VT dGF0ZSAqcHN0YXRlLCBBbHRlckRlZmF1bHRQcml2aQogCiBleHRlcm4gdm9pZCBSZW1vdmVS b2xlRnJvbU9iamVjdEFDTChPaWQgcm9sZWlkLCBPaWQgY2xhc3NpZCwgT2lkIG9iamlkKTsK IAotZXh0ZXJuIEFjbE1vZGUgcGdfYXR0cmlidXRlX2FjbG1hc2soT2lkIHRhYmxlX29pZCwg QXR0ck51bWJlciBhdHRudW0sCi0JCQkJCQkJCQlPaWQgcm9sZWlkLCBBY2xNb2RlIG1hc2ss IEFjbE1hc2tIb3cgaG93KTsKLWV4dGVybiBBY2xNb2RlIHBnX2F0dHJpYnV0ZV9hY2xtYXNr X2V4dChPaWQgdGFibGVfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwKLQkJCQkJCQkJCQlPaWQg cm9sZWlkLCBBY2xNb2RlIG1hc2ssCi0JCQkJCQkJCQkJQWNsTWFza0hvdyBob3csIGJvb2wg KmlzX21pc3NpbmcpOwogZXh0ZXJuIEFjbE1vZGUgcGdfY2xhc3NfYWNsbWFzayhPaWQgdGFi bGVfb2lkLCBPaWQgcm9sZWlkLAogCQkJCQkJCQlBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cg aG93KTsKLWV4dGVybiBBY2xNb2RlIHBnX2NsYXNzX2FjbG1hc2tfZXh0KE9pZCB0YWJsZV9v aWQsIE9pZCByb2xlaWQsCi0JCQkJCQkJCQlBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93 LAotCQkJCQkJCQkJYm9vbCAqaXNfbWlzc2luZyk7Ci1leHRlcm4gQWNsTW9kZSBwZ19kYXRh YmFzZV9hY2xtYXNrKE9pZCBkYl9vaWQsIE9pZCByb2xlaWQsCi0JCQkJCQkJCSAgIEFjbE1v ZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwotZXh0ZXJuIEFjbE1vZGUgcGdfcGFyYW1ldGVy X2FjbG1hc2soY29uc3QgY2hhciAqbmFtZSwgT2lkIHJvbGVpZCwKLQkJCQkJCQkJCUFjbE1v ZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwotZXh0ZXJuIEFjbE1vZGUgcGdfcGFyYW1ldGVy X2FjbF9hY2xtYXNrKE9pZCBhY2xfb2lkLCBPaWQgcm9sZWlkLAotCQkJCQkJCQkJCUFjbE1v ZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwotZXh0ZXJuIEFjbE1vZGUgcGdfcHJvY19hY2xt YXNrKE9pZCBwcm9jX29pZCwgT2lkIHJvbGVpZCwKLQkJCQkJCQkgICBBY2xNb2RlIG1hc2ss IEFjbE1hc2tIb3cgaG93KTsKLWV4dGVybiBBY2xNb2RlIHBnX2xhbmd1YWdlX2FjbG1hc2so T2lkIGxhbmdfb2lkLCBPaWQgcm9sZWlkLAotCQkJCQkJCQkgICBBY2xNb2RlIG1hc2ssIEFj bE1hc2tIb3cgaG93KTsKLWV4dGVybiBBY2xNb2RlIHBnX2xhcmdlb2JqZWN0X2FjbG1hc2tf c25hcHNob3QoT2lkIGxvYmpfb2lkLCBPaWQgcm9sZWlkLAotCQkJCQkJCQkJCQkgICBBY2xN b2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93LCBTbmFwc2hvdCBzbmFwc2hvdCk7Ci1leHRlcm4g QWNsTW9kZSBwZ19uYW1lc3BhY2VfYWNsbWFzayhPaWQgbnNwX29pZCwgT2lkIHJvbGVpZCwK LQkJCQkJCQkJCUFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwotZXh0ZXJuIEFjbE1v ZGUgcGdfdGFibGVzcGFjZV9hY2xtYXNrKE9pZCBzcGNfb2lkLCBPaWQgcm9sZWlkLAotCQkJ CQkJCQkJIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cpOwotZXh0ZXJuIEFjbE1vZGUg cGdfZm9yZWlnbl9kYXRhX3dyYXBwZXJfYWNsbWFzayhPaWQgZmR3X29pZCwgT2lkIHJvbGVp ZCwKLQkJCQkJCQkJCQkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7Ci1leHRl cm4gQWNsTW9kZSBwZ19mb3JlaWduX3NlcnZlcl9hY2xtYXNrKE9pZCBzcnZfb2lkLCBPaWQg cm9sZWlkLAotCQkJCQkJCQkJCSBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93KTsKLWV4 dGVybiBBY2xNb2RlIHBnX3R5cGVfYWNsbWFzayhPaWQgdHlwZV9vaWQsIE9pZCByb2xlaWQs Ci0JCQkJCQkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CiAKKy8qIGdlbmVy aWMgZnVuY3Rpb24gKi8KK2V4dGVybiBBY2xSZXN1bHQgb2JqZWN0X2FjbGNoZWNrKE9pZCBj bGFzc2lkLCBPaWQgb2JqZWN0aWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSk7CisKKy8q IHdyYXBwZXIgZnVuY3Rpb25zIGZvciBjb21tb25seSB1c2VkIGNhc2VzICovCitleHRlcm4g QWNsUmVzdWx0IHBnX3Byb2NfYWNsY2hlY2soT2lkIHByb2Nfb2lkLCBPaWQgcm9sZWlkLCBB Y2xNb2RlIG1vZGUpOworZXh0ZXJuIEFjbFJlc3VsdCBwZ19kYXRhYmFzZV9hY2xjaGVjayhP aWQgZGJfb2lkLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1vZGUpOworZXh0ZXJuIEFjbFJlc3Vs dCBwZ190YWJsZXNwYWNlX2FjbGNoZWNrKE9pZCBzcGNfb2lkLCBPaWQgcm9sZWlkLCBBY2xN b2RlIG1vZGUpOworCisvKiBzcGVjaWFsIGNhc2VzICovCiBleHRlcm4gQWNsUmVzdWx0IHBn X2F0dHJpYnV0ZV9hY2xjaGVjayhPaWQgdGFibGVfb2lkLCBBdHRyTnVtYmVyIGF0dG51bSwK IAkJCQkJCQkJCSAgIE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSk7CiBleHRlcm4gQWNsUmVz dWx0IHBnX2F0dHJpYnV0ZV9hY2xjaGVja19leHQoT2lkIHRhYmxlX29pZCwgQXR0ck51bWJl ciBhdHRudW0sCkBAIC0yNzgsMTkgKzI1NywxMSBAQCBleHRlcm4gQWNsUmVzdWx0IHBnX2F0 dHJpYnV0ZV9hY2xjaGVja19hbGwoT2lkIHRhYmxlX29pZCwgT2lkIHJvbGVpZCwKIGV4dGVy biBBY2xSZXN1bHQgcGdfY2xhc3NfYWNsY2hlY2soT2lkIHRhYmxlX29pZCwgT2lkIHJvbGVp ZCwgQWNsTW9kZSBtb2RlKTsKIGV4dGVybiBBY2xSZXN1bHQgcGdfY2xhc3NfYWNsY2hlY2tf ZXh0KE9pZCB0YWJsZV9vaWQsIE9pZCByb2xlaWQsCiAJCQkJCQkJCQkgICBBY2xNb2RlIG1v ZGUsIGJvb2wgKmlzX21pc3NpbmcpOwotZXh0ZXJuIEFjbFJlc3VsdCBwZ19kYXRhYmFzZV9h Y2xjaGVjayhPaWQgZGJfb2lkLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1vZGUpOwogZXh0ZXJu IEFjbFJlc3VsdCBwZ19wYXJhbWV0ZXJfYWNsY2hlY2soY29uc3QgY2hhciAqbmFtZSwgT2lk IHJvbGVpZCwKIAkJCQkJCQkJCSAgIEFjbE1vZGUgbW9kZSk7Ci1leHRlcm4gQWNsUmVzdWx0 IHBnX3BhcmFtZXRlcl9hY2xfYWNsY2hlY2soT2lkIGFjbF9vaWQsIE9pZCByb2xlaWQsCi0J CQkJCQkJCQkJICAgQWNsTW9kZSBtb2RlKTsKLWV4dGVybiBBY2xSZXN1bHQgcGdfcHJvY19h Y2xjaGVjayhPaWQgcHJvY19vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSk7Ci1leHRl cm4gQWNsUmVzdWx0IHBnX2xhbmd1YWdlX2FjbGNoZWNrKE9pZCBsYW5nX29pZCwgT2lkIHJv bGVpZCwgQWNsTW9kZSBtb2RlKTsKIGV4dGVybiBBY2xSZXN1bHQgcGdfbGFyZ2VvYmplY3Rf YWNsY2hlY2tfc25hcHNob3QoT2lkIGxvYmpfb2lkLCBPaWQgcm9sZWlkLAogCQkJCQkJCQkJ CQkJICBBY2xNb2RlIG1vZGUsIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiBBY2xSZXN1 bHQgcGdfbmFtZXNwYWNlX2FjbGNoZWNrKE9pZCBuc3Bfb2lkLCBPaWQgcm9sZWlkLCBBY2xN b2RlIG1vZGUpOwotZXh0ZXJuIEFjbFJlc3VsdCBwZ190YWJsZXNwYWNlX2FjbGNoZWNrKE9p ZCBzcGNfb2lkLCBPaWQgcm9sZWlkLCBBY2xNb2RlIG1vZGUpOwotZXh0ZXJuIEFjbFJlc3Vs dCBwZ19mb3JlaWduX2RhdGFfd3JhcHBlcl9hY2xjaGVjayhPaWQgZmR3X29pZCwgT2lkIHJv bGVpZCwgQWNsTW9kZSBtb2RlKTsKLWV4dGVybiBBY2xSZXN1bHQgcGdfZm9yZWlnbl9zZXJ2 ZXJfYWNsY2hlY2soT2lkIHNydl9vaWQsIE9pZCByb2xlaWQsIEFjbE1vZGUgbW9kZSk7CiBl eHRlcm4gQWNsUmVzdWx0IHBnX3R5cGVfYWNsY2hlY2soT2lkIHR5cGVfb2lkLCBPaWQgcm9s ZWlkLCBBY2xNb2RlIG1vZGUpOwogCiBleHRlcm4gdm9pZCBhY2xjaGVja19lcnJvcihBY2xS ZXN1bHQgYWNsZXJyLCBPYmplY3RUeXBlIG9ianR5cGUsCi0tIAoyLjM3LjMKCg== --------------YAHrgDq4rV3jodJNVUAxqfPC--