Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dUYfB-00069c-5b for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Jul 2017 13:23:46 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dUYf9-0007Ql-Fn for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Jul 2017 13:23:43 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dUYd7-0004Lf-I6 for pgsql-hackers@postgresql.org; Mon, 10 Jul 2017 13:21:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dUYd1-0005wC-9R for pgsql-hackers@postgresql.org; Mon, 10 Jul 2017 13:21:36 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id E7EB521C032D; Mon, 10 Jul 2017 16:21:28 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1499692888; bh=Kj25wssT3W6a/wMbS+cN26r+VDp7xlztiu5/eGZHq1w=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=IwFO2fg5/nYXkJMv+NfMPFQxmK/reD0HgsoPl9KPVYyCFvk3RJudu+CchlYvXhr0v ddLdb2ZOmSZUZSOoTFdFEJ7RGhnfQej8eeJHj4Y4ks159gbaDSoHLqe/PCs3Lrm7+R Brvwnv/GGljBHDfQUF+N2GpjVtFP+ctPgQ50Sclc= Content-Type: multipart/mixed; boundary="=_f674006a274e840ace77840a3f7e182b" Date: Mon, 10 Jul 2017 16:21:28 +0300 From: Marina Polyakova To: Fabien COELHO , PostgreSQL Developers Cc: Kevin Grittner , Andres Freund , Alvaro Herrera , Thomas Munro , Robert Haas Subject: Re: WIP Patch: Pgbench Serialization and deadlock errors Organization: Postgres Professional In-Reply-To: References: <72a0d590d6ba06f242d75c2e641820ec@postgrespro.ru> <6b4a7fb36c9956595a89a08e5368a9c5@postgrespro.ru> <01df6ca86c78e2c80b4e4d021c99d53a@postgrespro.ru> Message-ID: X-Sender: m.polyakova@postgrespro.ru User-Agent: Roundcube Webmail/1.2.4 List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=_f674006a274e840ace77840a3f7e182b Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello everyone! There's the second version of my patch for pgbench. Now transactions with serialization and deadlock failures are rolled back and retried until they end successfully or their number of attempts reaches maximum. In details: - You can set the maximum number of attempts by the appropriate benchmarking option (--max-attempts-number). Its default value is 1 partly because retrying of shell commands can produce new errors. - Statistics of attempts and failures is printed in progress, in transaction / aggregation logs and in the end with other results (all and for each script). The transaction failure is reported here only if the last retry of this transaction fails. - Also failures and average numbers of transactions attempts are printed per-command with average latencies if you use the appropriate benchmarking option (--report-per-command, -r) (it replaces the option --report-latencies as I was advised here [1]). Average numbers of transactions attempts are printed only for commands which start transactions. As usual: TAP tests for new functionality and changed documentation with new examples. Patch is attached. Any suggestions are welcome! [1] https://www.postgresql.org/message-id/alpine.DEB.2.20.1707031321370.3419%40lancre -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_f674006a274e840ace77840a3f7e182b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v2-0001-Pgbench-Retry-transactions-with-serialization-or-.patch Content-Disposition: attachment; filename=v2-0001-Pgbench-Retry-transactions-with-serialization-or-.patch; size=81952 RnJvbSA1OGY1MWNkYzg5NmFmODAxYmNkMzVlNDk1NDA2NjU1Y2EwM2FhNmNl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFr b3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogTW9uLCAx MCBKdWwgMjAxNyAxMzozMzo0MSArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IFBnYmVuY2ggUmV0cnkgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlv biBvciBkZWFkbG9jawogZXJyb3JzCgpOb3cgdHJhbnNhY3Rpb25zIHdpdGgg c2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBjYW4gYmUgcm9s bGVkIGJhY2sgYW5kCnJldHJpZWQgYWdhaW4gYW5kIGFnYWluIHVudGlsIHRo ZXkgZW5kIHN1Y2Nlc3NmdWxseSBvciB0aGVpciBudW1iZXIgb2YgYXR0ZW1w dHMKcmVhY2hlcyBtYXhpbXVtLiBZb3UgY2FuIHNldCB0aGUgbWF4aW11bSBu dW1iZXIgb2YgYXR0ZW1wdHMgYnkgdGhlIGFwcHJvcHJpYXRlCmJlbmNobWFy a2luZyBvcHRpb24gKC0tbWF4LWF0dGVtcHRzLW51bWJlcikuIEl0cyBkZWZh dWx0IHZhbHVlIGlzIDEuIFN0YXRpc3RpY3MKb2YgYXR0ZW1wdHMgYW5kIGZh aWx1cmVzIGlzIHByaW50ZWQgaW4gcHJvZ3Jlc3MsIGluIHRyYW5zYWN0aW9u IC8gYWdncmVnYXRpb24KbG9ncyBhbmQgaW4gdGhlIGVuZCB3aXRoIG90aGVy IHJlc3VsdHMgKGFsbCBhbmQgZm9yIGVhY2ggc2NyaXB0KS4gVGhlCnRyYW5z YWN0aW9uIGZhaWx1cmUgaXMgcmVwb3J0ZWQgaGVyZSBvbmx5IGlmIHRoZSBs YXN0IHJldHJ5IG9mIHRoaXMgdHJhbnNhY3Rpb24KZmFpbHMuIEFsc28gZmFp bHVyZXMgYW5kIGF2ZXJhZ2UgbnVtYmVycyBvZiB0cmFuc2FjdGlvbnMgYXR0 ZW1wdHMgYXJlIHByaW50ZWQKcGVyLWNvbW1hbmQgd2l0aCBhdmVyYWdlIGxh dGVuY2llcyBpZiB5b3UgdXNlIHRoZSBhcHByb3ByaWF0ZSBiZW5jaG1hcmtp bmcKb3B0aW9uICgtLXJlcG9ydC1wZXItY29tbWFuZCwgLXIpLiBBdmVyYWdl IG51bWJlcnMgb2YgdHJhbnNhY3Rpb25zIGF0dGVtcHRzIGFyZQpwcmludGVk IG9ubHkgZm9yIGNvbW1hbmRzIHdoaWNoIHN0YXJ0IHRyYW5zYWN0aW9ucy4K LS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnYmVuY2guc2dtbCAgICAgICAgICAg ICAgICAgICAgICB8IDI3NyArKysrKystLQogc3JjL2Jpbi9wZ2JlbmNoL3Bn YmVuY2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3NTEgKysrKysr KysrKysrKysrKysrLS0tCiBzcmMvYmluL3BnYmVuY2gvdC8wMDJfc2VyaWFs aXphdGlvbl9lcnJvcnMucGwgICAgICB8IDEyMSArKysrCiBzcmMvYmluL3Bn YmVuY2gvdC8wMDNfZGVhZGxvY2tfZXJyb3JzLnBsICAgICAgICAgICB8IDEz MCArKysrCiBzcmMvYmluL3BnYmVuY2gvdC8wMDRfcmV0cnlfZmFpbGVkX3Ry YW5zYWN0aW9ucy5wbCB8IDI4MCArKysrKysrKwogNSBmaWxlcyBjaGFuZ2Vk LCAxNDIxIGluc2VydGlvbnMoKyksIDEzOCBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnYmVuY2gvdC8wMDJfc2VyaWFsaXph dGlvbl9lcnJvcnMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3Bn YmVuY2gvdC8wMDNfZGVhZGxvY2tfZXJyb3JzLnBsCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ2JlbmNoL3QvMDA0X3JldHJ5X2ZhaWxlZF90cmFu c2FjdGlvbnMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn YmVuY2guc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCmlu ZGV4IDY0YjA0M2IuLmRjMWRhYTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcGdiZW5jaC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdi ZW5jaC5zZ21sCkBAIC00OSwyMiArNDksMzQgQEAKIAogPHNjcmVlbj4KIHRy YW5zYWN0aW9uIHR5cGU6ICZsdDtidWlsdGluOiBUUEMtQiAoc29ydCBvZikm Z3Q7Cit0cmFuc2FjdGlvbiBtYXhpbXVtIGF0dGVtcHRzIG51bWJlcjogMQog c2NhbGluZyBmYWN0b3I6IDEwCiBxdWVyeSBtb2RlOiBzaW1wbGUKIG51bWJl ciBvZiBjbGllbnRzOiAxMAogbnVtYmVyIG9mIHRocmVhZHM6IDEKIG51bWJl ciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAogbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAw CitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBm YWlsdXJlczogMCAoMC4wMDAgJSkKK251bWJlciBvZiB0cmFuc2FjdGlvbnMg d2l0aCBkZWFkbG9jayBmYWlsdXJlczogMCAoMC4wMDAgJSkKK2F0dGVtcHRz IG51bWJlciBhdmVyYWdlID0gMS4wMAorYXR0ZW1wdHMgbnVtYmVyIHN0ZGRl diA9IDAuMDAKIHRwcyA9IDg1LjE4NDg3MSAoaW5jbHVkaW5nIGNvbm5lY3Rp b25zIGVzdGFibGlzaGluZykKIHRwcyA9IDg1LjI5NjM0NiAoZXhjbHVkaW5n IGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZykKIDwvc2NyZWVuPgogCi0gIFRo ZSBmaXJzdCBzaXggbGluZXMgcmVwb3J0IHNvbWUgb2YgdGhlIG1vc3QgaW1w b3J0YW50IHBhcmFtZXRlcgorICBUaGUgZmlyc3Qgc2V2ZW4gbGluZXMgcmVw b3J0IHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHBhcmFtZXRlcgogICBz ZXR0aW5ncy4gIFRoZSBuZXh0IGxpbmUgcmVwb3J0cyB0aGUgbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBjb21wbGV0ZWQKICAgYW5kIGludGVuZGVkICh0aGUg bGF0dGVyIGJlaW5nIGp1c3QgdGhlIHByb2R1Y3Qgb2YgbnVtYmVyIG9mIGNs aWVudHMKICAgYW5kIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVu dCk7IHRoZXNlIHdpbGwgYmUgZXF1YWwgdW5sZXNzIHRoZSBydW4KICAgZmFp bGVkIGJlZm9yZSBjb21wbGV0aW9uLiAgKEluIDxvcHRpb24+LVQ8Lz4gbW9k ZSwgb25seSB0aGUgYWN0dWFsCiAgIG51bWJlciBvZiB0cmFuc2FjdGlvbnMg aXMgcHJpbnRlZC4pCisgIFRoZSBuZXh0IGZvdXIgbGluZXMgcmVwb3J0IHRo ZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBh bmQKKyAgZGVhZGxvY2sgZmFpbHVyZXMsIGFuZCBhbHNvIHRoZSBzdGF0aXN0 aWNzIG9mIHRyYW5zYWN0aW9ucyBhdHRlbXB0cy4gIFdpdGgKKyAgc3VjaCBl cnJvcnMsIHRyYW5zYWN0aW9ucyBhcmUgcm9sbGVkIGJhY2sgYW5kIGFyZSBy ZXBlYXRlZCBhZ2FpbiBhbmQgYWdhaW4KKyAgdW50aWwgdGhleSBlbmQgc3Vj ZXNzdWZ1bGx5IG9yIHRoZWlyIG51bWJlciBvZiBhdHRlbXB0cyByZWFjaGVz IG1heGltdW0gKHRvCisgIGNoYW5nZSB0aGlzIG1heGltdW0gc2VlIHRoZSBh cHByb3ByaWF0ZSBiZW5jaG1hcmtpbmcgb3B0aW9uCisgIDxvcHRpb24+LS1t YXgtYXR0ZW1wdHMtbnVtYmVyPC8+KS4gIFRoZSB0cmFuc2FjdGlvbiBmYWls dXJlIGlzIHJlcG9ydGVkIGhlcmUKKyAgb25seSBpZiB0aGUgbGFzdCByZXRy eSBvZiB0aGlzIHRyYW5zYWN0aW9uIGZhaWxzLgogICBUaGUgbGFzdCB0d28g bGluZXMgcmVwb3J0IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBz ZWNvbmQsCiAgIGZpZ3VyZWQgd2l0aCBhbmQgd2l0aG91dCBjb3VudGluZyB0 aGUgdGltZSB0byBzdGFydCBkYXRhYmFzZSBzZXNzaW9ucy4KICA8L3BhcmE+ CkBAIC00MzQsMjQgKzQ0NiwyOCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxl PmRibmFtZTwvPgogICAgICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgog ICAgICAgICBTaG93IHByb2dyZXNzIHJlcG9ydCBldmVyeSA8cmVwbGFjZWFi bGU+c2VjPC8+IHNlY29uZHMuICBUaGUgcmVwb3J0Ci0gICAgICAgIGluY2x1 ZGVzIHRoZSB0aW1lIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1biwg dGhlIHRwcyBzaW5jZSB0aGUKLSAgICAgICAgbGFzdCByZXBvcnQsIGFuZCB0 aGUgdHJhbnNhY3Rpb24gbGF0ZW5jeSBhdmVyYWdlIGFuZCBzdGFuZGFyZAot ICAgICAgICBkZXZpYXRpb24gc2luY2UgdGhlIGxhc3QgcmVwb3J0LiAgVW5k ZXIgdGhyb3R0bGluZyAoPG9wdGlvbj4tUjwvPiksCi0gICAgICAgIHRoZSBs YXRlbmN5IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0byB0aGUgdHJhbnNh Y3Rpb24gc2NoZWR1bGVkCi0gICAgICAgIHN0YXJ0IHRpbWUsIG5vdCB0aGUg YWN0dWFsIHRyYW5zYWN0aW9uIGJlZ2lubmluZyB0aW1lLCB0aHVzIGl0IGFs c28KLSAgICAgICAgaW5jbHVkZXMgdGhlIGF2ZXJhZ2Ugc2NoZWR1bGUgbGFn IHRpbWUuCisgICAgICAgIGluY2x1ZGVzIHRoZSB0aW1lIHNpbmNlIHRoZSBi ZWdpbm5pbmcgb2YgdGhlIHJ1biBhbmQgdGhlIGZvbGxvd2luZworICAgICAg ICBzdGF0aXN0aWNzIHNpbmNlIHRoZSBsYXN0IHJlcG9ydDogdGhlIHRwcywg dGhlIHRyYW5zYWN0aW9uIGxhdGVuY3kKKyAgICAgICAgYXZlcmFnZSBhbmQg c3RhbmRhcmQgZGV2aWF0aW9uLCB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyB3aXRoCisgICAgICAgIHNlcmlhbGl6YXRpb24gYW5kIGRlYWRsb2NrIGZh aWx1cmVzLCBhbmQgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mCisgICAgICAgIHRy YW5zYWN0aW9ucyBhdHRlbXB0cyBhbmQgaXRzIHN0YW5kYXJkIGRldmlhdGlv bi4gVW5kZXIgdGhyb3R0bGluZworICAgICAgICAoPG9wdGlvbj4tUjwvPiks IHRoZSBsYXRlbmN5IGlzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0byB0aGUg dHJhbnNhY3Rpb24KKyAgICAgICAgc2NoZWR1bGVkIHN0YXJ0IHRpbWUsIG5v dCB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJlZ2lubmluZyB0aW1lLCB0aHVz IGl0CisgICAgICAgIGFsc28gaW5jbHVkZXMgdGhlIGF2ZXJhZ2Ugc2NoZWR1 bGUgbGFnIHRpbWUuCiAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRy eT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48L3Rlcm0+Ci0g ICAgICA8dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2llczwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBvcnQtcGVyLWNv bW1hbmQ8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAg ICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZlcmFnZSBwZXItc3Rh dGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20gdGhlCi0gICAg ICAgIHBlcnNwZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVhY2ggY29tbWFu ZCBhZnRlciB0aGUgYmVuY2htYXJrCi0gICAgICAgIGZpbmlzaGVzLiAgU2Vl IGJlbG93IGZvciBkZXRhaWxzLgorICAgICAgICBSZXBvcnQgdGhlIGZvbGxv d2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0ZXIgdGhlIGJl bmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJhZ2UgcGVyLXN0 YXRlbWVudCBsYXRlbmN5IChleGVjdXRpb24gdGltZSBmcm9tIHRoZQorICAg ICAgICBwZXJzcGVjdGl2ZSBvZiB0aGUgY2xpZW50KSwgdGhlIG51bWJlciBv ZiBzZXJpYWxpemF0aW9uIGFuZCBkZWFkbG9jaworICAgICAgICBmYWlsdXJl cywgYW5kIHRoZSBhdmVyYWdlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgYXR0 ZW1wdHMgKG9ubHkgZm9yCisgICAgICAgIGNvbW1hbmRzIHRoYXQgc3RhcnQg dHJhbnNhY3Rpb25zKS4gIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KICAgICAg ICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3Rl bnRyeT4KQEAgLTQ5Niw2ICs1MTIsMTUgQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5kYm5hbWU8Lz4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFy YT4KKyAgICAgICAgVHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBv ciBkZWFkbG9jayBmYWlsdXJlcyAob3Igd2l0aCBib3RoCisgICAgICAgIG9m IHRoZW0gaWYgdXNlZCBzY3JpcHQgY29udGFpbnMgc2V2ZXJhbCB0cmFuc2Fj dGlvbnM7IHNlZQorICAgICAgICA8eHJlZiBsaW5rZW5kPSJ0cmFuc2FjdGlv bnMtYW5kLXNjcmlwdHMiCisgICAgICAgIGVuZHRlcm09InRyYW5zYWN0aW9u cy1hbmQtc2NyaXB0cy10aXRsZSI+IGZvciBtb3JlIGluZm9ybWF0aW9uKSBh cmUKKyAgICAgICAgbWFya2VkIHNlcGFyYXRlbHkgYW5kIHRoZWlyIHRpbWUg aXMgbm90IHJlcG9ydGVkIGFzIGZvciBza2lwcGVkCisgICAgICAgIHRyYW5z YWN0aW9ucy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KICAg ICAgICAgQSBoaWdoIHNjaGVkdWxlIGxhZyB0aW1lIGlzIGFuIGluZGljYXRp b24gdGhhdCB0aGUgc3lzdGVtIGNhbm5vdAogICAgICAgICBwcm9jZXNzIHRy YW5zYWN0aW9ucyBhdCB0aGUgc3BlY2lmaWVkIHJhdGUsIHdpdGggdGhlIGNo b3NlbiBudW1iZXIgb2YKICAgICAgICAgY2xpZW50cyBhbmQgdGhyZWFkcy4g V2hlbiB0aGUgYXZlcmFnZSB0cmFuc2FjdGlvbiBleGVjdXRpb24gdGltZSBp cwpAQCAtNTkwLDYgKzYxNSwyMyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxl PmRibmFtZTwvPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLW1heC1hdHRlbXB0 cy1udW1iZXI9PHJlcGxhY2VhYmxlPmF0dGVtcHRzX251bWJlcjwvPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgU2V0IHRoZSBtYXhpbXVtIGF0dGVtcHRzIG51bWJlciBmb3Ig dHJhbnNhY3Rpb25zLiBEZWZhdWx0IGlzIDEuCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxub3RlPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICBCZSBj YXJlZnVsIGlmIHlvdSB3YW50IHRvIHJlcGVhdCB0cmFuc2FjdGlvbnMgd2l0 aCBzaGVsbCBjb21tYW5kcworICAgICAgICAgaW5zaWRlLiAgVW5saWtlIHNx bCBjb21tYW5kcyB0aGUgcmVzdWx0IG9mIHNoZWxsIGNvbW1hbmQgaXMgbm90 IHJvbGxlZAorICAgICAgICAgYmFjayBleGNlcHQgZm9yIGl0cyB2YXJpYWJs ZSB2YWx1ZS4gIElmIGEgc2hlbGwgY29tbWFuZCBmYWlscyBpdHMKKyAgICAg ICAgIGNsaWVudCBpcyBhYm9ydGVkIHdpdGhvdXQgcmVzdGFydGluZy4KKyAg ICAgICAgIDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVu dHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLXByb2dyZXNzLXRpbWVzdGFt cDwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KICAgICAgICA8 cGFyYT4KQEAgLTY5Myw4ICs3MzUsOCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4g PHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2Vh YmxlPmRibmFtZTwvPgogIDxyZWZzZWN0MT4KICAgPHRpdGxlPk5vdGVzPC90 aXRsZT4KIAotIDxyZWZzZWN0Mj4KLSAgPHRpdGxlPldoYXQgaXMgdGhlIDxx dW90ZT5UcmFuc2FjdGlvbjwvPiBBY3R1YWxseSBQZXJmb3JtZWQgaW4gPGFw cGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPj88L3RpdGxlPgorIDxy ZWZzZWN0MiBpZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzIj4KKyAgPHRp dGxlIGlkPSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMtdGl0bGUiPldoYXQg aXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBBY3R1YWxseSBQZXJmb3Jt ZWQgaW4gPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2FwcGxpY2F0aW9uPj88L3Rp dGxlPgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnYmVuY2g8Lz4g ZXhlY3V0ZXMgdGVzdCBzY3JpcHRzIGNob3NlbiByYW5kb21seQpAQCAtMTE0 OCw3ICsxMTkwLDcgQEAgRU5EOwogICAgVGhlIGZvcm1hdCBvZiB0aGUgbG9n IGlzOgogCiA8c3lub3BzaXM+Ci08cmVwbGFjZWFibGU+Y2xpZW50X2lkPC8+ IDxyZXBsYWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvPiA8cmVwbGFjZWFibGU+ dGltZTwvPiA8cmVwbGFjZWFibGU+c2NyaXB0X25vPC8+IDxyZXBsYWNlYWJs ZT50aW1lX2Vwb2NoPC8+IDxyZXBsYWNlYWJsZT50aW1lX3VzPC8+IDxvcHRp b25hbD4gPHJlcGxhY2VhYmxlPnNjaGVkdWxlX2xhZzwvcmVwbGFjZWFibGU+ IDwvb3B0aW9uYWw+Cis8cmVwbGFjZWFibGU+Y2xpZW50X2lkPC8+IDxyZXBs YWNlYWJsZT50cmFuc2FjdGlvbl9ubzwvPiA8cmVwbGFjZWFibGU+dGltZTwv PiA8cmVwbGFjZWFibGU+c2NyaXB0X25vPC8+IDxyZXBsYWNlYWJsZT50aW1l X2Vwb2NoPC8+IDxyZXBsYWNlYWJsZT50aW1lX3VzPC8+IDxyZXBsYWNlYWJs ZT5hdmVyYWdlX2F0dGVtcHRzX251bWJlcjwvPiA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5zY2hlZHVsZV9sYWc8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFs PgogPC9zeW5vcHNpcz4KIAogICAgd2hlcmUKQEAgLTExNTgsMzkgKzEyMDAs NTMgQEAgRU5EOwogICAgPHJlcGxhY2VhYmxlPnRpbWU8Lz4gaXMgdGhlIHRv dGFsIGVsYXBzZWQgdHJhbnNhY3Rpb24gdGltZSBpbiBtaWNyb3NlY29uZHMs CiAgICA8cmVwbGFjZWFibGU+c2NyaXB0X25vPC8+IGlkZW50aWZpZXMgd2hp Y2ggc2NyaXB0IGZpbGUgd2FzIHVzZWQgKHVzZWZ1bCB3aGVuCiAgICBtdWx0 aXBsZSBzY3JpcHRzIHdlcmUgc3BlY2lmaWVkIHdpdGggPG9wdGlvbj4tZjwv PiBvciA8b3B0aW9uPi1iPC8+KSwKLSAgIGFuZCA8cmVwbGFjZWFibGU+dGlt ZV9lcG9jaDwvPi88cmVwbGFjZWFibGU+dGltZV91czwvPiBhcmUgYQorICAg PHJlcGxhY2VhYmxlPnRpbWVfZXBvY2g8Lz4vPHJlcGxhY2VhYmxlPnRpbWVf dXM8Lz4gYXJlIGEKICAgIFVuaXgtZXBvY2ggdGltZSBzdGFtcCBhbmQgYW4g b2Zmc2V0CiAgICBpbiBtaWNyb3NlY29uZHMgKHN1aXRhYmxlIGZvciBjcmVh dGluZyBhbiBJU08gODYwMQogICAgdGltZSBzdGFtcCB3aXRoIGZyYWN0aW9u YWwgc2Vjb25kcykgc2hvd2luZyB3aGVuCi0gICB0aGUgdHJhbnNhY3Rpb24g Y29tcGxldGVkLgorICAgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCwKKyAg IGFuZCA8cmVwbGFjZWFibGU+YXZlcmFnZV9hdHRlbXB0c19udW1iZXI8Lz4g aXMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mCisgICB0cmFuc2FjdGlvbnMgYXR0 ZW1wdHMgZHVyaW5nIHRoZSBjdXJyZW50IHNjcmlwdCBleGVjdXRpb24uCiAg ICBUaGUgPHJlcGxhY2VhYmxlPnNjaGVkdWxlX2xhZzwvPiBmaWVsZCBpcyB0 aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQogICAgdHJhbnNhY3Rpb24ncyBz Y2hlZHVsZWQgc3RhcnQgdGltZSwgYW5kIHRoZSB0aW1lIGl0IGFjdHVhbGx5 IHN0YXJ0ZWQsIGluCiAgICBtaWNyb3NlY29uZHMuIEl0IGlzIG9ubHkgcHJl c2VudCB3aGVuIHRoZSA8b3B0aW9uPi0tcmF0ZTwvPiBvcHRpb24gaXMgdXNl ZC4KICAgIFdoZW4gYm90aCA8b3B0aW9uPi0tcmF0ZTwvPiBhbmQgPG9wdGlv bj4tLWxhdGVuY3ktbGltaXQ8Lz4gYXJlIHVzZWQsCiAgICB0aGUgPHJlcGxh Y2VhYmxlPnRpbWU8Lz4gZm9yIGEgc2tpcHBlZCB0cmFuc2FjdGlvbiB3aWxs IGJlIHJlcG9ydGVkIGFzCiAgICA8bGl0ZXJhbD5za2lwcGVkPC8+LgorICAg IElmIGEgdHJhbnNhY3Rpb24gaGFzIHNlcmlhbGl6YXRpb24gYW5kL29yIGRl YWRsb2NrIGZhaWx1cmVzLCBpdHMKKyAgIDxyZXBsYWNlYWJsZT50aW1lPC8+ IHdpbGwgYmUgcmVwb3J0ZWQgYXMgPGxpdGVyYWw+c2VyaWFsaXphdGlvbiBm YWlsdXJlPC8+LAorICAgPGxpdGVyYWw+ZGVhZGxvY2sgZmFpbHVyZTwvPiwg b3IKKyAgIDxsaXRlcmFsPnNlcmlhbGl6YXRpb24gYW5kIGRlYWRsb2NrIGZh aWx1cmVzPC8+LCByZXNwZWN0aXZlbHkuCiAgIDwvcGFyYT4KKyAgPG5vdGU+ CisgICA8cGFyYT4KKyAgICAgVHJhbnNhY3Rpb25zIGNhbiBoYXZlIGJvdGgg c2VyaWFsaXphdGlvbiBhbmQgZGVhZGxvY2sgZmFpbHVyZXMgaWYgdGhlCisg ICAgIHVzZWQgc2NyaXB0IGNvbnRhaW5lZCBzZXZlcmFsIHRyYW5zYWN0aW9u cy4gIFNlZQorICAgICA8eHJlZiBsaW5rZW5kPSJ0cmFuc2FjdGlvbnMtYW5k LXNjcmlwdHMiCisgICAgIGVuZHRlcm09InRyYW5zYWN0aW9ucy1hbmQtc2Ny aXB0cy10aXRsZSI+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFy YT4KKyAgPC9ub3RlPgogCiAgIDxwYXJhPgogICAgSGVyZSBpcyBhIHNuaXBw ZXQgb2YgYSBsb2cgZmlsZSBnZW5lcmF0ZWQgaW4gYSBzaW5nbGUtY2xpZW50 IHJ1bjoKIDxzY3JlZW4+Ci0wIDE5OSAyMjQxIDAgMTE3NTg1MDU2OCA5OTU1 OTgKLTAgMjAwIDI0NjUgMCAxMTc1ODUwNTY4IDk5ODA3OQotMCAyMDEgMjUx MyAwIDExNzU4NTA1NjkgNjA4Ci0wIDIwMiAyMDM4IDAgMTE3NTg1MDU2OSAy NjYzCiswIDE5OSAyMjQxIDAgMTE3NTg1MDU2OCA5OTU1OTggMQorMCAyMDAg MjQ2NSAwIDExNzU4NTA1NjggOTk4MDc5IDEKKzAgMjAxIDI1MTMgMCAxMTc1 ODUwNTY5IDYwOCAxCiswIDIwMiAyMDM4IDAgMTE3NTg1MDU2OSAyNjYzIDEK IDwvc2NyZWVuPgogCiAgICBBbm90aGVyIGV4YW1wbGUgd2l0aCA8bGl0ZXJh bD4tLXJhdGU9MTAwPC8+CiAgICBhbmQgPGxpdGVyYWw+LS1sYXRlbmN5LWxp bWl0PTU8Lz4gKG5vdGUgdGhlIGFkZGl0aW9uYWwKICAgIDxyZXBsYWNlYWJs ZT5zY2hlZHVsZV9sYWc8Lz4gY29sdW1uKToKIDxzY3JlZW4+Ci0wIDgxIDQ2 MjEgMCAxNDEyODgxMDM3IDkxMjY5OCAzMDA1Ci0wIDgyIDYxNzMgMCAxNDEy ODgxMDM3IDkxNDU3OCA0MzA0Ci0wIDgzIHNraXBwZWQgMCAxNDEyODgxMDM3 IDkxNDU3OCA1MjE3Ci0wIDgzIHNraXBwZWQgMCAxNDEyODgxMDM3IDkxNDU3 OCA1MDk5Ci0wIDgzIDQ3MjIgMCAxNDEyODgxMDM3IDkxNjIwMyAzMTA4Ci0w IDg0IDQxNDIgMCAxNDEyODgxMDM3IDkxODAyMyAyMzMzCi0wIDg1IDI0NjUg MCAxNDEyODgxMDM3IDkxOTc1OSA3NDAKKzAgODEgNDYyMSAwIDE0MTI4ODEw MzcgOTEyNjk4IDEgMzAwNQorMCA4MiA2MTczIDAgMTQxMjg4MTAzNyA5MTQ1 NzggMSA0MzA0CiswIDgzIHNraXBwZWQgMCAxNDEyODgxMDM3IDkxNDU3OCAx IDUyMTcKKzAgODMgc2tpcHBlZCAwIDE0MTI4ODEwMzcgOTE0NTc4IDEgNTA5 OQorMCA4MyA0NzIyIDAgMTQxMjg4MTAzNyA5MTYyMDMgMSAzMTA4CiswIDg0 IDQxNDIgMCAxNDEyODgxMDM3IDkxODAyMyAxIDIzMzMKKzAgODUgMjQ2NSAw IDE0MTI4ODEwMzcgOTE5NzU5IDEgNzQwCiA8L3NjcmVlbj4KICAgIEluIHRo aXMgZXhhbXBsZSwgdHJhbnNhY3Rpb24gODIgd2FzIGxhdGUsIGJlY2F1c2Ug aXRzIGxhdGVuY3kgKDYuMTczIG1zKSB3YXMKICAgIG92ZXIgdGhlIDUgbXMg bGltaXQuIFRoZSBuZXh0IHR3byB0cmFuc2FjdGlvbnMgd2VyZSBza2lwcGVk LCBiZWNhdXNlIHRoZXkKQEAgLTExOTgsNiArMTI1NCwyMiBAQCBFTkQ7CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KKyAgIEV4YW1wbGUgd2l0aCBzZXJpYWxp emF0aW9uIGZhaWx1cmVzICh0aGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1w dHMgaXMgMTApOgorPHNjcmVlbj4KKzMgMCA0NzQyMyAwIDE0OTk0MTQ0OTgg MzQ1MDEgNAorMyAxIDgzMzMgMCAxNDk5NDE0NDk4IDQyODQ4IDEKKzMgMiA4 MzU4IDAgMTQ5OTQxNDQ5OCA1MTIxOSAxCis0IDAgNzIzNDUgMCAxNDk5NDE0 NDk4IDU5NDMzIDcKKzEgMyA0MTcxOCAwIDE0OTk0MTQ0OTggNjc4NzkgNQor MSA0IDg0MTYgMCAxNDk5NDE0NDk4IDc2MzExIDEKKzMgMyAzMzIzNSAwIDE0 OTk0MTQ0OTggODQ0NjkgNAorMCAwIHNlcmlhbGl6YXRpb25fZmFpbHVyZSAw IDE0OTk0MTQ0OTggODQ5MDUgMTAKKzIgMCBzZXJpYWxpemF0aW9uX2ZhaWx1 cmUgMCAxNDk5NDE0NDk4IDg2MjQ4IDEwCiszIDQgODMwNyAwIDE0OTk0MTQ0 OTggOTI3ODggMQorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4K ICAgIFdoZW4gcnVubmluZyBhIGxvbmcgdGVzdCBvbiBoYXJkd2FyZSB0aGF0 IGNhbiBoYW5kbGUgYSBsb3Qgb2YgdHJhbnNhY3Rpb25zLAogICAgdGhlIGxv ZyBmaWxlcyBjYW4gYmVjb21lIHZlcnkgbGFyZ2UuICBUaGUgPG9wdGlvbj4t LXNhbXBsaW5nLXJhdGU8Lz4gb3B0aW9uCiAgICBjYW4gYmUgdXNlZCB0byBs b2cgb25seSBhIHJhbmRvbSBzYW1wbGUgb2YgdHJhbnNhY3Rpb25zLgpAQCAt MTIxMiw3ICsxMjg0LDcgQEAgRU5EOwogICAgZm9ybWF0IGlzIHVzZWQgZm9y IHRoZSBsb2cgZmlsZXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5p bnRlcnZhbF9zdGFydDwvPiA8cmVwbGFjZWFibGU+bnVtX3RyYW5zYWN0aW9u czwvPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3k8Lz4gPHJlcGxhY2VhYmxl PnN1bV9sYXRlbmN5XzI8Lz4gPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC8+ IDxyZXBsYWNlYWJsZT5tYXhfbGF0ZW5jeTwvPiA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5zdW1fbGFnPC8+IDxyZXBsYWNlYWJsZT5zdW1fbGFnXzI8Lz4g PHJlcGxhY2VhYmxlPm1pbl9sYWc8Lz4gPHJlcGxhY2VhYmxlPm1heF9sYWc8 Lz4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2tpcHBlZDwvPiA8L29wdGlv bmFsPiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0 PC8+IDxyZXBsYWNlYWJsZT5udW1fdHJhbnNhY3Rpb25zPC8+IDxyZXBsYWNl YWJsZT5zdW1fbGF0ZW5jeTwvPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lf MjwvPiA8cmVwbGFjZWFibGU+bWluX2xhdGVuY3k8Lz4gPHJlcGxhY2VhYmxl Pm1heF9sYXRlbmN5PC8+IDxyZXBsYWNlYWJsZT5udW1fc2VyaWFsaXphdGlv bl9mYWlsdXJlc190cmFuc2FjdGlvbnM8Lz4gPHJlcGxhY2VhYmxlPm51bV9k ZWFkbG9ja19mYWlsdXJlc190cmFuc2FjdGlvbnM8Lz4gPHJlcGxhY2VhYmxl PmF0dGVtcHRzX2NvdW50PC8+IDxyZXBsYWNlYWJsZT5hdHRlbXB0c19zdW08 Lz4gPHJlcGxhY2VhYmxlPmF0dGVtcHRzX3N1bTI8Lz4gPHJlcGxhY2VhYmxl PmF0dGVtcHRzX21pbjwvPiA8cmVwbGFjZWFibGU+YXR0ZW1wdHNfbWF4PC8+ IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPnN1bV9sYWc8Lz4gPHJlcGxhY2Vh YmxlPnN1bV9sYWdfMjwvPiA8cmVwbGFjZWFibGU+bWluX2xhZzwvPiA8cmVw bGFjZWFibGU+bWF4X2xhZzwvPiA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5z a2lwcGVkPC8+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CiA8L3N5bm9wc2lz PgogCiAgICB3aGVyZQpAQCAtMTIyNiw3ICsxMjk4LDE0IEBAIEVORDsKICAg IHRyYW5zYWN0aW9uIGxhdGVuY2llcyB3aXRoaW4gdGhlIGludGVydmFsLAog ICAgPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC8+IGlzIHRoZSBtaW5pbXVt IGxhdGVuY3kgd2l0aGluIHRoZSBpbnRlcnZhbCwKICAgIGFuZAotICAgPHJl cGxhY2VhYmxlPm1heF9sYXRlbmN5PC8+IGlzIHRoZSBtYXhpbXVtIGxhdGVu Y3kgd2l0aGluIHRoZSBpbnRlcnZhbC4KKyAgIDxyZXBsYWNlYWJsZT5tYXhf bGF0ZW5jeTwvPiBpcyB0aGUgbWF4aW11bSBsYXRlbmN5IHdpdGhpbiB0aGUg aW50ZXJ2YWwsCisgICA8cmVwbGFjZWFibGU+bnVtX3NlcmlhbGl6YXRpb25f ZmFpbHVyZXNfdHJhbnNhY3Rpb25zPC8+IGFuZAorICAgPHJlcGxhY2VhYmxl Pm51bV9kZWFkbG9ja19mYWlsdXJlc190cmFuc2FjdGlvbnM8Lz4gLSB0aGUg bnVtYmVycyBvZgorICAgdHJhbnNhY3Rpb25zIHdpdGggdGhlIGNvcnJlc3Bv bmRpbmcgZmFpbHVyZXMgd2l0aGluIHRoZSBpbnRlcnZhbCwKKyAgIDxyZXBs YWNlYWJsZT5hdHRlbXB0c19jb3VudDwvPiwgPHJlcGxhY2VhYmxlPmF0dGVt cHRzX3N1bTwvPiwKKyAgIDxyZXBsYWNlYWJsZT5hdHRlbXB0c19zdW0yPC8+ LCA8cmVwbGFjZWFibGU+YXR0ZW1wdHNfbWluPC8+IGFuZAorICAgPHJlcGxh Y2VhYmxlPmF0dGVtcHRzX21heDwvPiAtIHRoZSBzdGF0aXN0aWNzIG9mIHRy YW5zYWN0aW9ucyBhdHRlbXB0cyB3aXRoaW4KKyAgIHRoZSBpbnRlcnZhbC4K ICAgIFRoZSBuZXh0IGZpZWxkcywKICAgIDxyZXBsYWNlYWJsZT5zdW1fbGFn PC8+LCA8cmVwbGFjZWFibGU+c3VtX2xhZ18yPC8+LCA8cmVwbGFjZWFibGU+ bWluX2xhZzwvPiwKICAgIGFuZCA8cmVwbGFjZWFibGU+bWF4X2xhZzwvPiwg YXJlIG9ubHkgcHJlc2VudCBpZiB0aGUgPG9wdGlvbj4tLXJhdGU8Lz4KQEAg LTEyNDEsMTQgKzEzMjAsMjMgQEAgRU5EOwogICAgRWFjaCB0cmFuc2FjdGlv biBpcyBjb3VudGVkIGluIHRoZSBpbnRlcnZhbCB3aGVuIGl0IHdhcyBjb21t aXR0ZWQuCiAgIDwvcGFyYT4KIAorICA8bm90ZT4KKyAgIDxwYXJhPgorICAg IFRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGF0dGVtcHRzIHdpdGhpbiB0 aGUgaW50ZXJ2YWwgY2FuIGJlIGdyZWF0ZXIgdGhhbgorICAgIHRoZSBudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGhpbiB0aGlzIGludGVydmFsIG11bHRp cGxpZWQgYnkgdGhlIG1heGltdW0KKyAgICBhdHRlbXB0cyBudW1iZXIuICBT ZWUgPHhyZWYgbGlua2VuZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzIgor ICAgIGVuZHRlcm09InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSI+ IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgPC9wYXJhPgorICA8L25vdGU+ CisKICAgPHBhcmE+CiAgICBIZXJlIGlzIHNvbWUgZXhhbXBsZSBvdXRwdXQ6 CiA8c2NyZWVuPgotMTM0NTgyODUwMSA1NjAxIDE1NDI3NDQgNDgzNTUyNDE2 IDYxIDI1NzMKLTEzNDU4Mjg1MDMgNzg4NCAxOTc5ODEyIDU2NTgwNjczNiA2 MCAxNDc5Ci0xMzQ1ODI4NTA1IDcyMDggMTk3OTQyMiA1NjcyNzc1NTIgNTkg MTM5MQotMTM0NTgyODUwNyA3Njg1IDE5ODAyNjggNTY5Nzg0NzE0IDYwIDEz OTgKLTEzNDU4Mjg1MDkgNzA3MyAxOTc5Nzc5IDU3MzQ4OTk0MSAyMzYgMTQx MQorMTM0NTgyODUwMSA1NjAxIDE1NDI3NDQgNDgzNTUyNDE2IDYxIDI1NzMg MCAwIDU2MDEgNTYwMSA1NjAxIDEgMQorMTM0NTgyODUwMyA3ODg0IDE5Nzk4 MTIgNTY1ODA2NzM2IDYwIDE0NzkgMCAwIDc4ODQgNzg4NCA3ODg0IDEgMQor MTM0NTgyODUwNSA3MjA4IDE5Nzk0MjIgNTY3Mjc3NTUyIDU5IDEzOTEgMCAw IDcyMDggNzIwOCA3ODg0IDEgMQorMTM0NTgyODUwNyA3Njg1IDE5ODAyNjgg NTY5Nzg0NzE0IDYwIDEzOTggMCAwIDc2ODUgNzY4NSA3Njg1IDEgMQorMTM0 NTgyODUwOSA3MDczIDE5Nzk3NzkgNTczNDg5OTQxIDIzNiAxNDExIDAgMCA3 MDczIDcwNzMgNzA3MyAxIDEKIDwvc2NyZWVuPjwvcGFyYT4KIAogICA8cGFy YT4KQEAgLTEyNjAsMTMgKzEzNDgsNDEgQEAgRU5EOwogIDwvcmVmc2VjdDI+ CiAKICA8cmVmc2VjdDI+Ci0gIDx0aXRsZT5QZXItU3RhdGVtZW50IExhdGVu Y2llczwvdGl0bGU+CisgIDx0aXRsZT5QZXItU3RhdGVtZW50IFJlcG9ydDwv dGl0bGU+CiAKICAgPHBhcmE+Ci0gICBXaXRoIHRoZSA8b3B0aW9uPi1yPC8+ IG9wdGlvbiwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8Lz4gY29sbGVjdHMKLSAg IHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9uIHRpbWUgb2YgZWFjaCBzdGF0ZW1l bnQgZXhlY3V0ZWQgYnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0IHRoZW4gcmVw b3J0cyBhbiBhdmVyYWdlIG9mIHRob3NlIHZhbHVlcywgcmVmZXJyZWQgdG8K LSAgIGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0YXRlbWVudCwgYWZ0ZXIg dGhlIGJlbmNobWFyayBoYXMgZmluaXNoZWQuCisgICBXaXRoIHRoZSA8b3B0 aW9uPi1yPC8+IG9wdGlvbiwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8Lz4gY29s bGVjdHMgdGhlIGZvbGxvd2luZworICAgc3RhdGlzdGljcyBmb3IgZWFjaCBz dGF0ZW1lbnQ6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgICA8bGlzdGl0ZW0+ CisgICAgICAgPHBhcmE+CisgICAgICAgICB0aGUgZWxhcHNlZCB0cmFuc2Fj dGlvbiB0aW1lIG9mIGVhY2ggc3RhdGVtZW50OyA8YXBwbGljYXRpb24+cGdi ZW5jaDwvPgorICAgICAgICAgcmVwb3J0cyBhbiBhdmVyYWdlIG9mIHRob3Nl IHZhbHVlcywgcmVmZXJyZWQgdG8gYXMgdGhlIGxhdGVuY3kgZm9yIGVhY2gK KyAgICAgICAgIHN0YXRlbWVudDsKKyAgICAgICA8L3BhcmE+CisgICAgIDwv bGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAg ICAgICAgIHRoZSBudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBhbmQgZGVhZGxv Y2sgZmFpbHVyZXM7CisgICAgICAgPC9wYXJhPgorICAgICAgIDxub3RlPgor ICAgICAgICAgPHBhcmE+VGhlIHRvdGFsIHN1bSBvZiBwZXItY29tbWFuZCBm YWlsdXJlcyBvZiBlYWNoIHR5cGUgY2FuIGJlIGdyZWF0ZXIKKyAgICAgICAg IHRoYW4gdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgd2l0aCByZXBvcnRl ZCBmYWlsdXJlcy4KKyAgICAgICAgIFNlZSA8eHJlZiBsaW5rZW5kPSJ0cmFu c2FjdGlvbnMtYW5kLXNjcmlwdHMiCisgICAgICAgICBlbmR0ZXJtPSJ0cmFu c2FjdGlvbnMtYW5kLXNjcmlwdHMtdGl0bGUiPiBmb3IgbW9yZSBpbmZvcm1h dGlvbi4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisgICAg IDwvbGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgIHRoZSBhdmVyYWdlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBh dHRlbXB0cyBmb3IgY29tbWFuZCB3aGljaCBzdGFydCB0aGlzCisgICAgICAg ICB0cmFuc2FjdGlvbjsKKyAgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0 ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKworICAgQWxsIHZhbHVlcyBhcmUg Y29tcHV0ZWQgZm9yIGVhY2ggc3RhdGVtZW50IGV4ZWN1dGVkIGJ5IGV2ZXJ5 IGNsaWVudCBhbmQgYXJlCisgICByZXBvcnRlZCBhZnRlciB0aGUgYmVuY2ht YXJrIGhhcyBmaW5pc2hlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAt MTI3NCwzNSArMTM5MCw5MCBAQCBFTkQ7CiA8c2NyZWVuPgogc3RhcnRpbmcg dmFjdXVtLi4uZW5kLgogdHJhbnNhY3Rpb24gdHlwZTogJmx0O2J1aWx0aW46 IFRQQy1CIChzb3J0IG9mKSZndDsKK3RyYW5zYWN0aW9uIG1heGltdW0gYXR0 ZW1wdHMgbnVtYmVyOiAxCiBzY2FsaW5nIGZhY3RvcjogMQogcXVlcnkgbW9k ZTogc2ltcGxlCiBudW1iZXIgb2YgY2xpZW50czogMTAKIG51bWJlciBvZiB0 aHJlYWRzOiAxCiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHBlciBjbGllbnQ6 IDEwMDAKIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vz c2VkOiAxMDAwMC8xMDAwMAorbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aXRo IHNlcmlhbGl6YXRpb24gZmFpbHVyZXM6IDAgKDAuMDAwICUpCitudW1iZXIg b2YgdHJhbnNhY3Rpb25zIHdpdGggZGVhZGxvY2sgZmFpbHVyZXM6IDAgKDAu MDAwICUpCithdHRlbXB0cyBudW1iZXIgYXZlcmFnZSA9IDEuMDAKK2F0dGVt cHRzIG51bWJlciBzdGRkZXYgPSAwLjAwCiBsYXRlbmN5IGF2ZXJhZ2UgPSAx NS44NDQgbXMKIGxhdGVuY3kgc3RkZGV2ID0gMi43MTUgbXMKIHRwcyA9IDYx OC43NjQ1NTUgKGluY2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcp CiB0cHMgPSA2MjIuOTc3Njk4IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0 YWJsaXNoaW5nKQogc2NyaXB0IHN0YXRpc3RpY3M6Ci0gLSBzdGF0ZW1lbnQg bGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczoKLSAgICAgICAgMC4wMDIgIFxz ZXQgYWlkIHJhbmRvbSgxLCAxMDAwMDAgKiA6c2NhbGUpCi0gICAgICAgIDAu MDA1ICBcc2V0IGJpZCByYW5kb20oMSwgMSAqIDpzY2FsZSkKLSAgICAgICAg MC4wMDIgIFxzZXQgdGlkIHJhbmRvbSgxLCAxMCAqIDpzY2FsZSkKLSAgICAg ICAgMC4wMDEgIFxzZXQgZGVsdGEgcmFuZG9tKC01MDAwLCA1MDAwKQotICAg ICAgICAwLjMyNiAgQkVHSU47Ci0gICAgICAgIDAuNjAzICBVUERBVEUgcGdi ZW5jaF9hY2NvdW50cyBTRVQgYWJhbGFuY2UgPSBhYmFsYW5jZSArIDpkZWx0 YSBXSEVSRSBhaWQgPSA6YWlkOwotICAgICAgICAwLjQ1NCAgU0VMRUNUIGFi YWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlk OwotICAgICAgICA1LjUyOCAgVVBEQVRFIHBnYmVuY2hfdGVsbGVycyBTRVQg dGJhbGFuY2UgPSB0YmFsYW5jZSArIDpkZWx0YSBXSEVSRSB0aWQgPSA6dGlk OwotICAgICAgICA3LjMzNSAgVVBEQVRFIHBnYmVuY2hfYnJhbmNoZXMgU0VU IGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYmlkID0gOmJp ZDsKLSAgICAgICAgMC4zNzEgIElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9y eSAodGlkLCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQs IDpiaWQsIDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOwotICAg ICAgICAxLjIxMiAgRU5EOworIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBt aWxsaXNlY29uZHMsIHNlcmlhbGl6YXRpb24gJiBkZWFkbG9jayBmYWlsdXJl cywKKyAgIG51bWJlcnMgb2YgdHJhbnNhY3Rpb25zIGF0dGVtcHRzOgorICAw LjAwMiAgMCAgMCAgIC0gICAgXHNldCBhaWQgcmFuZG9tKDEsIDEwMDAwMCAq IDpzY2FsZSkKKyAgMC4wMDUgIDAgIDAgICAtICAgIFxzZXQgYmlkIHJhbmRv bSgxLCAxICogOnNjYWxlKQorICAwLjAwMiAgMCAgMCAgIC0gICAgXHNldCB0 aWQgcmFuZG9tKDEsIDEwICogOnNjYWxlKQorICAwLjAwMSAgMCAgMCAgIC0g ICAgXHNldCBkZWx0YSByYW5kb20oLTUwMDAsIDUwMDApCisgIDAuMzI2ICAw ICAwICAxLjAwICBCRUdJTjsKKyAgMC42MDMgIDAgIDAgICAtICAgIFVQREFU RSBwZ2JlbmNoX2FjY291bnRzCisgICAgICAgICAgICAgICAgICAgICBTRVQg YWJhbGFuY2UgPSBhYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBhaWQgPSA6YWlk OworICAwLjQ1NCAgMCAgMCAgIC0gICAgU0VMRUNUIGFiYWxhbmNlIEZST00g cGdiZW5jaF9hY2NvdW50cworICAgICAgICAgICAgICAgICAgICAgV0hFUkUg YWlkID0gOmFpZDsKKyAgNS41MjggIDAgIDAgICAtICAgIFVQREFURSBwZ2Jl bmNoX3RlbGxlcnMKKyAgICAgICAgICAgICAgICAgICAgIFNFVCB0YmFsYW5j ZSA9IHRiYWxhbmNlICsgOmRlbHRhIFdIRVJFIHRpZCA9IDp0aWQ7CisgIDcu MzM1ICAwICAwICAgLSAgICBVUERBVEUgcGdiZW5jaF9icmFuY2hlcworICAg ICAgICAgICAgICAgICAgICAgU0VUIGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6 ZGVsdGEgV0hFUkUgYmlkID0gOmJpZDsKKyAgMC4zNzEgIDAgIDAgICAtICAg IElOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpCisg ICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKDp0aWQsIDpiaWQsIDphaWQs IDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApOworICAxLjIxMiAgMCAgMCAg IC0gICAgRU5EOworPC9zY3JlZW4+CisKKyAgIEFub3RoZXIgZXhhbXBsZSBv ZiBvdXRwdXQgZm9yIHRoZSBkZWZhdWx0IHNjcmlwdCB1c2luZyBzZXJpYWxp emFibGUgZGVmYXVsdAorICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVs ICg8Y29tbWFuZD5QR09QVElPTlM9Jy1jCisgICBkZWZhdWx0X3RyYW5zYWN0 aW9uX2lzb2xhdGlvbj1zZXJpYWxpemFibGUnIHBnYmVuY2ggLi4uPC9jb21t YW5kPik6Cis8c2NyZWVuPgorc3RhcnRpbmcgdmFjdXVtLi4uZW5kLgordHJh bnNhY3Rpb24gdHlwZTogJmx0O2J1aWx0aW46IFRQQy1CIChzb3J0IG9mKSZn dDsKK3RyYW5zYWN0aW9uIG1heGltdW0gYXR0ZW1wdHMgbnVtYmVyOiAxMDAK K3NjYWxpbmcgZmFjdG9yOiAxCitxdWVyeSBtb2RlOiBzaW1wbGUKK251bWJl ciBvZiBjbGllbnRzOiAxMAorbnVtYmVyIG9mIHRocmVhZHM6IDEKK251bWJl ciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNsaWVudDogMTAwMAorbnVtYmVyIG9m IHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAw CitudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBm YWlsdXJlczogMzU5OSAoMzUuOTkwICUpCitudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHdpdGggZGVhZGxvY2sgZmFpbHVyZXM6IDAgKDAuMDAwICUpCithdHRl bXB0cyBudW1iZXIgYXZlcmFnZSA9IDQ3LjU0CithdHRlbXB0cyBudW1iZXIg c3RkZGV2ID0gNDQuMDQKK2xhdGVuY3kgYXZlcmFnZSA9IDIzNS43OTUgbXMK K2xhdGVuY3kgc3RkZGV2ID0gNDA4Ljg1NCBtcwordHBzID0gMjYuNjk0MjQ1 IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQordHBzID0g MjYuNjk3MzA4IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5n KQorc2NyaXB0IHN0YXRpc3RpY3M6CisgLSBzdGF0ZW1lbnQgbGF0ZW5jaWVz IGluIG1pbGxpc2Vjb25kcywgc2VyaWFsaXphdGlvbiAmIGRlYWRsb2NrIGZh aWx1cmVzLAorICAgbnVtYmVycyBvZiB0cmFuc2FjdGlvbnMgYXR0ZW1wdHM6 CisgIDAuMDAzICAgICAgIDAgIDAgICAgLSAgICBcc2V0IGFpZCByYW5kb20o MSwgMTAwMDAwICogOnNjYWxlKQorICAwLjAwMSAgICAgICAwICAwICAgIC0g ICAgXHNldCBiaWQgcmFuZG9tKDEsIDEgKiA6c2NhbGUpCisgIDAuMDAxICAg ICAgIDAgIDAgICAgLSAgICBcc2V0IHRpZCByYW5kb20oMSwgMTAgKiA6c2Nh bGUpCisgIDAuMDAwICAgICAgIDAgIDAgICAgLSAgICBcc2V0IGRlbHRhIHJh bmRvbSgtNTAwMCwgNTAwMCkKKyAgNC42MjYgICAgICAgMCAgMCAgNDcuNTQg IEJFR0lOOworICAxLjE2NSAgICAgICAwICAwICAgIC0gICAgVVBEQVRFIHBn YmVuY2hfYWNjb3VudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNF VCBhYmFsYW5jZSA9IGFiYWxhbmNlICsgOmRlbHRhIFdIRVJFIGFpZCA9IDph aWQ7CisgIDAuODcwICAgICAgIDAgIDAgICAgLSAgICBTRUxFQ1QgYWJhbGFu Y2UgRlJPTSBwZ2JlbmNoX2FjY291bnRzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBXSEVSRSBhaWQgPSA6YWlkOworICAxLjA2MCAgNDU2MTU2ICAw ICAgIC0gICAgVVBEQVRFIHBnYmVuY2hfdGVsbGVycworICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0VUIHRiYWxhbmNlID0gdGJhbGFuY2UgKyA6ZGVs dGEgV0hFUkUgdGlkID0gOnRpZDsKKyAgMC44ODMgICAxMjgyNiAgMCAgICAt ICAgIFVQREFURSBwZ2JlbmNoX2JyYW5jaGVzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBTRVQgYmJhbGFuY2UgPSBiYmFsYW5jZSArIDpkZWx0YSBX SEVSRSBiaWQgPSA6YmlkOworICAxLjA1MiAgICAgICAwICAwICAgIC0gICAg SU5TRVJUIElOVE8gcGdiZW5jaF9oaXN0b3J5CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBtdGlt ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoOnRpZCwg OmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5UX1RJTUVTVEFNUCk7CisgIDQu ODY2ICAgICAgMzYgIDAgICAgLSAgICBFTkQ7CiA8L3NjcmVlbj4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgSWYgbXVsdGlwbGUgc2NyaXB0IGZpbGVz IGFyZSBzcGVjaWZpZWQsIHRoZSBhdmVyYWdlcyBhcmUgcmVwb3J0ZWQKLSAg IHNlcGFyYXRlbHkgZm9yIGVhY2ggc2NyaXB0IGZpbGUuCisgICBJZiBtdWx0 aXBsZSBzY3JpcHQgZmlsZXMgYXJlIHNwZWNpZmllZCwgdGhlIGF2ZXJhZ2Vz IGFuZCB0aGUgZmFpbHVyZXMgYXJlCisgICByZXBvcnRlZCBzZXBhcmF0ZWx5 IGZvciBlYWNoIHNjcmlwdCBmaWxlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+ CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jIGIvc3Jj L2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwppbmRleCA0ZDM2NGExLi4yZTg0ZDM0 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTU4LDYgKzU4LDggQEAK IAogI2luY2x1ZGUgInBnYmVuY2guaCIKIAorI2RlZmluZSBFUlJDT0RFX1Rf Ul9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUgICI0MDAwMSIKKyNkZWZpbmUgRVJS Q09ERV9UX1JfREVBRExPQ0tfREVURUNURUQgICI0MFAwMSIKICNkZWZpbmUg RVJSQ09ERV9VTkRFRklORURfVEFCTEUgICI0MlAwMSIKIAogLyoKQEAgLTE3 NCw4ICsxNzYsMTIgQEAgYm9vbAkJcHJvZ3Jlc3NfdGltZXN0YW1wID0gZmFs c2U7IC8qIHByb2dyZXNzIHJlcG9ydCB3aXRoIFVuaXggdGltZSAqLwogaW50 CQkJbmNsaWVudHMgPSAxOwkJLyogbnVtYmVyIG9mIGNsaWVudHMgKi8KIGlu dAkJCW50aHJlYWRzID0gMTsJCS8qIG51bWJlciBvZiB0aHJlYWRzICovCiBi b29sCQlpc19jb25uZWN0OwkJCS8qIGVzdGFibGlzaCBjb25uZWN0aW9uIGZv ciBlYWNoIHRyYW5zYWN0aW9uICovCi1ib29sCQlpc19sYXRlbmNpZXM7CQkv KiByZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovCitib29sCQlyZXBv cnRfcGVyX2NvbW1hbmQgPSBmYWxzZTsJLyogcmVwb3J0IHBlci1jb21tYW5k IGxhdGVuY2llcywKKwkJCQkJCQkJCQkgKiBmYWlsdXJlcyBhbmQgYXR0ZW1w dHMgKi8KIGludAkJCW1haW5fcGlkOwkJCS8qIG1haW4gcHJvY2VzcyBpZCB1 c2VkIGluIGxvZyBmaWxlbmFtZSAqLworaW50CQkJbWF4X2F0dGVtcHRzX251 bWJlciA9IDE7CS8qIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIHJ1 biB0aGUKKwkJCQkJCQkJCQkgKiB0cmFuc2FjdGlvbiB3aXRoIHNlcmlhbGl6 YXRpb24gb3IKKwkJCQkJCQkJCQkgKiBkZWFkbG9jayBmYWlsdXJlcyAqLwog CiBjaGFyCSAgICpwZ2hvc3QgPSAiIjsKIGNoYXIJICAgKnBncG9ydCA9ICIi OwpAQCAtMjMyLDExICsyMzgsMzUgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdHNE YXRhCiAJaW50NjQJCWNudDsJCQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25z ICovCiAJaW50NjQJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHNraXBwZWQgdW5kZXIgLS1yYXRlCiAJCQkJCQkJCSAqIGFuZCAtLWxh dGVuY3ktbGltaXQgKi8KKwlpbnQ2NAkJc2VyaWFsaXphdGlvbl9mYWlsdXJl czsJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aXRoCisJCQkJCQkJCQkJ ICogc2VyaWFsaXphdGlvbiBmYWlsdXJlcyAqLworCWludDY0CQlkZWFkbG9j a19mYWlsdXJlczsgLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aXRoIGRl YWRsb2NrCisJCQkJCQkJCQkqIGZhaWx1cmVzICovCisJU2ltcGxlU3RhdHMg YXR0ZW1wdHM7CiAJU2ltcGxlU3RhdHMgbGF0ZW5jeTsKIAlTaW1wbGVTdGF0 cyBsYWc7CiB9IFN0YXRzRGF0YTsKIAogLyoKKyAqIERhdGEgc3RydWN0dXJl IGZvciByZXBlYXRpbmcgYSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBiZWdpbm5u aW5nIHdpdGggdGhlIHNhbWUKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3R5cGVk ZWYgc3RydWN0IExhc3RCZWdpblN0YXRlCit7CisJaW50CQkJY29tbWFuZDsJ CS8qIGNvbW1hbmQgbnVtYmVyIGluIHNjcmlwdCAqLworCWludAkJCWF0dGVt cHRzX251bWJlcjsJLyogaG93IG1hbnkgdGltZXMgaGF2ZSB3ZSB0cmllZCB0 byBydW4gdGhlCisJCQkJCQkJCQkgKiB0cmFuc2FjdGlvbiB3aXRob3V0IHNl cmlhbGl6YXRpb24gb3IKKwkJCQkJCQkJCSAqIGRlYWRsb2NrIGZhaWx1cmVz ICovCisKKwl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CS8qIHJh bmRvbSBzZWVkICovCisKKwkvKiBjbGllbnQgdmFyaWFibGVzICovCisJVmFy aWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJyYXkgb2YgdmFyaWFibGUgZGVm aW5pdGlvbnMgKi8KKwlpbnQJCQludmFyaWFibGVzOwkJLyogbnVtYmVyIG9m IHZhcmlhYmxlcyAqLworCWJvb2wJCXZhcnNfc29ydGVkOwkvKiBhcmUgdmFy aWFibGVzIHNvcnRlZCBieSBuYW1lPyAqLworfSBMYXN0QmVnaW5TdGF0ZTsK KworLyoKICAqIENvbm5lY3Rpb24gc3RhdGUgbWFjaGluZSBzdGF0ZXMuCiAg Ki8KIHR5cGVkZWYgZW51bQpAQCAtMjg3LDYgKzMxNywyMCBAQCB0eXBlZGVm IGVudW0KIAlDU1RBVEVfRU5EX0NPTU1BTkQsCiAKIAkvKgorCSAqIFN0YXRl cyBmb3IgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBvciBkZWFk bG9jayBmYWlsdXJlcy4KKwkgKgorCSAqIEZpcnN0IG9mIGFsbCByZXBvcnQg YWJvdXQgdGhlIGZhaWx1cmUgaW4gQ1NUQVRFX0ZBSUxVUkUuIFRoZW4gaWYg d2UKKwkgKiBzaG91bGQgZW5kIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxv Y2sgZ28gdG8gc3RhdGVzIENTVEFURV9TVEFSVF9DT01NQU5ECisJICogLT4g Q1NUQVRFX1dBSVRfUkVTVUxUIC0+IENTVEFURV9FTkRfQ09NTUFORCB3aXRo IHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kLgorCSAqIEFmdGVyIHRoYXQgaWYg d2UgYXJlIGFibGUgdG8gcmVwZWF0IHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24g Z28gdG8KKwkgKiBDU1RBVEVfUkVUUllfRkFJTEVEX1RSQU5TQUNUSU9OIHRv IHNldCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUKKwkgKiB0cmFuc2Fj dGlvbiBleGVjdXRpb24gYXMgdGhleSB3ZXJlIGluIHRoZSBwcmV2aW91cyBh dHRlbXB0cy4gT3RoZXJ3aXNlIGdvCisJICogdG8gdGhlIG5leHQgY29tbWFu ZCBhZnRlciB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uLgorCSAqLworCUNTVEFU RV9GQUlMVVJFLAorCUNTVEFURV9SRVRSWV9GQUlMRURfVFJBTlNBQ1RJT04s CisKKwkvKgogCSAqIENTVEFURV9FTkRfVFggcGVyZm9ybXMgZW5kLW9mLXRy YW5zYWN0aW9uIHByb2Nlc3NpbmcuICBDYWxjdWxhdGVzCiAJICogbGF0ZW5j eSwgYW5kIGxvZ3MgdGhlIHRyYW5zYWN0aW9uLiAgSW4gLS1jb25uZWN0IG1v ZGUsIGNsb3NlcyB0aGUKIAkgKiBjdXJyZW50IGNvbm5lY3Rpb24uICBDaG9v c2VzIHRoZSBuZXh0IHNjcmlwdCB0byBleGVjdXRlIGFuZCBzdGFydHMgb3Zl cgpAQCAtMzExLDYgKzM1NSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJUEdjb25u CSAgICpjb247CQkJLyogY29ubmVjdGlvbiBoYW5kbGUgdG8gREIgKi8KIAlp bnQJCQlpZDsJCQkJLyogY2xpZW50IE5vLiAqLwogCUNvbm5lY3Rpb25TdGF0 ZUVudW0gc3RhdGU7CS8qIHN0YXRlIG1hY2hpbmUncyBjdXJyZW50IHN0YXRl LiAqLworCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsJLyogc2Vw YXJhdGUgcmFuZG9tbmVzcyBmb3IgZWFjaCBjbGllbnQgKi8KIAogCWludAkJ CXVzZV9maWxlOwkJLyogaW5kZXggaW4gc3FsX3NjcmlwdCBmb3IgdGhpcyBj bGllbnQgKi8KIAlpbnQJCQljb21tYW5kOwkJLyogY29tbWFuZCBudW1iZXIg aW4gc2NyaXB0ICovCkBAIC0zMjgsNiArMzczLDE3IEBAIHR5cGVkZWYgc3Ry dWN0CiAKIAlib29sCQlwcmVwYXJlZFtNQVhfU0NSSVBUU107CS8qIHdoZXRo ZXIgY2xpZW50IHByZXBhcmVkIHRoZSBzY3JpcHQgKi8KIAorCWJvb2wJCXNl cmlhbGl6YXRpb25fZmFpbHVyZTsJLyogaWYgdGhlcmUgd2FzIHNlcmlhbGl6 YXRpb24gZmFpbHVyZQorCQkJCQkJCQkJCSAqIGR1cmluZyBzY3JpcHQgZXhl Y3V0aW9uICovCisJYm9vbAkJZGVhZGxvY2tfZmFpbHVyZTsJLyogaWYgdGhl cmUgd2FzIGRlYWRsb2NrIGZhaWx1cmUgZHVyaW5nCisJCQkJCQkJCQkgKiBz Y3JpcHQgZXhlY3V0aW9uICovCisKKwkvKiBmb3IgcmVwZWF0aW5nIHRyYW5z YWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sgZmFpbHVy ZXM6ICovCisJTGFzdEJlZ2luU3RhdGUgKmxhc3RfYmVnaW5fc3RhdGU7CisJ Ym9vbAkJZW5kX2ZhaWxlZF90cmFuc2FjdGlvbl9ibG9jazsgLyogYXJlIHdl IGVuZGluZyB0aGUgZmFpbGVkCisJCQkJCQkJCQkJCSAgICogdHJhbnNhY3Rp b24gYmxvY2s/ICovCisJU2ltcGxlU3RhdHMgYXR0ZW1wdHM7CisKIAkvKiBw ZXIgY2xpZW50IGNvbGxlY3RlZCBzdGF0cyAqLwogCWludDY0CQljbnQ7CQkJ LyogdHJhbnNhY3Rpb24gY291bnQgKi8KIAlpbnQJCQllY250OwkJCS8qIGVy cm9yIGNvdW50ICovCkBAIC0zNDIsNyArMzk4LDYgQEAgdHlwZWRlZiBzdHJ1 Y3QKIAlwdGhyZWFkX3QJdGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8K IAlDU3RhdGUJICAgKnN0YXRlOwkJCS8qIGFycmF5IG9mIENTdGF0ZSAqLwog CWludAkJCW5zdGF0ZTsJCQkvKiBsZW5ndGggb2Ygc3RhdGVbXSAqLwotCXVu c2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsgLyogc2VwYXJhdGUgcmFu ZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8KIAlpbnQ2NAkJdGhyb3R0bGVf dHJpZ2dlcjsJLyogcHJldmlvdXMvbmV4dCB0aHJvdHRsaW5nICh1cykgKi8K IAlGSUxFCSAgICpsb2dmaWxlOwkJLyogd2hlcmUgdG8gbG9nLCBvciBOVUxM ICovCiAKQEAgLTM4Miw2ICs0MzcsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlj aGFyCSAgICphcmd2W01BWF9BUkdTXTsgLyogY29tbWFuZCB3b3JkIGxpc3Qg Ki8KIAlQZ0JlbmNoRXhwciAqZXhwcjsJCQkvKiBwYXJzZWQgZXhwcmVzc2lv biwgaWYgbmVlZGVkICovCiAJU2ltcGxlU3RhdHMgc3RhdHM7CQkJLyogdGlt ZSBzcGVudCBpbiB0aGlzIGNvbW1hbmQgKi8KKwlpbnQ2NAkJc2VyaWFsaXph dGlvbl9mYWlsdXJlczsJLyogbnVtYmVyIG9mIHNlcmlhbGl6YXRpb24gZmFp bHVyZXMgaW4KKwkJCQkJCQkJCQkgKiB0aGlzIGNvbW1hbmQgKi8KKwlpbnQ2 NAkJZGVhZGxvY2tfZmFpbHVyZXM7CS8qIG51bWJlciBvZiBkZWFkbG9jayBm YWlsdXJlcyBpbiB0aGlzCisJCQkJCQkJCQkgKiBjb21tYW5kICovCisJU2lt cGxlU3RhdHMgYXR0ZW1wdHM7CQkvKiBpcyB2YWxpZCBpZiBjb21tYW5kIHN0 YXJ0cyBhIHRyYW5zYWN0aW9uICovCisKKwkvKiBmb3IgcmVwZWF0aW5nIHRy YW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gYW5kIGRlYWRsb2NrIGZh aWx1cmVzOiAqLworCWJvb2wJCWlzX3RyYW5zYWN0aW9uX2JlZ2luOwkvKiBk byB3ZSBzdGFydCBhIHRyYW5zYWN0aW9uPyAqLworCWludAkJCXRyYW5zYWN0 aW9uX2VuZDsJLyogY29tbWFuZCBudW1iZXIgdG8gY29tcGxldGUgdHJhbnNh Y3Rpb24KKwkJCQkJCQkJCSAqIHN0YXJ0aW5nIGluIHRoaXMgY29tbWFuZC4g Ki8KIH0gQ29tbWFuZDsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyc2VkU2NyaXB0 CkBAIC01MDQsNyArNTY5LDcgQEAgdXNhZ2Uodm9pZCkKIAkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIGZvciBzdWJtaXR0aW5n IHF1ZXJpZXMgKGRlZmF1bHQ6IHNpbXBsZSlcbiIKIAkJICAgIiAgLW4sIC0t bm8tdmFjdXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJlZm9yZSB0 ZXN0c1xuIgogCQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0gICAgICAgc2hv dyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IE5VTSBzZWNvbmRzXG4i Ci0JCSAgICIgIC1yLCAtLXJlcG9ydC1sYXRlbmNpZXMgICByZXBvcnQgYXZl cmFnZSBsYXRlbmN5IHBlciBjb21tYW5kXG4iCisJCSAgICIgIC1yLCAtLXJl cG9ydC1wZXItY29tbWFuZCByZXBvcnQgbGF0ZW5jaWVzLCBmYWlsdXJlcyBh bmQgYXR0ZW1wdHMgcGVyIGNvbW1hbmRcbiIKIAkJICAgIiAgLVIsIC0tcmF0 ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRlIGluIHRyYW5zYWN0aW9ucyBw ZXIgc2Vjb25kXG4iCiAJCSAgICIgIC1zLCAtLXNjYWxlPU5VTSAgICAgICAg ICByZXBvcnQgdGhpcyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iCiAJCSAg ICIgIC10LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIGVhY2ggY2xpZW50IHJ1bnMgKGRlZmF1bHQ6IDEwKVxuIgpAQCAt NTEzLDYgKzU3OCw4IEBAIHVzYWdlKHZvaWQpCiAJCSAgICIgIC0tYWdncmVn YXRlLWludGVydmFsPU5VTSBhZ2dyZWdhdGUgZGF0YSBvdmVyIE5VTSBzZWNv bmRzXG4iCiAJCSAgICIgIC0tbG9nLXByZWZpeD1QUkVGSVggICAgICBwcmVm aXggZm9yIHRyYW5zYWN0aW9uIHRpbWUgbG9nIGZpbGVcbiIKIAkJICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBcInBnYmVuY2hf bG9nXCIpXG4iCisJCSAgICIgIC0tbWF4LWF0dGVtcHRzLW51bWJlcj1OVU1c biIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCBudW1i ZXIgb2YgdHJpZXMgdG8gcnVuIHRyYW5zYWN0aW9uIChkZWZhdWx0OiAxKVxu IgogCQkgICAiICAtLXByb2dyZXNzLXRpbWVzdGFtcCAgICAgdXNlIFVuaXgg ZXBvY2ggdGltZXN0YW1wcyBmb3IgcHJvZ3Jlc3NcbiIKIAkJICAgIiAgLS1z YW1wbGluZy1yYXRlPU5VTSAgICAgIGZyYWN0aW9uIG9mIHRyYW5zYWN0aW9u cyB0byBsb2cgKGUuZy4sIDAuMDEgZm9yIDElJSlcbiIKIAkJICAgIlxuQ29t bW9uIG9wdGlvbnM6XG4iCkBAIC02MjQsNyArNjkxLDcgQEAgZ290ZGlnaXRz OgogCiAvKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogdW5pZm9ybSBkaXN0 cmlidXRpb24gZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGlj IGludDY0Ci1nZXRyYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCkKK2dldHJhbmQoQ1N0YXRlICpzdCwgaW50NjQgbWluLCBpbnQ2 NCBtYXgpCiB7CiAJLyoKIAkgKiBPZGQgY29kaW5nIGlzIHNvIHRoYXQgbWlu IGFuZCBtYXggaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGNoYW5jZSBv ZgpAQCAtNjM1LDcgKzcwMiw3IEBAIGdldHJhbmQoVFN0YXRlICp0aHJlYWQs IGludDY0IG1pbiwgaW50NjQgbWF4KQogCSAqIHByb3RlY3RlZCBieSBhIG11 dGV4LCBhbmQgdGhlcmVmb3JlIGEgYm90dGxlbmVjayBvbiBtYWNoaW5lcyB3 aXRoIG1hbnkKIAkgKiBDUFVzLgogCSAqLwotCXJldHVybiBtaW4gKyAoaW50 NjQpICgobWF4IC0gbWluICsgMSkgKiBwZ19lcmFuZDQ4KHRocmVhZC0+cmFu ZG9tX3N0YXRlKSk7CisJcmV0dXJuIG1pbiArIChpbnQ2NCkgKChtYXggLSBt aW4gKyAxKSAqIHBnX2VyYW5kNDgoc3QtPnJhbmRvbV9zdGF0ZSkpOwogfQog CiAvKgpAQCAtNjQ0LDcgKzcxMSw3IEBAIGdldHJhbmQoVFN0YXRlICp0aHJl YWQsIGludDY0IG1pbiwgaW50NjQgbWF4KQogICogdmFsdWUgaXMgZXhwKC1w YXJhbWV0ZXIpLgogICovCiBzdGF0aWMgaW50NjQKLWdldEV4cG9uZW50aWFs UmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRv dWJsZSBwYXJhbWV0ZXIpCitnZXRFeHBvbmVudGlhbFJhbmQoQ1N0YXRlICpz dCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiB7 CiAJZG91YmxlCQljdXQsCiAJCQkJdW5pZm9ybSwKQEAgLTY1NCw3ICs3MjEs NyBAQCBnZXRFeHBvbmVudGlhbFJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0 IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogCUFzc2VydChw YXJhbWV0ZXIgPiAwLjApOwogCWN1dCA9IGV4cCgtcGFyYW1ldGVyKTsKIAkv KiBlcmFuZCBpbiBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICovCi0JdW5p Zm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUp OworCXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHN0LT5yYW5kb21fc3Rh dGUpOwogCiAJLyoKIAkgKiBpbm5lciBleHByZXNzaW9uIGluIChjdXQsIDFd IChpZiBwYXJhbWV0ZXIgPiAwKSwgcmFuZCBpbiBbMCwgMSkKQEAgLTY2Nyw3 ICs3MzQsNyBAQCBnZXRFeHBvbmVudGlhbFJhbmQoVFN0YXRlICp0aHJlYWQs IGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQogCiAv KiByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjogZ2F1c3NpYW4gZGlzdHJpYnV0 aW9uIGZyb20gbWluIHRvIG1heCBpbmNsdXNpdmUgKi8KIHN0YXRpYyBpbnQ2 NAotZ2V0R2F1c3NpYW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4s IGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKK2dldEdhdXNzaWFuUmFu ZChDU3RhdGUgKnN0LCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBh cmFtZXRlcikKIHsKIAlkb3VibGUJCXN0ZGV2OwogCWRvdWJsZQkJcmFuZDsK QEAgLTY5NSw4ICs3NjIsOCBAQCBnZXRHYXVzc2lhblJhbmQoVFN0YXRlICp0 aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVy KQogCQkgKiBhcmUgZXhwZWN0ZWQgaW4gKDAsIDFdIChzZWUKIAkJICogaHR0 cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Cb3hfbXVsbGVyKQogCQkgKi8K LQkJZG91YmxlCQlyYW5kMSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5y YW5kb21fc3RhdGUpOwotCQlkb3VibGUJCXJhbmQyID0gMS4wIC0gcGdfZXJh bmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJCWRvdWJsZQkJcmFuZDEg PSAxLjAgLSBwZ19lcmFuZDQ4KHN0LT5yYW5kb21fc3RhdGUpOworCQlkb3Vi bGUJCXJhbmQyID0gMS4wIC0gcGdfZXJhbmQ0OChzdC0+cmFuZG9tX3N0YXRl KTsKIAogCQkvKiBCb3gtTXVsbGVyIGJhc2ljIGZvcm0gdHJhbnNmb3JtICov CiAJCWRvdWJsZQkJdmFyX3NxcnQgPSBzcXJ0KC0yLjAgKiBsb2cocmFuZDEp KTsKQEAgLTcyMyw3ICs3OTAsNyBAQCBnZXRHYXVzc2lhblJhbmQoVFN0YXRl ICp0aHJlYWQsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFyYW1l dGVyKQogICogd2lsbCBhcHByb3hpbWF0ZSBhIFBvaXNzb24gZGlzdHJpYnV0 aW9uIGNlbnRlcmVkIG9uIHRoZSBnaXZlbiB2YWx1ZS4KICAqLwogc3RhdGlj IGludDY0Ci1nZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQg Y2VudGVyKQorZ2V0UG9pc3NvblJhbmQoQ1N0YXRlICpzdCwgaW50NjQgY2Vu dGVyKQogewogCS8qCiAJICogVXNlIGludmVyc2UgdHJhbnNmb3JtIHNhbXBs aW5nIHRvIGdlbmVyYXRlIGEgdmFsdWUgPiAwLCBzdWNoIHRoYXQgdGhlCkBA IC03MzIsNyArNzk5LDcgQEAgZ2V0UG9pc3NvblJhbmQoVFN0YXRlICp0aHJl YWQsIGludDY0IGNlbnRlcikKIAlkb3VibGUJCXVuaWZvcm07CiAKIAkvKiBl cmFuZCBpbiBbMCwgMSksIHVuaWZvcm0gaW4gKDAsIDFdICovCi0JdW5pZm9y bSA9IDEuMCAtIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21fc3RhdGUpOwor CXVuaWZvcm0gPSAxLjAgLSBwZ19lcmFuZDQ4KHN0LT5yYW5kb21fc3RhdGUp OwogCiAJcmV0dXJuIChpbnQ2NCkgKC1sb2codW5pZm9ybSkgKiAoKGRvdWJs ZSkgY2VudGVyKSArIDAuNSk7CiB9CkBAIC03ODYsMjQgKzg1Myw0MiBAQCBp bml0U3RhdHMoU3RhdHNEYXRhICpzZCwgdGltZV90IHN0YXJ0X3RpbWUpCiAJ c2QtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwogCXNkLT5jbnQgPSAwOwog CXNkLT5za2lwcGVkID0gMDsKKwlzZC0+c2VyaWFsaXphdGlvbl9mYWlsdXJl cyA9IDA7CisJc2QtPmRlYWRsb2NrX2ZhaWx1cmVzID0gMDsKKwlpbml0U2lt cGxlU3RhdHMoJnNkLT5hdHRlbXB0cyk7CiAJaW5pdFNpbXBsZVN0YXRzKCZz ZC0+bGF0ZW5jeSk7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGFnKTsKIH0K IAogLyoKLSAqIEFjY3VtdWxhdGUgb25lIGFkZGl0aW9uYWwgaXRlbSBpbnRv IHRoZSBnaXZlbiBzdGF0cyBvYmplY3QuCisgKiBBY2N1bXVsYXRlIHN0YXRp c3RpY3MgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdhcyBhIGZhaWx1 cmUgLyB0cmFuc2FjdGlvbgorICogd2FzIHNraXBwZWQgb3Igbm90LgogICov CiBzdGF0aWMgdm9pZAotYWNjdW1TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBi b29sIHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcpCithY2N1bU1h aW5TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBwZWQsIGJvb2wg c2VyaWFsaXphdGlvbl9mYWlsdXJlLAorCQkJICAgYm9vbCBkZWFkbG9ja19m YWlsdXJlLCBTaW1wbGVTdGF0cyAqYXR0ZW1wdHMpCiB7CiAJc3RhdHMtPmNu dCsrOwotCiAJaWYgKHNraXBwZWQpCi0JewotCQkvKiBubyBsYXRlbmN5IHRv IHJlY29yZCBvbiBza2lwcGVkIHRyYW5zYWN0aW9ucyAqLwogCQlzdGF0cy0+ c2tpcHBlZCsrOwotCX0KLQllbHNlCisJZWxzZSBpZiAoc2VyaWFsaXphdGlv bl9mYWlsdXJlKQorCQlzdGF0cy0+c2VyaWFsaXphdGlvbl9mYWlsdXJlcysr OworCWVsc2UgaWYgKGRlYWRsb2NrX2ZhaWx1cmUpCisJCXN0YXRzLT5kZWFk bG9ja19mYWlsdXJlcysrOworCW1lcmdlU2ltcGxlU3RhdHMoJnN0YXRzLT5h dHRlbXB0cywgYXR0ZW1wdHMpOworfQorCisvKgorICogQWNjdW11bGF0ZSBv bmUgYWRkaXRpb25hbCBpdGVtIGludG8gdGhlIGdpdmVuIHN0YXRzIG9iamVj dC4KKyAqLworc3RhdGljIHZvaWQKK2FjY3VtU3RhdHMoU3RhdHNEYXRhICpz dGF0cywgYm9vbCBza2lwcGVkLCBib29sIHNlcmlhbGl6YXRpb25fZmFpbHVy ZSwKKwkJICAgYm9vbCBkZWFkbG9ja19mYWlsdXJlLCBkb3VibGUgbGF0LCBk b3VibGUgbGFnLCBTaW1wbGVTdGF0cyAqYXR0ZW1wdHMpCit7CisJYWNjdW1N YWluU3RhdHMoc3RhdHMsIHNraXBwZWQsIHNlcmlhbGl6YXRpb25fZmFpbHVy ZSwgZGVhZGxvY2tfZmFpbHVyZSwKKwkJCQkgICBhdHRlbXB0cyk7CisKKwlp ZiAoIXNraXBwZWQgJiYgIXNlcmlhbGl6YXRpb25fZmFpbHVyZSAmJiAhZGVh ZGxvY2tfZmFpbHVyZSkKIAl7CiAJCWFkZFRvU2ltcGxlU3RhdHMoJnN0YXRz LT5sYXRlbmN5LCBsYXQpOwogCkBAIC0xNTkzLDcgKzE2NzgsNyBAQCBldmFs RnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQlpZiAoZnVu YyA9PSBQR0JFTkNIX1JBTkRPTSkKIAkJCQl7CiAJCQkJCUFzc2VydChuYXJn cyA9PSAyKTsKLQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLCBnZXRyYW5kKHRo cmVhZCwgaW1pbiwgaW1heCkpOworCQkJCQlzZXRJbnRWYWx1ZShyZXR2YWws IGdldHJhbmQoc3QsIGltaW4sIGltYXgpKTsKIAkJCQl9CiAJCQkJZWxzZQkJ CS8qIGdhdXNzaWFuICYgZXhwb25lbnRpYWwgKi8KIAkJCQl7CkBAIC0xNjE1 LDcgKzE3MDAsNyBAQCBldmFsRnVuYyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwKIAkJCQkJCX0KIAogCQkJCQkJc2V0SW50VmFsdWUocmV0dmFsLAot CQkJCQkJCQkJZ2V0R2F1c3NpYW5SYW5kKHRocmVhZCwgaW1pbiwgaW1heCwg cGFyYW0pKTsKKwkJCQkJCQkJCWdldEdhdXNzaWFuUmFuZChzdCwgaW1pbiwg aW1heCwgcGFyYW0pKTsKIAkJCQkJfQogCQkJCQllbHNlCQkvKiBleHBvbmVu dGlhbCAqLwogCQkJCQl7CkBAIC0xNjI4LDcgKzE3MTMsNyBAQCBldmFsRnVu YyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwKIAkJCQkJCX0KIAogCQkJ CQkJc2V0SW50VmFsdWUocmV0dmFsLAotCQkJCQkJCQkJZ2V0RXhwb25lbnRp YWxSYW5kKHRocmVhZCwgaW1pbiwgaW1heCwgcGFyYW0pKTsKKwkJCQkJCQkJ CWdldEV4cG9uZW50aWFsUmFuZChzdCwgaW1pbiwgaW1heCwgcGFyYW0pKTsK IAkJCQkJfQogCQkJCX0KIApAQCAtMTgxNyw3ICsxOTAyLDcgQEAgY29tbWFu ZEZhaWxlZChDU3RhdGUgKnN0LCBjaGFyICptZXNzYWdlKQogCiAvKiByZXR1 cm4gYSBzY3JpcHQgbnVtYmVyIHdpdGggYSB3ZWlnaHRlZCBjaG9pY2UuICov CiBzdGF0aWMgaW50Ci1jaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpCitj aG9vc2VTY3JpcHQoQ1N0YXRlICpzdCkKIHsKIAlpbnQJCQlpID0gMDsKIAlp bnQ2NAkJdzsKQEAgLTE4MjUsNyArMTkxMCw3IEBAIGNob29zZVNjcmlwdChU U3RhdGUgKnRocmVhZCkKIAlpZiAobnVtX3NjcmlwdHMgPT0gMSkKIAkJcmV0 dXJuIDA7CiAKLQl3ID0gZ2V0cmFuZCh0aHJlYWQsIDAsIHRvdGFsX3dlaWdo dCAtIDEpOworCXcgPSBnZXRyYW5kKHN0LCAwLCB0b3RhbF93ZWlnaHQgLSAx KTsKIAlkbwogCXsKIAkJdyAtPSBzcWxfc2NyaXB0W2krK10ud2VpZ2h0OwpA QCAtMTk1MSw2ICsyMDM2LDQ4IEBAIGV2YWx1YXRlU2xlZXAoQ1N0YXRlICpz dCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQogCXJldHVy biB0cnVlOwogfQogCitzdGF0aWMgdm9pZAorZnJlZV92YXJpYWJsZXNfcG9p bnRlcnMoVmFyaWFibGUgKnZhcmlhYmxlcywgaW50IG52YXJpYWJsZXMpCit7 CisJVmFyaWFibGUgICAqY3VycmVudDsKKworCWZvciAoY3VycmVudCA9IHZh cmlhYmxlczsgY3VycmVudCAtIHZhcmlhYmxlcyA8IG52YXJpYWJsZXM7ICsr Y3VycmVudCkKKwl7CisJCXBnX2ZyZWUoY3VycmVudC0+bmFtZSk7CisJCWN1 cnJlbnQtPm5hbWUgPSBOVUxMOworCisJCXBnX2ZyZWUoY3VycmVudC0+dmFs dWUpOworCQljdXJyZW50LT52YWx1ZSA9IE5VTEw7CisJfQorfQorCisvKiBy ZXR1cm4gYSBkZWVwIGNvcHkgb2YgdmFyaWFibGVzIGFycmF5ICovCitzdGF0 aWMgVmFyaWFibGUgKgorY29weV92YXJpYWJsZXMoVmFyaWFibGUgKmRlc3Rp bmF0aW9uLCBpbnQgZGVzdGluYXRpb25fbnZhcmlhYmxlcywKKwkJCSAgIGNv bnN0IFZhcmlhYmxlICpzb3VyY2UsIGludCBzb3VyY2VfbnZhcmlhYmxlcykK K3sKKwlWYXJpYWJsZSAgICpjdXJyZW50X2Rlc3RpbmF0aW9uOworCWNvbnN0 IFZhcmlhYmxlICpjdXJyZW50X3NvdXJjZTsKKworCWZyZWVfdmFyaWFibGVz X3BvaW50ZXJzKGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbl9udmFyaWFibGVz KTsKKwlkZXN0aW5hdGlvbiA9IHBnX3JlYWxsb2MoZGVzdGluYXRpb24sIHNp emVvZihWYXJpYWJsZSkgKiBzb3VyY2VfbnZhcmlhYmxlcyk7CisKKwlmb3Ig KGN1cnJlbnRfc291cmNlID0gc291cmNlLCBjdXJyZW50X2Rlc3RpbmF0aW9u ID0gZGVzdGluYXRpb247CisJCSBjdXJyZW50X3NvdXJjZSAtIHNvdXJjZSA8 IHNvdXJjZV9udmFyaWFibGVzOworCQkgKytjdXJyZW50X3NvdXJjZSwgKytj dXJyZW50X2Rlc3RpbmF0aW9uKQorCXsKKwkJY3VycmVudF9kZXN0aW5hdGlv bi0+bmFtZSA9IHBnX3N0cmR1cChjdXJyZW50X3NvdXJjZS0+bmFtZSk7CisJ CWlmIChjdXJyZW50X3NvdXJjZS0+dmFsdWUpCisJCQljdXJyZW50X2Rlc3Rp bmF0aW9uLT52YWx1ZSA9IHBnX3N0cmR1cChjdXJyZW50X3NvdXJjZS0+dmFs dWUpOworCQllbHNlCisJCQljdXJyZW50X2Rlc3RpbmF0aW9uLT52YWx1ZSA9 IE5VTEw7CisJCWN1cnJlbnRfZGVzdGluYXRpb24tPmlzX251bWVyaWMgPSBj dXJyZW50X3NvdXJjZS0+aXNfbnVtZXJpYzsKKwkJY3VycmVudF9kZXN0aW5h dGlvbi0+bnVtX3ZhbHVlID0gY3VycmVudF9zb3VyY2UtPm51bV92YWx1ZTsK Kwl9CisKKwlyZXR1cm4gZGVzdGluYXRpb247Cit9CisKIC8qCiAgKiBBZHZh bmNlIHRoZSBzdGF0ZSBtYWNoaW5lIG9mIGEgY29ubmVjdGlvbiwgaWYgcG9z c2libGUuCiAgKi8KQEAgLTE5NjIsNiArMjA4OSwxNCBAQCBkb0N1c3RvbShU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJ aW5zdHJfdGltZQlub3c7CiAJYm9vbAkJZW5kX3R4X3Byb2Nlc3NlZCA9IGZh bHNlOwogCWludDY0CQl3YWl0OworCWJvb2wJCXNlcmlhbGl6YXRpb25fZmFp bHVyZSA9IGZhbHNlOworCWJvb2wJCWRlYWRsb2NrX2ZhaWx1cmUgPSBmYWxz ZTsKKwlFeGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOworCWNoYXIJICAg KnNxbFN0YXRlOworCWludCAJCWxhc3RfYmVnaW5fY29tbWFuZDsKKwlDb21t YW5kICAgICpsYXN0X2JlZ2luOworCWludCAJCWF0dGVtcHRzX251bWJlcjsK KwlpbnQgCQl0cmFuc2FjdGlvbl9lbmQ7CiAKIAkvKgogCSAqIGdldHRpbWVv ZmRheSgpIGlzbid0IGZyZWUsIHNvIHdlIGdldCB0aGUgY3VycmVudCB0aW1l c3RhbXAgbGF6aWx5IHRoZQpAQCAtMTk5MCw3ICsyMTI1LDcgQEAgZG9DdXN0 b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdn KQogCQkJCSAqLwogCQkJY2FzZSBDU1RBVEVfQ0hPT1NFX1NDUklQVDoKIAot CQkJCXN0LT51c2VfZmlsZSA9IGNob29zZVNjcmlwdCh0aHJlYWQpOworCQkJ CXN0LT51c2VfZmlsZSA9IGNob29zZVNjcmlwdChzdCk7CiAKIAkJCQlpZiAo ZGVidWcpCiAJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVkIGV4ZWN1 dGluZyBzY3JpcHQgXCIlc1wiXG4iLCBzdC0+aWQsCkBAIC0yMDE3LDcgKzIx NTIsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg U3RhdHNEYXRhICphZ2cpCiAJCQkJICogYXdheS4KIAkJCQkgKi8KIAkJCQlB c3NlcnQodGhyb3R0bGVfZGVsYXkgPiAwKTsKLQkJCQl3YWl0ID0gZ2V0UG9p c3NvblJhbmQodGhyZWFkLCB0aHJvdHRsZV9kZWxheSk7CisJCQkJd2FpdCA9 IGdldFBvaXNzb25SYW5kKHN0LCB0aHJvdHRsZV9kZWxheSk7CiAKIAkJCQl0 aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgKz0gd2FpdDsKIAkJCQlzdC0+dHhu X3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsKQEAgLTIw NDksNyArMjE4NCw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3Rh dGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJewogCQkJCQkJcHJvY2Vz c1hhY3RTdGF0cyh0aHJlYWQsIHN0LCAmbm93LCB0cnVlLCBhZ2cpOwogCQkJ CQkJLyogbmV4dCByZW5kZXotdm91cyAqLwotCQkJCQkJd2FpdCA9IGdldFBv aXNzb25SYW5kKHRocmVhZCwgdGhyb3R0bGVfZGVsYXkpOworCQkJCQkJd2Fp dCA9IGdldFBvaXNzb25SYW5kKHN0LCB0aHJvdHRsZV9kZWxheSk7CiAJCQkJ CQl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgKz0gd2FpdDsKIAkJCQkJCXN0 LT50eG5fc2NoZWR1bGVkID0gdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyOwog CQkJCQl9CkBAIC0yMTIxLDYgKzIyNTYsMTEgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCQkJ c3QtPnR4bl9zY2hlZHVsZWQgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhu b3cpOwogCQkJCX0KIAorCQkJCS8qIHJlc2V0IHRyYW5zYWN0aW9uIHZhcmlh YmxlcyB0byBkZWZhdWx0IHZhbHVlcyAqLworCQkJCXN0LT5zZXJpYWxpemF0 aW9uX2ZhaWx1cmUgPSBmYWxzZTsKKwkJCQlzdC0+ZGVhZGxvY2tfZmFpbHVy ZSA9IGZhbHNlOworCQkJCWluaXRTaW1wbGVTdGF0cygmc3QtPmF0dGVtcHRz KTsKKwogCQkJCS8qIEJlZ2luIHdpdGggdGhlIGZpcnN0IGNvbW1hbmQgKi8K IAkJCQlzdC0+Y29tbWFuZCA9IDA7CiAJCQkJc3QtPnN0YXRlID0gQ1NUQVRF X1NUQVJUX0NPTU1BTkQ7CkBAIC0yMTQyLDExICsyMjgyLDM5IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQkJYnJlYWs7CiAJCQkJfQogCisJCQkJLyogcmVzZXQgY29tbWFu ZCByZXN1bHQgdmFyaWFibGVzIHRvIGRlZmF1bHQgdmFsdWVzICovCisJCQkJ c2VyaWFsaXphdGlvbl9mYWlsdXJlID0gZmFsc2U7CisJCQkJZGVhZGxvY2tf ZmFpbHVyZSA9IGZhbHNlOworCisJCQkJaWYgKGNvbW1hbmQtPmlzX3RyYW5z YWN0aW9uX2JlZ2luICYmICFzdC0+bGFzdF9iZWdpbl9zdGF0ZSkKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIEl0IGlzIGEgZmlyc3QgYXR0ZW1wdCB0byBy dW4gdGhlIHRyYW5zYWN0aW9uIHdoaWNoIGJlZ2lucworCQkJCQkgKiBpbiBj dXJyZW50IGNvbW1hbmQuICBSZW1lbWJlciBpdHMgcGFyYW1ldGVycyBqdXN0 IGluIGNhc2UKKwkJCQkJICogd2Ugc2hvdWxkIHJlcGVhdCBpdCBpbiBmdXR1 cmUuCisJCQkJCSAqLworCQkJCQlzdC0+bGFzdF9iZWdpbl9zdGF0ZSA9IChM YXN0QmVnaW5TdGF0ZSAqKQorCQkJCQkJcGdfbWFsbG9jMChzaXplb2YoTGFz dEJlZ2luU3RhdGUpKTsKKworCQkJCQlzdC0+bGFzdF9iZWdpbl9zdGF0ZS0+ Y29tbWFuZCA9IHN0LT5jb21tYW5kOworCQkJCQlzdC0+bGFzdF9iZWdpbl9z dGF0ZS0+YXR0ZW1wdHNfbnVtYmVyID0gMTsKKwkJCQkJbWVtY3B5KHN0LT5s YXN0X2JlZ2luX3N0YXRlLT5yYW5kb21fc3RhdGUsIHN0LT5yYW5kb21fc3Rh dGUsCisJCQkJCQkgICBzaXplb2YodW5zaWduZWQgc2hvcnQpICogMyk7CisK KwkJCQkJc3QtPmxhc3RfYmVnaW5fc3RhdGUtPnZhcmlhYmxlcyA9IGNvcHlf dmFyaWFibGVzKAorCQkJCQkJCQkJCQlzdC0+bGFzdF9iZWdpbl9zdGF0ZS0+ dmFyaWFibGVzLAorCQkJCQkJCQkJCQlzdC0+bGFzdF9iZWdpbl9zdGF0ZS0+ bnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJc3QtPnZhcmlhYmxlcywKKwkJCQkJ CQkJCQkJc3QtPm52YXJpYWJsZXMpOworCQkJCQlzdC0+bGFzdF9iZWdpbl9z dGF0ZS0+bnZhcmlhYmxlcyA9IHN0LT5udmFyaWFibGVzOworCQkJCQlzdC0+ bGFzdF9iZWdpbl9zdGF0ZS0+dmFyc19zb3J0ZWQgPSBzdC0+dmFyc19zb3J0 ZWQ7CisJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBSZWNvcmQgc3RhdGVtZW50 IHN0YXJ0IHRpbWUgaWYgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzIGFyZQogCQkJ CSAqIHJlcXVlc3RlZAogCQkJCSAqLwotCQkJCWlmIChpc19sYXRlbmNpZXMp CisJCQkJaWYgKHJlcG9ydF9wZXJfY29tbWFuZCkKIAkJCQl7CiAJCQkJCWlm IChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkKIAkJCQkJCUlOU1RSX1RJTUVf U0VUX0NVUlJFTlQobm93KTsKQEAgLTIyOTksMjEgKzI0NjcsNDEgQEAgZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAq YWdnKQogCQkJCSAqIFJlYWQgYW5kIGRpc2NhcmQgdGhlIHF1ZXJ5IHJlc3Vs dDsKIAkJCQkgKi8KIAkJCQlyZXMgPSBQUWdldFJlc3VsdChzdC0+Y29uKTsK LQkJCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlcykpCisJCQkJcmVzdWx0 X3N0YXR1cyA9IFBRcmVzdWx0U3RhdHVzKHJlcyk7CisJCQkJc3FsU3RhdGUg PSBQUXJlc3VsdEVycm9yRmllbGQocmVzLCBQR19ESUFHX1NRTFNUQVRFKTsK KwkJCQlpZiAoc3FsU3RhdGUpIHsKKwkJCQkJc2VyaWFsaXphdGlvbl9mYWls dXJlID0KKwkJCQkJCShzdHJjbXAoc3FsU3RhdGUsIEVSUkNPREVfVF9SX1NF UklBTElaQVRJT05fRkFJTFVSRSkgPT0KKwkJCQkJCSAwKTsKKwkJCQkJZGVh ZGxvY2tfZmFpbHVyZSA9CisJCQkJCQlzdHJjbXAoc3FsU3RhdGUsIEVSUkNP REVfVF9SX0RFQURMT0NLX0RFVEVDVEVEKSA9PSAwOworCisJCQkJCWlmIChk ZWJ1ZyAmJiAoc2VyaWFsaXphdGlvbl9mYWlsdXJlIHx8IGRlYWRsb2NrX2Zh aWx1cmUpKQorCQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgZ290 IGEgJXMgZmFpbHVyZSAoYXR0ZW1wdCAlZC8lZClcbiIsCisJCQkJCQkJCXN0 LT5pZCwKKwkJCQkJCQkJKHNlcmlhbGl6YXRpb25fZmFpbHVyZSA/CisJCQkJ CQkJCSAic2VyaWFsaXphdGlvbiIgOgorCQkJCQkJCQkgImRlYWRsb2NrIiks CisJCQkJCQkJCXN0LT5sYXN0X2JlZ2luX3N0YXRlLT5hdHRlbXB0c19udW1i ZXIsCisJCQkJCQkJCW1heF9hdHRlbXB0c19udW1iZXIpOworCQkJCX0KKwor CQkJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPTU1BTkRfT0sgfHwK KwkJCQkJcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19UVVBMRVNfT0sgfHwKKwkJ CQkJcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19FTVBUWV9RVUVSWSB8fAorCQkJ CQlzZXJpYWxpemF0aW9uX2ZhaWx1cmUgfHwKKwkJCQkJZGVhZGxvY2tfZmFp bHVyZSkKIAkJCQl7Ci0JCQkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoKLQkJ CQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6Ci0JCQkJCWNhc2UgUEdSRVNfRU1Q VFlfUVVFUlk6Ci0JCQkJCQkvKiBPSyAqLwotCQkJCQkJUFFjbGVhcihyZXMp OwotCQkJCQkJZGlzY2FyZF9yZXNwb25zZShzdCk7Ci0JCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfRU5EX0NPTU1BTkQ7Ci0JCQkJCQlicmVhazsKLQkJCQkJ ZGVmYXVsdDoKLQkJCQkJCWNvbW1hbmRGYWlsZWQoc3QsIFBRZXJyb3JNZXNz YWdlKHN0LT5jb24pKTsKLQkJCQkJCVBRY2xlYXIocmVzKTsKLQkJCQkJCXN0 LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwotCQkJCQkJYnJlYWs7CisJCQkJ CS8qIE9LICovCisJCQkJCVBRY2xlYXIocmVzKTsKKwkJCQkJZGlzY2FyZF9y ZXNwb25zZShzdCk7CisJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfQ09N TUFORDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJY29tbWFuZEZh aWxlZChzdCwgUFFlcnJvck1lc3NhZ2Uoc3QtPmNvbikpOworCQkJCQlQUWNs ZWFyKHJlcyk7CisJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwog CQkJCX0KIAkJCQlicmVhazsKIApAQCAtMjMzNywxMiArMjUyNSw3MCBAQCBk b0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAJCQkJICovCiAJCQljYXNlIENTVEFURV9FTkRfQ09NTUFORDoK IAorCQkJCWlmIChzdC0+bGFzdF9iZWdpbl9zdGF0ZSkKKwkJCQl7CisJCQkJ CWxhc3RfYmVnaW5fY29tbWFuZCA9IHN0LT5sYXN0X2JlZ2luX3N0YXRlLT5j b21tYW5kOworCQkJCQlsYXN0X2JlZ2luID0KKwkJCQkJCXNxbF9zY3JpcHRb c3QtPnVzZV9maWxlXS5jb21tYW5kc1tsYXN0X2JlZ2luX2NvbW1hbmRdOwor CQkJCQl0cmFuc2FjdGlvbl9lbmQgPSBsYXN0X2JlZ2luLT50cmFuc2FjdGlv bl9lbmQ7CisJCQkJCWF0dGVtcHRzX251bWJlciA9IHN0LT5sYXN0X2JlZ2lu X3N0YXRlLT5hdHRlbXB0c19udW1iZXI7CisKKwkJCQkJaWYgKChzdC0+Y29t bWFuZCA9PSB0cmFuc2FjdGlvbl9lbmQpICYmCisJCQkJCQkoKCFzdC0+ZW5k X2ZhaWxlZF90cmFuc2FjdGlvbl9ibG9jayAmJgorCQkJCQkJICAhc2VyaWFs aXphdGlvbl9mYWlsdXJlICYmCisJCQkJCQkgICFkZWFkbG9ja19mYWlsdXJl KSB8fAorCQkJCQkJIGF0dGVtcHRzX251bWJlciA9PSBtYXhfYXR0ZW1wdHNf bnVtYmVyKSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIEl0IGlzIHRo ZSBlbmQgb2YgdHJhbnNhY3Rpb24gYW5kOgorCQkJCQkJICogMSkgdGhpcyB0 cmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bDsKKwkJCQkJCSAqIDIpIG9yIHRo aXMgdHJhbnNhY3Rpb24gaGFzIGZhaWxlZCBhbmQgd2Ugd2lsbCBub3QgYmUK KwkJCQkJCSAqIGFibGUgdG8gcmVwZWF0IGl0LgorCQkJCQkJICoKKwkJCQkJ CSAqIFNvIGxldCdzIHJlY29yZCBpdHMgbnVtYmVyIG9mIGF0dGVtcHRzIGlu IHN0YXRpc3RpY3MKKwkJCQkJCSAqIHBlci1jb21tYW5kIGFuZCBmb3IgY3Vy cmVudCBzY3JpcHQgZXhlY3V0aW9uLiAgQWxzbworCQkJCQkJICogbGV0J3Mg ZnJlZSBpdHMgYmVnaW4gc3RhdGUgYmVjYXVzZSB3ZSBkb24ndCBub3QgbmVl ZAorCQkJCQkJICogaXQgYW55bW9yZS4KKwkJCQkJCSAqLworCQkJCQkJaWYg KGRlYnVnKQorCQkJCQkJeworCQkJCQkJCWNoYXIJCWJ1ZmZlclsyNTZdOwor CisJCQkJCQkJaWYgKHNlcmlhbGl6YXRpb25fZmFpbHVyZSB8fAorCQkJCQkJ CQlkZWFkbG9ja19mYWlsdXJlIHx8CisJCQkJCQkJCXN0LT5lbmRfZmFpbGVk X3RyYW5zYWN0aW9uX2Jsb2NrKQorCQkJCQkJCQlzbnByaW50ZihidWZmZXIs IHNpemVvZihidWZmZXIpLCAiZmFpbHVyZSIpOworCQkJCQkJCWVsc2UKKwkJ CQkJCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgInN1Y2Nl c3NmdWwiKTsKKworCQkJCQkJCWZwcmludGYoc3RkZXJyLCAiY2xpZW50ICVk IGVuZHMgdHJhbnNhY3Rpb24gd2l0aCAlZCBhdHRlbXB0cyAoJXMpXG4iLAor CQkJCQkJCQkJc3QtPmlkLCBhdHRlbXB0c19udW1iZXIsIGJ1ZmZlcik7CisJ CQkJCQl9CisKKwkJCQkJCWFkZFRvU2ltcGxlU3RhdHMoJmxhc3RfYmVnaW4t PmF0dGVtcHRzLAorCQkJCQkJCQkJCSBhdHRlbXB0c19udW1iZXIpOworCQkJ CQkJYWRkVG9TaW1wbGVTdGF0cygmc3QtPmF0dGVtcHRzLCBhdHRlbXB0c19u dW1iZXIpOworCisJCQkJCQlmcmVlX3ZhcmlhYmxlc19wb2ludGVycygKKwkJ CQkJCQkJCQkJc3QtPmxhc3RfYmVnaW5fc3RhdGUtPnZhcmlhYmxlcywKKwkJ CQkJCQkJCQkJc3QtPmxhc3RfYmVnaW5fc3RhdGUtPm52YXJpYWJsZXMpOwor CQkJCQkJcGdfZnJlZShzdC0+bGFzdF9iZWdpbl9zdGF0ZSk7CisJCQkJCQlz dC0+bGFzdF9iZWdpbl9zdGF0ZSA9IE5VTEw7CisJCQkJCX0KKwkJCQl9CisK KwkJCQlpZiAoc2VyaWFsaXphdGlvbl9mYWlsdXJlIHx8IGRlYWRsb2NrX2Zh aWx1cmUpCisJCQkJeworCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRkFJTFVS RTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBjb21t YW5kIGNvbXBsZXRlZDogYWNjdW11bGF0ZSBwZXItY29tbWFuZCBleGVjdXRp b24gdGltZXMKIAkJCQkgKiBpbiB0aHJlYWQtbG9jYWwgZGF0YSBzdHJ1Y3R1 cmUsIGlmIHBlci1jb21tYW5kIGxhdGVuY2llcwogCQkJCSAqIGFyZSByZXF1 ZXN0ZWQuCiAJCQkJICovCi0JCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJCQlp ZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJCXsKIAkJCQkJaWYgKElOU1RS X1RJTUVfSVNfWkVSTyhub3cpKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChub3cpOwpAQCAtMjM1NCw4ICsyNjAwLDEwMiBAQCBkb0N1c3RvbShU U3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJ CQkJCQkJCQkgSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0LT5zdG10X2JlZ2lu KSk7CiAJCQkJfQogCi0JCQkJLyogR28gYWhlYWQgd2l0aCBuZXh0IGNvbW1h bmQgKi8KLQkJCQlzdC0+Y29tbWFuZCsrOworCQkJCWlmIChzdC0+ZW5kX2Zh aWxlZF90cmFuc2FjdGlvbl9ibG9jayAmJgorCQkJCQlhdHRlbXB0c19udW1i ZXIgPCBtYXhfYXR0ZW1wdHNfbnVtYmVyKQorCQkJCXsKKwkJCQkJc3QtPmNv bW1hbmQgPSBsYXN0X2JlZ2luX2NvbW1hbmQ7CisJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9SRVRSWV9GQUlMRURfVFJBTlNBQ1RJT047CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCS8qIEdvIGFoZWFkIHdpdGggbmV4dCBjb21t YW5kICovCisJCQkJCXN0LT5jb21tYW5kKys7CisJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9TVEFSVF9DT01NQU5EOworCQkJCX0KKwkJCQlzdC0+ZW5kX2Zh aWxlZF90cmFuc2FjdGlvbl9ibG9jayA9IGZhbHNlOworCisJCQkJYnJlYWs7 CisKKwkJCQkvKgorCQkJCSAqIFJlcG9ydCBhYm91dCBmYWlsdXJlIGFuZCBl bmQgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jay4KKwkJCQkgKi8KKwkJ CWNhc2UgQ1NUQVRFX0ZBSUxVUkU6CisKKwkJCQkvKgorCQkJCSAqIEFjY3Vt dWxhdGUgcGVyLWNvbW1hbmQgc2VyaWFsaXphdGlvbiAvIGRlYWRsb2NrIGZh aWx1cmVzCisJCQkJICogY291bnQgaW4gdGhyZWFkLWxvY2FsIGRhdGEgc3Ry dWN0dXJlLgorCQkJCSAqLworCQkJCWlmIChzZXJpYWxpemF0aW9uX2ZhaWx1 cmUpCisJCQkJCWNvbW1hbmQtPnNlcmlhbGl6YXRpb25fZmFpbHVyZXMrKzsK KwkJCQlpZiAoZGVhZGxvY2tfZmFpbHVyZSkKKwkJCQkJY29tbWFuZC0+ZGVh ZGxvY2tfZmFpbHVyZXMrKzsKKworCQkJCWlmIChhdHRlbXB0c19udW1iZXIg PT0gbWF4X2F0dGVtcHRzX251bWJlcikKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIFdlIHdpbGwgbm90IGJlIGFibGUgdG8gcmVwZWF0IHRoZSBmYWlsZWQg dHJhbnNhY3Rpb24KKwkJCQkJICogc28gbGV0J3MgcmVjb3JkIHRoaXMgZmFp bHVyZSBpbiB0aGUgc3RhdHMgZm9yIGN1cnJlbnQKKwkJCQkJICogc2NyaXB0 IGV4ZWN1dGlvbi4KKwkJCQkJICovCisJCQkJCWlmIChzZXJpYWxpemF0aW9u X2ZhaWx1cmUpCisJCQkJCQlzdC0+c2VyaWFsaXphdGlvbl9mYWlsdXJlID0g dHJ1ZTsKKwkJCQkJZWxzZSBpZiAoZGVhZGxvY2tfZmFpbHVyZSkKKwkJCQkJ CXN0LT5kZWFkbG9ja19mYWlsdXJlID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQlp ZiAoc3QtPmNvbW1hbmQgIT0gdHJhbnNhY3Rpb25fZW5kKQorCQkJCXsKKwkJ CQkJLyogZW5kIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2sgKi8KKwkJ CQkJc3QtPmNvbW1hbmQgPSB0cmFuc2FjdGlvbl9lbmQ7CisJCQkJCXN0LT5l bmRfZmFpbGVkX3RyYW5zYWN0aW9uX2Jsb2NrID0gdHJ1ZTsKKwkJCQkJc3Qt PnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7CisJCQkJfQorCQkJCWVs c2UKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFdlIGFyZSBub3QgaW4gdHJh bnNhY3Rpb24gYmxvY2suICBTbyBsZXQncyB0cnkgdG8gcmVwZWF0CisJCQkJ CSAqIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gb3IgZ28gYWhlYWQgd2l0aCBu ZXh0IGNvbW1hbmQuCisJCQkJCSAqLworCQkJCQlpZiAoYXR0ZW1wdHNfbnVt YmVyIDwgbWF4X2F0dGVtcHRzX251bWJlcikKKwkJCQkJeworCQkJCQkJc3Qt PmNvbW1hbmQgPSBsYXN0X2JlZ2luX2NvbW1hbmQ7CisJCQkJCQlzdC0+c3Rh dGUgPSBDU1RBVEVfUkVUUllfRkFJTEVEX1RSQU5TQUNUSU9OOworCQkJCQl9 CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJc3QtPmNvbW1hbmQrKzsKKwkJ CQkJCXN0LT5zdGF0ZSA9IENTVEFURV9TVEFSVF9DT01NQU5EOworCQkJCQl9 CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiBTZXQgdGhl IHBhcmFtZXRlcnMgdG8gcmV0cnkgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbi4K KwkJCQkgKi8KKwkJCWNhc2UgQ1NUQVRFX1JFVFJZX0ZBSUxFRF9UUkFOU0FD VElPTjoKKworCQkJCS8qCisJCQkJICogV2UgYXNzdW1lIHRoYXQgdHJhbnNh Y3Rpb24gYXR0ZW1wdHMgbnVtYmVyICh3aGljaCBzaG91bGQgYmUKKwkJCQkg KiBsaW1pdGVkIGJ5IG1heF9hdHRlbXB0c19udW1iZXIpIHdhcyBjaGVja2Vk IGVhcmxpZXIuCisJCQkJICovCisJCQkJaWYgKGRlYnVnKQorCQkJCQlmcHJp bnRmKHN0ZGVyciwgImNsaWVudCAlZCByZXBlYXRzIHRoZSBmYWlsZWQgdHJh bnNhY3Rpb24gKGF0dGVtcHQgJWQvJWQpXG4iLAorCQkJCQkJCXN0LT5pZCwK KwkJCQkJCQlzdC0+bGFzdF9iZWdpbl9zdGF0ZS0+YXR0ZW1wdHNfbnVtYmVy ICsgMSwKKwkJCQkJCQltYXhfYXR0ZW1wdHNfbnVtYmVyKTsKKworCQkJCXN0 LT5sYXN0X2JlZ2luX3N0YXRlLT5hdHRlbXB0c19udW1iZXIrKzsKKwkJCQlt ZW1jcHkoc3QtPnJhbmRvbV9zdGF0ZSwgc3QtPmxhc3RfYmVnaW5fc3RhdGUt PnJhbmRvbV9zdGF0ZSwKKwkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIHNob3J0 KSAqIDMpOworCisJCQkJc3QtPnZhcmlhYmxlcyA9IGNvcHlfdmFyaWFibGVz KAorCQkJCQkJCQkJCQlzdC0+dmFyaWFibGVzLAorCQkJCQkJCQkJCQlzdC0+ bnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJc3QtPmxhc3RfYmVnaW5fc3RhdGUt PnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJc3QtPmxhc3RfYmVnaW5fc3RhdGUt Pm52YXJpYWJsZXMpOworCQkJCXN0LT5udmFyaWFibGVzID0gc3QtPmxhc3Rf YmVnaW5fc3RhdGUtPm52YXJpYWJsZXM7CisJCQkJc3QtPnZhcnNfc29ydGVk ID0gc3QtPmxhc3RfYmVnaW5fc3RhdGUtPnZhcnNfc29ydGVkOworCiAJCQkJ c3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7CiAJCQkJYnJlYWs7 CiAKQEAgLTIzNzIsNyArMjcxMiw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJcGVyX3Nj cmlwdF9zdGF0cyB8fCB1c2VfbG9nKQogCQkJCQlwcm9jZXNzWGFjdFN0YXRz KHRocmVhZCwgc3QsICZub3csIGZhbHNlLCBhZ2cpOwogCQkJCWVsc2UKLQkJ CQkJdGhyZWFkLT5zdGF0cy5jbnQrKzsKKwkJCQkJYWNjdW1NYWluU3RhdHMo JnRocmVhZC0+c3RhdHMsIGZhbHNlLAorCQkJCQkJCQkgICBzdC0+c2VyaWFs aXphdGlvbl9mYWlsdXJlLAorCQkJCQkJCQkgICBzdC0+ZGVhZGxvY2tfZmFp bHVyZSwgJnN0LT5hdHRlbXB0cyk7CiAKIAkJCQlpZiAoaXNfY29ubmVjdCkK IAkJCQl7CkBAIC0yNDI2LDYgKzI3NjgsMTUgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogfQogCiAv KgorICogcmV0dXJuIHplcm8gaWYgdGhlcmUgaXMgbm8gc3RhdGlzdGljcyBk YXRhIGJlY2F1c2Ugb2Ygc2tpcHBlZCB0cmFuc2FjdGlvbnMuCisgKi8KK3N0 YXRpYyBkb3VibGUKK2dldF9hdmVyYWdlX2F0dGVtcHRzKGNvbnN0IFNpbXBs ZVN0YXRzICphdHRlbXB0cykKK3sKKwlyZXR1cm4gKGF0dGVtcHRzLT5jb3Vu dCA9PSAwID8gMCA6IGF0dGVtcHRzLT5zdW0gLyBhdHRlbXB0cy0+Y291bnQp OworfQorCisvKgogICogUHJpbnQgbG9nIGVudHJ5IGFmdGVyIGNvbXBsZXRp bmcgb25lIHRyYW5zYWN0aW9uLgogICoKICAqIFdlIHByaW50IFVuaXgtZXBv Y2ggdGltZXN0YW1wcyBpbiB0aGUgbG9nLCBzbyB0aGF0IGVudHJpZXMgY2Fu IGJlCkBAIC0yNDQ2LDcgKzI3OTcsNyBAQCBkb0xvZyhUU3RhdGUgKnRocmVh ZCwgQ1N0YXRlICpzdCwKIAkgKiB0byB0aGUgcmFuZG9tIHNhbXBsZS4KIAkg Ki8KIAlpZiAoc2FtcGxlX3JhdGUgIT0gMC4wICYmCi0JCXBnX2VyYW5kNDgo dGhyZWFkLT5yYW5kb21fc3RhdGUpID4gc2FtcGxlX3JhdGUpCisJCXBnX2Vy YW5kNDgoc3QtPnJhbmRvbV9zdGF0ZSkgPiBzYW1wbGVfcmF0ZSkKIAkJcmV0 dXJuOwogCiAJLyogc2hvdWxkIHdlIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0cyBv ciBub3Q/ICovCkBAIC0yNDYyLDEzICsyODEzLDIwIEBAIGRvTG9nKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCQl3aGlsZSAoYWdnLT5zdGFydF90 aW1lICsgYWdnX2ludGVydmFsIDw9IG5vdykKIAkJewogCQkJLyogcHJpbnQg YWdncmVnYXRlZCByZXBvcnQgdG8gbG9nZmlsZSAqLwotCQkJZnByaW50Zihs b2dmaWxlLCAiJWxkICIgSU5UNjRfRk9STUFUICIgJS4wZiAlLjBmICUuMGYg JS4wZiIsCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9GT1JN QVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmICIgSU5UNjRfRk9STUFUICIgIiBJ TlQ2NF9GT1JNQVQgIiAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBm ICUuMGYiLAogCQkJCQkobG9uZykgYWdnLT5zdGFydF90aW1lLAogCQkJCQlh Z2ctPmNudCwKIAkJCQkJYWdnLT5sYXRlbmN5LnN1bSwKIAkJCQkJYWdnLT5s YXRlbmN5LnN1bTIsCiAJCQkJCWFnZy0+bGF0ZW5jeS5taW4sCi0JCQkJCWFn Zy0+bGF0ZW5jeS5tYXgpOworCQkJCQlhZ2ctPmxhdGVuY3kubWF4LAorCQkJ CQlhZ2ctPnNlcmlhbGl6YXRpb25fZmFpbHVyZXMsCisJCQkJCWFnZy0+ZGVh ZGxvY2tfZmFpbHVyZXMsCisJCQkJCWFnZy0+YXR0ZW1wdHMuY291bnQsCisJ CQkJCWFnZy0+YXR0ZW1wdHMuc3VtLAorCQkJCQlhZ2ctPmF0dGVtcHRzLnN1 bTIsCisJCQkJCWFnZy0+YXR0ZW1wdHMubWluLAorCQkJCQlhZ2ctPmF0dGVt cHRzLm1heCk7CiAJCQlpZiAodGhyb3R0bGVfZGVsYXkpCiAJCQl7CiAJCQkJ ZnByaW50Zihsb2dmaWxlLCAiICUuMGYgJS4wZiAlLjBmICUuMGYiLApAQCAt MjQ4NiwyMiArMjg0NCwzNCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwKIAkJfQogCiAJCS8qIGFjY3VtdWxhdGUgdGhlIGN1cnJlbnQg dHJhbnNhY3Rpb24gKi8KLQkJYWNjdW1TdGF0cyhhZ2csIHNraXBwZWQsIGxh dGVuY3ksIGxhZyk7CisJCWFjY3VtU3RhdHMoYWdnLCBza2lwcGVkLCBzdC0+ c2VyaWFsaXphdGlvbl9mYWlsdXJlLAorCQkJCSAgIHN0LT5kZWFkbG9ja19m YWlsdXJlLCBsYXRlbmN5LCBsYWcsICZzdC0+YXR0ZW1wdHMpOwogCX0KIAll bHNlCiAJewogCQkvKiBubywgcHJpbnQgcmF3IHRyYW5zYWN0aW9ucyAqLwog CQlzdHJ1Y3QgdGltZXZhbCB0djsKKwkJY2hhcgkJdHJhbnNhY3Rpb25fbGFi ZWxbMjU2XTsKKwkJZG91YmxlCQlhdHRlbXB0c19hdmcgPSBnZXRfYXZlcmFn ZV9hdHRlbXB0cygmc3QtPmF0dGVtcHRzKTsKIAotCQlnZXR0aW1lb2ZkYXko JnR2LCBOVUxMKTsKIAkJaWYgKHNraXBwZWQpCi0JCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIHNraXBwZWQgJWQgJWxkICVsZCIs Ci0JCQkJCXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLAotCQkJCQko bG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJCQlzbnBy aW50Zih0cmFuc2FjdGlvbl9sYWJlbCwgc2l6ZW9mKHRyYW5zYWN0aW9uX2xh YmVsKSwgInNraXBwZWQiKTsKKwkJZWxzZSBpZiAoc3QtPnNlcmlhbGl6YXRp b25fZmFpbHVyZSAmJiBzdC0+ZGVhZGxvY2tfZmFpbHVyZSkKKwkJCXNucHJp bnRmKHRyYW5zYWN0aW9uX2xhYmVsLCBzaXplb2YodHJhbnNhY3Rpb25fbGFi ZWwpLAorCQkJCQkgInNlcmlhbGl6YXRpb25fYW5kX2RlYWRsb2NrX2ZhaWx1 cmVzIik7CisJCWVsc2UgaWYgKHN0LT5zZXJpYWxpemF0aW9uX2ZhaWx1cmUg fHwgc3QtPmRlYWRsb2NrX2ZhaWx1cmUpCisJCQlzbnByaW50Zih0cmFuc2Fj dGlvbl9sYWJlbCwgc2l6ZW9mKHRyYW5zYWN0aW9uX2xhYmVsKSwgIiVzX2Zh aWx1cmUiLAorCQkJCQkgc3QtPnNlcmlhbGl6YXRpb25fZmFpbHVyZSA/ICJz ZXJpYWxpemF0aW9uIiA6ICJkZWFkbG9jayIpOworCisJCWdldHRpbWVvZmRh eSgmdHYsIE5VTEwpOworCQlpZiAoc2tpcHBlZCB8fCBzdC0+c2VyaWFsaXph dGlvbl9mYWlsdXJlIHx8IHN0LT5kZWFkbG9ja19mYWlsdXJlKQorCQkJZnBy aW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiAlcyAlZCAlbGQg JWxkICUuMGYiLAorCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHRyYW5zYWN0aW9u X2xhYmVsLCBzdC0+dXNlX2ZpbGUsCisJCQkJCShsb25nKSB0di50dl9zZWMs IChsb25nKSB0di50dl91c2VjLCBhdHRlbXB0c19hdmcpOwogCQllbHNlCi0J CQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYg JWQgJWxkICVsZCIsCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0 X0ZPUk1BVCAiICUuMGYgJWQgJWxkICVsZCAlLjBmIiwKIAkJCQkJc3QtPmlk LCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+dXNlX2ZpbGUsCi0JCQkJCShsb25n KSB0di50dl9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKwkJCQkJKGxvbmcp IHR2LnR2X3NlYywgKGxvbmcpIHR2LnR2X3VzZWMsIGF0dGVtcHRzX2F2Zyk7 CiAJCWlmICh0aHJvdHRsZV9kZWxheSkKIAkJCWZwcmludGYobG9nZmlsZSwg IiAlLjBmIiwgbGFnKTsKIAkJZnB1dGMoJ1xuJywgbG9nZmlsZSk7CkBAIC0y NTIzLDcgKzI4OTMsNyBAQCBwcm9jZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpub3csCiAJaWYgKCghc2tp cHBlZCkgJiYgSU5TVFJfVElNRV9JU19aRVJPKCpub3cpKQogCQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKCpub3cpOwogCi0JaWYgKCFza2lwcGVkKQorCWlm ICghc2tpcHBlZCAmJiAhc3QtPnNlcmlhbGl6YXRpb25fZmFpbHVyZSAmJiAh c3QtPmRlYWRsb2NrX2ZhaWx1cmUpCiAJewogCQkvKiBjb21wdXRlIGxhdGVu Y3kgJiBsYWcgKi8KIAkJbGF0ZW5jeSA9IElOU1RSX1RJTUVfR0VUX01JQ1JP U0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQ7CkBAIC0yNTMyLDIxICsy OTAyLDI1IEBAIHByb2Nlc3NYYWN0U3RhdHMoVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsIGluc3RyX3RpbWUgKm5vdywKIAogCWlmIChwcm9ncmVzcyB8 fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0KQogCXsKLQkJYWNj dW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFn KTsKKwkJYWNjdW1TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgc3Qt PnNlcmlhbGl6YXRpb25fZmFpbHVyZSwKKwkJCQkgICBzdC0+ZGVhZGxvY2tf ZmFpbHVyZSwgbGF0ZW5jeSwgbGFnLCAmc3QtPmF0dGVtcHRzKTsKIAogCQkv KiBjb3VudCB0cmFuc2FjdGlvbnMgb3ZlciB0aGUgbGF0ZW5jeSBsaW1pdCwg aWYgbmVlZGVkICovCiAJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kg PiBsYXRlbmN5X2xpbWl0KQogCQkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsK IAl9CiAJZWxzZQotCQl0aHJlYWQtPnN0YXRzLmNudCsrOworCQlhY2N1bU1h aW5TdGF0cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgc3QtPnNlcmlhbGl6 YXRpb25fZmFpbHVyZSwKKwkJCQkJICAgc3QtPmRlYWRsb2NrX2ZhaWx1cmUs ICZzdC0+YXR0ZW1wdHMpOwogCiAJaWYgKHVzZV9sb2cpCiAJCWRvTG9nKHRo cmVhZCwgc3QsIGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsKIAogCS8q IFhYWCBjb3VsZCB1c2UgYSBtdXRleCBoZXJlLCBidXQgd2UgY2hvb3NlIG5v dCB0byAqLwogCWlmIChwZXJfc2NyaXB0X3N0YXRzKQotCQlhY2N1bVN0YXRz KCZzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNraXBwZWQsIGxh dGVuY3ksIGxhZyk7CisJCWFjY3VtU3RhdHMoJnNxbF9zY3JpcHRbc3QtPnVz ZV9maWxlXS5zdGF0cywgc2tpcHBlZCwKKwkJCQkgICBzdC0+c2VyaWFsaXph dGlvbl9mYWlsdXJlLCBzdC0+ZGVhZGxvY2tfZmFpbHVyZSwgbGF0ZW5jeSwK KwkJCQkgICBsYWcsICZzdC0+YXR0ZW1wdHMpOwogfQogCiAKQEAgLTI5ODUs NiArMzM1OSw5IEBAIHByb2Nlc3Nfc3FsX2NvbW1hbmQoUFFFeHBCdWZmZXIg YnVmLCBjb25zdCBjaGFyICpzb3VyY2UpCiAJbXlfY29tbWFuZC0+dHlwZSA9 IFNRTF9DT01NQU5EOwogCW15X2NvbW1hbmQtPmFyZ2MgPSAwOwogCWluaXRT aW1wbGVTdGF0cygmbXlfY29tbWFuZC0+c3RhdHMpOworCW15X2NvbW1hbmQt PnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgPSAwOworCW15X2NvbW1hbmQtPmRl YWRsb2NrX2ZhaWx1cmVzID0gMDsKKwlpbml0U2ltcGxlU3RhdHMoJm15X2Nv bW1hbmQtPmF0dGVtcHRzKTsKIAogCS8qCiAJICogSWYgU1FMIGNvbW1hbmQg aXMgbXVsdGktbGluZSwgd2Ugb25seSB3YW50IHRvIHNhdmUgdGhlIGZpcnN0 IGxpbmUgYXMKQEAgLTMwNTQsNiArMzQzMSw5IEBAIHByb2Nlc3NfYmFja3Ns YXNoX2NvbW1hbmQoUHNxbFNjYW5TdGF0ZSBzc3RhdGUsIGNvbnN0IGNoYXIg KnNvdXJjZSkKIAlteV9jb21tYW5kLT50eXBlID0gTUVUQV9DT01NQU5EOwog CW15X2NvbW1hbmQtPmFyZ2MgPSAwOwogCWluaXRTaW1wbGVTdGF0cygmbXlf Y29tbWFuZC0+c3RhdHMpOworCW15X2NvbW1hbmQtPnNlcmlhbGl6YXRpb25f ZmFpbHVyZXMgPSAwOworCW15X2NvbW1hbmQtPmRlYWRsb2NrX2ZhaWx1cmVz ID0gMDsKKwlpbml0U2ltcGxlU3RhdHMoJm15X2NvbW1hbmQtPmF0dGVtcHRz KTsKIAogCS8qIFNhdmUgZmlyc3Qgd29yZCAoY29tbWFuZCBuYW1lKSAqLwog CWogPSAwOwpAQCAtMzE4NSw2ICszNTY1LDYwIEBAIHByb2Nlc3NfYmFja3Ns YXNoX2NvbW1hbmQoUHNxbFNjYW5TdGF0ZSBzc3RhdGUsIGNvbnN0IGNoYXIg KnNvdXJjZSkKIH0KIAogLyoKKyAqIFJldHVybnMgdGhlIHNhbWUgY29tbWFu ZCB3aGVyZSBhbGwg0YFvbnRpbnVvdXMgYmxvY2tzIG9mIHdoaXRlc3BhY2Vz IGFyZQorICogcmVwbGFjZWQgYnkgb25lIHNwYWNlIHN5bWJvbC4KKyAqCisg KiBSZXR1cm5zIGEgbWFsbG9jJ2Qgc3RyaW5nLgorICovCitzdGF0aWMgY2hh ciAqCitub3JtYWxpemVfd2hpdGVzcGFjZXMoY29uc3QgY2hhciAqY29tbWFu ZCkKK3sKKwljb25zdCBjaGFyICpwdHIgPSBjb21tYW5kOworCWNoYXIJICAg KmJ1ZmZlciA9IHBnX21hbGxvYyhzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwlp bnQJCQlsZW5ndGggPSAwOworCisJd2hpbGUgKCpwdHIpCisJeworCQl3aGls ZSAoKnB0ciAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKnB0cikpCisJ CQlidWZmZXJbbGVuZ3RoKytdID0gKihwdHIrKyk7CisJCWlmIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKKwkJeworCQkJYnVmZmVyW2xlbmd0 aCsrXSA9ICcgJzsKKwkJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSAqcHRyKSkKKwkJCQlwdHIrKzsKKwkJfQorCX0KKwlidWZmZXJbbGVuZ3Ro XSA9ICdcMCc7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCisvKgorICogUmV0 dXJucyB0cnVlIGlmIGdpdmVuIGNvbW1hbmQgZ2VuZXJhbGx5IGVuZHMgYSB0 cmFuc2FjdGlvbiBibG9jayAod2UgZG9uJ3QKKyAqIGNoZWNrIGhlcmUgaWYg dGhlIGxhc3QgdHJhbnNhY3Rpb24gYmxvY2sgaXMgYWxyZWFkeSBjb21wbGV0 ZWQpLgorICovCitzdGF0aWMgYm9vbAoraXNfdHJhbnNhY3Rpb25fYmxvY2tf ZW5kKGNvbnN0IGNoYXIgKmNvbW1hbmRfdGV4dCkKK3sKKwlib29sCQlyZXN1 bHQgPSBmYWxzZTsKKwljaGFyCSAgICpjb21tYW5kID0gbm9ybWFsaXplX3do aXRlc3BhY2VzKGNvbW1hbmRfdGV4dCk7CisKKwlpZiAocGdfc3RybmNhc2Vj bXAoY29tbWFuZCwgImVuZCIsIDMpID09IDAgfHwKKwkJKHBnX3N0cm5jYXNl Y21wKGNvbW1hbmQsICJjb21taXQiLCA2KSA9PSAwICYmCisJCSBwZ19zdHJu Y2FzZWNtcChjb21tYW5kLCAiY29tbWl0IHByZXBhcmVkIiwgMTUpICE9IDAp IHx8CisJCShwZ19zdHJuY2FzZWNtcChjb21tYW5kLCAicm9sbGJhY2siLCA4 KSA9PSAwICYmCisJCSBwZ19zdHJuY2FzZWNtcChjb21tYW5kLCAicm9sbGJh Y2sgcHJlcGFyZWQiLCAxNykgIT0gMCAmJgorCQkgcGdfc3RybmNhc2VjbXAo Y29tbWFuZCwgInJvbGxiYWNrIHRvIiwgMTEpICE9IDApIHx8CisJCShwZ19z dHJuY2FzZWNtcChjb21tYW5kLCAicHJlcGFyZSB0cmFuc2FjdGlvbiAiLCAy MCkgPT0gMCAmJgorCQkgcGdfc3RybmNhc2VjbXAoY29tbWFuZCwgInByZXBh cmUgdHJhbnNhY3Rpb24gKCIsIDIxKSAhPSAwICYmCisJCSBwZ19zdHJuY2Fz ZWNtcChjb21tYW5kLCAicHJlcGFyZSB0cmFuc2FjdGlvbiBhcyAiLCAyMykg IT0gMCkpCisJCXJlc3VsdCA9IHRydWU7CisKKwlwZ19mcmVlKGNvbW1hbmQp OworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCiAgKiBQYXJzZSBhIHNjcmlw dCAoZWl0aGVyIHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIG9yIGEgYnVpbHQt aW4gc2NyaXB0KQogICogYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBzY3Jp cHRzLgogICovCkBAIC0zMTk2LDYgKzM2MzAsOCBAQCBQYXJzZVNjcmlwdChj b25zdCBjaGFyICpzY3JpcHQsIGNvbnN0IGNoYXIgKmRlc2MsIGludCB3ZWln aHQpCiAJUFFFeHBCdWZmZXJEYXRhIGxpbmVfYnVmOwogCWludAkJCWFsbG9j X251bTsKIAlpbnQJCQlpbmRleDsKKwlpbnQJCQlsYXN0X3RyYW5zYWN0aW9u X2Jsb2NrX2JlZ2luID0gLTE7CisJYm9vbAkJdHJhbnNhY3Rpb25fYmxvY2tf Y29tcGxldGVkID0gdHJ1ZTsKIAogI2RlZmluZSBDT01NQU5EU19BTExPQ19O VU0gMTI4CiAJYWxsb2NfbnVtID0gQ09NTUFORFNfQUxMT0NfTlVNOwpAQCAt MzIzOCw2ICszNjc0LDggQEAgUGFyc2VTY3JpcHQoY29uc3QgY2hhciAqc2Ny aXB0LCBjb25zdCBjaGFyICpkZXNjLCBpbnQgd2VpZ2h0KQogCQljb21tYW5k ID0gcHJvY2Vzc19zcWxfY29tbWFuZCgmbGluZV9idWYsIGRlc2MpOwogCQlp ZiAoY29tbWFuZCkKIAkJeworCQkJY2hhcgkgICAqY29tbWFuZF90ZXh0ID0g Y29tbWFuZC0+YXJndlswXTsKKwogCQkJcHMuY29tbWFuZHNbaW5kZXhdID0g Y29tbWFuZDsKIAkJCWluZGV4Kys7CiAKQEAgLTMyNDcsNiArMzY4NSwzNiBA QCBQYXJzZVNjcmlwdChjb25zdCBjaGFyICpzY3JpcHQsIGNvbnN0IGNoYXIg KmRlc2MsIGludCB3ZWlnaHQpCiAJCQkJcHMuY29tbWFuZHMgPSAoQ29tbWFu ZCAqKikKIAkJCQkJcGdfcmVhbGxvYyhwcy5jb21tYW5kcywgc2l6ZW9mKENv bW1hbmQgKikgKiBhbGxvY19udW0pOwogCQkJfQorCisJCQkvKiBjaGVjayBp ZiB0aGVyZSdzIHRoZSBiZWdpbiBvZiBuZXcgdHJhbnNhY3Rpb24gKi8KKwkJ CWlmICh0cmFuc2FjdGlvbl9ibG9ja19jb21wbGV0ZWQpCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBFYWNoIHNxbCBjb21tYW5kIG91dHNpZGUgb2YgdHJhbnNh Y3Rpb24gYmxvY2sgZWl0aGVyIHN0YXJ0cyBhCisJCQkJICogbmV3IHRyYW5z YWN0aW9uIGJsb2NrIG9yIGlzIHJ1biBhcyBzZXBhcmF0ZSB0cmFuc2FjdGlv bi4KKwkJCQkgKi8KKwkJCQljb21tYW5kLT5pc190cmFuc2FjdGlvbl9iZWdp biA9IHRydWU7CisKKwkJCQlpZiAocGdfc3RybmNhc2VjbXAoY29tbWFuZF90 ZXh0LCAiYmVnaW4iLCA1KSA9PSAwIHx8CisJCQkJCXBnX3N0cm5jYXNlY21w KGNvbW1hbmRfdGV4dCwgInN0YXJ0IiwgNSkgPT0gMCkKKwkJCQl7CisJCQkJ CWxhc3RfdHJhbnNhY3Rpb25fYmxvY2tfYmVnaW4gPSBpbmRleCAtIDE7CisJ CQkJCXRyYW5zYWN0aW9uX2Jsb2NrX2NvbXBsZXRlZCA9IGZhbHNlOworCQkJ CX0KKwkJCQllbHNlCisJCQkJeworCQkJCQljb21tYW5kLT50cmFuc2FjdGlv bl9lbmQgPSBpbmRleCAtIDE7CisJCQkJfQorCQkJfQorCisJCQkvKiBjaGVj ayBpZiBjb21tYW5kIGVuZHMgdGhlIHRyYW5zYWN0aW9uIGJsb2NrICovCisJ CQlpZiAoIXRyYW5zYWN0aW9uX2Jsb2NrX2NvbXBsZXRlZCAmJgorCQkJCWlz X3RyYW5zYWN0aW9uX2Jsb2NrX2VuZChjb21tYW5kX3RleHQpKQorCQkJewor CQkJCXBzLmNvbW1hbmRzW2xhc3RfdHJhbnNhY3Rpb25fYmxvY2tfYmVnaW5d LT50cmFuc2FjdGlvbl9lbmQgPQorCQkJCQlpbmRleCAtIDE7CisJCQkJdHJh bnNhY3Rpb25fYmxvY2tfY29tcGxldGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQog CiAJCS8qIElmIHdlIHJlYWNoZWQgYSBiYWNrc2xhc2gsIHByb2Nlc3MgdGhh dCAqLwpAQCAtMzI3Miw2ICszNzQwLDEzIEBAIFBhcnNlU2NyaXB0KGNvbnN0 IGNoYXIgKnNjcmlwdCwgY29uc3QgY2hhciAqZGVzYywgaW50IHdlaWdodCkK IAkJCWJyZWFrOwogCX0KIAorCWlmICghdHJhbnNhY3Rpb25fYmxvY2tfY29t cGxldGVkKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJzY3JpcHQgXCIlc1wi OiBsYXN0IHRyYW5zYWN0aW9uIGJsb2NrIGlzIG5vdCBjb21wbGV0ZWRcbiIs CisJCQkJZGVzYyk7CisJCWV4aXQoMSk7CisJfQorCiAJcHMuY29tbWFuZHNb aW5kZXhdID0gTlVMTDsKIAogCWFkZFNjcmlwdChwcyk7CkBAIC0zNDc0LDE0 ICszOTQ5LDM0IEBAIGFkZFNjcmlwdChQYXJzZWRTY3JpcHQgc2NyaXB0KQog fQogCiBzdGF0aWMgdm9pZAotcHJpbnRTaW1wbGVTdGF0cyhjaGFyICpwcmVm aXgsIFNpbXBsZVN0YXRzICpzcykKK3ByaW50U2ltcGxlU3RhdHMoY2hhciAq cHJlZml4LCBTaW1wbGVTdGF0cyAqc3MsIGJvb2wgcHJpbnRfemVyb3MsIGRv dWJsZSBmYWN0b3IsCisJCQkJIHVuc2lnbmVkIGludCBkZWNpbWFsc19udW1i ZXIsIGNoYXIgKnVuaXRfb2ZfbWVhc3VyZSkKIHsKLQkvKiBwcmludCBOYU4g aWYgbm8gdHJhbnNhY3Rpb25zIHdoZXJlIGV4ZWN1dGVkICovCi0JZG91Ymxl CQlsYXRlbmN5ID0gc3MtPnN1bSAvIHNzLT5jb3VudDsKLQlkb3VibGUJCXN0 ZGRldiA9IHNxcnQoc3MtPnN1bTIgLyBzcy0+Y291bnQgLSBsYXRlbmN5ICog bGF0ZW5jeSk7CisJZG91YmxlCQlhdmVyYWdlOworCWRvdWJsZQkJc3RkZGV2 OworCWNoYXIJCWJ1ZmZlclsyNTZdOworCisJaWYgKHByaW50X3plcm9zICYm IHNzLT5jb3VudCA9PSAwKQorCXsKKwkJYXZlcmFnZSA9IDA7CisJCXN0ZGRl diA9IDA7CisJfQorCWVsc2UKKwl7CisJCS8qIHByaW50IE5hTiBpZiBubyB0 cmFuc2FjdGlvbnMgd2hlcmUgZXhlY3V0ZWQgKi8KKwkJYXZlcmFnZSA9IHNz LT5zdW0gLyBzcy0+Y291bnQ7CisJCXN0ZGRldiA9IHNxcnQoc3MtPnN1bTIg LyBzcy0+Y291bnQgLSBhdmVyYWdlICogYXZlcmFnZSk7CisJfQorCisJaWYg KHN0cmxlbih1bml0X29mX21lYXN1cmUpID09IDApCisJCXNucHJpbnRmKGJ1 ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyAlJXMgPSAlJS4lZGZcbiIsCisJ CQkJIHByZWZpeCwgZGVjaW1hbHNfbnVtYmVyKTsKKwllbHNlCisJCXNucHJp bnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyAlJXMgPSAlJS4lZGYg JXNcbiIsCisJCQkJIHByZWZpeCwgZGVjaW1hbHNfbnVtYmVyLCB1bml0X29m X21lYXN1cmUpOwogCi0JcHJpbnRmKCIlcyBhdmVyYWdlID0gJS4zZiBtc1xu IiwgcHJlZml4LCAwLjAwMSAqIGxhdGVuY3kpOwotCXByaW50ZigiJXMgc3Rk ZGV2ID0gJS4zZiBtc1xuIiwgcHJlZml4LCAwLjAwMSAqIHN0ZGRldik7CisJ cHJpbnRmKGJ1ZmZlciwgImF2ZXJhZ2UiLCBmYWN0b3IgKiBhdmVyYWdlKTsK KwlwcmludGYoYnVmZmVyLCAic3RkZGV2IiwgZmFjdG9yICogc3RkZGV2KTsK IH0KIAogLyogcHJpbnQgb3V0IHJlc3VsdHMgKi8KQEAgLTM1MjIsNiArNDAx NywxNiBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0Rh dGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJaWYgKHRvdGFs LT5jbnQgPD0gMCkKIAkJcmV0dXJuOwogCisJcHJpbnRmKCJudW1iZXIgb2Yg dHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBmYWlsdXJlczogIiBJ TlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsCisJCSAgIHRvdGFsLT5zZXJp YWxpemF0aW9uX2ZhaWx1cmVzLAorCQkgICAoMTAwLjAgKiB0b3RhbC0+c2Vy aWFsaXphdGlvbl9mYWlsdXJlcyAvIHRvdGFsLT5jbnQpKTsKKworCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB3aXRoIGRlYWRsb2NrIGZhaWx1 cmVzOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwKKwkJICAgdG90 YWwtPmRlYWRsb2NrX2ZhaWx1cmVzLAorCQkgICAoMTAwLjAgKiB0b3RhbC0+ ZGVhZGxvY2tfZmFpbHVyZXMgLyB0b3RhbC0+Y250KSk7CisKKwlwcmludFNp bXBsZVN0YXRzKCJhdHRlbXB0cyBudW1iZXIiLCAmdG90YWwtPmF0dGVtcHRz LCB0cnVlLCAxLCAyLCAiIik7CisKIAlpZiAodGhyb3R0bGVfZGVsYXkgJiYg bGF0ZW5jeV9saW1pdCkKIAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNhY3Rp b25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLAog CQkJICAgdG90YWwtPnNraXBwZWQsCkBAIC0zNTMzLDcgKzQwMzgsNyBAQCBw cmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFs LCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJCQkgICAxMDAuMCAqIGxhdGVu Y3lfbGF0ZSAvICh0b3RhbC0+c2tpcHBlZCArIHRvdGFsLT5jbnQpKTsKIAog CWlmICh0aHJvdHRsZV9kZWxheSB8fCBwcm9ncmVzcyB8fCBsYXRlbmN5X2xp bWl0KQotCQlwcmludFNpbXBsZVN0YXRzKCJsYXRlbmN5IiwgJnRvdGFsLT5s YXRlbmN5KTsKKwkJcHJpbnRTaW1wbGVTdGF0cygibGF0ZW5jeSIsICZ0b3Rh bC0+bGF0ZW5jeSwgZmFsc2UsIDAuMDAxLCAzLCAibXMiKTsKIAllbHNlCiAJ ewogCQkvKiBubyBtZWFzdXJlbWVudCwgc2hvdyBhdmVyYWdlIGxhdGVuY3kg Y29tcHV0ZWQgZnJvbSBydW4gdGltZSAqLwpAQCAtMzU1NywyMiArNDA2Miwz NCBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEg KnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJcHJpbnRmKCJ0cHMg PSAlZiAoZXhjbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZylcbiIs IHRwc19leGNsdWRlKTsKIAogCS8qIFJlcG9ydCBwZXItc2NyaXB0L2NvbW1h bmQgc3RhdGlzdGljcyAqLwotCWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IGxh dGVuY3lfbGltaXQgfHwgaXNfbGF0ZW5jaWVzKQorCWlmIChwZXJfc2NyaXB0 X3N0YXRzIHx8IGxhdGVuY3lfbGltaXQgfHwgcmVwb3J0X3Blcl9jb21tYW5k KQogCXsKIAkJaW50CQkJaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Nj cmlwdHM7IGkrKykKIAkJewogCQkJaWYgKG51bV9zY3JpcHRzID4gMSkKKwkJ CXsKIAkJCQlwcmludGYoIlNRTCBzY3JpcHQgJWQ6ICVzXG4iCiAJCQkJCSAg ICIgLSB3ZWlnaHQ6ICVkICh0YXJnZXRzICUuMWYlJSBvZiB0b3RhbClcbiIK LQkJCQkJICAgIiAtICIgSU5UNjRfRk9STUFUICIgdHJhbnNhY3Rpb25zICgl LjFmJSUgb2YgdG90YWwsIHRwcyA9ICVmKVxuIiwKKwkJCQkJICAgIiAtICIg SU5UNjRfRk9STUFUICIgdHJhbnNhY3Rpb25zICglLjFmJSUgb2YgdG90YWws IHRwcyA9ICVmKVxuIgorCQkJCQkgICAiIC0gbnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gZmFpbHVyZXM6ICIgSU5UNjRfRk9S TUFUICIgKCUuM2YlJSlcbiIKKwkJCQkJICAgIiAtIG51bWJlciBvZiB0cmFu c2FjdGlvbnMgd2l0aCBkZWFkbG9jayBmYWlsdXJlczogIiBJTlQ2NF9GT1JN QVQgIiAoJS4zZiUlKVxuIiwKIAkJCQkJICAgaSArIDEsIHNxbF9zY3JpcHRb aV0uZGVzYywKIAkJCQkJICAgc3FsX3NjcmlwdFtpXS53ZWlnaHQsCiAJCQkJ CSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS53ZWlnaHQgLyB0b3RhbF93ZWln aHQsCiAJCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250LAogCQkJCQkg ICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250IC8gdG90YWwtPmNu dCwKLQkJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0aW1lX2lu Y2x1ZGUpOworCQkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCAvIHRp bWVfaW5jbHVkZSwKKwkJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5zZXJp YWxpemF0aW9uX2ZhaWx1cmVzLAorCQkJCQkgICAoMTAwLjAgKiBzcWxfc2Ny aXB0W2ldLnN0YXRzLnNlcmlhbGl6YXRpb25fZmFpbHVyZXMgLworCQkJCQkJ c3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQpLAorCQkJCQkgICBzcWxfc2NyaXB0 W2ldLnN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVzLAorCQkJCQkgICAoMTAwLjAg KiBzcWxfc2NyaXB0W2ldLnN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVzIC8KKwkJ CQkJCXNxbF9zY3JpcHRbaV0uc3RhdHMuY250KSk7CisJCQkJcHJpbnRTaW1w bGVTdGF0cygiIC0gYXR0ZW1wdHMgbnVtYmVyIiwgJnRvdGFsLT5hdHRlbXB0 cywgdHJ1ZSwKKwkJCQkJCQkJIDEsIDIsICIiKTsKKwkJCX0KIAkJCWVsc2UK IAkJCQlwcmludGYoInNjcmlwdCBzdGF0aXN0aWNzOlxuIik7CiAKQEAgLTM1 ODMsMjIgKzQxMDAsMzkgQEAgcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFk cywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAog CQkJCQkgICAoc3FsX3NjcmlwdFtpXS5zdGF0cy5za2lwcGVkICsgc3FsX3Nj cmlwdFtpXS5zdGF0cy5jbnQpKTsKIAogCQkJaWYgKG51bV9zY3JpcHRzID4g MSkKLQkJCQlwcmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNxbF9z Y3JpcHRbaV0uc3RhdHMubGF0ZW5jeSk7Ci0KLQkJCS8qIFJlcG9ydCBwZXIt Y29tbWFuZCBsYXRlbmNpZXMgKi8KLQkJCWlmIChpc19sYXRlbmNpZXMpCisJ CQkJcHJpbnRTaW1wbGVTdGF0cygiIC0gbGF0ZW5jeSIsICZzcWxfc2NyaXB0 W2ldLnN0YXRzLmxhdGVuY3ksCisJCQkJCQkJCSBmYWxzZSwgMC4wMDEsIDMs ICJtcyIpOworCisJCQkvKgorCQkJICogUmVwb3J0IHBlci1jb21tYW5kIHN0 YXRpc3RpY3M6IGxhdGVuY2llcywgc2VyaWFsaXphdGlvbiAmCisJCQkgKiBk ZWFkbG9jayBmYWlsdXJlcy4KKwkJCSAqLworCQkJaWYgKHJlcG9ydF9wZXJf Y29tbWFuZCkKIAkJCXsKIAkJCQlDb21tYW5kICAgKipjb21tYW5kczsKIAot CQkJCXByaW50ZigiIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNl Y29uZHM6XG4iKTsKKwkJCQlwcmludGYoIiAtIHN0YXRlbWVudCBsYXRlbmNp ZXMgaW4gbWlsbGlzZWNvbmRzLCBzZXJpYWxpemF0aW9uICYgZGVhZGxvY2sg ZmFpbHVyZXMsIG51bWJlcnMgb2YgdHJhbnNhY3Rpb25zIGF0dGVtcHRzOlxu Iik7CiAKIAkJCQlmb3IgKGNvbW1hbmRzID0gc3FsX3NjcmlwdFtpXS5jb21t YW5kczsKIAkJCQkJICpjb21tYW5kcyAhPSBOVUxMOwogCQkJCQkgY29tbWFu ZHMrKykKLQkJCQkJcHJpbnRmKCIgICAlMTEuM2YgICVzXG4iLAorCQkJCXsK KwkJCQkJY2hhcgkJYnVmZmVyWzI1Nl07CisKKwkJCQkJaWYgKCgqY29tbWFu ZHMpLT5pc190cmFuc2FjdGlvbl9iZWdpbikKKwkJCQkJCXNucHJpbnRmKGJ1 ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlOC4yZiIsCisJCQkJCQkJCSBnZXRf YXZlcmFnZV9hdHRlbXB0cygmKCpjb21tYW5kcyktPmF0dGVtcHRzKSk7CisJ CQkJCWVsc2UKKwkJCQkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl ciksICIgICAgIC0gICIpOworCisJCQkJCXByaW50ZigiICAgJTExLjNmICAl MjUiIElOVDY0X01PRElGSUVSICJkICAlMjUiIElOVDY0X01PRElGSUVSICJk ICAlcyAgJXNcbiIsCiAJCQkJCQkgICAxMDAwLjAgKiAoKmNvbW1hbmRzKS0+ c3RhdHMuc3VtIC8KIAkJCQkJCSAgICgqY29tbWFuZHMpLT5zdGF0cy5jb3Vu dCwKKwkJCQkJCSAgICgqY29tbWFuZHMpLT5zZXJpYWxpemF0aW9uX2ZhaWx1 cmVzLAorCQkJCQkJICAgKCpjb21tYW5kcyktPmRlYWRsb2NrX2ZhaWx1cmVz LAorCQkJCQkJICAgYnVmZmVyLAogCQkJCQkJICAgKCpjb21tYW5kcyktPmxp bmUpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM2MjcsNyArNDE2MSw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InByb2dyZXNz IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCiAJCXsicHJvdG9j b2wiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ00nfSwKIAkJeyJxdWll dCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncSd9LAotCQl7InJlcG9ydC1sYXRl bmNpZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwKKwkJeyJyZXBvcnQt cGVyLWNvbW1hbmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwKIAkJeyJy YXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCiAJCXsic2Nh bGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKIAkJeyJzZWxl Y3Qtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9LApAQCAtMzY0NSw2 ICs0MTc5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsi YWdncmVnYXRlLWludGVydmFsIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws IDV9LAogCQl7InByb2dyZXNzLXRpbWVzdGFtcCIsIG5vX2FyZ3VtZW50LCBO VUxMLCA2fSwKIAkJeyJsb2ctcHJlZml4IiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsIDd9LAorCQl7Im1heC1hdHRlbXB0cy1udW1iZXIiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgOH0sCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQog CX07CiAKQEAgLTM3ODcsNyArNDMyMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJY2FzZSAncic6CiAJCQkJYmVuY2htYXJraW5nX29w dGlvbl9zZXQgPSB0cnVlOwogCQkJCXBlcl9zY3JpcHRfc3RhdHMgPSB0cnVl OwotCQkJCWlzX2xhdGVuY2llcyA9IHRydWU7CisJCQkJcmVwb3J0X3Blcl9j b21tYW5kID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ3MnOgogCQkJ CXNjYWxlX2dpdmVuID0gdHJ1ZTsKQEAgLTM5OTEsNiArNDUyNiwxNiBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQliZW5jaG1hcmtpbmdf b3B0aW9uX3NldCA9IHRydWU7CiAJCQkJbG9nZmlsZV9wcmVmaXggPSBwZ19z dHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQli ZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CisJCQkJbWF4X2F0dGVt cHRzX251bWJlciA9IGF0b2kob3B0YXJnKTsKKwkJCQlpZiAobWF4X2F0dGVt cHRzX251bWJlciA8PSAwKQorCQkJCXsKKwkJCQkJZnByaW50ZihzdGRlcnIs ICJpbnZhbGlkIG51bWJlciBvZiBtYXhpbXVtIGF0dGVtcHRzOiBcIiVzXCJc biIsCisJCQkJCQkJb3B0YXJnKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJ CQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWZwcmludGYoc3RkZXJyLCBf KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIp LCBwcm9nbmFtZSk7CiAJCQkJZXhpdCgxKTsKQEAgLTQyNTksOSArNDgwNCw2 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl0aHJlYWQtPnN0 YXRlID0gJnN0YXRlW25jbGllbnRzX2RlYWx0XTsKIAkJdGhyZWFkLT5uc3Rh dGUgPQogCQkJKG5jbGllbnRzIC0gbmNsaWVudHNfZGVhbHQgKyBudGhyZWFk cyAtIGkgLSAxKSAvIChudGhyZWFkcyAtIGkpOwotCQl0aHJlYWQtPnJhbmRv bV9zdGF0ZVswXSA9IHJhbmRvbSgpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0 ZVsxXSA9IHJhbmRvbSgpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsyXSA9 IHJhbmRvbSgpOwogCQl0aHJlYWQtPmxvZ2ZpbGUgPSBOVUxMOyAvKiBmaWxs ZWQgaW4gbGF0ZXIgKi8KIAkJdGhyZWFkLT5sYXRlbmN5X2xhdGUgPSAwOwog CQlpbml0U3RhdHMoJnRocmVhZC0+c3RhdHMsIDApOwpAQCAtNDM0MCw2ICs0 ODgyLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCW1lcmdl U2ltcGxlU3RhdHMoJnN0YXRzLmxhZywgJnRocmVhZC0+c3RhdHMubGFnKTsK IAkJc3RhdHMuY250ICs9IHRocmVhZC0+c3RhdHMuY250OwogCQlzdGF0cy5z a2lwcGVkICs9IHRocmVhZC0+c3RhdHMuc2tpcHBlZDsKKwkJc3RhdHMuc2Vy aWFsaXphdGlvbl9mYWlsdXJlcyArPSB0aHJlYWQtPnN0YXRzLnNlcmlhbGl6 YXRpb25fZmFpbHVyZXM7CisJCXN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVzICs9 IHRocmVhZC0+c3RhdHMuZGVhZGxvY2tfZmFpbHVyZXM7CisJCW1lcmdlU2lt cGxlU3RhdHMoJnN0YXRzLmF0dGVtcHRzLCAmdGhyZWFkLT5zdGF0cy5hdHRl bXB0cyk7CiAJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVuY3lfbGF0 ZTsKIAkJSU5TVFJfVElNRV9BREQoY29ubl90b3RhbF90aW1lLCB0aHJlYWQt PmNvbm5fdGltZSk7CiAJfQpAQCAtNDQyMiw2ICs0OTY3LDExIEBAIHRocmVh ZFJ1bih2b2lkICphcmcpCiAJCXsKIAkJCWlmICgoc3RhdGVbaV0uY29uID0g ZG9Db25uZWN0KCkpID09IE5VTEwpCiAJCQkJZ290byBkb25lOworCisJCQkv KiBzZXQgcmFuZG9tIHN0YXRlICovCisJCQlzdGF0ZVtpXS5yYW5kb21fc3Rh dGVbMF0gPSByYW5kb20oKTsKKwkJCXN0YXRlW2ldLnJhbmRvbV9zdGF0ZVsx XSA9IHJhbmRvbSgpOworCQkJc3RhdGVbaV0ucmFuZG9tX3N0YXRlWzJdID0g cmFuZG9tKCk7CiAJCX0KIAl9CiAKQEAgLTQ2MTMsMTIgKzUxNjMsMTUgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkvKiBnZW5lcmF0ZSBhbmQgc2hv dyByZXBvcnQgKi8KIAkJCQlTdGF0c0RhdGEJY3VyOwogCQkJCWludDY0CQly dW4gPSBub3cgLSBsYXN0X3JlcG9ydDsKKwkJCQlpbnQ2NAkJYXR0ZW1wdHNf Y291bnQ7CiAJCQkJZG91YmxlCQl0cHMsCiAJCQkJCQkJdG90YWxfcnVuLAog CQkJCQkJCWxhdGVuY3ksCiAJCQkJCQkJc3FsYXQsCiAJCQkJCQkJbGFnLAot CQkJCQkJCXN0ZGV2OworCQkJCQkJCWxhdGVuY3lfc3RkZXYsCisJCQkJCQkJ YXR0ZW1wdHNfYXZlcmFnZSwKKwkJCQkJCQlhdHRlbXB0c19zdGRkZXY7CiAJ CQkJY2hhcgkJdGJ1Zls2NF07CiAKIAkJCQkvKgpAQCAtNDYzOSw2ICs1MTky LDEwIEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCW1lcmdlU2ltcGxl U3RhdHMoJmN1ci5sYWcsICZ0aHJlYWRbaV0uc3RhdHMubGFnKTsKIAkJCQkJ Y3VyLmNudCArPSB0aHJlYWRbaV0uc3RhdHMuY250OwogCQkJCQljdXIuc2tp cHBlZCArPSB0aHJlYWRbaV0uc3RhdHMuc2tpcHBlZDsKKwkJCQkJY3VyLnNl cmlhbGl6YXRpb25fZmFpbHVyZXMgKz0KKwkJCQkJCXRocmVhZFtpXS5zdGF0 cy5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzOworCQkJCQljdXIuZGVhZGxvY2tf ZmFpbHVyZXMgKz0gdGhyZWFkW2ldLnN0YXRzLmRlYWRsb2NrX2ZhaWx1cmVz OworCQkJCQltZXJnZVNpbXBsZVN0YXRzKCZjdXIuYXR0ZW1wdHMsICZ0aHJl YWRbaV0uc3RhdHMuYXR0ZW1wdHMpOwogCQkJCX0KIAogCQkJCXRvdGFsX3J1 biA9IChub3cgLSB0aHJlYWRfc3RhcnQpIC8gMTAwMDAwMC4wOwpAQCAtNDY0 NywxMCArNTIwNCwyNiBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCQko Y3VyLmNudCAtIGxhc3QuY250KTsKIAkJCQlzcWxhdCA9IDEuMCAqIChjdXIu bGF0ZW5jeS5zdW0yIC0gbGFzdC5sYXRlbmN5LnN1bTIpCiAJCQkJCS8gKGN1 ci5jbnQgLSBsYXN0LmNudCk7Ci0JCQkJc3RkZXYgPSAwLjAwMSAqIHNxcnQo c3FsYXQgLSAxMDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSk7CisJCQkJ bGF0ZW5jeV9zdGRldiA9IDAuMDAxICoKKwkJCQkJc3FydChzcWxhdCAtIDEw MDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRlbmN5KTsKIAkJCQlsYWcgPSAwLjAw MSAqIChjdXIubGFnLnN1bSAtIGxhc3QubGFnLnN1bSkgLwogCQkJCQkoY3Vy LmNudCAtIGxhc3QuY250KTsKIAorCQkJCWF0dGVtcHRzX2NvdW50ID0gY3Vy LmF0dGVtcHRzLmNvdW50IC0gbGFzdC5hdHRlbXB0cy5jb3VudDsKKwkJCQlp ZiAoYXR0ZW1wdHNfY291bnQgPT0gMCkKKwkJCQl7CisJCQkJCWF0dGVtcHRz X2F2ZXJhZ2UgPSAwOworCQkJCQlhdHRlbXB0c19zdGRkZXYgPSAwOworCQkJ CX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlhdHRlbXB0c19hdmVyYWdlID0g KGN1ci5hdHRlbXB0cy5zdW0gLSBsYXN0LmF0dGVtcHRzLnN1bSkgLworCQkJ CQkJYXR0ZW1wdHNfY291bnQ7CisJCQkJCWF0dGVtcHRzX3N0ZGRldiA9IHNx cnQoCisJCQkJCQkoY3VyLmF0dGVtcHRzLnN1bTIgLSBsYXN0LmF0dGVtcHRz LnN1bTIpIC8KKwkJCQkJCWF0dGVtcHRzX2NvdW50IC0gYXR0ZW1wdHNfYXZl cmFnZSAqIGF0dGVtcHRzX2F2ZXJhZ2UpOworCQkJCX0KKwogCQkJCWlmIChw cm9ncmVzc190aW1lc3RhbXApCiAJCQkJewogCQkJCQkvKgpAQCAtNDY2OSw4 ICs1MjQyLDE2IEBAIHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCXNucHJp bnRmKHRidWYsIHNpemVvZih0YnVmKSwgIiUuMWYgcyIsIHRvdGFsX3J1bik7 CiAKIAkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJCSJwcm9ncmVzczogJXMs ICUuMWYgdHBzLCBsYXQgJS4zZiBtcyBzdGRkZXYgJS4zZiIsCi0JCQkJCQl0 YnVmLCB0cHMsIGxhdGVuY3ksIHN0ZGV2KTsKKwkJCQkJCSJwcm9ncmVzczog JXMsICUuMWYgdHBzLCBsYXQgJS4zZiBtcyBzdGRkZXYgJS4zZiwgZmFpbGVk IHRyeDogIiBJTlQ2NF9GT1JNQVQgIiAoc2VyaWFsaXphdGlvbiksICIgSU5U NjRfRk9STUFUICIgKGRlYWRsb2NrcyksIGF0dGVtcHRzIGF2ZyAlLjJmIHN0 ZGRldiAlLjJmIiwKKwkJCQkJCXRidWYsCisJCQkJCQl0cHMsCisJCQkJCQls YXRlbmN5LAorCQkJCQkJbGF0ZW5jeV9zdGRldiwKKwkJCQkJCShjdXIuc2Vy aWFsaXphdGlvbl9mYWlsdXJlcyAtCisJCQkJCQkgbGFzdC5zZXJpYWxpemF0 aW9uX2ZhaWx1cmVzKSwKKwkJCQkJCShjdXIuZGVhZGxvY2tfZmFpbHVyZXMg LSBsYXN0LmRlYWRsb2NrX2ZhaWx1cmVzKSwKKwkJCQkJCWF0dGVtcHRzX2F2 ZXJhZ2UsCisJCQkJCQlhdHRlbXB0c19zdGRkZXYpOwogCiAJCQkJaWYgKHRo cm90dGxlX2RlbGF5KQogCQkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdi ZW5jaC90LzAwMl9zZXJpYWxpemF0aW9uX2Vycm9ycy5wbCBiL3NyYy9iaW4v cGdiZW5jaC90LzAwMl9zZXJpYWxpemF0aW9uX2Vycm9ycy5wbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg5NDg0Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAyX3NlcmlhbGl6YXRp b25fZXJyb3JzLnBsCkBAIC0wLDAgKzEsMTIxIEBACit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOworCit1c2UgQ29uZmlnOwordXNlIFBvc3RncmVzTm9k ZTsKK3VzZSBUZXN0TGliOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTI7 CisKK3VzZSBjb25zdGFudAoreworCVJFQURfQ09NTUlUVEVEICA9PiAwLAor CVJFUEVBVEFCTEVfUkVBRCA9PiAxLAorCVNFUklBTElaQUJMRSAgICA9PiAy LAorfTsKKworbXkgQGlzb2xhdGlvbl9sZXZlbF9zcWwgPSAoJ3JlYWQgY29t bWl0dGVkJywgJ3JlcGVhdGFibGUgcmVhZCcsICdzZXJpYWxpemFibGUnKTsK K215IEBpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAoCisJJ3JlYWRcXCBjb21t aXR0ZWQnLAorCSdyZXBlYXRhYmxlXFwgcmVhZCcsCisJJ3NlcmlhbGl6YWJs ZScpOworCisjIFRlc3QgY29uY3VycmVudCB1cGRhdGUgaW4gdGFibGUgcm93 IHdpdGggZGlmZmVyZW50IGRlZmF1bHQgdHJhbnNhY3Rpb24KKyMgaXNvbGF0 aW9uIGxldmVscy4KK215ICRub2RlID0gZ2V0X25ld19ub2RlKCdtYWluJyk7 Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKyAgICAnQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHh5 ICh4IGludGVnZXIsIHkgaW50ZWdlcik7ICcKKyAgLiAnSU5TRVJUIElOVE8g eHkgVkFMVUVTICgxLCAyKTsnKTsKKworbXkgJHNjcmlwdCA9ICRub2RlLT5i YXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdCc7CithcHBlbmRfdG9fZmlsZSgk c2NyaXB0LAorCQkiQkVHSU47XG4iCisJICAuICJcXHNldCBkZWx0YSByYW5k b20oLTUwMDAsIDUwMDApXG4iCisJICAuICJVUERBVEUgeHkgU0VUIHkgPSB5 ICsgOmRlbHRhIFdIRVJFIHggPSAxO1xuIgorCSAgLiAiRU5EOyIpOworCitz dWIgdGVzdF9wZ2JlbmNoCit7CisJbXkgKCRpc29sYXRpb25fbGV2ZWwpID0g QF87CisKKwlteSAkaXNvbGF0aW9uX2xldmVsX3NxbCA9ICRpc29sYXRpb25f bGV2ZWxfc3FsWyRpc29sYXRpb25fbGV2ZWxdOworCW15ICRpc29sYXRpb25f bGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRp b25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBv cnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRf dHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3No ZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzogIiAuICRFTlZ7UEdPUFRJT05T fSAuICJcbiI7CisKKwlteSAoJGhfcHNxbCwgJGluX3BzcWwsICRvdXRfcHNx bCk7CisJbXkgKCRoX3BnYmVuY2gsICRpbl9wZ2JlbmNoLCAkb3V0X3BnYmVu Y2gsICRzdGRlcnIpOworCisJIyBPcGVuIHRoZSBwc3FsIHNlc3Npb24gYW5k IHJ1biB0aGUgcGFyYWxsZWwgdHJhbnNhY3Rpb246CisJcHJpbnQgIiMgU3Rh cnRpbmcgcHNxbFxuIjsKKwkkaF9wc3FsID0gSVBDOjpSdW46OnN0YXJ0IFsg J3BzcWwnIF0sIFwkaW5fcHNxbCwgXCRvdXRfcHNxbDsKKworCSRpbl9wc3Fs ID0gImJlZ2luO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIg LiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRp bCAkb3V0X3BzcWwgPX4gL0JFR0lOLzsKKworCSRpbl9wc3FsID0gInVwZGF0 ZSB4eSBzZXQgeSA9IHkgKyAxIHdoZXJlIHggPSAxO1xuIjsKKwlwcmludCAi IyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOwor CSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL1VQREFURSAx LzsKKworCSMgU3RhcnQgcGdiZW5jaDoKKwlteSBAY29tbWFuZCA9IChxdyhw Z2JlbmNoIC0tbm8tdmFjdXVtIC0tZmlsZSksICRzY3JpcHQpOworCXByaW50 ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQpIC4gIlxuIjsK KwkkaF9wZ2JlbmNoID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZCwgXCRp bl9wZ2JlbmNoLCBcJG91dF9wZ2JlbmNoLAorCSAgXCRzdGRlcnI7CisKKwkj IExldCBwZ2JlbmNoIHJ1biB0aGUgdXBkYXRlIGNvbW1hbmQgaW4gdGhlIHRy YW5zYWN0aW9uOgorCXNsZWVwIDEwOworCisJIyBJbiBwc3FsLCBjb21taXQg dGhlIHRyYW5zYWN0aW9uIGFuZCBlbmQgdGhlIHNlc3Npb246CisJJGluX3Bz cWwgPSAiZW5kO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIg LiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRp bCAkb3V0X3BzcWwgPX4gL0NPTU1JVC87CisKKwkkaW5fcHNxbCA9ICJcXHFc biI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIs ICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgd2hpbGUgbGVuZ3RoICRp bl9wc3FsOworCisJJGhfcHNxbC0+ZmluaXNoKCk7CisKKwkjIEdldCBwZ2Jl bmNoIHJlc3VsdHMKKwkkaF9wZ2JlbmNoLT5wdW1wKCkgdW50aWwgbGVuZ3Ro ICRvdXRfcGdiZW5jaDsKKwkkaF9wZ2JlbmNoLT5maW5pc2goKTsKKworCSMg T24gV2luZG93cywgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGlz IHJldHVybmVkIGRpcmVjdGx5IGFzIHRoZQorCSMgcHJvY2VzcydzIGV4aXQg Y29kZSwgd2hpbGUgb24gVW5peCwgaXQncyByZXR1cm5lZCBpbiB0aGUgaGln aCBiaXRzCisJIyBvZiB0aGUgZXhpdCBjb2RlIChzZWUgV0VYSVRTVEFUVVMg bWFjcm8gaW4gdGhlIHN0YW5kYXJkIDxzeXMvd2FpdC5oPgorCSMgaGVhZGVy IGZpbGUpLiBJUEM6OlJ1bidzIHJlc3VsdCBmdW5jdGlvbiBhbHdheXMgcmV0 dXJucyBleGl0IGNvZGUgPj4gOCwKKwkjIGFzc3VtaW5nIHRoZSBVbml4IGNv bnZlbnRpb24sIHdoaWNoIHdpbGwgYWx3YXlzIHJldHVybiAwIG9uIFdpbmRv d3MgYXMKKwkjIGxvbmcgYXMgdGhlIHByb2Nlc3Mgd2FzIG5vdCB0ZXJtaW5h dGVkIGJ5IGFuIGV4Y2VwdGlvbi4gVG8gd29yayBhcm91bmQKKwkjIHRoYXQs IHVzZSAkaC0+ZnVsbF9yZXN1bHQgb24gV2luZG93cyBpbnN0ZWFkLgorCW15 ICRyZXN1bHQgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMy IikKKwkgID8gKCRoX3BnYmVuY2gtPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDog JGhfcGdiZW5jaC0+cmVzdWx0KDApOworCisJIyBDaGVjayBwZ2JlbmNoIHJl c3VsdHMKKwlvayghJHJlc3VsdCwgIkBjb21tYW5kIGV4aXQgY29kZSAwIik7 CisJaXMoJHN0ZGVyciwgICcnLCAiQGNvbW1hbmQgbm8gc3RkZXJyIik7CisK KwlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7cHJvY2Vzc2VkOiAxMC8xMH0s CisJCSJjb25jdXJyZW50IHVwZGF0ZTogJGlzb2xhdGlvbl9sZXZlbF9zcWw6 IGNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKworCW15ICRyZWdl eCA9CisJCSgkaXNvbGF0aW9uX2xldmVsID09IFJFQURfQ09NTUlUVEVEKQor CSAgPyBxcntzZXJpYWxpemF0aW9uIGZhaWx1cmVzOiAwIFwoMFwuMDAwICVc KX0KKwkgIDogcXJ7c2VyaWFsaXphdGlvbiBmYWlsdXJlczogWzEtOV1cZCog XChbMS05XVxkKlwuXGQqICVcKX07CisKKwlsaWtlKCRvdXRfcGdiZW5jaCwK KwkJJHJlZ2V4LAorCQkiY29uY3VycmVudCB1cGRhdGU6ICRpc29sYXRpb25f bGV2ZWxfc3FsOiBjaGVjayBzZXJpYWxpemF0aW9uIGZhaWx1cmVzIik7Cit9 CisKK3Rlc3RfcGdiZW5jaChSRUFEX0NPTU1JVFRFRCk7Cit0ZXN0X3BnYmVu Y2goUkVQRUFUQUJMRV9SRUFEKTsKK3Rlc3RfcGdiZW5jaChTRVJJQUxJWkFC TEUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAzX2RlYWRs b2NrX2Vycm9ycy5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwM19kZWFkbG9j a19lcnJvcnMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOGQ5MmY3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdiZW5j aC90LzAwM19kZWFkbG9ja19lcnJvcnMucGwKQEAgLTAsMCArMSwxMzAgQEAK K3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBDb25maWc7Cit1 c2UgUG9zdGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6TW9y ZSB0ZXN0cyA9PiAyMTsKKwordXNlIGNvbnN0YW50Cit7CisJUkVBRF9DT01N SVRURUQgID0+IDAsCisJUkVQRUFUQUJMRV9SRUFEID0+IDEsCisJU0VSSUFM SVpBQkxFICAgID0+IDIsCit9OworCitteSBAaXNvbGF0aW9uX2xldmVsX3Nx bCA9ICgncmVhZCBjb21taXR0ZWQnLCAncmVwZWF0YWJsZSByZWFkJywgJ3Nl cmlhbGl6YWJsZScpOworbXkgQGlzb2xhdGlvbl9sZXZlbF9zaGVsbCA9ICgK KwkncmVhZFxcIGNvbW1pdHRlZCcsCisJJ3JlcGVhdGFibGVcXCByZWFkJywK Kwknc2VyaWFsaXphYmxlJyk7CisKKyMgVGVzdCBjb25jdXJyZW50IGRlYWRs b2NrIHVwZGF0ZXMgaW4gdGFibGUgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdCB0 cmFuc2FjdGlvbgorIyBpc29sYXRpb24gbGV2ZWxzLgorbXkgJG5vZGUgPSBn ZXRfbmV3X25vZGUoJ21haW4nKTsKKyRub2RlLT5pbml0OworJG5vZGUtPnN0 YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgICAnQ1JF QVRFIFVOTE9HR0VEIFRBQkxFIHh5ICh4IGludGVnZXIsIHkgaW50ZWdlcik7 ICcKKwkgIC4gJ0lOU0VSVCBJTlRPIHh5IFZBTFVFUyAoMSwgMiksICgyLCAz KTsnKTsKKworbXkgJHNjcmlwdDEgPSAkbm9kZS0+YmFzZWRpciAuICcvcGdi ZW5jaF9zY3JpcHQxJzsKK2FwcGVuZF90b19maWxlKCRzY3JpcHQxLAorCQki QkVHSU47XG4iCisJICAuICJcXHNldCBkZWx0YTEgcmFuZG9tKC01MDAwLCA1 MDAwKVxuIgorCSAgLiAiXFxzZXQgZGVsdGEyIHJhbmRvbSgtNTAwMCwgNTAw MClcbiIKKwkgIC4gIlVQREFURSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGExIFdI RVJFIHggPSAxO1xuIgorCSAgLiAiU0VMRUNUIHBnX3NsZWVwKDIwKTtcbiIK KwkgIC4gIlVQREFURSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGEyIFdIRVJFIHgg PSAyO1xuIgorCSAgLiAiRU5EOyIpOworCitteSAkc2NyaXB0MiA9ICRub2Rl LT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdDInOworYXBwZW5kX3RvX2Zp bGUoJHNjcmlwdDIsCisJCSJCRUdJTjtcbiIKKwkgIC4gIlxcc2V0IGRlbHRh MSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJcXHNldCBkZWx0YTIg cmFuZG9tKC01MDAwLCA1MDAwKVxuIgorCSAgLiAiVVBEQVRFIHh5IFNFVCB5 ID0geSArIDpkZWx0YTIgV0hFUkUgeCA9IDI7XG4iCisJICAuICJVUERBVEUg eHkgU0VUIHkgPSB5ICsgOmRlbHRhMSBXSEVSRSB4ID0gMTtcbiIKKwkgIC4g IkVORDsiKTsKKworc3ViIHRlc3RfcGdiZW5jaAoreworCW15ICgkaXNvbGF0 aW9uX2xldmVsKSA9IEBfOworCisJbXkgJGlzb2xhdGlvbl9sZXZlbF9zcWwg PSAkaXNvbGF0aW9uX2xldmVsX3NxbFskaXNvbGF0aW9uX2xldmVsXTsKKwlt eSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlzb2xhdGlvbl9sZXZlbF9z aGVsbFskaXNvbGF0aW9uX2xldmVsXTsKKworCWxvY2FsICRFTlZ7UEdQT1JU fSA9ICRub2RlLT5wb3J0OworCWxvY2FsICRFTlZ7UEdPUFRJT05TfSA9CisJ CSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xhdGlvbj0iIC4gJGlzb2xh dGlvbl9sZXZlbF9zaGVsbDsKKwlwcmludCAiIyBQR09QVElPTlM6ICIgLiAk RU5We1BHT1BUSU9OU30gLiAiXG4iOworCisJbXkgKCRoMSwgJGluMSwgJG91 dDEsICRlcnIxKTsKKwlteSAoJGgyLCAkaW4yLCAkb3V0MiwgJGVycjIpOwor CisJIyBSdW4gZmlyc3QgcGdiZW5jaAorCW15IEBjb21tYW5kMSA9IChxdyhw Z2JlbmNoIC0tbm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zPTEgLS1maWxlKSwg JHNjcmlwdDEpOworCXByaW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwg QGNvbW1hbmQxKSAuICJcbiI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxA Y29tbWFuZDEsIFwkaW4xLCBcJG91dDEsIFwkZXJyMTsKKworCSMgTGV0IHBn YmVuY2ggcnVuIGZpcnN0IHVwZGF0ZSBjb21tYW5kIGluIHRoZSB0cmFuc2Fj dGlvbjoKKwlzbGVlcCAxMDsKKworCSMgUnVuIHNlY29uZCBwZ2JlbmNoCisJ bXkgQGNvbW1hbmQyID0gKHF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS10cmFu c2FjdGlvbnM9MSAtLWZpbGUpLCAkc2NyaXB0Mik7CisJcHJpbnQgIiMgUnVu bmluZzogIiAuIGpvaW4oIiAiLCBAY29tbWFuZDIpIC4gIlxuIjsKKwkkaDIg PSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21tYW5kMiwgXCRpbjIsIFwkb3V0Miwg XCRlcnIyOworCisJIyBHZXQgYWxsIHBnYmVuY2ggcmVzdWx0cworCSRoMS0+ cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0MTsKKwkkaDEtPmZpbmlzaCgpOwor CisJJGgyLT5wdW1wKCkgdW50aWwgbGVuZ3RoICRvdXQyOworCSRoMi0+Zmlu aXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0IHN0YXR1cyBvZiB0 aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBhcyB0aGUKKwkjIHBy b2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9uIFVuaXgsIGl0J3MgcmV0dXJu ZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4aXQgY29kZSAoc2Vl IFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFuZGFyZCA8c3lzL3dhaXQu aD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4ncyByZXN1bHQgZnVuY3Rp b24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2RlID4+IDgsCisJIyBhc3N1bWlu ZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3aWxsIGFsd2F5cyByZXR1 cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25nIGFzIHRoZSBwcm9jZXNzIHdh cyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24uIFRvIHdvcmsgYXJv dW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0IG9uIFdpbmRvd3Mg aW5zdGVhZC4KKwlteSAkcmVzdWx0MSA9CisJICAgICgkQ29uZmlne29zbmFt ZX0gZXEgIk1TV2luMzIiKQorCSAgPyAoJGgxLT5mdWxsX3Jlc3VsdHMpWzBd CisJICA6ICRoMS0+cmVzdWx0KDApOworCisJbXkgJHJlc3VsdDIgPQorCSAg ICAoJENvbmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoMi0+ ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaDItPnJlc3VsdCgwKTsKKworCSMg Q2hlY2sgYWxsIHBnYmVuY2ggcmVzdWx0cworCW9rKCEkcmVzdWx0MSwgIkBj b21tYW5kMSBleGl0IGNvZGUgMCIpOworCW9rKCEkcmVzdWx0MiwgIkBjb21t YW5kMiBleGl0IGNvZGUgMCIpOworCisJaXMoJGVycjEsICAnJywgIkBjb21t YW5kMSBubyBzdGRlcnIiKTsKKwlpcygkZXJyMiwgICcnLCAiQGNvbW1hbmQy IG5vIHN0ZGVyciIpOworCisJbGlrZSgkb3V0MSwKKwkJcXJ7cHJvY2Vzc2Vk OiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGU6ICIKKwkg IC4gJGlzb2xhdGlvbl9sZXZlbF9zcWwKKwkgIC4gIjogcGdiZW5jaCAxOiBj aGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7CisJbGlrZSgkb3V0MiwK KwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9j ayB1cGRhdGU6ICIKKwkgIC4gJGlzb2xhdGlvbl9sZXZlbF9zcWwKKwkgIC4g IjogcGdiZW5jaCAyOiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7 CisKKwkjIEZpcnN0IG9yIHNlY29uZCBwZ2JlbmNoIHNob3VsZCBnZXQgYSBk ZWFkbG9jayBlcnJvcgorCWxpa2UoJG91dDEgLiAkb3V0MiwKKwkJcXJ7ZGVh ZGxvY2sgZmFpbHVyZXM6IDEgXCgxMDBcLjAwMCAlXCl9LAorCQkiY29uY3Vy cmVudCBkZWFkbG9jayB1cGRhdGU6ICIKKwkgIC4gJGlzb2xhdGlvbl9sZXZl bF9zcWwKKwkgIC4gIjogY2hlY2sgZGVhZGxvY2sgZmFpbHVyZXMiKTsKK30K KwordGVzdF9wZ2JlbmNoKFJFQURfQ09NTUlUVEVEKTsKK3Rlc3RfcGdiZW5j aChSRVBFQVRBQkxFX1JFQUQpOwordGVzdF9wZ2JlbmNoKFNFUklBTElaQUJM RSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDRfcmV0cnlf ZmFpbGVkX3RyYW5zYWN0aW9ucy5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAw NF9yZXRyeV9mYWlsZWRfdHJhbnNhY3Rpb25zLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYTlhYjIKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDRfcmV0cnlfZmFpbGVkX3RyYW5z YWN0aW9ucy5wbApAQCAtMCwwICsxLDI4MCBAQAordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsKK3VzZSBQb3N0Z3Jlc05vZGU7 Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDMwOwor Cit1c2UgY29uc3RhbnQKK3sKKwlSRUFEX0NPTU1JVFRFRCAgPT4gMCwKKwlS RVBFQVRBQkxFX1JFQUQgPT4gMSwKKwlTRVJJQUxJWkFCTEUgICAgPT4gMiwK K307CisKK215IEBpc29sYXRpb25fbGV2ZWxfc3FsID0gKCdyZWFkIGNvbW1p dHRlZCcsICdyZXBlYXRhYmxlIHJlYWQnLCAnc2VyaWFsaXphYmxlJyk7Citt eSBAaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gKAorCSdyZWFkXFwgY29tbWl0 dGVkJywKKwkncmVwZWF0YWJsZVxcIHJlYWQnLAorCSdzZXJpYWxpemFibGUn KTsKKworIyBUZXN0IGNvbmN1cnJlbnQgdXBkYXRlIGluIHRhYmxlIHJvdyB3 aXRoIGRpZmZlcmVudCBkZWZhdWx0IHRyYW5zYWN0aW9uCisjIGlzb2xhdGlv biBsZXZlbHMuCitteSAkbm9kZSA9IGdldF9uZXdfbm9kZSgnbWFpbicpOwor JG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisgICAgJ0NSRUFURSBVTkxPR0dFRCBUQUJMRSB4eSAo eCBpbnRlZ2VyLCB5IGludGVnZXIpOyAnCisgIC4gJ0lOU0VSVCBJTlRPIHh5 IFZBTFVFUyAoMSwgMiksICgyLCAzKTsnKTsKKworbXkgJHNjcmlwdCA9ICRu b2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNoX3NjcmlwdCc7CithcHBlbmRfdG9f ZmlsZSgkc2NyaXB0LAorCQkiQkVHSU47XG4iCisJICAuICJcXHNldCBkZWx0 YSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJVUERBVEUgeHkgU0VU IHkgPSB5ICsgOmRlbHRhIFdIRVJFIHggPSAxO1xuIgorCSAgLiAiRU5EOyIp OworCitteSAkc2NyaXB0MSA9ICRub2RlLT5iYXNlZGlyIC4gJy9wZ2JlbmNo X3NjcmlwdDEnOworYXBwZW5kX3RvX2ZpbGUoJHNjcmlwdDEsCisJCSJCRUdJ TjtcbiIKKwkgIC4gIlxcc2V0IGRlbHRhMSByYW5kb20oLTUwMDAsIDUwMDAp XG4iCisJICAuICJcXHNldCBkZWx0YTIgcmFuZG9tKC01MDAwLCA1MDAwKVxu IgorCSAgLiAiVVBEQVRFIHh5IFNFVCB5ID0geSArIDpkZWx0YTEgV0hFUkUg eCA9IDE7XG4iCisJICAuICJTRUxFQ1QgcGdfc2xlZXAoMjApO1xuIgorCSAg LiAiVVBEQVRFIHh5IFNFVCB5ID0geSArIDpkZWx0YTIgV0hFUkUgeCA9IDI7 XG4iCisJICAuICJFTkQ7Iik7CisKK215ICRzY3JpcHQyID0gJG5vZGUtPmJh c2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0Mic7CithcHBlbmRfdG9fZmlsZSgk c2NyaXB0MiwKKwkJIkJFR0lOO1xuIgorCSAgLiAiXFxzZXQgZGVsdGExIHJh bmRvbSgtNTAwMCwgNTAwMClcbiIKKwkgIC4gIlxcc2V0IGRlbHRhMiByYW5k b20oLTUwMDAsIDUwMDApXG4iCisJICAuICJVUERBVEUgeHkgU0VUIHkgPSB5 ICsgOmRlbHRhMiBXSEVSRSB4ID0gMjtcbiIKKwkgIC4gIlVQREFURSB4eSBT RVQgeSA9IHkgKyA6ZGVsdGExIFdIRVJFIHggPSAxO1xuIgorCSAgLiAiRU5E OyIpOworCitzdWIgdGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25fZmFpbHVy ZXMKK3sKKwlteSAoJGlzb2xhdGlvbl9sZXZlbCkgPSBAXzsKKworCW15ICRp c29sYXRpb25fbGV2ZWxfc3FsID0gJGlzb2xhdGlvbl9sZXZlbF9zcWxbJGlz b2xhdGlvbl9sZXZlbF07CisJbXkgJGlzb2xhdGlvbl9sZXZlbF9zaGVsbCA9 ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xhdGlvbl9sZXZlbF07CisK Kwlsb2NhbCAkRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9ydDsKKwlsb2NhbCAk RU5We1BHT1BUSU9OU30gPQorCQkiLWMgZGVmYXVsdF90cmFuc2FjdGlvbl9p c29sYXRpb249IiAuICRpc29sYXRpb25fbGV2ZWxfc2hlbGw7CisJcHJpbnQg IiMgUEdPUFRJT05TOiAiIC4gJEVOVntQR09QVElPTlN9IC4gIlxuIjsKKwor CW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3FsKTsKKwlteSAoJGhf cGdiZW5jaCwgJGluX3BnYmVuY2gsICRvdXRfcGdiZW5jaCwgJHN0ZGVycik7 CisKKwkjIE9wZW4gdGhlIHBzcWwgc2Vzc2lvbiBhbmQgcnVuIHRoZSBwYXJh bGxlbCB0cmFuc2FjdGlvbjoKKwlwcmludCAiIyBTdGFydGluZyBwc3FsXG4i OworCSRoX3BzcWwgPSBJUEM6OlJ1bjo6c3RhcnQgWyAncHNxbCcgXSwgXCRp bl9wc3FsLCBcJG91dF9wc3FsOworCisJJGluX3BzcWwgPSJiZWdpbjtcbiI7 CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRp bl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+ IC9CRUdJTi87CisKKwkkaW5fcHNxbCA9ICJ1cGRhdGUgeHkgc2V0IHkgPSB5 ICsgMSB3aGVyZSB4ID0gMTtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBw c3FsOiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1w KCkgdW50aWwgJG91dF9wc3FsID1+IC9VUERBVEUgMS87CisKKwkjIFN0YXJ0 IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQgPSAoCisJCXF3KHBnYmVuY2ggLS1u by12YWN1dW0gLS1tYXgtYXR0ZW1wdHMtbnVtYmVyIDIgLS1kZWJ1ZyAtLWZp bGUpLAorCQkkc2NyaXB0KTsKKwlwcmludCAiIyBSdW5uaW5nOiAiIC4gam9p bigiICIsIEBjb21tYW5kKSAuICJcbiI7CisJJGhfcGdiZW5jaCA9IElQQzo6 UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwkaW5fcGdiZW5jaCwgXCRvdXRfcGdi ZW5jaCwKKwkgIFwkc3RkZXJyOworCisJIyBMZXQgcGdiZW5jaCBydW4gdGhl IHVwZGF0ZSBjb21tYW5kIGluIHRoZSB0cmFuc2FjdGlvbjoKKwlzbGVlcCAx MDsKKworCSMgSW4gcHNxbCwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiBhbmQg ZW5kIHRoZSBzZXNzaW9uOgorCSRpbl9wc3FsID0gImVuZDtcbiI7CisJcHJp bnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3Fs KTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9DT01N SVQvOworCisJJGluX3BzcWwgPSAiXFxxXG4iOworCXByaW50ICIjIFJ1bm5p bmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJJGhfcHNx bC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRoX3BzcWwt PmZpbmlzaCgpOworCisJIyBHZXQgcGdiZW5jaCByZXN1bHRzCisJJGhfcGdi ZW5jaC0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0X3BnYmVuY2g7CisJJGhf cGdiZW5jaC0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRoZSBleGl0 IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJlY3RseSBh cyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9uIFVuaXgs IGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2YgdGhlIGV4 aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBzdGFuZGFy ZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpSdW4ncyBy ZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2RlID4+IDgs CisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGljaCB3aWxs IGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25nIGFzIHRo ZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24u IFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxfcmVzdWx0 IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0ID0KKwkgICAgKCRD b25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaF9wZ2JlbmNo LT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoX3BnYmVuY2gtPnJlc3VsdCgw KTsKKworCSMgQ2hlY2sgcGdiZW5jaCByZXN1bHRzCisJb2soISRyZXN1bHQs ICJAY29tbWFuZCBleGl0IGNvZGUgMCIpOworCisJbGlrZSgkb3V0X3BnYmVu Y2gsCisJCXFye3Byb2Nlc3NlZDogMTAvMTB9LAorCQkiY29uY3VycmVudCB1 cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVs X3NxbAorCSAgLiAiOiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rpb25zIik7 CisKKwlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7c2VyaWFsaXphdGlvbiBm YWlsdXJlczogMCBcKDBcLjAwMCAlXCl9LAorCQkiY29uY3VycmVudCB1cGRh dGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVsX3Nx bAorCSAgLiAiOiBjaGVjayBzZXJpYWxpemF0aW9uIGZhaWx1cmVzIik7CisK KwlteSAkcGF0dGVybiA9CisJCSJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4 eSBTRVQgeSA9IHkgXFwrICgtP1xcZCspIFdIRVJFIHggPSAxO1xuIgorCSAg LiAiKGNsaWVudCAwIHJlY2VpdmluZ1xuKSsiCisJICAuICJjbGllbnQgMCBn b3QgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUgXFwoYXR0ZW1wdCAxLzJcXClc biIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgRU5EO1xuIgorCSAgLiAiXFxn MisiCisJICAuICJjbGllbnQgMCByZXBlYXRzIHRoZSBmYWlsZWQgdHJhbnNh Y3Rpb24gXFwoYXR0ZW1wdCAyLzJcXClcbiIKKwkgIC4gImNsaWVudCAwIHNl bmRpbmcgQkVHSU47XG4iCisJICAuICJcXGcyKyIKKwkgIC4gImNsaWVudCAw IGV4ZWN1dGluZyBcXFxcc2V0IGRlbHRhXG4iCisJICAuICJjbGllbnQgMCBz ZW5kaW5nIFVQREFURSB4eSBTRVQgeSA9IHkgXFwrIFxcZzEgV0hFUkUgeCA9 IDE7IjsKKworCWxpa2UoJHN0ZGVyciwKKwkJcXJ7JHBhdHRlcm59LAorCQki Y29uY3VycmVudCB1cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNv bGF0aW9uX2xldmVsX3NxbAorCSAgLiAiOiBjaGVjayB0aGUgcmV0cmllZCB0 cmFuc2FjdGlvbiIpOworfQorCitzdWIgdGVzdF9wZ2JlbmNoX2RlYWRsb2Nr X2ZhaWx1cmVzCit7CisJbXkgKCRpc29sYXRpb25fbGV2ZWwpID0gQF87CisK KwlteSAkaXNvbGF0aW9uX2xldmVsX3NxbCA9ICRpc29sYXRpb25fbGV2ZWxf c3FsWyRpc29sYXRpb25fbGV2ZWxdOworCW15ICRpc29sYXRpb25fbGV2ZWxf c2hlbGwgPSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsWyRpc29sYXRpb25fbGV2 ZWxdOworCisJbG9jYWwgJEVOVntQR1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJ bG9jYWwgJEVOVntQR09QVElPTlN9ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNh Y3Rpb25faXNvbGF0aW9uPSIgLiAkaXNvbGF0aW9uX2xldmVsX3NoZWxsOwor CisJbXkgKCRoMSwgJGluMSwgJG91dDEsICRlcnIxKTsKKwlteSAoJGgyLCAk aW4yLCAkb3V0MiwgJGVycjIpOworCisJIyBSdW4gZmlyc3QgcGdiZW5jaAor CW15IEBjb21tYW5kMSA9ICgKKwkJcXcocGdiZW5jaCAtLW5vLXZhY3V1bSAt LXRyYW5zYWN0aW9ucz0xICAtLW1heC1hdHRlbXB0cy1udW1iZXI9MiksCisJ CXF3KC0tZGVidWcgLS1maWxlKSwgJHNjcmlwdDEpOworCXByaW50ICIjIFJ1 bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQxKSAuICJcbiI7CisJJGgx ID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwkaW4xLCBcJG91dDEs IFwkZXJyMTsKKworCSMgTGV0IHBnYmVuY2ggcnVuIGZpcnN0IHVwZGF0ZSBj b21tYW5kIGluIHRoZSB0cmFuc2FjdGlvbjoKKwlzbGVlcCAxMDsKKworCSMg UnVuIHNlY29uZCBwZ2JlbmNoCisJbXkgQGNvbW1hbmQyID0gKAorCQlxdyhw Z2JlbmNoIC0tbm8tdmFjdXVtIC0tdHJhbnNhY3Rpb25zPTEgIC0tbWF4LWF0 dGVtcHRzLW51bWJlcj0yKSwKKwkJcXcoLS1kZWJ1ZyAtLWZpbGUpLCAkc2Ny aXB0Mik7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4oIiAiLCBAY29t bWFuZDIpIC4gIlxuIjsKKwkkaDIgPSBJUEM6OlJ1bjo6c3RhcnQgXEBjb21t YW5kMiwgXCRpbjIsIFwkb3V0MiwgXCRlcnIyOworCisJIyBHZXQgYWxsIHBn YmVuY2ggcmVzdWx0cworCSRoMS0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0 MTsKKwkkaDEtPmZpbmlzaCgpOworCisJJGgyLT5wdW1wKCkgdW50aWwgbGVu Z3RoICRvdXQyOworCSRoMi0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3Ms IHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBk aXJlY3RseSBhcyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxl IG9uIFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMg b2YgdGhlIGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRo ZSBzdGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBD OjpSdW4ncyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBj b2RlID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3 aGljaCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBs b25nIGFzIHRoZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBl eGNlcHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1 bGxfcmVzdWx0IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0MSA9 CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAgPyAo JGgxLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoMS0+cmVzdWx0KDApOwor CisJbXkgJHJlc3VsdDIgPQorCSAgICAoJENvbmZpZ3tvc25hbWV9IGVxICJN U1dpbjMyIikKKwkgID8gKCRoMi0+ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAk aDItPnJlc3VsdCgwKTsKKworCSMgQ2hlY2sgYWxsIHBnYmVuY2ggcmVzdWx0 cworCW9rKCEkcmVzdWx0MSwgIkBjb21tYW5kMSBleGl0IGNvZGUgMCIpOwor CW9rKCEkcmVzdWx0MiwgIkBjb21tYW5kMiBleGl0IGNvZGUgMCIpOworCisJ bGlrZSgkb3V0MSwKKwkJcXJ7cHJvY2Vzc2VkOiAxLzF9LAorCQkiY29uY3Vy cmVudCBkZWFkbG9jayB1cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAk aXNvbGF0aW9uX2xldmVsX3NxbAorCSAgLiAiOiBwZ2JlbmNoIDE6IGNoZWNr IHByb2Nlc3NlZCB0cmFuc2FjdGlvbnMiKTsKKwlsaWtlKCRvdXQyLAorCQlx cntwcm9jZXNzZWQ6IDEvMX0sCisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVw ZGF0ZSB3aXRoIHJldHJ5aW5nOiAiCisJICAuICRpc29sYXRpb25fbGV2ZWxf c3FsCisJICAuICI6IHBnYmVuY2ggMjogY2hlY2sgcHJvY2Vzc2VkIHRyYW5z YWN0aW9ucyIpOworCisJbGlrZSgkb3V0MSwKKwkJcXJ7ZGVhZGxvY2sgZmFp bHVyZXM6IDAgXCgwXC4wMDAgJVwpfSwKKwkJImNvbmN1cnJlbnQgZGVhZGxv Y2sgdXBkYXRlIHdpdGggcmV0cnlpbmc6ICIKKwkgIC4gJGlzb2xhdGlvbl9s ZXZlbF9zcWwKKwkgIC4gIjogcGdiZW5jaCAxOiBjaGVjayBkZWFkbG9jayBm YWlsdXJlcyIpOworCWxpa2UoJG91dDIsCisJCXFye2RlYWRsb2NrIGZhaWx1 cmVzOiAwIFwoMFwuMDAwICVcKX0sCisJCSJjb25jdXJyZW50IGRlYWRsb2Nr IHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiAiCisJICAuICRpc29sYXRpb25fbGV2 ZWxfc3FsCisJICAuICI6IHBnYmVuY2ggMjogY2hlY2sgZGVhZGxvY2sgZmFp bHVyZXMiKTsKKworCSMgRmlyc3Qgb3Igc2Vjb25kIHBnYmVuY2ggc2hvdWxk IGdldCBhIGRlYWRsb2NrIGVycm9yCisJbGlrZSgkZXJyMSAuICRlcnIyLAor CQlxcntjbGllbnQgMCBnb3QgYSBkZWFkbG9jayBmYWlsdXJlfSwKKwkJImNv bmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlIHdpdGggcmV0cnlpbmc6ICIKKwkg IC4gJGlzb2xhdGlvbl9sZXZlbF9zcWwKKwkgIC4gIjogY2hlY2sgZGVhZGxv Y2sgZmFpbHVyZSBpbiBkZWJ1ZyBsb2dzIik7CisKKwlpZiAoJGlzb2xhdGlv bl9sZXZlbCA9PSBSRUFEX0NPTU1JVFRFRCkKKwl7CisJCW15ICRwYXR0ZXJu ID0KKwkJCSJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4eSBTRVQgeSA9IHkg XFwrICgtP1xcZCspIFdIRVJFIHggPSAoXFxkKTtcbiIKKwkJICAuICIoY2xp ZW50IDAgcmVjZWl2aW5nXG4pKyIKKwkJICAuICIofGNsaWVudCAwIHNlbmRp bmcgU0VMRUNUIHBnX3NsZWVwXFwoMjBcXCk7XG4pIgorCQkgIC4gIlxcZzMq IgorCQkgIC4gImNsaWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0g eSBcXCsgKC0/XFxkKykgV0hFUkUgeCA9IChcXGQpO1xuIgorCQkgIC4gIlxc ZzMrIgorCQkgIC4gImNsaWVudCAwIGdvdCBhIGRlYWRsb2NrIGZhaWx1cmUg XFwoYXR0ZW1wdCAxLzJcXClcbiIKKwkJICAuICJjbGllbnQgMCBzZW5kaW5n IEVORDtcbiIKKwkJICAuICJcXGczKyIKKwkJICAuICJjbGllbnQgMCByZXBl YXRzIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24gXFwoYXR0ZW1wdCAyLzJcXClc biIKKwkJICAuICJjbGllbnQgMCBzZW5kaW5nIEJFR0lOO1xuIgorCQkgIC4g IlxcZzMrIgorCQkgIC4gImNsaWVudCAwIGV4ZWN1dGluZyBcXFxcc2V0IGRl bHRhMVxuIgorCQkgIC4gImNsaWVudCAwIGV4ZWN1dGluZyBcXFxcc2V0IGRl bHRhMlxuIgorCQkgIC4gImNsaWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNF VCB5ID0geSBcXCsgXFxnMSBXSEVSRSB4ID0gXFxnMjtcbiIKKwkJICAuICJc XGczKyIKKwkJICAuICJcXGc0IgorCQkgIC4gIlxcZzMqIgorCQkgIC4gImNs aWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0geSBcXCsgXFxnNSBX SEVSRSB4ID0gXFxnNjtcbiI7CisKKwkJbGlrZSgkZXJyMSAuICRlcnIyLAor CQkJcXJ7JHBhdHRlcm59LAorCQkJImNvbmN1cnJlbnQgZGVhZGxvY2sgdXBk YXRlIHdpdGggcmV0cnlpbmc6ICIKKwkJICAuICRpc29sYXRpb25fbGV2ZWxf c3FsCisJCSAgLiAiOiBjaGVjayB0aGUgcmV0cmllZCB0cmFuc2FjdGlvbiIp OworCX0KK30KKwordGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25fZmFpbHVy ZXMoUkVQRUFUQUJMRV9SRUFEKTsKK3Rlc3RfcGdiZW5jaF9zZXJpYWxpemF0 aW9uX2ZhaWx1cmVzKFNFUklBTElaQUJMRSk7CisKK3Rlc3RfcGdiZW5jaF9k ZWFkbG9ja19mYWlsdXJlcyhSRUFEX0NPTU1JVFRFRCk7Cit0ZXN0X3BnYmVu Y2hfZGVhZGxvY2tfZmFpbHVyZXMoUkVQRUFUQUJMRV9SRUFEKTsKK3Rlc3Rf cGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlcyhTRVJJQUxJWkFCTEUpOwotLSAK MS45LjEKCg== --=_f674006a274e840ace77840a3f7e182b Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=_f674006a274e840ace77840a3f7e182b--