Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYasb-0006oo-Lh for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Jul 2017 16:34:18 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dYasb-0005Wy-3V for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Jul 2017 16:34:17 +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 1dYaqe-000876-Qb for pgsql-hackers@postgresql.org; Fri, 21 Jul 2017 16:32:17 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYaqT-0004rk-SK for pgsql-hackers@postgresql.org; Fri, 21 Jul 2017 16:32:15 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 57C9E21C044E; Fri, 21 Jul 2017 19:32:03 +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=1500654723; bh=HdlpVK+fQMj1UMAZr07S2p5npFJyx4bHc5ZGQkZp9bc=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=k6wlCaVb45TvcWJmCrBDRizd+AGn2oSDKq0F8gRljq4gglRTwiFM2r0QfIZB0UEyP s44s2bg+QRiGOjDsU1ehqT1h9iese3C+ecqB5zWPRjzMb9Q2U4Tlbjs4Kp0hqwCSig kQ7ewYVTinQhTTbVulkJ7/+sHeYyqHGePSJnWq+o= Content-Type: multipart/mixed; boundary="=_5be643ee085631609b469a4e0ece3f2c" Date: Fri, 21 Jul 2017 19:32:02 +0300 From: Marina Polyakova To: PostgreSQL Developers Cc: Fabien COELHO , 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: <5c9f781b61d2292fcbe16ab4ff51499a@postgrespro.ru> References: <72a0d590d6ba06f242d75c2e641820ec@postgrespro.ru> <6b4a7fb36c9956595a89a08e5368a9c5@postgrespro.ru> <01df6ca86c78e2c80b4e4d021c99d53a@postgrespro.ru> <6ce8613f061001105654673506348c13@postgrespro.ru> <0e7afb8c40e9241510947332be8e2ed2@postgrespro.ru> <5c9f781b61d2292fcbe16ab4ff51499a@postgrespro.ru> Message-ID: <1d516bfc555ddde18adbf14bd474f0a2@postgrespro.ru> 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 --=_5be643ee085631609b469a4e0ece3f2c Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello again! Here is the third version of the patch for pgbench thanks to Fabien Coelho comments. As in the previous one, transactions with serialization and deadlock failures are rolled back and retried until they end successfully or their number of tries reaches maximum. Differences from the previous version: * Some code cleanup :) In particular, the Variables structure for managing client variables and only one new tap tests file (as they were recommended here [1] and here [2]). * There's no error if the last transaction in the script is not completed. But the transactions started in the previous scripts and/or not ending in the current script, are not rolled back and retried after the failure. Such script try is reported as failed because it contains a failure that was not rolled back and retried. * Usually the retries and/or failures are printed if they are not equal to zeros. In transaction/aggregation logs the failures are always printed and the retries are printed if max_tries is greater than 1. It is done for the general format of the log during the execution of the program. Patch is attached. Any suggestions are welcome! [1] https://www.postgresql.org/message-id/alpine.DEB.2.20.1707121338090.12795%40lancre [2] https://www.postgresql.org/message-id/alpine.DEB.2.20.1707121142300.12795%40lancre -- Marina Polyakova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_5be643ee085631609b469a4e0ece3f2c Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-Pgbench-Retry-transactions-with-serialization-or-.patch Content-Disposition: attachment; filename=v3-0001-Pgbench-Retry-transactions-with-serialization-or-.patch; size=88957 RnJvbSAwZWUzN2FhYWEyZTkzYjhkNzAxNzU2M2QyZjJmNTUzNTdjMzljMDhh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbmEgUG9seWFr b3ZhIDxtLnBvbHlha292YUBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCAy MSBKdWwgMjAxNyAxNzo1Nzo1OCArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjNd IFBnYmVuY2ggUmV0cnkgdHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlv biBvciBkZWFkbG9jawogZXJyb3JzCgpOb3cgdHJhbnNhY3Rpb25zIHdpdGgg c2VyaWFsaXphdGlvbiBvciBkZWFkbG9jayBmYWlsdXJlcyBjYW4gYmUgcm9s bGVkIGJhY2sgYW5kCnJldHJpZWQgYWdhaW4gYW5kIGFnYWluIHVudGlsIHRo ZXkgZW5kIHN1Y2Nlc3NmdWxseSBvciB0aGVpciBudW1iZXIgb2YgdHJpZXMK cmVhY2hlcyBtYXhpbXVtLiBZb3UgY2FuIHNldCB0aGUgbWF4aW11bSBudW1i ZXIgb2YgdHJpZXMgYnkgdXNpbmcgdGhlCmFwcHJvcHJpYXRlIGJlbmNobWFy a2luZyBvcHRpb24gKC0tbWF4LXRyaWVzKS4gVGhlIGRlZmF1bHQgdmFsdWUg aXMgMS4gSWYKdGhlcmUncmUgcmV0cmllcyBhbmQvb3IgZmFpbHVyZXMgdGhl aXIgc3RhdGlzdGljcyBhcmUgcHJpbnRlZCBpbiB0aGUgcHJvZ3Jlc3MsCmlu IHRoZSB0cmFuc2FjdGlvbiAvIGFnZ3JlZ2F0aW9uIGxvZ3MgYW5kIGluIHRo ZSBlbmQgd2l0aCBvdGhlciByZXN1bHRzIChhbGwgYW5kCmZvciBlYWNoIHNj cmlwdCkuIEEgdHJhbnNhY3Rpb24gZmFpbHVyZSBpcyByZXBvcnRlZCBoZXJl IG9ubHkgaWYgdGhlIGxhc3QgdHJ5IG9mCnRoaXMgdHJhbnNhY3Rpb24gZmFp bHMuIEFsc28gcmV0cmllcyBhbmQvb3IgZmFpbHVyZXMgYXJlIHByaW50ZWQg cGVyLWNvbW1hbmQKd2l0aCBhdmVyYWdlIGxhdGVuY2llcyBpZiB5b3UgdXNl IHRoZSBhcHByb3ByaWF0ZSBiZW5jaG1hcmtpbmcgb3B0aW9uCigtLXJlcG9y dC1wZXItY29tbWFuZCwgLXIpIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHJl dHJpZXMgYW5kL29yIGZhaWx1cmVzIGlzCm5vdCB6ZXJvLgoKTm90ZSB0aGF0 IHRoZSB0cmFuc2FjdGlvbnMgc3RhcnRlZCBpbiB0aGUgcHJldmlvdXMgc2Ny aXB0cyBhbmQvb3Igbm90IGVuZGluZyBpbgp0aGUgY3VycmVudCBzY3JpcHQs IGFyZSBub3Qgcm9sbGVkIGJhY2sgYW5kIHJldHJpZWQgYWZ0ZXIgdGhlIGZh aWx1cmUuIFN1Y2gKc2NyaXB0IHRyeSBpcyByZXBvcnRlZCBhcyBmYWlsZWQg YmVjYXVzZSBpdCBjb250YWlucyBhIGZhaWx1cmUgdGhhdCB3YXMgbm90CnJv bGxlZCBiYWNrIGFuZCByZXRyaWVkLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYv cGdiZW5jaC5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgMjQwICsrKysr LQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyAgICAgICAgICAgICAgICAg ICAgICAgICAgfCA4NzIgKysrKysrKysrKysrKysrKystLS0tCiAuLi4vdC8w MDJfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHVyZXMucGwgICB8 IDQ1OSArKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNDEyIGluc2Vy dGlvbnMoKyksIDE1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmluL3BnYmVuY2gvdC8wMDJfc2VyaWFsaXphdGlvbl9hbmRfZGVh ZGxvY2tfZmFpbHVyZXMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cmVmL3BnYmVuY2guc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5z Z21sCmluZGV4IDY0YjA0M2IuLjNiYmVlYzUgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9y ZWYvcGdiZW5jaC5zZ21sCkBAIC00OSw2ICs0OSw3IEBACiAKIDxzY3JlZW4+ CiB0cmFuc2FjdGlvbiB0eXBlOiAmbHQ7YnVpbHRpbjogVFBDLUIgKHNvcnQg b2YpJmd0OwordHJhbnNhY3Rpb24gbWF4aW11bSB0cmllcyBudW1iZXI6IDEK IHNjYWxpbmcgZmFjdG9yOiAxMAogcXVlcnkgbW9kZTogc2ltcGxlCiBudW1i ZXIgb2YgY2xpZW50czogMTAKQEAgLTU5LDcgKzYwLDcgQEAgdHBzID0gODUu MTg0ODcxIChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQog dHBzID0gODUuMjk2MzQ2IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKQogPC9zY3JlZW4+CiAKLSAgVGhlIGZpcnN0IHNpeCBsaW5lcyBy ZXBvcnQgc29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgcGFyYW1ldGVyCisg IFRoZSBmaXJzdCBzZXZlbiBsaW5lcyByZXBvcnQgc29tZSBvZiB0aGUgbW9z dCBpbXBvcnRhbnQgcGFyYW1ldGVyCiAgIHNldHRpbmdzLiAgVGhlIG5leHQg bGluZSByZXBvcnRzIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGNvbXBs ZXRlZAogICBhbmQgaW50ZW5kZWQgKHRoZSBsYXR0ZXIgYmVpbmcganVzdCB0 aGUgcHJvZHVjdCBvZiBudW1iZXIgb2YgY2xpZW50cwogICBhbmQgbnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50KTsgdGhlc2Ugd2lsbCBiZSBl cXVhbCB1bmxlc3MgdGhlIHJ1bgpAQCAtNDM2LDIyICs0MzcsMzMgQEAgcGdi ZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0 aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4KICAgICAgICAgU2hvdyBw cm9ncmVzcyByZXBvcnQgZXZlcnkgPHJlcGxhY2VhYmxlPnNlYzwvPiBzZWNv bmRzLiAgVGhlIHJlcG9ydAogICAgICAgICBpbmNsdWRlcyB0aGUgdGltZSBz aW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4sIHRoZSB0cHMgc2luY2Ug dGhlCiAgICAgICAgIGxhc3QgcmVwb3J0LCBhbmQgdGhlIHRyYW5zYWN0aW9u IGxhdGVuY3kgYXZlcmFnZSBhbmQgc3RhbmRhcmQKLSAgICAgICAgZGV2aWF0 aW9uIHNpbmNlIHRoZSBsYXN0IHJlcG9ydC4gIFVuZGVyIHRocm90dGxpbmcg KDxvcHRpb24+LVI8Lz4pLAotICAgICAgICB0aGUgbGF0ZW5jeSBpcyBjb21w dXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRyYW5zYWN0aW9uIHNjaGVkdWxl ZAotICAgICAgICBzdGFydCB0aW1lLCBub3QgdGhlIGFjdHVhbCB0cmFuc2Fj dGlvbiBiZWdpbm5pbmcgdGltZSwgdGh1cyBpdCBhbHNvCi0gICAgICAgIGlu Y2x1ZGVzIHRoZSBhdmVyYWdlIHNjaGVkdWxlIGxhZyB0aW1lLgorICAgICAg ICBkZXZpYXRpb24gc2luY2UgdGhlIGxhc3QgcmVwb3J0LiAgSWYgc2luY2Ug dGhlIGxhc3QgcmVwb3J0IHRoZXJlIGFyZQorICAgICAgICB0cmFuc2FjdGlv bnMgdGhhdCBlbmRlZCB3aXRoIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFp bHVyZXMgdGhleSBhcmUKKyAgICAgICAgYWxzbyByZXBvcnRlZCBoZXJlIGFz IGZhaWxlZCAoc2VlCisgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZhaWx1cmVz LWFuZC1yZXRyaWVzIgorICAgICAgICBlbmR0ZXJtPSJmYWlsdXJlcy1hbmQt cmV0cmllcy10aXRsZSI+IGZvciBtb3JlIGluZm9ybWF0aW9uKS4gIFVuZGVy CisgICAgICAgIHRocm90dGxpbmcgKDxvcHRpb24+LVI8Lz4pLCB0aGUgbGF0 ZW5jeSBpcyBjb21wdXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgICAg IHRyYW5zYWN0aW9uIHNjaGVkdWxlZCBzdGFydCB0aW1lLCBub3QgdGhlIGFj dHVhbCB0cmFuc2FjdGlvbiBiZWdpbm5pbmcKKyAgICAgICAgdGltZSwgdGh1 cyBpdCBhbHNvIGluY2x1ZGVzIHRoZSBhdmVyYWdlIHNjaGVkdWxlIGxhZyB0 aW1lLiAgSWYgc2luY2UgdGhlCisgICAgICAgIGxhc3QgcmVwb3J0IHRoZXJl J3JlIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgYmVlbiByb2xsZWQgYmFjayBh bmQgcmV0cmllZAorICAgICAgICBhZnRlciBhIHNlcmlhbGl6YXRpb24vZGVh ZGxvY2sgZmFpbHVyZSwgdGhlIHJlcG9ydCBpbmNsdWRlcyB0aGUKKyAgICAg ICAgbnVtYmVyIG9mIHJldHJpZXMgb2YgYWxsIHN1Y2ggdHJhbnNhY3Rpb25z ICh1c2Ugb3B0aW9uCisgICAgICAgIDxvcHRpb24+LS1tYXgtdHJpZXM8Lz4g dG8gbWFrZSBpdCBwb3NzaWJsZSkuCiAgICAgICAgPC9wYXJhPgogICAgICAg PC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LXI8L29wdGlvbj48 L3Rlcm0+Ci0gICAgICA8dGVybT48b3B0aW9uPi0tcmVwb3J0LWxhdGVuY2ll czwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXBv cnQtcGVyLWNvbW1hbmQ8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0 ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFJlcG9ydCB0aGUgYXZlcmFn ZSBwZXItc3RhdGVtZW50IGxhdGVuY3kgKGV4ZWN1dGlvbiB0aW1lIGZyb20g dGhlCi0gICAgICAgIHBlcnNwZWN0aXZlIG9mIHRoZSBjbGllbnQpIG9mIGVh Y2ggY29tbWFuZCBhZnRlciB0aGUgYmVuY2htYXJrCi0gICAgICAgIGZpbmlz aGVzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorICAgICAgICBSZXBvcnQg dGhlIGZvbGxvd2luZyBzdGF0aXN0aWNzIGZvciBlYWNoIGNvbW1hbmQgYWZ0 ZXIgdGhlIGJlbmNobWFyaworICAgICAgICBmaW5pc2hlczogdGhlIGF2ZXJh Z2UgcGVyLXN0YXRlbWVudCBsYXRlbmN5IChleGVjdXRpb24gdGltZSBmcm9t IHRoZQorICAgICAgICBwZXJzcGVjdGl2ZSBvZiB0aGUgY2xpZW50KSwgdGhl IG51bWJlciBvZiBzZXJpYWxpemF0aW9uIGZhaWx1cmVzIGFuZAorICAgICAg ICByZXRyaWVzLCB0aGUgbnVtYmVyIG9mIGRlYWRsb2NrIGZhaWx1cmVzIGFu ZCByZXRyaWVzLiBOb3RlIHRoYXQgdGhlCisgICAgICAgIHJlcG9ydCBjb250 YWlucyBmYWlsdXJlcyBvbmx5IGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgZmFp bHVyZXMgZm9yIGFsbAorICAgICAgICBzY3JpcHRzIGlzIG5vdCB6ZXJvLiBU aGUgc2FtZSBmb3IgcmV0cmllcy4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgog ICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgpAQCAtNDk2LDYgKzUwOCwxNSBAQCBwZ2JlbmNoIDxvcHRp b25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJl cGxhY2VhYmxlPmRibmFtZTwvPgogICAgICAgIDwvcGFyYT4KIAogICAgICAg IDxwYXJhPgorICAgICAgICBUcmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0 aW9uIG9yIGRlYWRsb2NrIGZhaWx1cmVzIChvciB3aXRoIGJvdGgKKyAgICAg ICAgb2YgdGhlbSBpZiB1c2VkIHNjcmlwdCBjb250YWlucyBzZXZlcmFsIHRy YW5zYWN0aW9uczsgc2VlCisgICAgICAgIDx4cmVmIGxpbmtlbmQ9InRyYW5z YWN0aW9ucy1hbmQtc2NyaXB0cyIKKyAgICAgICAgZW5kdGVybT0idHJhbnNh Y3Rpb25zLWFuZC1zY3JpcHRzLXRpdGxlIj4gZm9yIG1vcmUgaW5mb3JtYXRp b24pIGFyZQorICAgICAgICBtYXJrZWQgc2VwYXJhdGVseSBhbmQgdGhlaXIg dGltZSBpcyBub3QgcmVwb3J0ZWQgYXMgZm9yIHNraXBwZWQKKyAgICAgICAg dHJhbnNhY3Rpb25zLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxwYXJh PgogICAgICAgICBBIGhpZ2ggc2NoZWR1bGUgbGFnIHRpbWUgaXMgYW4gaW5k aWNhdGlvbiB0aGF0IHRoZSBzeXN0ZW0gY2Fubm90CiAgICAgICAgIHByb2Nl c3MgdHJhbnNhY3Rpb25zIGF0IHRoZSBzcGVjaWZpZWQgcmF0ZSwgd2l0aCB0 aGUgY2hvc2VuIG51bWJlciBvZgogICAgICAgICBjbGllbnRzIGFuZCB0aHJl YWRzLiBXaGVuIHRoZSBhdmVyYWdlIHRyYW5zYWN0aW9uIGV4ZWN1dGlvbiB0 aW1lIGlzCkBAIC01OTAsNiArNjExLDMyIEBAIHBnYmVuY2ggPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFj ZWFibGU+ZGJuYW1lPC8+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tbWF4LXRy aWVzPTxyZXBsYWNlYWJsZT50cmllc19udW1iZXI8Lz48L29wdGlvbj48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgZm9yIHRyYW5zYWN0 aW9ucyB3aXRoCisgICAgICAgIHNlcmlhbGl6YXRpb24vZGVhZGxvY2sgZmFp bHVyZXMuIERlZmF1bHQgaXMgMS4KKyAgICAgICA8L3BhcmE+CisgICAgICAg PG5vdGU+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgIEJlIGNhcmVmdWwg aWYgeW91IHdhbnQgdG8gcmVwZWF0IHRyYW5zYWN0aW9ucyB3aXRoIHNoZWxs IGNvbW1hbmRzCisgICAgICAgICBpbnNpZGUuIFVubGlrZSBzcWwgY29tbWFu ZHMgdGhlIHJlc3VsdCBvZiBzaGVsbCBjb21tYW5kIGlzIG5vdCByb2xsZWQK KyAgICAgICAgIGJhY2sgZXhjZXB0IGZvciB0aGUgdmFyaWFibGUgdmFsdWUg b2YgY29tbWFuZAorICAgICAgICAgPGNvbW1hbmQ+XHNldHNoZWxsPC9jb21t YW5kPi4gSWYgYSBzaGVsbCBjb21tYW5kIGZhaWxzIGl0cyBjbGllbnQgaXMK KyAgICAgICAgIGFib3J0ZWQgd2l0aG91dCByZXN0YXJ0aW5nLgorICAgICAg ICAgPC9wYXJhPgorICAgICAgIDwvbm90ZT4KKyAgICAgICA8bm90ZT4KKyAg ICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIHRyYW5zYWN0aW9ucyBzdGFy dGVkIGluIHRoZSBwcmV2aW91cyBzY3JpcHRzIGFuZC9vciBub3QgZW5kaW5n IGluCisgICAgICAgICB0aGUgY3VycmVudCBzY3JpcHQsIGFyZSBub3Qgcm9s bGVkIGJhY2sgYW5kIHJldHJpZWQgYWZ0ZXIgdGhlIGZhaWx1cmUuCisgICAg ICAgICBTdWNoIHNjcmlwdCB0cnkgaXMgcmVwb3J0ZWQgYXMgZmFpbGVkLgor ICAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbm90ZT4KKyAgICAgIDwvbGlz dGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0 ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tcHJvZ3Jlc3MtdGltZXN0 YW1wPC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgogICAgICAg IDxwYXJhPgpAQCAtNjkzLDggKzc0MCw4IEBAIHBnYmVuY2ggPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFj ZWFibGU+ZGJuYW1lPC8+CiAgPHJlZnNlY3QxPgogICA8dGl0bGU+Tm90ZXM8 L3RpdGxlPgogCi0gPHJlZnNlY3QyPgotICA8dGl0bGU+V2hhdCBpcyB0aGUg PHF1b3RlPlRyYW5zYWN0aW9uPC8+IEFjdHVhbGx5IFBlcmZvcm1lZCBpbiA8 YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+PzwvdGl0bGU+Cisg PHJlZnNlY3QyIGlkPSJ0cmFuc2FjdGlvbnMtYW5kLXNjcmlwdHMiPgorICA8 dGl0bGUgaWQ9InRyYW5zYWN0aW9ucy1hbmQtc2NyaXB0cy10aXRsZSI+V2hh dCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC8+IEFjdHVhbGx5IFBlcmZv cm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+Pzwv dGl0bGU+CiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdiZW5jaDwv PiBleGVjdXRlcyB0ZXN0IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5CkBAIC0x MTQ4LDcgKzExOTUsNyBAQCBFTkQ7CiAgICBUaGUgZm9ybWF0IG9mIHRoZSBs b2cgaXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8 Lz4gPHJlcGxhY2VhYmxlPnRyYW5zYWN0aW9uX25vPC8+IDxyZXBsYWNlYWJs ZT50aW1lPC8+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88Lz4gPHJlcGxhY2Vh YmxlPnRpbWVfZXBvY2g8Lz4gPHJlcGxhY2VhYmxlPnRpbWVfdXM8Lz4gPG9w dGlvbmFsPiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFnPC9yZXBsYWNlYWJs ZT4gPC9vcHRpb25hbD4KKzxyZXBsYWNlYWJsZT5jbGllbnRfaWQ8Lz4gPHJl cGxhY2VhYmxlPnRyYW5zYWN0aW9uX25vPC8+IDxyZXBsYWNlYWJsZT50aW1l PC8+IDxyZXBsYWNlYWJsZT5zY3JpcHRfbm88Lz4gPHJlcGxhY2VhYmxlPnRp bWVfZXBvY2g8Lz4gPHJlcGxhY2VhYmxlPnRpbWVfdXM8Lz4gPG9wdGlvbmFs PiA8cmVwbGFjZWFibGU+c2NoZWR1bGVfbGFnPC9yZXBsYWNlYWJsZT4gPC9v cHRpb25hbD4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2VyaWFsaXphdGlv bl9yZXRyaWVzPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmRlYWRsb2Nr X3JldHJpZXM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgogPC9zeW5vcHNp cz4KIAogICAgd2hlcmUKQEAgLTExNjksNiArMTIxNiwxNCBAQCBFTkQ7CiAg ICBXaGVuIGJvdGggPG9wdGlvbj4tLXJhdGU8Lz4gYW5kIDxvcHRpb24+LS1s YXRlbmN5LWxpbWl0PC8+IGFyZSB1c2VkLAogICAgdGhlIDxyZXBsYWNlYWJs ZT50aW1lPC8+IGZvciBhIHNraXBwZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBy ZXBvcnRlZCBhcwogICAgPGxpdGVyYWw+c2tpcHBlZDwvPi4KKyAgIDxyZXBs YWNlYWJsZT5zZXJpYWxpemF0aW9uX3JldHJpZXM8Lz4gYW5kIDxyZXBsYWNl YWJsZT5kZWFkbG9ja19yZXRyaWVzPC8+CisgICBhcmUgdGhlIHN1bXMgb2Yg YWxsIHRoZSByZXRyaWVzIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGZhaWx1 cmVzIGR1cmluZyB0aGUKKyAgIGN1cnJlbnQgc2NyaXB0IGV4ZWN1dGlvbi4g VGhleSBhcmUgb25seSBwcmVzZW50IHdoZW4gdGhlIG1heGltdW0gbnVtYmVy IG9mCisgICB0cmllcyBmb3IgdHJhbnNhY3Rpb25zIGlzIG1vcmUgdGhhbiAx ICg8b3B0aW9uPi0tbWF4LXRyaWVzPC8+KS4KKyAgIElmIHRoZSB0cmFuc2Fj dGlvbiBlbmRlZCB3aXRoIGEgc2VyaWFsaXphdGlvbi9kZWFkbG9jayBmYWls dXJlLCBpdHMKKyAgIDxyZXBsYWNlYWJsZT50aW1lPC8+IHdpbGwgYmUgcmVw b3J0ZWQgYXMgPGxpdGVyYWw+ZmFpbGVkPC8+IChzZWUKKyAgIDx4cmVmIGxp bmtlbmQ9ImZhaWx1cmVzLWFuZC1yZXRyaWVzIiBlbmR0ZXJtPSJmYWlsdXJl cy1hbmQtcmV0cmllcy10aXRsZSI+CisgICBmb3IgbW9yZSBpbmZvcm1hdGlv bikuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTExOTgsNiArMTI1Mywy MiBAQCBFTkQ7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KKyAgIEV4YW1wbGUg d2l0aCBmYWlsdXJlcyBhbmQgcmV0cmllcyAodGhlIG1heGltdW0gbnVtYmVy IG9mIHRyaWVzIGlzIDEwKToKKzxzY3JlZW4+CiszIDAgNDc0MjMgMCAxNDk5 NDE0NDk4IDM0NTAxIDQgMAorMyAxIDgzMzMgMCAxNDk5NDE0NDk4IDQyODQ4 IDEgMAorMyAyIDgzNTggMCAxNDk5NDE0NDk4IDUxMjE5IDEgMAorNCAwIDcy MzQ1IDAgMTQ5OTQxNDQ5OCA1OTQzMyA3IDAKKzEgMyA0MTcxOCAwIDE0OTk0 MTQ0OTggNjc4NzkgNSAwCisxIDQgODQxNiAwIDE0OTk0MTQ0OTggNzYzMTEg MSAwCiszIDMgMzMyMzUgMCAxNDk5NDE0NDk4IDg0NDY5IDQgMAorMCAwIGZh aWxlZCAwIDE0OTk0MTQ0OTggODQ5MDUgMTAgMAorMiAwIGZhaWxlZCAwIDE0 OTk0MTQ0OTggODYyNDggMTAgMAorMyA0IDgzMDcgMCAxNDk5NDE0NDk4IDky Nzg4IDEgMAorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KICAg IFdoZW4gcnVubmluZyBhIGxvbmcgdGVzdCBvbiBoYXJkd2FyZSB0aGF0IGNh biBoYW5kbGUgYSBsb3Qgb2YgdHJhbnNhY3Rpb25zLAogICAgdGhlIGxvZyBm aWxlcyBjYW4gYmVjb21lIHZlcnkgbGFyZ2UuICBUaGUgPG9wdGlvbj4tLXNh bXBsaW5nLXJhdGU8Lz4gb3B0aW9uCiAgICBjYW4gYmUgdXNlZCB0byBsb2cg b25seSBhIHJhbmRvbSBzYW1wbGUgb2YgdHJhbnNhY3Rpb25zLgpAQCAtMTIx Miw3ICsxMjgzLDcgQEAgRU5EOwogICAgZm9ybWF0IGlzIHVzZWQgZm9yIHRo ZSBsb2cgZmlsZXM6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5pbnRl cnZhbF9zdGFydDwvPiA8cmVwbGFjZWFibGU+bnVtX3RyYW5zYWN0aW9uczwv PiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3k8Lz4gPHJlcGxhY2VhYmxlPnN1 bV9sYXRlbmN5XzI8Lz4gPHJlcGxhY2VhYmxlPm1pbl9sYXRlbmN5PC8+IDxy ZXBsYWNlYWJsZT5tYXhfbGF0ZW5jeTwvPiA8b3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5zdW1fbGFnPC8+IDxyZXBsYWNlYWJsZT5zdW1fbGFnXzI8Lz4gPHJl cGxhY2VhYmxlPm1pbl9sYWc8Lz4gPHJlcGxhY2VhYmxlPm1heF9sYWc8Lz4g PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2tpcHBlZDwvPiA8L29wdGlvbmFs PiA8L29wdGlvbmFsPgorPHJlcGxhY2VhYmxlPmludGVydmFsX3N0YXJ0PC8+ IDxyZXBsYWNlYWJsZT5udW1fdHJhbnNhY3Rpb25zPC8+IDxyZXBsYWNlYWJs ZT5zdW1fbGF0ZW5jeTwvPiA8cmVwbGFjZWFibGU+c3VtX2xhdGVuY3lfMjwv PiA8cmVwbGFjZWFibGU+bWluX2xhdGVuY3k8Lz4gPHJlcGxhY2VhYmxlPm1h eF9sYXRlbmN5PC8+IDxyZXBsYWNlYWJsZT5mYWlsdXJlczwvPiA8b3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5zdW1fbGFnPC8+IDxyZXBsYWNlYWJsZT5zdW1f bGFnXzI8Lz4gPHJlcGxhY2VhYmxlPm1pbl9sYWc8Lz4gPHJlcGxhY2VhYmxl Pm1heF9sYWc8Lz4gPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+c2tpcHBlZDwv PiA8L29wdGlvbmFsPiA8L29wdGlvbmFsPiA8b3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5zZXJpYWxpemF0aW9uX3JldHJpZXM8Lz4gPHJlcGxhY2VhYmxlPmRl YWRsb2NrX3JldHJpZXM8Lz4gPC9vcHRpb25hbD4KIDwvc3lub3BzaXM+CiAK ICAgIHdoZXJlCkBAIC0xMjI2LDcgKzEyOTcsMTEgQEAgRU5EOwogICAgdHJh bnNhY3Rpb24gbGF0ZW5jaWVzIHdpdGhpbiB0aGUgaW50ZXJ2YWwsCiAgICA8 cmVwbGFjZWFibGU+bWluX2xhdGVuY3k8Lz4gaXMgdGhlIG1pbmltdW0gbGF0 ZW5jeSB3aXRoaW4gdGhlIGludGVydmFsLAogICAgYW5kCi0gICA8cmVwbGFj ZWFibGU+bWF4X2xhdGVuY3k8Lz4gaXMgdGhlIG1heGltdW0gbGF0ZW5jeSB3 aXRoaW4gdGhlIGludGVydmFsLgorICAgPHJlcGxhY2VhYmxlPm1heF9sYXRl bmN5PC8+IGlzIHRoZSBtYXhpbXVtIGxhdGVuY3kgd2l0aGluIHRoZSBpbnRl cnZhbCwKKyAgIDxyZXBsYWNlYWJsZT5mYWlsdXJlczwvPiBpcyB0aGUgbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBlbmRlZCB3aXRoCisgICBzZXJpYWxpemF0 aW9uL2RlYWRsb2NrIGZhaWx1cmVzIHdpdGhpbiB0aGUgaW50ZXJ2YWwgKHNl ZQorICAgPHhyZWYgbGlua2VuZD0iZmFpbHVyZXMtYW5kLXJldHJpZXMiIGVu ZHRlcm09ImZhaWx1cmVzLWFuZC1yZXRyaWVzLXRpdGxlIj4KKyAgIGZvciBt b3JlIGluZm9ybWF0aW9uKS4KICAgIFRoZSBuZXh0IGZpZWxkcywKICAgIDxy ZXBsYWNlYWJsZT5zdW1fbGFnPC8+LCA8cmVwbGFjZWFibGU+c3VtX2xhZ18y PC8+LCA8cmVwbGFjZWFibGU+bWluX2xhZzwvPiwKICAgIGFuZCA8cmVwbGFj ZWFibGU+bWF4X2xhZzwvPiwgYXJlIG9ubHkgcHJlc2VudCBpZiB0aGUgPG9w dGlvbj4tLXJhdGU8Lz4KQEAgLTEyMzQsMjEgKzEzMDksMjYgQEAgRU5EOwog ICAgVGhleSBwcm92aWRlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHRpbWUgZWFj aCB0cmFuc2FjdGlvbiBoYWQgdG8gd2FpdCBmb3IgdGhlCiAgICBwcmV2aW91 cyBvbmUgdG8gZmluaXNoLCBpLmUuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g ZWFjaCB0cmFuc2FjdGlvbidzCiAgICBzY2hlZHVsZWQgc3RhcnQgdGltZSBh bmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgc3RhcnRlZC4KLSAgIFRoZSB2ZXJ5 IGxhc3QgZmllbGQsIDxyZXBsYWNlYWJsZT5za2lwcGVkPC8+LAorICAgVGhl IG5leHQgZmllbGQsIDxyZXBsYWNlYWJsZT5za2lwcGVkPC8+LAogICAgaXMg b25seSBwcmVzZW50IGlmIHRoZSA8b3B0aW9uPi0tbGF0ZW5jeS1saW1pdDwv PiBvcHRpb24gaXMgdXNlZCwgdG9vLgogICAgSXQgY291bnRzIHRoZSBudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgYmVjYXVzZSB0aGV5IHdvdWxk IGhhdmUKICAgIHN0YXJ0ZWQgdG9vIGxhdGUuCisgICBUaGUgdmVyeSBsYXN0 IGZpZWxkcywgPHJlcGxhY2VhYmxlPnNlcmlhbGl6YXRpb25fcmV0cmllczwv PiBhbmQKKyAgIDxyZXBsYWNlYWJsZT5kZWFkbG9ja19yZXRyaWVzPC8+LCBh cmUgdGhlIHN1bXMgb2YgYWxsIHRoZSByZXRyaWVzIGFmdGVyIHRoZQorICAg Y29ycmVzcG9uZGluZyBmYWlsdXJlcyB3aXRoaW4gdGhlIGludGVydmFsLiBU aGV5IGFyZSBvbmx5IHByZXNlbnQgd2hlbiB0aGUKKyAgIG1heGltdW0gbnVt YmVyIG9mIHRyaWVzIGZvciB0cmFuc2FjdGlvbnMgaXMgbW9yZSB0aGFuIDEK KyAgICg8b3B0aW9uPi0tbWF4LXRyaWVzPC8+KS4KICAgIEVhY2ggdHJhbnNh Y3Rpb24gaXMgY291bnRlZCBpbiB0aGUgaW50ZXJ2YWwgd2hlbiBpdCB3YXMg Y29tbWl0dGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBIZXJlIGlz IHNvbWUgZXhhbXBsZSBvdXRwdXQ6CiA8c2NyZWVuPgotMTM0NTgyODUwMSA1 NjAxIDE1NDI3NDQgNDgzNTUyNDE2IDYxIDI1NzMKLTEzNDU4Mjg1MDMgNzg4 NCAxOTc5ODEyIDU2NTgwNjczNiA2MCAxNDc5Ci0xMzQ1ODI4NTA1IDcyMDgg MTk3OTQyMiA1NjcyNzc1NTIgNTkgMTM5MQotMTM0NTgyODUwNyA3Njg1IDE5 ODAyNjggNTY5Nzg0NzE0IDYwIDEzOTgKLTEzNDU4Mjg1MDkgNzA3MyAxOTc5 Nzc5IDU3MzQ4OTk0MSAyMzYgMTQxMQorMTM0NTgyODUwMSA1NjAxIDE1NDI3 NDQgNDgzNTUyNDE2IDYxIDI1NzMgMAorMTM0NTgyODUwMyA3ODg0IDE5Nzk4 MTIgNTY1ODA2NzM2IDYwIDE0NzkgMAorMTM0NTgyODUwNSA3MjA4IDE5Nzk0 MjIgNTY3Mjc3NTUyIDU5IDEzOTEgMAorMTM0NTgyODUwNyA3Njg1IDE5ODAy NjggNTY5Nzg0NzE0IDYwIDEzOTggMAorMTM0NTgyODUwOSA3MDczIDE5Nzk3 NzkgNTczNDg5OTQxIDIzNiAxNDExIDAKIDwvc2NyZWVuPjwvcGFyYT4KIAog ICA8cGFyYT4KQEAgLTEyNjAsMTMgKzEzNDAsNTEgQEAgRU5EOwogIDwvcmVm c2VjdDI+CiAKICA8cmVmc2VjdDI+Ci0gIDx0aXRsZT5QZXItU3RhdGVtZW50 IExhdGVuY2llczwvdGl0bGU+CisgIDx0aXRsZT5QZXItU3RhdGVtZW50IFJl cG9ydDwvdGl0bGU+CiAKICAgPHBhcmE+Ci0gICBXaXRoIHRoZSA8b3B0aW9u Pi1yPC8+IG9wdGlvbiwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8Lz4gY29sbGVj dHMKLSAgIHRoZSBlbGFwc2VkIHRyYW5zYWN0aW9uIHRpbWUgb2YgZWFjaCBz dGF0ZW1lbnQgZXhlY3V0ZWQgYnkgZXZlcnkKLSAgIGNsaWVudC4gIEl0IHRo ZW4gcmVwb3J0cyBhbiBhdmVyYWdlIG9mIHRob3NlIHZhbHVlcywgcmVmZXJy ZWQgdG8KLSAgIGFzIHRoZSBsYXRlbmN5IGZvciBlYWNoIHN0YXRlbWVudCwg YWZ0ZXIgdGhlIGJlbmNobWFyayBoYXMgZmluaXNoZWQuCisgICBXaXRoIHRo ZSA8b3B0aW9uPi1yPC8+IG9wdGlvbiwgPGFwcGxpY2F0aW9uPnBnYmVuY2g8 Lz4gY29sbGVjdHMgdGhlIGZvbGxvd2luZworICAgc3RhdGlzdGljcyBmb3Ig ZWFjaCBzdGF0ZW1lbnQ6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICB0aGUgZWxhcHNlZCB0 cmFuc2FjdGlvbiB0aW1lIG9mIGVhY2ggc3RhdGVtZW50OyA8YXBwbGljYXRp b24+cGdiZW5jaDwvPgorICAgICAgICAgcmVwb3J0cyBhbiBhdmVyYWdlIG9m IHRob3NlIHZhbHVlcywgcmVmZXJyZWQgdG8gYXMgdGhlIGxhdGVuY3kgZm9y IGVhY2gKKyAgICAgICAgIHN0YXRlbWVudDsKKyAgICAgICA8L3BhcmE+Cisg ICAgIDwvbGlzdGl0ZW0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgIHRoZSBudW1iZXIgb2Ygc2VyaWFsaXphdGlvbiBhbmQg ZGVhZGxvY2sgZmFpbHVyZXMgdGhhdCB3ZXJlIG5vdCByZXRyaWVkCisgICAg ICAgICAoc2VlIDx4cmVmIGxpbmtlbmQ9ImZhaWx1cmVzLWFuZC1yZXRyaWVz IgorICAgICAgICAgZW5kdGVybT0iZmFpbHVyZXMtYW5kLXJldHJpZXMtdGl0 bGUiPiBmb3IgbW9yZSBpbmZvcm1hdGlvbik7CisgICAgICAgPC9wYXJhPgor ICAgICAgIDxub3RlPgorICAgICAgICAgPHBhcmE+VGhlIHRvdGFsIHN1bSBv ZiBwZXItY29tbWFuZCBmYWlsdXJlcyBjYW4gYmUgZ3JlYXRlciB0aGFuIHRo ZQorICAgICAgICAgbnVtYmVyIG9mIGZhaWxlZCB0cmFuc2FjdGlvbnMuIFNl ZQorICAgICAgICAgPHhyZWYgbGlua2VuZD0idHJhbnNhY3Rpb25zLWFuZC1z Y3JpcHRzIgorICAgICAgICAgZW5kdGVybT0idHJhbnNhY3Rpb25zLWFuZC1z Y3JpcHRzLXRpdGxlIj4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAg ICA8L3BhcmE+CisgICAgICAgPC9ub3RlPgorICAgICA8L2xpc3RpdGVtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgICB0aGUg bnVtYmVyIG9mIHJldHJpZXMgd2hlbiB0aGVyZSB3YXMgYSBzZXJpYWxpemF0 aW9uL2RlYWRsb2NrIGZhaWx1cmUKKyAgICAgICAgIGluIHRoaXMgY29tbWFu ZDsgdGhleSBhcmUgcmVwb3J0ZWQgYXMgc2VyaWFsaXphdGlvbi9kZWFkbG9j ayByZXRyaWVzLAorICAgICAgICAgcmVzcGVjdGl2ZWx5LgorICAgICAgIDwv cGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0Pgor CisgICA8bm90ZT4KKyAgICAgPHBhcmE+CisgICAgIFRoZSByZXBvcnQgY29u dGFpbnMgZmFpbHVyZXMgb25seSBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIGZh aWx1cmVzIGZvciBhbGwKKyAgICAgc2NyaXB0cyBpcyBub3QgemVyby4gVGhl IHNhbWUgZm9yIHJldHJpZXMuCisgICAgIDwvcGFyYT4KKyAgIDwvbm90ZT4K KworICAgQWxsIHZhbHVlcyBhcmUgY29tcHV0ZWQgZm9yIGVhY2ggc3RhdGVt ZW50IGV4ZWN1dGVkIGJ5IGV2ZXJ5IGNsaWVudCBhbmQgYXJlCisgICByZXBv cnRlZCBhZnRlciB0aGUgYmVuY2htYXJrIGhhcyBmaW5pc2hlZC4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgpAQCAtMTI3NCw2ICsxMzkyLDcgQEAgRU5EOwog PHNjcmVlbj4KIHN0YXJ0aW5nIHZhY3V1bS4uLmVuZC4KIHRyYW5zYWN0aW9u IHR5cGU6ICZsdDtidWlsdGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7Cit0cmFu c2FjdGlvbiBtYXhpbXVtIHRyaWVzIG51bWJlcjogMQogc2NhbGluZyBmYWN0 b3I6IDEKIHF1ZXJ5IG1vZGU6IHNpbXBsZQogbnVtYmVyIG9mIGNsaWVudHM6 IDEwCkBAIC0xMjk4LDEwICsxNDE3LDUxIEBAIHNjcmlwdCBzdGF0aXN0aWNz OgogICAgICAgICAwLjM3MSAgSU5TRVJUIElOVE8gcGdiZW5jaF9oaXN0b3J5 ICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpIFZBTFVFUyAoOnRpZCwg OmJpZCwgOmFpZCwgOmRlbHRhLCBDVVJSRU5UX1RJTUVTVEFNUCk7CiAgICAg ICAgIDEuMjEyICBFTkQ7CiA8L3NjcmVlbj4KKworICAgQW5vdGhlciBleGFt cGxlIG9mIG91dHB1dCBmb3IgdGhlIGRlZmF1bHQgc2NyaXB0IHVzaW5nIHNl cmlhbGl6YWJsZSBkZWZhdWx0CisgICB0cmFuc2FjdGlvbiBpc29sYXRpb24g bGV2ZWwgKDxjb21tYW5kPlBHT1BUSU9OUz0nLWMKKyAgIGRlZmF1bHRfdHJh bnNhY3Rpb25faXNvbGF0aW9uPXNlcmlhbGl6YWJsZScgcGdiZW5jaCAuLi48 L2NvbW1hbmQ+KToKKzxzY3JlZW4+CitzdGFydGluZyB2YWN1dW0uLi5lbmQu Cit0cmFuc2FjdGlvbiB0eXBlOiAmbHQ7YnVpbHRpbjogVFBDLUIgKHNvcnQg b2YpJmd0OwordHJhbnNhY3Rpb24gbWF4aW11bSB0cmllcyBudW1iZXI6IDEw MAorc2NhbGluZyBmYWN0b3I6IDEKK3F1ZXJ5IG1vZGU6IHNpbXBsZQorbnVt YmVyIG9mIGNsaWVudHM6IDEwCitudW1iZXIgb2YgdGhyZWFkczogMQorbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xpZW50OiAxMDAwCitudW1iZXIg b2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogMTAwMDAvMTAw MDAKK251bWJlciBvZiBmYWlsdXJlczogMzQ5MyAoMzQuOTMwICUpCitudW1i ZXIgb2YgcmV0cmllczogNDQ5NzQzIChzZXJpYWxpemF0aW9uOiA0NDk3NDMs IGRlYWRsb2NrczogMCkKK2xhdGVuY3kgYXZlcmFnZSA9IDIxMS41MzkgbXMK K2xhdGVuY3kgc3RkZGV2ID0gMzU0LjMxOCBtcwordHBzID0gMjkuMzEwNDg4 IChpbmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKQordHBzID0g MjkuMzEwODg1IChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5n KQorc2NyaXB0IHN0YXRpc3RpY3M6CisgLSBzdGF0ZW1lbnQgbGF0ZW5jaWVz IGluIG1pbGxpc2Vjb25kcywgc2VyaWFsaXphdGlvbiBmYWlsdXJlcyBhbmQg cmV0cmllcywKKyAgIGRlYWRsb2NrIGZhaWx1cmVzIGFuZCByZXRyaWVzOgor ICAwLjAwNCAgICAgMCAgICAgICAwICAwICAwICBcc2V0IGFpZCByYW5kb20o MSwgMTAwMDAwICogOnNjYWxlKQorICAwLjAwMSAgICAgMCAgICAgICAwICAw ICAwICBcc2V0IGJpZCByYW5kb20oMSwgMSAqIDpzY2FsZSkKKyAgMC4wMDEg ICAgIDAgICAgICAgMCAgMCAgMCAgXHNldCB0aWQgcmFuZG9tKDEsIDEwICog OnNjYWxlKQorICAwLjAwMSAgICAgMCAgICAgICAwICAwICAwICBcc2V0IGRl bHRhIHJhbmRvbSgtNTAwMCwgNTAwMCkKKyAgMC40NTIgICAgIDAgICAgICAg MCAgMCAgMCAgQkVHSU47CisgIDEuMDgwICAgICAwICAgICAgIDEgIDAgIDAg IFVQREFURSBwZ2JlbmNoX2FjY291bnRzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNFVCBhYmFsYW5jZSA9IGFiYWxhbmNlICsgOmRlbHRhIFdI RVJFIGFpZCA9IDphaWQ7CisgIDAuODUzICAgICAwICAgICAgIDEgIDAgIDAg IFNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYWlkID0gOmFpZDsKKyAg MS4wMjggIDM0NTUgIDQzNjg2NyAgMCAgMCAgVVBEQVRFIHBnYmVuY2hfdGVs bGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgdGJhbGFu Y2UgPSB0YmFsYW5jZSArIDpkZWx0YSBXSEVSRSB0aWQgPSA6dGlkOworICAw Ljg2MCAgICAzOCAgIDEyODM2ICAwICAwICBVUERBVEUgcGdiZW5jaF9icmFu Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgYmJhbGFu Y2UgPSBiYmFsYW5jZSArIDpkZWx0YSBXSEVSRSBiaWQgPSA6YmlkOworICAx LjAyNyAgICAgMCAgICAgICAwICAwICAwICBJTlNFUlQgSU5UTyBwZ2JlbmNo X2hpc3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh0aWQsIGJpZCwgYWlkLCBkZWx0YSwgbXRpbWUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZBTFVFUyAoOnRpZCwgOmJpZCwgOmFpZCwgOmRl bHRhLCBDVVJSRU5UX1RJTUVTVEFNUCk7CisgIDEuMTQ3ICAgICAwICAgICAg MzggIDAgIDAgIEVORDsKKzwvc2NyZWVuPgogICA8L3BhcmE+CiAKICAgPHBh cmE+Ci0gICBJZiBtdWx0aXBsZSBzY3JpcHQgZmlsZXMgYXJlIHNwZWNpZmll ZCwgdGhlIGF2ZXJhZ2VzIGFyZSByZXBvcnRlZAorICAgSWYgbXVsdGlwbGUg c2NyaXB0IGZpbGVzIGFyZSBzcGVjaWZpZWQsIGFsbCBzdGF0aXN0aWNzIGFy ZSByZXBvcnRlZAogICAgc2VwYXJhdGVseSBmb3IgZWFjaCBzY3JpcHQgZmls ZS4KICAgPC9wYXJhPgogCkBAIC0xMzE1LDYgKzE0NzUsMzQgQEAgc2NyaXB0 IHN0YXRpc3RpY3M6CiAgIDwvcGFyYT4KICA8L3JlZnNlY3QyPgogCisgPHJl ZnNlY3QyIGlkPSJmYWlsdXJlcy1hbmQtcmV0cmllcyI+CisgIDx0aXRsZSBp ZD0iZmFpbHVyZXMtYW5kLXJldHJpZXMtdGl0bGUiPlNlcmlhbGl6YXRpb24v ZGVhZGxvY2sgZmFpbHVyZXMgYW5kIHJldHJpZXM8L3RpdGxlPgorCisgIDxw YXJhPgorICAgVHJhbnNhY3Rpb25zIHdpdGggc2VyaWFsaXphdGlvbiBvciBk ZWFkbG9jayBmYWlsdXJlcyBhcmUgcm9sbGVkIGJhY2sgYW5kCisgICByZXBl YXRlZCBhZ2FpbiBhbmQgYWdhaW4gdW50aWwgdGhleSBlbmQgc3VjZXNzdWZ1 bGx5IG9yIHRoZWlyIG51bWJlciBvZiB0cmllcworICAgcmVhY2hlcyBtYXhp bXVtICh0byBjaGFuZ2UgdGhpcyBtYXhpbXVtIHNlZSB0aGUgYXBwcm9wcmlh dGUgYmVuY2htYXJraW5nCisgICBvcHRpb24gPG9wdGlvbj4tLW1heC10cmll czwvPikuIElmIHRoZSBsYXN0IHRyeSBvZiBhIHRyYW5zYWN0aW9uIGZhaWxz IHRoaXMKKyAgIHRyYW5zYWN0aW9uIHdpbGwgYmUgcmVwb3J0ZWQgYXMgZmFp bGVkLiBOb3RlIHRoYXQgdGhlIHRyYW5zYWN0aW9ucyBzdGFydGVkIGluCisg ICB0aGUgcHJldmlvdXMgc2NyaXB0cyBhbmQvb3Igbm90IGVuZGluZyBpbiB0 aGUgY3VycmVudCBzY3JpcHQsIGFyZSBub3Qgcm9sbGVkCisgICBiYWNrIGFu ZCByZXRyaWVkIGFmdGVyIHRoZSBmYWlsdXJlLiBTdWNoIHNjcmlwdCB0cnkg aXMgcmVwb3J0ZWQgYXMgZmFpbGVkCisgICBiZWNhdXNlIGl0IGNvbnRhaW5z IGEgZmFpbHVyZSB0aGF0IHdhcyBub3Qgcm9sbGVkIGJhY2sgYW5kIHJldHJp ZWQuIFRoZQorICAgbGF0ZW5jaWVzIGFyZSBub3QgY29tcHV0ZWQgZm9yIHRo ZSBmYWlsZWQgdHJhbnNhY3Rpb25zIGFuZCBjb21tYW5kcy4gVGhlCisgICBs YXRlbmN5IG9mIHN1Y2Vzc2Z1bCB0cmFuc2FjdGlvbiBpbmNsdWRlcyB0aGUg ZW50aXJlIHRpbWUgb2YgdHJhbnNhY3Rpb24KKyAgIGV4ZWN1dGlvbiB3aXRo IHJvbGwgYmFja3MgYW5kIHJldHJpZXMuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFRoZSBtYWluIHJlcG9ydCBjb250YWlucyB0aGUgbnVtYmVyIG9m IGZhaWxlZCB0cmFuc2FjdGlvbnMgaWYgaXQgaXMgbm90IHplcm8KKyAgIChz ZWUgPHhyZWYgbGlua2VuZD0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzIgor ICAgZW5kdGVybT0idHJhbnNhY3Rpb25zLWFuZC1zY3JpcHRzLXRpdGxlIj4g Zm9yIG1vcmUgaW5mb3JtYXRpb24pLiBJZiB0aGUgdG90YWwKKyAgIG51bWJl ciBvZiByZXRyaWVzIGlzIG5vdCB6ZXJvIHRoZSBtYWluIHJlcG9ydCBhbHNv IGNvbnRhaW5zIGl0IGFuZCB0aGUgbnVtYmVyCisgICBvZiByZXRyaWVzIGFm dGVyIGVhY2gga2luZCBvZiBmYWlsdXJlICh1c2Ugb3B0aW9uIDxvcHRpb24+ LS1tYXgtdHJpZXM8Lz4gdG8KKyAgIG1ha2UgaXQgcG9zc2libGUpLiBUaGUg cGVyLXN0YXRlbWVudCByZXBvcnQgY29udGFpbnMgdGhlIGZhaWx1cmVzIGlm IHRoZSBtYWluCisgICByZXBvcnQgY29udGFpbnMgdGhlbSB0b28uIFRoZSBz YW1lIGZvciByZXRyaWVzLgorICA8L3BhcmE+CisgPC9yZWZzZWN0Mj4KKwog IDxyZWZzZWN0Mj4KICAgPHRpdGxlPkdvb2QgUHJhY3RpY2VzPC90aXRsZT4K IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3Ny Yy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggNGQzNjRhMS4uMGE1YTBk OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysg Yi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCkBAIC01OCw2ICs1OCw5IEBA CiAKICNpbmNsdWRlICJwZ2JlbmNoLmgiCiAKKyNkZWZpbmUgRVJSQ09ERV9J Tl9GQUlMRURfU1FMX1RSQU5TQUNUSU9OICAiMjVQMDIiCisjZGVmaW5lIEVS UkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSAgIjQwMDAxIgorI2Rl ZmluZSBFUlJDT0RFX1RfUl9ERUFETE9DS19ERVRFQ1RFRCAgIjQwUDAxIgog I2RlZmluZSBFUlJDT0RFX1VOREVGSU5FRF9UQUJMRSAgIjQyUDAxIgogCiAv KgpAQCAtMTc0LDggKzE3NywxMiBAQCBib29sCQlwcm9ncmVzc190aW1lc3Rh bXAgPSBmYWxzZTsgLyogcHJvZ3Jlc3MgcmVwb3J0IHdpdGggVW5peCB0aW1l ICovCiBpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50 cyAqLwogaW50CQkJbnRocmVhZHMgPSAxOwkJLyogbnVtYmVyIG9mIHRocmVh ZHMgKi8KIGJvb2wJCWlzX2Nvbm5lY3Q7CQkJLyogZXN0YWJsaXNoIGNvbm5l Y3Rpb24gZm9yIGVhY2ggdHJhbnNhY3Rpb24gKi8KLWJvb2wJCWlzX2xhdGVu Y2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8KK2Jv b2wJCXJlcG9ydF9wZXJfY29tbWFuZCA9IGZhbHNlOwkvKiByZXBvcnQgcGVy LWNvbW1hbmQgbGF0ZW5jaWVzLCByZXRyaWVzCisJCQkJCQkJCQkJICogYW5k IGZhaWx1cmVzIHdpdGhvdXQgcmV0cnlpbmcgKi8KIGludAkJCW1haW5fcGlk OwkJCS8qIG1haW4gcHJvY2VzcyBpZCB1c2VkIGluIGxvZyBmaWxlbmFtZSAq LworaW50CQkJbWF4X3RyaWVzID0gMTsJCS8qIG1heGltdW0gbnVtYmVyIG9m IHRyaWVzIHRvIHJ1biB0aGUKKwkJCQkJCQkJICogdHJhbnNhY3Rpb24gd2l0 aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRsb2NrCisJCQkJCQkJCSAqIGZhaWx1 cmVzICovCiAKIGNoYXIJICAgKnBnaG9zdCA9ICIiOwogY2hhcgkgICAqcGdw b3J0ID0gIiI7CkBAIC0yMjMsNiArMjMwLDE2IEBAIHR5cGVkZWYgc3RydWN0 IFNpbXBsZVN0YXRzCiB9IFNpbXBsZVN0YXRzOwogCiAvKgorICogRGF0YSBz dHJ1Y3R1cmUgdG8gaG9sZCByZXRyaWVzIGFmdGVyIGZhaWx1cmVzLgorICov Cit0eXBlZGVmIHN0cnVjdCBSZXRyaWVzCit7CisJaW50NjQJCXNlcmlhbGl6 YXRpb247CS8qIG51bWJlciBvZiByZXRyaWVzIGFmdGVyIHNlcmlhbGl6YXRp b24KKwkJCQkJCQkJICogZmFpbHVyZXMgKi8KKwlpbnQ2NAkJZGVhZGxvY2tz OwkJLyogbnVtYmVyIG9mIHJldHJpZXMgYWZ0ZXIgZGVhZGxvY2sgZmFpbHVy ZXMgKi8KK30gUmV0cmllczsKKworLyoKICAqIERhdGEgc3RydWN0dXJlIHRv IGhvbGQgdmFyaW91cyBzdGF0aXN0aWNzOiBwZXItdGhyZWFkIGFuZCBwZXIt c2NyaXB0IHN0YXRzCiAgKiBhcmUgbWFpbnRhaW5lZCBhbmQgbWVyZ2VkIHRv Z2V0aGVyLgogICovCkBAIC0yMzIsMTEgKzI0OSw0MyBAQCB0eXBlZGVmIHN0 cnVjdCBTdGF0c0RhdGEKIAlpbnQ2NAkJY250OwkJCS8qIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgKi8KIAlpbnQ2NAkJc2tpcHBlZDsJCS8qIG51bWJlciBv ZiB0cmFuc2FjdGlvbnMgc2tpcHBlZCB1bmRlciAtLXJhdGUKIAkJCQkJCQkJ ICogYW5kIC0tbGF0ZW5jeS1saW1pdCAqLworCVJldHJpZXMJCXJldHJpZXM7 CisJaW50NjQJCWZhaWx1cmVzOwkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyB0aGF0IHdlcmUgbm90IHJldHJpZWQKKwkJCQkJCQkJICogYWZ0ZXIgYSBz ZXJpYWxpemF0aW9uIG9yIGEgZGVhZGxvY2sKKwkJCQkJCQkJICogZmFpbHVy ZSAqLwogCVNpbXBsZVN0YXRzIGxhdGVuY3k7CiAJU2ltcGxlU3RhdHMgbGFn OwogfSBTdGF0c0RhdGE7CiAKIC8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3Ig Y2xpZW50IHZhcmlhYmxlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVmFyaWFi bGVzCit7CisJVmFyaWFibGUgICAqYXJyYXk7CQkJLyogYXJyYXkgb2YgdmFy aWFibGUgZGVmaW5pdGlvbnMgKi8KKwlpbnQJCQludmFyaWFibGVzOwkJLyog bnVtYmVyIG9mIHZhcmlhYmxlcyAqLworCWJvb2wJCXZhcnNfc29ydGVkOwkv KiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1lPyAqLworfSBWYXJpYWJs ZXM7CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgcmVwZWF0aW5nIGEg dHJhbnNhY3Rpb24gZnJvbSB0aGUgYmVnaW5ubmluZyB3aXRoIHRoZSBzYW1l CisgKiBwYXJhbWV0ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBSZXRyeVN0 YXRlCit7CisJLyoKKwkqIENvbW1hbmQgbnVtYmVyIGluIHNjcmlwdDsgLTEg aWYgdGhlcmUgd2VyZSBub3QgYW55IHRyYW5zYWN0aW9ucyB5ZXQgb3Igd2UK KwkqIGNvbnRpbnVlIHRoZSB0cmFuc2FjdGlvbiBibG9jayBmcm9tIHRoZSBw cmV2aW91cyBzY3JpcHRzCisJKi8KKwlpbnQJCQljb21tYW5kOworCisJaW50 CQkJcmV0cmllczsKKworCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVsz XTsJLyogcmFuZG9tIHNlZWQgKi8KKwlWYXJpYWJsZXMgICB2YXJpYWJsZXM7 CQkvKiBjbGllbnQgdmFyaWFibGVzICovCit9IFJldHJ5U3RhdGU7CisKKy8q CiAgKiBDb25uZWN0aW9uIHN0YXRlIG1hY2hpbmUgc3RhdGVzLgogICovCiB0 eXBlZGVmIGVudW0KQEAgLTI4Nyw2ICszMzYsMTkgQEAgdHlwZWRlZiBlbnVt CiAJQ1NUQVRFX0VORF9DT01NQU5ELAogCiAJLyoKKwkgKiBTdGF0ZXMgZm9y IHRyYW5zYWN0aW9ucyB3aXRoIHNlcmlhbGl6YXRpb24gb3IgZGVhZGxvY2sg ZmFpbHVyZXMuCisJICoKKwkgKiBGaXJzdCwgcmVwb3J0IHRoZSBmYWlsdXJl IGluIENTVEFURV9GQUlMVVJFLiBUaGVuLCBpZiB3ZSBuZWVkIHRvIGVuZCB0 aGUKKwkgKiBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2ssIGdvIHRvIHN0YXRl cyBDU1RBVEVfU1RBUlRfQ09NTUFORCAtPgorCSAqIENTVEFURV9XQUlUX1JF U1VMVCAtPiBDU1RBVEVfRU5EX0NPTU1BTkQgd2l0aCB0aGUgYXBwcm9wcmlh dGUgY29tbWFuZC4KKwkgKiBBZnRlciB0aGF0LCBnbyB0byBDU1RBVEVfUkVU UlkuIElmIHdlIGNhbiByZXBlYXQgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiwK KwkgKiBzZXQgdGhlIHNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIHRyYW5zYWN0 aW9uIGV4ZWN1dGlvbiBhcyBpbiB0aGUgcHJldmlvdXMKKwkgKiB0cmllcy4g T3RoZXJ3aXNlLCBnbyB0byB0aGUgbmV4dCBjb21tYW5kIGFmdGVyIHRoZSBm YWlsZWQgdHJhbnNhY3Rpb24uCisJICovCisJQ1NUQVRFX0ZBSUxVUkUsCisJ Q1NUQVRFX1JFVFJZLAorCisJLyoKIAkgKiBDU1RBVEVfRU5EX1RYIHBlcmZv cm1zIGVuZC1vZi10cmFuc2FjdGlvbiBwcm9jZXNzaW5nLiAgQ2FsY3VsYXRl cwogCSAqIGxhdGVuY3ksIGFuZCBsb2dzIHRoZSB0cmFuc2FjdGlvbi4gIElu IC0tY29ubmVjdCBtb2RlLCBjbG9zZXMgdGhlCiAJICogY3VycmVudCBjb25u ZWN0aW9uLiAgQ2hvb3NlcyB0aGUgbmV4dCBzY3JpcHQgdG8gZXhlY3V0ZSBh bmQgc3RhcnRzIG92ZXIKQEAgLTMxMSwxNCArMzczLDEzIEBAIHR5cGVkZWYg c3RydWN0CiAJUEdjb25uCSAgICpjb247CQkJLyogY29ubmVjdGlvbiBoYW5k bGUgdG8gREIgKi8KIAlpbnQJCQlpZDsJCQkJLyogY2xpZW50IE5vLiAqLwog CUNvbm5lY3Rpb25TdGF0ZUVudW0gc3RhdGU7CS8qIHN0YXRlIG1hY2hpbmUn cyBjdXJyZW50IHN0YXRlLiAqLworCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9z dGF0ZVszXTsJLyogc2VwYXJhdGUgcmFuZG9tbmVzcyBmb3IgZWFjaCBjbGll bnQgKi8KIAogCWludAkJCXVzZV9maWxlOwkJLyogaW5kZXggaW4gc3FsX3Nj cmlwdCBmb3IgdGhpcyBjbGllbnQgKi8KIAlpbnQJCQljb21tYW5kOwkJLyog Y29tbWFuZCBudW1iZXIgaW4gc2NyaXB0ICovCiAKIAkvKiBjbGllbnQgdmFy aWFibGVzICovCi0JVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJyYXkg b2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8KLQlpbnQJCQludmFyaWFibGVz OwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyAqLwotCWJvb2wJCXZhcnNfc29y dGVkOwkvKiBhcmUgdmFyaWFibGVzIHNvcnRlZCBieSBuYW1lPyAqLworCVZh cmlhYmxlcyAgIHZhcmlhYmxlczsKIAogCS8qIHZhcmlvdXMgdGltZXMgYWJv dXQgY3VycmVudCB0cmFuc2FjdGlvbiAqLwogCWludDY0CQl0eG5fc2NoZWR1 bGVkOwkvKiBzY2hlZHVsZWQgc3RhcnQgdGltZSBvZiB0cmFuc2FjdGlvbiAo dXNlYykgKi8KQEAgLTMyOCw2ICszODksMTUgQEAgdHlwZWRlZiBzdHJ1Y3QK IAogCWJvb2wJCXByZXBhcmVkW01BWF9TQ1JJUFRTXTsJLyogd2hldGhlciBj bGllbnQgcHJlcGFyZWQgdGhlIHNjcmlwdCAqLwogCisJLyogZm9yIHJlcGVh dGluZyB0cmFuc2FjdGlvbnMgd2l0aCBzZXJpYWxpemF0aW9uIG9yIGRlYWRs b2NrIGZhaWx1cmVzOiAqLworCWJvb2wJCWluX3RyYW5zYWN0aW9uX2Jsb2Nr OwkvKiBhcmUgd2UgaW4gdHJhbnNhY3Rpb24gYmxvY2s/ICovCisJYm9vbAkJ ZW5kX2ZhaWxlZF90cmFuc2FjdGlvbl9ibG9jazsgLyogYXJlIHdlIGVuZGlu ZyB0aGUgZmFpbGVkCisJCQkJCQkJCQkJCSAgICogdHJhbnNhY3Rpb24gYmxv Y2s/ICovCisJUmV0cnlTdGF0ZSAgcmV0cnlfc3RhdGU7CisJUmV0cmllcwkJ cmV0cmllczsKKwlib29sCQlmYWlsdXJlOwkJLyogaWYgdGhlcmUgd2FzIGEg c2VyaWFsaXphdGlvbiBvciBhIGRlYWRsb2NrCisJCQkJCQkJCSAqIGZhaWx1 cmUgd2l0aG91dCByZXRyeWluZyAqLworCiAJLyogcGVyIGNsaWVudCBjb2xs ZWN0ZWQgc3RhdHMgKi8KIAlpbnQ2NAkJY250OwkJCS8qIHRyYW5zYWN0aW9u IGNvdW50ICovCiAJaW50CQkJZWNudDsJCQkvKiBlcnJvciBjb3VudCAqLwpA QCAtMzQyLDcgKzQxMiw2IEBAIHR5cGVkZWYgc3RydWN0CiAJcHRocmVhZF90 CXRocmVhZDsJCQkvKiB0aHJlYWQgaGFuZGxlICovCiAJQ1N0YXRlCSAgICpz dGF0ZTsJCQkvKiBhcnJheSBvZiBDU3RhdGUgKi8KIAlpbnQJCQluc3RhdGU7 CQkJLyogbGVuZ3RoIG9mIHN0YXRlW10gKi8KLQl1bnNpZ25lZCBzaG9ydCBy YW5kb21fc3RhdGVbM107IC8qIHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVh Y2ggdGhyZWFkICovCiAJaW50NjQJCXRocm90dGxlX3RyaWdnZXI7CS8qIHBy ZXZpb3VzL25leHQgdGhyb3R0bGluZyAodXMpICovCiAJRklMRQkgICAqbG9n ZmlsZTsJCS8qIHdoZXJlIHRvIGxvZywgb3IgTlVMTCAqLwogCkBAIC0zODIs NiArNDUxLDE3IEBAIHR5cGVkZWYgc3RydWN0CiAJY2hhcgkgICAqYXJndltN QVhfQVJHU107IC8qIGNvbW1hbmQgd29yZCBsaXN0ICovCiAJUGdCZW5jaEV4 cHIgKmV4cHI7CQkJLyogcGFyc2VkIGV4cHJlc3Npb24sIGlmIG5lZWRlZCAq LwogCVNpbXBsZVN0YXRzIHN0YXRzOwkJCS8qIHRpbWUgc3BlbnQgaW4gdGhp cyBjb21tYW5kICovCisJUmV0cmllcwkJcmV0cmllczsKKwlpbnQ2NAkJc2Vy aWFsaXphdGlvbl9mYWlsdXJlczsJLyogbnVtYmVyIG9mIHNlcmlhbGl6YXRp b24gZmFpbHVyZXMgdGhhdAorCQkJCQkJCQkJCSAqIHdlcmUgbm90IHJldHJp ZWQgKi8KKwlpbnQ2NAkJZGVhZGxvY2tfZmFpbHVyZXM7CS8qIG51bWJlciBv ZiBkZWFkbG9jayBmYWlsdXJlcyB0aGF0IHdlcmUgbm90CisJCQkJCQkJCQkg KiByZXRyaWVkICovCisKKwkvKiBmb3IgcmVwZWF0aW5nIHRyYW5zYWN0aW9u cyB3aXRoIHNlcmlhbGl6YXRpb24gYW5kIGRlYWRsb2NrIGZhaWx1cmVzOiAq LworCWJvb2wJCWlzX3RyYW5zYWN0aW9uX2Jsb2NrX2JlZ2luOwkvKiBpZiBj b21tYW5kIHN5bnRhY3RpY2FsbHkgc3RhcnQgYQorCQkJCQkJCQkJCQkgKiBh IHRyYW5zYWN0aW9uIGJsb2NrICovCisJaW50CQkJdHJhbnNhY3Rpb25fYmxv Y2tfZW5kOwkvKiBuZWFyZXN0IGNvbW1hbmQgbnVtYmVyIHRvIGNvbXBsZXRl CisJCQkJCQkJCQkJICogdGhlIHRyYW5zYWN0aW9uIGJsb2NrIG9yIC0xICov CiB9IENvbW1hbmQ7CiAKIHR5cGVkZWYgc3RydWN0IFBhcnNlZFNjcmlwdApA QCAtNDQ1LDYgKzUyNSwxNyBAQCBzdGF0aWMgY29uc3QgQnVpbHRpblNjcmlw dCBidWlsdGluX3NjcmlwdFtdID0KIAl9CiB9OwogCisvKgorICogRm9yIHRo ZSBmYWlsdXJlcyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KKyAqLwordHlw ZWRlZiBlbnVtIEZhaWx1cmVTdGF0dXMKK3sKKwlTRVJJQUxJWkFUSU9OX0ZB SUxVUkUsCisJREVBRExPQ0tfRkFJTFVSRSwKKwlJTl9GQUlMRURfVFJBTlNB Q1RJT04sCisJRkFJTFVSRV9TVEFUVVNfQU5PVEhFUgkJLyogYW5vdGhlciBm YWlsdXJlIG9yIG5vIGZhaWx1cmUgKi8KK30gRmFpbHVyZVN0YXR1czsKKwog CiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZCBzZXRJ bnRWYWx1ZShQZ0JlbmNoVmFsdWUgKnB2LCBpbnQ2NCBpdmFsKTsKQEAgLTUw NCw3ICs1OTUsNyBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJvdG9jb2wgZm9yIHN1Ym1pdHRpbmcgcXVlcmll cyAoZGVmYXVsdDogc2ltcGxlKVxuIgogCQkgICAiICAtbiwgLS1uby12YWN1 dW0gICAgICAgICAgZG8gbm90IHJ1biBWQUNVVU0gYmVmb3JlIHRlc3RzXG4i CiAJCSAgICIgIC1QLCAtLXByb2dyZXNzPU5VTSAgICAgICBzaG93IHRocmVh ZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgTlVNIHNlY29uZHNcbiIKLQkJICAg IiAgLXIsIC0tcmVwb3J0LWxhdGVuY2llcyAgIHJlcG9ydCBhdmVyYWdlIGxh dGVuY3kgcGVyIGNvbW1hbmRcbiIKKwkJICAgIiAgLXIsIC0tcmVwb3J0LXBl ci1jb21tYW5kIHJlcG9ydCBsYXRlbmNpZXMsIGZhaWx1cmVzIGFuZCByZXRy aWVzIHBlciBjb21tYW5kXG4iCiAJCSAgICIgIC1SLCAtLXJhdGU9TlVNICAg ICAgICAgICB0YXJnZXQgcmF0ZSBpbiB0cmFuc2FjdGlvbnMgcGVyIHNlY29u ZFxuIgogCQkgICAiICAtcywgLS1zY2FsZT1OVU0gICAgICAgICAgcmVwb3J0 IHRoaXMgc2NhbGUgZmFjdG9yIGluIG91dHB1dFxuIgogCQkgICAiICAtdCwg LS10cmFuc2FjdGlvbnM9TlVNICAgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBl YWNoIGNsaWVudCBydW5zIChkZWZhdWx0OiAxMClcbiIKQEAgLTUxMyw2ICs2 MDQsNyBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAtLWFnZ3JlZ2F0ZS1pbnRl cnZhbD1OVU0gYWdncmVnYXRlIGRhdGEgb3ZlciBOVU0gc2Vjb25kc1xuIgog CQkgICAiICAtLWxvZy1wcmVmaXg9UFJFRklYICAgICAgcHJlZml4IGZvciB0 cmFuc2FjdGlvbiB0aW1lIGxvZyBmaWxlXG4iCiAJCSAgICIgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZGVmYXVsdDogXCJwZ2JlbmNoX2xvZ1wiKVxu IgorCQkgICAiICAtLW1heC10cmllcz1OVU0gICAgICAgICAgbWF4IG51bWJl ciBvZiB0cmllcyB0byBydW4gdHJhbnNhY3Rpb24gKGRlZmF1bHQ6IDEpXG4i CiAJCSAgICIgIC0tcHJvZ3Jlc3MtdGltZXN0YW1wICAgICB1c2UgVW5peCBl cG9jaCB0aW1lc3RhbXBzIGZvciBwcm9ncmVzc1xuIgogCQkgICAiICAtLXNh bXBsaW5nLXJhdGU9TlVNICAgICAgZnJhY3Rpb24gb2YgdHJhbnNhY3Rpb25z IHRvIGxvZyAoZS5nLiwgMC4wMSBmb3IgMSUlKVxuIgogCQkgICAiXG5Db21t b24gb3B0aW9uczpcbiIKQEAgLTYyNCw3ICs3MTYsNyBAQCBnb3RkaWdpdHM6 CiAKIC8qIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiB1bmlmb3JtIGRpc3Ry aWJ1dGlvbiBmcm9tIG1pbiB0byBtYXggaW5jbHVzaXZlICovCiBzdGF0aWMg aW50NjQKLWdldHJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwgaW50 NjQgbWF4KQorZ2V0cmFuZChDU3RhdGUgKnN0LCBpbnQ2NCBtaW4sIGludDY0 IG1heCkKIHsKIAkvKgogCSAqIE9kZCBjb2RpbmcgaXMgc28gdGhhdCBtaW4g YW5kIG1heCBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgY2hhbmNlIG9m CkBAIC02MzUsNyArNzI3LDcgQEAgZ2V0cmFuZChUU3RhdGUgKnRocmVhZCwg aW50NjQgbWluLCBpbnQ2NCBtYXgpCiAJICogcHJvdGVjdGVkIGJ5IGEgbXV0 ZXgsIGFuZCB0aGVyZWZvcmUgYSBib3R0bGVuZWNrIG9uIG1hY2hpbmVzIHdp dGggbWFueQogCSAqIENQVXMuCiAJICovCi0JcmV0dXJuIG1pbiArIChpbnQ2 NCkgKChtYXggLSBtaW4gKyAxKSAqIHBnX2VyYW5kNDgodGhyZWFkLT5yYW5k b21fc3RhdGUpKTsKKwlyZXR1cm4gbWluICsgKGludDY0KSAoKG1heCAtIG1p biArIDEpICogcGdfZXJhbmQ0OChzdC0+cmFuZG9tX3N0YXRlKSk7CiB9CiAK IC8qCkBAIC02NDQsNyArNzM2LDcgQEAgZ2V0cmFuZChUU3RhdGUgKnRocmVh ZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgpCiAgKiB2YWx1ZSBpcyBleHAoLXBh cmFtZXRlcikuCiAgKi8KIHN0YXRpYyBpbnQ2NAotZ2V0RXhwb25lbnRpYWxS YW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91 YmxlIHBhcmFtZXRlcikKK2dldEV4cG9uZW50aWFsUmFuZChDU3RhdGUgKnN0 LCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91YmxlIHBhcmFtZXRlcikKIHsK IAlkb3VibGUJCWN1dCwKIAkJCQl1bmlmb3JtLApAQCAtNjU0LDcgKzc0Niw3 IEBAIGdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwgaW50NjQg bWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAJQXNzZXJ0KHBh cmFtZXRlciA+IDAuMCk7CiAJY3V0ID0gZXhwKC1wYXJhbWV0ZXIpOwogCS8q IGVyYW5kIGluIFswLCAxKSwgdW5pZm9ybSBpbiAoMCwgMV0gKi8KLQl1bmlm b3JtID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7 CisJdW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgoc3QtPnJhbmRvbV9zdGF0 ZSk7CiAKIAkvKgogCSAqIGlubmVyIGV4cHJlc3Npb24gaW4gKGN1dCwgMV0g KGlmIHBhcmFtZXRlciA+IDApLCByYW5kIGluIFswLCAxKQpAQCAtNjY3LDcg Kzc1OSw3IEBAIGdldEV4cG9uZW50aWFsUmFuZChUU3RhdGUgKnRocmVhZCwg aW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIpCiAKIC8q IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yOiBnYXVzc2lhbiBkaXN0cmlidXRp b24gZnJvbSBtaW4gdG8gbWF4IGluY2x1c2l2ZSAqLwogc3RhdGljIGludDY0 Ci1nZXRHYXVzc2lhblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IG1pbiwg aW50NjQgbWF4LCBkb3VibGUgcGFyYW1ldGVyKQorZ2V0R2F1c3NpYW5SYW5k KENTdGF0ZSAqc3QsIGludDY0IG1pbiwgaW50NjQgbWF4LCBkb3VibGUgcGFy YW1ldGVyKQogewogCWRvdWJsZQkJc3RkZXY7CiAJZG91YmxlCQlyYW5kOwpA QCAtNjk1LDggKzc4Nyw4IEBAIGdldEdhdXNzaWFuUmFuZChUU3RhdGUgKnRo cmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0ZXIp CiAJCSAqIGFyZSBleHBlY3RlZCBpbiAoMCwgMV0gKHNlZQogCQkgKiBodHRw Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JveF9tdWxsZXIpCiAJCSAqLwot CQlkb3VibGUJCXJhbmQxID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJh bmRvbV9zdGF0ZSk7Ci0JCWRvdWJsZQkJcmFuZDIgPSAxLjAgLSBwZ19lcmFu ZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKTsKKwkJZG91YmxlCQlyYW5kMSA9 IDEuMCAtIHBnX2VyYW5kNDgoc3QtPnJhbmRvbV9zdGF0ZSk7CisJCWRvdWJs ZQkJcmFuZDIgPSAxLjAgLSBwZ19lcmFuZDQ4KHN0LT5yYW5kb21fc3RhdGUp OwogCiAJCS8qIEJveC1NdWxsZXIgYmFzaWMgZm9ybSB0cmFuc2Zvcm0gKi8K IAkJZG91YmxlCQl2YXJfc3FydCA9IHNxcnQoLTIuMCAqIGxvZyhyYW5kMSkp OwpAQCAtNzIzLDcgKzgxNSw3IEBAIGdldEdhdXNzaWFuUmFuZChUU3RhdGUg KnRocmVhZCwgaW50NjQgbWluLCBpbnQ2NCBtYXgsIGRvdWJsZSBwYXJhbWV0 ZXIpCiAgKiB3aWxsIGFwcHJveGltYXRlIGEgUG9pc3NvbiBkaXN0cmlidXRp b24gY2VudGVyZWQgb24gdGhlIGdpdmVuIHZhbHVlLgogICovCiBzdGF0aWMg aW50NjQKLWdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBj ZW50ZXIpCitnZXRQb2lzc29uUmFuZChDU3RhdGUgKnN0LCBpbnQ2NCBjZW50 ZXIpCiB7CiAJLyoKIAkgKiBVc2UgaW52ZXJzZSB0cmFuc2Zvcm0gc2FtcGxp bmcgdG8gZ2VuZXJhdGUgYSB2YWx1ZSA+IDAsIHN1Y2ggdGhhdCB0aGUKQEAg LTczMiw3ICs4MjQsNyBAQCBnZXRQb2lzc29uUmFuZChUU3RhdGUgKnRocmVh ZCwgaW50NjQgY2VudGVyKQogCWRvdWJsZQkJdW5pZm9ybTsKIAogCS8qIGVy YW5kIGluIFswLCAxKSwgdW5pZm9ybSBpbiAoMCwgMV0gKi8KLQl1bmlmb3Jt ID0gMS4wIC0gcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSk7CisJ dW5pZm9ybSA9IDEuMCAtIHBnX2VyYW5kNDgoc3QtPnJhbmRvbV9zdGF0ZSk7 CiAKIAlyZXR1cm4gKGludDY0KSAoLWxvZyh1bmlmb3JtKSAqICgoZG91Ymxl KSBjZW50ZXIpICsgMC41KTsKIH0KQEAgLTc3Nyw2ICs4NjksMjUgQEAgbWVy Z2VTaW1wbGVTdGF0cyhTaW1wbGVTdGF0cyAqYWNjLCBTaW1wbGVTdGF0cyAq c3MpCiB9CiAKIC8qCisgKiBJbml0aWFsaXplIHRoZSBnaXZlbiBSZXRyaWVz IHN0cnVjdCB0byBhbGwgemVyb2VzCisgKi8KK3N0YXRpYyB2b2lkCitpbml0 UmV0cmllcyhSZXRyaWVzICpyZXRyaWVzKQoreworCW1lbXNldChyZXRyaWVz LCAwLCBzaXplb2YoUmV0cmllcykpOworfQorCisvKgorICogTWVyZ2UgdHdv IFJldHJpZXMgb2JqZWN0cworICovCitzdGF0aWMgdm9pZAorbWVyZ2VSZXRy aWVzKFJldHJpZXMgKmFjYywgUmV0cmllcyAqcmV0cmllcykKK3sKKwlhY2Mt PnNlcmlhbGl6YXRpb24gKz0gcmV0cmllcy0+c2VyaWFsaXphdGlvbjsKKwlh Y2MtPmRlYWRsb2NrcyArPSByZXRyaWVzLT5kZWFkbG9ja3M7Cit9CisKKy8q CiAgKiBJbml0aWFsaXplIGEgU3RhdHNEYXRhIHN0cnVjdCB0byBtb3N0bHkg emVyb2VzLCB3aXRoIGl0cyBzdGFydCB0aW1lIHNldCB0bwogICogdGhlIGdp dmVuIHZhbHVlLgogICovCkBAIC03ODYsMjQgKzg5NywzNyBAQCBpbml0U3Rh dHMoU3RhdHNEYXRhICpzZCwgdGltZV90IHN0YXJ0X3RpbWUpCiAJc2QtPnN0 YXJ0X3RpbWUgPSBzdGFydF90aW1lOwogCXNkLT5jbnQgPSAwOwogCXNkLT5z a2lwcGVkID0gMDsKKwlzZC0+ZmFpbHVyZXMgPSAwOworCWluaXRSZXRyaWVz KCZzZC0+cmV0cmllcyk7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGF0ZW5j eSk7CiAJaW5pdFNpbXBsZVN0YXRzKCZzZC0+bGFnKTsKIH0KIAogLyoKLSAq IEFjY3VtdWxhdGUgb25lIGFkZGl0aW9uYWwgaXRlbSBpbnRvIHRoZSBnaXZl biBzdGF0cyBvYmplY3QuCisgKiBBY2N1bXVsYXRlIHN0YXRpc3RpY3MgcmVn YXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdhcyBhIGZhaWx1cmUgLyB0cmFu c2FjdGlvbgorICogd2FzIHNraXBwZWQgb3Igbm90LgogICovCiBzdGF0aWMg dm9pZAotYWNjdW1TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBw ZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcpCithY2N1bU1haW5TdGF0cyhT dGF0c0RhdGEgKnN0YXRzLCBib29sIHNraXBwZWQsIGJvb2wgZmFpbHVyZSwg UmV0cmllcyAqcmV0cmllcykKIHsKIAlzdGF0cy0+Y250Kys7Ci0KIAlpZiAo c2tpcHBlZCkKLQl7Ci0JCS8qIG5vIGxhdGVuY3kgdG8gcmVjb3JkIG9uIHNr aXBwZWQgdHJhbnNhY3Rpb25zICovCiAJCXN0YXRzLT5za2lwcGVkKys7Ci0J fQotCWVsc2UKKwllbHNlIGlmIChmYWlsdXJlKQorCQlzdGF0cy0+ZmFpbHVy ZXMrKzsKKwltZXJnZVJldHJpZXMoJnN0YXRzLT5yZXRyaWVzLCByZXRyaWVz KTsKK30KKworLyoKKyAqIEFjY3VtdWxhdGUgb25lIGFkZGl0aW9uYWwgaXRl bSBpbnRvIHRoZSBnaXZlbiBzdGF0cyBvYmplY3QuCisgKi8KK3N0YXRpYyB2 b2lkCithY2N1bVN0YXRzKFN0YXRzRGF0YSAqc3RhdHMsIGJvb2wgc2tpcHBl ZCwgYm9vbCBmYWlsdXJlLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnLAorCQkg ICBSZXRyaWVzICpyZXRyaWVzKQoreworCWFjY3VtTWFpblN0YXRzKHN0YXRz LCBza2lwcGVkLCBmYWlsdXJlLCByZXRyaWVzKTsKKworCWlmICghc2tpcHBl ZCAmJiAhZmFpbHVyZSkKIAl7CiAJCWFkZFRvU2ltcGxlU3RhdHMoJnN0YXRz LT5sYXRlbmN5LCBsYXQpOwogCkBAIC05MzYsMzkgKzEwNjAsMzkgQEAgY29t cGFyZVZhcmlhYmxlTmFtZXMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQg KnYyKQogCiAvKiBMb2NhdGUgYSB2YXJpYWJsZSBieSBuYW1lOyByZXR1cm5z IE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIFZhcmlhYmxlICoKLWxvb2t1 cFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNoYXIgKm5hbWUpCitsb29rdXBWYXJp YWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAqbmFtZSkKIHsKIAlW YXJpYWJsZQlrZXk7CiAKIAkvKiBPbiBzb21lIHZlcnNpb25zIG9mIFNvbGFy aXMsIGJzZWFyY2ggb2YgemVybyBpdGVtcyBkdW1wcyBjb3JlICovCi0JaWYg KHN0LT5udmFyaWFibGVzIDw9IDApCisJaWYgKHZhcmlhYmxlcy0+bnZhcmlh YmxlcyA8PSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIFNvcnQgaWYgd2Ug aGF2ZSB0byAqLwotCWlmICghc3QtPnZhcnNfc29ydGVkKQorCWlmICghdmFy aWFibGVzLT52YXJzX3NvcnRlZCkKIAl7Ci0JCXFzb3J0KCh2b2lkICopIHN0 LT52YXJpYWJsZXMsIHN0LT5udmFyaWFibGVzLCBzaXplb2YoVmFyaWFibGUp LAotCQkJICBjb21wYXJlVmFyaWFibGVOYW1lcyk7Ci0JCXN0LT52YXJzX3Nv cnRlZCA9IHRydWU7CisJCXFzb3J0KCh2b2lkICopIHZhcmlhYmxlcy0+YXJy YXksIHZhcmlhYmxlcy0+bnZhcmlhYmxlcywKKwkJCSAgc2l6ZW9mKFZhcmlh YmxlKSwgY29tcGFyZVZhcmlhYmxlTmFtZXMpOworCQl2YXJpYWJsZXMtPnZh cnNfc29ydGVkID0gdHJ1ZTsKIAl9CiAKIAkvKiBOb3cgd2UgY2FuIHNlYXJj aCAqLwogCWtleS5uYW1lID0gbmFtZTsKIAlyZXR1cm4gKFZhcmlhYmxlICop IGJzZWFyY2goKHZvaWQgKikgJmtleSwKLQkJCQkJCQkJKHZvaWQgKikgc3Qt PnZhcmlhYmxlcywKLQkJCQkJCQkJc3QtPm52YXJpYWJsZXMsCisJCQkJCQkJ CSh2b2lkICopIHZhcmlhYmxlcy0+YXJyYXksCisJCQkJCQkJCXZhcmlhYmxl cy0+bnZhcmlhYmxlcywKIAkJCQkJCQkJc2l6ZW9mKFZhcmlhYmxlKSwKIAkJ CQkJCQkJY29tcGFyZVZhcmlhYmxlTmFtZXMpOwogfQogCiAvKiBHZXQgdGhl IHZhbHVlIG9mIGEgdmFyaWFibGUsIGluIHN0cmluZyBmb3JtOyByZXR1cm5z IE5VTEwgaWYgdW5rbm93biAqLwogc3RhdGljIGNoYXIgKgotZ2V0VmFyaWFi bGUoQ1N0YXRlICpzdCwgY2hhciAqbmFtZSkKK2dldFZhcmlhYmxlKFZhcmlh YmxlcyAqdmFyaWFibGVzLCBjaGFyICpuYW1lKQogewogCVZhcmlhYmxlICAg KnZhcjsKIAljaGFyCQlzdHJpbmdmb3JtWzY0XTsKIAotCXZhciA9IGxvb2t1 cFZhcmlhYmxlKHN0LCBuYW1lKTsKKwl2YXIgPSBsb29rdXBWYXJpYWJsZSh2 YXJpYWJsZXMsIG5hbWUpOwogCWlmICh2YXIgPT0gTlVMTCkKIAkJcmV0dXJu IE5VTEw7CQkJLyogbm90IGZvdW5kICovCiAKQEAgLTEwNDEsMTEgKzExNjUs MTEgQEAgaXNMZWdhbFZhcmlhYmxlTmFtZShjb25zdCBjaGFyICpuYW1lKQog ICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgKGJhZCBuYW1lKS4KICAqLwog c3RhdGljIFZhcmlhYmxlICoKLWxvb2t1cENyZWF0ZVZhcmlhYmxlKENTdGF0 ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUpCitsb29r dXBDcmVhdGVWYXJpYWJsZShWYXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3Qg Y2hhciAqY29udGV4dCwgY2hhciAqbmFtZSkKIHsKIAlWYXJpYWJsZSAgICp2 YXI7CiAKLQl2YXIgPSBsb29rdXBWYXJpYWJsZShzdCwgbmFtZSk7CisJdmFy ID0gbG9va3VwVmFyaWFibGUodmFyaWFibGVzLCBuYW1lKTsKIAlpZiAodmFy ID09IE5VTEwpCiAJewogCQlWYXJpYWJsZSAgICpuZXd2YXJzOwpAQCAtMTA2 MiwyMyArMTE4NiwyNCBAQCBsb29rdXBDcmVhdGVWYXJpYWJsZShDU3RhdGUg KnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lKQogCQl9CiAK IAkJLyogQ3JlYXRlIHZhcmlhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5 ICovCi0JCWlmIChzdC0+dmFyaWFibGVzKQotCQkJbmV3dmFycyA9IChWYXJp YWJsZSAqKSBwZ19yZWFsbG9jKHN0LT52YXJpYWJsZXMsCi0JCQkJCQkJCQkJ CSAgKHN0LT5udmFyaWFibGVzICsgMSkgKiBzaXplb2YoVmFyaWFibGUpKTsK KwkJaWYgKHZhcmlhYmxlcy0+YXJyYXkpCisJCQluZXd2YXJzID0gKFZhcmlh YmxlICopIHBnX3JlYWxsb2MoCisJCQkJCQkJCXZhcmlhYmxlcy0+YXJyYXks CisJCQkJCQkJCSh2YXJpYWJsZXMtPm52YXJpYWJsZXMgKyAxKSAqIHNpemVv ZihWYXJpYWJsZSkpOwogCQllbHNlCiAJCQluZXd2YXJzID0gKFZhcmlhYmxl ICopIHBnX21hbGxvYyhzaXplb2YoVmFyaWFibGUpKTsKIAotCQlzdC0+dmFy aWFibGVzID0gbmV3dmFyczsKKwkJdmFyaWFibGVzLT5hcnJheSA9IG5ld3Zh cnM7CiAKLQkJdmFyID0gJm5ld3ZhcnNbc3QtPm52YXJpYWJsZXNdOworCQl2 YXIgPSAmbmV3dmFyc1t2YXJpYWJsZXMtPm52YXJpYWJsZXNdOwogCiAJCXZh ci0+bmFtZSA9IHBnX3N0cmR1cChuYW1lKTsKIAkJdmFyLT52YWx1ZSA9IE5V TEw7CiAJCS8qIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHJl bWFpbmluZyBmaWVsZHMgKi8KIAotCQlzdC0+bnZhcmlhYmxlcysrOworCQl2 YXJpYWJsZXMtPm52YXJpYWJsZXMrKzsKIAkJLyogd2UgZG9uJ3QgcmUtc29y dCB0aGUgYXJyYXkgdGlsbCB3ZSBoYXZlIHRvICovCi0JCXN0LT52YXJzX3Nv cnRlZCA9IGZhbHNlOworCQl2YXJpYWJsZXMtPnZhcnNfc29ydGVkID0gZmFs c2U7CiAJfQogCiAJcmV0dXJuIHZhcjsKQEAgLTEwODcsMTIgKzEyMTIsMTMg QEAgbG9va3VwQ3JlYXRlVmFyaWFibGUoQ1N0YXRlICpzdCwgY29uc3QgY2hh ciAqY29udGV4dCwgY2hhciAqbmFtZSkKIC8qIEFzc2lnbiBhIHN0cmluZyB2 YWx1ZSB0byBhIHZhcmlhYmxlLCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlICov CiAvKiBSZXR1cm5zIGZhbHNlIG9uIGZhaWx1cmUgKGJhZCBuYW1lKSAqLwog c3RhdGljIGJvb2wKLXB1dFZhcmlhYmxlKENTdGF0ZSAqc3QsIGNvbnN0IGNo YXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQor cHV0VmFyaWFibGUoVmFyaWFibGVzICp2YXJpYWJsZXMsIGNvbnN0IGNoYXIg KmNvbnRleHQsIGNoYXIgKm5hbWUsCisJCQljb25zdCBjaGFyICp2YWx1ZSkK IHsKIAlWYXJpYWJsZSAgICp2YXI7CiAJY2hhcgkgICAqdmFsOwogCi0JdmFy ID0gbG9va3VwQ3JlYXRlVmFyaWFibGUoc3QsIGNvbnRleHQsIG5hbWUpOwor CXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHZhcmlhYmxlcywgY29udGV4 dCwgbmFtZSk7CiAJaWYgKCF2YXIpCiAJCXJldHVybiBmYWxzZTsKIApAQCAt MTExMCwxMiArMTIzNiwxMiBAQCBwdXRWYXJpYWJsZShDU3RhdGUgKnN0LCBj b25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2 YWx1ZSkKIC8qIEFzc2lnbiBhIG51bWVyaWMgdmFsdWUgdG8gYSB2YXJpYWJs ZSwgY3JlYXRpbmcgaXQgaWYgbmVlZCBiZSAqLwogLyogUmV0dXJucyBmYWxz ZSBvbiBmYWlsdXJlIChiYWQgbmFtZSkgKi8KIHN0YXRpYyBib29sCi1wdXRW YXJpYWJsZU51bWJlcihDU3RhdGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0 LCBjaGFyICpuYW1lLAorcHV0VmFyaWFibGVOdW1iZXIoVmFyaWFibGVzICp2 YXJpYWJsZXMsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGNoYXIgKm5hbWUsCiAJ CQkJICBjb25zdCBQZ0JlbmNoVmFsdWUgKnZhbHVlKQogewogCVZhcmlhYmxl ICAgKnZhcjsKIAotCXZhciA9IGxvb2t1cENyZWF0ZVZhcmlhYmxlKHN0LCBj b250ZXh0LCBuYW1lKTsKKwl2YXIgPSBsb29rdXBDcmVhdGVWYXJpYWJsZSh2 YXJpYWJsZXMsIGNvbnRleHQsIG5hbWUpOwogCWlmICghdmFyKQogCQlyZXR1 cm4gZmFsc2U7CiAKQEAgLTExMzEsMTIgKzEyNTcsMTMgQEAgcHV0VmFyaWFi bGVOdW1iZXIoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4dCwgY2hh ciAqbmFtZSwKIC8qIEFzc2lnbiBhbiBpbnRlZ2VyIHZhbHVlIHRvIGEgdmFy aWFibGUsIGNyZWF0aW5nIGl0IGlmIG5lZWQgYmUgKi8KIC8qIFJldHVybnMg ZmFsc2Ugb24gZmFpbHVyZSAoYmFkIG5hbWUpICovCiBzdGF0aWMgYm9vbAot cHV0VmFyaWFibGVJbnQoQ1N0YXRlICpzdCwgY29uc3QgY2hhciAqY29udGV4 dCwgY2hhciAqbmFtZSwgaW50NjQgdmFsdWUpCitwdXRWYXJpYWJsZUludChW YXJpYWJsZXMgKnZhcmlhYmxlcywgY29uc3QgY2hhciAqY29udGV4dCwgY2hh ciAqbmFtZSwKKwkJCSAgIGludDY0IHZhbHVlKQogewogCVBnQmVuY2hWYWx1 ZSB2YWw7CiAKIAlzZXRJbnRWYWx1ZSgmdmFsLCB2YWx1ZSk7Ci0JcmV0dXJu IHB1dFZhcmlhYmxlTnVtYmVyKHN0LCBjb250ZXh0LCBuYW1lLCAmdmFsKTsK KwlyZXR1cm4gcHV0VmFyaWFibGVOdW1iZXIodmFyaWFibGVzLCBjb250ZXh0 LCBuYW1lLCAmdmFsKTsKIH0KIAogc3RhdGljIGNoYXIgKgpAQCAtMTE4MSw3 ICsxMzA4LDcgQEAgcmVwbGFjZVZhcmlhYmxlKGNoYXIgKipzcWwsIGNoYXIg KnBhcmFtLCBpbnQgbGVuLCBjaGFyICp2YWx1ZSkKIH0KIAogc3RhdGljIGNo YXIgKgotYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkK K2Fzc2lnblZhcmlhYmxlcyhWYXJpYWJsZXMgKnZhcmlhYmxlcywgY2hhciAq c3FsKQogewogCWNoYXIJICAgKnAsCiAJCQkgICAqbmFtZSwKQEAgLTEyMDIs NyArMTMyOSw3IEBAIGFzc2lnblZhcmlhYmxlcyhDU3RhdGUgKnN0LCBjaGFy ICpzcWwpCiAJCQljb250aW51ZTsKIAkJfQogCi0JCXZhbCA9IGdldFZhcmlh YmxlKHN0LCBuYW1lKTsKKwkJdmFsID0gZ2V0VmFyaWFibGUodmFyaWFibGVz LCBuYW1lKTsKIAkJZnJlZShuYW1lKTsKIAkJaWYgKHZhbCA9PSBOVUxMKQog CQl7CkBAIC0xMjE3LDEyICsxMzQ0LDEzIEBAIGFzc2lnblZhcmlhYmxlcyhD U3RhdGUgKnN0LCBjaGFyICpzcWwpCiB9CiAKIHN0YXRpYyB2b2lkCi1nZXRR dWVyeVBhcmFtcyhDU3RhdGUgKnN0LCBjb25zdCBDb21tYW5kICpjb21tYW5k LCBjb25zdCBjaGFyICoqcGFyYW1zKQorZ2V0UXVlcnlQYXJhbXMoVmFyaWFi bGVzICp2YXJpYWJsZXMsIGNvbnN0IENvbW1hbmQgKmNvbW1hbmQsCisJCQkg ICBjb25zdCBjaGFyICoqcGFyYW1zKQogewogCWludAkJCWk7CiAKIAlmb3Ig KGkgPSAwOyBpIDwgY29tbWFuZC0+YXJnYyAtIDE7IGkrKykKLQkJcGFyYW1z W2ldID0gZ2V0VmFyaWFibGUoc3QsIGNvbW1hbmQtPmFyZ3ZbaSArIDFdKTsK KwkJcGFyYW1zW2ldID0gZ2V0VmFyaWFibGUodmFyaWFibGVzLCBjb21tYW5k LT5hcmd2W2kgKyAxXSk7CiB9CiAKIC8qIGdldCBhIHZhbHVlIGFzIGFuIGlu dCwgdGVsbCBpZiB0aGVyZSBpcyBhIHByb2JsZW0gKi8KQEAgLTE1OTMsNyAr MTcyMSw3IEBAIGV2YWxGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LAogCQkJCWlmIChmdW5jID09IFBHQkVOQ0hfUkFORE9NKQogCQkJCXsKIAkJ CQkJQXNzZXJ0KG5hcmdzID09IDIpOwotCQkJCQlzZXRJbnRWYWx1ZShyZXR2 YWwsIGdldHJhbmQodGhyZWFkLCBpbWluLCBpbWF4KSk7CisJCQkJCXNldElu dFZhbHVlKHJldHZhbCwgZ2V0cmFuZChzdCwgaW1pbiwgaW1heCkpOwogCQkJ CX0KIAkJCQllbHNlCQkJLyogZ2F1c3NpYW4gJiBleHBvbmVudGlhbCAqLwog CQkJCXsKQEAgLTE2MTUsNyArMTc0Myw3IEBAIGV2YWxGdW5jKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LAogCQkJCQkJfQogCiAJCQkJCQlzZXRJbnRW YWx1ZShyZXR2YWwsCi0JCQkJCQkJCQlnZXRHYXVzc2lhblJhbmQodGhyZWFk LCBpbWluLCBpbWF4LCBwYXJhbSkpOworCQkJCQkJCQkJZ2V0R2F1c3NpYW5S YW5kKHN0LCBpbWluLCBpbWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJCWVs c2UJCS8qIGV4cG9uZW50aWFsICovCiAJCQkJCXsKQEAgLTE2MjgsNyArMTc1 Niw3IEBAIGV2YWxGdW5jKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAog CQkJCQkJfQogCiAJCQkJCQlzZXRJbnRWYWx1ZShyZXR2YWwsCi0JCQkJCQkJ CQlnZXRFeHBvbmVudGlhbFJhbmQodGhyZWFkLCBpbWluLCBpbWF4LCBwYXJh bSkpOworCQkJCQkJCQkJZ2V0RXhwb25lbnRpYWxSYW5kKHN0LCBpbWluLCBp bWF4LCBwYXJhbSkpOwogCQkJCQl9CiAJCQkJfQogCkBAIC0xNjY0LDcgKzE3 OTIsNyBAQCBldmFsdWF0ZUV4cHIoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAq c3QsIFBnQmVuY2hFeHByICpleHByLCBQZ0JlbmNoVmFsdWUgKnJldHZhbAog CQkJewogCQkJCVZhcmlhYmxlICAgKnZhcjsKIAotCQkJCWlmICgodmFyID0g bG9va3VwVmFyaWFibGUoc3QsIGV4cHItPnUudmFyaWFibGUudmFybmFtZSkp ID09IE5VTEwpCisJCQkJaWYgKCh2YXIgPSBsb29rdXBWYXJpYWJsZSgmc3Qt PnZhcmlhYmxlcywgZXhwci0+dS52YXJpYWJsZS52YXJuYW1lKSkgPT0gTlVM TCkKIAkJCQl7CiAJCQkJCWZwcmludGYoc3RkZXJyLCAidW5kZWZpbmVkIHZh cmlhYmxlIFwiJXNcIlxuIiwKIAkJCQkJCQlleHByLT51LnZhcmlhYmxlLnZh cm5hbWUpOwpAQCAtMTY5Nyw3ICsxODI1LDcgQEAgZXZhbHVhdGVFeHByKFRT dGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBQZ0JlbmNoRXhwciAqZXhwciwg UGdCZW5jaFZhbHVlICpyZXR2YWwKICAqIFJldHVybiB0cnVlIGlmIHN1Y2Nl ZWRlZCwgb3IgZmFsc2Ugb24gZXJyb3IuCiAgKi8KIHN0YXRpYyBib29sCi1y dW5TaGVsbENvbW1hbmQoQ1N0YXRlICpzdCwgY2hhciAqdmFyaWFibGUsIGNo YXIgKiphcmd2LCBpbnQgYXJnYykKK3J1blNoZWxsQ29tbWFuZChWYXJpYWJs ZXMgKnZhcmlhYmxlcywgY2hhciAqdmFyaWFibGUsIGNoYXIgKiphcmd2LCBp bnQgYXJnYykKIHsKIAljaGFyCQljb21tYW5kW1NIRUxMX0NPTU1BTkRfU0la RV07CiAJaW50CQkJaSwKQEAgLTE3MjgsNyArMTg1Niw3IEBAIHJ1blNoZWxs Q29tbWFuZChDU3RhdGUgKnN0LCBjaGFyICp2YXJpYWJsZSwgY2hhciAqKmFy Z3YsIGludCBhcmdjKQogCQl7CiAJCQlhcmcgPSBhcmd2W2ldICsgMTsJLyog YSBzdHJpbmcgbGl0ZXJhbCBzdGFydGluZyB3aXRoIGNvbG9ucyAqLwogCQl9 Ci0JCWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJsZShzdCwgYXJndltpXSAr IDEpKSA9PSBOVUxMKQorCQllbHNlIGlmICgoYXJnID0gZ2V0VmFyaWFibGUo dmFyaWFibGVzLCBhcmd2W2ldICsgMSkpID09IE5VTEwpCiAJCXsKIAkJCWZw cmludGYoc3RkZXJyLCAiJXM6IHVuZGVmaW5lZCB2YXJpYWJsZSBcIiVzXCJc biIsCiAJCQkJCWFyZ3ZbMF0sIGFyZ3ZbaV0pOwpAQCAtMTc5MSw3ICsxOTE5 LDcgQEAgcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlh YmxlLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCiAJCQkJYXJndlswXSwgcmVz KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoIXB1dFZhcmlhYmxlSW50 KHN0LCAic2V0c2hlbGwiLCB2YXJpYWJsZSwgcmV0dmFsKSkKKwlpZiAoIXB1 dFZhcmlhYmxlSW50KHZhcmlhYmxlcywgInNldHNoZWxsIiwgdmFyaWFibGUs IHJldHZhbCkpCiAJCXJldHVybiBmYWxzZTsKIAogI2lmZGVmIERFQlVHCkBA IC0xODE3LDcgKzE5NDUsNyBAQCBjb21tYW5kRmFpbGVkKENTdGF0ZSAqc3Qs IGNoYXIgKm1lc3NhZ2UpCiAKIC8qIHJldHVybiBhIHNjcmlwdCBudW1iZXIg d2l0aCBhIHdlaWdodGVkIGNob2ljZS4gKi8KIHN0YXRpYyBpbnQKLWNob29z ZVNjcmlwdChUU3RhdGUgKnRocmVhZCkKK2Nob29zZVNjcmlwdChDU3RhdGUg KnN0KQogewogCWludAkJCWkgPSAwOwogCWludDY0CQl3OwpAQCAtMTgyNSw3 ICsxOTUzLDcgQEAgY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFkKQogCWlm IChudW1fc2NyaXB0cyA9PSAxKQogCQlyZXR1cm4gMDsKIAotCXcgPSBnZXRy YW5kKHRocmVhZCwgMCwgdG90YWxfd2VpZ2h0IC0gMSk7CisJdyA9IGdldHJh bmQoc3QsIDAsIHRvdGFsX3dlaWdodCAtIDEpOwogCWRvCiAJewogCQl3IC09 IHNxbF9zY3JpcHRbaSsrXS53ZWlnaHQ7CkBAIC0xODQ1LDcgKzE5NzMsNyBA QCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQog CQljaGFyCSAgICpzcWw7CiAKIAkJc3FsID0gcGdfc3RyZHVwKGNvbW1hbmQt PmFyZ3ZbMF0pOwotCQlzcWwgPSBhc3NpZ25WYXJpYWJsZXMoc3QsIHNxbCk7 CisJCXNxbCA9IGFzc2lnblZhcmlhYmxlcygmc3QtPnZhcmlhYmxlcywgc3Fs KTsKIAogCQlpZiAoZGVidWcpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVu dCAlZCBzZW5kaW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CkBAIC0xODU3LDcg KzE5ODUsNyBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpj b21tYW5kKQogCQljb25zdCBjaGFyICpzcWwgPSBjb21tYW5kLT5hcmd2WzBd OwogCQljb25zdCBjaGFyICpwYXJhbXNbTUFYX0FSR1NdOwogCi0JCWdldFF1 ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOworCQlnZXRRdWVyeVBh cmFtcygmc3QtPnZhcmlhYmxlcywgY29tbWFuZCwgcGFyYW1zKTsKIAogCQlp ZiAoZGVidWcpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCBzZW5k aW5nICVzXG4iLCBzdC0+aWQsIHNxbCk7CkBAIC0xODkxLDcgKzIwMTksNyBA QCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpjb21tYW5kKQog CQkJc3QtPnByZXBhcmVkW3N0LT51c2VfZmlsZV0gPSB0cnVlOwogCQl9CiAK LQkJZ2V0UXVlcnlQYXJhbXMoc3QsIGNvbW1hbmQsIHBhcmFtcyk7CisJCWdl dFF1ZXJ5UGFyYW1zKCZzdC0+dmFyaWFibGVzLCBjb21tYW5kLCBwYXJhbXMp OwogCQlwcmVwYXJlZFN0YXRlbWVudE5hbWUobmFtZSwgc3QtPnVzZV9maWxl LCBzdC0+Y29tbWFuZCk7CiAKIAkJaWYgKGRlYnVnKQpAQCAtMTkxOSwxNCAr MjA0NywxNCBAQCBzZW5kQ29tbWFuZChDU3RhdGUgKnN0LCBDb21tYW5kICpj b21tYW5kKQogICogb2YgZGVsYXksIGluIG1pY3Jvc2Vjb25kcy4gIFJldHVy bnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJvci4KICAqLwogc3Rh dGljIGJvb2wKLWV2YWx1YXRlU2xlZXAoQ1N0YXRlICpzdCwgaW50IGFyZ2Ms IGNoYXIgKiphcmd2LCBpbnQgKnVzZWNzKQorZXZhbHVhdGVTbGVlcChWYXJp YWJsZXMgKnZhcmlhYmxlcywgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQg KnVzZWNzKQogewogCWNoYXIJICAgKnZhcjsKIAlpbnQJCQl1c2VjOwogCiAJ aWYgKCphcmd2WzFdID09ICc6JykKIAl7Ci0JCWlmICgodmFyID0gZ2V0VmFy aWFibGUoc3QsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVMTCkKKwkJaWYgKCh2YXIg PSBnZXRWYXJpYWJsZSh2YXJpYWJsZXMsIGFyZ3ZbMV0gKyAxKSkgPT0gTlVM TCkKIAkJewogCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5kZWZpbmVkIHZh cmlhYmxlIFwiJXNcIlxuIiwKIAkJCQkJYXJndlswXSwgYXJndlsxXSk7CkBA IC0xOTUxLDYgKzIwNzksNjcgQEAgZXZhbHVhdGVTbGVlcChDU3RhdGUgKnN0 LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqdXNlY3MpCiAJcmV0dXJu IHRydWU7CiB9CiAKKy8qIG1ha2UgYSBkZWVwIGNvcHkgb2YgdmFyaWFibGVz IGFycmF5ICovCitzdGF0aWMgdm9pZAorY29weVZhcmlhYmxlcyhWYXJpYWJs ZXMgKmRlc3RpbmF0aW9uX3ZhcnMsIGNvbnN0IFZhcmlhYmxlcyAqc291cmNl X3ZhcnMpCit7CisJVmFyaWFibGUgICAqZGVzdGluYXRpb24gPSBkZXN0aW5h dGlvbl92YXJzLT5hcnJheTsKKwlWYXJpYWJsZSAgICpjdXJyZW50X2Rlc3Rp bmF0aW9uOworCWNvbnN0IFZhcmlhYmxlICpzb3VyY2UgPSBzb3VyY2VfdmFy cy0+YXJyYXk7CisJY29uc3QgVmFyaWFibGUgKmN1cnJlbnRfc291cmNlOwor CWludAkJCW52YXJpYWJsZXMgPSBzb3VyY2VfdmFycy0+bnZhcmlhYmxlczsK KworCWZvciAoY3VycmVudF9kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uOwor CQkgY3VycmVudF9kZXN0aW5hdGlvbiAtIGRlc3RpbmF0aW9uIDwgZGVzdGlu YXRpb25fdmFycy0+bnZhcmlhYmxlczsKKwkJICsrY3VycmVudF9kZXN0aW5h dGlvbikKKwl7CisJCXBnX2ZyZWUoY3VycmVudF9kZXN0aW5hdGlvbi0+bmFt ZSk7CisJCXBnX2ZyZWUoY3VycmVudF9kZXN0aW5hdGlvbi0+dmFsdWUpOwor CX0KKworCWRlc3RpbmF0aW9uX3ZhcnMtPmFycmF5ID0gcGdfcmVhbGxvYyhk ZXN0aW5hdGlvbl92YXJzLT5hcnJheSwKKwkJCQkJCQkJCQkgc2l6ZW9mKFZh cmlhYmxlKSAqIG52YXJpYWJsZXMpOworCWRlc3RpbmF0aW9uID0gZGVzdGlu YXRpb25fdmFycy0+YXJyYXk7CisKKwlmb3IgKGN1cnJlbnRfc291cmNlID0g c291cmNlLCBjdXJyZW50X2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisJ CSBjdXJyZW50X3NvdXJjZSAtIHNvdXJjZSA8IG52YXJpYWJsZXM7CisJCSAr K2N1cnJlbnRfc291cmNlLCArK2N1cnJlbnRfZGVzdGluYXRpb24pCisJewor CQljdXJyZW50X2Rlc3RpbmF0aW9uLT5uYW1lID0gcGdfc3RyZHVwKGN1cnJl bnRfc291cmNlLT5uYW1lKTsKKwkJaWYgKGN1cnJlbnRfc291cmNlLT52YWx1 ZSkKKwkJCWN1cnJlbnRfZGVzdGluYXRpb24tPnZhbHVlID0gcGdfc3RyZHVw KGN1cnJlbnRfc291cmNlLT52YWx1ZSk7CisJCWVsc2UKKwkJCWN1cnJlbnRf ZGVzdGluYXRpb24tPnZhbHVlID0gTlVMTDsKKwkJY3VycmVudF9kZXN0aW5h dGlvbi0+aXNfbnVtZXJpYyA9IGN1cnJlbnRfc291cmNlLT5pc19udW1lcmlj OworCQljdXJyZW50X2Rlc3RpbmF0aW9uLT5udW1fdmFsdWUgPSBjdXJyZW50 X3NvdXJjZS0+bnVtX3ZhbHVlOworCX0KKworCWRlc3RpbmF0aW9uX3ZhcnMt Pm52YXJpYWJsZXMgPSBudmFyaWFibGVzOworCWRlc3RpbmF0aW9uX3ZhcnMt PnZhcnNfc29ydGVkID0gc291cmNlX3ZhcnMtPnZhcnNfc29ydGVkOworfQor CisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZXJlJ3MgYSBzZXJpYWxpemF0 aW9uL2RlYWRsb2NrIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBib29sCithbnlG YWlsdXJlKEZhaWx1cmVTdGF0dXMgc3RhdHVzKQoreworCXJldHVybiBzdGF0 dXMgPT0gU0VSSUFMSVpBVElPTl9GQUlMVVJFIHx8IHN0YXR1cyA9PSBERUFE TE9DS19GQUlMVVJFOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRo ZSBmYWlsdXJlIGNhbiBiZSByZXRyaWVkLgorICovCitzdGF0aWMgYm9vbAor Y2FuUmV0cnkoQ1N0YXRlICpzdCkKK3sKKwlDb21tYW5kICAgICpjb21tYW5k ID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzW3N0LT5jb21t YW5kXTsKKworCXJldHVybiAoIShzdC0+aW5fdHJhbnNhY3Rpb25fYmxvY2sg JiYgY29tbWFuZC0+dHJhbnNhY3Rpb25fYmxvY2tfZW5kIDwgMCkgJiYKKwkJ CXN0LT5yZXRyeV9zdGF0ZS5jb21tYW5kID49IDAgJiYKKwkJCXN0LT5yZXRy eV9zdGF0ZS5yZXRyaWVzICsgMSA8IG1heF90cmllcyk7Cit9CisKIC8qCiAg KiBBZHZhbmNlIHRoZSBzdGF0ZSBtYWNoaW5lIG9mIGEgY29ubmVjdGlvbiwg aWYgcG9zc2libGUuCiAgKi8KQEAgLTE5NjIsNiArMjE1MSw3IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAlpbnN0cl90aW1lCW5vdzsKIAlib29sCQllbmRfdHhfcHJvY2Vzc2Vk ID0gZmFsc2U7CiAJaW50NjQJCXdhaXQ7CisJRmFpbHVyZVN0YXR1cyBmYWls dXJlX3N0YXR1czsKIAogCS8qCiAJICogZ2V0dGltZW9mZGF5KCkgaXNuJ3Qg ZnJlZSwgc28gd2UgZ2V0IHRoZSBjdXJyZW50IHRpbWVzdGFtcCBsYXppbHkg dGhlCkBAIC0xOTkwLDcgKzIxODAsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJICovCiAJ CQljYXNlIENTVEFURV9DSE9PU0VfU0NSSVBUOgogCi0JCQkJc3QtPnVzZV9m aWxlID0gY2hvb3NlU2NyaXB0KHRocmVhZCk7CisJCQkJc3QtPnVzZV9maWxl ID0gY2hvb3NlU2NyaXB0KHN0KTsKIAogCQkJCWlmIChkZWJ1ZykKIAkJCQkJ ZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgZXhlY3V0aW5nIHNjcmlwdCBc IiVzXCJcbiIsIHN0LT5pZCwKQEAgLTIwMTcsNyArMjIwNyw3IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQkgKiBhd2F5LgogCQkJCSAqLwogCQkJCUFzc2VydCh0aHJvdHRs ZV9kZWxheSA+IDApOwotCQkJCXdhaXQgPSBnZXRQb2lzc29uUmFuZCh0aHJl YWQsIHRocm90dGxlX2RlbGF5KTsKKwkJCQl3YWl0ID0gZ2V0UG9pc3NvblJh bmQoc3QsIHRocm90dGxlX2RlbGF5KTsKIAogCQkJCXRocmVhZC0+dGhyb3R0 bGVfdHJpZ2dlciArPSB3YWl0OwogCQkJCXN0LT50eG5fc2NoZWR1bGVkID0g dGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyOwpAQCAtMjA0OSw3ICsyMjM5LDcg QEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRz RGF0YSAqYWdnKQogCQkJCQl7CiAJCQkJCQlwcm9jZXNzWGFjdFN0YXRzKHRo cmVhZCwgc3QsICZub3csIHRydWUsIGFnZyk7CiAJCQkJCQkvKiBuZXh0IHJl bmRlei12b3VzICovCi0JCQkJCQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQodGhy ZWFkLCB0aHJvdHRsZV9kZWxheSk7CisJCQkJCQl3YWl0ID0gZ2V0UG9pc3Nv blJhbmQoc3QsIHRocm90dGxlX2RlbGF5KTsKIAkJCQkJCXRocmVhZC0+dGhy b3R0bGVfdHJpZ2dlciArPSB3YWl0OwogCQkJCQkJc3QtPnR4bl9zY2hlZHVs ZWQgPSB0aHJlYWQtPnRocm90dGxlX3RyaWdnZXI7CiAJCQkJCX0KQEAgLTIx MDIsNiArMjI5MiwxMSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCW1lbXNldChzdC0+cHJl cGFyZWQsIDAsIHNpemVvZihzdC0+cHJlcGFyZWQpKTsKIAkJCQl9CiAKKwkJ CQkvKiByZXNldCB0cmFuc2FjdGlvbiB2YXJpYWJsZXMgdG8gZGVmYXVsdCB2 YWx1ZXMgKi8KKwkJCQlzdC0+cmV0cnlfc3RhdGUuY29tbWFuZCA9IC0xOwor CQkJCWluaXRSZXRyaWVzKCZzdC0+cmV0cmllcyk7CisJCQkJc3QtPmZhaWx1 cmUgPSBmYWxzZTsKKwogCQkJCS8qCiAJCQkJICogUmVjb3JkIHRyYW5zYWN0 aW9uIHN0YXJ0IHRpbWUgdW5kZXIgbG9nZ2luZywgcHJvZ3Jlc3Mgb3IKIAkJ CQkgKiB0aHJvdHRsaW5nLgpAQCAtMjE0MywxMCArMjMzOCwzOCBAQCBkb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICph Z2cpCiAJCQkJfQogCiAJCQkJLyoKKwkJCQkgKiBJdCB3aWxsIGJlIGNoYW5n ZWQgaW4gQ1NUQVRFX1dBSVRfUkVTVUxUIGlmIHRoZXJlIGlzIGEKKwkJCQkg KiBzZXJpYWxpemF0aW9uL2RlYWRsb2NrIGZhaWx1cmUgb3Igd2UgY29udGlu dWUgdGhlIGZhaWxlZAorCQkJCSAqIHRyYW5zYWN0aW9uIGJsb2NrLiBJdCBp cyBzZXQgaGVyZSBiZWNhdXNlIHRoZSBtZXRhIGNvbW1hbmRzCisJCQkJICog ZG9uJ3QgdXNlIENTVEFURV9XQUlUX1JFU1VMVC4KKwkJCQkgKi8KKwkJCQlm YWlsdXJlX3N0YXR1cyA9IEZBSUxVUkVfU1RBVFVTX0FOT1RIRVI7CisKKwkJ CQlpZiAoY29tbWFuZC0+dHlwZSA9PSBTUUxfQ09NTUFORCAmJgorCQkJCQkh c3QtPmluX3RyYW5zYWN0aW9uX2Jsb2NrICYmCisJCQkJCXN0LT5yZXRyeV9z dGF0ZS5jb21tYW5kIDwgc3QtPmNvbW1hbmQpCisJCQkJeworCQkJCQkvKgor CQkJCQkgKiBJdCBpcyBhIGZpcnN0IHRyeSB0byBydW4gdGhlIHRyYW5zYWN0 aW9uIHdoaWNoIGJlZ2lucyBpbgorCQkJCQkgKiBjdXJyZW50IGNvbW1hbmQu ICBSZW1lbWJlciBpdHMgcGFyYW1ldGVycyBqdXN0IGluIGNhc2Ugd2UKKwkJ CQkJICogc2hvdWxkIHJlcGVhdCBpdCBpbiBmdXR1cmUuCisJCQkJCSAqLwor CQkJCQlzdC0+cmV0cnlfc3RhdGUuY29tbWFuZCA9IHN0LT5jb21tYW5kOwor CQkJCQlzdC0+cmV0cnlfc3RhdGUucmV0cmllcyA9IDA7CisJCQkJCW1lbWNw eShzdC0+cmV0cnlfc3RhdGUucmFuZG9tX3N0YXRlLCBzdC0+cmFuZG9tX3N0 YXRlLAorCQkJCQkJICAgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDMpOwor CQkJCQljb3B5VmFyaWFibGVzKCZzdC0+cmV0cnlfc3RhdGUudmFyaWFibGVz LCAmc3QtPnZhcmlhYmxlcyk7CisJCQkJfQorCisJCQkJaWYgKGNvbW1hbmQt PmlzX3RyYW5zYWN0aW9uX2Jsb2NrX2JlZ2luICYmCisJCQkJCSFzdC0+aW5f dHJhbnNhY3Rpb25fYmxvY2spCisJCQkJCXN0LT5pbl90cmFuc2FjdGlvbl9i bG9jayA9IHRydWU7CisKKwkJCQkvKgogCQkJCSAqIFJlY29yZCBzdGF0ZW1l bnQgc3RhcnQgdGltZSBpZiBwZXItY29tbWFuZCBsYXRlbmNpZXMgYXJlCiAJ CQkJICogcmVxdWVzdGVkCiAJCQkJICovCi0JCQkJaWYgKGlzX2xhdGVuY2ll cykKKwkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQogCQkJCXsKIAkJCQkJ aWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQogCQkJCQkJSU5TVFJfVElN RV9TRVRfQ1VSUkVOVChub3cpOwpAQCAtMjE5Miw3ICsyNDE1LDcgQEAgZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIFN0YXRzRGF0YSAq YWdnKQogCQkJCQkJICovCiAJCQkJCQlpbnQJCQl1c2VjOwogCi0JCQkJCQlp ZiAoIWV2YWx1YXRlU2xlZXAoc3QsIGFyZ2MsIGFyZ3YsICZ1c2VjKSkKKwkJ CQkJCWlmICghZXZhbHVhdGVTbGVlcCgmc3QtPnZhcmlhYmxlcywgYXJnYywg YXJndiwgJnVzZWMpKQogCQkJCQkJewogCQkJCQkJCWNvbW1hbmRGYWlsZWQo c3QsICJleGVjdXRpb24gb2YgbWV0YS1jb21tYW5kICdzbGVlcCcgZmFpbGVk Iik7CiAJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CkBAIC0y MjE5LDcgKzI0NDIsOCBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQkJCWJyZWFrOwogCQkJ CQkJCX0KIAotCQkJCQkJCWlmICghcHV0VmFyaWFibGVOdW1iZXIoc3QsIGFy Z3ZbMF0sIGFyZ3ZbMV0sICZyZXN1bHQpKQorCQkJCQkJCWlmICghcHV0VmFy aWFibGVOdW1iZXIoJnN0LT52YXJpYWJsZXMsIGFyZ3ZbMF0sCisJCQkJCQkJ CQkJCQkgICBhcmd2WzFdLCAmcmVzdWx0KSkKIAkJCQkJCQl7CiAJCQkJCQkJ CWNvbW1hbmRGYWlsZWQoc3QsICJhc3NpZ25tZW50IG9mIG1ldGEtY29tbWFu ZCAnc2V0JyBmYWlsZWQiKTsKIAkJCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRF X0FCT1JURUQ7CkBAIC0yMjI4LDcgKzI0NTIsOSBAQCBkb0N1c3RvbShUU3Rh dGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJ CQl9CiAJCQkJCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGFyZ3ZbMF0sICJz ZXRzaGVsbCIpID09IDApCiAJCQkJCQl7Ci0JCQkJCQkJYm9vbAkJcmV0ID0g cnVuU2hlbGxDb21tYW5kKHN0LCBhcmd2WzFdLCBhcmd2ICsgMiwgYXJnYyAt IDIpOworCQkJCQkJCWJvb2wJCXJldCA9IHJ1blNoZWxsQ29tbWFuZCgmc3Qt PnZhcmlhYmxlcywKKwkJCQkJCQkJCQkJCQkJCSAgYXJndlsxXSwgYXJndiAr IDIsCisJCQkJCQkJCQkJCQkJCQkgIGFyZ2MgLSAyKTsKIAogCQkJCQkJCWlm ICh0aW1lcl9leGNlZWRlZCkgLyogdGltZW91dCAqLwogCQkJCQkJCXsKQEAg LTIyNDgsNyArMjQ3NCw5IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFnZykKIAkJCQkJCX0KIAkJCQkJCWVs c2UgaWYgKHBnX3N0cmNhc2VjbXAoYXJndlswXSwgInNoZWxsIikgPT0gMCkK IAkJCQkJCXsKLQkJCQkJCQlib29sCQlyZXQgPSBydW5TaGVsbENvbW1hbmQo c3QsIE5VTEwsIGFyZ3YgKyAxLCBhcmdjIC0gMSk7CisJCQkJCQkJYm9vbAkJ cmV0ID0gcnVuU2hlbGxDb21tYW5kKCZzdC0+dmFyaWFibGVzLAorCQkJCQkJ CQkJCQkJCQkJICBOVUxMLCBhcmd2ICsgMSwKKwkJCQkJCQkJCQkJCQkJCSAg YXJnYyAtIDEpOwogCiAJCQkJCQkJaWYgKHRpbWVyX2V4Y2VlZGVkKSAvKiB0 aW1lb3V0ICovCiAJCQkJCQkJewpAQCAtMjI4MywzNyArMjUxMSw4MSBAQCBk b0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgU3RhdHNEYXRh ICphZ2cpCiAJCQkJICogV2FpdCBmb3IgdGhlIGN1cnJlbnQgU1FMIGNvbW1h bmQgdG8gY29tcGxldGUKIAkJCQkgKi8KIAkJCWNhc2UgQ1NUQVRFX1dBSVRf UkVTVUxUOgotCQkJCWNvbW1hbmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmls ZV0uY29tbWFuZHNbc3QtPmNvbW1hbmRdOwotCQkJCWlmIChkZWJ1ZykKLQkJ CQkJZnByaW50ZihzdGRlcnIsICJjbGllbnQgJWQgcmVjZWl2aW5nXG4iLCBz dC0+aWQpOwotCQkJCWlmICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCi0J CQkJewkJCQkvKiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyAqLwotCQkJCQlj b21tYW5kRmFpbGVkKHN0LCAicGVyaGFwcyB0aGUgYmFja2VuZCBkaWVkIHdo aWxlIHByb2Nlc3NpbmciKTsKLQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FC T1JURUQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoUFFpc0J1c3ko c3QtPmNvbikpCi0JCQkJCXJldHVybjsJCS8qIGRvbid0IGhhdmUgdGhlIHdo b2xlIHJlc3VsdCB5ZXQgKi8KLQotCQkJCS8qCi0JCQkJICogUmVhZCBhbmQg ZGlzY2FyZCB0aGUgcXVlcnkgcmVzdWx0OwotCQkJCSAqLwotCQkJCXJlcyA9 IFBRZ2V0UmVzdWx0KHN0LT5jb24pOwotCQkJCXN3aXRjaCAoUFFyZXN1bHRT dGF0dXMocmVzKSkKIAkJCQl7Ci0JCQkJCWNhc2UgUEdSRVNfQ09NTUFORF9P SzoKLQkJCQkJY2FzZSBQR1JFU19UVVBMRVNfT0s6Ci0JCQkJCWNhc2UgUEdS RVNfRU1QVFlfUVVFUlk6CisJCQkJCUV4ZWNTdGF0dXNUeXBlIHJlc3VsdF9z dGF0dXM7CisJCQkJCWNoYXIJICAgKnNxbFN0YXRlOworCisJCQkJCWNvbW1h bmQgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHNbc3QtPmNv bW1hbmRdOworCQkJCQlpZiAoZGVidWcpCisJCQkJCQlmcHJpbnRmKHN0ZGVy ciwgImNsaWVudCAlZCByZWNlaXZpbmdcbiIsIHN0LT5pZCk7CisJCQkJCWlm ICghUFFjb25zdW1lSW5wdXQoc3QtPmNvbikpCisJCQkJCXsJCQkJLyogdGhl cmUncyBzb21ldGhpbmcgd3JvbmcgKi8KKwkJCQkJCWNvbW1hbmRGYWlsZWQo c3QsICJwZXJoYXBzIHRoZSBiYWNrZW5kIGRpZWQgd2hpbGUgcHJvY2Vzc2lu ZyIpOworCQkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX0FCT1JURUQ7CisJCQkJ CQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoUFFpc0J1c3koc3QtPmNvbikp CisJCQkJCQlyZXR1cm47CQkvKiBkb24ndCBoYXZlIHRoZSB3aG9sZSByZXN1 bHQgeWV0ICovCisKKwkJCQkJLyoKKwkJCQkJICogUmVhZCBhbmQgZGlzY2Fy ZCB0aGUgcXVlcnkgcmVzdWx0OworCQkJCQkgKi8KKwkJCQkJcmVzID0gUFFn ZXRSZXN1bHQoc3QtPmNvbik7CisJCQkJCXJlc3VsdF9zdGF0dXMgPSBQUXJl c3VsdFN0YXR1cyhyZXMpOworCQkJCQlzcWxTdGF0ZSA9IFBRcmVzdWx0RXJy b3JGaWVsZChyZXMsIFBHX0RJQUdfU1FMU1RBVEUpOworCQkJCQlmYWlsdXJl X3N0YXR1cyA9IEZBSUxVUkVfU1RBVFVTX0FOT1RIRVI7CisJCQkJCWlmIChz cWxTdGF0ZSkgeworCQkJCQkJaWYgKHN0cmNtcChzcWxTdGF0ZSwKKwkJCQkJ CQkJICAgRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSA9PSAw KQorCQkJCQkJCWZhaWx1cmVfc3RhdHVzID0gU0VSSUFMSVpBVElPTl9GQUlM VVJFOworCQkJCQkJZWxzZSBpZiAoc3RyY21wKHNxbFN0YXRlLAorCQkJCQkJ CQkJCUVSUkNPREVfVF9SX0RFQURMT0NLX0RFVEVDVEVEKSA9PSAwKQorCQkJ CQkJCWZhaWx1cmVfc3RhdHVzID0gREVBRExPQ0tfRkFJTFVSRTsKKwkJCQkJ CWVsc2UgaWYgKHN0cmNtcChzcWxTdGF0ZSwKKwkJCQkJCQkJCQlFUlJDT0RF X0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04pID09IDApCisJCQkJCQkJZmFp bHVyZV9zdGF0dXMgPSBJTl9GQUlMRURfVFJBTlNBQ1RJT047CisJCQkJCX0K KworCQkJCQlpZiAoZGVidWcpCisJCQkJCXsKKwkJCQkJCWlmIChhbnlGYWls dXJlKGZhaWx1cmVfc3RhdHVzKSkKKwkJCQkJCQlmcHJpbnRmKHN0ZGVyciwg ImNsaWVudCAlZCBnb3QgYSAlcyBmYWlsdXJlICh0cnkgJWQvJWQpXG4iLAor CQkJCQkJCQkJc3QtPmlkLAorCQkJCQkJCQkJKGZhaWx1cmVfc3RhdHVzID09 IFNFUklBTElaQVRJT05fRkFJTFVSRSA/CisJCQkJCQkJCQkgInNlcmlhbGl6 YXRpb24iIDoKKwkJCQkJCQkJCSAiZGVhZGxvY2siKSwKKwkJCQkJCQkJCXN0 LT5yZXRyeV9zdGF0ZS5yZXRyaWVzICsgMSwKKwkJCQkJCQkJCW1heF90cmll cyk7CisJCQkJCQllbHNlIGlmIChmYWlsdXJlX3N0YXR1cyA9PSBJTl9GQUlM RURfVFJBTlNBQ1RJT04pCisJCQkJCQkJZnByaW50ZihzdGRlcnIsICJjbGll bnQgJWQgaW4gdGhlIGZhaWxlZCB0cmFuc2FjdGlvblxuIiwKKwkJCQkJCQkJ CXN0LT5pZCk7CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBBbGwgaXMg b2sgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcworCQkJ CQkgKiBzYXRpc2ZpZWQ6CisJCQkJCSAqIC0gdGhlcmUncyBubyBmYWlsdXJl OworCQkJCQkgKiAtIHRoZXJlIGlzIGEgc2VyaWFsaXphdGlvbi9kZWFkbG9j ayBmYWlsdXJlICh0aGVzZQorCQkJCQkgKiBmYWlsdXJlcyB3aWxsIGJlIHBy b2Nlc3NlZCBsYXRlcik7CisJCQkJCSAqIC0gd2UgY29udGludWUgdGhlIGZh aWxlZCB0cmFuc2FjdGlvbiBibG9jayAobW92ZSBvbiB0bworCQkJCQkgKiB0 aGUgbmV4dCBjb21tYW5kKS4KKwkJCQkJICovCisJCQkJCWlmIChyZXN1bHRf c3RhdHVzID09IFBHUkVTX0NPTU1BTkRfT0sgfHwKKwkJCQkJCXJlc3VsdF9z dGF0dXMgPT0gUEdSRVNfVFVQTEVTX09LIHx8CisJCQkJCQlyZXN1bHRfc3Rh dHVzID09IFBHUkVTX0VNUFRZX1FVRVJZIHx8CisJCQkJCQlmYWlsdXJlX3N0 YXR1cyAhPSBGQUlMVVJFX1NUQVRVU19BTk9USEVSKQorCQkJCQl7CiAJCQkJ CQkvKiBPSyAqLwogCQkJCQkJUFFjbGVhcihyZXMpOwogCQkJCQkJZGlzY2Fy ZF9yZXNwb25zZShzdCk7CiAJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfRU5E X0NPTU1BTkQ7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKKwkJCQkJ fQorCQkJCQllbHNlCisJCQkJCXsKIAkJCQkJCWNvbW1hbmRGYWlsZWQoc3Qs IFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsKIAkJCQkJCVBRY2xlYXIocmVz KTsKIAkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9BQk9SVEVEOwotCQkJCQkJ YnJlYWs7CisJCQkJCX0KIAkJCQl9CiAJCQkJYnJlYWs7CiAKQEAgLTIzMzcs MTIgKzI2MDksMjAgQEAgZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsIFN0YXRzRGF0YSAqYWdnKQogCQkJCSAqLwogCQkJY2FzZSBDU1RB VEVfRU5EX0NPTU1BTkQ6CiAKKwkJCQkvKiBwcm9jZXNzIHRoZSBzZXJpYWxp emF0aW9uL2RlYWRsb2NrIGZhaWx1cmUgaWYgd2UgaGF2ZSBpdCAqLworCQkJ CWlmIChhbnlGYWlsdXJlKGZhaWx1cmVfc3RhdHVzKSkKKwkJCQl7CisJCQkJ CXN0LT5zdGF0ZSA9IENTVEFURV9GQUlMVVJFOworCQkJCQlicmVhazsKKwkJ CQl9CisKIAkJCQkvKgogCQkJCSAqIGNvbW1hbmQgY29tcGxldGVkOiBhY2N1 bXVsYXRlIHBlci1jb21tYW5kIGV4ZWN1dGlvbiB0aW1lcwogCQkJCSAqIGlu IHRocmVhZC1sb2NhbCBkYXRhIHN0cnVjdHVyZSwgaWYgcGVyLWNvbW1hbmQg bGF0ZW5jaWVzCiAJCQkJICogYXJlIHJlcXVlc3RlZC4KIAkJCQkgKi8KLQkJ CQlpZiAoaXNfbGF0ZW5jaWVzKQorCQkJCWlmIChyZXBvcnRfcGVyX2NvbW1h bmQgJiYKKwkJCQkJZmFpbHVyZV9zdGF0dXMgIT0gSU5fRkFJTEVEX1RSQU5T QUNUSU9OKQogCQkJCXsKIAkJCQkJaWYgKElOU1RSX1RJTUVfSVNfWkVSTyhu b3cpKQogCQkJCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOwpAQCAt MjM1NCw4ICsyNjM0LDEzNSBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgU3RhdHNEYXRhICphZ2cpCiAJCQkJCQkJCQkgSU5TVFJf VElNRV9HRVRfRE9VQkxFKHN0LT5zdG10X2JlZ2luKSk7CiAJCQkJfQogCi0J CQkJLyogR28gYWhlYWQgd2l0aCBuZXh0IGNvbW1hbmQgKi8KLQkJCQlzdC0+ Y29tbWFuZCsrOworCQkJCWlmIChzdC0+aW5fdHJhbnNhY3Rpb25fYmxvY2sg JiYKKwkJCQkJY29tbWFuZC0+dHJhbnNhY3Rpb25fYmxvY2tfZW5kID09IHN0 LT5jb21tYW5kKQorCQkJCQlzdC0+aW5fdHJhbnNhY3Rpb25fYmxvY2sgPSBm YWxzZTsKKworCQkJCWlmIChzdC0+ZW5kX2ZhaWxlZF90cmFuc2FjdGlvbl9i bG9jaykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBmYWlsZWQgdHJh bnNhY3Rpb24gYmxvY2sgaGFzIGVuZGVkLiBSZXRyeSBpdCBpZgorCQkJCQkg KiBwb3NzaWJsZS4KKwkJCQkJICovCisJCQkJCXN0LT5lbmRfZmFpbGVkX3Ry YW5zYWN0aW9uX2Jsb2NrID0gZmFsc2U7CisJCQkJCXN0LT5zdGF0ZSA9IENT VEFURV9SRVRSWTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyog R28gYWhlYWQgd2l0aCBuZXh0IGNvbW1hbmQgKi8KKwkJCQkJc3QtPmNvbW1h bmQrKzsKKwkJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1BTkQ7 CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIFJlcG9y dCBhYm91dCBmYWlsdXJlIGFuZCBlbmQgdGhlIGZhaWxlZCB0cmFuc2FjdGlv biBibG9jay4KKwkJCQkgKi8KKwkJCWNhc2UgQ1NUQVRFX0ZBSUxVUkU6CisK KwkJCQlpZiAoY2FuUmV0cnkoc3QpKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogVGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsIGJlIHJldHJpZWQuIFNv IGFjY3VtdWxhdGUKKwkJCQkJICogdGhlIHJldHJ5IGZvciB0aGUgY29tbWFu ZCBhbmQgZm9yIHRoZSBjdXJyZW50IHNjcmlwdAorCQkJCQkgKiBleGVjdXRp b24uCisJCQkJCSAqLworCQkJCQlpZiAoZmFpbHVyZV9zdGF0dXMgPT0gU0VS SUFMSVpBVElPTl9GQUlMVVJFKQorCQkJCQl7CisJCQkJCQlzdC0+cmV0cmll cy5zZXJpYWxpemF0aW9uKys7CisJCQkJCQlpZiAocmVwb3J0X3Blcl9jb21t YW5kKQorCQkJCQkJCWNvbW1hbmQtPnJldHJpZXMuc2VyaWFsaXphdGlvbisr OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJc3QtPnJldHJp ZXMuZGVhZGxvY2tzKys7CisJCQkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5k KQorCQkJCQkJCWNvbW1hbmQtPnJldHJpZXMuZGVhZGxvY2tzKys7CisJCQkJ CX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog V2Ugd2lsbCBub3QgYmUgYWJsZSB0byByZXRyeSB0aGlzIGZhaWxlZCB0cmFu c2FjdGlvbi4KKwkJCQkJICogU28gYWNjdW11bGF0ZSB0aGUgZmFpbHVyZSBm b3IgdGhlIGNvbW1hbmQgYW5kIGZvciB0aGUKKwkJCQkJICogY3VycmVudCBz Y3JpcHQgZXhlY3V0aW9uLgorCQkJCQkgKi8KKwkJCQkJc3QtPmZhaWx1cmUg PSB0cnVlOworCQkJCQlpZiAocmVwb3J0X3Blcl9jb21tYW5kKQorCQkJCQl7 CisJCQkJCQlpZiAoZmFpbHVyZV9zdGF0dXMgPT0gU0VSSUFMSVpBVElPTl9G QUlMVVJFKQorCQkJCQkJCWNvbW1hbmQtPnNlcmlhbGl6YXRpb25fZmFpbHVy ZXMrKzsKKwkJCQkJCWVsc2UKKwkJCQkJCQljb21tYW5kLT5kZWFkbG9ja19m YWlsdXJlcysrOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKHN0LT5pbl90 cmFuc2FjdGlvbl9ibG9jaykKKwkJCQl7CisJCQkJCWlmIChjb21tYW5kLT50 cmFuc2FjdGlvbl9ibG9ja19lbmQgPj0gMCkKKwkJCQkJeworCQkJCQkJaWYg KHN0LT5jb21tYW5kID09IGNvbW1hbmQtPnRyYW5zYWN0aW9uX2Jsb2NrX2Vu ZCkKKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIFRoZSBmYWlsZWQg dHJhbnNhY3Rpb24gYmxvY2sgaGFzIGVuZGVkLiBSZXRyeQorCQkJCQkJCSAq IGl0IGlmIHBvc3NpYmxlLgorCQkJCQkJCSAqLworCQkJCQkJCXN0LT5pbl90 cmFuc2FjdGlvbl9ibG9jayA9IGZhbHNlOworCQkJCQkJCXN0LT5zdGF0ZSA9 IENTVEFURV9SRVRSWTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsK KwkJCQkJCQkvKiBlbmQgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jayAq LworCQkJCQkJCXN0LT5jb21tYW5kID0gY29tbWFuZC0+dHJhbnNhY3Rpb25f YmxvY2tfZW5kOworCQkJCQkJCXN0LT5lbmRfZmFpbGVkX3RyYW5zYWN0aW9u X2Jsb2NrID0gdHJ1ZTsKKwkJCQkJCQlzdC0+c3RhdGUgPSBDU1RBVEVfU1RB UlRfQ09NTUFORDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJ CXsKKwkJCQkJCS8qCisJCQkJCQkgKiBUaGVyZSdzIG5vdCBhIHRyYW5zYWN0 aW9uIGJsb2NrIGVuZCBsYXRlciBpbiB0aGlzCisJCQkJCQkgKiBzY3JpcHQu IFdlIGFyZSBpbiB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIGJsb2NrIGFuZAor CQkJCQkJICogYWxsIG5leHQgY29tbWFuZHMgd2lsbCBmYWlsLiBTbyBsZXQn cyBlbmQgdGhlIGN1cnJlbnQKKwkJCQkJCSAqIHNjcmlwdCBleGVjdXRpb24u CisJCQkJCQkgKi8KKwkJCQkJCXN0LT5zdGF0ZSA9IENTVEFURV9FTkRfVFg7 CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogcmV0 cnkgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBpZiBwb3NzaWJsZSAqLworCQkJ CQlzdC0+c3RhdGUgPSBDU1RBVEVfUkVUUlk7CisJCQkJfQorCisJCQkJYnJl YWs7CisKKwkJCQkvKgorCQkJCSAqIFJldHJ5IHRoZSBmYWlsZWQgdHJhbnNh Y3Rpb24gaWYgcG9zc2libGUuCisJCQkJICovCisJCQljYXNlIENTVEFURV9S RVRSWToKKworCQkJCWlmIChjYW5SZXRyeShzdCkpCisJCQkJeworCQkJCQlz dC0+cmV0cnlfc3RhdGUucmV0cmllcysrOworCQkJCQlpZiAoZGVidWcpCisJ CQkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAlZCByZXBlYXRzIHRoZSBm YWlsZWQgdHJhbnNhY3Rpb24gKHRyeSAlZC8lZClcbiIsCisJCQkJCQkJCXN0 LT5pZCwKKwkJCQkJCQkJc3QtPnJldHJ5X3N0YXRlLnJldHJpZXMgKyAxLAor CQkJCQkJCQltYXhfdHJpZXMpOworCisJCQkJCXN0LT5jb21tYW5kID0gc3Qt PnJldHJ5X3N0YXRlLmNvbW1hbmQ7CisJCQkJCW1lbWNweShzdC0+cmFuZG9t X3N0YXRlLCBzdC0+cmV0cnlfc3RhdGUucmFuZG9tX3N0YXRlLAorCQkJCQkJ ICAgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDMpOworCQkJCQljb3B5VmFy aWFibGVzKCZzdC0+dmFyaWFibGVzLCAmc3QtPnJldHJ5X3N0YXRlLnZhcmlh Ymxlcyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIEdvIGFo ZWFkIHdpdGggbmV4dCBjb21tYW5kICovCisJCQkJCXN0LT5jb21tYW5kKys7 CisJCQkJfQorCiAJCQkJc3QtPnN0YXRlID0gQ1NUQVRFX1NUQVJUX0NPTU1B TkQ7CiAJCQkJYnJlYWs7CiAKQEAgLTIzNzIsNyArMjc3OSw4IEBAIGRvQ3Vz dG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBTdGF0c0RhdGEgKmFn ZykKIAkJCQkJcGVyX3NjcmlwdF9zdGF0cyB8fCB1c2VfbG9nKQogCQkJCQlw cm9jZXNzWGFjdFN0YXRzKHRocmVhZCwgc3QsICZub3csIGZhbHNlLCBhZ2cp OwogCQkJCWVsc2UKLQkJCQkJdGhyZWFkLT5zdGF0cy5jbnQrKzsKKwkJCQkJ YWNjdW1NYWluU3RhdHMoJnRocmVhZC0+c3RhdHMsIGZhbHNlLCBzdC0+ZmFp bHVyZSwKKwkJCQkJCQkJICAgJnN0LT5yZXRyaWVzKTsKIAogCQkJCWlmIChp c19jb25uZWN0KQogCQkJCXsKQEAgLTI0NDYsNyArMjg1NCw3IEBAIGRvTG9n KFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LAogCSAqIHRvIHRoZSByYW5k b20gc2FtcGxlLgogCSAqLwogCWlmIChzYW1wbGVfcmF0ZSAhPSAwLjAgJiYK LQkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9zdGF0ZSkgPiBzYW1wbGVf cmF0ZSkKKwkJcGdfZXJhbmQ0OChzdC0+cmFuZG9tX3N0YXRlKSA+IHNhbXBs ZV9yYXRlKQogCQlyZXR1cm47CiAKIAkvKiBzaG91bGQgd2UgYWdncmVnYXRl IHRoZSByZXN1bHRzIG9yIG5vdD8gKi8KQEAgLTI0NjIsMTMgKzI4NzAsMTQg QEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCXdoaWxl IChhZ2ctPnN0YXJ0X3RpbWUgKyBhZ2dfaW50ZXJ2YWwgPD0gbm93KQogCQl7 CiAJCQkvKiBwcmludCBhZ2dyZWdhdGVkIHJlcG9ydCB0byBsb2dmaWxlICov Ci0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgIiBJTlQ2NF9GT1JNQVQgIiAl LjBmICUuMGYgJS4wZiAlLjBmIiwKKwkJCWZwcmludGYobG9nZmlsZSwgIiVs ZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBmICUuMGYgIiBJTlQ2 NF9GT1JNQVQsCiAJCQkJCShsb25nKSBhZ2ctPnN0YXJ0X3RpbWUsCiAJCQkJ CWFnZy0+Y250LAogCQkJCQlhZ2ctPmxhdGVuY3kuc3VtLAogCQkJCQlhZ2ct PmxhdGVuY3kuc3VtMiwKIAkJCQkJYWdnLT5sYXRlbmN5Lm1pbiwKLQkJCQkJ YWdnLT5sYXRlbmN5Lm1heCk7CisJCQkJCWFnZy0+bGF0ZW5jeS5tYXgsCisJ CQkJCWFnZy0+ZmFpbHVyZXMpOwogCQkJaWYgKHRocm90dGxlX2RlbGF5KQog CQkJewogCQkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBmICUuMGYgJS4wZiAl LjBmIiwKQEAgLTI0NzksNiArMjg4OCwxMCBAQCBkb0xvZyhUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwKIAkJCQlpZiAobGF0ZW5jeV9saW1pdCkKIAkJ CQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFULCBhZ2ctPnNr aXBwZWQpOwogCQkJfQorCQkJaWYgKG1heF90cmllcyA+IDEpCisJCQkJZnBy aW50Zihsb2dmaWxlLCAiICIgSU5UNjRfRk9STUFUICIgIiBJTlQ2NF9GT1JN QVQsCisJCQkJCQlhZ2ctPnJldHJpZXMuc2VyaWFsaXphdGlvbiwKKwkJCQkJ CWFnZy0+cmV0cmllcy5kZWFkbG9ja3MpOwogCQkJZnB1dGMoJ1xuJywgbG9n ZmlsZSk7CiAKIAkJCS8qIHJlc2V0IGRhdGEgYW5kIG1vdmUgdG8gbmV4dCBp bnRlcnZhbCAqLwpAQCAtMjQ4Niw3ICsyODk5LDcgQEAgZG9Mb2coVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCX0KIAogCQkvKiBhY2N1bXVsYXRl IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi0JCWFjY3VtU3RhdHMoYWdn LCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOworCQlhY2N1bVN0YXRzKGFnZywg c2tpcHBlZCwgc3QtPmZhaWx1cmUsIGxhdGVuY3ksIGxhZywgJnN0LT5yZXRy aWVzKTsKIAl9CiAJZWxzZQogCXsKQEAgLTI0OTgsMTIgKzI5MTEsMjAgQEAg ZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsCiAJCQlmcHJpbnRm KGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIHNraXBwZWQgJWQgJWxk ICVsZCIsCiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLAog CQkJCQkobG9uZykgdHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CisJ CWVsc2UgaWYgKHN0LT5mYWlsdXJlKQorCQkJZnByaW50Zihsb2dmaWxlLCAi JWQgIiBJTlQ2NF9GT1JNQVQgIiBmYWlsZWQgJWQgJWxkICVsZCIsCisJCQkJ CXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLAorCQkJCQkobG9uZykg dHYudHZfc2VjLCAobG9uZykgdHYudHZfdXNlYyk7CiAJCWVsc2UKIAkJCWZw cmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9STUFUICIgJS4wZiAlZCAl bGQgJWxkIiwKIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5LCBzdC0+ dXNlX2ZpbGUsCiAJCQkJCShsb25nKSB0di50dl9zZWMsIChsb25nKSB0di50 dl91c2VjKTsKIAkJaWYgKHRocm90dGxlX2RlbGF5KQogCQkJZnByaW50Zihs b2dmaWxlLCAiICUuMGYiLCBsYWcpOworCQlpZiAobWF4X3RyaWVzID4gMSkK KwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2NF9GT1JNQVQgIiAiIElO VDY0X0ZPUk1BVCwKKwkJCQkJCXN0LT5yZXRyaWVzLnNlcmlhbGl6YXRpb24s CisJCQkJCQlzdC0+cmV0cmllcy5kZWFkbG9ja3MpOwogCQlmcHV0YygnXG4n LCBsb2dmaWxlKTsKIAl9CiB9CkBAIC0yNTIzLDcgKzI5NDQsNyBAQCBwcm9j ZXNzWGFjdFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0 cl90aW1lICpub3csCiAJaWYgKCghc2tpcHBlZCkgJiYgSU5TVFJfVElNRV9J U19aRVJPKCpub3cpKQogCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKCpub3cp OwogCi0JaWYgKCFza2lwcGVkKQorCWlmICghc2tpcHBlZCAmJiAhc3QtPmZh aWx1cmUpCiAJewogCQkvKiBjb21wdXRlIGxhdGVuY3kgJiBsYWcgKi8KIAkJ bGF0ZW5jeSA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0gc3Qt PnR4bl9zY2hlZHVsZWQ7CkBAIC0yNTMyLDIxICsyOTUzLDIzIEBAIHByb2Nl c3NYYWN0U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3Ry X3RpbWUgKm5vdywKIAogCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxh eSB8fCBsYXRlbmN5X2xpbWl0KQogCXsKLQkJYWNjdW1TdGF0cygmdGhyZWFk LT5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsKKwkJYWNjdW1TdGF0 cygmdGhyZWFkLT5zdGF0cywgc2tpcHBlZCwgc3QtPmZhaWx1cmUsIGxhdGVu Y3ksIGxhZywKKwkJCQkgICAmc3QtPnJldHJpZXMpOwogCiAJCS8qIGNvdW50 IHRyYW5zYWN0aW9ucyBvdmVyIHRoZSBsYXRlbmN5IGxpbWl0LCBpZiBuZWVk ZWQgKi8KIAkJaWYgKGxhdGVuY3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVu Y3lfbGltaXQpCiAJCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOwogCX0KIAll bHNlCi0JCXRocmVhZC0+c3RhdHMuY250Kys7CisJCWFjY3VtTWFpblN0YXRz KCZ0aHJlYWQtPnN0YXRzLCBza2lwcGVkLCBzdC0+ZmFpbHVyZSwgJnN0LT5y ZXRyaWVzKTsKIAogCWlmICh1c2VfbG9nKQogCQlkb0xvZyh0aHJlYWQsIHN0 LCBhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7CiAKIAkvKiBYWFggY291 bGQgdXNlIGEgbXV0ZXggaGVyZSwgYnV0IHdlIGNob29zZSBub3QgdG8gKi8K IAlpZiAocGVyX3NjcmlwdF9zdGF0cykKLQkJYWNjdW1TdGF0cygmc3FsX3Nj cmlwdFtzdC0+dXNlX2ZpbGVdLnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBs YWcpOworCQlhY2N1bVN0YXRzKCZzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0u c3RhdHMsIHNraXBwZWQsIHN0LT5mYWlsdXJlLAorCQkJCSAgIGxhdGVuY3ks IGxhZywgJnN0LT5yZXRyaWVzKTsKIH0KIAogCkBAIC0yOTg1LDYgKzM0MDgs MTEgQEAgcHJvY2Vzc19zcWxfY29tbWFuZChQUUV4cEJ1ZmZlciBidWYsIGNv bnN0IGNoYXIgKnNvdXJjZSkKIAlteV9jb21tYW5kLT50eXBlID0gU1FMX0NP TU1BTkQ7CiAJbXlfY29tbWFuZC0+YXJnYyA9IDA7CiAJaW5pdFNpbXBsZVN0 YXRzKCZteV9jb21tYW5kLT5zdGF0cyk7CisJaW5pdFJldHJpZXMoJm15X2Nv bW1hbmQtPnJldHJpZXMpOworCW15X2NvbW1hbmQtPnNlcmlhbGl6YXRpb25f ZmFpbHVyZXMgPSAwOworCW15X2NvbW1hbmQtPmRlYWRsb2NrX2ZhaWx1cmVz ID0gMDsKKwlteV9jb21tYW5kLT5pc190cmFuc2FjdGlvbl9ibG9ja19iZWdp biA9IGZhbHNlOworCW15X2NvbW1hbmQtPnRyYW5zYWN0aW9uX2Jsb2NrX2Vu ZCA9IC0xOwogCiAJLyoKIAkgKiBJZiBTUUwgY29tbWFuZCBpcyBtdWx0aS1s aW5lLCB3ZSBvbmx5IHdhbnQgdG8gc2F2ZSB0aGUgZmlyc3QgbGluZSBhcwpA QCAtMzA1NCw2ICszNDgyLDExIEBAIHByb2Nlc3NfYmFja3NsYXNoX2NvbW1h bmQoUHNxbFNjYW5TdGF0ZSBzc3RhdGUsIGNvbnN0IGNoYXIgKnNvdXJjZSkK IAlteV9jb21tYW5kLT50eXBlID0gTUVUQV9DT01NQU5EOwogCW15X2NvbW1h bmQtPmFyZ2MgPSAwOwogCWluaXRTaW1wbGVTdGF0cygmbXlfY29tbWFuZC0+ c3RhdHMpOworCWluaXRSZXRyaWVzKCZteV9jb21tYW5kLT5yZXRyaWVzKTsK KwlteV9jb21tYW5kLT5zZXJpYWxpemF0aW9uX2ZhaWx1cmVzID0gMDsKKwlt eV9jb21tYW5kLT5kZWFkbG9ja19mYWlsdXJlcyA9IDA7CisJbXlfY29tbWFu ZC0+aXNfdHJhbnNhY3Rpb25fYmxvY2tfYmVnaW4gPSBmYWxzZTsKKwlteV9j b21tYW5kLT50cmFuc2FjdGlvbl9ibG9ja19lbmQgPSAtMTsKIAogCS8qIFNh dmUgZmlyc3Qgd29yZCAoY29tbWFuZCBuYW1lKSAqLwogCWogPSAwOwpAQCAt MzE4NSw2ICszNjE4LDYwIEBAIHByb2Nlc3NfYmFja3NsYXNoX2NvbW1hbmQo UHNxbFNjYW5TdGF0ZSBzc3RhdGUsIGNvbnN0IGNoYXIgKnNvdXJjZSkKIH0K IAogLyoKKyAqIFJldHVybnMgdGhlIHNhbWUgY29tbWFuZCB3aGVyZSBhbGwg Y29udGludW91cyBibG9ja3Mgb2Ygd2hpdGVzcGFjZXMgYXJlCisgKiByZXBs YWNlZCBieSBvbmUgc3BhY2Ugc3ltYm9sLgorICoKKyAqIFJldHVybnMgYSBt YWxsb2MnZCBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK25vcm1hbGl6 ZV93aGl0ZXNwYWNlcyhjb25zdCBjaGFyICpjb21tYW5kKQoreworCWNvbnN0 IGNoYXIgKnB0ciA9IGNvbW1hbmQ7CisJY2hhcgkgICAqYnVmZmVyID0gcGdf bWFsbG9jKHN0cmxlbihjb21tYW5kKSArIDEpOworCWludAkJCWxlbmd0aCA9 IDA7CisKKwl3aGlsZSAoKnB0cikKKwl7CisJCXdoaWxlICgqcHRyICYmICFp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKKwkJCWJ1ZmZlcltsZW5n dGgrK10gPSAqKHB0cisrKTsKKwkJaWYgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpICpwdHIpKQorCQl7CisJCQlidWZmZXJbbGVuZ3RoKytdID0gJyAnOwor CQkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQorCQkJ CXB0cisrOworCQl9CisJfQorCWJ1ZmZlcltsZW5ndGhdID0gJ1wwJzsKKwor CXJldHVybiBidWZmZXI7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYg Z2l2ZW4gY29tbWFuZCBnZW5lcmFsbHkgZW5kcyBhIHRyYW5zYWN0aW9uIGJs b2NrICh3ZSBkb24ndAorICogY2hlY2sgaGVyZSBpZiB0aGUgbGFzdCB0cmFu c2FjdGlvbiBibG9jayBpcyBhbHJlYWR5IGNvbXBsZXRlZCkuCisgKi8KK3N0 YXRpYyBib29sCitpc190cmFuc2FjdGlvbl9ibG9ja19lbmQoY29uc3QgY2hh ciAqY29tbWFuZF90ZXh0KQoreworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOwor CWNoYXIJICAgKmNvbW1hbmQgPSBub3JtYWxpemVfd2hpdGVzcGFjZXMoY29t bWFuZF90ZXh0KTsKKworCWlmIChwZ19zdHJuY2FzZWNtcChjb21tYW5kLCAi ZW5kIiwgMykgPT0gMCB8fAorCQkocGdfc3RybmNhc2VjbXAoY29tbWFuZCwg ImNvbW1pdCIsIDYpID09IDAgJiYKKwkJIHBnX3N0cm5jYXNlY21wKGNvbW1h bmQsICJjb21taXQgcHJlcGFyZWQiLCAxNSkgIT0gMCkgfHwKKwkJKHBnX3N0 cm5jYXNlY21wKGNvbW1hbmQsICJyb2xsYmFjayIsIDgpID09IDAgJiYKKwkJ IHBnX3N0cm5jYXNlY21wKGNvbW1hbmQsICJyb2xsYmFjayBwcmVwYXJlZCIs IDE3KSAhPSAwICYmCisJCSBwZ19zdHJuY2FzZWNtcChjb21tYW5kLCAicm9s bGJhY2sgdG8iLCAxMSkgIT0gMCkgfHwKKwkJKHBnX3N0cm5jYXNlY21wKGNv bW1hbmQsICJwcmVwYXJlIHRyYW5zYWN0aW9uICIsIDIwKSA9PSAwICYmCisJ CSBwZ19zdHJuY2FzZWNtcChjb21tYW5kLCAicHJlcGFyZSB0cmFuc2FjdGlv biAoIiwgMjEpICE9IDAgJiYKKwkJIHBnX3N0cm5jYXNlY21wKGNvbW1hbmQs ICJwcmVwYXJlIHRyYW5zYWN0aW9uIGFzICIsIDIzKSAhPSAwKSkKKwkJcmVz dWx0ID0gdHJ1ZTsKKworCXBnX2ZyZWUoY29tbWFuZCk7CisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKICAqIFBhcnNlIGEgc2NyaXB0IChlaXRoZXIgdGhl IGNvbnRlbnRzIG9mIGEgZmlsZSwgb3IgYSBidWlsdC1pbiBzY3JpcHQpCiAg KiBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIHNjcmlwdHMuCiAgKi8KQEAg LTMxOTYsNiArMzY4Myw3IEBAIFBhcnNlU2NyaXB0KGNvbnN0IGNoYXIgKnNj cmlwdCwgY29uc3QgY2hhciAqZGVzYywgaW50IHdlaWdodCkKIAlQUUV4cEJ1 ZmZlckRhdGEgbGluZV9idWY7CiAJaW50CQkJYWxsb2NfbnVtOwogCWludAkJ CWluZGV4OworCWludAkJCWxhc3RfdHJhbnNhY3Rpb25fYmxvY2tfZW5kID0g LTE7CiAKICNkZWZpbmUgQ09NTUFORFNfQUxMT0NfTlVNIDEyOAogCWFsbG9j X251bSA9IENPTU1BTkRTX0FMTE9DX05VTTsKQEAgLTMyMzgsNiArMzcyNiw5 IEBAIFBhcnNlU2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCwgY29uc3QgY2hh ciAqZGVzYywgaW50IHdlaWdodCkKIAkJY29tbWFuZCA9IHByb2Nlc3Nfc3Fs X2NvbW1hbmQoJmxpbmVfYnVmLCBkZXNjKTsKIAkJaWYgKGNvbW1hbmQpCiAJ CXsKKwkJCWNoYXIJICAgKmNvbW1hbmRfdGV4dCA9IGNvbW1hbmQtPmFyZ3Zb MF07CisJCQlpbnQJCQljdXJfaW5kZXg7CisKIAkJCXBzLmNvbW1hbmRzW2lu ZGV4XSA9IGNvbW1hbmQ7CiAJCQlpbmRleCsrOwogCkBAIC0zMjQ3LDYgKzM3 MzgsMjUgQEAgUGFyc2VTY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0LCBjb25z dCBjaGFyICpkZXNjLCBpbnQgd2VpZ2h0KQogCQkJCXBzLmNvbW1hbmRzID0g KENvbW1hbmQgKiopCiAJCQkJCXBnX3JlYWxsb2MocHMuY29tbWFuZHMsIHNp emVvZihDb21tYW5kICopICogYWxsb2NfbnVtKTsKIAkJCX0KKworCQkJLyog Y2hlY2sgaWYgdGhlIGNvbW1hbmQgc3ludGFjdGljYWxseSBzdGFydHMgYSB0 cmFuc2FjdGlvbiBibG9jayAqLworCQkJaWYgKHBnX3N0cm5jYXNlY21wKGNv bW1hbmRfdGV4dCwgImJlZ2luIiwgNSkgPT0gMCB8fAorCQkJCXBnX3N0cm5j YXNlY21wKGNvbW1hbmRfdGV4dCwgInN0YXJ0IiwgNSkgPT0gMCkKKwkJCQlj b21tYW5kLT5pc190cmFuc2FjdGlvbl9ibG9ja19iZWdpbiA9IHRydWU7CisK KwkJCS8qIGNoZWNrIGlmIHRoZSBjb21tYW5kIHN5bnRhY3RpY2FsbHkgZW5k cyBhIHRyYW5zYWN0aW9uIGJsb2NrKi8KKwkJCWlmIChpc190cmFuc2FjdGlv bl9ibG9ja19lbmQoY29tbWFuZF90ZXh0KSkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIFJlbWVtYmVyIGl0IGZvciBjb21tYW5kcyB0aGF0IGNhbiBmYWlsIGEg dHJhbnNhY3Rpb24gYmxvY2sKKwkJCQkgKiBlYXJsaWVyLgorCQkJCSAqLwor CQkJCWZvciAoY3VyX2luZGV4ID0gbGFzdF90cmFuc2FjdGlvbl9ibG9ja19l bmQgKyAxOworCQkJCQkgY3VyX2luZGV4IDwgaW5kZXg7CisJCQkJCSBjdXJf aW5kZXgrKykKKwkJCQkJcHMuY29tbWFuZHNbY3VyX2luZGV4XS0+dHJhbnNh Y3Rpb25fYmxvY2tfZW5kID0gaW5kZXggLSAxOworCQkJCWxhc3RfdHJhbnNh Y3Rpb25fYmxvY2tfZW5kID0gaW5kZXggLSAxOworCQkJfQogCQl9CiAKIAkJ LyogSWYgd2UgcmVhY2hlZCBhIGJhY2tzbGFzaCwgcHJvY2VzcyB0aGF0ICov CkBAIC0zNDg0LDYgKzM5OTQsMTUgQEAgcHJpbnRTaW1wbGVTdGF0cyhjaGFy ICpwcmVmaXgsIFNpbXBsZVN0YXRzICpzcykKIAlwcmludGYoIiVzIHN0ZGRl diA9ICUuM2YgbXNcbiIsIHByZWZpeCwgMC4wMDEgKiBzdGRkZXYpOwogfQog CisvKgorICogUmV0dXJuIHRoZSBzdW0gb2YgYWxsIHJldHJpZXMuCisgKi8K K3N0YXRpYyBpbnQ2NAorZ2V0QWxsUmV0cmllcyhSZXRyaWVzICpyZXRyaWVz KQoreworCXJldHVybiByZXRyaWVzLT5zZXJpYWxpemF0aW9uICsgcmV0cmll cy0+ZGVhZGxvY2tzOworfQorCiAvKiBwcmludCBvdXQgcmVzdWx0cyAqLwog c3RhdGljIHZvaWQKIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0 YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKQEAgLTM0 OTIsNiArNDAxMSw4IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwKIAlk b3VibGUJCXRpbWVfaW5jbHVkZSwKIAkJCQl0cHNfaW5jbHVkZSwKIAkJCQl0 cHNfZXhjbHVkZTsKKwlpbnQ2NAkJYWxsX2ZhaWx1cmVzID0gdG90YWwtPmZh aWx1cmVzOworCWludDY0CQlhbGxfcmV0cmllcyA9IGdldEFsbFJldHJpZXMo JnRvdGFsLT5yZXRyaWVzKTsKIAogCXRpbWVfaW5jbHVkZSA9IElOU1RSX1RJ TUVfR0VUX0RPVUJMRSh0b3RhbF90aW1lKTsKIAl0cHNfaW5jbHVkZSA9IHRv dGFsLT5jbnQgLyB0aW1lX2luY2x1ZGU7CkBAIC0zNTAxLDYgKzQwMjIsNyBA QCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRv dGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsCiAJLyogUmVwb3J0IHRlc3Qg cGFyYW1ldGVycy4gKi8KIAlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVz XG4iLAogCQkgICBudW1fc2NyaXB0cyA9PSAxID8gc3FsX3NjcmlwdFswXS5k ZXNjIDogIm11bHRpcGxlIHNjcmlwdHMiKTsKKwlwcmludGYoInRyYW5zYWN0 aW9uIG1heGltdW0gdHJpZXMgbnVtYmVyOiAlZFxuIiwgbWF4X3RyaWVzKTsK IAlwcmludGYoInNjYWxpbmcgZmFjdG9yOiAlZFxuIiwgc2NhbGUpOwogCXBy aW50ZigicXVlcnkgbW9kZTogJXNcbiIsIFFVRVJZTU9ERVtxdWVyeW1vZGVd KTsKIAlwcmludGYoIm51bWJlciBvZiBjbGllbnRzOiAlZFxuIiwgbmNsaWVu dHMpOwpAQCAtMzUyMiw2ICs0MDQ0LDE2IEBAIHByaW50UmVzdWx0cyhUU3Rh dGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwKIAlpZiAodG90YWwtPmNudCA8PSAwKQogCQlyZXR1cm47CiAK KwlpZiAoYWxsX2ZhaWx1cmVzID4gMCkKKwkJcHJpbnRmKCJudW1iZXIgb2Yg ZmFpbHVyZXM6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLAorCQkJ ICAgYWxsX2ZhaWx1cmVzLCAoMTAwLjAgKiBhbGxfZmFpbHVyZXMgLyB0b3Rh bC0+Y250KSk7CisKKwlpZiAoYWxsX3JldHJpZXMgPiAwKQorCQlwcmludGYo Im51bWJlciBvZiByZXRyaWVzOiAiIElOVDY0X0ZPUk1BVCAiIChzZXJpYWxp emF0aW9uOiAiIElOVDY0X0ZPUk1BVCAiLCBkZWFkbG9ja3M6ICIgSU5UNjRf Rk9STUFUICIpXG4iLAorCQkJICAgYWxsX3JldHJpZXMsCisJCQkgICB0b3Rh bC0+cmV0cmllcy5zZXJpYWxpemF0aW9uLAorCQkJICAgdG90YWwtPnJldHJp ZXMuZGVhZGxvY2tzKTsKKwogCWlmICh0aHJvdHRsZV9kZWxheSAmJiBsYXRl bmN5X2xpbWl0KQogCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMg c2tpcHBlZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsCiAJCQkg ICB0b3RhbC0+c2tpcHBlZCwKQEAgLTM1NTcsMTMgKzQwODksMTQgQEAgcHJp bnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwg aW5zdHJfdGltZSB0b3RhbF90aW1lLAogCXByaW50ZigidHBzID0gJWYgKGV4 Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxpc2hpbmcpXG4iLCB0cHNfZXhj bHVkZSk7CiAKIAkvKiBSZXBvcnQgcGVyLXNjcmlwdC9jb21tYW5kIHN0YXRp c3RpY3MgKi8KLQlpZiAocGVyX3NjcmlwdF9zdGF0cyB8fCBsYXRlbmN5X2xp bWl0IHx8IGlzX2xhdGVuY2llcykKKwlpZiAocGVyX3NjcmlwdF9zdGF0cyB8 fCBsYXRlbmN5X2xpbWl0IHx8IHJlcG9ydF9wZXJfY29tbWFuZCkKIAl7CiAJ CWludAkJCWk7CiAKIAkJZm9yIChpID0gMDsgaSA8IG51bV9zY3JpcHRzOyBp KyspCiAJCXsKIAkJCWlmIChudW1fc2NyaXB0cyA+IDEpCisJCQl7CiAJCQkJ cHJpbnRmKCJTUUwgc2NyaXB0ICVkOiAlc1xuIgogCQkJCQkgICAiIC0gd2Vp Z2h0OiAlZCAodGFyZ2V0cyAlLjFmJSUgb2YgdG90YWwpXG4iCiAJCQkJCSAg ICIgLSAiIElOVDY0X0ZPUk1BVCAiIHRyYW5zYWN0aW9ucyAoJS4xZiUlIG9m IHRvdGFsLCB0cHMgPSAlZilcbiIsCkBAIC0zNTczLDggKzQxMDYsMjMgQEAg cHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3Rh bCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLAogCQkJCQkgICBzcWxfc2NyaXB0 W2ldLnN0YXRzLmNudCwKIAkJCQkJICAgMTAwLjAgKiBzcWxfc2NyaXB0W2ld LnN0YXRzLmNudCAvIHRvdGFsLT5jbnQsCiAJCQkJCSAgIHNxbF9zY3JpcHRb aV0uc3RhdHMuY250IC8gdGltZV9pbmNsdWRlKTsKKworCQkJCWlmIChhbGxf ZmFpbHVyZXMgPiAwKQorCQkJCQlwcmludGYoIiAtIG51bWJlciBvZiBmYWls dXJlczogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsCisJCQkJCQkg ICBzcWxfc2NyaXB0W2ldLnN0YXRzLmZhaWx1cmVzLAorCQkJCQkJICAgKDEw MC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5mYWlsdXJlcyAvCisJCQkJCQkJ c3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQpKTsKKworCQkJCWlmIChhbGxfcmV0 cmllcyA+IDApCisJCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHJldHJpZXM6 ICIgSU5UNjRfRk9STUFUICIgKHNlcmlhbGl6YXRpb246ICIgSU5UNjRfRk9S TUFUICIsIGRlYWRsb2NrczogIiBJTlQ2NF9GT1JNQVQgIilcbiIsCisJCQkJ CQkgICBnZXRBbGxSZXRyaWVzKCZzcWxfc2NyaXB0W2ldLnN0YXRzLnJldHJp ZXMpLAorCQkJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5yZXRyaWVzLnNl cmlhbGl6YXRpb24sCisJCQkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLnJl dHJpZXMuZGVhZGxvY2tzKTsKKwkJCX0KIAkJCWVsc2UKKwkJCXsKIAkJCQlw cmludGYoInNjcmlwdCBzdGF0aXN0aWNzOlxuIik7CisJCQl9CiAKIAkJCWlm IChsYXRlbmN5X2xpbWl0KQogCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBza2lwcGVkOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUp XG4iLApAQCAtMzU4NSwyMCArNDEzMyw0NSBAQCBwcmludFJlc3VsdHMoVFN0 YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRv dGFsX3RpbWUsCiAJCQlpZiAobnVtX3NjcmlwdHMgPiAxKQogCQkJCXByaW50 U2ltcGxlU3RhdHMoIiAtIGxhdGVuY3kiLCAmc3FsX3NjcmlwdFtpXS5zdGF0 cy5sYXRlbmN5KTsKIAotCQkJLyogUmVwb3J0IHBlci1jb21tYW5kIGxhdGVu Y2llcyAqLwotCQkJaWYgKGlzX2xhdGVuY2llcykKKwkJCS8qCisJCQkgKiBS ZXBvcnQgcGVyLWNvbW1hbmQgc3RhdGlzdGljczogbGF0ZW5jaWVzLCByZXRy aWVzIGFmdGVyIGZhaWx1cmVzLAorCQkJICogZmFpbHVyZXMgd2l0aG91dCBy ZXRyeWluZy4KKwkJCSAqLworCQkJaWYgKHJlcG9ydF9wZXJfY29tbWFuZCkK IAkJCXsKIAkJCQlDb21tYW5kICAgKipjb21tYW5kczsKIAotCQkJCXByaW50 ZigiIC0gc3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHM6XG4i KTsKKwkJCQlwcmludGYoIiAtIHN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWls bGlzZWNvbmRzIik7CisJCQkJaWYgKGFsbF9mYWlsdXJlcyA+IDAgJiYgYWxs X3JldHJpZXMgPiAwKQorCQkJCQlwcmludGYoIiwgc2VyaWFsaXphdGlvbiBm YWlsdXJlcyBhbmQgcmV0cmllcywgZGVhZGxvY2sgZmFpbHVyZXMgYW5kIHJl dHJpZXMiKTsKKwkJCQllbHNlIGlmIChhbGxfZmFpbHVyZXMgPiAwIHx8IGFs bF9yZXRyaWVzID4gMCkKKwkJCQkJcHJpbnRmKCIsIHNlcmlhbGl6YXRpb24g YW5kIGRlYWRsb2NrICVzIiwKKwkJCQkJCSAgIChhbGxfZmFpbHVyZXMgPiAw ID8gImZhaWx1cmVzIiA6ICJyZXRyaWVzIikpOworCQkJCXByaW50ZigiOlxu Iik7CiAKIAkJCQlmb3IgKGNvbW1hbmRzID0gc3FsX3NjcmlwdFtpXS5jb21t YW5kczsKIAkJCQkJICpjb21tYW5kcyAhPSBOVUxMOwogCQkJCQkgY29tbWFu ZHMrKykKLQkJCQkJcHJpbnRmKCIgICAlMTEuM2YgICVzXG4iLAorCQkJCXsK KwkJCQkJcHJpbnRmKCIgICAlMTEuM2YiLAogCQkJCQkJICAgMTAwMC4wICog KCpjb21tYW5kcyktPnN0YXRzLnN1bSAvCi0JCQkJCQkgICAoKmNvbW1hbmRz KS0+c3RhdHMuY291bnQsCi0JCQkJCQkgICAoKmNvbW1hbmRzKS0+bGluZSk7 CisJCQkJCQkgICAoKmNvbW1hbmRzKS0+c3RhdHMuY291bnQpOworCQkJCQlp ZiAoYWxsX2ZhaWx1cmVzID4gMCAmJiBhbGxfcmV0cmllcyA+IDApCisJCQkJ CQlwcmludGYoIiAgJTI1IiBJTlQ2NF9NT0RJRklFUiAiZCAgJTI1IiBJTlQ2 NF9NT0RJRklFUiAiZCAgJTI1IiBJTlQ2NF9NT0RJRklFUiAiZCAgJTI1IiBJ TlQ2NF9NT0RJRklFUiAiZCIsCisJCQkJCQkJICAgKCpjb21tYW5kcyktPnNl cmlhbGl6YXRpb25fZmFpbHVyZXMsCisJCQkJCQkJICAgKCpjb21tYW5kcykt PnJldHJpZXMuc2VyaWFsaXphdGlvbiwKKwkJCQkJCQkgICAoKmNvbW1hbmRz KS0+ZGVhZGxvY2tfZmFpbHVyZXMsCisJCQkJCQkJICAgKCpjb21tYW5kcykt PnJldHJpZXMuZGVhZGxvY2tzKTsKKwkJCQkJZWxzZSBpZiAoYWxsX2ZhaWx1 cmVzID4gMCB8fCBhbGxfcmV0cmllcyA+IDApCisJCQkJCQlwcmludGYoIiAg JTI1IiBJTlQ2NF9NT0RJRklFUiAiZCAgJTI1IiBJTlQ2NF9NT0RJRklFUiAi ZCIsCisJCQkJCQkJICAgKGFsbF9mYWlsdXJlcyA+IDAgPworCQkJCQkJCQko KmNvbW1hbmRzKS0+c2VyaWFsaXphdGlvbl9mYWlsdXJlcyA6CisJCQkJCQkJ CSgqY29tbWFuZHMpLT5yZXRyaWVzLnNlcmlhbGl6YXRpb24pLAorCQkJCQkJ CSAgIChhbGxfZmFpbHVyZXMgPiAwID8KKwkJCQkJCQkJKCpjb21tYW5kcykt PmRlYWRsb2NrX2ZhaWx1cmVzIDoKKwkJCQkJCQkJKCpjb21tYW5kcyktPnJl dHJpZXMuZGVhZGxvY2tzKSk7CisJCQkJCXByaW50ZigiICAlc1xuIiwgKCpj b21tYW5kcyktPmxpbmUpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM2 MjcsNyArNDIwMCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl7InByb2dyZXNzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30s CiAJCXsicHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ00n fSwKIAkJeyJxdWlldCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncSd9LAotCQl7 InJlcG9ydC1sYXRlbmNpZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwK KwkJeyJyZXBvcnQtcGVyLWNvbW1hbmQiLCBub19hcmd1bWVudCwgTlVMTCwg J3InfSwKIAkJeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdS J30sCiAJCXsic2NhbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3Mn fSwKIAkJeyJzZWxlY3Qtb25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9 LApAQCAtMzY0NSw2ICs0MjE4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsiYWdncmVnYXRlLWludGVydmFsIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIDV9LAogCQl7InByb2dyZXNzLXRpbWVzdGFtcCIsIG5v X2FyZ3VtZW50LCBOVUxMLCA2fSwKIAkJeyJsb2ctcHJlZml4IiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDd9LAorCQl7Im1heC10cmllcyIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCA4fSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9 CiAJfTsKIApAQCAtMzcxMCw2ICs0Mjg0LDcgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAKIAlzdGF0ZSA9IChDU3RhdGUgKikgcGdfbWFsbG9j KHNpemVvZihDU3RhdGUpKTsKIAltZW1zZXQoc3RhdGUsIDAsIHNpemVvZihD U3RhdGUpKTsKKwlzdGF0ZS0+cmV0cnlfc3RhdGUuY29tbWFuZCA9IC0xOwog CiAJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImloOm52 cDpkcWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdf b3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewpAQCAtMzc4Nyw3ICs0 MzYyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQljYXNl ICdyJzoKIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7CiAJ CQkJcGVyX3NjcmlwdF9zdGF0cyA9IHRydWU7Ci0JCQkJaXNfbGF0ZW5jaWVz ID0gdHJ1ZTsKKwkJCQlyZXBvcnRfcGVyX2NvbW1hbmQgPSB0cnVlOwogCQkJ CWJyZWFrOwogCQkJY2FzZSAncyc6CiAJCQkJc2NhbGVfZ2l2ZW4gPSB0cnVl OwpAQCAtMzg4MSw3ICs0NDU2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCQkJCX0KIAogCQkJCQkqcCsrID0gJ1wwJzsKLQkJCQkJaWYg KCFwdXRWYXJpYWJsZSgmc3RhdGVbMF0sICJvcHRpb24iLCBvcHRhcmcsIHAp KQorCQkJCQlpZiAoIXB1dFZhcmlhYmxlKCZzdGF0ZVswXS52YXJpYWJsZXMs ICJvcHRpb24iLCBvcHRhcmcsIHApKQogCQkJCQkJZXhpdCgxKTsKIAkJCQl9 CiAJCQkJYnJlYWs7CkBAIC0zOTkxLDYgKzQ1NjYsMTYgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOwogCQkJCWxvZ2ZpbGVfcHJlZml4ID0gcGdfc3RyZHVwKG9w dGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlIDg6CisJCQkJYmVuY2htYXJr aW5nX29wdGlvbl9zZXQgPSB0cnVlOworCQkJCW1heF90cmllcyA9IGF0b2ko b3B0YXJnKTsKKwkJCQlpZiAobWF4X3RyaWVzIDw9IDApCisJCQkJeworCQkJ CQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgbnVtYmVyIG9mIG1heGltdW0g dHJpZXM6IFwiJXNcIlxuIiwKKwkJCQkJCQlvcHRhcmcpOworCQkJCQlleGl0 KDEpOworCQkJCX0KKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZnBy aW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLlxuIiksIHByb2duYW1lKTsKIAkJCQlleGl0KDEpOwpAQCAt NDEyMywxOSArNDcwOCwxOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCWludAkJCWo7CiAKIAkJCXN0YXRlW2ldLmlkID0gaTsKLQkJCWZv ciAoaiA9IDA7IGogPCBzdGF0ZVswXS5udmFyaWFibGVzOyBqKyspCisJCQlm b3IgKGogPSAwOyBqIDwgc3RhdGVbMF0udmFyaWFibGVzLm52YXJpYWJsZXM7 IGorKykKIAkJCXsKLQkJCQlWYXJpYWJsZSAgICp2YXIgPSAmc3RhdGVbMF0u dmFyaWFibGVzW2pdOworCQkJCVZhcmlhYmxlICAgKnZhciA9ICZzdGF0ZVsw XS52YXJpYWJsZXMuYXJyYXlbal07CiAKIAkJCQlpZiAodmFyLT5pc19udW1l cmljKQogCQkJCXsKLQkJCQkJaWYgKCFwdXRWYXJpYWJsZU51bWJlcigmc3Rh dGVbaV0sICJzdGFydHVwIiwKKwkJCQkJaWYgKCFwdXRWYXJpYWJsZU51bWJl cigmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCiAJCQkJCQkJCQkJ ICAgdmFyLT5uYW1lLCAmdmFyLT5udW1fdmFsdWUpKQogCQkJCQkJZXhpdCgx KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFwdXRWYXJp YWJsZSgmc3RhdGVbaV0sICJzdGFydHVwIiwKKwkJCQkJaWYgKCFwdXRWYXJp YWJsZSgmc3RhdGVbaV0udmFyaWFibGVzLCAic3RhcnR1cCIsCiAJCQkJCQkJ CQkgdmFyLT5uYW1lLCB2YXItPnZhbHVlKSkKIAkJCQkJCWV4aXQoMSk7CiAJ CQkJfQpAQCAtNDE0Myw2ICs0NzI4LDE4IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl9CiAJfQogCisJLyogc2V0IHJhbmRvbSBzZWVkICov CisJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1lKTsKKwlzcmFu ZG9tKCh1bnNpZ25lZCBpbnQpIElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0 YXJ0X3RpbWUpKTsKKworCS8qIHNldCByYW5kb20gc3RhdGVzIGZvciBjbGll bnRzICovCisJZm9yIChpID0gMDsgaSA8IG5jbGllbnRzOyBpKyspCisJewor CQlzdGF0ZVtpXS5yYW5kb21fc3RhdGVbMF0gPSByYW5kb20oKTsKKwkJc3Rh dGVbaV0ucmFuZG9tX3N0YXRlWzFdID0gcmFuZG9tKCk7CisJCXN0YXRlW2ld LnJhbmRvbV9zdGF0ZVsyXSA9IHJhbmRvbSgpOworCX0KKwogCWlmIChkZWJ1 ZykKIAl7CiAJCWlmIChkdXJhdGlvbiA8PSAwKQpAQCAtNDIwNCwxMSArNDgw MSwxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKiA6c2Nh bGUgdmFyaWFibGVzIG5vcm1hbGx5IGdldCAtcyBvciBkYXRhYmFzZSBzY2Fs ZSwgYnV0IGRvbid0IG92ZXJyaWRlCiAJICogYW4gZXhwbGljaXQgLUQgc3dp dGNoCiAJICovCi0JaWYgKGxvb2t1cFZhcmlhYmxlKCZzdGF0ZVswXSwgInNj YWxlIikgPT0gTlVMTCkKKwlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBd LnZhcmlhYmxlcywgInNjYWxlIikgPT0gTlVMTCkKIAl7CiAJCWZvciAoaSA9 IDA7IGkgPCBuY2xpZW50czsgaSsrKQogCQl7Ci0JCQlpZiAoIXB1dFZhcmlh YmxlSW50KCZzdGF0ZVtpXSwgInN0YXJ0dXAiLCAic2NhbGUiLCBzY2FsZSkp CisJCQlpZiAoIXB1dFZhcmlhYmxlSW50KCZzdGF0ZVtpXS52YXJpYWJsZXMs ICJzdGFydHVwIiwgInNjYWxlIiwgc2NhbGUpKQogCQkJCWV4aXQoMSk7CiAJ CX0KIAl9CkBAIC00MjE3LDExICs0ODE0LDExIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCSAqIERlZmluZSBhIDpjbGllbnRfaWQgdmFyaWFi bGUgdGhhdCBpcyB1bmlxdWUgcGVyIGNvbm5lY3Rpb24uIEJ1dCBkb24ndAog CSAqIG92ZXJyaWRlIGFuIGV4cGxpY2l0IC1EIHN3aXRjaC4KIAkgKi8KLQlp ZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLCAiY2xpZW50X2lkIikgPT0g TlVMTCkKKwlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLnZhcmlhYmxl cywgImNsaWVudF9pZCIpID09IE5VTEwpCiAJewogCQlmb3IgKGkgPSAwOyBp IDwgbmNsaWVudHM7IGkrKykKIAkJewotCQkJaWYgKCFwdXRWYXJpYWJsZUlu dCgmc3RhdGVbaV0sICJzdGFydHVwIiwgImNsaWVudF9pZCIsIGkpKQorCQkJ aWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0udmFyaWFibGVzLCAic3Rh cnR1cCIsICJjbGllbnRfaWQiLCBpKSkKIAkJCQlleGl0KDEpOwogCQl9CiAJ fQpAQCAtNDI0MywxMCArNDg0MCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCX0KIAlQUWZpbmlzaChjb24pOwogCi0JLyogc2V0IHJhbmRv bSBzZWVkICovCi0JSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1l KTsKLQlzcmFuZG9tKCh1bnNpZ25lZCBpbnQpIElOU1RSX1RJTUVfR0VUX01J Q1JPU0VDKHN0YXJ0X3RpbWUpKTsKLQogCS8qIHNldCB1cCB0aHJlYWQgZGF0 YSBzdHJ1Y3R1cmVzICovCiAJdGhyZWFkcyA9IChUU3RhdGUgKikgcGdfbWFs bG9jKHNpemVvZihUU3RhdGUpICogbnRocmVhZHMpOwogCW5jbGllbnRzX2Rl YWx0ID0gMDsKQEAgLTQyNTksOSArNDg1Miw2IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCQl0aHJlYWQtPnN0YXRlID0gJnN0YXRlW25jbGll bnRzX2RlYWx0XTsKIAkJdGhyZWFkLT5uc3RhdGUgPQogCQkJKG5jbGllbnRz IC0gbmNsaWVudHNfZGVhbHQgKyBudGhyZWFkcyAtIGkgLSAxKSAvIChudGhy ZWFkcyAtIGkpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVswXSA9IHJhbmRv bSgpOwotCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsxXSA9IHJhbmRvbSgpOwot CQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsyXSA9IHJhbmRvbSgpOwogCQl0aHJl YWQtPmxvZ2ZpbGUgPSBOVUxMOyAvKiBmaWxsZWQgaW4gbGF0ZXIgKi8KIAkJ dGhyZWFkLT5sYXRlbmN5X2xhdGUgPSAwOwogCQlpbml0U3RhdHMoJnRocmVh ZC0+c3RhdHMsIDApOwpAQCAtNDM0MCw2ICs0OTMwLDggQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCW1lcmdlU2ltcGxlU3RhdHMoJnN0YXRz LmxhZywgJnRocmVhZC0+c3RhdHMubGFnKTsKIAkJc3RhdHMuY250ICs9IHRo cmVhZC0+c3RhdHMuY250OwogCQlzdGF0cy5za2lwcGVkICs9IHRocmVhZC0+ c3RhdHMuc2tpcHBlZDsKKwkJc3RhdHMuZmFpbHVyZXMgKz0gdGhyZWFkLT5z dGF0cy5mYWlsdXJlczsKKwkJbWVyZ2VSZXRyaWVzKCZzdGF0cy5yZXRyaWVz LCAmdGhyZWFkLT5zdGF0cy5yZXRyaWVzKTsKIAkJbGF0ZW5jeV9sYXRlICs9 IHRocmVhZC0+bGF0ZW5jeV9sYXRlOwogCQlJTlNUUl9USU1FX0FERChjb25u X3RvdGFsX3RpbWUsIHRocmVhZC0+Y29ubl90aW1lKTsKIAl9CkBAIC00NjEz LDYgKzUyMDUsOCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQogCQkJCS8qIGdl bmVyYXRlIGFuZCBzaG93IHJlcG9ydCAqLwogCQkJCVN0YXRzRGF0YQljdXI7 CiAJCQkJaW50NjQJCXJ1biA9IG5vdyAtIGxhc3RfcmVwb3J0OworCQkJCWlu dDY0CQlmYWlsdXJlcywKKwkJCQkJCQlyZXRyaWVzOwogCQkJCWRvdWJsZQkJ dHBzLAogCQkJCQkJCXRvdGFsX3J1biwKIAkJCQkJCQlsYXRlbmN5LApAQCAt NDYzOSw2ICs1MjMzLDggQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQkJ bWVyZ2VTaW1wbGVTdGF0cygmY3VyLmxhZywgJnRocmVhZFtpXS5zdGF0cy5s YWcpOwogCQkJCQljdXIuY250ICs9IHRocmVhZFtpXS5zdGF0cy5jbnQ7CiAJ CQkJCWN1ci5za2lwcGVkICs9IHRocmVhZFtpXS5zdGF0cy5za2lwcGVkOwor CQkJCQljdXIuZmFpbHVyZXMgKz0gdGhyZWFkW2ldLnN0YXRzLmZhaWx1cmVz OworCQkJCQltZXJnZVJldHJpZXMoJmN1ci5yZXRyaWVzLCAmdGhyZWFkW2ld LnN0YXRzLnJldHJpZXMpOwogCQkJCX0KIAogCQkJCXRvdGFsX3J1biA9IChu b3cgLSB0aHJlYWRfc3RhcnQpIC8gMTAwMDAwMC4wOwpAQCAtNDY1MCw2ICs1 MjQ2LDkgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJCQlzdGRldiA9IDAu MDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRl bmN5KTsKIAkJCQlsYWcgPSAwLjAwMSAqIChjdXIubGFnLnN1bSAtIGxhc3Qu bGFnLnN1bSkgLwogCQkJCQkoY3VyLmNudCAtIGxhc3QuY250KTsKKwkJCQlm YWlsdXJlcyA9IGN1ci5mYWlsdXJlcyAtIGxhc3QuZmFpbHVyZXM7CisJCQkJ cmV0cmllcyA9IGdldEFsbFJldHJpZXMoJmN1ci5yZXRyaWVzKSAtCisJCQkJ CWdldEFsbFJldHJpZXMoJmxhc3QucmV0cmllcyk7CiAKIAkJCQlpZiAocHJv Z3Jlc3NfdGltZXN0YW1wKQogCQkJCXsKQEAgLTQ2NzIsNiArNTI3MSw5IEBA IHRocmVhZFJ1bih2b2lkICphcmcpCiAJCQkJCQkicHJvZ3Jlc3M6ICVzLCAl LjFmIHRwcywgbGF0ICUuM2YgbXMgc3RkZGV2ICUuM2YiLAogCQkJCQkJdGJ1 ZiwgdHBzLCBsYXRlbmN5LCBzdGRldik7CiAKKwkJCQlpZiAoZmFpbHVyZXMg PiAwKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQg IiBmYWlsZWQiICwgZmFpbHVyZXMpOworCiAJCQkJaWYgKHRocm90dGxlX2Rl bGF5KQogCQkJCXsKIAkJCQkJZnByaW50ZihzdGRlcnIsICIsIGxhZyAlLjNm IG1zIiwgbGFnKTsKQEAgLTQ2NzksNiArNTI4MSwxMCBAQCB0aHJlYWRSdW4o dm9pZCAqYXJnKQogCQkJCQkJZnByaW50ZihzdGRlcnIsICIsICIgSU5UNjRf Rk9STUFUICIgc2tpcHBlZCIsCiAJCQkJCQkJCWN1ci5za2lwcGVkIC0gbGFz dC5za2lwcGVkKTsKIAkJCQl9CisKKwkJCQlpZiAocmV0cmllcyA+IDApCisJ CQkJCWZwcmludGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZPUk1BVCAiIHJldHJp ZXMiLCByZXRyaWVzKTsKKwogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsK IAogCQkJCWxhc3QgPSBjdXI7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVu Y2gvdC8wMDJfc2VyaWFsaXphdGlvbl9hbmRfZGVhZGxvY2tfZmFpbHVyZXMu cGwgYi9zcmMvYmluL3BnYmVuY2gvdC8wMDJfc2VyaWFsaXphdGlvbl9hbmRf ZGVhZGxvY2tfZmFpbHVyZXMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDg0OWFlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i aW4vcGdiZW5jaC90LzAwMl9zZXJpYWxpemF0aW9uX2FuZF9kZWFkbG9ja19m YWlsdXJlcy5wbApAQCAtMCwwICsxLDQ1OSBAQAordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsKK3VzZSBQb3N0Z3Jlc05vZGU7 Cit1c2UgVGVzdExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDU3Owor Cit1c2UgY29uc3RhbnQKK3sKKwlSRUFEX0NPTU1JVFRFRCAgPT4gMCwKKwlS RVBFQVRBQkxFX1JFQUQgPT4gMSwKKwlTRVJJQUxJWkFCTEUgICAgPT4gMiwK K307CisKK215IEBpc29sYXRpb25fbGV2ZWxfc3FsID0gKCdyZWFkIGNvbW1p dHRlZCcsICdyZXBlYXRhYmxlIHJlYWQnLCAnc2VyaWFsaXphYmxlJyk7Citt eSBAaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gKAorCSdyZWFkXFwgY29tbWl0 dGVkJywKKwkncmVwZWF0YWJsZVxcIHJlYWQnLAorCSdzZXJpYWxpemFibGUn KTsKKworIyBUZXN0IGNvbmN1cnJlbnQgdXBkYXRlIGluIHRhYmxlIHJvdyB3 aXRoIGRpZmZlcmVudCBkZWZhdWx0IHRyYW5zYWN0aW9uCisjIGlzb2xhdGlv biBsZXZlbHMuCitteSAkbm9kZSA9IGdldF9uZXdfbm9kZSgnbWFpbicpOwor JG5vZGUtPmluaXQ7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisgICAgJ0NSRUFURSBVTkxPR0dFRCBUQUJMRSB4eSAo eCBpbnRlZ2VyLCB5IGludGVnZXIpOyAnCisgIC4gJ0lOU0VSVCBJTlRPIHh5 IFZBTFVFUyAoMSwgMiksICgyLCAzKTsnKTsKKworbXkgJHNjcmlwdF9zZXJp YWxpemF0aW9uID0gJG5vZGUtPmJhc2VkaXIgLiAnL3BnYmVuY2hfc2NyaXB0 X3NlcmlhbGl6YXRpb24nOworYXBwZW5kX3RvX2ZpbGUoJHNjcmlwdF9zZXJp YWxpemF0aW9uLAorCQkiQkVHSU47XG4iCisJICAuICJcXHNldCBkZWx0YSBy YW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJVUERBVEUgeHkgU0VUIHkg PSB5ICsgOmRlbHRhIFdIRVJFIHggPSAxO1xuIgorCSAgLiAiRU5EOyIpOwor CitteSAkc2NyaXB0X2RlYWRsb2NrczEgPSAkbm9kZS0+YmFzZWRpciAuICcv cGdiZW5jaF9zY3JpcHRfZGVhZGxvY2tzMSc7CithcHBlbmRfdG9fZmlsZSgk c2NyaXB0X2RlYWRsb2NrczEsCisJCSJCRUdJTjtcbiIKKwkgIC4gIlxcc2V0 IGRlbHRhMSByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJcXHNldCBk ZWx0YTIgcmFuZG9tKC01MDAwLCA1MDAwKVxuIgorCSAgLiAiVVBEQVRFIHh5 IFNFVCB5ID0geSArIDpkZWx0YTEgV0hFUkUgeCA9IDE7XG4iCisJICAuICJT RUxFQ1QgcGdfc2xlZXAoMjApO1xuIgorCSAgLiAiVVBEQVRFIHh5IFNFVCB5 ID0geSArIDpkZWx0YTIgV0hFUkUgeCA9IDI7XG4iCisJICAuICJFTkQ7Iik7 CisKK215ICRzY3JpcHRfZGVhZGxvY2tzMiA9ICRub2RlLT5iYXNlZGlyIC4g Jy9wZ2JlbmNoX3NjcmlwdF9kZWFkbG9ja3MyJzsKK2FwcGVuZF90b19maWxl KCRzY3JpcHRfZGVhZGxvY2tzMiwKKwkJIkJFR0lOO1xuIgorCSAgLiAiXFxz ZXQgZGVsdGExIHJhbmRvbSgtNTAwMCwgNTAwMClcbiIKKwkgIC4gIlxcc2V0 IGRlbHRhMiByYW5kb20oLTUwMDAsIDUwMDApXG4iCisJICAuICJVUERBVEUg eHkgU0VUIHkgPSB5ICsgOmRlbHRhMiBXSEVSRSB4ID0gMjtcbiIKKwkgIC4g IlVQREFURSB4eSBTRVQgeSA9IHkgKyA6ZGVsdGExIFdIRVJFIHggPSAxO1xu IgorCSAgLiAiRU5EOyIpOworCitzdWIgdGVzdF9wZ2JlbmNoX3NlcmlhbGl6 YXRpb25fZmFpbHVyZXMKK3sKKwlteSAoJGlzb2xhdGlvbl9sZXZlbCkgPSBA XzsKKworCW15ICRpc29sYXRpb25fbGV2ZWxfc3FsID0gJGlzb2xhdGlvbl9s ZXZlbF9zcWxbJGlzb2xhdGlvbl9sZXZlbF07CisJbXkgJGlzb2xhdGlvbl9s ZXZlbF9zaGVsbCA9ICRpc29sYXRpb25fbGV2ZWxfc2hlbGxbJGlzb2xhdGlv bl9sZXZlbF07CisKKwlsb2NhbCAkRU5We1BHUE9SVH0gPSAkbm9kZS0+cG9y dDsKKwlsb2NhbCAkRU5We1BHT1BUSU9OU30gPQorCQkiLWMgZGVmYXVsdF90 cmFuc2FjdGlvbl9pc29sYXRpb249IiAuICRpc29sYXRpb25fbGV2ZWxfc2hl bGw7CisJcHJpbnQgIiMgUEdPUFRJT05TOiAiIC4gJEVOVntQR09QVElPTlN9 IC4gIlxuIjsKKworCW15ICgkaF9wc3FsLCAkaW5fcHNxbCwgJG91dF9wc3Fs KTsKKwlteSAoJGhfcGdiZW5jaCwgJGluX3BnYmVuY2gsICRvdXRfcGdiZW5j aCwgJGVycl9wZ2JlbmNoKTsKKworCSMgT3BlbiB0aGUgcHNxbCBzZXNzaW9u IGFuZCBydW4gdGhlIHBhcmFsbGVsIHRyYW5zYWN0aW9uOgorCXByaW50ICIj IFN0YXJ0aW5nIHBzcWxcbiI7CisJJGhfcHNxbCA9IElQQzo6UnVuOjpzdGFy dCBbICdwc3FsJyBdLCBcJGluX3BzcWwsIFwkb3V0X3BzcWw7CisKKwkkaW5f cHNxbCA9ICJiZWdpbjtcbiI7CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3Fs OiAiIC4gam9pbigiICIsICRpbl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkg dW50aWwgJG91dF9wc3FsID1+IC9CRUdJTi87CisKKwkkaW5fcHNxbCA9ICJ1 cGRhdGUgeHkgc2V0IHkgPSB5ICsgMSB3aGVyZSB4ID0gMTtcbiI7CisJcHJp bnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRpbl9wc3Fs KTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+IC9VUERB VEUgMS87CisKKwkjIFN0YXJ0IHBnYmVuY2g6CisJbXkgQGNvbW1hbmQgPSAo CisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS1kZWJ1ZyAtLWZpbGUpLAor CQkkc2NyaXB0X3NlcmlhbGl6YXRpb24pOworCXByaW50ICIjIFJ1bm5pbmc6 ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQpIC4gIlxuIjsKKwkkaF9wZ2JlbmNo ID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZCwgXCRpbl9wZ2JlbmNoLCBc JG91dF9wZ2JlbmNoLAorCSAgXCRlcnJfcGdiZW5jaDsKKworCSMgTGV0IHBn YmVuY2ggcnVuIHRoZSB1cGRhdGUgY29tbWFuZCBpbiB0aGUgdHJhbnNhY3Rp b246CisJc2xlZXAgMTA7CisKKwkjIEluIHBzcWwsIGNvbW1pdCB0aGUgdHJh bnNhY3Rpb24gYW5kIGVuZCB0aGUgc2Vzc2lvbjoKKwkkaW5fcHNxbCA9ICJl bmQ7XG4iOworCXByaW50ICIjIFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4o IiAiLCAkaW5fcHNxbCk7CisJJGhfcHNxbC0+cHVtcCgpIHVudGlsICRvdXRf cHNxbCA9fiAvQ09NTUlULzsKKworCSRpbl9wc3FsID0gIlxccVxuIjsKKwlw cmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3Bz cWwpOworCSRoX3BzcWwtPnB1bXAoKSB3aGlsZSBsZW5ndGggJGluX3BzcWw7 CisKKwkkaF9wc3FsLT5maW5pc2goKTsKKworCSMgR2V0IHBnYmVuY2ggcmVz dWx0cworCSRoX3BnYmVuY2gtPnB1bXAoKSB1bnRpbCBsZW5ndGggJG91dF9w Z2JlbmNoOworCSRoX3BnYmVuY2gtPmZpbmlzaCgpOworCisJIyBPbiBXaW5k b3dzLCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3MgaXMgcmV0dXJu ZWQgZGlyZWN0bHkgYXMgdGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3 aGlsZSBvbiBVbml4LCBpdCdzIHJldHVybmVkIGluIHRoZSBoaWdoIGJpdHMK KwkjIG9mIHRoZSBleGl0IGNvZGUgKHNlZSBXRVhJVFNUQVRVUyBtYWNybyBp biB0aGUgc3RhbmRhcmQgPHN5cy93YWl0Lmg+CisJIyBoZWFkZXIgZmlsZSku IElQQzo6UnVuJ3MgcmVzdWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGV4 aXQgY29kZSA+PiA4LAorCSMgYXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlv biwgd2hpY2ggd2lsbCBhbHdheXMgcmV0dXJuIDAgb24gV2luZG93cyBhcwor CSMgbG9uZyBhcyB0aGUgcHJvY2VzcyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkg YW4gZXhjZXB0aW9uLiBUbyB3b3JrIGFyb3VuZAorCSMgdGhhdCwgdXNlICRo LT5mdWxsX3Jlc3VsdCBvbiBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJlc3Vs dCA9CisJICAgICgkQ29uZmlne29zbmFtZX0gZXEgIk1TV2luMzIiKQorCSAg PyAoJGhfcGdiZW5jaC0+ZnVsbF9yZXN1bHRzKVswXQorCSAgOiAkaF9wZ2Jl bmNoLT5yZXN1bHQoMCk7CisKKwkjIENoZWNrIHBnYmVuY2ggcmVzdWx0cwor CW9rKCEkcmVzdWx0LCAiQGNvbW1hbmQgZXhpdCBjb2RlIDAiKTsKKworCWxp a2UoJG91dF9wZ2JlbmNoLAorCQlxcntwcm9jZXNzZWQ6IDEwLzEwfSwKKwkJ ImNvbmN1cnJlbnQgdXBkYXRlOiAkaXNvbGF0aW9uX2xldmVsX3NxbDogY2hl Y2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbXkgJHJlZ2V4ID0K KwkJKCRpc29sYXRpb25fbGV2ZWwgPT0gUkVBRF9DT01NSVRURUQpCisJICA/ IHFye14oKD8hbnVtYmVyIG9mIGZhaWx1cmVzKSgufFxuKSkqJH0KKwkgIDog cXJ7bnVtYmVyIG9mIGZhaWx1cmVzOiBbMS05XVxkKiBcKFsxLTldXGQqXC5c ZCogJVwpfTsKKworCWxpa2UoJG91dF9wZ2JlbmNoLAorCQkkcmVnZXgsCisJ CSJjb25jdXJyZW50IHVwZGF0ZTogJGlzb2xhdGlvbl9sZXZlbF9zcWw6IGNo ZWNrIGZhaWx1cmVzIik7CisKKwkkcmVnZXggPQorCQkoJGlzb2xhdGlvbl9s ZXZlbCA9PSBSRUFEX0NPTU1JVFRFRCkKKwkgID8gcXJ7XigoPyFjbGllbnQg MCBnb3QgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUgXCh0cnkgMS8xXCkpKC58 XG4pKSokfQorCSAgOiBxcntjbGllbnQgMCBnb3QgYSBzZXJpYWxpemF0aW9u IGZhaWx1cmUgXCh0cnkgMS8xXCl9OworCisJbGlrZSgkZXJyX3BnYmVuY2gs CisJCSRyZWdleCwKKwkJImNvbmN1cnJlbnQgdXBkYXRlOiAkaXNvbGF0aW9u X2xldmVsX3NxbDogY2hlY2sgc2VyaWFsaXphdGlvbiBmYWlsdXJlIik7Cit9 CisKK3N1YiB0ZXN0X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9mYWlsdXJlc19y ZXRyeQoreworCW15ICgkaXNvbGF0aW9uX2xldmVsKSA9IEBfOworCisJbXkg JGlzb2xhdGlvbl9sZXZlbF9zcWwgPSAkaXNvbGF0aW9uX2xldmVsX3NxbFsk aXNvbGF0aW9uX2xldmVsXTsKKwlteSAkaXNvbGF0aW9uX2xldmVsX3NoZWxs ID0gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVsXTsK KworCWxvY2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxvY2Fs ICRFTlZ7UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9u X2lzb2xhdGlvbj0iIC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKwlwcmlu dCAiIyBQR09QVElPTlM6ICIgLiAkRU5We1BHT1BUSU9OU30gLiAiXG4iOwor CisJbXkgKCRoX3BzcWwsICRpbl9wc3FsLCAkb3V0X3BzcWwpOworCW15ICgk aF9wZ2JlbmNoLCAkaW5fcGdiZW5jaCwgJG91dF9wZ2JlbmNoLCAkc3RkZXJy KTsKKworCSMgT3BlbiB0aGUgcHNxbCBzZXNzaW9uIGFuZCBydW4gdGhlIHBh cmFsbGVsIHRyYW5zYWN0aW9uOgorCXByaW50ICIjIFN0YXJ0aW5nIHBzcWxc biI7CisJJGhfcHNxbCA9IElQQzo6UnVuOjpzdGFydCBbICdwc3FsJyBdLCBc JGluX3BzcWwsIFwkb3V0X3BzcWw7CisKKwkkaW5fcHNxbCA9ImJlZ2luO1xu IjsKKwlwcmludCAiIyBSdW5uaW5nIGluIHBzcWw6ICIgLiBqb2luKCIgIiwg JGluX3BzcWwpOworCSRoX3BzcWwtPnB1bXAoKSB1bnRpbCAkb3V0X3BzcWwg PX4gL0JFR0lOLzsKKworCSRpbl9wc3FsID0gInVwZGF0ZSB4eSBzZXQgeSA9 IHkgKyAxIHdoZXJlIHggPSAxO1xuIjsKKwlwcmludCAiIyBSdW5uaW5nIGlu IHBzcWw6ICIgLiBqb2luKCIgIiwgJGluX3BzcWwpOworCSRoX3BzcWwtPnB1 bXAoKSB1bnRpbCAkb3V0X3BzcWwgPX4gL1VQREFURSAxLzsKKworCSMgU3Rh cnQgcGdiZW5jaDoKKwlteSBAY29tbWFuZCA9ICgKKwkJcXcocGdiZW5jaCAt LW5vLXZhY3V1bSAtLWRlYnVnIC0tbWF4LXRyaWVzIDIgLS1maWxlKSwKKwkJ JHNjcmlwdF9zZXJpYWxpemF0aW9uKTsKKwlwcmludCAiIyBSdW5uaW5nOiAi IC4gam9pbigiICIsIEBjb21tYW5kKSAuICJcbiI7CisJJGhfcGdiZW5jaCA9 IElQQzo6UnVuOjpzdGFydCBcQGNvbW1hbmQsIFwkaW5fcGdiZW5jaCwgXCRv dXRfcGdiZW5jaCwKKwkgIFwkc3RkZXJyOworCisJIyBMZXQgcGdiZW5jaCBy dW4gdGhlIHVwZGF0ZSBjb21tYW5kIGluIHRoZSB0cmFuc2FjdGlvbjoKKwlz bGVlcCAxMDsKKworCSMgSW4gcHNxbCwgY29tbWl0IHRoZSB0cmFuc2FjdGlv biBhbmQgZW5kIHRoZSBzZXNzaW9uOgorCSRpbl9wc3FsID0gImVuZDtcbiI7 CisJcHJpbnQgIiMgUnVubmluZyBpbiBwc3FsOiAiIC4gam9pbigiICIsICRp bl9wc3FsKTsKKwkkaF9wc3FsLT5wdW1wKCkgdW50aWwgJG91dF9wc3FsID1+ IC9DT01NSVQvOworCisJJGluX3BzcWwgPSAiXFxxXG4iOworCXByaW50ICIj IFJ1bm5pbmcgaW4gcHNxbDogIiAuIGpvaW4oIiAiLCAkaW5fcHNxbCk7CisJ JGhfcHNxbC0+cHVtcCgpIHdoaWxlIGxlbmd0aCAkaW5fcHNxbDsKKworCSRo X3BzcWwtPmZpbmlzaCgpOworCisJIyBHZXQgcGdiZW5jaCByZXN1bHRzCisJ JGhfcGdiZW5jaC0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0X3BnYmVuY2g7 CisJJGhfcGdiZW5jaC0+ZmluaXNoKCk7CisKKwkjIE9uIFdpbmRvd3MsIHRo ZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJvY2VzcyBpcyByZXR1cm5lZCBkaXJl Y3RseSBhcyB0aGUKKwkjIHByb2Nlc3MncyBleGl0IGNvZGUsIHdoaWxlIG9u IFVuaXgsIGl0J3MgcmV0dXJuZWQgaW4gdGhlIGhpZ2ggYml0cworCSMgb2Yg dGhlIGV4aXQgY29kZSAoc2VlIFdFWElUU1RBVFVTIG1hY3JvIGluIHRoZSBz dGFuZGFyZCA8c3lzL3dhaXQuaD4KKwkjIGhlYWRlciBmaWxlKS4gSVBDOjpS dW4ncyByZXN1bHQgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgZXhpdCBjb2Rl ID4+IDgsCisJIyBhc3N1bWluZyB0aGUgVW5peCBjb252ZW50aW9uLCB3aGlj aCB3aWxsIGFsd2F5cyByZXR1cm4gMCBvbiBXaW5kb3dzIGFzCisJIyBsb25n IGFzIHRoZSBwcm9jZXNzIHdhcyBub3QgdGVybWluYXRlZCBieSBhbiBleGNl cHRpb24uIFRvIHdvcmsgYXJvdW5kCisJIyB0aGF0LCB1c2UgJGgtPmZ1bGxf cmVzdWx0IG9uIFdpbmRvd3MgaW5zdGVhZC4KKwlteSAkcmVzdWx0ID0KKwkg ICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJICA/ICgkaF9w Z2JlbmNoLT5mdWxsX3Jlc3VsdHMpWzBdCisJICA6ICRoX3BnYmVuY2gtPnJl c3VsdCgwKTsKKworCSMgQ2hlY2sgcGdiZW5jaCByZXN1bHRzCisJb2soISRy ZXN1bHQsICJAY29tbWFuZCBleGl0IGNvZGUgMCIpOworCisJbGlrZSgkb3V0 X3BnYmVuY2gsCisJCXFye3Byb2Nlc3NlZDogMTAvMTB9LAorCQkiY29uY3Vy cmVudCB1cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9u X2xldmVsX3NxbAorCSAgLiAiOiBjaGVjayBwcm9jZXNzZWQgdHJhbnNhY3Rp b25zIik7CisKKwlsaWtlKCRvdXRfcGdiZW5jaCwKKwkJcXJ7XigoPyFudW1i ZXIgb2YgZmFpbHVyZXMpKC58XG4pKSokfSwKKwkJImNvbmN1cnJlbnQgdXBk YXRlIHdpdGggcmV0cnlpbmc6ICIKKwkgIC4gJGlzb2xhdGlvbl9sZXZlbF9z cWwKKwkgIC4gIjogY2hlY2sgZmFpbHVyZXMiKTsKKworCW15ICRwYXR0ZXJu ID0KKwkJImNsaWVudCAwIHNlbmRpbmcgVVBEQVRFIHh5IFNFVCB5ID0geSBc XCsgKC0/XFxkKykgV0hFUkUgeCA9IDE7XG4iCisJICAuICIoY2xpZW50IDAg cmVjZWl2aW5nXG4pKyIKKwkgIC4gImNsaWVudCAwIGdvdCBhIHNlcmlhbGl6 YXRpb24gZmFpbHVyZSBcXCh0cnkgMS8yXFwpXG4iCisJICAuICJjbGllbnQg MCBzZW5kaW5nIEVORDtcbiIKKwkgIC4gIlxcZzIrIgorCSAgLiAiY2xpZW50 IDAgcmVwZWF0cyB0aGUgZmFpbGVkIHRyYW5zYWN0aW9uIFxcKHRyeSAyLzJc XClcbiIKKwkgIC4gImNsaWVudCAwIHNlbmRpbmcgQkVHSU47XG4iCisJICAu ICJcXGcyKyIKKwkgIC4gImNsaWVudCAwIGV4ZWN1dGluZyBcXFxcc2V0IGRl bHRhXG4iCisJICAuICJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4eSBTRVQg eSA9IHkgXFwrIFxcZzEgV0hFUkUgeCA9IDE7IjsKKworCWxpa2UoJHN0ZGVy ciwKKwkJcXJ7JHBhdHRlcm59LAorCQkiY29uY3VycmVudCB1cGRhdGUgd2l0 aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVsX3NxbAorCSAg LiAiOiBjaGVjayB0aGUgcmV0cmllZCB0cmFuc2FjdGlvbiIpOworfQorCitz dWIgdGVzdF9wZ2JlbmNoX2RlYWRsb2NrX2ZhaWx1cmVzCit7CisJbXkgKCRp c29sYXRpb25fbGV2ZWwpID0gQF87CisKKwlteSAkaXNvbGF0aW9uX2xldmVs X3NxbCA9ICRpc29sYXRpb25fbGV2ZWxfc3FsWyRpc29sYXRpb25fbGV2ZWxd OworCW15ICRpc29sYXRpb25fbGV2ZWxfc2hlbGwgPSAkaXNvbGF0aW9uX2xl dmVsX3NoZWxsWyRpc29sYXRpb25fbGV2ZWxdOworCisJbG9jYWwgJEVOVntQ R1BPUlR9ID0gJG5vZGUtPnBvcnQ7CisJbG9jYWwgJEVOVntQR09QVElPTlN9 ID0KKwkJIi1jIGRlZmF1bHRfdHJhbnNhY3Rpb25faXNvbGF0aW9uPSIgLiAk aXNvbGF0aW9uX2xldmVsX3NoZWxsOworCXByaW50ICIjIFBHT1BUSU9OUzog IiAuICRFTlZ7UEdPUFRJT05TfSAuICJcbiI7CisKKwlteSAoJGgxLCAkaW4x LCAkb3V0MSwgJGVycjEpOworCW15ICgkaDIsICRpbjIsICRvdXQyLCAkZXJy Mik7CisKKwkjIFJ1biBmaXJzdCBwZ2JlbmNoCisJbXkgQGNvbW1hbmQxID0g KAorCQlxdyhwZ2JlbmNoIC0tbm8tdmFjdXVtIC0tZGVidWcgLS10cmFuc2Fj dGlvbnMgMSAtLWZpbGUpLAorCQkkc2NyaXB0X2RlYWRsb2NrczEpOworCXBy aW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQxKSAuICJc biI7CisJJGgxID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDEsIFwkaW4x LCBcJG91dDEsIFwkZXJyMTsKKworCSMgTGV0IHBnYmVuY2ggcnVuIGZpcnN0 IHVwZGF0ZSBjb21tYW5kIGluIHRoZSB0cmFuc2FjdGlvbjoKKwlzbGVlcCAx MDsKKworCSMgUnVuIHNlY29uZCBwZ2JlbmNoCisJbXkgQGNvbW1hbmQyID0g KAorCQlxdyhwZ2JlbmNoIC0tbm8tdmFjdXVtIC0tZGVidWcgLS10cmFuc2Fj dGlvbnMgMSAtLWZpbGUpLAorCQkkc2NyaXB0X2RlYWRsb2NrczIpOworCXBy aW50ICIjIFJ1bm5pbmc6ICIgLiBqb2luKCIgIiwgQGNvbW1hbmQyKSAuICJc biI7CisJJGgyID0gSVBDOjpSdW46OnN0YXJ0IFxAY29tbWFuZDIsIFwkaW4y LCBcJG91dDIsIFwkZXJyMjsKKworCSMgR2V0IGFsbCBwZ2JlbmNoIHJlc3Vs dHMKKwkkaDEtPnB1bXAoKSB1bnRpbCBsZW5ndGggJG91dDE7CisJJGgxLT5m aW5pc2goKTsKKworCSRoMi0+cHVtcCgpIHVudGlsIGxlbmd0aCAkb3V0MjsK KwkkaDItPmZpbmlzaCgpOworCisJIyBPbiBXaW5kb3dzLCB0aGUgZXhpdCBz dGF0dXMgb2YgdGhlIHByb2Nlc3MgaXMgcmV0dXJuZWQgZGlyZWN0bHkgYXMg dGhlCisJIyBwcm9jZXNzJ3MgZXhpdCBjb2RlLCB3aGlsZSBvbiBVbml4LCBp dCdzIHJldHVybmVkIGluIHRoZSBoaWdoIGJpdHMKKwkjIG9mIHRoZSBleGl0 IGNvZGUgKHNlZSBXRVhJVFNUQVRVUyBtYWNybyBpbiB0aGUgc3RhbmRhcmQg PHN5cy93YWl0Lmg+CisJIyBoZWFkZXIgZmlsZSkuIElQQzo6UnVuJ3MgcmVz dWx0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGV4aXQgY29kZSA+PiA4LAor CSMgYXNzdW1pbmcgdGhlIFVuaXggY29udmVudGlvbiwgd2hpY2ggd2lsbCBh bHdheXMgcmV0dXJuIDAgb24gV2luZG93cyBhcworCSMgbG9uZyBhcyB0aGUg cHJvY2VzcyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLiBU byB3b3JrIGFyb3VuZAorCSMgdGhhdCwgdXNlICRoLT5mdWxsX3Jlc3VsdCBv biBXaW5kb3dzIGluc3RlYWQuCisJbXkgJHJlc3VsdDEgPQorCSAgICAoJENv bmZpZ3tvc25hbWV9IGVxICJNU1dpbjMyIikKKwkgID8gKCRoMS0+ZnVsbF9y ZXN1bHRzKVswXQorCSAgOiAkaDEtPnJlc3VsdCgwKTsKKworCW15ICRyZXN1 bHQyID0KKwkgICAgKCRDb25maWd7b3NuYW1lfSBlcSAiTVNXaW4zMiIpCisJ ICA/ICgkaDItPmZ1bGxfcmVzdWx0cylbMF0KKwkgIDogJGgyLT5yZXN1bHQo MCk7CisKKwkjIENoZWNrIGFsbCBwZ2JlbmNoIHJlc3VsdHMKKwlvayghJHJl c3VsdDEsICJAY29tbWFuZDEgZXhpdCBjb2RlIDAiKTsKKwlvayghJHJlc3Vs dDIsICJAY29tbWFuZDIgZXhpdCBjb2RlIDAiKTsKKworCWxpa2UoJG91dDEs CisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNvbmN1cnJlbnQgZGVhZGxv Y2sgdXBkYXRlOiAiCisJICAuICRpc29sYXRpb25fbGV2ZWxfc3FsCisJICAu ICI6IHBnYmVuY2ggMTogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIp OworCWxpa2UoJG91dDIsCisJCXFye3Byb2Nlc3NlZDogMS8xfSwKKwkJImNv bmN1cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiAiCisJICAuICRpc29sYXRpb25f bGV2ZWxfc3FsCisJICAuICI6IHBnYmVuY2ggMjogY2hlY2sgcHJvY2Vzc2Vk IHRyYW5zYWN0aW9ucyIpOworCisJIyBGaXJzdCBvciBzZWNvbmQgcGdiZW5j aCBzaG91bGQgZ2V0IGEgZGVhZGxvY2sgZXJyb3IKKwlsaWtlKCRvdXQxIC4g JG91dDIsCisJCXFye251bWJlciBvZiBmYWlsdXJlczogMSBcKDEwMFwuMDAw ICVcKX0sCisJCSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZTogIgorCSAg LiAkaXNvbGF0aW9uX2xldmVsX3NxbAorCSAgLiAiOiBjaGVjayBmYWlsdXJl cyIpOworCisJbGlrZSgkZXJyMSAuICRlcnIyLAorCQlxcntjbGllbnQgMCBn b3QgYSBkZWFkbG9jayBmYWlsdXJlIFwodHJ5IDEvMVwpfSwKKwkJImNvbmN1 cnJlbnQgZGVhZGxvY2sgdXBkYXRlOiAiCisJICAuICRpc29sYXRpb25fbGV2 ZWxfc3FsCisJICAuICI6IGNoZWNrIGRlYWRsb2NrIGZhaWx1cmUiKTsKK30K Kworc3ViIHRlc3RfcGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlc19yZXRyeQor eworCW15ICgkaXNvbGF0aW9uX2xldmVsKSA9IEBfOworCisJbXkgJGlzb2xh dGlvbl9sZXZlbF9zcWwgPSAkaXNvbGF0aW9uX2xldmVsX3NxbFskaXNvbGF0 aW9uX2xldmVsXTsKKwlteSAkaXNvbGF0aW9uX2xldmVsX3NoZWxsID0gJGlz b2xhdGlvbl9sZXZlbF9zaGVsbFskaXNvbGF0aW9uX2xldmVsXTsKKworCWxv Y2FsICRFTlZ7UEdQT1JUfSA9ICRub2RlLT5wb3J0OworCWxvY2FsICRFTlZ7 UEdPUFRJT05TfSA9CisJCSItYyBkZWZhdWx0X3RyYW5zYWN0aW9uX2lzb2xh dGlvbj0iIC4gJGlzb2xhdGlvbl9sZXZlbF9zaGVsbDsKKworCW15ICgkaDEs ICRpbjEsICRvdXQxLCAkZXJyMSk7CisJbXkgKCRoMiwgJGluMiwgJG91dDIs ICRlcnIyKTsKKworCSMgUnVuIGZpcnN0IHBnYmVuY2gKKwlteSBAY29tbWFu ZDEgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1dW0gLS1kZWJ1ZyAtLXRy YW5zYWN0aW9ucyAxICAtLW1heC10cmllcyAyIC0tZmlsZSksCisJCSRzY3Jp cHRfZGVhZGxvY2tzMSk7CisJcHJpbnQgIiMgUnVubmluZzogIiAuIGpvaW4o IiAiLCBAY29tbWFuZDEpIC4gIlxuIjsKKwkkaDEgPSBJUEM6OlJ1bjo6c3Rh cnQgXEBjb21tYW5kMSwgXCRpbjEsIFwkb3V0MSwgXCRlcnIxOworCisJIyBM ZXQgcGdiZW5jaCBydW4gZmlyc3QgdXBkYXRlIGNvbW1hbmQgaW4gdGhlIHRy YW5zYWN0aW9uOgorCXNsZWVwIDEwOworCisJIyBSdW4gc2Vjb25kIHBnYmVu Y2gKKwlteSBAY29tbWFuZDIgPSAoCisJCXF3KHBnYmVuY2ggLS1uby12YWN1 dW0gLS1kZWJ1ZyAtLXRyYW5zYWN0aW9ucyAxICAtLW1heC10cmllcyAyIC0t ZmlsZSksCisJCSRzY3JpcHRfZGVhZGxvY2tzMik7CisJcHJpbnQgIiMgUnVu 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 YW5kMiBleGl0IGNvZGUgMCIpOworCisJbGlrZSgkb3V0MSwKKwkJcXJ7cHJv Y2Vzc2VkOiAxLzF9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGUg d2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVsX3NxbAor CSAgLiAiOiBwZ2JlbmNoIDE6IGNoZWNrIHByb2Nlc3NlZCB0cmFuc2FjdGlv bnMiKTsKKwlsaWtlKCRvdXQyLAorCQlxcntwcm9jZXNzZWQ6IDEvMX0sCisJ CSJjb25jdXJyZW50IGRlYWRsb2NrIHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiAi CisJICAuICRpc29sYXRpb25fbGV2ZWxfc3FsCisJICAuICI6IHBnYmVuY2gg MjogY2hlY2sgcHJvY2Vzc2VkIHRyYW5zYWN0aW9ucyIpOworCisJbGlrZSgk b3V0MSAuICRvdXQyLAorCQlxcnteKCg/IW51bWJlciBvZiBmYWlsdXJlcyko LnxcbikpKiR9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1cGRhdGUgd2l0 aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVsX3NxbAorCSAg LiAiOiBjaGVjayBmYWlsdXJlcyIpOworCisJIyBGaXJzdCBvciBzZWNvbmQg cGdiZW5jaCBzaG91bGQgZ2V0IGEgZGVhZGxvY2sgZXJyb3IKKwlsaWtlKCRl cnIxIC4gJGVycjIsCisJCXFye2NsaWVudCAwIGdvdCBhIGRlYWRsb2NrIGZh aWx1cmUgXCh0cnkgMS8yXCl9LAorCQkiY29uY3VycmVudCBkZWFkbG9jayB1 cGRhdGUgd2l0aCByZXRyeWluZzogIgorCSAgLiAkaXNvbGF0aW9uX2xldmVs X3NxbAorCSAgLiAiOiBjaGVjayBkZWFkbG9jayBmYWlsdXJlIik7CisKKwlp ZiAoJGlzb2xhdGlvbl9sZXZlbCA9PSBSRUFEX0NPTU1JVFRFRCkKKwl7CisJ CW15ICRwYXR0ZXJuID0KKwkJCSJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4 eSBTRVQgeSA9IHkgXFwrICgtP1xcZCspIFdIRVJFIHggPSAoXFxkKTtcbiIK KwkJICAuICIoY2xpZW50IDAgcmVjZWl2aW5nXG4pKyIKKwkJICAuICIofGNs aWVudCAwIHNlbmRpbmcgU0VMRUNUIHBnX3NsZWVwXFwoMjBcXCk7XG4pIgor CQkgIC4gIlxcZzMqIgorCQkgIC4gImNsaWVudCAwIHNlbmRpbmcgVVBEQVRF IHh5IFNFVCB5ID0geSBcXCsgKC0/XFxkKykgV0hFUkUgeCA9IChcXGQpO1xu IgorCQkgIC4gIlxcZzMrIgorCQkgIC4gImNsaWVudCAwIGdvdCBhIGRlYWRs b2NrIGZhaWx1cmUgXFwodHJ5IDEvMlxcKVxuIgorCQkgIC4gImNsaWVudCAw IHNlbmRpbmcgRU5EO1xuIgorCQkgIC4gIlxcZzMrIgorCQkgIC4gImNsaWVu dCAwIHJlcGVhdHMgdGhlIGZhaWxlZCB0cmFuc2FjdGlvbiBcXCh0cnkgMi8y XFwpXG4iCisJCSAgLiAiY2xpZW50IDAgc2VuZGluZyBCRUdJTjtcbiIKKwkJ ICAuICJcXGczKyIKKwkJICAuICJjbGllbnQgMCBleGVjdXRpbmcgXFxcXHNl dCBkZWx0YTFcbiIKKwkJICAuICJjbGllbnQgMCBleGVjdXRpbmcgXFxcXHNl dCBkZWx0YTJcbiIKKwkJICAuICJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4 eSBTRVQgeSA9IHkgXFwrIFxcZzEgV0hFUkUgeCA9IFxcZzI7XG4iCisJCSAg LiAiXFxnMysiCisJCSAgLiAiXFxnNCIKKwkJICAuICJcXGczKiIKKwkJICAu ICJjbGllbnQgMCBzZW5kaW5nIFVQREFURSB4eSBTRVQgeSA9IHkgXFwrIFxc ZzUgV0hFUkUgeCA9IFxcZzY7XG4iOworCisJCWxpa2UoJGVycjEgLiAkZXJy MiwKKwkJCXFyeyRwYXR0ZXJufSwKKwkJCSJjb25jdXJyZW50IGRlYWRsb2Nr IHVwZGF0ZSB3aXRoIHJldHJ5aW5nOiAiCisJCSAgLiAkaXNvbGF0aW9uX2xl dmVsX3NxbAorCQkgIC4gIjogY2hlY2sgdGhlIHJldHJpZWQgdHJhbnNhY3Rp b24iKTsKKwl9Cit9CisKK3Rlc3RfcGdiZW5jaF9zZXJpYWxpemF0aW9uX2Zh aWx1cmVzKFJFQURfQ09NTUlUVEVEKTsKK3Rlc3RfcGdiZW5jaF9zZXJpYWxp emF0aW9uX2ZhaWx1cmVzKFJFUEVBVEFCTEVfUkVBRCk7Cit0ZXN0X3BnYmVu Y2hfc2VyaWFsaXphdGlvbl9mYWlsdXJlcyhTRVJJQUxJWkFCTEUpOworCit0 ZXN0X3BnYmVuY2hfc2VyaWFsaXphdGlvbl9mYWlsdXJlc19yZXRyeShSRVBF QVRBQkxFX1JFQUQpOwordGVzdF9wZ2JlbmNoX3NlcmlhbGl6YXRpb25fZmFp bHVyZXNfcmV0cnkoU0VSSUFMSVpBQkxFKTsKKwordGVzdF9wZ2JlbmNoX2Rl YWRsb2NrX2ZhaWx1cmVzKFJFQURfQ09NTUlUVEVEKTsKK3Rlc3RfcGdiZW5j aF9kZWFkbG9ja19mYWlsdXJlcyhSRVBFQVRBQkxFX1JFQUQpOwordGVzdF9w Z2JlbmNoX2RlYWRsb2NrX2ZhaWx1cmVzKFNFUklBTElaQUJMRSk7CisKK3Rl c3RfcGdiZW5jaF9kZWFkbG9ja19mYWlsdXJlc19yZXRyeShSRUFEX0NPTU1J VFRFRCk7Cit0ZXN0X3BnYmVuY2hfZGVhZGxvY2tfZmFpbHVyZXNfcmV0cnko UkVQRUFUQUJMRV9SRUFEKTsKK3Rlc3RfcGdiZW5jaF9kZWFkbG9ja19mYWls dXJlc19yZXRyeShTRVJJQUxJWkFCTEUpOwotLSAKMS45LjEKCg== --=_5be643ee085631609b469a4e0ece3f2c 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 --=_5be643ee085631609b469a4e0ece3f2c--