Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rE6Rf-004CN3-AG for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Dec 2023 11:33:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rE6Rb-00146b-LU for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Dec 2023 11:33:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rE6Mf-0012Hu-T7 for pgsql-hackers@lists.postgresql.org; Fri, 15 Dec 2023 11:28:22 +0000 Received: from forward500a.mail.yandex.net ([2a02:6b8:c0e:500:1:45:d181:d500]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rE6Ma-00C7jb-Up for pgsql-hackers@postgresql.org; Fri, 15 Dec 2023 11:28:21 +0000 Received: from mail-nwsmtp-smtp-production-main-52.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-52.vla.yp-c.yandex.net [IPv6:2a02:6b8:c1f:5408:0:640:72fa:0]) by forward500a.mail.yandex.net (Yandex) with ESMTP id A9C6D60F99 for ; Fri, 15 Dec 2023 14:28:14 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-52.vla.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id CSjBHD8pEeA0-GW1OiVu3; Fri, 15 Dec 2023 14:28:13 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1702639694; bh=YZ5jwTOR532MES4lftX6NYtWiUoRF6cWBQUl+CVTRzU=; h=In-Reply-To:To:Date:References:Subject:Message-ID:From; b=uf9CWRzwb1oIY9vZI9MAQkTiMHaESzrisxu5fOOD7eJJ6436kdQr+mO0bGv6Jid6h KKbu1aUrh22K5Y2iGDkjdtefL+1PasJWSWPZcoJOMdlYJEkx540DnwnI8D9FUi3zDU ZuGY/TxOCfP29dCVHRBkJUJEPDgBeHqwG5DeIpBg= Authentication-Results: mail-nwsmtp-smtp-production-main-52.vla.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------5WLkzr69GyTCAtJtWRFLAKYh" Message-ID: Date: Fri, 15 Dec 2023 14:28:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Autonomous transactions 2023, WIP Content-Language: en-US References: <59cb5ad2-f814-464f-9f16-1f74575f11a8@tantorlabs.com> To: pgsql-hackers@postgresql.org From: Ivan Kush Organization: Tantor Labs LLC In-Reply-To: <59cb5ad2-f814-464f-9f16-1f74575f11a8@tantorlabs.com> X-Forwarded-Message-Id: <59cb5ad2-f814-464f-9f16-1f74575f11a8@tantorlabs.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------5WLkzr69GyTCAtJtWRFLAKYh Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello. I'm working on the support of autonomous transactions in Postgres. Could you please make a preliminary review and give advices (see section #TODO) # Patch v0001-Autonomous-transactions.patch # Introduction This patch implements Autonomous Transactions for PL/pgSQL. Autonomous transaction is a transaction that can be succesfully commited even if base transaction is rolled back. Common use cases: logging/auditing/tracking progress in tables, so that information about the execution attempt is preserved even when the main transaction is rolled back — for example, due to an error. # Glossary Session - entity that groups multiple related SQL commands into a single transaction. Main session (backend, foreground session) - session through which the user interacts. Main transaction (parent) - transaction that runs in the main session. Autonomous session - session that performs an offline transaction. It starts from the main session. Autonomous transaction - independent transaction that runs inside an autonomous session. Autonomous function - function with the pragma AUTONOMOUS_TRANSACTION. When it is executed, an autonomous session is created in it. Background worker - background process that performs some actions in the background, without the user's participation. dsm - dynamic shared memory. shm_mq - shared memory message queue. # Internals This patch introduces a "pragma AUTONOMOUS_TRANSACTION" to functions. When one such function is executed all (at the current time not all, WIP) statements from it are executed in an autonomous session. * Example * *SQL-request:* ```sql CREATE TABLE tbl (a int); CREATE OR REPLACE FUNCTION func() RETURNS void LANGUAGE plpgsql AS $$ DECLARE   PRAGMA AUTONOMOUS_TRANSACTION; BEGIN   INSERT INTO tbl VALUES (1); END; $$; START TRANSACTION; SELECT func(); ROLLBACK; SELECT * FROM tbl; DROP FUNCTION func; DROP TABLE tbl; ``` *Output:* ```bash  a ---  1 (1 row) ``` For each backend the patch lazily creates a pool of autonomous sessions. When backend calls autonomous function, backend takes one autonomous session from this pool and sends there function's statements for execution. When execution is finished backend returns session to pool. Lazily means that pool is created only when first autonomous session is needed. Backend and autonomous session communicate with the help of Postgres client-server protocol. Messages are sent through dynamic shared memory. Execution of backend and autonomous session is synchronous: autonomous session waits for messages from backendand backend waits for messages from autonomous session. Autonomous session uses Background workers internally. As it's a separate process, it contains caches, etc. In order to prevent infinite grow of resources usage we reset all caches by timeout using restart of autonomous sessions. This timeout is set by guc setting autonomous_session_lifetime. Source code contains more detailed comments. # Alternatives At the current time for this functionality may be uses extensions: dblink and pg_background. But they have shortcomings:     1) not in the Postgres core, they are extensions     2) lower performance. Each call creates new process that is destroyed immediately after transaction is finished. # TODO Could you please give advices how implement public pool shared between all backends? 1) Support execution of remaining statements in autonomous sessions. 2) Public pool shared between all backends. At the current time for each backend private pool is created. # Tests Implementation contains many regression tests of varying complexity, which check supported features. # Platform This patch was checkouted from tag 15.4. This is WIP. I've developed in Linux, code doesn't contain platfrom-specific code, only Postgres internal data structures and functions. # Documentation Regression tests contain many examples * Describe the effect your patch has on performance, if any. It adds a new feature and increase performance compared to dblink and pg_background # History ## 1st feature requests and discussions in pgsql-hackers (without code) 1) 2008 https://www.postgresql.org/message-id/flat/1A6E6D554222284AB25ABE3229A9276271549A%40nrtexcus702.int.asurion.com 2) 2010 https://www.postgresql.org/message-id/flat/AANLkTi%3DuogmYxLKWmUfFSg-Ki2bejsQiO2g5GTMxvdW2%40mail.gmail.com 3) 2011 https://www.postgresql.org/message-id/flat/1303399444.9126.8.camel%40vanquo.pezone.net 4) 2011 https://wiki.postgresql.org/wiki/Autonomous_subtransactions 5) 2011 https://www.postgresql.org/message-id/flat/20111218082812.GA14355%40leggeri.gi.lan https://wiki.postgresql.org/wiki/Autonomous_subtransactions ## Implementaion 1) 2014, Rajeev Rastogi, implementation based on subtransactions https://www.postgresql.org/message-id/flat/BF2827DCCE55594C8D7A8F7FFD3AB7713DDDEF59%40SZXEML508-MBX.china.huawei.com 2) 2015, Rajeev Rastogi, new theme, continues discussion about semantics and syntax of autonomous transactions https://www.postgresql.org/message-id/flat/BF2827DCCE55594C8D7A8F7FFD3AB7715990499A%40szxeml521-mbs.china.huawei.com 3) 2016, Peter Eisentraut, implementation based on background workers https://www.postgresql.org/message-id/flat/659a2fce-b6ee-06de-05c0-c8ed6a01979e%402ndquadrant.com # Summary * Add pragma AUTONOMOUS_TRANSACTION in the functions. When function contains this pragma, the it's executed autonomously * Background workers are used to run autonomous sessions. * Synchronous execution between backend and autonomous session * Postgres Client-Server Protocol is used to communicate between them * Pool of autonomous sessions. Pool is created lazily. * Infinite nested calls of autonomous functions are allowed. Limited only by computer resources. * If another 2nd autonomous function is called in the 1st autonomous function, the 2nd is executed at the beginning, and then the 1st continues execution. -- Best wishes, Ivan Kush Tantor Labs LLC --------------5WLkzr69GyTCAtJtWRFLAKYh Content-Type: text/x-patch; charset=UTF-8; name="0001-Autonomous-transactions.patch" Content-Disposition: attachment; filename="0001-Autonomous-transactions.patch" Content-Transfer-Encoding: base64 RnJvbSAzNTk1NmNkMDEzZTRlZTAxYmZiOGEyNTZmZmVmYTExNjQ2OTBmZjJkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJdmFuIEt1c2ggPGl2YW4ua3VzaEB0YW50b3JsYWJz LmNvbT4KRGF0ZTogVHVlLCAxMiBEZWMgMjAyMyAwMToyNTo0OCArMDMwMApTdWJqZWN0OiBb UEFUQ0hdIEF1dG9ub21vdXMgdHJhbnNhY3Rpb25zCgpUaGlzIGltcGxlbWVudHMgYSBDIEFQ SSB0byBydW4gU1FMIHN0YXRlbWVudHMgaW4gYSBzZXBhcmF0ZSBmcm9tIGZvcmVncm91bmQg c2Vzc2lvbiBuYW1lZCBhdXRvbm9tb3VzLgpJdCBydW5zIG9uIGJhY2tncm91bmQgd29ya2Vy LCBjb21tdW5pY2F0aW5nIGJ5IEZFL0JFIHByb3RvY29sIG92ZXIgYSBEU00gbWVzc2FnZSBx dWV1ZS4KVGhlIHNlc3Npb24gbG9va3MgbXVjaCBsaWtlIGEgbm9ybWFsIGRhdGFiYXNlIGNv bm5lY3Rpb24sIGJ1dCBpdCBpcwphbHdheXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UsIGFuZCB0 aGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbiBuZWVkZWQuCkF1dG9ub21vdXMgc2Vzc2lvbidz IGVycm9ycyBhcmUgc2VudCB0byBiYWNrZW5kLgpBdXRvbm9tb3VzIHNlc3Npb25zIGFyZSB0 YWtlbiBmcm9tIHRoZSBwb29sLCB3aGVuIGF1dG9ub21vdXMgZnVuY3Rpb24gYmVnaW5zIHRv IGV4ZWN1dGUuCkVhY2ggYmFja2VuZCBsYXppbHkgY3JlYXRlcyBwb29sLCBwb29scyBhcmVu J3Qgc2hhcmVkIGJldHdlZW4gYmFja2VuZHMuCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3ByZXBhcmUuYyAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3ZhcmlhYmxlLmMgICAgICAgICAgICAgICB8ICAgIDUgKwogc3JjL2JhY2tlbmQvbGli cHEvcHFtcS5jICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCArCiBzcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBzcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfcGFyYW0uYyAgICAgICAgICAgICAgfCAgIDQ1ICstCiBzcmMvYmFj a2VuZC9wby9kZS5wbyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9i YWNrZW5kL3BvL2VzLnBvICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogc3Jj L2JhY2tlbmQvcG8vZnIucG8gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiBz cmMvYmFja2VuZC9wby9pZC5wbyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsK IHNyYy9iYWNrZW5kL3BvL2l0LnBvICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg Kwogc3JjL2JhY2tlbmQvcG8vamEucG8gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg NCArCiBzcmMvYmFja2VuZC9wby9rby5wbyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICA0ICsKIHNyYy9iYWNrZW5kL3BvL3BsLnBvICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDQgKwogc3JjL2JhY2tlbmQvcG8vcHRfQlIucG8gICAgICAgICAgICAgICAgICAgICAg IHwgICAgNCArCiBzcmMvYmFja2VuZC9wby9ydS5wbyAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICA2ICstCiBzcmMvYmFja2VuZC9wby9zdi5wbyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3BvL3RyLnBvICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvcG8vdWsucG8gICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC9wby96aF9DTi5wbyAgICAgICAgICAg ICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YyAgICAgICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvdGNvcC9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC90Y29wL2F1dG9ub21vdXMu YyAgICAgICAgICAgICAgICAgfCAxMzE3ICsrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICA2NiArLQogc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgICAxNCArCiBzcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgICA0ICsKIHNyYy9p bmNsdWRlL2xpYnBxL3BxbXEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3Jj L2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArLQog c3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX3BhcmFtLmggICAgICAgICAgICAgIHwgICAgMiAr LQogc3JjL2luY2x1ZGUvdGNvcC9hdXRvbm9tb3VzLmggICAgICAgICAgICAgICAgIHwgICA0 OCArCiBzcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmggICAgICAgICAgICAgICAgICAgfCAg IDExICstCiBzcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg fCAgICAyICstCiAuLi4vc3JjL2V4cGVjdGVkL3BscGdzcWxfYXV0b25vbW91cy5vdXQgICAg ICAgfCAxNDIzICsrKysrKysrKysrKysrKysrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhl Yy5jICAgICAgICAgICAgICAgICAgfCAgMTc3ICstCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxf Z3JhbS55ICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKIHNyYy9wbC9wbHBnc3FsL3NyYy9w bF91bnJlc2VydmVkX2t3bGlzdC5oICAgICB8ICAgIDEgKwogc3JjL3BsL3BscGdzcWwvc3Jj L3BscGdzcWwuaCAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBzcmMvcGwvcGxwZ3NxbC9z cmMvc3FsL3BscGdzcWxfYXV0b25vbW91cy5zcWwgfCAxMjk2ICsrKysrKysrKysrKysrKwog MzcgZmlsZXMgY2hhbmdlZCwgNDUwMyBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC90Y29wL2F1dG9ub21vdXMuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvYXV0b25vbW91cy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfYXV0b25v bW91cy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3Bs cGdzcWxfYXV0b25vbW91cy5zcWwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wcmVwYXJlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wcmVwYXJlLmMKaW5kZXggMThm NzAzMTlmYy4uYjg1NTA2NmY5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHJlcGFyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ByZXBhcmUuYwpAQCAtMTE3 LDcgKzExNyw3IEBAIFByZXBhcmVRdWVyeShQYXJzZVN0YXRlICpwc3RhdGUsIFByZXBhcmVT dG10ICpzdG10LAogCSAqIFJld3JpdGUgdGhlIHF1ZXJ5LiBUaGUgcmVzdWx0IGNvdWxkIGJl IDAsIDEsIG9yIG1hbnkgcXVlcmllcy4KIAkgKi8KIAlxdWVyeV9saXN0ID0gcGdfYW5hbHl6 ZV9hbmRfcmV3cml0ZV92YXJwYXJhbXMocmF3c3RtdCwgcHN0YXRlLT5wX3NvdXJjZXRleHQs Ci0JCQkJCQkJCQkJCQkgICZhcmd0eXBlcywgJm5hcmdzLCBOVUxMKTsKKwkJCQkJCQkJCQkJ CSAgJmFyZ3R5cGVzLCAmbmFyZ3MsIE5VTEwsIE5VTEwpOwogCiAJLyogRmluaXNoIGZpbGxp bmcgaW4gdGhlIENhY2hlZFBsYW5Tb3VyY2UgKi8KIAlDb21wbGV0ZUNhY2hlZFBsYW4ocGxh bnNvdXJjZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhcmlhYmxlLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy92YXJpYWJsZS5jCmluZGV4IGMzNjFiYjIwNzkuLjJm ZDljZWU0MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhcmlhYmxlLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFyaWFibGUuYwpAQCAtNjc2LDEyICs2NzYs MTcgQEAgc2hvd19yYW5kb21fc2VlZCh2b2lkKQogICogU0VUIENMSUVOVF9FTkNPRElORwog ICovCiAKK3ZvaWQgKCpjaGVja19jbGllbnRfZW5jb2RpbmdfaG9vaykodm9pZCk7CisKIGJv b2wKIGNoZWNrX2NsaWVudF9lbmNvZGluZyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJaW50CQkJZW5jb2Rpbmc7CiAJY29uc3QgY2hhciAq Y2Fub25pY2FsX25hbWU7CiAKKwlpZiAoY2hlY2tfY2xpZW50X2VuY29kaW5nX2hvb2spCisJ CWNoZWNrX2NsaWVudF9lbmNvZGluZ19ob29rKCk7CisKIAkvKiBMb29rIHVwIHRoZSBlbmNv ZGluZyBieSBuYW1lICovCiAJZW5jb2RpbmcgPSBwZ192YWxpZF9jbGllbnRfZW5jb2Rpbmco Km5ld3ZhbCk7CiAJaWYgKGVuY29kaW5nIDwgMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2xpYnBxL3BxbXEuYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYwppbmRleCAzOGIwNDI4 MDRjLi42ODhkYjQ3MTZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMK KysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jCkBAIC00NSw2ICs0NSwxNyBAQCBzdGF0 aWMgY29uc3QgUFFjb21tTWV0aG9kcyBQcUNvbW1NcU1ldGhvZHMgPSB7CiAJLnB1dG1lc3Nh Z2Vfbm9ibG9jayA9IG1xX3B1dG1lc3NhZ2Vfbm9ibG9jawogfTsKIAordHlwZWRlZiBzdHJ1 Y3QgUFFjb250ZXh0IHsKKwljb25zdCBQUWNvbW1NZXRob2RzICpQcUNvbW1NZXRob2RzOwor CXNobV9tcV9oYW5kbGUgKnBxX21xX2hhbmRsZTsKKwlDb21tYW5kRGVzdCB3aGVyZVRvU2Vu ZE91dHB1dDsKKwlQcm90b2NvbFZlcnNpb24gRnJvbnRlbmRQcm90b2NvbDsKKwlkc21fc2Vn bWVudCAqc2VnOworfSBQUWNvbnRleHQ7CitzdGF0aWMgY29uc3QgUFFjb250ZXh0IG51bGxf Y3R4ID0gey5QcUNvbW1NZXRob2RzID0gTlVMTCwgLnBxX21xX2hhbmRsZSA9IE5VTEwsIC53 aGVyZVRvU2VuZE91dHB1dCA9IERlc3ROb25lLCAuc2VnID0gTlVMTH07CisvKnNhbWUgYXMg bnVsbF9jdHgsIGltcG9zc2libGUgdG8gYXNzaWduIG51bGxfY3R4OiBlcnJvcjogaW5pdGlh bGl6ZXIgZWxlbWVudCBpcyBub3QgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgKi8KK3N0YXRp YyBQUWNvbnRleHQgcHJldl9jdHggPSB7LlBxQ29tbU1ldGhvZHMgPSBOVUxMLCAucHFfbXFf aGFuZGxlID0gTlVMTCwgLndoZXJlVG9TZW5kT3V0cHV0ID0gRGVzdE5vbmUsIC5zZWcgPSBO VUxMfTsKKwogLyoKICAqIEFycmFuZ2UgdG8gcmVkaXJlY3QgZnJvbnRlbmQvYmFja2VuZCBw cm90b2NvbCBtZXNzYWdlcyB0byBhIHNoYXJlZC1tZW1vcnkKICAqIG1lc3NhZ2UgcXVldWUu CkBAIC01Miw2ICs2MywxMiBAQCBzdGF0aWMgY29uc3QgUFFjb21tTWV0aG9kcyBQcUNvbW1N cU1ldGhvZHMgPSB7CiB2b2lkCiBwcV9yZWRpcmVjdF90b19zaG1fbXEoZHNtX3NlZ21lbnQg KnNlZywgc2htX21xX2hhbmRsZSAqbXFoKQogeworCXByZXZfY3R4LlBxQ29tbU1ldGhvZHMg PSBQcUNvbW1NZXRob2RzOworCXByZXZfY3R4LndoZXJlVG9TZW5kT3V0cHV0ID0gd2hlcmVU b1NlbmRPdXRwdXQ7CisJcHJldl9jdHguRnJvbnRlbmRQcm90b2NvbCA9IEZyb250ZW5kUHJv dG9jb2w7CisJcHJldl9jdHgucHFfbXFfaGFuZGxlID0gcHFfbXFfaGFuZGxlOworCXByZXZf Y3R4LnNlZyA9IHNlZzsKKwogCVBxQ29tbU1ldGhvZHMgPSAmUHFDb21tTXFNZXRob2RzOwog CXBxX21xX2hhbmRsZSA9IG1xaDsKIAl3aGVyZVRvU2VuZE91dHB1dCA9IERlc3RSZW1vdGU7 CkBAIC01OSw2ICs3NiwxNyBAQCBwcV9yZWRpcmVjdF90b19zaG1fbXEoZHNtX3NlZ21lbnQg KnNlZywgc2htX21xX2hhbmRsZSAqbXFoKQogCW9uX2RzbV9kZXRhY2goc2VnLCBwcV9jbGVh bnVwX3JlZGlyZWN0X3RvX3NobV9tcSwgKERhdHVtKSAwKTsKIH0KIAordm9pZAorcHFfc3Rv cF9yZWRpcmVjdF90b19zaG1fbXEodm9pZCkKK3sKKwljYW5jZWxfb25fZHNtX2RldGFjaChw cmV2X2N0eC5zZWcsIHBxX2NsZWFudXBfcmVkaXJlY3RfdG9fc2htX21xLCAoRGF0dW0pIDAp OworCVBxQ29tbU1ldGhvZHMgPSBwcmV2X2N0eC5QcUNvbW1NZXRob2RzOworCXdoZXJlVG9T ZW5kT3V0cHV0ID0gcHJldl9jdHgud2hlcmVUb1NlbmRPdXRwdXQ7CisJRnJvbnRlbmRQcm90 b2NvbCA9IHByZXZfY3R4LkZyb250ZW5kUHJvdG9jb2w7CisJcHFfbXFfaGFuZGxlID0gcHJl dl9jdHgucHFfbXFfaGFuZGxlOworCXByZXZfY3R4ID0gbnVsbF9jdHg7Cit9CisKIC8qCiAg KiBXaGVuIHRoZSBEU00gdGhhdCBjb250YWlucyBvdXIgc2htX21xIGdvZXMgYXdheSwgd2Ug bmVlZCB0byBzdG9wIHNlbmRpbmcKICAqIG1lc3NhZ2VzIHRvIGl0LgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFs eXplLmMKaW5kZXggN2ExZGZiNjM2NC4uZTYzYTMzOGI2YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6 ZS5jCkBAIC0xNDYsNyArMTQ2LDcgQEAgcGFyc2VfYW5hbHl6ZV9maXhlZHBhcmFtcyhSYXdT dG10ICpwYXJzZVRyZWUsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiBRdWVyeSAqCiBwYXJz ZV9hbmFseXplX3ZhcnBhcmFtcyhSYXdTdG10ICpwYXJzZVRyZWUsIGNvbnN0IGNoYXIgKnNv dXJjZVRleHQsCiAJCQkJCQlPaWQgKipwYXJhbVR5cGVzLCBpbnQgKm51bVBhcmFtcywKLQkJ CQkJCVF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KQorCQkJCQkJUXVlcnlFbnZpcm9ubWVu dCAqcXVlcnlFbnYsIGNvbnN0IGNoYXIgKnBhcmFtTmFtZXNbXSkKIHsKIAlQYXJzZVN0YXRl ICpwc3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUoTlVMTCk7CiAJUXVlcnkJICAgKnF1ZXJ5OwpA QCAtMTU2LDcgKzE1Niw3IEBAIHBhcnNlX2FuYWx5emVfdmFycGFyYW1zKFJhd1N0bXQgKnBh cnNlVHJlZSwgY29uc3QgY2hhciAqc291cmNlVGV4dCwKIAogCXBzdGF0ZS0+cF9zb3VyY2V0 ZXh0ID0gc291cmNlVGV4dDsKIAotCXNldHVwX3BhcnNlX3ZhcmlhYmxlX3BhcmFtZXRlcnMo cHN0YXRlLCBwYXJhbVR5cGVzLCBudW1QYXJhbXMpOworCXNldHVwX3BhcnNlX3ZhcmlhYmxl X3BhcmFtZXRlcnMocHN0YXRlLCBwYXJhbVR5cGVzLCBudW1QYXJhbXMsIHBhcmFtTmFtZXMp OwogCiAJcHN0YXRlLT5wX3F1ZXJ5RW52ID0gcXVlcnlFbnY7CiAKQEAgLTI5NjcsNyArMjk2 Nyw3IEBAIHRyYW5zZm9ybUV4cGxhaW5TdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgRXhwbGFp blN0bXQgKnN0bXQpCiAJCQkvKiBkb24ndCAiYnJlYWsiLCBhcyB3ZSB3YW50IHRoZSBsYXN0 IHZhbHVlICovCiAJCX0KIAkJaWYgKGdlbmVyaWNfcGxhbikKLQkJCXNldHVwX3BhcnNlX3Zh cmlhYmxlX3BhcmFtZXRlcnMocHN0YXRlLCAmcGFyYW1UeXBlcywgJm51bVBhcmFtcyk7CisJ CQlzZXR1cF9wYXJzZV92YXJpYWJsZV9wYXJhbWV0ZXJzKHBzdGF0ZSwgJnBhcmFtVHlwZXMs ICZudW1QYXJhbXMsIE5VTEwpOwogCX0KIAogCS8qIHRyYW5zZm9ybSBjb250YWluZWQgcXVl cnksIGFsbG93aW5nIFNFTEVDVCBJTlRPICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfcGFyYW0uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9wYXJhbS5j CmluZGV4IDIyNDAyODRmMjEuLjdhOTFiMWZjYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9wYXJhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9w YXJhbS5jCkBAIC00OSw4ICs0OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBWYXJQYXJhbVN0YXRl CiB7CiAJT2lkCQkgICoqcGFyYW1UeXBlczsJCS8qIGFycmF5IG9mIHBhcmFtZXRlciB0eXBl IE9JRHMgKi8KIAlpbnQJCSAgICpudW1QYXJhbXM7CQkvKiBudW1iZXIgb2YgYXJyYXkgZW50 cmllcyAqLworCWNvbnN0IGNoYXIgKipwYXJhbU5hbWVzOwogfSBWYXJQYXJhbVN0YXRlOwog CitzdGF0aWMgTm9kZSAqdmFyaWFibGVfcG9zdF9jb2x1bW5fcmVmX2hvb2soUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDb2x1bW5SZWYgKmNyZWYsIE5vZGUgKnZhcik7CiBzdGF0aWMgTm9kZSAq Zml4ZWRfcGFyYW1yZWZfaG9vayhQYXJzZVN0YXRlICpwc3RhdGUsIFBhcmFtUmVmICpwcmVm KTsKIHN0YXRpYyBOb2RlICp2YXJpYWJsZV9wYXJhbXJlZl9ob29rKFBhcnNlU3RhdGUgKnBz dGF0ZSwgUGFyYW1SZWYgKnByZWYpOwogc3RhdGljIE5vZGUgKnZhcmlhYmxlX2NvZXJjZV9w YXJhbV9ob29rKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUGFyYW0gKnBhcmFtLApAQCAtODEsMTcg KzgzLDU4IEBAIHNldHVwX3BhcnNlX2ZpeGVkX3BhcmFtZXRlcnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLAogICovCiB2b2lkCiBzZXR1cF9wYXJzZV92YXJpYWJsZV9wYXJhbWV0ZXJzKFBhcnNl U3RhdGUgKnBzdGF0ZSwKLQkJCQkJCQkJT2lkICoqcGFyYW1UeXBlcywgaW50ICpudW1QYXJh bXMpCisJCQkJCQkJCU9pZCAqKnBhcmFtVHlwZXMsIGludCAqbnVtUGFyYW1zLCBjb25zdCBj aGFyICpwYXJhbU5hbWVzW10pCiB7CiAJVmFyUGFyYW1TdGF0ZSAqcGFyc3RhdGUgPSBwYWxs b2Moc2l6ZW9mKFZhclBhcmFtU3RhdGUpKTsKIAogCXBhcnN0YXRlLT5wYXJhbVR5cGVzID0g cGFyYW1UeXBlczsKIAlwYXJzdGF0ZS0+bnVtUGFyYW1zID0gbnVtUGFyYW1zOworCXBhcnN0 YXRlLT5wYXJhbU5hbWVzID0gcGFyYW1OYW1lczsKKwlwc3RhdGUtPnBfcG9zdF9jb2x1bW5y ZWZfaG9vayA9IHZhcmlhYmxlX3Bvc3RfY29sdW1uX3JlZl9ob29rOwogCXBzdGF0ZS0+cF9y ZWZfaG9va19zdGF0ZSA9ICh2b2lkICopIHBhcnN0YXRlOwogCXBzdGF0ZS0+cF9wYXJhbXJl Zl9ob29rID0gdmFyaWFibGVfcGFyYW1yZWZfaG9vazsKIAlwc3RhdGUtPnBfY29lcmNlX3Bh cmFtX2hvb2sgPSB2YXJpYWJsZV9jb2VyY2VfcGFyYW1faG9vazsKIH0KIAorc3RhdGljIE5v ZGUgKgordmFyaWFibGVfcG9zdF9jb2x1bW5fcmVmX2hvb2soUGFyc2VTdGF0ZSAqcHN0YXRl LCBDb2x1bW5SZWYgKmNyZWYsIE5vZGUgKnZhcikKK3sKKwlWYXJQYXJhbVN0YXRlICpwYXJz dGF0ZSA9IChWYXJQYXJhbVN0YXRlICopIHBzdGF0ZS0+cF9yZWZfaG9va19zdGF0ZTsKKwor CS8qIGFscmVhZHkgcmVzb2x2ZWQgKi8KKwlpZiAodmFyICE9IE5VTEwpCisJCXJldHVybiBO VUxMOworCisJLyogZGlkIG5vdCBzdXBwbHkgcGFyYW1ldGVyIG5hbWVzICovCisJaWYgKCFw YXJzdGF0ZS0+cGFyYW1OYW1lcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobGlzdF9sZW5n dGgoY3JlZi0+ZmllbGRzKSA9PSAxKQorCXsKKwkJTm9kZQkgICAqZmllbGQxID0gKE5vZGUg KikgbGluaXRpYWwoY3JlZi0+ZmllbGRzKTsKKwkJY2hhcgkgICAqbmFtZTE7CisJCWludAkJ CWk7CisJCVBhcmFtCSAgICpwYXJhbTsKKworCQlBc3NlcnQoSXNBKGZpZWxkMSwgU3RyaW5n KSk7CisJCW5hbWUxID0gc3RyVmFsKGZpZWxkMSk7CisJCWZvciAoaSA9IDA7IGkgPCAqcGFy c3RhdGUtPm51bVBhcmFtczsgaSsrKQorCQkJaWYgKHN0cmNtcChuYW1lMSwgcGFyc3RhdGUt PnBhcmFtTmFtZXNbaV0pID09IDApCisJCQl7CisJCQkJcGFyYW0gPSBtYWtlTm9kZShQYXJh bSk7CisJCQkJcGFyYW0tPnBhcmFta2luZCA9IFBBUkFNX0VYVEVSTjsKKwkJCQlwYXJhbS0+ cGFyYW1pZCA9IGkgKyAxOworCQkJCXBhcmFtLT5wYXJhbXR5cGUgPSAoKnBhcnN0YXRlLT5w YXJhbVR5cGVzKVtpXTsKKwkJCQlwYXJhbS0+cGFyYW10eXBtb2QgPSAtMTsKKwkJCQlwYXJh bS0+cGFyYW1jb2xsaWQgPSBJbnZhbGlkT2lkOworCQkJCXBhcmFtLT5sb2NhdGlvbiA9IC0x OworCQkJCXJldHVybiAoTm9kZSAqKSBwYXJhbTsKKwkJCX0KKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKwogLyoKICAqIFRyYW5zZm9ybSBhIFBhcmFtUmVmIHVzaW5nIGZpeGVkIHBhcmFt ZXRlciB0eXBlcy4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG8vZGUucG8gYi9z cmMvYmFja2VuZC9wby9kZS5wbwppbmRleCAwYTllNjY4YzM4Li5kNTA0NTE4NTBmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wby9kZS5wbworKysgYi9zcmMvYmFja2VuZC9wby9kZS5w bwpAQCAtMjg5MzIsNiArMjg5MzIsMTAgQEAgbXNnc3RyICJTZXR6dCBkaWUgbWF4aW1hbGUg R3LDtsOfZSBkZXIgUGVuZGluZy1MaXN0ZSBlaW5lcyBHSU4tSW5kZXguIgogbXNnaWQgIlRD UCB1c2VyIHRpbWVvdXQuIgogbXNnc3RyICJUQ1AtVXNlci1UaW1lb3V0LiIKIAorIzogdXRp bHMvbWlzYy9ndWMuYzozNDMyCittc2dpZCAiTWF4aW11bSBsaWZldGltZSBvZiBhdXRvbm9t b3VzIHNlc3Npb24uIEluIG1pbnV0ZXMuIDMwMCBieSBkZWZhdWx0LiIKK21zZ3N0ciAiTWF4 aW1hbGUgTGViZW5zZGF1ZXIgZGVyIGF1dG9ub21lbiBTaXR6dW5nLiBJbiB3ZW5pZ2VuIE1p bnV0ZW4uIHN0YW5kYXJkbcOkw59pZyAzMDAuIgorCiAjOiB1dGlscy9taXNjL2d1Y190YWJs ZXMuYzozNDQyCiBtc2dpZCAiVGhlIHNpemUgb2YgaHVnZSBwYWdlIHRoYXQgc2hvdWxkIGJl IHJlcXVlc3RlZC4iCiBtc2dzdHIgIkh1Z2UtUGFnZS1HcsO2w59lLCBkaWUgYW5nZWZvcmRl cnQgd2VyZGVuIHNvbGwuIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG8vZXMucG8gYi9z cmMvYmFja2VuZC9wby9lcy5wbwppbmRleCBlNTBhOTM1MDMzLi40MGMxYmE2NzU1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wby9lcy5wbworKysgYi9zcmMvYmFja2VuZC9wby9lcy5w bwpAQCAtMjg4NDcsNiArMjg4NDcsMTIgQEAgbXNnc3RyICJEZWZpbmUgZWwgdGFtYcOxbyBt w6F4aW1vIGRlIGxhIGxpc3RhIGRlIHBlbmRpZW50ZXMgZGUgdW4gw61uZGljZSBHSU4uIgog bXNnaWQgIlRDUCB1c2VyIHRpbWVvdXQuIgogbXNnc3RyICJUaWVtcG8gZGUgZXhwaXJhY2nD s24gZGUgVENQLiIKIAorIzogdXRpbHMvbWlzYy9ndWMuYzozNDM3Cittc2dpZCAiTWF4aW11 bSBsaWZldGltZSBvZiBhdXRvbm9tb3VzIHNlc3Npb24uIEluIG1pbnV0ZXMuIDMwMCBieSBk ZWZhdWx0LiIKK21zZ3N0ciAiRHVyYWNpw7NuIG3DoXhpbWEgZGUgbGEgc2VzacOzbiBhdXTD s25vbWEuIEVuIG1pbnV0b3MuIDMwMCBwb3IgZGVmZWN0by4iCisKK21heGltYWxlIExlYmVu c2RhdWVyIGRlciBhdXRvbm9tZW4gU2l0enVuZy4gSW4gd2VuaWdlbiBNaW51dGVuLiBzdGFu ZGFyZG3DpMOfaWcgMzAwLgorCiAjOiB1dGlscy9taXNjL2d1Y190YWJsZXMuYzozNDQ3CiBt c2dpZCAiVGhlIHNpemUgb2YgaHVnZSBwYWdlIHRoYXQgc2hvdWxkIGJlIHJlcXVlc3RlZC4i CiBtc2dzdHIgIkVsIHRhbWHDsW8gZGUgaHVnZSBwYWdlIHF1ZSBzZSBkZWJlcsOtYSBzb2xp Y2l0YXIuIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG8vZnIucG8gYi9zcmMvYmFja2Vu ZC9wby9mci5wbwppbmRleCBmZDUxNTAwYjkzLi45ZTg2OWU5ZWI4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wby9mci5wbworKysgYi9zcmMvYmFja2VuZC9wby9mci5wbwpAQCAtMjkx NDUsNiArMjkxNDUsMTAgQEAgbXNnc3RyICJDb25maWd1cmUgbGEgdGFpbGxlIG1heGltYWxl IGRlIGxhIHBlbmRpbmcgbGlzdCBkJ3VuIGluZGV4IEdJTi4iCiBtc2dpZCAiVENQIHVzZXIg dGltZW91dC4iCiBtc2dzdHIgIkTDqWxhaSBkJ2F0dGVudGUgbWF4aW1hbCBUQ1AgdXRpbGlz YXRldXIuIgogCisjOiB1dGlscy9taXNjL2d1Yy5jOjM1OTAKK21zZ2lkICJNYXhpbXVtIGxp ZmV0aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1 bHQuIgorbXNnc3RyICJEdXLDqWUgZGUgdmllIG1heGltYWxlIGRlIGxhIHNlc3Npb24gYXV0 b25vbWUuIEVuIHF1ZWxxdWVzIG1pbnV0ZXMuIDMwMCBwYXIgZMOpZmF1dC4iCisKICM6IHV0 aWxzL21pc2MvZ3VjLmM6MzYwMAogbXNnaWQgIlRoZSBzaXplIG9mIGh1Z2UgcGFnZSB0aGF0 IHNob3VsZCBiZSByZXF1ZXN0ZWQuIgogbXNnc3RyICJMYSB0YWlsbGUgZHUgSHVnZSBQYWdl IGRldmFudCDDqnRyZSByw6ljbGFtw6kuIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG8v aWQucG8gYi9zcmMvYmFja2VuZC9wby9pZC5wbwppbmRleCBkNWQ0ODQxMzJiLi4yNWYzYmI4 NzJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wby9pZC5wbworKysgYi9zcmMvYmFja2Vu ZC9wby9pZC5wbwpAQCAtMTgxOTYsNiArMTgxOTYsMTAgQEAgbXNnc3RyICJNZWxha3VrYW4g c2V0IGp1bWxhaCBtYWtzaW11bSBkYXJpIHRlbXBvcmFyeSBidWZmZXIgeWFuZyBkaWd1bmFr YW4gcGFkYQogbXNnaWQgIlNldHMgdGhlIFRDUCBwb3J0IHRoZSBzZXJ2ZXIgbGlzdGVucyBv bi4iCiBtc2dzdHIgIk1lbGFrdWthbiBzZXQgcG9ydCBUQ1AgeWFuZyBkaS1saXN0ZW4uIgog CisjOiB1dGlscy9taXNjL2d1Yy5jOjE2NzQKK21zZ2lkICJNYXhpbXVtIGxpZmV0aW1lIG9m IGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1bHQuIgorbXNn c3RyICJNYXNhIHBha2FpIG1ha3NpbXVtIHNlc2kgb3Rvbm9tLiBEYWxhbSBoaXR1bmdhbiBt ZW5pdC4gMzAwIHNlY2FyYSBkZWZhdWx0LiIKKwogIzogdXRpbHMvbWlzYy9ndWMuYzoxNjgz CiBtc2dpZCAiU2V0cyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIG9mIHRoZSBVbml4LWRvbWFp biBzb2NrZXQuIgogbXNnc3RyICJNZWxha3VrYW4gc2V0IHBhZGEgaGFrIGFrc2VzIGRhbGFt IFVuaXgtZG9tYWluIHNvY2tldC4iCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wby9pdC5w byBiL3NyYy9iYWNrZW5kL3BvL2l0LnBvCmluZGV4IDY3M2UyYWFmMDAuLmJjYTE0ZDNiNjAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvL2l0LnBvCisrKyBiL3NyYy9iYWNrZW5kL3Bv L2l0LnBvCkBAIC0yNzM0OSw2ICsyNzM0OSwxMCBAQCBtc2dzdHIgIkltcG9zdGEgbGEgZGlt ZW5zaW9uZSBtYXNzaW1hIGRlbGxhIGxpc3RhIGRpIGF0dGVzYSBwZXIgZ2xpIGluZGljaSBH SU4uIgogbXNnaWQgIlRDUCB1c2VyIHRpbWVvdXQuIgogbXNnc3RyICJUaW1lb3V0IHV0ZW50 ZSBUQ1AuIgogCisjOiB1dGlscy9taXNjL2d1Yy5jOjM2MDAKK21zZ2lkICJNYXhpbXVtIGxp ZmV0aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1 bHQuIgorbXNnc3RyICJEdXJhdGEgbWFzc2ltYSBkZWxsYSBzZXNzaW9uZSBhdXRvbm9tYS4g SW4gcG9jaGkgbWludXRpLiAzMDAgcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YS4iCisK ICM6IHV0aWxzL21pc2MvZ3VjLmM6MzYxMAogbXNnaWQgIlRoZSBzaXplIG9mIGh1Z2UgcGFn ZSB0aGF0IHNob3VsZCBiZSByZXF1ZXN0ZWQuIgogbXNnc3RyICJMYSBkaW1lbnNpb25lIGRl bGxhIHBhZ2luYSBlbm9ybWUgY2hlIGRvdnJlYmJlIGVzc2VyZSByaWNoaWVzdGEuIgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG8vamEucG8gYi9zcmMvYmFja2VuZC9wby9qYS5wbwpp bmRleCAxYWI5ZjdmNjhmLi5iYTgxMzg1MjcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w by9qYS5wbworKysgYi9zcmMvYmFja2VuZC9wby9qYS5wbwpAQCAtMjgwODMsNiArMjgwODMs MTAgQEAgbXNnc3RyICJHSU7jgqTjg7Pjg4fjg4Pjgq/jgrnjga7kv53nlZnjg6rjgrnjg4jj ga7mnIDlpKfjgrXjgqTjgrrjgpLoqK3lrprjgIIiCiBtc2dpZCAiVENQIHVzZXIgdGltZW91 dC4iCiBtc2dzdHIgIlRDUOODpuODvOOCtuODvOOCv+OCpOODoOOCouOCpuODiOOAgiIKIAor IzogdXRpbHMvbWlzYy9ndWMuYzozNDMyCittc2dpZCAiTWF4aW11bSBsaWZldGltZSBvZiBh dXRvbm9tb3VzIHNlc3Npb24uIEluIG1pbnV0ZXMuIDMwMCBieSBkZWZhdWx0LiIKK21zZ3N0 ciAi6Ieq5b6L44K744OD44K344On44Oz44Gu5pyA5aSn5pyJ5Yq55pyf6ZaT44CCIOaVsOWI huOBpyDjg4fjg5Xjgqnjg6vjg4jjgafjga8zMDDjgafjgZnjgIIiCisKICM6IHV0aWxzL21p c2MvZ3VjX3RhYmxlcy5jOjM0NDIKIG1zZ2lkICJUaGUgc2l6ZSBvZiBodWdlIHBhZ2UgdGhh dCBzaG91bGQgYmUgcmVxdWVzdGVkLiIKIG1zZ3N0ciAi6KaB5rGC44GM6KaL6L6844G+44KM 44KL44OS44Ol44O844K444Oa44O844K444Gu44K144Kk44K644CCIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG8va28ucG8gYi9zcmMvYmFja2VuZC9wby9rby5wbwppbmRleCBmMzMw ZjNkYTdlLi43OTRiOWVmYjgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wby9rby5wbwor KysgYi9zcmMvYmFja2VuZC9wby9rby5wbwpAQCAtMjc2NzksNiArMjc2NzksMTAgQEAgbXNn c3RyICJHSU4g7J24642x7Iqk66W8IOychO2VnCDtjKzrlKkocGVuZGluZykg66qp66Gd7J2Y IOy1nOuMgCDtgazquLAg7KeA7KCVIgogbXNnaWQgIlRDUCB1c2VyIHRpbWVvdXQuIgogbXNn c3RyICIiCiAKKyM6IHV0aWxzL21pc2MvZ3VjLmM6MzM3NgorbXNnaWQgIk1heGltdW0gbGlm ZXRpbWUgb2YgYXV0b25vbW91cyBzZXNzaW9uLiBJbiBtaW51dGVzLiAzMDAgYnkgZGVmYXVs dC4iCittc2dzdHIgIuyekOycqCDshLjshZjsnZgg7LWc64yAIOyImOuqhS4g66qHIOu2hCDs lYjsl5Ag6riw67O47KCB7Jy866GcIDMwMCDsnoXri4jri6QuIgorCiAjOiB1dGlscy9taXNj L2d1Yy5jOjMzOTUKIG1zZ2lkICIiCiAiU2V0cyB0aGUgcGxhbm5lcidzIGVzdGltYXRlIG9m IHRoZSBjb3N0IG9mIGEgc2VxdWVudGlhbGx5IGZldGNoZWQgZGlzayBwYWdlLiIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BvL3BsLnBvIGIvc3JjL2JhY2tlbmQvcG8vcGwucG8KaW5k ZXggM2FjOWQwNDUxYy4uYTkxMDEyZjE2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG8v cGwucG8KKysrIGIvc3JjL2JhY2tlbmQvcG8vcGwucG8KQEAgLTI0MDgzLDYgKzI0MDgzLDEw IEBAIG1zZ3N0ciAiVXN0YXdpYSBtYWtzeW1hbG7EhSBsaWN6YsSZIGJ1Zm9yw7N3IHR5bWN6 YXNvd3ljaCB1xbx5d2FueWNoIHByemV6IGthxbxkCiBtc2dpZCAiU2V0cyB0aGUgVENQIHBv cnQgdGhlIHNlcnZlciBsaXN0ZW5zIG9uLiIKIG1zZ3N0ciAiVXN0YXdpYSBwb3J0IFRDUCwg bmEga3TDs3J5bSBuYXPFgnVjaHVqZSBzZXJ3ZXIuIgogCisjOiB1dGlscy9taXNjL2d1Yy5j OjE4NzcKK21zZ2lkICJNYXhpbXVtIGxpZmV0aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4g SW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1bHQuIgorbXNnc3RyICJNYWtzeW1hbG55IGN6YXMg dHJ3YW5pYSBzZXNqaSBhdXRvbm9taWN6bmVqLiBaYSBraWxrYSBtaW51dC4gRG9tecWbbG5p ZSAzMDAuIgorCiAjOiB1dGlscy9taXNjL2d1Yy5jOjE4ODYKIG1zZ2lkICJTZXRzIHRoZSBh Y2Nlc3MgcGVybWlzc2lvbnMgb2YgdGhlIFVuaXgtZG9tYWluIHNvY2tldC4iCiBtc2dzdHIg IlVzdGF3aWEgdXByYXduaWVuaWEgZG9zdMSZcHUgZ25pYXpkYSBkb21lbnkgVW5pa3NhLiIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BvL3B0X0JSLnBvIGIvc3JjL2JhY2tlbmQvcG8v cHRfQlIucG8KaW5kZXggMzdlNGEyOGYwNy4uZGJjMjY4MTY4YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG8vcHRfQlIucG8KKysrIGIvc3JjL2JhY2tlbmQvcG8vcHRfQlIucG8KQEAg LTE5ODI4LDYgKzE5ODI4LDEwIEBAIG1zZ3N0ciAiRGVmaW5lIG8gbsO6bWVybyBtw6F4aW1v IGRlIGJ1ZmZlcnMgdGVtcG9yw6FyaW9zIHV0aWxpemFkb3MgcG9yIGNhZGEgc2VzCiBtc2dp ZCAiU2V0cyB0aGUgVENQIHBvcnQgdGhlIHNlcnZlciBsaXN0ZW5zIG9uLiIKIG1zZ3N0ciAi RGVmaW5lIGEgcG9ydGEgVENQIHF1ZSBvIHNlcnZpZG9yIGVzY3V0YXLDoS4iCiAKKyM6IHV0 aWxzL21pc2MvZ3VjLmM6MTcyOAorbXNnaWQgIk1heGltdW0gbGlmZXRpbWUgb2YgYXV0b25v bW91cyBzZXNzaW9uLiBJbiBtaW51dGVzLiAzMDAgYnkgZGVmYXVsdC4iCittc2dzdHIgIlZp ZGEgw7p0aWwgbcOheGltYSBkYSBzZXNzw6NvIGF1dMO0bm9tYS4gRW0gbWludXRvcy4gMzAw IHBvciBwYWRyw6NvLiIKKwogIzogdXRpbHMvbWlzYy9ndWMuYzoxNzM3CiBtc2dpZCAiU2V0 cyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIG9mIHRoZSBVbml4LWRvbWFpbiBzb2NrZXQuIgog bXNnc3RyICJEZWZpbmUgYXMgcGVybWlzc8O1ZXMgZGUgYWNlc3NvIGRvIHNvcXVldGUgZGUg ZG9tw61uaW8gVW5peC4iCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wby9ydS5wbyBiL3Ny Yy9iYWNrZW5kL3BvL3J1LnBvCmluZGV4IGFlOWM1MGVlZDcuLjVjN2EwNjc2ZGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BvL3J1LnBvCisrKyBiL3NyYy9iYWNrZW5kL3BvL3J1LnBv CkBAIC0zMDQ1MCw3ICszMDQ1MCw3IEBAIG1zZ2lkICJTZXRzIHRoZSBtYXhpbXVtIGFsbG93 ZWQgZHVyYXRpb24gb2YgYW55IHN0YXRlbWVudC4iCiBtc2dzdHIgItCX0LDQtNCw0ZHRgiDQ v9GA0LXQtNC10LvRjNC90YPRjiDQtNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0LTQu9GPINC7 0Y7QsdC+0LPQviDQvtC/0LXRgNCw0YLQvtGA0LAuIgogCiAjOiB1dGlscy9taXNjL2d1Yy5j OjI2NDYgdXRpbHMvbWlzYy9ndWMuYzoyNjU3IHV0aWxzL21pc2MvZ3VjLmM6MjY2OAotIzog dXRpbHMvbWlzYy9ndWMuYzoyNjc5CisjOiB1dGlscy9taXNjL2d1Yy5jOjI2NzkgdXRpbHMv bWlzYy9ndWMuYzozNjM4CiBtc2dpZCAiQSB2YWx1ZSBvZiAwIHR1cm5zIG9mZiB0aGUgdGlt ZW91dC4iCiBtc2dzdHIgItCd0YPQu9C10LLQvtC1INC30L3QsNGH0LXQvdC40LUg0L7RgtC6 0LvRjtGH0LDQtdGCINGC0LDQudC8LdCw0YPRgi4iCiAKQEAgLTMxMDQzLDYgKzMxMDQzLDEw IEBAIG1zZ3N0ciAi0JfQsNC00LDRkdGCINC80LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw 0LfQvNC10YAg0YHQv9C40YHQutCwLdC+0YfQtdGACiBtc2dpZCAiVENQIHVzZXIgdGltZW91 dC4iCiBtc2dzdHIgItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNC5INGC0LDQudC8 0LDRg9GCIFRDUC4iCiAKKyM6IHV0aWxzL21pc2MvZ3VjLmM6MzU5MAorbXNnaWQgIk1heGlt dW0gbGlmZXRpbWUgb2YgYXV0b25vbW91cyBzZXNzaW9uLiBJbiBtaW51dGVzLiAzMDAgYnkg ZGVmYXVsdC4iCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQstGA0LXQvNGP INC20LjQt9C90Lgg0LDQstGC0L7QvdC+0LzQvdC+0Lkg0YHQtdGB0YHQuNC4LiDQkiDQvNC4 0L3Rg9GC0LDRhS4g0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4gMzAwLiIKKwogIzogdXRpbHMv bWlzYy9ndWMuYzozNjAwCiBtc2dpZCAiVGhlIHNpemUgb2YgaHVnZSBwYWdlIHRoYXQgc2hv dWxkIGJlIHJlcXVlc3RlZC4iCiBtc2dzdHIgItCX0LDQv9GA0LDRiNC40LLQsNC10LzRi9C5 INGA0LDQt9C80LXRgCDQvtCz0YDQvtC80L3Ri9GFINGB0YLRgNCw0L3QuNGGLiIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BvL3N2LnBvIGIvc3JjL2JhY2tlbmQvcG8vc3YucG8KaW5k ZXggMGRhMjBiNmQ0My4uMDNiZTI0NTg3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG8v c3YucG8KKysrIGIvc3JjL2JhY2tlbmQvcG8vc3YucG8KQEAgLTI5MDc1LDYgKzI5MDc1LDEw IEBAIG1zZ3N0ciAiU8OkdHRlciBtYXhpbWFsIHN0b3JsZWsgcMOlIHbDpG50ZWxpc3RhbiBm w7ZyIEdJTi1pbmRleC4iCiBtc2dpZCAiVENQIHVzZXIgdGltZW91dC4iCiBtc2dzdHIgIkFu dsOkbmRhcnRpbWVvdXQgZsO2ciBUQ1AuIgogCisjOiB1dGlscy9taXNjL2d1Yy5jOjM0MzIK K21zZ2lkICJNYXhpbXVtIGxpZmV0aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWlu dXRlcy4gMzAwIGJ5IGRlZmF1bHQuIgorbXNnc3RyICJNYXhpbWFsIGxpdnNsw6RuZ2QgZsO2 ciBhdXRvbm9tIHNlc3Npb24uIE9tIG7DpWdyYSBtaW51dGVyLiAzMDAgc29tIHN0YW5kYXJk LiIKKwogIzogdXRpbHMvbWlzYy9ndWNfdGFibGVzLmM6MzQ0MgogbXNnaWQgIlRoZSBzaXpl IG9mIGh1Z2UgcGFnZSB0aGF0IHNob3VsZCBiZSByZXF1ZXN0ZWQuIgogbXNnc3RyICJTdG9y bGVrZW4gcMOlIHN0b3JhIHNpZG9yIHNrYWxsIGjDpG10YXMuIgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG8vdHIucG8gYi9zcmMvYmFja2VuZC9wby90ci5wbwppbmRleCBiNzkxZTg4 NmI5Li40ZGYxY2NkNjdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wby90ci5wbworKysg Yi9zcmMvYmFja2VuZC9wby90ci5wbwpAQCAtMjUxODcsNiArMjUxODcsMTAgQEAgbXNnc3Ry ICJHSU4gaW5kZWtzaSBpw6dpbiBvbGFuIGJla2xlbWUgKHBlbmRpbmcpIGxpc3Rlc2luaW4g YXphbWkgYm95dXR1bnUgYXlhcmwKIG1zZ2lkICJUQ1AgdXNlciB0aW1lb3V0LiIKIG1zZ3N0 ciAiIgogCisjOiB1dGlscy9taXNjL2d1Yy5jOjM0MzIKK21zZ2lkICJNYXhpbXVtIGxpZmV0 aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1bHQu IgorbXNnc3RyICJNYWtzaW11bSDDtnplcmsgb3R1cnVtIMO2bXLDvC4gRGFraWthbGFyIGnD p2luZGUuIHZhcnNhecSxbGFuIG9sYXJhayAzMDAuIgorCiAjOiB1dGlscy9taXNjL2d1Yy5j OjMyMDgKIG1zZ2lkICJTZXRzIHRoZSBwbGFubmVyJ3MgZXN0aW1hdGUgb2YgdGhlIGNvc3Qg b2YgYSBzZXF1ZW50aWFsbHkgZmV0Y2hlZCBkaXNrIHBhZ2UuIgogbXNnc3RyICJExLFza3Rl biBzxLFyYXlsYSBzYXlmYSBva3VtYXPEsSBpw6dpbiBoYXJjYW5hY2FrIGnFn2xlbSB6YW1h bsSxIHRhaG1pbmluaSBiZWxpcnRpeW9yLiIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv L3VrLnBvIGIvc3JjL2JhY2tlbmQvcG8vdWsucG8KaW5kZXggMTA5NWZkOTEzOS4uYTFiM2E3 NDc3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG8vdWsucG8KKysrIGIvc3JjL2JhY2tl bmQvcG8vdWsucG8KQEAgLTI3Nzk0LDYgKzI3Nzk0LDEwIEBAIG1zZ3N0ciAi0JLRgdGC0LDQ vdC+0LLQu9GO0ZQg0LzQsNC60YHQuNC80LDQu9GM0L3QuNC5INGA0L7Qt9C80ZbRgCDRgdC/ 0LjRgdC60YMtCiBtc2dpZCAiVENQIHVzZXIgdGltZW91dC4iCiBtc2dzdHIgItCi0LDQudC8 0LDRg9GCINC60L7RgNC40YHRgtGD0LLQsNGH0LAgVENQLiIKIAorIzogdXRpbHMvbWlzYy9n dWMuYzozNjAwCittc2dpZCAiTWF4aW11bSBsaWZldGltZSBvZiBhdXRvbm9tb3VzIHNlc3Np b24uIEluIG1pbnV0ZXMuIDMwMCBieSBkZWZhdWx0LiIKK21zZ3N0ciAi0JzQsNC60YHQuNC8 0LDQu9GM0L3QuNC5INGH0LDRgSDQsNCy0YLQvtC90L7QvNC90L7Qs9C+INGB0LXQsNC90YHR gy4g0KMg0YXQstC40LvQuNC90LDRhS4g0JfQsCDQt9Cw0LzQvtCy0YfRg9Cy0LDQvdC90Y/Q vCAzMDAuIgorCiAjOiB1dGlscy9taXNjL2d1Yy5jOjM2MTAKIG1zZ2lkICJUaGUgc2l6ZSBv ZiBodWdlIHBhZ2UgdGhhdCBzaG91bGQgYmUgcmVxdWVzdGVkLiIKIG1zZ3N0ciAi0KDQvtC3 0LzRltGAINCy0LXQu9C40YfQtdC30L3QvtGXINGB0YLQvtGA0ZbQvdC60LgsINGP0LrRgyDQ vdC10L7QsdGF0ZbQtNC90L4g0LfQsNGC0YDQtdCx0YPQstCw0YLQuC4iCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wby96aF9DTi5wbyBiL3NyYy9iYWNrZW5kL3BvL3poX0NOLnBvCmlu ZGV4IDU3NDY4NGQ3NzUuLjQ4YmFmZjQ2ZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv L3poX0NOLnBvCisrKyBiL3NyYy9iYWNrZW5kL3BvL3poX0NOLnBvCkBAIC0yNTUxNCw2ICsy NTUxNCwxMCBAQCBtc2dzdHIgIuS4ukdJTue0ouW8leiuvue9ruW+heWkhOeQhuWIl+ihqOea hOacgOWkp+WwuuWvuOOAgiIKIG1zZ2lkICJUQ1AgdXNlciB0aW1lb3V0LiIKIG1zZ3N0ciAi VENQ55So5oi36LaF5pe2LiIKIAorIzogdXRpbHMvbWlzYy9ndWMuYzozMTkxCittc2dpZCAi TWF4aW11bSBsaWZldGltZSBvZiBhdXRvbm9tb3VzIHNlc3Npb24uIEluIG1pbnV0ZXMuIDMw MCBieSBkZWZhdWx0LiIKK21zZ3N0ciAi6Ieq5rK75Lya6K+d55qE5pyA6ZW/55Sf5a2Y5pyf 44CCIOWHoOWIhumSn+WQjuOAgiDpu5jorqTmg4XlhrXkuIvkuLozMDDjgIIiCisKICM6IHV0 aWxzL21pc2MvZ3VjLmM6MzIxMAogbXNnaWQgIlNldHMgdGhlIHBsYW5uZXIncyBlc3RpbWF0 ZSBvZiB0aGUgY29zdCBvZiBhIHNlcXVlbnRpYWxseSBmZXRjaGVkIGRpc2sgcGFnZS4iCiBt c2dzdHIgIuiuvue9ruiuoeWIkuWZqOWvuemhuuW6j+iOt+WPluejgeebmOmhteeahOW8gOmU gOS8sOeulyIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAzYzk5Y2Y2MDQ3 Li4yMjI3NTg2ZGIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29y a2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0zMCw2 ICszMCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUg InRjb3AvYXV0b25vbW91cy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNs dWRlICJ1dGlscy9hc2NpaS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0x MzIsNiArMTMzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdAogCXsKIAkJIlBhcmFsbGVsQXBw bHlXb3JrZXJNYWluIiwgUGFyYWxsZWxBcHBseVdvcmtlck1haW4KIAl9LAorCXsKKwkJIkF1 dG9ub21vdXNTZXNzaW9uTWFpbiIsIEF1dG9ub21vdXNTZXNzaW9uTWFpbgorCX0sCiAJewog CQkiVGFibGVzeW5jV29ya2VyTWFpbiIsIFRhYmxlc3luY1dvcmtlck1haW4KIAl9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC90Y29wL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvdGNvcC9N YWtlZmlsZQppbmRleCBmNjYyYTdkZDFjLi5iNzliZjI1NGI3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC90Y29wL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvTWFrZWZpbGUK QEAgLTEzLDYgKzEzLDcgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4KIGluY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAogT0JKUyA9IFwKKwlhdXRvbm9t b3VzLm8gXAogCWNtZHRhZy5vIFwKIAlkZXN0Lm8gXAogCWZhc3RwYXRoLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9hdXRvbm9tb3VzLmMgYi9zcmMvYmFja2VuZC90Y29w L2F1dG9ub21vdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45 N2MxZTE4ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9hdXRvbm9t b3VzLmMKQEAgLTAsMCArMSwxMzE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogYXV0b25vbW91cy5jCisgKgkJSW1wbGVtZW50YXRpb24gb2YgYXV0b25vbW91cyB0cmFu c2FjdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNCwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNy Yy9iYWNrZW5kL3Rjb3AvYXV0b25vbW91cy5jCisgKgorICoKKyAqIFRoaXMgaW1wbGVtZW50 cyBhIEMgQVBJIHRvIGxhdW5jaCBhbiBhdXRvbm9tb3VzIHNlc3Npb24gYW5kIHJ1biBTUUwg cXVlcmllcworICogaW4gaXQuIFRoZSBzZXNzaW9uIGxvb2tzIG11Y2ggbGlrZSBhIG5vcm1h bCBkYXRhYmFzZSBjb25uZWN0aW9uLCBidXQgaXQgaXMKKyAqIGFsd2F5cyB0byB0aGUgc2Ft ZSBkYXRhYmFzZSwgYW5kIHRoZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIG5lZWRlZC4gVGhl CisgKiAiYmFja2VuZCIgZm9yIHRoYXQgY29ubmVjdGlvbiBpcyBhIGJhY2tncm91bmQgd29y a2VyLiBEeW5hbWljIHNoYXJlZCBtZW1vcnkgKGRzbSkKKyAqIGlzIHVzZWQgdG8gc3RvcmUg Zml4ZWQgZGF0YSBhbmQgbWVzc2FnZSBxdWV1ZXMgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBi ZXR3ZWVuCisgKiBub3JtYWwgYmFja2VuZCBhbmQgdGhlIGF1dG9ub21vdXMgc2Vzc2lvbi4g VGhleSBjb21tdW5pY2F0ZSB1c2luZyAyIG1lc3NhZ2UgcXVldWVzCisgKiBvdmVyIHRoZSBQ b3N0Z3JlcyBGRS9CRSBwcm90b2NvbC4KKyAqIEF1dG9ub21vdXMgc2Vzc2lvbidzIGVycm9y cyBhcmUgc2VudCB0byBiYWNrZW5kLgorICogQXV0b25vbW91cyBzZXNzaW9ucyBhcmUgdGFr ZW4gZnJvbSB0aGUgcG9vbCwgd2hlbiBhdXRvbm9tb3VzIGZ1bmN0aW9uIGJlZ2lucyB0byBl eGVjdXRlLgorICogRWFjaCBiYWNrZW5kIGxhemlseSBjcmVhdGVzIHBvb2wsIHBvb2xzIGFy ZW4ndCBzaGFyZWQgYmV0d2VlbiBiYWNrZW5kcy4KKyAqIAorICogIAorICogU3RydWN0dXJl IG9mIGRzbToKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKKyAqIHwJdGFibGUgb2YgY29udGVudHMgKHRvYykJCQkJCXwKKyAqICstLS0tLS0t LS0tLS0tLS0tLUZpeGVkIGRhdGEtLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwJZGF0YWJhc2Vf aWQ7CQkJCQkJCXwKKyAqIHwJYXV0aGVudGljYXRlZF91c2VyX2lkOwkJCQkJfAorICogfAlj dXJyZW50X3VzZXJfaWQ7CQkJCQkJfAorICogfAlzZWNfY29udGV4dDsJCQkJCQkJfAorICog Ky0tLS0tLS0tLS0tLS0tLS0tc2htX21xcy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfAli YWNrZW5kIC0+IGF1dG9ub21vdXMgc2Vzc2lvbiBzaG1fbXEJfAorICogfAlhdXRvbm9tb3Vz IHNlc3Npb24gLT4gYmFja2VuZCBzaG1fbXEJfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqIFdBUk5JTkc6IGN1cnJlbnRseSBu b3QgYWxsIHN0YXRlbWVudHMgYXJlIGZ1bGx5IHN1cHBvcnRlZCBmb3IgZXhlY3V0aW9uIGlu IGF1dG9ub21vdXMgc2Vzc2lvbnMuCisgKiBPbmx5IDEgYXV0b25vbW91cyBzZXNzaW9uIGV4 ZWN1dGVzIGV2ZXJ5dGhpbmcgc2VxdWVudGlhbGx5LiBBdXRvbm9tb3VzIHNlc3Npb25zIAor ICogY3JlYXRlIGVhY2ggb3RoZXIgc2VxdWVudGlhbGx5IHJlY3Vyc2l2ZWx5IGlmIG5lc3Rl ZCBjYWxscyBvZiBhdXRvbm9tb3VzIGZ1bmN0aW9ucy4KKyAqIElmIHRoZSBzdXBwb3J0IGZv ciB0aGUgZXhlY3V0aW9uIG9mIGEgc3RhdGVtZW50IGluIGFuIGF1dG9ub21vdXMgc2Vzc2lv biBpcyBpbmNvbXBsZXRlLAorICogdGhlbiBtb3JlIHNlc3Npb25zIGNhbiBiZSB0YWtlbiBm cm9tIHRoZSBwb29sLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgi CisjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKKyNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5o IgorI2luY2x1ZGUgImxpYnBxL3BxbXEuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgor I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9kc20uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2lu Y2x1ZGUgInN0b3JhZ2Uvc2htX21xLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1fdG9jLmgi CisjaW5jbHVkZSAidGNvcC9hdXRvbm9tb3VzLmgiCisjaW5jbHVkZSAidGNvcC90Y29wcHJv dC5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorI2luY2x1ZGUgInV0aWxz L3Jlc293bmVyLmgiCisKKworLyogVW5pcXVlIG51bWJlciB0byBpZGVudGlmeSBhdXRvbm9t b3VzIHRhYmxlLW9mLWNvbnRlbnRzICovIAorI2RlZmluZSBBVVRPTk9NT1VTX01BR0lDCQkJ CTB4NTA2NzQyNjcKKworLyogVGFibGUtb2YtY29udGVudHMgY29uc3RhbnRzIGZvciBvdXIg ZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuICovCisjZGVmaW5lIEFVVE9OT01PVVNf S0VZX0ZJWEVEX0RBVEEJCTAKKyNkZWZpbmUgQVVUT05PTU9VU19LRVlfR1VDCQkJCTEKKyNk ZWZpbmUgQVVUT05PTU9VU19LRVlfQ09NTUFORF9RVUVVRQkyCisjZGVmaW5lIEFVVE9OT01P VVNfS0VZX1JFU1BPTlNFX1FVRVVFCTMKKyNkZWZpbmUgQVVUT05PTU9VU19OS0VZUwkJCQk0 CisKKy8qIFNpemUgb2Ygc2hhcmVkIG1lc3NhZ2UgcXVldWVzIHVzZWQgZm9yIGNvbW11bmlj YXRpb24gKi8KKyNkZWZpbmUgQVVUT05PTU9VU19RVUVVRV9TSVpFCQkJMTYzODQKKworLyog UG9vbCBjb25zdGFudHMgCisgVW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMsIG9ubHkgMSBhdXRv bm9tb3VzIHNlc3Npb24gZG9lcyBldmVyeXRoaW5nLgorIFRoZXkgc2VxdWVudGlhbGx5IHJl Y3Vyc2l2ZWx5IGNyZWF0ZSBlYWNoIG90aGVyIGlmIG5lc3RlZCBjYWxscyBvZiBhdXRvbm9t b3VzIGZ1bmN0aW9ucy4KKyBJZiB0aGUgc3VwcG9ydCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBh IHN0YXRlbWVudCBpbiBhbiBhdXRvbm9tb3VzIHNlc3Npb24gaXMgaW5jb21wbGV0ZSwKKyB0 aGVuIG1vcmUgc2Vzc2lvbnMgY2FuIGJlIHRha2VuIGZyb20gdGhlIHBvb2wuCisgKi8KK3N0 YXRpYyBjb25zdCBpbnQgYXV0b25vbW91c19wb29sX2luaXRfY2FwYWNpdHkgPSAxOworc3Rh dGljIGNvbnN0IGludCBhdXRvbm9tb3VzX3Bvb2xfbWF4X2NhcGFjaXR5ID0gMTAwOworCisv KiAKKyAqIFJlc3RhcnQgc2Vzc2lvbiBieSBsaWZldGltZS4gU2Vzc2lvbiBjb250YWlucyBy ZXNvdXJjZXM6IG1lbW9yeSwgY2FjaGVzLgorICogSW4gb3JkZXIgdG8gcHJldmVudCBpbmZp bml0ZSBncm93IG9mIHJlc291cmNlcywgY2xlYW4gdGhlbSB1c2luZyBzZXNzaW9uIGRlc3Ry b3lpbmcuCisgKi8KK2ludCBhdXRvbm9tb3VzX3Nlc3Npb25fbGlmZXRpbWUgPSAwOworCisv KiBGaXhlZC1zaXplIGRhdGEgcGFzc2VkIHZpYSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2Vn bWVudC4gKi8KK3R5cGVkZWYgc3RydWN0IEF1dG9ub21vdXNTZXNzaW9uRml4ZWREYXRhCit7 CisJT2lkIGRhdGFiYXNlX2lkOworCU9pZCBhdXRoZW50aWNhdGVkX3VzZXJfaWQ7CisJT2lk IGN1cnJlbnRfdXNlcl9pZDsKKwlpbnQgc2VjX2NvbnRleHQ7Cit9IEF1dG9ub21vdXNTZXNz aW9uRml4ZWREYXRhOworCisvKiBBdXRvbm9tb3VzUmVzdWx0IC0tIHF1ZXJ5IHJlc3VsdCAq LworCisvKiBBdXRvbm9tb3VzIHNlc3Npb24gaGFuZGxlICovCitzdHJ1Y3QgQXV0b25vbW91 c1Nlc3Npb24KK3sKKwlkc21fc2VnbWVudCAqc2VnOworCUJhY2tncm91bmRXb3JrZXJIYW5k bGUgKndvcmtlcl9oYW5kbGU7CisJc2htX21xX2hhbmRsZSAqY29tbWFuZF9xaDsKKwlzaG1f bXFfaGFuZGxlICpyZXNwb25zZV9xaDsKKwlpbnQJCXRyYW5zYWN0aW9uX3N0YXR1czsKKwlU aW1lc3RhbXBUeiBjcmVhdGlvbl90aW1lOworCWJvb2wgaW5fdXNlOworfTsKKworLyogQXV0 b25vbW91cyBzZXNzaW9uIGhhbmRsZSB3aGVuIHVzZWQgcHJvdG9jb2wgUHJlcGFyZS1FeGVj dXRlICovCitzdHJ1Y3QgQXV0b25vbW91c1ByZXBhcmVkU3RhdGVtZW50Cit7CisJQXV0b25v bW91c1Nlc3Npb24gKnNlc3Npb247CisJT2lkCQkgICAqYXJndHlwZXM7CisJVHVwbGVEZXNj CXR1cGRlc2M7Cit9OworCisvKiBQb29sIG9mIGF1dG9ub21vdXMgc2Vzc2lvbnMgKi8KK3R5 cGVkZWYgc3RydWN0IEF1dG9ub21vdXNQb29sCit7CisJdW5zaWduZWQgY2FwYWNpdHk7CisJ dW5zaWduZWQgc2l6ZTsKKwl1bnNpZ25lZCBhY3RpdmU7CisJQXV0b25vbW91c1Nlc3Npb24g KipzZXNzaW9uczsKK30gQXV0b25vbW91c1Bvb2w7CitBdXRvbm9tb3VzUG9vbCAqYXV0b25v bW91c19wb29sID0gTlVMTDsKKworTWVtb3J5Q29udGV4dCBBdXRvbm9tb3VzQ29udGV4dCA9 IE5VTEw7IC8qIE5PVEU6IG1vdmUgdG8gc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMg Ki8KK1Jlc291cmNlT3duZXIgQXV0b25vbW91c1Jlc291cmNlT3duZXIgPSBOVUxMOyAvKiBO T1RFOiBtb3ZlIHRvIHNyYy9iYWNrZW5kL3V0aWxzL3Jlc293bmVyL3Jlc293bmVyLmMgKi8K KworLyogCisgKiBTdGFjayBzdG9yZXMgaW5mb3JtYXRpb24gd2hhdCBhdXRvbm9tb3VzIHNl c3Npb25zIGNvcnJlc3BvbmRzIHRvIGVhY2ggc3ViYmxvY2sKKyAqIGlmIFBML3BnU1FMIGZ1 bmN0aW9uIGNvbnRhaW5zIHN1YmJsb2Nrcy4KKyAqIFNvbWUgc3ViYmxvY2tzIG1heSBiZSBh dXRvbm9tb3VzLCBvdGhlcnMgbm90LiBJbmZvIGFib3V0IGF1dG9ub21pY2l0eSBpcyBjb250 YWluZWQgaW4gZXN0YXRlIHN0cnVjdHVyZS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGNyZWF0 ZWQgZm9yIGVhY2ggUEwvcGdTUUwgZnVuY3Rpb24gY2FsbCBhbmQgcGFzc2VkIHRocm91Z2gg ZXhlY19zdG10XyogZnVuY3Rpb25zIChzZWUgcGxfZXhlYy5jKS4KKyAqIFNvIGVzdGF0ZS0+ YXV0b25vbW91cyB3aWxsIG92ZXJ3cml0dGVuIGlmIHNldmVyYWwgc3ViYmxvY2tzIGFyZSBh dXRvbm9tb3VzLgorICogU3RhY2sgaXMgdXNlZCB0byByZXN0b3JlIGVzdGF0ZS0+YXV0b25v bW91cyBmb3IgcGFyZW50IGJsb2NrIGFmdGVyIGNoaWxkIGJsb2NrIGlzIGZpbmlzaGVkLgor ICovCitzbGlzdF9oZWFkIEF1dG9ub21vdXNTdGFjayA9IFNMSVNUX1NUQVRJQ19JTklUKEF1 dG9ub21vdXNTdGFjayk7CisKK2V4dGVybiB2b2lkIGluaXRfcm93X2Rlc2NyaXB0aW9uX2J1 ZigpOworZXh0ZXJuIHZvaWQgKCpjaGVja19jbGllbnRfZW5jb2RpbmdfaG9vaykodm9pZCk7 CisKK3N0YXRpYyBUaW1lc3RhbXBUeiBUaW1lc3RhbXBUelBsdXNNaW51dGVzKFRpbWVzdGFt cFR6IHR6LCBpbnQgbWluKTsKKworc3RhdGljIHZvaWQgQ3JlYXRlQXV0b25vbW91c1Jlc291 cmNlT3duZXIodm9pZCk7CitzdGF0aWMgdm9pZCBCZWZvcmVSZWxlYXNlQXV0b25vbW91c1Jl c291cmNlc0NhbGxiYWNrKGludCBjb2RlLCBEYXR1bSBhcmcpOworc3RhdGljIHZvaWQgUmVs ZWFzZUF1dG9ub21vdXNSZXNvdXJjZXNDYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKTsK K3N0YXRpYyB2b2lkIFJlbGVhc2VBdXRvbm9tb3VzUmVzb3VyY2VzKGJvb2wgaXNDb21taXQp OworCitzdGF0aWMgdm9pZCBBdXRvbm9tb3VzUG9vbEluaXQodm9pZCk7CitzdGF0aWMgdm9p ZCBBdXRvbm9tb3VzUG9vbERlc3Ryb3kodm9pZCk7CitzdGF0aWMgQXV0b25vbW91c1Nlc3Np b24gKkF1dG9ub21vdXNTZXNzaW9uU3RhcnQodm9pZCk7CitzdGF0aWMgdm9pZCBBdXRvbm9t b3VzU2Vzc2lvbkVuZChBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbik7CitzdGF0aWMgdm9p ZCBBdXRvbm9tb3VzU2Vzc2lvbkVuZEVycm9yKEF1dG9ub21vdXNTZXNzaW9uICpzZXNzaW9u KTsKK3N0YXRpYyB2b2lkIEF1dG9ub21vdXNTZXNzaW9uRnJlZVJlc291cmNlcyhBdXRvbm9t b3VzU2Vzc2lvbiAqc2Vzc2lvbik7CisKK3N0YXRpYyB2b2lkIHNobV9tcV9yZWNlaXZlX3N0 cmluZ2luZm8oc2htX21xX2hhbmRsZSAqcWgsIFN0cmluZ0luZm9EYXRhICptc2cpOworc3Rh dGljIHZvaWQgYXV0b25vbW91c19jaGVja19jbGllbnRfZW5jb2RpbmdfaG9vayh2b2lkKTsK K3N0YXRpYyBUdXBsZURlc2MgVHVwbGVEZXNjX2Zyb21fUm93RGVzY3JpcHRpb24oU3RyaW5n SW5mbyBtc2cpOworc3RhdGljIEhlYXBUdXBsZSBIZWFwVHVwbGVfZnJvbV9EYXRhUm93KFR1 cGxlRGVzYyB0dXBkZXNjLCBTdHJpbmdJbmZvIG1zZyk7CitzdGF0aWMgdm9pZCBmb3J3YXJk X05vdGlmeVJlc3BvbnNlKFN0cmluZ0luZm8gbXNnKTsKK3N0YXRpYyB2b2lkIHJldGhyb3df ZXJyb3Jub3RpY2UoU3RyaW5nSW5mbyBtc2csIGludCBtaW5fZWxldmVsKTsKK3N0YXRpYyB2 b2lkIGludmFsaWRfcHJvdG9jb2xfbWVzc2FnZShjaGFyIG1zZ3R5cGUsIGludCBwaGFzZSkg cGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CisKKworLyogCisgKiBBZGQgbWludXRlcyB0byBU aW1lc3RhbXBUeiB2YWx1ZXMKKyAqLworc3RhdGljIFRpbWVzdGFtcFR6IFRpbWVzdGFtcFR6 UGx1c01pbnV0ZXMoVGltZXN0YW1wVHogdHosIGludCBtaW4pCit7CisJcmV0dXJuIHR6ICsg KChUaW1lc3RhbXBUeiltaW4gICogNjAgKiAxMDAwICogMTAwMCk7Cit9CisKKy8qCisgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEVzdGFibGlzaCBhbiBBdXRvbm9t b3VzUmVzb3VyY2VPd25lciBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKyAqIE5PVEU6IG1v dmUgdG8gc3JjL2JhY2tlbmQvdXRpbHMvcmVzb3duZXIvcmVzb3duZXIuYworICovCitzdGF0 aWMgdm9pZAorQ3JlYXRlQXV0b25vbW91c1Jlc291cmNlT3duZXIodm9pZCkKK3sKKwlBc3Nl cnQoQXV0b25vbW91c1Jlc291cmNlT3duZXIgPT0gTlVMTCk7CisJQXV0b25vbW91c1Jlc291 cmNlT3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKE5VTEwsICJBdXRvbm9tb3VzIik7CisJ LyoKKwkgKiBSZWdpc3RlciBhIHNobWVtLWV4aXQgY2FsbGJhY2sgZm9yIGNsZWFudXAgb2Yg YXV0b25vbW91cy1wcm9jZXNzIHJlc291cmNlCisJICogb3duZXIuIChUaGlzIG5lZWRzIHRv IHJ1biBhZnRlciwgZS5nLiwgU2h1dGRvd25YTE9HLikKKwkgKi8KKwliZWZvcmVfc2htZW1f ZXhpdChCZWZvcmVSZWxlYXNlQXV0b25vbW91c1Jlc291cmNlc0NhbGxiYWNrLCAoRGF0dW0p MCk7CisJb25fc2htZW1fZXhpdChSZWxlYXNlQXV0b25vbW91c1Jlc291cmNlc0NhbGxiYWNr LCAoRGF0dW0pMCk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSByb3V0aW5lIHRvIHJlbGVh c2UgYWxsIHJlc291cmNlcyB0cmFja2VkIGluCisgKiBBdXRvbm9tb3VzUmVzb3VyY2VPd25l ciAoYnV0IHRoYXQgcmVzb3duZXIgaXMgbm90IGRlc3Ryb3llZCBoZXJlKS4KKyAqIFdhcm4g YWJvdXQgbGVha2VkIHJlc291cmNlcyBpZiBpc0NvbW1pdCBpcyB0cnVlLgorICogTk9URTog bW92ZSB0byBzcmMvYmFja2VuZC91dGlscy9yZXNvd25lci9yZXNvd25lci5jCisgKi8KK3N0 YXRpYyB2b2lkCitSZWxlYXNlQXV0b25vbW91c1Jlc291cmNlcyhib29sIGlzQ29tbWl0KQor eworCS8qCisJICogQXQgdGhpcyB3cml0aW5nLCB0aGUgb25seSB0aGluZyB0aGF0IGNvdWxk IGFjdHVhbGx5IGdldCByZWxlYXNlZCBpcworCSAqIGF1dG9ub21vdXMgcG9vbDsgYnV0IHdl IG1heSBhcyB3ZWxsIGRvIHRoZSBmdWxsIHJlbGVhc2UgcHJvdG9jb2wuCisJICovCisJUmVz b3VyY2VPd25lclJlbGVhc2UoQXV0b25vbW91c1Jlc291cmNlT3duZXIsCisJCQkJCQkgUkVT T1VSQ0VfUkVMRUFTRV9CRUZPUkVfTE9DS1MsCisJCQkJCQkgaXNDb21taXQsIHRydWUpOwor CVJlc291cmNlT3duZXJSZWxlYXNlKEF1dG9ub21vdXNSZXNvdXJjZU93bmVyLAorCQkJCQkJ IFJFU09VUkNFX1JFTEVBU0VfTE9DS1MsCisJCQkJCQkgaXNDb21taXQsIHRydWUpOworCVJl c291cmNlT3duZXJSZWxlYXNlKEF1dG9ub21vdXNSZXNvdXJjZU93bmVyLAorCQkJCQkJIFJF U09VUkNFX1JFTEVBU0VfQUZURVJfTE9DS1MsCisJCQkJCQkgaXNDb21taXQsIHRydWUpOwor fQorCisvKgorICogU2htZW0tZXhpdCBjYWxsYmFjaywgZnJlZXMgcmVzb3VyY2VzLgorICog V2FybiBhYm91dCBsZWFrZWQgcmVzb3VyY2VzIGlmIHByb2Nlc3MgZXhpdCBjb2RlIGlzIHpl cm8gKGllIG5vcm1hbCkuCisgKiBOT1RFOiBtb3ZlIHRvIHNyYy9iYWNrZW5kL3V0aWxzL3Jl c293bmVyL3Jlc293bmVyLmMKKyAqLworc3RhdGljIHZvaWQKK0JlZm9yZVJlbGVhc2VBdXRv bm9tb3VzUmVzb3VyY2VzQ2FsbGJhY2soaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKwlBdXRv bm9tb3VzUG9vbERlc3Ryb3koKTsKK30KKworLyoKKyAqIE5PVEU6IG1vdmUgdG8gc3JjL2Jh Y2tlbmQvdXRpbHMvcmVzb3duZXIvcmVzb3duZXIuYworICovCitzdGF0aWMgdm9pZAorUmVs ZWFzZUF1dG9ub21vdXNSZXNvdXJjZXNDYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKQor eworCWJvb2wJCWlzQ29tbWl0ID0gKGNvZGUgPT0gMCk7CisJUmVsZWFzZUF1dG9ub21vdXNS ZXNvdXJjZXMoaXNDb21taXQpOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKy8qCisgKiBJbml0aWFsaXplIHBvb2wgb2YgYXV0b25vbW91cyBzZXNzaW9ucwor ICovCitzdGF0aWMgdm9pZAorQXV0b25vbW91c1Bvb2xJbml0KHZvaWQpCit7CisJQ3JlYXRl QXV0b25vbW91c1Jlc291cmNlT3duZXIoKTsKKwlBdXRvbm9tb3VzQ29udGV4dCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCSJBdXRvbm9tb3Vz Q29udGV4dCIsCisJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJYXV0b25vbW91 c19wb29sID0gKEF1dG9ub21vdXNQb29sICopIE1lbW9yeUNvbnRleHRBbGxvYyhBdXRvbm9t b3VzQ29udGV4dCwgc2l6ZW9mKEF1dG9ub21vdXNQb29sKSk7CisJYXV0b25vbW91c19wb29s LT5jYXBhY2l0eSA9IGF1dG9ub21vdXNfcG9vbF9pbml0X2NhcGFjaXR5OworCWF1dG9ub21v dXNfcG9vbC0+c2l6ZSA9IDA7CisJYXV0b25vbW91c19wb29sLT5hY3RpdmUgPSAwOworCWF1 dG9ub21vdXNfcG9vbC0+c2Vzc2lvbnMgPSAoQXV0b25vbW91c1Nlc3Npb24gKiopIE1lbW9y eUNvbnRleHRBbGxvYyhBdXRvbm9tb3VzQ29udGV4dCwKKwkJCQkJCQkJCQkJCQlhdXRvbm9t b3VzX3Bvb2wtPmNhcGFjaXR5ICogc2l6ZW9mKEF1dG9ub21vdXNTZXNzaW9uICopKTsKK30K KworLyoKKyAqIFBvcCBhdXRvbm9tb3VzIHNlc3Npb24gZnJvbSBzdGFjayBvZiBzdWJibG9j a3MgYWZ0ZXIgY2hpbGQgc3ViYmxvY2sgaXMgZmluaXNoZWQKKyAqLworQXV0b25vbW91c1Nl c3Npb24gKgorQXV0b25vbW91c1Nlc3Npb25Qb3BTdGFja1Nlc3Npb24oYm9vbCBpc0Jsb2Nr QXV0b25vbW91cykKK3sKKwlBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbiA9IE5VTEw7CisJ LyogUG9wIFBMcGdTUUxfc3RtdF9ibG9jayBmcm9tIHN0YWNrICovCisJc2xpc3Rfbm9kZSAq bm9kZSA9IHNsaXN0X3BvcF9oZWFkX25vZGUoJkF1dG9ub21vdXNTdGFjayk7CisJaWYgKGlz QmxvY2tBdXRvbm9tb3VzKQorCXsKKwkJLyogRW5kIEF1dG9ub21vdXMgc2Vzc2lvbiAqLwor CQlzbGlzdF9pdGVyIGl0ZXI7CisJCXNlc3Npb24gPSBzbGlzdF9jb250YWluZXIoQXV0b25v bW91c1N0YWNrTm9kZSwgbm9kZSwgbm9kZSktPnNlc3Npb247CisJCUF1dG9ub21vdXNTZXNz aW9uUmVsZWFzZShzZXNzaW9uKTsKKwkJc2xpc3RfZm9yZWFjaChpdGVyLCAmQXV0b25vbW91 c1N0YWNrKQorCQl7CisJCQlzZXNzaW9uID0gc2xpc3RfY29udGFpbmVyKEF1dG9ub21vdXNT dGFja05vZGUsIG5vZGUsIGl0ZXIuY3VyKS0+c2Vzc2lvbjsKKwkJCWlmKHNlc3Npb24pIHsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlwZnJlZShub2RlKTsKKwlyZXR1cm4gc2Vz c2lvbjsKK30KKworLyoKKyAqIFVud2luZCBzdGFjayBvZiBhdXRvbm9tb3VzIHNlc3Npb25z IGFmdGVyIG9mIFNRTC1leGNlcHRpb24uCisgKiBBZnRlciB0aGF0IHJldHVybiBmaXJzdCBm b3VuZCBhdXRvbm9tb3VzIHNlc3Npb24KKyAqLworQXV0b25vbW91c1Nlc3Npb24gKgorQXV0 b25vbW91c1Nlc3Npb25Qb3BTdGFja1Nlc3Npb25FeGNlcHRpb24odm9pZCAqYmxvY2spCit7 CisJc2xpc3Rfbm9kZSAqbm9kZSA9IE5VTEw7CisJdm9pZCAqc3RhY2tfYmxvY2sgPSBOVUxM OworCUF1dG9ub21vdXNTZXNzaW9uICpzZXNzaW9uID0gTlVMTDsKKwlzbGlzdF9pdGVyIGl0 ZXI7CisKKwkvKiBQb3AgUExwZ1NRTF9zdG10X2Jsb2NrcyBmcm9tIHN0YWNrIGFmdGVyIGV4 Y2VwdGlvbgorCSAqIEFsc28gZW5kIGNvcnJlc3BvbmRpbmcgQXV0b25vbW91cyBzZXNzaW9u cworCSAqLworCXdoaWxlKCFzbGlzdF9pc19lbXB0eSgmQXV0b25vbW91c1N0YWNrKSkgewor CQlub2RlID0gc2xpc3RfaGVhZF9ub2RlKCZBdXRvbm9tb3VzU3RhY2spOworCQlzdGFja19i bG9jayA9IHNsaXN0X2NvbnRhaW5lcihBdXRvbm9tb3VzU3RhY2tOb2RlLCBub2RlLCBub2Rl KS0+YmxvY2s7CisJCWlmKHN0YWNrX2Jsb2NrID09IGJsb2NrKSB7CisJCQlicmVhazsKKwkJ fQorCQlub2RlID0gc2xpc3RfcG9wX2hlYWRfbm9kZSgmQXV0b25vbW91c1N0YWNrKTsKKwkJ c2Vzc2lvbiA9IHNsaXN0X2NvbnRhaW5lcihBdXRvbm9tb3VzU3RhY2tOb2RlLCBub2RlLCBu b2RlKS0+c2Vzc2lvbjsKKwkJaWYoc2Vzc2lvbiAhPSBOVUxMKSB7CisJCQlBdXRvbm9tb3Vz U2Vzc2lvblJlbGVhc2Uoc2Vzc2lvbik7CisJCX0KKwkJcGZyZWUobm9kZSk7CisJfQorCisJ LyogUmV0dXJuIGZpcnN0IGZvdW5kIGF1dG9ub21vdXMgc2Vzc2lvbgorCSAqIE5lZWRlZCBm b3Igc3ViYmxvY2tzCisJICovCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmQXV0b25vbW91c1N0 YWNrKSB7CisJCXNlc3Npb24gPSBzbGlzdF9jb250YWluZXIoQXV0b25vbW91c1N0YWNrTm9k ZSwgbm9kZSwgaXRlci5jdXIpLT5zZXNzaW9uOworCQlpZihzZXNzaW9uKSB7CisJCQlyZXR1 cm4gc2Vzc2lvbjsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlc3Ry b3kgcG9vbCBub3JtYWxseQorICovCitzdGF0aWMgdm9pZAorQXV0b25vbW91c1Bvb2xEZXN0 cm95KHZvaWQpCit7CisJaWYoIWF1dG9ub21vdXNfcG9vbCkgeworCQlyZXR1cm47CisJfQor CWZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGF1dG9ub21vdXNfcG9vbC0+c2l6ZTsgKytpKSB7 CisJCUF1dG9ub21vdXNTZXNzaW9uRW5kKGF1dG9ub21vdXNfcG9vbC0+c2Vzc2lvbnNbaV0p OworCX0KKwlwZnJlZShhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25zKTsKKwlwZnJlZShhdXRv bm9tb3VzX3Bvb2wpOworCWF1dG9ub21vdXNfcG9vbCA9IE5VTEw7Cit9CisKKy8qCisgKiBE ZXN0cm95IHBvb2wgaW4gY2FzZSBvZiBFUlJPUgorICovCit2b2lkCitBdXRvbm9tb3VzUG9v bERlc3Ryb3lFcnJvcih2b2lkKQoreworCWlmKCFhdXRvbm9tb3VzX3Bvb2wpIHsKKwkJcmV0 dXJuOworCX0KKwlmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBhdXRvbm9tb3VzX3Bvb2wtPnNp emU7ICsraSkgeworCQlBdXRvbm9tb3VzU2Vzc2lvbkVuZEVycm9yKGF1dG9ub21vdXNfcG9v bC0+c2Vzc2lvbnNbaV0pOworCX0KKwlwZnJlZShhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25z KTsKKwlwZnJlZShhdXRvbm9tb3VzX3Bvb2wpOworCWF1dG9ub21vdXNfcG9vbCA9IE5VTEw7 Cit9CisKKy8qCisgKiBHZXQgYXV0b25vbW91cyBzZXNzaW9uIGZyb20gcG9vbAorICovCitB dXRvbm9tb3VzU2Vzc2lvbiAqCitBdXRvbm9tb3VzU2Vzc2lvbkdldCh2b2lkKQoreworCVRp bWVzdGFtcFR6IGN1cnJfdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwlpZighYXV0 b25vbW91c19wb29sKSB7CisJCUF1dG9ub21vdXNQb29sSW5pdCgpOworCX0KKworCS8qIGRl c3Ryb3kgbm90IHVzZWQgc2Vzc2lvbnMgYnkgdGltZW91dCAqLworCWZvcih1bnNpZ25lZCBp ID0gMDs7KQorCXsKKwkJaWYoaSA+PSBhdXRvbm9tb3VzX3Bvb2wtPnNpemUpCisJCXsKKwkJ CWJyZWFrOworCQl9CisKKwkJaWYoYXV0b25vbW91c19zZXNzaW9uX2xpZmV0aW1lKQorCQl7 CisJCQlUaW1lc3RhbXBUeiBkZWF0aF90aW1lID0gVGltZXN0YW1wVHpQbHVzTWludXRlcyhh dXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25zW2ldLT5jcmVhdGlvbl90aW1lLCBhdXRvbm9tb3Vz X3Nlc3Npb25fbGlmZXRpbWUpOworCQkJaWYodW5saWtlbHkoZGVhdGhfdGltZSA8IGN1cnJf dGltZSkgJiYgIWF1dG9ub21vdXNfcG9vbC0+c2Vzc2lvbnNbaV0tPmluX3VzZSkKKwkJCXsK KwkJCQlBdXRvbm9tb3VzU2Vzc2lvbkVuZChhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25zW2ld KTsKKwkJCQlhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25zW2ldID0gYXV0b25vbW91c19wb29s LT5zZXNzaW9uc1thdXRvbm9tb3VzX3Bvb2wtPnNpemUgLSAxXTsKKwkJCQktLWF1dG9ub21v dXNfcG9vbC0+c2l6ZTsKKwkJCX0gZWxzZSB7CisJCQkJKytpOworCQkJfQorCQl9CisJfQor CisJLyogcmV0dXJuIDFzdCBub3QgdXNlZCBzZXNzaW9uICovCisJZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IGF1dG9ub21vdXNfcG9vbC0+c2l6ZTsgKytpKQorCXsKKwkJaWYoIWF1dG9u b21vdXNfcG9vbC0+c2Vzc2lvbnNbaV0tPmluX3VzZSkgeworCQkJYXV0b25vbW91c19wb29s LT5zZXNzaW9uc1tpXS0+aW5fdXNlID0gdHJ1ZTsKKwkJCSsrYXV0b25vbW91c19wb29sLT5h Y3RpdmU7CisJCQlyZXR1cm4gYXV0b25vbW91c19wb29sLT5zZXNzaW9uc1tpXTsKKwkJfQor CX0KKworCS8qIG5vIGZyZWUgc2Vzc2lvbnMuIE5lZWQgdG8gc3RhcnQgbmV3IG9yIHJlc2l6 ZSBhIHBvb2wgYXQgZmlyc3QgKi8KKwlpZih1bmxpa2VseShhdXRvbm9tb3VzX3Bvb2wtPnNp emUgPT0gYXV0b25vbW91c19wb29sX21heF9jYXBhY2l0eSkpCisJeworCQllbG9nKEVSUk9S LCAiTm8gZnJlZSBhdXRvbm9tb3VzIHNlc3Npb25zLiBNYXggY2FwYWNpdHk9JWQgb2YgcG9v bCBpcyByZWFjaGVkIiwgYXV0b25vbW91c19wb29sX21heF9jYXBhY2l0eSk7CisJfQorCisJ LyogcmVzaXplIHBvb2wgaWYgaXQncyBmdWxsICovCisJaWYgKGF1dG9ub21vdXNfcG9vbC0+ c2l6ZSA9PSBhdXRvbm9tb3VzX3Bvb2wtPmNhcGFjaXR5KQorCXsKKwkJdW5zaWduZWQgbmV3 X2NhcGFjaXR5ID0gYXV0b25vbW91c19wb29sLT5jYXBhY2l0eSAqIDI7CisJCWlmKG5ld19j YXBhY2l0eSA+IGF1dG9ub21vdXNfcG9vbF9tYXhfY2FwYWNpdHkpCisJCQluZXdfY2FwYWNp dHkgPSBhdXRvbm9tb3VzX3Bvb2xfbWF4X2NhcGFjaXR5OworCQlhdXRvbm9tb3VzX3Bvb2wt PmNhcGFjaXR5ID0gbmV3X2NhcGFjaXR5OworCQlhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25z ID0gKEF1dG9ub21vdXNTZXNzaW9uICoqKQorCQkJcmVwYWxsb2MoYXV0b25vbW91c19wb29s LT5zZXNzaW9ucywgYXV0b25vbW91c19wb29sLT5jYXBhY2l0eSAqIHNpemVvZihBdXRvbm9t b3VzU2Vzc2lvbiAqKSk7CisJCWlmKCFhdXRvbm9tb3VzX3Bvb2wtPnNlc3Npb25zKSB7CisJ CQllbG9nKEVSUk9SLCAiQXV0b25vbW91cyBwb29sIGNhbid0IHJlc2l6ZSIpOworCQl9CisJ CWVsb2coTk9USUNFLCAiQXV0b25vbW91cyBwb29sIHdhcyByZXNpemVkLCBuZXcgY2FwYWNp dHkgaXMgJXUiLCBhdXRvbm9tb3VzX3Bvb2wtPmNhcGFjaXR5KTsKKwl9CisKKwkvKiBjcmVh dGUgbmV3IHNlc3Npb24gKi8KKwl7CisJCXVuc2lnbmVkIGkgPSBhdXRvbm9tb3VzX3Bvb2wt PnNpemUrKzsKKwkJYXV0b25vbW91c19wb29sLT5zZXNzaW9uc1tpXSA9IEF1dG9ub21vdXNT ZXNzaW9uU3RhcnQoKTsKKwkJKythdXRvbm9tb3VzX3Bvb2wtPmFjdGl2ZTsKKwkJYXV0b25v bW91c19wb29sLT5zZXNzaW9uc1tpXS0+aW5fdXNlID0gdHJ1ZTsKKwkJYXV0b25vbW91c19w b29sLT5zZXNzaW9uc1tpXS0+Y3JlYXRpb25fdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAo KTsKKwkJcmV0dXJuIGF1dG9ub21vdXNfcG9vbC0+c2Vzc2lvbnNbaV07CisJfQorfQorCisv KgorICogUmV0dXJuIGF1dG9ub21vdXMgc2Vzc2lvbiB0byBwb29sCisgKi8KK3ZvaWQKK0F1 dG9ub21vdXNTZXNzaW9uUmVsZWFzZShBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbikKK3sK KwlpZighc2Vzc2lvbikgeworCQllbG9nKEVSUk9SLCAiQXV0b25vbW91cyBzZXNzaW9uIGlz IE5VTEwiKTsKKwl9CisJaWYgKHNlc3Npb24tPmluX3VzZSkgeworCQlzZXNzaW9uLT5pbl91 c2UgPSBmYWxzZTsKKwkJLS1hdXRvbm9tb3VzX3Bvb2wtPmFjdGl2ZTsKKwl9Cit9CisKKy8q CisgKiBTdGFydCBhdXRvbm9tb3VzIHNlc3Npb246IGFsbG9jYXRlIG1lbW9yeSBmb3IgZHNt LCBzaG1fbXEsIHN0YXJ0IGJhY2tncm91bmQgd29ya2VyLCBldGMuCisgKiBhbmQgcmV0dXJu IGEgaGFuZGxlLiBMYXVuY2hlcyBiYWNrZ3JvdW5kIHdvcmtlcgorICovCitzdGF0aWMgQXV0 b25vbW91c1Nlc3Npb24gKgorQXV0b25vbW91c1Nlc3Npb25TdGFydCh2b2lkKQoreworCUJh Y2tncm91bmRXb3JrZXIgd29ya2VyOworCXBpZF90CQlwaWQ7CisJQXV0b25vbW91c1Nlc3Np b24gKnNlc3Npb247CisJc2htX3RvY19lc3RpbWF0b3IgZTsKKwlTaXplCQlzZWdzaXplOwor CVNpemUJCWd1Y19sZW47CisJY2hhcgkgICAqZ3Vjc3RhdGU7CisJZHNtX3NlZ21lbnQgKnNl ZzsKKwlzaG1fdG9jCSAgICp0b2M7CisJQXV0b25vbW91c1Nlc3Npb25GaXhlZERhdGEgKmZk YXRhOworCXNobV9tcQkgICAqY29tbWFuZF9tcTsKKwlzaG1fbXEJICAgKnJlc3BvbnNlX21x OworCUJnd0hhbmRsZVN0YXR1cyBiZ3dzdGF0dXM7CisJU3RyaW5nSW5mb0RhdGEgbXNnOwor CWNoYXIJCW1zZ3R5cGU7CisJTWVtb3J5Q29udGV4dAlzYXZlX2N0eDsKKwlSZXNvdXJjZU93 bmVyCXNhdmVfb3duZXI7CisKKwlzaG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsK KwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBzaXplb2YoQXV0b25vbW91c1Nlc3Npb25G aXhlZERhdGEpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBBVVRPTk9NT1VTX1FV RVVFX1NJWkUpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUsIEFVVE9OT01PVVNfUVVF VUVfU0laRSk7CisJZ3VjX2xlbiA9IEVzdGltYXRlR1VDU3RhdGVTcGFjZSgpOworCXNobV90 b2NfZXN0aW1hdGVfY2h1bmsoJmUsIGd1Y19sZW4pOworCXNobV90b2NfZXN0aW1hdGVfa2V5 cygmZSwgQVVUT05PTU9VU19OS0VZUyk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUo JmUpOworCisJc2F2ZV9jdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXV0b25vbW91c0Nv bnRleHQpOyAvKiBYWFggbW92ZSB0byBmdW5jIHN0YXJ0PyAqLworCXNlc3Npb24gPSBwYWxs b2Moc2l6ZW9mKEF1dG9ub21vdXNTZXNzaW9uKSk7CisJc2Vzc2lvbi0+aW5fdXNlID0gZmFs c2U7CisJc2F2ZV9vd25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCUN1cnJlbnRSZXNv dXJjZU93bmVyID0gQXV0b25vbW91c1Jlc291cmNlT3duZXI7CisJc2VnID0gZHNtX2NyZWF0 ZShzZWdzaXplLCAwKTsKKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IHNhdmVfb3duZXI7CisJ c2Vzc2lvbi0+c2VnID0gc2VnOworCisJdG9jID0gc2htX3RvY19jcmVhdGUoQVVUT05PTU9V U19NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLCBzZWdzaXplKTsKKworCS8qIFN0 b3JlIGZpeGVkLXNpemUgZGF0YSBpbiBkeW5hbWljIHNoYXJlZCBtZW1vcnkuICovCisJZmRh dGEgPSBzaG1fdG9jX2FsbG9jYXRlKHRvYywgc2l6ZW9mKCpmZGF0YSkpOworCWZkYXRhLT5k YXRhYmFzZV9pZCA9IE15RGF0YWJhc2VJZDsKKwlmZGF0YS0+YXV0aGVudGljYXRlZF91c2Vy X2lkID0gR2V0QXV0aGVudGljYXRlZFVzZXJJZCgpOworCUdldFVzZXJJZEFuZFNlY0NvbnRl eHQoJmZkYXRhLT5jdXJyZW50X3VzZXJfaWQsICZmZGF0YS0+c2VjX2NvbnRleHQpOworCXNo bV90b2NfaW5zZXJ0KHRvYywgQVVUT05PTU9VU19LRVlfRklYRURfREFUQSwgZmRhdGEpOwor CisJLyogU3RvcmUgR1VDIHN0YXRlIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4gKi8KKwln dWNzdGF0ZSA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBndWNfbGVuKTsKKwlTZXJpYWxpemVH VUNTdGF0ZShndWNfbGVuLCBndWNzdGF0ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBBVVRP Tk9NT1VTX0tFWV9HVUMsIGd1Y3N0YXRlKTsKKworCWNvbW1hbmRfbXEgPSBzaG1fbXFfY3Jl YXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBBVVRPTk9NT1VTX1FVRVVFX1NJWkUpLAorCQkJ CQkJCSAgIEFVVE9OT01PVVNfUVVFVUVfU0laRSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBB VVRPTk9NT1VTX0tFWV9DT01NQU5EX1FVRVVFLCBjb21tYW5kX21xKTsKKwlzaG1fbXFfc2V0 X3NlbmRlcihjb21tYW5kX21xLCBNeVByb2MpOworCisJcmVzcG9uc2VfbXEgPSBzaG1fbXFf Y3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBBVVRPTk9NT1VTX1FVRVVFX1NJWkUpLAor CQkJCQkJCQlBVVRPTk9NT1VTX1FVRVVFX1NJWkUpOworCXNobV90b2NfaW5zZXJ0KHRvYywg QVVUT05PTU9VU19LRVlfUkVTUE9OU0VfUVVFVUUsIHJlc3BvbnNlX21xKTsKKwlzaG1fbXFf c2V0X3JlY2VpdmVyKHJlc3BvbnNlX21xLCBNeVByb2MpOworCisJc2Vzc2lvbi0+Y29tbWFu ZF9xaCA9IHNobV9tcV9hdHRhY2goY29tbWFuZF9tcSwgc2VnLCBOVUxMKTsKKwlzZXNzaW9u LT5yZXNwb25zZV9xaCA9IHNobV9tcV9hdHRhY2gocmVzcG9uc2VfbXEsIHNlZywgTlVMTCk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc2F2ZV9jdHgpOworCisJd29ya2VyLmJnd19m bGFncyA9CisJCUJHV09SS0VSX1NITUVNX0FDQ0VTUyB8IEJHV09SS0VSX0JBQ0tFTkRfREFU QUJBU0VfQ09OTkVDVElPTjsKKwl3b3JrZXIuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0 YXJ0X0NvbnNpc3RlbnRTdGF0ZTsKKwl3b3JrZXIuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19O RVZFUl9SRVNUQVJUOworCXNwcmludGYod29ya2VyLmJnd19saWJyYXJ5X25hbWUsICJwb3N0 Z3JlcyIpOworCXNwcmludGYod29ya2VyLmJnd19mdW5jdGlvbl9uYW1lLCAiQXV0b25vbW91 c1Nlc3Npb25NYWluIik7CisJc3ByaW50Zih3b3JrZXIuYmd3X3R5cGUsICJhdXRvbm9tb3Vz X3RyYW5zYWN0aW9uIik7CisJc25wcmludGYod29ya2VyLmJnd19uYW1lLCBCR1dfTUFYTEVO LCAiYXV0b25vbW91cyBzZXNzaW9uIGJ5IFBJRCAlZCIsIE15UHJvY1BpZCk7CisJd29ya2Vy LmJnd19tYWluX2FyZyA9IFVJbnQzMkdldERhdHVtKGRzbV9zZWdtZW50X2hhbmRsZShzZWcp KTsKKwl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CisKKwlpZiAoIVJlZ2lz dGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJndvcmtlciwgJnNlc3Npb24tPndvcmtlcl9o YW5kbGUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZG SUNJRU5UX1JFU09VUkNFUyksCisJCQkJIGVycm1zZygiY291bGQgbm90IHJlZ2lzdGVyIGJh Y2tncm91bmQgcHJvY2VzcyIpLAorCQkJCSBlcnJoaW50KCJZb3UgbWlnaHQgbmVlZCB0byBp bmNyZWFzZSBtYXhfd29ya2VyX3Byb2Nlc3Nlcy4iKSkpOworCisJc2htX21xX3NldF9oYW5k bGUoc2Vzc2lvbi0+Y29tbWFuZF9xaCwgc2Vzc2lvbi0+d29ya2VyX2hhbmRsZSk7CisJc2ht X21xX3NldF9oYW5kbGUoc2Vzc2lvbi0+cmVzcG9uc2VfcWgsIHNlc3Npb24tPndvcmtlcl9o YW5kbGUpOworCisJYmd3c3RhdHVzID0gV2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFydHVw KHNlc3Npb24tPndvcmtlcl9oYW5kbGUsICZwaWQpOworCWlmIChiZ3dzdGF0dXMgIT0gQkdX SF9TVEFSVEVEKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5T VUZGSUNJRU5UX1JFU09VUkNFUyksCisJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXJ0IGJh Y2tncm91bmQgd29ya2VyIikpKTsKKworCWRvCisJeworCQlzaG1fbXFfcmVjZWl2ZV9zdHJp bmdpbmZvKHNlc3Npb24tPnJlc3BvbnNlX3FoLCAmbXNnKTsKKwkJbXNndHlwZSA9IHBxX2dl dG1zZ2J5dGUoJm1zZyk7CisKKwkJc3dpdGNoIChtc2d0eXBlKQorCQl7CisJCQljYXNlICda JzogLyogUmVhZHlGb3JRdWVyeSAqLworCQkJCXNlc3Npb24tPnRyYW5zYWN0aW9uX3N0YXR1 cyA9IHBxX2dldG1zZ2J5dGUoJm1zZyk7CisJCQkJcHFfZ2V0bXNnZW5kKCZtc2cpOworCQkJ CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpbnZhbGlkX3Byb3RvY29sX21lc3NhZ2UobXNn dHlwZSwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlICdOJzogLyogTm90aWNlUmVzcG9uc2Ug Ki8KKwkJCQlyZXRocm93X2Vycm9ybm90aWNlKCZtc2csIE5PVElDRSk7CisJCQkJYnJlYWs7 CisJCQljYXNlICdFJzogLyogRXJyb3JSZXNwb25zZSAqLworCQkJCXJldGhyb3dfZXJyb3Ju b3RpY2UoJm1zZywgRVJST1IpOworCQkJCWJyZWFrOworCQl9CisJfQorCXdoaWxlIChtc2d0 eXBlICE9ICdaJyk7CisKKwlyZXR1cm4gc2Vzc2lvbjsKK30KKworLyoKKyAqIERlc3Ryb3kg YXV0b25vbW91cyBzZXNzaW9uIG5vcm1hbGx5CisgKi8KK3N0YXRpYyB2b2lkCitBdXRvbm9t b3VzU2Vzc2lvbkVuZChBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlTdHJpbmdJ bmZvRGF0YSBtc2c7CisJaWYgKHNlc3Npb24tPnRyYW5zYWN0aW9uX3N0YXR1cyA9PSAnVCcp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lO X1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiYXV0b25vbW91cyBzZXNzaW9u IGVuZGVkIHdpdGggdHJhbnNhY3Rpb24gYmxvY2sgb3BlbiIpKSk7CisKKwlwcV9yZWRpcmVj dF90b19zaG1fbXEoc2Vzc2lvbi0+c2VnLCBzZXNzaW9uLT5jb21tYW5kX3FoKTsKKwlwcV9i ZWdpbm1lc3NhZ2UoJm1zZywgJ1gnKTsgLyogVGVybWluYXRlICovCisJcHFfZW5kbWVzc2Fn ZSgmbXNnKTsKKwlwcV9zdG9wX3JlZGlyZWN0X3RvX3NobV9tcSgpOworCisJQXV0b25vbW91 c1Nlc3Npb25GcmVlUmVzb3VyY2VzKHNlc3Npb24pOworfQorCisvKgorICogRGVzdHJveSBh dXRvbm9tb3VzIHNlc3Npb24gaW4gY2FzZSBvZiBFUlJPUgorICovCitzdGF0aWMgdm9pZAor QXV0b25vbW91c1Nlc3Npb25FbmRFcnJvcihBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbikK K3sKKwlTdHJpbmdJbmZvRGF0YSBtc2c7CisJcHFfcmVkaXJlY3RfdG9fc2htX21xKHNlc3Np b24tPnNlZywgc2Vzc2lvbi0+Y29tbWFuZF9xaCk7CisJcHFfYmVnaW5tZXNzYWdlKCZtc2cs ICdYJyk7IC8qIFRlcm1pbmF0ZSAqLworCXBxX2VuZG1lc3NhZ2UoJm1zZyk7CisJcHFfc3Rv cF9yZWRpcmVjdF90b19zaG1fbXEoKTsKKworCUF1dG9ub21vdXNTZXNzaW9uRnJlZVJlc291 cmNlcyhzZXNzaW9uKTsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IG9mIGludGVybmFsIHN0 cnVjdHVyZXMgb2YgYXV0b25vbW91cyBzZXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkCitBdXRv bm9tb3VzU2Vzc2lvbkZyZWVSZXNvdXJjZXMoQXV0b25vbW91c1Nlc3Npb24gKnNlc3Npb24p Cit7CisJcGZyZWUoc2Vzc2lvbi0+d29ya2VyX2hhbmRsZSk7CisJZHNtX2RldGFjaChzZXNz aW9uLT5zZWcpOworCXBmcmVlKHNlc3Npb24pOworfQorCitBdXRvbm9tb3VzUmVzdWx0ICoK K0F1dG9ub21vdXNTZXNzaW9uRXhlY3V0ZShBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbiwg Y29uc3QgY2hhciAqc3FsKQoreworCVN0cmluZ0luZm9EYXRhIG1zZzsKKwljaGFyCQltc2d0 eXBlOworCUF1dG9ub21vdXNSZXN1bHQgKnJlc3VsdDsKKworCXBxX3JlZGlyZWN0X3RvX3No bV9tcShzZXNzaW9uLT5zZWcsIHNlc3Npb24tPmNvbW1hbmRfcWgpOworCXBxX2JlZ2lubWVz c2FnZSgmbXNnLCAnUScpOyAvKiBRdWVyeSAqLworCXBxX3NlbmRzdHJpbmcoJm1zZywgc3Fs KTsKKwlwcV9lbmRtZXNzYWdlKCZtc2cpOworCXBxX3N0b3BfcmVkaXJlY3RfdG9fc2htX21x KCk7CisKKwlyZXN1bHQgPSBwYWxsb2MwKHNpemVvZigqcmVzdWx0KSk7CisKKwlkbworCXsK KwkJc2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzZXNzaW9uLT5yZXNwb25zZV9xaCwgJm1z Zyk7CisJCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOworCisJCXN3aXRjaCAobXNn dHlwZSkKKwkJeworCQkJY2FzZSAnQyc6IC8qIENvbW1hbmRDb21wbGV0ZSAqLworCQkJCXsK KwkJCQkJY29uc3QgY2hhciAqdGFnID0gcHFfZ2V0bXNnc3RyaW5nKCZtc2cpOworCQkJCQly ZXN1bHQtPmNvbW1hbmQgPSBwc3RyZHVwKHRhZyk7CisJCQkJCXBxX2dldG1zZ2VuZCgmbXNn KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSAnVCc6IC8qIFJvd0Rlc2NyaXB0aW9u ICovCisJCQkJaWYgKHJlc3VsdC0+dHVwZGVzYykKKwkJCQkJZWxvZyhFUlJPUiwgImFscmVh ZHkgcmVjZWl2ZWQgYSBUIG1lc3NhZ2UiKTsKKwkJCQlyZXN1bHQtPnR1cGRlc2MgPSBUdXBs ZURlc2NfZnJvbV9Sb3dEZXNjcmlwdGlvbigmbXNnKTsKKwkJCQlwcV9nZXRtc2dlbmQoJm1z Zyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzogLyogRGVzY3JpYmUgKi8KKwkJCQlpZiAo IXJlc3VsdC0+dHVwZGVzYykKKwkJCQkJZWxvZyhFUlJPUiwgIm5vIFQgbWVzc2FnZSBiZWZv cmUgRCIpOworCQkJCXJlc3VsdC0+dHVwbGVzID0gbGFwcGVuZChyZXN1bHQtPnR1cGxlcywg SGVhcFR1cGxlX2Zyb21fRGF0YVJvdyhyZXN1bHQtPnR1cGRlc2MsICZtc2cpKTsKKwkJCQlw cV9nZXRtc2dlbmQoJm1zZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdaJzogLyogUmVhZHlG b3JRdWVyeSAqLworCQkJCXNlc3Npb24tPnRyYW5zYWN0aW9uX3N0YXR1cyA9IHBxX2dldG1z Z2J5dGUoJm1zZyk7CisJCQkJcHFfZ2V0bXNnZW5kKCZtc2cpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnQSc6IC8qIE5vdGlmaWNhdGlvblJlc3BvbnNlICovCisJCQkJZm9yd2FyZF9Ob3Rp ZnlSZXNwb25zZSgmbXNnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ04nOiAvKiBOb3RpY2VS ZXNwb25zZSAqLworCQkJCXJldGhyb3dfZXJyb3Jub3RpY2UoJm1zZywgTk9USUNFKTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ0UnOiAvKiBFcnJvclJlc3BvbnNlICovCisJCQkJcmV0aHJv d19lcnJvcm5vdGljZSgmbXNnLCBFUlJPUik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCWludmFsaWRfcHJvdG9jb2xfbWVzc2FnZShtc2d0eXBlLCAyKTsKKwkJCQlicmVhazsK KwkJfQorCX0KKwl3aGlsZSAobXNndHlwZSAhPSAnWicpOworCisJcmV0dXJuIHJlc3VsdDsK K30KKworLyoKKyAqIFByZXBhcmUgYW4gU1FMIHN0cmluZyBmb3Igc3Vic2VxdWVudCBleGVj dXRpb24KKyAqLworQXV0b25vbW91c1ByZXBhcmVkU3RhdGVtZW50ICoKK0F1dG9ub21vdXNT ZXNzaW9uUHJlcGFyZShBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgY2hhciAq c3FsLCBpbnQxNiBuYXJncywKKwkJCQkJCSBPaWQgYXJndHlwZXNbXSwgY29uc3QgY2hhciAq YXJnbmFtZXNbXSkKK3sKKwlBdXRvbm9tb3VzUHJlcGFyZWRTdGF0ZW1lbnQgKnJlc3VsdDsK KwlTdHJpbmdJbmZvRGF0YSBtc2c7CisJaW50MTYJCWk7CisJY2hhcgkJbXNndHlwZTsKKwor CXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZXNzaW9uLT5zZWcsIHNlc3Npb24tPmNvbW1hbmRf cWgpOworCXBxX2JlZ2lubWVzc2FnZSgmbXNnLCAnUCcpOyAvKiBQYXJzZSAqLworCXBxX3Nl bmRzdHJpbmcoJm1zZywgIiIpOworCXBxX3NlbmRzdHJpbmcoJm1zZywgc3FsKTsKKwlwcV9z ZW5kaW50KCZtc2csIG5hcmdzLCAyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykK KwkJcHFfc2VuZGludCgmbXNnLCBhcmd0eXBlc1tpXSwgNCk7CisJaWYgKGFyZ25hbWVzKQor CQlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJCXBxX3NlbmRzdHJpbmcoJm1zZywg YXJnbmFtZXNbaV0pOworCXBxX2VuZG1lc3NhZ2UoJm1zZyk7CisJcHFfc3RvcF9yZWRpcmVj dF90b19zaG1fbXEoKTsKKworCXJlc3VsdCA9IHBhbGxvYzAoc2l6ZW9mKCpyZXN1bHQpKTsK KwlyZXN1bHQtPnNlc3Npb24gPSBzZXNzaW9uOworCXJlc3VsdC0+YXJndHlwZXMgPSBwYWxs b2MobmFyZ3MgKiBzaXplb2YoKnJlc3VsdC0+YXJndHlwZXMpKTsKKwltZW1jcHkocmVzdWx0 LT5hcmd0eXBlcywgYXJndHlwZXMsIG5hcmdzICogc2l6ZW9mKCpyZXN1bHQtPmFyZ3R5cGVz KSk7CisKKwlkbworCXsKKwkJc2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzZXNzaW9uLT5y ZXNwb25zZV9xaCwgJm1zZyk7CisJCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOwor CisJCXN3aXRjaCAobXNndHlwZSkKKwkJeworCQkJY2FzZSAnMSc6IC8qIFBhcnNlQ29tcGxl dGUgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgJ04nOiAvKiBOb3RpY2VSZXNwb25zZSAqLwor CQkJCXJldGhyb3dfZXJyb3Jub3RpY2UoJm1zZywgTk9USUNFKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ0UnOiAvKiBFcnJvclJlc3BvbnNlICovCisJCQkJcmV0aHJvd19lcnJvcm5vdGlj ZSgmbXNnLCBFUlJPUik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWludmFsaWRf cHJvdG9jb2xfbWVzc2FnZShtc2d0eXBlLCAzKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwl3 aGlsZSAobXNndHlwZSAhPSAnMScpOworCisJcHFfcmVkaXJlY3RfdG9fc2htX21xKHNlc3Np b24tPnNlZywgc2Vzc2lvbi0+Y29tbWFuZF9xaCk7CisJcHFfYmVnaW5tZXNzYWdlKCZtc2cs ICdEJyk7IC8qIERlc2NyaWJlICovCisJcHFfc2VuZGJ5dGUoJm1zZywgJ1MnKTsgLyogUHJl cGFyZWRTdGF0ZW1lbnQgKi8KKwlwcV9zZW5kc3RyaW5nKCZtc2csICIiKTsKKwlwcV9lbmRt ZXNzYWdlKCZtc2cpOworCXBxX3N0b3BfcmVkaXJlY3RfdG9fc2htX21xKCk7CisKKwlkbwor CXsKKwkJc2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzZXNzaW9uLT5yZXNwb25zZV9xaCwg Jm1zZyk7CisJCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOworCisJCXN3aXRjaCAo bXNndHlwZSkKKwkJeworCQkJY2FzZSAnbic6IC8qIE5vRGF0YSAqLworCQkJCWJyZWFrOwor CQkJY2FzZSAndCc6IC8qIFBhcmFtZXRlckRlc2NyaXB0aW9uICovCisJCQljYXNlICcxJzog LyogUGFyc2VDb21wbGV0ZSAqLworCQkJY2FzZSAnWic6IC8qIFJlYWR5Rm9yUXVlcnkgKi8K KwkJCQkvKiBpZ25vcmUgZm9yIG5vdyAqLworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6IC8q IFJvd0Rlc2NyaXB0aW9uICovCisJCQkJaWYgKHJlc3VsdC0+dHVwZGVzYykKKwkJCQkJZWxv ZyhFUlJPUiwgImFscmVhZHkgcmVjZWl2ZWQgYSBUIG1lc3NhZ2UiKTsKKwkJCQlyZXN1bHQt PnR1cGRlc2MgPSBUdXBsZURlc2NfZnJvbV9Sb3dEZXNjcmlwdGlvbigmbXNnKTsKKwkJCQlw cV9nZXRtc2dlbmQoJm1zZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdBJzogLyogTm90aWZp Y2F0aW9uUmVzcG9uc2UgKi8KKwkJCQlmb3J3YXJkX05vdGlmeVJlc3BvbnNlKCZtc2cpOwor CQkJCWJyZWFrOworCQkJY2FzZSAnTic6IC8qIE5vdGljZVJlc3BvbnNlICovCisJCQkJcmV0 aHJvd19lcnJvcm5vdGljZSgmbXNnLCBOT1RJQ0UpOworCQkJCWJyZWFrOworCQkJY2FzZSAn RSc6IC8qIEVycm9yUmVzcG9uc2UgKi8KKwkJCQlyZXRocm93X2Vycm9ybm90aWNlKCZtc2cs IEVSUk9SKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaW52YWxpZF9wcm90b2Nv bF9tZXNzYWdlKG1zZ3R5cGUsIDQpOworCQkJCWJyZWFrOworCQl9CisJfQorCXdoaWxlICht c2d0eXBlICE9ICduJyAmJiBtc2d0eXBlICE9ICdUJyk7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogRXhlY3V0ZSBwcmVwYXJlZCBzdGF0ZW1lbnQKKyAqLworQXV0b25vbW91 c1Jlc3VsdCAqCitBdXRvbm9tb3VzU2Vzc2lvbkV4ZWN1dGVQcmVwYXJlZChBdXRvbm9tb3Vz UHJlcGFyZWRTdGF0ZW1lbnQgKnN0bXQsIGludDE2IG5hcmdzLCBEYXR1bSAqdmFsdWVzLCBi b29sICpudWxscykKK3sKKwlBdXRvbm9tb3VzU2Vzc2lvbiAqc2Vzc2lvbjsKKwlTdHJpbmdJ bmZvRGF0YSBtc2c7CisJQXV0b25vbW91c1Jlc3VsdCAqcmVzdWx0OworCWNoYXIJCW1zZ3R5 cGU7CisJaW50MTYJCWk7CisKKwlzZXNzaW9uID0gc3RtdC0+c2Vzc2lvbjsKKworCXBxX3Jl ZGlyZWN0X3RvX3NobV9tcShzZXNzaW9uLT5zZWcsIHNlc3Npb24tPmNvbW1hbmRfcWgpOwor CXBxX2JlZ2lubWVzc2FnZSgmbXNnLCAnQicpOyAvKiBCaW5kICovCisJcHFfc2VuZHN0cmlu ZygmbXNnLCAiIik7CisJcHFfc2VuZHN0cmluZygmbXNnLCAiIik7CisJcHFfc2VuZGludCgm bXNnLCAxLCAyKTsgIC8qIG51bWJlciBvZiBwYXJhbWV0ZXIgZm9ybWF0IGNvZGVzICovCisJ cHFfc2VuZGludCgmbXNnLCAxLCAyKTsKKwlwcV9zZW5kaW50KCZtc2csIG5hcmdzLCAyKTsg IC8qIG51bWJlciBvZiBwYXJhbWV0ZXIgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IG5h cmdzOyBpKyspCisJeworCQlpZiAobnVsbHNbaV0pCisJCQlwcV9zZW5kaW50KCZtc2csIC0x LCA0KTsKKwkJZWxzZQorCQl7CisJCQlPaWQJCQl0eXBzZW5kOworCQkJYm9vbAkJdHlwaXN2 YXJsZW5hOworCQkJYnl0ZWEJICAgKm91dHB1dGJ5dGVzOworCisJCQlnZXRUeXBlQmluYXJ5 T3V0cHV0SW5mbyhzdG10LT5hcmd0eXBlc1tpXSwgJnR5cHNlbmQsICZ0eXBpc3ZhcmxlbmEp OworCQkJb3V0cHV0Ynl0ZXMgPSBPaWRTZW5kRnVuY3Rpb25DYWxsKHR5cHNlbmQsIHZhbHVl c1tpXSk7CisJCQlwcV9zZW5kaW50KCZtc2csIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFS SERSU1osIDQpOworCQkJcHFfc2VuZGJ5dGVzKCZtc2csIFZBUkRBVEEob3V0cHV0Ynl0ZXMp LCBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKKwkJCXBmcmVlKG91dHB1dGJ5 dGVzKTsKKwkJfQorCX0KKwlwcV9zZW5kaW50KCZtc2csIDEsIDIpOyAgLyogbnVtYmVyIG9m IHJlc3VsdCBjb2x1bW4gZm9ybWF0IGNvZGVzICovCisJcHFfc2VuZGludCgmbXNnLCAxLCAy KTsKKwlwcV9lbmRtZXNzYWdlKCZtc2cpOworCXBxX3N0b3BfcmVkaXJlY3RfdG9fc2htX21x KCk7CisKKwlkbworCXsKKwkJc2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzZXNzaW9uLT5y ZXNwb25zZV9xaCwgJm1zZyk7CisJCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOwor CisJCXN3aXRjaCAobXNndHlwZSkKKwkJeworCQkJY2FzZSAnMic6IC8qIEJpbmRDb21wbGV0 ZSAqLworCQkJCWJyZWFrOworCQkJY2FzZSAnTic6IC8qIE5vdGljZVJlc3BvbnNlICovCisJ CQkJcmV0aHJvd19lcnJvcm5vdGljZSgmbXNnLCBOT1RJQ0UpOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnRSc6IC8qIEVycm9yUmVzcG9uc2UgKi8KKwkJCQlyZXRocm93X2Vycm9ybm90aWNl KCZtc2csIEVSUk9SKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaW52YWxpZF9w cm90b2NvbF9tZXNzYWdlKG1zZ3R5cGUsIDUpOworCQkJCWJyZWFrOworCQl9CisJfQorCXdo aWxlIChtc2d0eXBlICE9ICcyJyk7CisKKwlwcV9yZWRpcmVjdF90b19zaG1fbXEoc2Vzc2lv bi0+c2VnLCBzZXNzaW9uLT5jb21tYW5kX3FoKTsKKwlwcV9iZWdpbm1lc3NhZ2UoJm1zZywg J0UnKTsgLyogRXhlY3V0ZSAqLworCXBxX3NlbmRzdHJpbmcoJm1zZywgIiIpOworCXBxX3Nl bmRpbnQoJm1zZywgMCwgNCk7CisJcHFfZW5kbWVzc2FnZSgmbXNnKTsKKwlwcV9zdG9wX3Jl ZGlyZWN0X3RvX3NobV9tcSgpOworCisJcmVzdWx0ID0gcGFsbG9jMChzaXplb2YoKnJlc3Vs dCkpOworCXJlc3VsdC0+dHVwZGVzYyA9IHN0bXQtPnR1cGRlc2M7CisKKwlkbworCXsKKwkJ c2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzZXNzaW9uLT5yZXNwb25zZV9xaCwgJm1zZyk7 CisJCW1zZ3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOworCisJCXN3aXRjaCAobXNndHlw ZSkKKwkJeworCQkJY2FzZSAnMic6IC8qIEJpbmRDb21wbGV0ZSAqLworCQkJCWJyZWFrOwor CQkJY2FzZSAnQyc6IC8qIENvbW1hbmRDb21wbGV0ZSAqLworCQkJCXsKKwkJCQkJY29uc3Qg Y2hhciAqdGFnID0gcHFfZ2V0bXNnc3RyaW5nKCZtc2cpOworCQkJCQlyZXN1bHQtPmNvbW1h bmQgPSBwc3RyZHVwKHRhZyk7CisJCQkJCXBxX2dldG1zZ2VuZCgmbXNnKTsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJY2FzZSAnRCc6IC8qIERlc2NyaWJlICovCisJCQkJaWYgKCFzdG10 LT50dXBkZXNjKQorCQkJCQllbG9nKEVSUk9SLCAiZGlkIG5vdCBleHBlY3QgYW55IGRlc2Ny aXB0aW9uIHJvd3MiKTsKKwkJCQlyZXN1bHQtPnR1cGxlcyA9IGxhcHBlbmQocmVzdWx0LT50 dXBsZXMsIEhlYXBUdXBsZV9mcm9tX0RhdGFSb3coc3RtdC0+dHVwZGVzYywgJm1zZykpOwor CQkJCXBxX2dldG1zZ2VuZCgmbXNnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0EnOiAvKiBO b3RpZmljYXRpb25SZXNwb25zZSAqLworCQkJCWZvcndhcmRfTm90aWZ5UmVzcG9uc2UoJm1z Zyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdOJzogLyogTm90aWNlUmVzcG9uc2UgKi8KKwkJ CQlyZXRocm93X2Vycm9ybm90aWNlKCZtc2csIE5PVElDRSk7CisJCQkJYnJlYWs7CisJCQlj YXNlICdFJzogLyogRXJyb3JSZXNwb25zZSAqLworCQkJCXJldGhyb3dfZXJyb3Jub3RpY2Uo Jm1zZywgRVJST1IpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpbnZhbGlkX3By b3RvY29sX21lc3NhZ2UobXNndHlwZSwgNik7CisJCQkJYnJlYWs7CisJCX0KKwl9CisJd2hp bGUgKG1zZ3R5cGUgIT0gJ0MnKTsKKworCXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZXNzaW9u LT5zZWcsIHNlc3Npb24tPmNvbW1hbmRfcWgpOworCXBxX3B1dGVtcHR5bWVzc2FnZSgnUycp OyAvKiBTeW5jICovCisJcHFfc3RvcF9yZWRpcmVjdF90b19zaG1fbXEoKTsKKworCWRvCisJ eworCQlzaG1fbXFfcmVjZWl2ZV9zdHJpbmdpbmZvKHNlc3Npb24tPnJlc3BvbnNlX3FoLCAm bXNnKTsKKwkJbXNndHlwZSA9IHBxX2dldG1zZ2J5dGUoJm1zZyk7CisKKwkJc3dpdGNoICht c2d0eXBlKQorCQl7CisJCQljYXNlICdaJzogLyogUmVhZHlGb3JRdWVyeSAqLworCQkJCXNl c3Npb24tPnRyYW5zYWN0aW9uX3N0YXR1cyA9IHBxX2dldG1zZ2J5dGUoJm1zZyk7CisJCQkJ cHFfZ2V0bXNnZW5kKCZtc2cpOworCQkJCWJyZWFrOworCQkJY2FzZSAnQSc6IC8qIE5vdGlm aWNhdGlvblJlc3BvbnNlICovCisJCQkJZm9yd2FyZF9Ob3RpZnlSZXNwb25zZSgmbXNnKTsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ04nOiAvKiBOb3RpY2VSZXNwb25zZSAqLworCQkJCXJl dGhyb3dfZXJyb3Jub3RpY2UoJm1zZywgTk9USUNFKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J0UnOiAvKiBFcnJvclJlc3BvbnNlICovCisJCQkJcmV0aHJvd19lcnJvcm5vdGljZSgmbXNn LCBFUlJPUik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWludmFsaWRfcHJvdG9j b2xfbWVzc2FnZShtc2d0eXBlLCA3KTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwl3aGlsZSAo bXNndHlwZSAhPSAnWicpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIE1haW4g bG9vcCBvZiBhdXRvbm9tb3VzIHNlc3Npb24KKyAqLwordm9pZAorQXV0b25vbW91c1Nlc3Np b25NYWluKERhdHVtIG1haW5fYXJnKQoreworCWRzbV9zZWdtZW50ICpzZWc7CisJc2htX3Rv YwkgICAqdG9jOworCUF1dG9ub21vdXNTZXNzaW9uRml4ZWREYXRhICpmZGF0YTsKKwljaGFy CSAgICpndWNzdGF0ZTsKKwlzaG1fbXEJICAgKmNvbW1hbmRfbXE7CisJc2htX21xCSAgICpy ZXNwb25zZV9tcTsKKwlzaG1fbXFfaGFuZGxlICpjb21tYW5kX3FoOworCXNobV9tcV9oYW5k bGUgKnJlc3BvbnNlX3FoOworCVN0cmluZ0luZm9EYXRhIG1zZzsKKwljaGFyCQltc2d0eXBl OworCisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKworCUJhY2tncm91bmRXb3JrZXJVbmJs b2NrU2lnbmFscygpOworCisJLyogU2V0IHVwIGEgbWVtb3J5IGNvbnRleHQgYW5kIHJlc291 cmNlIG93bmVyLiAqLworCUFzc2VydChDdXJyZW50UmVzb3VyY2VPd25lciA9PSBOVUxMKTsK KwlDdXJyZW50UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJDcmVhdGUoTlVMTCwgImF1 dG9ub21vdXMiKTsKKwlDdXJyZW50TWVtb3J5Q29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENy ZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICJhdXRvbm9tb3VzIHNlc3Np b24iLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJ CQkJCSBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VU X0RFRkFVTFRfTUFYU0laRSk7CisKKwlpbml0X3Jvd19kZXNjcmlwdGlvbl9idWYoKTsKKwor CXNlZyA9IGRzbV9hdHRhY2goRGF0dW1HZXRJbnQzMihtYWluX2FyZykpOworCWlmIChzZWcg PT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qg bWFwIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCXRvYyA9IHNobV90 b2NfYXR0YWNoKEFVVE9OT01PVVNfTUFHSUMsIGRzbV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7 CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co ImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkp OworCisJLyogRmluZCBkYXRhIHN0cnVjdHVyZXMgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5 LiAqLworCWZkYXRhID0gc2htX3RvY19sb29rdXAodG9jLCBBVVRPTk9NT1VTX0tFWV9GSVhF RF9EQVRBLCBmYWxzZSk7CisKKwlndWNzdGF0ZSA9IHNobV90b2NfbG9va3VwKHRvYywgQVVU T05PTU9VU19LRVlfR1VDLCBmYWxzZSk7CisKKwljb21tYW5kX21xID0gc2htX3RvY19sb29r dXAodG9jLCBBVVRPTk9NT1VTX0tFWV9DT01NQU5EX1FVRVVFLCBmYWxzZSk7CisJc2htX21x X3NldF9yZWNlaXZlcihjb21tYW5kX21xLCBNeVByb2MpOworCWNvbW1hbmRfcWggPSBzaG1f bXFfYXR0YWNoKGNvbW1hbmRfbXEsIHNlZywgTlVMTCk7CisKKwlyZXNwb25zZV9tcSA9IHNo bV90b2NfbG9va3VwKHRvYywgQVVUT05PTU9VU19LRVlfUkVTUE9OU0VfUVVFVUUsIGZhbHNl KTsKKwlzaG1fbXFfc2V0X3NlbmRlcihyZXNwb25zZV9tcSwgTXlQcm9jKTsKKwlyZXNwb25z ZV9xaCA9IHNobV9tcV9hdHRhY2gocmVzcG9uc2VfbXEsIHNlZywgTlVMTCk7CisKKwlwcV9y ZWRpcmVjdF90b19zaG1fbXEoc2VnLCByZXNwb25zZV9xaCk7CisJQmFja2dyb3VuZFdvcmtl ckluaXRpYWxpemVDb25uZWN0aW9uQnlPaWQoZmRhdGEtPmRhdGFiYXNlX2lkLAorCQkJCQkJ CQkJCQkgIGZkYXRhLT5hdXRoZW50aWNhdGVkX3VzZXJfaWQsIDApOworCVNldENsaWVudEVu Y29kaW5nKEdldERhdGFiYXNlRW5jb2RpbmcoKSk7CisKKwlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCVJlc3RvcmVHVUNTdGF0ZShndWNzdGF0ZSk7CisJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisKKwlwcm9jZXNzX3Nlc3Npb25fcHJlbG9hZF9saWJyYXJpZXMoKTsK KworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoZmRhdGEtPmN1cnJlbnRfdXNlcl9pZCwgZmRh dGEtPnNlY19jb250ZXh0KTsKKworCXdoZXJlVG9TZW5kT3V0cHV0ID0gRGVzdFJlbW90ZTsK KwlSZWFkeUZvclF1ZXJ5KHdoZXJlVG9TZW5kT3V0cHV0KTsgLyogWiBSZWFkeUZvclF1ZXJ5 Ki8KKworCU1lc3NhZ2VDb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCQkJICAgIk1lc3NhZ2VDb250ZXh0IiwKKwkJCQkJCQkJCQkg ICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9JTklUU0laRSwKKwkJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUp OworCisJZG8KKwl7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhNZXNzYWdlQ29udGV4dCk7 CisJCU1lbW9yeUNvbnRleHRSZXNldChNZXNzYWdlQ29udGV4dCk7CisJCUludmFsaWRhdGVD YXRhbG9nU25hcHNob3RDb25kaXRpb25hbGx5KCk7CisKKwkJcGdzdGF0X3JlcG9ydF9zdGF0 KGZhbHNlKTsKKwkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsK KworCQlzaG1fbXFfcmVjZWl2ZV9zdHJpbmdpbmZvKGNvbW1hbmRfcWgsICZtc2cpOworCQlt c2d0eXBlID0gcHFfZ2V0bXNnYnl0ZSgmbXNnKTsKKworCQlzd2l0Y2ggKG1zZ3R5cGUpCisJ CXsKKwkJCWNhc2UgJ0InOgorCQkJCXsKKwkJCQkJU2V0Q3VycmVudFN0YXRlbWVudFN0YXJ0 VGltZXN0YW1wKCk7CisJCQkJCWV4ZWNfYmluZF9tZXNzYWdlKCZtc2cpOworCQkJCQlicmVh azsKKwkJCQl9CisJCQljYXNlICdEJzogLyogRGVzY3JpYmUgKi8KKwkJCQl7CisJCQkJCWlu dAkgZGVzY3JpYmVfdHlwZTsKKwkJCQkJY29uc3QgY2hhciAqZGVzY3JpYmVfdGFyZ2V0Owor CisJCQkJCVNldEN1cnJlbnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCgpOworCisJCQkJCWRl c2NyaWJlX3R5cGUgPSBwcV9nZXRtc2dieXRlKCZtc2cpOworCQkJCQlkZXNjcmliZV90YXJn ZXQgPSBwcV9nZXRtc2dzdHJpbmcoJm1zZyk7CisJCQkJCXBxX2dldG1zZ2VuZCgmbXNnKTsK KworCQkJCQlzd2l0Y2ggKGRlc2NyaWJlX3R5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgJ1Mn OiAvKiBQcmVwYXJlZFN0YXRlbWVudCAqLworCQkJCQkJCWV4ZWNfZGVzY3JpYmVfc3RhdGVt ZW50X21lc3NhZ2UoZGVzY3JpYmVfdGFyZ2V0KTsKKwkJCQkJCQlicmVhazsKKyNpZmRlZiBY WFgKKwkJCQkJCWNhc2UgJ1AnOiAvKiBQb3J0YWwgKi8KKwkJCQkJCQlleGVjX2Rlc2NyaWJl X3BvcnRhbF9tZXNzYWdlKGRlc2NyaWJlX3RhcmdldCk7CisJCQkJCQkJYnJlYWs7CisjZW5k aWYKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJCQkJCSBlcnJtc2co ImludmFsaWQgREVTQ1JJQkUgbWVzc2FnZSBzdWJ0eXBlICVkIiwKKwkJCQkJCQkJCQkJZGVz Y3JpYmVfdHlwZSkpKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVh azsKKwkJCWNhc2UgJ0UnOiAvKiBFeGVjdXRlICovCisJCQkJeworCQkJCQljb25zdCBjaGFy ICpwb3J0YWxfbmFtZTsKKwkJCQkJaW50CQkJbWF4X3Jvd3M7CisKKwkJCQkJU2V0Q3VycmVu dFN0YXRlbWVudFN0YXJ0VGltZXN0YW1wKCk7CisKKwkJCQkJcG9ydGFsX25hbWUgPSBwcV9n ZXRtc2dzdHJpbmcoJm1zZyk7CisJCQkJCW1heF9yb3dzID0gcHFfZ2V0bXNnaW50KCZtc2cs IDQpOworCQkJCQlwcV9nZXRtc2dlbmQoJm1zZyk7CisKKwkJCQkJZXhlY19leGVjdXRlX21l c3NhZ2UocG9ydGFsX25hbWUsIG1heF9yb3dzKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgJ1AnOiAvKiBQYXJzZSAqLworCQkJCXsKKwkJCQkJY29uc3QgY2hhciAqc3RtdF9u YW1lOworCQkJCQljb25zdCBjaGFyICpxdWVyeV9zdHJpbmc7CisJCQkJCWludAkJCW51bVBh cmFtczsKKwkJCQkJT2lkCQkgICAqcGFyYW1UeXBlcyA9IE5VTEw7CisJCQkJCWNvbnN0IGNo YXIgKipwYXJhbU5hbWVzID0gTlVMTDsKKworCQkJCQlTZXRDdXJyZW50U3RhdGVtZW50U3Rh cnRUaW1lc3RhbXAoKTsKKworCQkJCQlzdG10X25hbWUgPSBwcV9nZXRtc2dzdHJpbmcoJm1z Zyk7CisJCQkJCXF1ZXJ5X3N0cmluZyA9IHBxX2dldG1zZ3N0cmluZygmbXNnKTsKKwkJCQkJ bnVtUGFyYW1zID0gcHFfZ2V0bXNnaW50KCZtc2csIDIpOworCQkJCQlpZiAobnVtUGFyYW1z ID4gMCkKKwkJCQkJeworCQkJCQkJaW50CQkJaTsKKworCQkJCQkJcGFyYW1UeXBlcyA9IHBh bGxvYyhudW1QYXJhbXMgKiBzaXplb2YoT2lkKSk7CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwg bnVtUGFyYW1zOyBpKyspCisJCQkJCQkJcGFyYW1UeXBlc1tpXSA9IHBxX2dldG1zZ2ludCgm bXNnLCA0KTsKKwkJCQkJfQorCQkJCQkvKiBJZiBkYXRhIGxlZnQgaW4gbWVzc2FnZSwgcmVh ZCBwYXJhbWV0ZXIgbmFtZXMuICovCisJCQkJCWlmIChtc2cuY3Vyc29yICE9IG1zZy5sZW4p CisJCQkJCXsKKwkJCQkJCWludAkJCWk7CisKKwkJCQkJCXBhcmFtTmFtZXMgPSBwYWxsb2Mo bnVtUGFyYW1zICogc2l6ZW9mKGNoYXIgKikpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IG51 bVBhcmFtczsgaSsrKQorCQkJCQkJCXBhcmFtTmFtZXNbaV0gPSBwcV9nZXRtc2dzdHJpbmco Jm1zZyk7CisJCQkJCX0KKwkJCQkJcHFfZ2V0bXNnZW5kKCZtc2cpOworCisJCQkJCWV4ZWNf cGFyc2VfbWVzc2FnZShxdWVyeV9zdHJpbmcsIHN0bXRfbmFtZSwKKwkJCQkJCQkJCSAgIHBh cmFtVHlwZXMsIG51bVBhcmFtcywgcGFyYW1OYW1lcyk7CisJCQkJCWJyZWFrOworCQkJCX0K KwkJCWNhc2UgJ1EnOiAvKiBRdWVyeSAqLworCQkJCXsKKwkJCQkJY29uc3QgY2hhciAqc3Fs OworCQkJCQlpbnQgc2F2ZV9sb2dfc3RhdGVtZW50OworCQkJCQlib29sIHNhdmVfbG9nX2R1 cmF0aW9uOworCQkJCQlpbnQgc2F2ZV9sb2dfbWluX2R1cmF0aW9uX3N0YXRlbWVudDsKKwor CQkJCQlzcWwgPSBwcV9nZXRtc2dzdHJpbmcoJm1zZyk7CisJCQkJCXBxX2dldG1zZ2VuZCgm bXNnKTsKKworCQkJCQkvKiBYWFggcm9vbSBmb3IgaW1wcm92ZW1lbnQgKi8KKwkJCQkJc2F2 ZV9sb2dfc3RhdGVtZW50ID0gbG9nX3N0YXRlbWVudDsKKwkJCQkJc2F2ZV9sb2dfZHVyYXRp b24gPSBsb2dfZHVyYXRpb247CisJCQkJCXNhdmVfbG9nX21pbl9kdXJhdGlvbl9zdGF0ZW1l bnQgPSBsb2dfbWluX2R1cmF0aW9uX3N0YXRlbWVudDsKKworCQkJCQljaGVja19jbGllbnRf ZW5jb2RpbmdfaG9vayA9IGF1dG9ub21vdXNfY2hlY2tfY2xpZW50X2VuY29kaW5nX2hvb2s7 CisJCQkJCWxvZ19zdGF0ZW1lbnQgPSBMT0dTVE1UX05PTkU7CisJCQkJCWxvZ19kdXJhdGlv biA9IGZhbHNlOworCQkJCQlsb2dfbWluX2R1cmF0aW9uX3N0YXRlbWVudCA9IC0xOworCisJ CQkJCVNldEN1cnJlbnRTdGF0ZW1lbnRTdGFydFRpbWVzdGFtcCgpOworCQkJCQlleGVjX3Np bXBsZV9xdWVyeShzcWwsIDEpOworCisJCQkJCWxvZ19zdGF0ZW1lbnQgPSBzYXZlX2xvZ19z dGF0ZW1lbnQ7CisJCQkJCWxvZ19kdXJhdGlvbiA9IHNhdmVfbG9nX2R1cmF0aW9uOworCQkJ CQlsb2dfbWluX2R1cmF0aW9uX3N0YXRlbWVudCA9IHNhdmVfbG9nX21pbl9kdXJhdGlvbl9z dGF0ZW1lbnQ7CisJCQkJCWNoZWNrX2NsaWVudF9lbmNvZGluZ19ob29rID0gTlVMTDsKKwor CQkJCQlSZWFkeUZvclF1ZXJ5KHdoZXJlVG9TZW5kT3V0cHV0KTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJY2FzZSAnUyc6IC8qIFN5bmMgKi8KKwkJCQl7CisJCQkJCXBxX2dldG1zZ2Vu ZCgmbXNnKTsKKwkJCQkJZmluaXNoX3hhY3RfY29tbWFuZCgpOworCQkJCQlSZWFkeUZvclF1 ZXJ5KHdoZXJlVG9TZW5kT3V0cHV0KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSAn WCc6IC8qIFRlcm1pbmF0ZSAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04p LAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBwcm90b2NvbCBtZXNzYWdlIHR5cGUgZnJvbSBh dXRvbm9tb3VzIHNlc3Npb24gbGVhZGVyOiAlYyIsCisJCQkJCQkJCW1zZ3R5cGUpKSk7CisJ CQkJYnJlYWs7CisJCX0KKwl9CisJd2hpbGUgKG1zZ3R5cGUgIT0gJ1gnKTsKK30KKworCitz dGF0aWMgdm9pZAorc2htX21xX3JlY2VpdmVfc3RyaW5naW5mbyhzaG1fbXFfaGFuZGxlICpx aCwgU3RyaW5nSW5mb0RhdGEgKm1zZykKK3sKKwlTaXplCQluYnl0ZXM7CisJdm9pZAkJKmRh dGE7CisKKwlzaG1fbXFfcmVzdWx0IHJlcyA9IHNobV9tcV9yZWNlaXZlKHFoLCAmbmJ5dGVz LCAmZGF0YSwgZmFsc2UpOworCWlmIChyZXMgIT0gU0hNX01RX1NVQ0NFU1MpCisJCWVsb2co RVJST1IsICJzaG1fbXFfcmVjZWl2ZSBmYWlsZWQ6ICVkIiwgcmVzKTsKKworCWluaXRTdHJp bmdJbmZvKG1zZyk7CisJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhtc2csIGRhdGEsIG5ieXRl cyk7Cit9CisKKworc3RhdGljIHZvaWQKK2F1dG9ub21vdXNfY2hlY2tfY2xpZW50X2VuY29k aW5nX2hvb2sodm9pZCkKK3sKKwllbG9nKEVSUk9SLCAiY2Fubm90IHNldCBjbGllbnQgZW5j b2RpbmcgaW4gYXV0b25vbW91cyBzZXNzaW9uIik7Cit9CisKKworc3RhdGljIFR1cGxlRGVz YworVHVwbGVEZXNjX2Zyb21fUm93RGVzY3JpcHRpb24oU3RyaW5nSW5mbyBtc2cpCit7CisJ aW50MTYJCW5hdHRzID0gcHFfZ2V0bXNnaW50KG1zZywgMik7CisJVHVwbGVEZXNjCXR1cGRl c2MgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYyhuYXR0cyk7CisJCisJZm9yIChpbnQxNiBp ID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQljb25zdCBjaGFyICpjb2xuYW1lOworCQlP aWQgICAgIHR5cGVfb2lkOworCQlpbnQzMgl0eXBtb2Q7CisJCWludDE2CWZvcm1hdDsKKwor CQljb2xuYW1lID0gcHFfZ2V0bXNnc3RyaW5nKG1zZyk7CisJCSh2b2lkKSBwcV9nZXRtc2dp bnQobXNnLCA0KTsgICAvKiB0YWJsZSBPSUQgKi8KKwkJKHZvaWQpIHBxX2dldG1zZ2ludCht c2csIDIpOyAgIC8qIHRhYmxlIGF0dG51bSAqLworCQl0eXBlX29pZCA9IHBxX2dldG1zZ2lu dChtc2csIDQpOworCQkodm9pZCkgcHFfZ2V0bXNnaW50KG1zZywgMik7ICAgLyogdHlwZSBs ZW5ndGggKi8KKwkJdHlwbW9kID0gcHFfZ2V0bXNnaW50KG1zZywgNCk7CisJCWZvcm1hdCA9 IHBxX2dldG1zZ2ludChtc2csIDIpOworCQkodm9pZCkgZm9ybWF0OworCQkvKiBYWFggVGhl IHByb3RvY29sIHNvbWV0aW1lcyBzZW5kcyAwICh0ZXh0KSBpZiB0aGUgZm9ybWF0IGlzIG5v dAorCQkgKiBkZXRlcm1pbmVkIHlldC4gRml4IHdoeSBpdCBjYW4ndCBiZSBkZXRlcm1pbmVk LgorCQkgKiBXZSBhbHdheXMgdXNlIGJpbmFyeSwgMS4KKwkJICovCisKKwkJVHVwbGVEZXNj SW5pdEVudHJ5KHR1cGRlc2MsIGkgKyAxLCBjb2xuYW1lLCB0eXBlX29pZCwgdHlwbW9kLCAw KTsKKwl9CisJcmV0dXJuIHR1cGRlc2M7Cit9CisKKworc3RhdGljIEhlYXBUdXBsZQorSGVh cFR1cGxlX2Zyb21fRGF0YVJvdyhUdXBsZURlc2MgdHVwZGVzYywgU3RyaW5nSW5mbyBtc2cp Cit7CisJaW50MTYJCW5hdHRzID0gcHFfZ2V0bXNnaW50KG1zZywgMik7CisJRGF0dW0JCSp2 YWx1ZXM7CisJYm9vbAkJKm51bGxzOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCUFzc2Vy dCh0dXBkZXNjKTsKKworCWlmIChuYXR0cyAhPSB0dXBkZXNjLT5uYXR0cykKKwkJZWxvZyhF UlJPUiwgIm1hbGZvcm1lZCBEYXRhUm93Iik7CisKKwl2YWx1ZXMgPSBwYWxsb2MobmF0dHMg KiBzaXplb2YoKnZhbHVlcykpOworCW51bGxzID0gcGFsbG9jKG5hdHRzICogc2l6ZW9mKCpu dWxscykpOworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCisJZm9yIChpbnQxNiBpID0gMDsg aSA8IG5hdHRzOyBpKyspCisJeworCQlpbnQzMiBsZW4gPSBwcV9nZXRtc2dpbnQobXNnLCA0 KTsKKworCQlpZiAobGVuIDwgMCkKKwkJCW51bGxzW2ldID0gdHJ1ZTsKKwkJZWxzZQorCQl7 CisJCQlPaWQgcmVjdmlkOworCQkJT2lkIHR5cGlvcGFyYW1zOworCisJCQludWxsc1tpXSA9 IGZhbHNlOworCisJCQlnZXRUeXBlQmluYXJ5SW5wdXRJbmZvKHR1cGRlc2MtPmF0dHJzW2ld LmF0dHR5cGlkLAorCQkJCQkJCQkgICAmcmVjdmlkLAorCQkJCQkJCQkgICAmdHlwaW9wYXJh bXMpOworCQkJcmVzZXRTdHJpbmdJbmZvKCZidWYpOworCQkJYXBwZW5kQmluYXJ5U3RyaW5n SW5mbygmYnVmLCBwcV9nZXRtc2dieXRlcyhtc2csIGxlbiksIGxlbik7CisJCQl2YWx1ZXNb aV0gPSBPaWRSZWNlaXZlRnVuY3Rpb25DYWxsKHJlY3ZpZCwgJmJ1ZiwgdHlwaW9wYXJhbXMs CisJCQkJCQkJCQkJCSAgIHR1cGRlc2MtPmF0dHJzW2ldLmF0dHR5cG1vZCk7CisJCX0KKwl9 CisKKwlyZXR1cm4gaGVhcF9mb3JtX3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpOwor fQorCisKK3N0YXRpYyB2b2lkCitmb3J3YXJkX05vdGlmeVJlc3BvbnNlKFN0cmluZ0luZm8g bXNnKQoreworCWludDMyCXBpZDsKKwljb25zdCBjaGFyICpjaGFubmVsOworCWNvbnN0IGNo YXIgKnBheWxvYWQ7CisKKwlwaWQgPSBwcV9nZXRtc2dpbnQobXNnLCA0KTsKKwljaGFubmVs ID0gcHFfZ2V0bXNncmF3c3RyaW5nKG1zZyk7CisJcGF5bG9hZCA9IHBxX2dldG1zZ3Jhd3N0 cmluZyhtc2cpOworCXBxX2VuZG1lc3NhZ2UobXNnKTsKKworCU5vdGlmeU15RnJvbnRFbmQo Y2hhbm5lbCwgcGF5bG9hZCwgcGlkKTsKK30KKworc3RhdGljIHZvaWQKK3JldGhyb3dfZXJy b3Jub3RpY2UoU3RyaW5nSW5mbyBtc2csIGludCBtaW5fZWxldmVsKQoreworCUVycm9yRGF0 YQllZGF0YTsKKworCXBxX3BhcnNlX2Vycm9ybm90aWNlKG1zZywgJmVkYXRhKTsKKwllZGF0 YS5lbGV2ZWwgPSBNaW4oZWRhdGEuZWxldmVsLCBtaW5fZWxldmVsKTsKKwlpZihlZGF0YS5l bGV2ZWwgPj0gRVJST1IpIHsKKwkJc2xpc3Rfbm9kZSAqbm9kZSA9IHNsaXN0X3BvcF9oZWFk X25vZGUoJkF1dG9ub21vdXNTdGFjayk7CisJCUF1dG9ub21vdXNTZXNzaW9uICpzZXNzaW9u ID0gc2xpc3RfY29udGFpbmVyKEF1dG9ub21vdXNTdGFja05vZGUsIG5vZGUsIG5vZGUpLT5z ZXNzaW9uOworCQlBdXRvbm9tb3VzU2Vzc2lvblJlbGVhc2Uoc2Vzc2lvbik7CisJCXBmcmVl KG5vZGUpOworCX0KKwlUaHJvd0Vycm9yRGF0YSgmZWRhdGEpOworfQorCisKK3N0YXRpYyB2 b2lkCitpbnZhbGlkX3Byb3RvY29sX21lc3NhZ2UoY2hhciBtc2d0eXBlLCBpbnQgcGhhc2Up Cit7CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklP TEFUSU9OKSwKKwkJCSBlcnJtc2coImludmFsaWQgcHJvdG9jb2wgbWVzc2FnZSB0eXBlICVj IGZyb20gYXV0b25vbW91cyBzZXNzaW9uIGR1cmluZyBwaGFzZSAlZCIsCisJCQkJCW1zZ3R5 cGUsIHBoYXNlKSkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDcyOThhMTg3ZDEuLjQ0 YTgwOWQ0YzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysg Yi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNs dWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgorI2luY2x1ZGUgInRjb3AvYXV0b25vbW91 cy5oIgogI2luY2x1ZGUgInRjb3AvZmFzdHBhdGguaCIKICNpbmNsdWRlICJ0Y29wL3BxdWVy eS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKQEAgLTE2OSw2ICsxNzAsMjQgQEAg c3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBSZWNvdmVyeUNvbmZsaWN0UGVuZGluZ1Jl YXNvbnNbTlVNX1BST0NTSUdOQUxTXTsKIHN0YXRpYyBNZW1vcnlDb250ZXh0IHJvd19kZXNj cmlwdGlvbl9jb250ZXh0ID0gTlVMTDsKIHN0YXRpYyBTdHJpbmdJbmZvRGF0YSByb3dfZGVz Y3JpcHRpb25fYnVmOwogCitleHRlcm4gdm9pZCBpbml0X3Jvd19kZXNjcmlwdGlvbl9idWYo dm9pZCk7IC8qIGtlZXAgcGF0Y2ggbWluaW1hbCAqLwordm9pZCBpbml0X3Jvd19kZXNjcmlw dGlvbl9idWYoKQoreworCU1lbW9yeUNvbnRleHQgb2xkX2NvbnRleHQgPSBDdXJyZW50TWVt b3J5Q29udGV4dDsKKwkvKgorCSAqIENyZWF0ZSBtZW1vcnkgY29udGV4dCBhbmQgYnVmZmVy IHVzZWQgZm9yIFJvd0Rlc2NyaXB0aW9uIG1lc3NhZ2VzLiBBcworCSAqIFNlbmRSb3dEZXNj cmlwdGlvbk1lc3NhZ2UoKSwgdmlhIGV4ZWNfZGVzY3JpYmVfc3RhdGVtZW50X21lc3NhZ2Uo KSwgaXMKKwkgKiBmcmVxdWVudGx5IGV4ZWN1dGVkIGZvciBldmVyIHNpbmdsZSBzdGF0ZW1l bnQsIHdlIGRvbid0IHdhbnQgdG8KKwkgKiBhbGxvY2F0ZSBhIHNlcGFyYXRlIGJ1ZmZlciBl dmVyeSB0aW1lLgorCSAqLworCXJvd19kZXNjcmlwdGlvbl9jb250ZXh0ID0gQWxsb2NTZXRD b250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJIlJvd0Rlc2Ny aXB0aW9uQ29udGV4dCIsCisJCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJvd19kZXNjcmlwdGlvbl9jb250ZXh0KTsKKwlp bml0U3RyaW5nSW5mbygmcm93X2Rlc2NyaXB0aW9uX2J1Zik7CisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZF9jb250ZXh0KTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCWRlY2xzIGZv ciByb3V0aW5lcyBvbmx5IHVzZWQgaW4gdGhpcyBmaWxlCiAgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x ODMsOCArMjAyLDggQEAgc3RhdGljIGludAllcnJkZXRhaWxfZXhlY3V0ZShMaXN0ICpyYXdf cGFyc2V0cmVlX2xpc3QpOwogc3RhdGljIGludAllcnJkZXRhaWxfcGFyYW1zKFBhcmFtTGlz dEluZm8gcGFyYW1zKTsKIHN0YXRpYyBpbnQJZXJyZGV0YWlsX2Fib3J0KHZvaWQpOwogc3Rh dGljIHZvaWQgYmluZF9wYXJhbV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwotc3RhdGlj IHZvaWQgc3RhcnRfeGFjdF9jb21tYW5kKHZvaWQpOwotc3RhdGljIHZvaWQgZmluaXNoX3hh Y3RfY29tbWFuZCh2b2lkKTsKK3ZvaWQgc3RhcnRfeGFjdF9jb21tYW5kKHZvaWQpOwordm9p ZCBmaW5pc2hfeGFjdF9jb21tYW5kKHZvaWQpOwogc3RhdGljIGJvb2wgSXNUcmFuc2FjdGlv bkV4aXRTdG10KE5vZGUgKnBhcnNldHJlZSk7CiBzdGF0aWMgYm9vbCBJc1RyYW5zYWN0aW9u RXhpdFN0bXRMaXN0KExpc3QgKnBzdG10cyk7CiBzdGF0aWMgYm9vbCBJc1RyYW5zYWN0aW9u U3RtdExpc3QoTGlzdCAqcHN0bXRzKTsKQEAgLTcxMCw3ICs3MjksNyBAQCBwZ19hbmFseXpl X2FuZF9yZXdyaXRlX3ZhcnBhcmFtcyhSYXdTdG10ICpwYXJzZXRyZWUsCiAJCQkJCQkJCSBj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiAJCQkJCQkJCSBPaWQgKipwYXJhbVR5cGVzLAog CQkJCQkJCQkgaW50ICpudW1QYXJhbXMsCi0JCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpx dWVyeUVudikKKwkJCQkJCQkJIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25zdCBj aGFyICpwYXJhbU5hbWVzW10pCiB7CiAJUXVlcnkJICAgKnF1ZXJ5OwogCUxpc3QJICAgKnF1 ZXJ5dHJlZV9saXN0OwpAQCAtNzI0LDcgKzc0Myw3IEBAIHBnX2FuYWx5emVfYW5kX3Jld3Jp dGVfdmFycGFyYW1zKFJhd1N0bXQgKnBhcnNldHJlZSwKIAkJUmVzZXRVc2FnZSgpOwogCiAJ cXVlcnkgPSBwYXJzZV9hbmFseXplX3ZhcnBhcmFtcyhwYXJzZXRyZWUsIHF1ZXJ5X3N0cmlu ZywgcGFyYW1UeXBlcywgbnVtUGFyYW1zLAotCQkJCQkJCQkJcXVlcnlFbnYpOworCQkJCQkJ CQkJcXVlcnlFbnYsIHBhcmFtTmFtZXMpOwogCiAJLyoKIAkgKiBDaGVjayBhbGwgcGFyYW1l dGVyIHR5cGVzIGdvdCBkZXRlcm1pbmVkLgpAQCAtMTAwOCw4ICsxMDI3LDggQEAgcGdfcGxh bl9xdWVyaWVzKExpc3QgKnF1ZXJ5dHJlZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywg aW50IGN1cnNvck9wdGlvbnMsCiAgKgogICogRXhlY3V0ZSBhICJzaW1wbGUgUXVlcnkiIHBy b3RvY29sIG1lc3NhZ2UuCiAgKi8KLXN0YXRpYyB2b2lkCi1leGVjX3NpbXBsZV9xdWVyeShj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCit2b2lkCitleGVjX3NpbXBsZV9xdWVyeShjb25z dCBjaGFyICpxdWVyeV9zdHJpbmcsIGludDE2IGZvcm1hdCkKIHsKIAlDb21tYW5kRGVzdCBk ZXN0ID0gd2hlcmVUb1NlbmRPdXRwdXQ7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpA QCAtMTEwMyw3ICsxMTIyLDYgQEAgZXhlY19zaW1wbGVfcXVlcnkoY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nKQogCQkJCSAgICpwbGFudHJlZV9saXN0OwogCQlQb3J0YWwJCXBvcnRhbDsK IAkJRGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKLQkJaW50MTYJCWZvcm1hdDsKIAkJY29uc3Qg Y2hhciAqY21kdGFnbmFtZTsKIAkJc2l6ZV90CQljbWR0YWdsZW47CiAKQEAgLTEyMzMsNiAr MTI1MSw4IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykK IAkJICovCiAJCVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90 KTsKIAorCQlpZiAoZm9ybWF0IDwgMCkKKwkJewogCQkvKgogCQkgKiBTZWxlY3QgdGhlIGFw cHJvcHJpYXRlIG91dHB1dCBmb3JtYXQ6IHRleHQgdW5sZXNzIHdlIGFyZSBkb2luZyBhCiAJ CSAqIEZFVENIIGZyb20gYSBiaW5hcnkgY3Vyc29yLiAgKFByZXR0eSBncm90dHkgdG8gaGF2 ZSB0byBkbyB0aGlzIGhlcmUKQEAgLTEyNTMsNiArMTI3Myw3IEBAIGV4ZWNfc2ltcGxlX3F1 ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkJCQkJZm9ybWF0ID0gMTsgLyogQklO QVJZICovCiAJCQl9CiAJCX0KKwkJfQogCQlQb3J0YWxTZXRSZXN1bHRGb3JtYXQocG9ydGFs LCAxLCAmZm9ybWF0KTsKIAogCQkvKgpAQCAtMTM4NiwxMSArMTQwNywxMiBAQCBleGVjX3Np bXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAgKgogICogRXhlY3V0ZSBh ICJQYXJzZSIgcHJvdG9jb2wgbWVzc2FnZS4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGV4 ZWNfcGFyc2VfbWVzc2FnZShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCS8qIHN0cmluZyB0 byBleGVjdXRlICovCiAJCQkJICAgY29uc3QgY2hhciAqc3RtdF9uYW1lLAkvKiBuYW1lIGZv ciBwcmVwYXJlZCBzdG10ICovCiAJCQkJICAgT2lkICpwYXJhbVR5cGVzLCAvKiBwYXJhbWV0 ZXIgdHlwZXMgKi8KLQkJCQkgICBpbnQgbnVtUGFyYW1zKQkvKiBudW1iZXIgb2YgcGFyYW1l dGVycyAqLworCQkJCSAgIGludCBudW1QYXJhbXMsCS8qIG51bWJlciBvZiBwYXJhbWV0ZXJz ICovCisJCQkJICAgY29uc3QgY2hhciAqcGFyYW1OYW1lc1tdKQogewogCU1lbW9yeUNvbnRl eHQgdW5uYW1lZF9zdG10X2NvbnRleHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKQEAgLTE1MjEsNyArMTU0Myw3IEBAIGV4ZWNfcGFyc2VfbWVzc2FnZShjb25zdCBj aGFyICpxdWVyeV9zdHJpbmcsCS8qIHN0cmluZyB0byBleGVjdXRlICovCiAJCQkJCQkJCQkJ CQkJCSAgcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJCQkJCQkgICZwYXJhbVR5cGVzLAogCQkJ CQkJCQkJCQkJCQkgICZudW1QYXJhbXMsCi0JCQkJCQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJ CQkJCQkJCQkJCSAgTlVMTCwgcGFyYW1OYW1lcyk7CiAKIAkJLyogRG9uZSB3aXRoIHRoZSBz bmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nICovCiAJCWlmIChzbmFwc2hvdF9zZXQpCkBAIC0x NjIxLDcgKzE2NDMsNyBAQCBleGVjX3BhcnNlX21lc3NhZ2UoY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAkvKiBzdHJpbmcgdG8gZXhlY3V0ZSAqLwogICoKICAqIFByb2Nlc3MgYSAiQmlu ZCIgbWVzc2FnZSB0byBjcmVhdGUgYSBwb3J0YWwgZnJvbSBhIHByZXBhcmVkIHN0YXRlbWVu dAogICovCi1zdGF0aWMgdm9pZAordm9pZAogZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5m byBpbnB1dF9tZXNzYWdlKQogewogCWNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lOwpAQCAtMjA4 MCw3ICsyMTAyLDcgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNz YWdlKQogICoKICAqIFByb2Nlc3MgYW4gIkV4ZWN1dGUiIG1lc3NhZ2UgZm9yIGEgcG9ydGFs CiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBleGVjX2V4ZWN1dGVfbWVzc2FnZShjb25zdCBj aGFyICpwb3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cykKIHsKIAlDb21tYW5kRGVzdCBkZXN0 OwpAQCAtMjU5Miw3ICsyNjE0LDcgQEAgYmluZF9wYXJhbV9lcnJvcl9jYWxsYmFjayh2b2lk ICphcmcpCiAgKgogICogUHJvY2VzcyBhICJEZXNjcmliZSIgbWVzc2FnZSBmb3IgYSBwcmVw YXJlZCBzdGF0ZW1lbnQKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGV4ZWNfZGVzY3JpYmVf c3RhdGVtZW50X21lc3NhZ2UoY29uc3QgY2hhciAqc3RtdF9uYW1lKQogewogCUNhY2hlZFBs YW5Tb3VyY2UgKnBzcmM7CkBAIC0yNzM4LDcgKzI3NjAsNyBAQCBleGVjX2Rlc2NyaWJlX3Bv cnRhbF9tZXNzYWdlKGNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lKQogLyoKICAqIENvbnZlbmll bmNlIHJvdXRpbmVzIGZvciBzdGFydGluZy9jb21taXR0aW5nIGEgc2luZ2xlIGNvbW1hbmQu CiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzdGFydF94YWN0X2NvbW1hbmQodm9pZCkKIHsK IAlpZiAoIXhhY3Rfc3RhcnRlZCkKQEAgLTI3NjYsNyArMjc4OCw3IEBAIHN0YXJ0X3hhY3Rf Y29tbWFuZCh2b2lkKQogCQkJCQkJCSBjbGllbnRfY29ubmVjdGlvbl9jaGVja19pbnRlcnZh bCk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBmaW5pc2hfeGFjdF9jb21tYW5kKHZvaWQp CiB7CiAJLyogY2FuY2VsIGFjdGl2ZSBzdGF0ZW1lbnQgdGltZW91dCBhZnRlciBlYWNoIGNv bW1hbmQgKi8KQEAgLTQzMTMsNiArNDMzNSwxNCBAQCBQb3N0Z3Jlc01haW4oY29uc3QgY2hh ciAqZGJuYW1lLCBjb25zdCBjaGFyICp1c2VybmFtZSkKIAogCWlmIChzaWdzZXRqbXAobG9j YWxfc2lnam1wX2J1ZiwgMSkgIT0gMCkKIAl7CisJCS8qIEF1dG9ub21vdXMgdHJhbnNhY3Rp b25zICovCisJCS8qIENsZWFyIHN0YWNrIGFuZCBwb29sICovCisJCXdoaWxlKCFzbGlzdF9p c19lbXB0eSgmQXV0b25vbW91c1N0YWNrKSkgeworCQkJc2xpc3Rfbm9kZSAqbm9kZSA9IHNs aXN0X3BvcF9oZWFkX25vZGUoJkF1dG9ub21vdXNTdGFjayk7CisJCQlwZnJlZShub2RlKTsK KwkJfQorCQlBdXRvbm9tb3VzUG9vbERlc3Ryb3lFcnJvcigpOworCiAJCS8qCiAJCSAqIE5P VEU6IGlmIHlvdSBhcmUgdGVtcHRlZCB0byBhZGQgbW9yZSBjb2RlIGluIHRoaXMgaWYtYmxv Y2ssCiAJCSAqIGNvbnNpZGVyIHRoZSBoaWdoIHByb2JhYmlsaXR5IHRoYXQgaXQgc2hvdWxk IGJlIGluCkBAIC00NjQ3LDEwICs0Njc3LDEwIEBAIFBvc3RncmVzTWFpbihjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQkJCQlpZiAoYW1fd2Fsc2VuZGVy KQogCQkJCQl7CiAJCQkJCQlpZiAoIWV4ZWNfcmVwbGljYXRpb25fY29tbWFuZChxdWVyeV9z dHJpbmcpKQotCQkJCQkJCWV4ZWNfc2ltcGxlX3F1ZXJ5KHF1ZXJ5X3N0cmluZyk7CisJCQkJ CQkJZXhlY19zaW1wbGVfcXVlcnkocXVlcnlfc3RyaW5nLCAtMSk7CiAJCQkJCX0KIAkJCQkJ ZWxzZQotCQkJCQkJZXhlY19zaW1wbGVfcXVlcnkocXVlcnlfc3RyaW5nKTsKKwkJCQkJCWV4 ZWNfc2ltcGxlX3F1ZXJ5KHF1ZXJ5X3N0cmluZywgLTEpOwogCiAJCQkJCXZhbGdyaW5kX3Jl cG9ydF9lcnJvcl9xdWVyeShxdWVyeV9zdHJpbmcpOwogCkBAIC00NjgyLDcgKzQ3MTIsNyBA QCBQb3N0Z3Jlc01haW4oY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICp1c2VybmFt ZSkKIAkJCQkJcHFfZ2V0bXNnZW5kKCZpbnB1dF9tZXNzYWdlKTsKIAogCQkJCQlleGVjX3Bh cnNlX21lc3NhZ2UocXVlcnlfc3RyaW5nLCBzdG10X25hbWUsCi0JCQkJCQkJCQkgICBwYXJh bVR5cGVzLCBudW1QYXJhbXMpOworCQkJCQkJCQkJICAgcGFyYW1UeXBlcywgbnVtUGFyYW1z LCBOVUxMKTsKIAogCQkJCQl2YWxncmluZF9yZXBvcnRfZXJyb3JfcXVlcnkocXVlcnlfc3Ry aW5nKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IGY3 Yzk4ODJmN2MuLjdhYWMxNDcxYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFu ZGJ5LmgiCisjaW5jbHVkZSAidGNvcC9hdXRvbm9tb3VzLmgiCiAjaW5jbHVkZSAidGNvcC90 Y29wcHJvdC5oIgogI2luY2x1ZGUgInRzZWFyY2gvdHNfY2FjaGUuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgpAQCAtMjY2Miw2ICsyNjYzLDE5IEBAIHN0cnVjdCBjb25maWdf aW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAor CXsKKwkJeyJhdXRvbm9tb3VzX3Nlc3Npb25fbGlmZXRpbWUiLAorCQkJUEdDX1NJR0hVUCwK KwkJCUNVU1RPTV9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJNYXhpbXVtIGxpZmV0aW1l IG9mIGF1dG9ub21vdXMgc2Vzc2lvbi4gSW4gbWludXRlcy4gMzAwIGJ5IGRlZmF1bHQuIiks CisJCQlnZXR0ZXh0X25vb3AoIkEgdmFsdWUgb2YgMCB0dXJucyBvZmYgdGhlIHRpbWVvdXQu IiksCisJCQlHVUNfVU5JVF9NSU4KKwkJfSwKKwkJJmF1dG9ub21vdXNfc2Vzc2lvbl9saWZl dGltZSwKKwkJMzAwLCAwLCBJTlRfTUFYLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKwog CXsKIAkJeyJhdXRoZW50aWNhdGlvbl90aW1lb3V0IiwgUEdDX1NJR0hVUCwgQ09OTl9BVVRI X0FVVEgsCiAJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIG1heGltdW0gYWxsb3dlZCB0aW1l IHRvIGNvbXBsZXRlIGNsaWVudCBhdXRoZW50aWNhdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBjZjlmMjgzY2Zl Li5jNWY5ODE2ZmY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlCkBAIC02MzIsNiArNjMyLDEwIEBACiAjbG9nX3BsYW5uZXJfc3Rh dHMgPSBvZmYKICNsb2dfZXhlY3V0b3Jfc3RhdHMgPSBvZmYKIAorIy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyBBVVRPTk9NT1VTIFRSQU5TQUNUSU9OUworIy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorI2F1dG9ub21vdXNfc2Vzc2lvbl9saWZldGltZSA9IDMwMG1pbgkjIGxp ZmV0aW1lIG9mIGF1dG9ub21vdXMgc2Vzc2lvbgogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAjIEFVVE9WQUNVVU0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL3BxbXEu aCBiL3NyYy9pbmNsdWRlL2xpYnBxL3BxbXEuaAppbmRleCBhZjYwN2VkZjRjLi4zNWI1ZWRj ZTkyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9wcW1xLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbGlicHEvcHFtcS5oCkBAIC0xOCw2ICsxOCw3IEBACiAKIGV4dGVybiB2b2lkIHBx X3JlZGlyZWN0X3RvX3NobV9tcShkc21fc2VnbWVudCAqc2VnLCBzaG1fbXFfaGFuZGxlICpt cWgpOwogZXh0ZXJuIHZvaWQgcHFfc2V0X3BhcmFsbGVsX2xlYWRlcihwaWRfdCBwaWQsIEJh Y2tlbmRJZCBiYWNrZW5kX2lkKTsKK2V4dGVybiB2b2lkIHBxX3N0b3BfcmVkaXJlY3RfdG9f c2htX21xKHZvaWQpOwogCiBleHRlcm4gdm9pZCBwcV9wYXJzZV9lcnJvcm5vdGljZShTdHJp bmdJbmZvIG1zZywgRXJyb3JEYXRhICplZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3BhcnNlci9hbmFseXplLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCmlu ZGV4IGM5NjQ4M2FlNzguLjlkMDdkNzQxNmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bh cnNlci9hbmFseXplLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaApAQCAt MjgsNyArMjgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgcG9zdF9wYXJzZV9hbmFseXplX2hv b2tfdHlwZSBwb3N0X3BhcnNlX2FuYWx5emVfaG9vazsKIGV4dGVybiBRdWVyeSAqcGFyc2Vf YW5hbHl6ZV9maXhlZHBhcmFtcyhSYXdTdG10ICpwYXJzZVRyZWUsIGNvbnN0IGNoYXIgKnNv dXJjZVRleHQsCiAJCQkJCQkJCQkJY29uc3QgT2lkICpwYXJhbVR5cGVzLCBpbnQgbnVtUGFy YW1zLCBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudik7CiBleHRlcm4gUXVlcnkgKnBhcnNl X2FuYWx5emVfdmFycGFyYW1zKFJhd1N0bXQgKnBhcnNlVHJlZSwgY29uc3QgY2hhciAqc291 cmNlVGV4dCwKLQkJCQkJCQkJCSAgT2lkICoqcGFyYW1UeXBlcywgaW50ICpudW1QYXJhbXMs IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52KTsKKwkJCQkJCQkJCSAgT2lkICoqcGFyYW1U eXBlcywgaW50ICpudW1QYXJhbXMsIFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25z dCBjaGFyICpwYXJhbU5hbWVzW10pOwogZXh0ZXJuIFF1ZXJ5ICpwYXJzZV9hbmFseXplX3dp dGhjYihSYXdTdG10ICpwYXJzZVRyZWUsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQsCiAJCQkJ CQkJCSAgIFBhcnNlclNldHVwSG9vayBwYXJzZXJTZXR1cCwKIAkJCQkJCQkJICAgdm9pZCAq cGFyc2VyU2V0dXBBcmcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vf cGFyYW0uaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9wYXJhbS5oCmluZGV4IGQ0ODY1 ZTUwZjYuLmEwMGE1MzBkM2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJz ZV9wYXJhbS5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9wYXJhbS5oCkBAIC0x OCw3ICsxOCw3IEBACiBleHRlcm4gdm9pZCBzZXR1cF9wYXJzZV9maXhlZF9wYXJhbWV0ZXJz KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkgY29uc3QgT2lkICpwYXJhbVR5cGVz LCBpbnQgbnVtUGFyYW1zKTsKIGV4dGVybiB2b2lkIHNldHVwX3BhcnNlX3ZhcmlhYmxlX3Bh cmFtZXRlcnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAotCQkJCQkJCQkJCQlPaWQgKipwYXJhbVR5 cGVzLCBpbnQgKm51bVBhcmFtcyk7CisJCQkJCQkJCQkJCU9pZCAqKnBhcmFtVHlwZXMsIGlu dCAqbnVtUGFyYW1zLCBjb25zdCBjaGFyICpwYXJhbU5hbWVzW10pOwogZXh0ZXJuIHZvaWQg Y2hlY2tfdmFyaWFibGVfcGFyYW1ldGVycyhQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpx dWVyeSk7CiBleHRlcm4gYm9vbCBxdWVyeV9jb250YWluc19leHRlcm5fcGFyYW1zKFF1ZXJ5 ICpxdWVyeSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvYXV0b25vbW91cy5o IGIvc3JjL2luY2x1ZGUvdGNvcC9hdXRvbm9tb3VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMTU2ZmI0M2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9p bmNsdWRlL3Rjb3AvYXV0b25vbW91cy5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgQVVU T05PTU9VU19ICisjZGVmaW5lIEFVVE9OT01PVVNfSAorCisjaW5jbHVkZSAiYWNjZXNzL3R1 cGRlc2MuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9wZ19s aXN0LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3du ZXIuaCIKKworc3RydWN0IEF1dG9ub21vdXNTZXNzaW9uOwordHlwZWRlZiBzdHJ1Y3QgQXV0 b25vbW91c1Nlc3Npb24gQXV0b25vbW91c1Nlc3Npb247CisKK3N0cnVjdCBBdXRvbm9tb3Vz UHJlcGFyZWRTdGF0ZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBBdXRvbm9tb3VzUHJlcGFyZWRT dGF0ZW1lbnQgQXV0b25vbW91c1ByZXBhcmVkU3RhdGVtZW50OworCit0eXBlZGVmIHN0cnVj dCBBdXRvbm9tb3VzUmVzdWx0Cit7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJTGlzdAkgICAq dHVwbGVzOworCWNoYXIJICAgKmNvbW1hbmQ7Cit9IEF1dG9ub21vdXNSZXN1bHQ7CisKK0F1 dG9ub21vdXNTZXNzaW9uICpBdXRvbm9tb3VzU2Vzc2lvbkdldCh2b2lkKTsKK3ZvaWQgQXV0 b25vbW91c1Nlc3Npb25SZWxlYXNlKEF1dG9ub21vdXNTZXNzaW9uICpzZXNzaW9uKTsKK3Zv aWQgQXV0b25vbW91c1Bvb2xEZXN0cm95RXJyb3Iodm9pZCk7CitBdXRvbm9tb3VzU2Vzc2lv biAqQXV0b25vbW91c1Nlc3Npb25Qb3BTdGFja1Nlc3Npb25FeGNlcHRpb24odm9pZCAqYmxv Y2spOworQXV0b25vbW91c1Nlc3Npb24gKkF1dG9ub21vdXNTZXNzaW9uUG9wU3RhY2tTZXNz aW9uKGJvb2wgaXNCbG9ja0F1dG9ub21vdXMpOworQXV0b25vbW91c1Jlc3VsdCAqQXV0b25v bW91c1Nlc3Npb25FeGVjdXRlKEF1dG9ub21vdXNTZXNzaW9uICpzZXNzaW9uLCBjb25zdCBj aGFyICpzcWwpOworQXV0b25vbW91c1ByZXBhcmVkU3RhdGVtZW50ICpBdXRvbm9tb3VzU2Vz c2lvblByZXBhcmUoQXV0b25vbW91c1Nlc3Npb24gKnNlc3Npb24sIGNvbnN0IGNoYXIgKnNx bCwgaW50MTYgbmFyZ3MsCisJCQkJCQkJICBPaWQgYXJndHlwZXNbXSwgY29uc3QgY2hhciAq YXJnbmFtZXNbXSk7CitBdXRvbm9tb3VzUmVzdWx0ICpBdXRvbm9tb3VzU2Vzc2lvbkV4ZWN1 dGVQcmVwYXJlZChBdXRvbm9tb3VzUHJlcGFyZWRTdGF0ZW1lbnQgKnN0bXQsIGludDE2IG5h cmdzLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscyk7CisKK3ZvaWQgQXV0b25vbW91c1Nl c3Npb25NYWluKERhdHVtIG1haW5fYXJnKTsKKwordHlwZWRlZiBzdHJ1Y3QgQXV0b25vbW91 c1N0YWNrTm9kZSB7CisJc2xpc3Rfbm9kZSBub2RlOworCUF1dG9ub21vdXNTZXNzaW9uKiBz ZXNzaW9uOworCXZvaWQgKmJsb2NrOworfSBBdXRvbm9tb3VzU3RhY2tOb2RlOworCitleHRl cm4gUEdETExJTVBPUlQgaW50IGF1dG9ub21vdXNfc2Vzc2lvbl9saWZldGltZTsKKworZXh0 ZXJuIFBHRExMSU1QT1JUIHNsaXN0X2hlYWQgQXV0b25vbW91c1N0YWNrOworZXh0ZXJuIFBH RExMSU1QT1JUIE1lbW9yeUNvbnRleHQgQXV0b25vbW91c0NvbnRleHQ7IC8qIE5PVEU6IG1v dmUgdG8gc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCAqLworZXh0ZXJuIFBHRExMSU1Q T1JUIFJlc291cmNlT3duZXIgQXV0b25vbW91c1Jlc291cmNlT3duZXI7IC8qIE5PVEU6IG1v dmUgdG8gc3JjL2luY2x1ZGUvdXRpbHMvcmVzb3duZXIuaCAqLworCisKKyNlbmRpZiAvKiBB VVRPTk9NT1VTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3Qu aCBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3QuaAppbmRleCBiNjk0ZDg1OTc0Li4wM2Nk ZjkxZTQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmgKKysrIGIv c3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oCkBAIC01Miw3ICs1Miw3IEBAIGV4dGVybiBM aXN0ICpwZ19hbmFseXplX2FuZF9yZXdyaXRlX3ZhcnBhcmFtcyhSYXdTdG10ICpwYXJzZXRy ZWUsCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJCQkJCQkJ CQkgIE9pZCAqKnBhcmFtVHlwZXMsCiAJCQkJCQkJCQkJCSAgaW50ICpudW1QYXJhbXMsCi0J CQkJCQkJCQkJCSAgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworCQkJCQkJCQkJCQkg IFF1ZXJ5RW52aXJvbm1lbnQgKnF1ZXJ5RW52LCBjb25zdCBjaGFyICpwYXJhbU5hbWVzW10p OwogZXh0ZXJuIExpc3QgKnBnX2FuYWx5emVfYW5kX3Jld3JpdGVfd2l0aGNiKFJhd1N0bXQg KnBhcnNldHJlZSwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiAJ CQkJCQkJCQkJICAgUGFyc2VyU2V0dXBIb29rIHBhcnNlclNldHVwLApAQCAtNjQsNiArNjQs MTIgQEAgZXh0ZXJuIFBsYW5uZWRTdG10ICpwZ19wbGFuX3F1ZXJ5KFF1ZXJ5ICpxdWVyeXRy ZWUsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIGV4dGVybiBMaXN0ICpwZ19wbGFuX3F1 ZXJpZXMoTGlzdCAqcXVlcnl0cmVlcywgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQkJ CQkJCSBpbnQgY3Vyc29yT3B0aW9ucywKIAkJCQkJCQkgUGFyYW1MaXN0SW5mbyBib3VuZFBh cmFtcyk7CitleHRlcm4gdm9pZCBleGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsIGludDE2IGZvcm1hdCk7CitleHRlcm4gdm9pZCBleGVjX3BhcnNlX21lc3Nh Z2UoY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBjb25zdCBjaGFyICpzdG10X25hbWUsCisJ CQkJCQkJICAgT2lkIHBhcmFtVHlwZXNbXSwgaW50IG51bVBhcmFtcywgY29uc3QgY2hhciAq cGFyYW1OYW1lc1tdKTsKK2V4dGVybiB2b2lkIGV4ZWNfYmluZF9tZXNzYWdlKFN0cmluZ0lu Zm8gaW5wdXRfbWVzc2FnZSk7CitleHRlcm4gdm9pZCBleGVjX2V4ZWN1dGVfbWVzc2FnZShj b25zdCBjaGFyICpwb3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cyk7CitleHRlcm4gdm9pZCBl eGVjX2Rlc2NyaWJlX3N0YXRlbWVudF9tZXNzYWdlKGNvbnN0IGNoYXIgKnN0bXRfbmFtZSk7 CiAKIGV4dGVybiB2b2lkIGRpZShTSUdOQUxfQVJHUyk7CiBleHRlcm4gdm9pZCBxdWlja2Rp ZShTSUdOQUxfQVJHUykgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CkBAIC03Myw2ICs3OSw5 IEBAIGV4dGVybiB2b2lkIEhhbmRsZVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUHJvY1Np Z25hbFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc0NsaWVudFJlYWRJbnRl cnJ1cHQoYm9vbCBibG9ja2VkKTsKIGV4dGVybiB2b2lkIFByb2Nlc3NDbGllbnRXcml0ZUlu dGVycnVwdChib29sIGJsb2NrZWQpOwogCitleHRlcm4gdm9pZCBzdGFydF94YWN0X2NvbW1h bmQodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfeGFjdF9jb21tYW5kKHZvaWQpOworCiBl eHRlcm4gdm9pZCBwcm9jZXNzX3Bvc3RncmVzX3N3aXRjaGVzKGludCBhcmdjLCBjaGFyICph cmd2W10sCiAJCQkJCQkJCQkgIEd1Y0NvbnRleHQgY3R4LCBjb25zdCBjaGFyICoqZGJuYW1l KTsKIGV4dGVybiB2b2lkIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZSBiL3Ny Yy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZQppbmRleCBkZmI4MTUyMTJmLi5kMzE1NWYxYzQ3 IDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL3Bs L3BscGdzcWwvc3JjL01ha2VmaWxlCkBAIC0zMiw3ICszMiw3IEBAIERBVEEgPSBwbHBnc3Fs LmNvbnRyb2wgcGxwZ3NxbC0tMS4wLnNxbAogCiBSRUdSRVNTX09QVFMgPSAtLWRibmFtZT0k KFBMX1RFU1REQikKIAotUkVHUkVTUyA9IHBscGdzcWxfYXJyYXkgcGxwZ3NxbF9jYWxsIHBs cGdzcWxfY29udHJvbCBwbHBnc3FsX2NvcHkgcGxwZ3NxbF9kb21haW4gXAorUkVHUkVTUyA9 IHBscGdzcWxfYXV0b25vbW91cyBwbHBnc3FsX2FycmF5IHBscGdzcWxfY2FsbCBwbHBnc3Fs X2NvbnRyb2wgcGxwZ3NxbF9jb3B5IHBscGdzcWxfZG9tYWluIFwKIAlwbHBnc3FsX3JlY29y ZCBwbHBnc3FsX2NhY2hlIHBscGdzcWxfc2ltcGxlIHBscGdzcWxfdHJhbnNhY3Rpb24gXAog CXBscGdzcWxfdHJhcCBwbHBnc3FsX3RyaWdnZXIgcGxwZ3NxbF92YXJwcm9wcwogCmRpZmYg LS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9hdXRvbm9tb3Vz Lm91dCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2F1dG9ub21vdXMu b3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJlNjRiODQxYjYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3Nx bF9hdXRvbm9tb3VzLm91dApAQCAtMCwwICsxLDE0MjMgQEAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0g YXV0b25fZnVuYyBzaW1wbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiYXV0b25fZnVu YyBzaW1wbGUiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3QgImF1dG9uX2Z1bmMgc2ltcGxl IgorQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnQpOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gZnVuYygpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xB UkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQg SU5UTyB0YmwgVkFMVUVTICgxKTsKK0VORDsKKyQkOworU1RBUlQgVFJBTlNBQ1RJT047CitT RUxFQ1QgZnVuYygpOworIGZ1bmMgCistLS0tLS0KKyAKKygxIHJvdykKKworUk9MTEJBQ0s7 CitTRUxFQ1QgKiBGUk9NIHRibDsKKyBhIAorLS0tCisgMQorKDEgcm93KQorCitEUk9QIEZV TkNUSU9OIGZ1bmM7CitEUk9QIFRBQkxFIHRibDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBhdXRvbl9m dW5jIC0+IGZ1bmMgY2FsbCB0aHJvdWdoIFNFTEVDVCAtLS0tLS0tLS0tLS0tLS0tLQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiYXV0b25fZnVuYyAtPiBm dW5jIGNhbGwgdGhyb3VnaCBTRUxFQ1QiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3QgImF1 dG9uX2Z1bmMgLT4gZnVuYyBjYWxsIHRocm91Z2ggU0VMRUNUIgorQ1JFQVRFIFRBQkxFIHRi bCAoYSB2YXJjaGFyKTsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMoKSBSRVRV Uk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCitCRUdJTgorICBJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnaW4gZnVuYycpOworRU5EOworJCQ7CitDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBhdXRvbl9mdW5jKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFH RSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FD VElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdiZWZvcmUgZnVuYycp OworICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgU0VMRUNUIGZ1bmMoKTsKKyAgQ09NTUlUOwor ICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYycpOworRU5EOworJCQ7CitT VEFSVCBUUkFOU0FDVElPTjsKK1NFTEVDVCBhdXRvbl9mdW5jKCk7CisgYXV0b25fZnVuYyAK Ky0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitST0xMQkFDSzsKK1NFTEVDVCAqIEZST00g dGJsOworICAgICAgYSAgICAgIAorLS0tLS0tLS0tLS0tLQorIGJlZm9yZSBmdW5jCisgaW4g ZnVuYworIGFmdGVyIGZ1bmMKKygzIHJvd3MpCisKK0RST1AgRlVOQ1RJT04gZnVuYzsKK0RS T1AgRlVOQ1RJT04gYXV0b25fZnVuYzsKK0RST1AgVEFCTEUgdGJsOworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0t LS0tIGF1dG9uX2Z1bmMgLT4gZnVuYyBjYWxsIHRocm91Z2ggUEVSRk9STSAtLS0tLS0tLS0t LS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJhdXRv bl9mdW5jIC0+IGZ1bmMgY2FsbCB0aHJvdWdoIFBFUkZPUk0iJzsgRU5EOyAkJDsKK05PVElD RTogIFRlc3QgImF1dG9uX2Z1bmMgLT4gZnVuYyBjYWxsIHRocm91Z2ggUEVSRk9STSIKK0NS RUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TiBmdW5jKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFS RQorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2luIGZ1bmMnKTsKK0VORDsK KyQkOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXV0b25fZnVuYygpIFJFVFVSTlMg dm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9O T01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgn YmVmb3JlIGZ1bmMnKTsKKyAgU1RBUlQgVFJBTlNBQ1RJT047CisgIFBFUkZPUk0gZnVuYygp OworICBDT01NSVQ7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jJyk7 CitFTkQ7CiskJDsKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VMRUNUIGF1dG9uX2Z1bmMoKTsK KyBhdXRvbl9mdW5jIAorLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1JPTExCQUNLOwor U0VMRUNUICogRlJPTSB0Ymw7CisgICAgICBhICAgICAgCistLS0tLS0tLS0tLS0tCisgYmVm b3JlIGZ1bmMKKyBpbiBmdW5jCisgYWZ0ZXIgZnVuYworKDMgcm93cykKKworRFJPUCBGVU5D VElPTiBmdW5jOworRFJPUCBGVU5DVElPTiBhdXRvbl9mdW5jOworRFJPUCBUQUJMRSB0Ymw7 CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorLS0tLS0gYXV0b25fZnVuYyAtPiBhdXRvbl9mdW5jIGNhbGwgdGhyb3Vn aCBTRUxFQ1QgLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJCBCRUdJTiBSQUlTRSBOT1RJ Q0UgJ1Rlc3QgImF1dG9uX2Z1bmMgLT4gYXV0b25fZnVuYyBjYWxsIHRocm91Z2ggU0VMRUNU Iic7IEVORDsgJCQ7CitOT1RJQ0U6ICBUZXN0ICJhdXRvbl9mdW5jIC0+IGF1dG9uX2Z1bmMg Y2FsbCB0aHJvdWdoIFNFTEVDVCIKK0NSRUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhdXRvbl9mdW5jMSgpIFJFVFVSTlMgdm9pZAor TEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNf VFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnaW4gYXV0 b25fZnVuYzEnKTsKK0VORDsKKyQkOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXV0 b25fZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNM QVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJU IElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBhdXRvbl9mdW5jMScpOworICBTVEFSVCBUUkFO U0FDVElPTjsKKyAgU0VMRUNUIGF1dG9uX2Z1bmMxKCk7CisgIENPTU1JVDsKKyAgSU5TRVJU IElOVE8gdGJsIFZBTFVFUyAoJ2FmdGVyIGF1dG9uX2Z1bmMxJyk7CitFTkQ7CiskJDsKK1NU QVJUIFRSQU5TQUNUSU9OOworU0VMRUNUIGF1dG9uX2Z1bmMyKCk7CisgYXV0b25fZnVuYzIg CistLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1JPTExCQUNLOworU0VMRUNUICogRlJP TSB0Ymw7CisgICAgICAgICBhICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBi ZWZvcmUgYXV0b25fZnVuYzEKKyBpbiBhdXRvbl9mdW5jMQorIGFmdGVyIGF1dG9uX2Z1bmMx CisoMyByb3dzKQorCitEUk9QIEZVTkNUSU9OIGF1dG9uX2Z1bmMxOworRFJPUCBGVU5DVElP TiBhdXRvbl9mdW5jMjsKK0RST1AgVEFCTEUgdGJsOworLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIGF1dG9u X2Z1bmMgLT4gYXV0b25fZnVuYyBjYWxsIHRocm91Z2ggUEVSRk9STS0tLS0tLS0tLS0tCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJhdXRvbl9mdW5jIC0+ IGF1dG9uX2Z1bmMgY2FsbCB0aHJvdWdoIFBFUkZPUk0iJzsgRU5EOyAkJDsKK05PVElDRTog IFRlc3QgImF1dG9uX2Z1bmMgLT4gYXV0b25fZnVuYyBjYWxsIHRocm91Z2ggUEVSRk9STSIK K0NSRUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTiBhdXRvbl9mdW5jMSgpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMg JCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgor ICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnaW4gYXV0b25fZnVuYzEnKTsKK0VORDsKKyQk OworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXV0b25fZnVuYzIoKSBSRVRVUk5TIHZv aWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9N T1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2Jl Zm9yZSBhdXRvbl9mdW5jMScpOworICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgUEVSRk9STSBh dXRvbl9mdW5jMSgpOworICBDT01NSVQ7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdh ZnRlciBhdXRvbl9mdW5jMScpOworRU5EOworJCQ7CitTVEFSVCBUUkFOU0FDVElPTjsKK1NF TEVDVCBhdXRvbl9mdW5jMigpOworIGF1dG9uX2Z1bmMyIAorLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitST0xMQkFDSzsKK1NFTEVDVCAqIEZST00gdGJsOworICAgICAgICAgYSAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYmVmb3JlIGF1dG9uX2Z1bmMxCisg aW4gYXV0b25fZnVuYzEKKyBhZnRlciBhdXRvbl9mdW5jMQorKDMgcm93cykKKworRFJPUCBG VU5DVElPTiBhdXRvbl9mdW5jMTsKK0RST1AgRlVOQ1RJT04gYXV0b25fZnVuYzI7CitEUk9Q IFRBQkxFIHRibDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSA0IGF1dG9uIGZ1bmMgY2FsbHMsIHNpbXBs ZSBTUUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lO IFJBSVNFIE5PVElDRSAnVGVzdCAiNCBhdXRvbiBmdW5jIGNhbGxzLCBzaW1wbGUgU1FMIic7 IEVORDsgJCQ7CitOT1RJQ0U6ICBUZXN0ICI0IGF1dG9uIGZ1bmMgY2FsbHMsIHNpbXBsZSBT UUwiCitDUkVBVEUgVEFCTEUgdGJsIChhIGludCk7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTiBmdW5jMSgpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RF Q0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgxKTsKK0VORDsKKyQkOworQ1JFQVRFIE9SIFJFUExBQ0Ug RlVOQ1RJT04gZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQk CitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAg U0VMRUNUIGZ1bmMxKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDIpOworRU5EOwor JCQ7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMygpIFJFVFVSTlMgdm9pZAor TEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNf VFJBTlNBQ1RJT047CitCRUdJTgorICBTRUxFQ1QgZnVuYzIoKTsKKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoMyk7CitFTkQ7CiskJDsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IGZ1bmM0KCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFS RQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJ TlRPIHRibCBWQUxVRVMgKDApOworICBTRUxFQ1QgZnVuYzMoKTsKKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoNCk7CitFTkQ7CiskJDsKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VMRUNU IGZ1bmM0KCk7CisgZnVuYzQgCistLS0tLS0tCisgCisoMSByb3cpCisKK1JPTExCQUNLOwor U0VMRUNUICogRlJPTSB0Ymw7CisgYSAKKy0tLQorIDAKKyAxCisgMgorIDMKKyA0CisoNSBy b3dzKQorCitUUlVOQ0FURSB0Ymw7CitEUk9QIEZVTkNUSU9OIGZ1bmMxOworRFJPUCBGVU5D VElPTiBmdW5jMjsKK0RST1AgRlVOQ1RJT04gZnVuYzM7CitEUk9QIEZVTkNUSU9OIGZ1bmM0 OworRFJPUCBUQUJMRSB0Ymw7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0gNSBmdW5jIGNhbGxzIOKEljEs IHNpbXBsZSBTUUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0t IGF1dG9uX2Z1bmMgLT4gZnVuYyAtPiBhdXRvbl9mdW5jIC0+IGZ1bmMgLT4gYXV0b25fZnVu YworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiNSBmdW5jIGNh bGxzIDEsIHNpbXBsZSBTUUwiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3QgIjUgZnVuYyBj YWxscyAxLCBzaW1wbGUgU1FMIgorQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnQpOworQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzEoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBs cGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9O OworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsKK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMyKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFH RSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgUEVSRk9STSBmdW5jMSgpOworICBJTlNFUlQg SU5UTyB0YmwgVkFMVUVTICgyKTsKK0VORDsKKyQkOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVO Q1RJT04gZnVuYzMoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitE RUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgU0VM RUNUIGZ1bmMyKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDMpOworRU5EOworJCQ7 CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jNCgpIFJFVFVSTlMgdm9pZAorTEFO R1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIFBFUkZPUk0gZnVuYzMoKTsKKyAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoMyk7CitFTkQ7CiskJDsKK0NSRUFURSBPUiBSRVBMQUNF IEZVTkNUSU9OIGZ1bmM1KCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAk JAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisg IElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDApOworICBTRUxFQ1QgZnVuYzQoKTsKKyAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoNSk7CitFTkQ7CiskJDsKK1NUQVJUIFRSQU5TQUNUSU9O OworU0VMRUNUIGZ1bmM0KCk7CisgZnVuYzQgCistLS0tLS0tCisgCisoMSByb3cpCisKK1JP TExCQUNLOworU0VMRUNUICogRlJPTSB0Ymw7CisgYSAKKy0tLQorIDEKKyAyCisgMworKDMg cm93cykKKworVFJVTkNBVEUgdGJsOworRFJPUCBGVU5DVElPTiBmdW5jMTsKK0RST1AgRlVO Q1RJT04gZnVuYzI7CitEUk9QIEZVTkNUSU9OIGZ1bmMzOworRFJPUCBGVU5DVElPTiBmdW5j NDsKK0RST1AgRlVOQ1RJT04gZnVuYzU7CitEUk9QIFRBQkxFIHRibDsKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCist LS0tLSA1IGZ1bmMgY2FsbHMg4oSWMiwgc2ltcGxlIFNRTCAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZnVuYyAtPiBhdXRvbl9mdW5jIC0+IGZ1bmMgLT4g YXV0b25fZnVuYyAtPiBmdW5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNF ICdUZXN0ICI1IGZ1bmMgY2FsbHMgMiwgc2ltcGxlIFNRTCInOyBFTkQ7ICQkOworTk9USUNF OiAgVGVzdCAiNSBmdW5jIGNhbGxzIDIsIHNpbXBsZSBTUUwiCitDUkVBVEUgVEFCTEUgdGJs IChhIGludCk7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMSgpIFJFVFVSTlMg dm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKDEpOworRU5EOworJCQ7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBm dW5jMigpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUK KyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBTRUxFQ1QgZnVu YzEoKTsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMik7CitFTkQ7CiskJDsKK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMzKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBw bHBnc3FsCitBUyAkJAorQkVHSU4KKyAgUEVSRk9STSBmdW5jMigpOworICBJTlNFUlQgSU5U TyB0YmwgVkFMVUVTICgzKTsKK0VORDsKKyQkOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gZnVuYzQoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNM QVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgU0VMRUNU IGZ1bmMzKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDMpOworRU5EOworJCQ7CitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jNSgpIFJFVFVSTlMgdm9pZAorTEFOR1VB R0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDAp OworICBQRVJGT1JNIGZ1bmM0KCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDUpOwor RU5EOworJCQ7CitTRUxFQ1QgZnVuYzQoKTsKKyBmdW5jNCAKKy0tLS0tLS0KKyAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSB0Ymw7CisgYSAKKy0tLQorIDEKKyAyCisgMworIDMKKyg0 IHJvd3MpCisKK1RSVU5DQVRFIHRibDsKK0RST1AgRlVOQ1RJT04gZnVuYzE7CitEUk9QIEZV TkNUSU9OIGZ1bmMyOworRFJPUCBGVU5DVElPTiBmdW5jMzsKK0RST1AgRlVOQ1RJT04gZnVu YzQ7CitEUk9QIEZVTkNUSU9OIGZ1bmM1OworRFJPUCBUQUJMRSB0Ymw7CistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor LS0tLS0gYXV0b25fZnVuYyAtPiBhdXRvbl9mdW5jIGNhbGwsIGR5bmFtaWMgU1FMIC0tLS0t LS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAi YXV0b24gLT4gYXV0b24gY2FsbCwgZHluYW1pYyBTUUwiJzsgRU5EOyAkJDsKK05PVElDRTog IFRlc3QgImF1dG9uIC0+IGF1dG9uIGNhbGwsIGR5bmFtaWMgU1FMIgorQ1JFQVRFIFRBQkxF IHRibCAoYSBpbnQpOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzEoKSBSRVRV Uk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBB VVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgRVhFQ1VURSAnSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoMSknOworRU5EOworJCQ7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TiBmdW5jMigpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xB UkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBFWEVDVVRF ICdJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgwKSc7CisgIFNFTEVDVCBmdW5jMSgpOworICBF WEVDVVRFICdJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgyKSc7CitFTkQ7CiskJDsKK1NUQVJU IFRSQU5TQUNUSU9OOworU0VMRUNUIGZ1bmMyKCk7CisgZnVuYzIgCistLS0tLS0tCisgCiso MSByb3cpCisKK1JPTExCQUNLOworU0VMRUNUICogRlJPTSB0Ymw7CisgYSAKKy0tLQorIDAK KyAxCisgMgorKDMgcm93cykKKworVFJVTkNBVEUgdGJsOworRFJPUCBGVU5DVElPTiBmdW5j MTsKK0RST1AgRlVOQ1RJT04gZnVuYzI7CitEUk9QIFRBQkxFIHRibDsKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCist LS0tLSBmb3IgbG9vcCB3aXRoIHRyYW5zYWN0aW9uIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0t LS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZm9y IGxvb3Agd2l0aCB0cmFuc2FjdGlvbiBzdGF0ZW1lbnRzIic7IEVORDsgJCQ7CitOT1RJQ0U6 ICBUZXN0ICJmb3IgbG9vcCB3aXRoIHRyYW5zYWN0aW9uIHN0YXRlbWVudHMiCitDUkVBVEUg VEFCTEUgdGJsIChhIGludCk7CitDUkVBVEUgRlVOQ1RJT04gZHluYW1pYygpIFJFVFVSTlMg aW50ZWdlcgorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFV VE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBGT1IgaSBJTiAwLi45IExPT1AKKyAg ICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgICBFWEVDVVRFICdJTlNFUlQgSU5UTyB0YmwgVkFM VUVTICgnIHx8IGk6OnRleHQgfHwgJyknOworICAgIElGIGkgJSAyID0gMCBUSEVOCisgICAg ICBDT01NSVQ7CisgICAgRUxTRQorICAgICAgUk9MTEJBQ0s7CisgICAgRU5EIElGOworICBF TkQgTE9PUDsKKworICBSRVRVUk4gNDI7CitFTkQ7CiskJDsKK1NFTEVDVCBkeW5hbWljKCk7 CisgZHluYW1pYyAKKy0tLS0tLS0tLQorICAgICAgNDIKKygxIHJvdykKKworU0VMRUNUICog RlJPTSB0Ymw7CisgYSAKKy0tLQorIDAKKyAyCisgNAorIDYKKyA4CisoNSByb3dzKQorCitU UlVOQ0FURSB0Ymw7CitDUkVBVEUgRlVOQ1RJT04gc2ltcGxlKCkgUkVUVVJOUyBpbnRlZ2Vy CitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9V U19UUkFOU0FDVElPTjsKK0JFR0lOCisgIEZPUiBpIElOIDAuLjkgTE9PUAorICAgIFNUQVJU IFRSQU5TQUNUSU9OOworICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKGkpOworICAgIElG IGkgJSAyID0gMCBUSEVOCisgICAgICBDT01NSVQ7CisgICAgRUxTRQorICAgICAgUk9MTEJB Q0s7CisgICAgRU5EIElGOworICBFTkQgTE9PUDsKKworICBSRVRVUk4gNDI7CitFTkQ7Cisk JDsKK1NFTEVDVCBzaW1wbGUoKTsKKyBzaW1wbGUgCistLS0tLS0tLQorICAgICA0MgorKDEg cm93KQorCitTRUxFQ1QgKiBGUk9NIHRibDsKKyBhIAorLS0tCisgMAorIDIKKyA0CisgNgor IDgKKyg1IHJvd3MpCisKK1RSVU5DQVRFIHRibDsKK0RST1AgRlVOQ1RJT04gZHluYW1pYzsK K0RST1AgRlVOQ1RJT04gc2ltcGxlOworRFJPUCBUQUJMRSB0Ymw7CistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0t LS0gdHJhbnNhY3Rpb24gc2NvcGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCistLSBpZiBlcnJvciBpcyBpbiBhdXRvbm9tb3VzIGZ1bmN0aW9u LCB0aGVuIGV4aXQgZnJvbSBpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElD RSAnVGVzdCAidHJhbnNhY3Rpb24gc2NvcGUiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3Qg InRyYW5zYWN0aW9uIHNjb3BlIgorQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnRlZ2VyIENIRUNL IChhID4gNTAwKSk7CitDUkVBVEUgRlVOQ1RJT04gc2VwX3RyYW5zKCkKK1JFVFVSTlMgdm9p ZAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitC RUdJTgorICBJTlNFUlQgSU5UTyB0YmwoYSkgVkFMVUVTKDcwMCk7ICAgLS0gMXN0IGF1dG9u b21vdXMgdHJhbnNhY3Rpb24KKyAgSU5TRVJUIElOVE8gdGJsKGEpIFZBTFVFUygxMDApOyAg IC0tIDJuZCBhdXRvbm9tb3VzIHRyYW5zYWN0aW9uCisgIElOU0VSVCBJTlRPIHRibChhKSBW QUxVRVMoODAwKTsgICAtLSBubyB0cmFuc2FjdGlvbiwgYXMgaW4gMm5kIHZpb2xhdGlvbgor RU5ECiskJCBMQU5HVUFHRSBwbHBnc3FsOworU0VMRUNUIHNlcF90cmFucygpOworRVJST1I6 ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGJsIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50 ICJ0YmxfYV9jaGVjayIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgxMDApLgor Q09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIHNlcF90cmFucygpIGxpbmUgNiBhdCBTUUwg c3RhdGVtZW50CitTRUxFQ1QgKiBGUk9NIHRibDsKKyAgYSAgCistLS0tLQorIDcwMAorKDEg cm93KQorCitUUlVOQ0FURSBUQUJMRSB0Ymw7CitDUkVBVEUgRlVOQ1RJT04gb25lX3RyYW5z KCkKK1JFVFVSTlMgdm9pZAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNf VFJBTlNBQ1RJT047CitCRUdJTgorICBTVEFSVCBUUkFOU0FDVElPTjsgLS0gMSBhdXRvbm9t b3VzIHRyYW5zYWN0aW9uCisgICAgSU5TRVJUIElOVE8gdGJsKGEpIFZBTFVFUygxNzAwKTsK KyAgICBJTlNFUlQgSU5UTyB0YmwoYSkgVkFMVUVTKDIwMCk7IC0tIHZpb2xhdGlvbiBvZiBj b25zdHJhaW50CisgICAgSU5TRVJUIElOVE8gdGJsKGEpIFZBTFVFUygxODAwKTsKKyAgQ09N TUlUOworRU5ECiskJCBMQU5HVUFHRSBwbHBnc3FsOworU0VMRUNUIG9uZV90cmFucygpOwor RVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidGJsIiB2aW9sYXRlcyBjaGVjayBjb25z dHJhaW50ICJ0YmxfYV9jaGVjayIKK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgy MDApLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIG9uZV90cmFucygpIGxpbmUgNyBh dCBTUUwgc3RhdGVtZW50CitTRUxFQ1QgKiBGUk9NIHRibDsKKyBhIAorLS0tCisoMCByb3dz KQorCitUUlVOQ0FURSB0Ymw7CitEUk9QIEZVTkNUSU9OIHNlcF90cmFucygpOworRFJPUCBG VU5DVElPTiBvbmVfdHJhbnMoKTsKK0RST1AgVEFCTEUgdGJsOworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0t IG5vbiB0cmFuc2FjdGlvbiBjb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJub24gdHJh bnNhY3Rpb24gY29tbWFuZHMiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3QgIm5vbiB0cmFu c2FjdGlvbiBjb21tYW5kcyIKK0NSRUFURSBUQUJMRSB0YmwgKGEgaW50ZWdlcik7CitETyAk JAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisg ICBFWEVDVVRFICdWQUNVVU0gdGJsJzsKK0VORCAkJDsKK0RST1AgVEFCTEUgdGJsOworLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKy0tLS0tIGF1ZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdU ZXN0ICJhdWRpdCInOyBFTkQ7ICQkOworTk9USUNFOiAgVGVzdCAiYXVkaXQiCitDUkVBVEUg VEFCTEUgdGFibGVfdHJhY2tpbmcobG9nX2lkIHNlcmlhbCwgdXNlcm5hbWUgdGV4dCwgZXZl bnRfZGF0ZSB0aW1lc3RhbXAsIG1zZyB0ZXh0KTsKK0NSRUFURSBGVU5DVElPTiBsb2dfYWN0 aW9uX2F0eCAoCisgIHVzZXJuYW1lIHRleHQsIGV2ZW50X2RhdGUgdGltZXN0YW1wLCBtc2cg dGV4dAorKSBSRVRVUk5TIHZvaWQgQVMKKyRib2R5JAorREVDTEFSRQorICBQUkFHTUEgQVVU T05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIFNUQVJUIFRSQU5TQUNUSU9OOworICBJ TlNFUlQgSU5UTyB0YWJsZV90cmFja2luZyBWQUxVRVMgKG5leHR2YWwoJ3RhYmxlX3RyYWNr aW5nX2xvZ19pZF9zZXEnOjpyZWdjbGFzcyksdXNlcm5hbWUsIGV2ZW50X2RhdGUsIG1zZyk7 CisgIENPTU1JVDsKK0VORDsKKyRib2R5JAorTEFOR1VBR0UgcGxwZ3NxbDsKK0NSRUFURSBG VU5DVElPTiBsb2dfYWN0aW9uICgKKyAgdXNlcm5hbWUgdGV4dCwgZXZlbnRfZGF0ZSB0aW1l c3RhbXAsIG1zZyB0ZXh0CispIFJFVFVSTlMgdm9pZCBBUworJGJvZHkkCitERUNMQVJFCisg dl9xdWVyeSB0ZXh0OworQkVHSU4KKyAgLS0gQ2FsbCB0aGUgYXV0b25vbW91cyBmdW5jdGlv bgorICB2X3F1ZXJ5IDo9ICdTRUxFQ1QgbG9nX2FjdGlvbl9hdHggKCAnIHx8IHF1b3RlX251 bGxhYmxlKHVzZXJuYW1lKSB8fAorICAgICAgICAgICAgICcsJyB8fCBxdW90ZV9udWxsYWJs ZShldmVudF9kYXRlKSB8fCAnLCcgfHwgcXVvdGVfbnVsbGFibGUobXNnKSB8fCAnICknOwor ICBFWEVDVVRFIHZfcXVlcnk7CisKKyAgLS0gRG8gc29tZXRoaW5nIGVsc2UKKyAgUkFJU0Ug Tk9USUNFICdEaXZpc2lvbiBieSB6ZXJvJzsKKyAgUEVSRk9STSA1LzA7CitFTkQ7CiskYm9k eSQKK0xBTkdVQUdFIFBMUEdTUUw7CitTRUxFQ1QgKiBGUk9NIGxvZ19hY3Rpb24oY3VycmVu dF91c2VyOjp0ZXh0LCBub3coKTo6dGltZXN0YW1wLCAnVGVzdCc6OnRleHQpOworTk9USUNF OiAgRGl2aXNpb24gYnkgemVybworRVJST1I6ICBkaXZpc2lvbiBieSB6ZXJvCitDT05URVhU OiAgU1FMIHN0YXRlbWVudCAiU0VMRUNUIDUvMCIKK1BML3BnU1FMIGZ1bmN0aW9uIGxvZ19h Y3Rpb24odGV4dCx0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmUsdGV4dCkgbGluZSAxMiBh dCBQRVJGT1JNCitTRUxFQ1QgbXNnIEZST00gdGFibGVfdHJhY2tpbmc7CisgbXNnICAKKy0t LS0tLQorIFRlc3QKKygxIHJvdykKKworRFJPUCBGVU5DVElPTiBsb2dfYWN0aW9uOworRFJP UCBGVU5DVElPTiBsb2dfYWN0aW9uX2F0eDsKK0RST1AgVEFCTEUgdGFibGVfdHJhY2tpbmc7 CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorLS0tLS0gYXVkaXQgdGhyb3VnaCB0cmlnZ2VyIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB1c2VycyBhcmUgaW4gcGdfdXNl ciB0YWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiYXVk aXQgdGhyb3VnaCB0cmlnZ2VyIic7IEVORDsgJCQ7CitOT1RJQ0U6ICBUZXN0ICJhdWRpdCB0 aHJvdWdoIHRyaWdnZXIiCitDUkVBVEUgU0NIRU1BIGF1ZHRyaWc7CitDUkVBVEUgVEFCTEUg YXVkdHJpZy50YmwgKAorICAgIGlkIGludGVnZXIsCisgICAgdXNlcl9uYW1lIHZhcmNoYXIK Kyk7CitDUkVBVEUgVEFCTEUgYXVkdHJpZy5sb2cgKAorICB1c2VyX25hbWUgdmFyY2hhciwK KyAgZXZlbnQgdmFyY2hhcgorKTsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGF1ZHRy aWcubG9nX2Z1bmMoKQorUkVUVVJOUyBUUklHR0VSCitMQU5HVUFHRSBwbHBnc3FsCitBUyAk JAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKKyAgdl9hY3Rp b24gdmFyY2hhcjsKK0JFR0lOCisgIElGIChUR19PUCA9ICdJTlNFUlQnKSBUSEVOCisgICAg ICB2X2FjdGlvbiA6PSAnQWRkZWQgaWQ9JyB8fCBORVcuaWQ6OnRleHQ7CisgIEVMU0lGIChU R19PUCA9ICdVUERBVEUnKSBUSEVOCisgICAgICB2X2FjdGlvbiA6PSAnVXBkYXRlZCBpZD0n IHx8IE5FVy5pZDo6dGV4dDsKKyAgRUxTSUYgKFRHX09QID0gJ0RFTEVURScpIFRIRU4KKyAg ICAgIHZfYWN0aW9uIDo9ICdEZWxldGVkIGlkPScgfHwgT0xELmlkOjp0ZXh0OworICBFTkQg SUY7CisgIElOU0VSVCBJTlRPIGF1ZHRyaWcubG9nIFZBTFVFUyAoY3VycmVudF91c2VyLCB2 X2FjdGlvbik7CisgIFJFVFVSTiBORVc7CitFTkQ7CiskJDsKK0NSRUFURSBPUiBSRVBMQUNF IFRSSUdHRVIgYXVkdHJpZ190cmlnX2Z1bmMKK0FGVEVSIElOU0VSVCBPUiBVUERBVEUgT1Ig REVMRVRFCitPTiBhdWR0cmlnLnRibAorRk9SIEVBQ0ggUk9XCitFWEVDVVRFIFBST0NFRFVS RSBhdWR0cmlnLmxvZ19mdW5jKCk7CitTRUxFQ1QgKiBGUk9NIGF1ZHRyaWcubG9nOworIHVz ZXJfbmFtZSB8IGV2ZW50IAorLS0tLS0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKworU0VM RUNUICogRlJPTSBhdWR0cmlnLnRibDsKKyBpZCB8IHVzZXJfbmFtZSAKKy0tLS0rLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKK0lOU0VSVCBJTlRPIGF1ZHRyaWcudGJsIFZBTFVFUyAoOTAw MSwnU01JVEgnKTsKK0lOU0VSVCBJTlRPIGF1ZHRyaWcudGJsIFZBTFVFUyAoOTAwMiwnSk9O RVMnKTsKK0RFTEVURSBGUk9NIGF1ZHRyaWcudGJsIFdIRVJFIGlkPTkwMDE7CitTRUxFQ1Qg KiBGUk9NIGF1ZHRyaWcubG9nOworIHVzZXJfbmFtZSB8ICAgICAgZXZlbnQgICAgICAKKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tCisgcG9zdGdyZXMgIHwgQWRkZWQgaWQ9OTAw MQorIHBvc3RncmVzICB8IEFkZGVkIGlkPTkwMDIKKyBwb3N0Z3JlcyAgfCBEZWxldGVkIGlk PTkwMDEKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXVkdHJpZy50Ymw7CisgIGlkICB8 IHVzZXJfbmFtZSAKKy0tLS0tLSstLS0tLS0tLS0tLQorIDkwMDIgfCBKT05FUworKDEgcm93 KQorCitUUlVOQ0FURSBhdWR0cmlnLmxvZzsKK1RSVU5DQVRFIGF1ZHRyaWcudGJsOworU1RB UlQgVFJBTlNBQ1RJT047CitJTlNFUlQgSU5UTyBhdWR0cmlnLnRibCBWQUxVRVMgKDkwMDEs J1NNSVRIJyk7CitJTlNFUlQgSU5UTyBhdWR0cmlnLnRibCBWQUxVRVMgKDkwMDIsJ0pPTkVT Jyk7CitERUxFVEUgRlJPTSBhdWR0cmlnLnRibCBXSEVSRSBpZD05MDAxOworUk9MTEJBQ0s7 CitTRUxFQ1QgKiBGUk9NIGF1ZHRyaWcubG9nOworIHVzZXJfbmFtZSB8ICAgICAgZXZlbnQg ICAgICAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tCisgcG9zdGdyZXMgIHwgQWRk ZWQgaWQ9OTAwMQorIHBvc3RncmVzICB8IEFkZGVkIGlkPTkwMDIKKyBwb3N0Z3JlcyAgfCBE ZWxldGVkIGlkPTkwMDEKKygzIHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXVkdHJpZy50Ymw7 CisgaWQgfCB1c2VyX25hbWUgCistLS0tKy0tLS0tLS0tLS0tCisoMCByb3dzKQorCitEUk9Q IFRBQkxFIGF1ZHRyaWcubG9nOworRFJPUCBUQUJMRSBhdWR0cmlnLnRibDsKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CistLS0tLSBmdW5jdGlvbiBhbmQgcHJvY2VkdXJlIGNhbGwgaW4gYXV0b25vbW91cyBzZXNz aW9ucyAtLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHByb2NlZHVyZSBjYWxsIGlzIGZvcmJpZGRlbiBp biBhdXRvbm9tb3VzIGZ1bmN0aW9ucworLS0gYnV0IHBvc3NpYmxlIGluIHNpbXBsZSBmdW5j dGlvbnMsIHRoYXQgYXJlIGNhbGxlZCBpbiBhdXRvbm9tb3VzIGZ1bmN0aW9ucworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZnVuY3Rpb24gYW5kIHByb2Nl ZHVyZSBjYWxsIGluIGF1dG9ub21vdXMgc2Vzc2lvbnMiJzsgRU5EOyAkJDsKK05PVElDRTog IFRlc3QgImZ1bmN0aW9uIGFuZCBwcm9jZWR1cmUgY2FsbCBpbiBhdXRvbm9tb3VzIHNlc3Np b25zIgorQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnQpOworQ1JFQVRFIEZVTkNUSU9OIGZ1bmMo KQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsKK0NSRUFURSBQUk9DRURVUkUg cHJvYygpCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoMik7CisgIFJPTExCQUNLOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVT ICgzKTsKK0VORDsKKyQkOworLS0gY2hlY2s6IGF1dG9uX2Z1bmMgLT4gZnVuYworLS0gICAg ICAgICAgICAgICAgICAgLT4gcHJvYworQ1JFQVRFIEZVTkNUSU9OIGF1dG9uX2Z1bmMoKQor UkVUVVJOUyB2b2lkCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFO U0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDEwKTsKKyAgU0VM RUNUICogRlJPTSBmdW5jKCk7CisgIENBTEwgcHJvYygpOworICBJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTICgyMCk7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOworU0VMRUNUICBhdXRv bl9mdW5jKCk7CitFUlJPUjogIGNhbGwgb2YgcHJvY2VkdXJlcyBpcyBmb3JiaWRkZW4gY3Vy cmVudGx5IGluIGF1dG9ub21vdXMgc2Vzc2lvbnMsIENBTEwgcHJvYygpCitDT05URVhUOiAg UEwvcGdTUUwgZnVuY3Rpb24gYXV0b25fZnVuYygpIGxpbmUgNyBhdCBDQUxMCitTRUxFQ1Qg KiBGUk9NIHRibDsKKyBhICAKKy0tLS0KKyAxMAorICAxCisoMiByb3dzKQorCitUUlVOQ0FU RSBUQUJMRSB0Ymw7CistLSBjaGVjazogYXV0b25fcHJvYyAtPiBmdW5jCistLSAgICAgICAg ICAgICAgICAgICAtPiBwcm9jCitDUkVBVEUgUFJPQ0VEVVJFIGF1dG9uX3Byb2MoKQorTEFO R1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJB TlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgxMCk7CisgIFNF TEVDVCAqIEZST00gZnVuYygpOworICBDQUxMIHByb2MoKTsKKyAgSU5TRVJUIElOVE8gdGJs IFZBTFVFUyAoMjApOworRU5EOworJCQ7CitDQUxMIGF1dG9uX3Byb2MoKTsKK0VSUk9SOiAg Y2FsbCBvZiBwcm9jZWR1cmVzIGlzIGZvcmJpZGRlbiBjdXJyZW50bHkgaW4gYXV0b25vbW91 cyBzZXNzaW9ucywgQ0FMTCBwcm9jKCkKK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBh dXRvbl9wcm9jKCkgbGluZSA3IGF0IENBTEwKK1NFTEVDVCAqIEZST00gdGJsOworIGEgIAor LS0tLQorIDEwCisgIDEKKygyIHJvd3MpCisKK1RSVU5DQVRFIFRBQkxFIHRibDsKKy0tIGNo ZWNrOiBhdXRvbl9mdW5jXzIgLT4gZnVuY18yIC0+IHByb2Nfbm9fdHJhbnMKK0NSRUFURSBQ Uk9DRURVUkUgcHJvY19ub190cmFucygpCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVH SU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMik7CisgIElOU0VSVCBJTlRPIHRibCBW QUxVRVMgKDMpOworRU5EOworJCQ7CitDUkVBVEUgRlVOQ1RJT04gZnVuY18yKCkKK1JFVFVS TlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKDMwKTsKKyAgQ0FMTCBwcm9jX25vX3RyYW5zKCk7CisgIElOU0VSVCBJ TlRPIHRibCBWQUxVRVMgKDQwKTsKK0VORDsKKyQkOworQ1JFQVRFIEZVTkNUSU9OIGF1dG9u X2Z1bmNfMigpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNM QVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJU IElOVE8gdGJsIFZBTFVFUyAoMTApOworICBTRUxFQ1QgKiBGUk9NIGZ1bmNfMigpOworICBJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTICgyMCk7CitFTkQ7CiskJDsKK1NFTEVDVCBhdXRvbl9m dW5jXzIoKTsKKyBhdXRvbl9mdW5jXzIgCistLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHRibDsKKyBhICAKKy0tLS0KKyAxMAorIDMwCisgIDIKKyAgMwor IDQwCisgMjAKKyg2IHJvd3MpCisKK1RSVU5DQVRFIFRBQkxFIHRibDsKK0RST1AgRlVOQ1RJ T04gZnVuYzsKK0RST1AgRlVOQ1RJT04gZnVuY18yOworRFJPUCBQUk9DRURVUkUgcHJvYzsK K0RST1AgUFJPQ0VEVVJFIHByb2Nfbm9fdHJhbnM7CitEUk9QIEZVTkNUSU9OIGF1dG9uX2Z1 bmM7CitEUk9QIEZVTkNUSU9OIGF1dG9uX2Z1bmNfMjsKK0RST1AgUFJPQ0VEVVJFIGF1dG9u X3Byb2M7CitEUk9QIFRBQkxFIHRibDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBleGNlcHRpb24gc2lt cGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZXhjZXB0aW9uIHNpbXBsZSInOyBF TkQ7ICQkOworTk9USUNFOiAgVGVzdCAiZXhjZXB0aW9uIHNpbXBsZSIKK0NSRUFURSBGVU5D VElPTiBmX2V4Y2VwdGlvbigpCitSRVRVUk5TIFZPSUQgQVMgJCQKK0RFQ0xBUkUKKyAgICAg IFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgICAgIFJBSVNFIE5P VElDRSAnQ2FsbCBmX2V4Y2VwdGlvbic7CisgICAgICBSQUlTRSBFWENFUFRJT04gJ1Rlc3Qg ZXhjZXB0aW9uJyBVU0lORyBFUlJDT0RFID0gJ0FCMDAxJzsKK0VORDsKKyQkCitMQU5HVUFH RSBwbHBnc3FsOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZl9tYWluICgpCitSRVRV Uk5TIFZPSUQgQVMgJCQKK0JFR0lOCisgIEJFR0lOCisgICAgUEVSRk9STSBmX2V4Y2VwdGlv bigpOworICBFWENFUFRJT04KKyAgICBXSEVOIE9USEVSUyBUSEVOCisgICAgICBJRiBTUUxT VEFURSA9ICdBQjAwMScgVEhFTgorICAgICAgICBSQUlTRSBOT1RJQ0UgJ0NhdWdodCBjdXN0 b20gZXhjZXB0aW9uIHdpdGggU1FMU1RBVEUgQUIwMDEuJzsKKyAgICAgIEVMU0UKKyAgICAg ICAgUkFJU0UgTk9USUNFICdBbiBleGNlcHRpb24gb2NjdXJyZWQ6ICUnLCBTUUxFUlJNOwor ICAgICAgRU5EIElGOworICBFTkQ7CitFTkQ7CiskJAorTEFOR1VBR0UgcGxwZ3NxbDsKK1NF TEVDVCAqIEZST00gZl9tYWluKCk7CitOT1RJQ0U6ICBDYWxsIGZfZXhjZXB0aW9uCitOT1RJ Q0U6ICBDYXVnaHQgY3VzdG9tIGV4Y2VwdGlvbiB3aXRoIFNRTFNUQVRFIEFCMDAxLgorIGZf bWFpbiAKKy0tLS0tLS0tCisgCisoMSByb3cpCisKK0RST1AgRlVOQ1RJT04gZl9leGNlcHRp b247CitEUk9QIEZVTkNUSU9OIGZfbWFpbjsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBleGNlcHRpb24g d2l0aCBtYW55IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZXhjZXB0aW9uIHdpdGggbWFu eSBmdW5jdGlvbnMiJzsgRU5EOyAkJDsKK05PVElDRTogIFRlc3QgImV4Y2VwdGlvbiB3aXRo IG1hbnkgZnVuY3Rpb25zIgorQ1JFQVRFIFRBQkxFIHRibCAoYSB2YXJjaGFyKTsKK0NSRUFU RSBGVU5DVElPTiBmX2V4Y2VwdGlvbl9hdXRvbigpCitSRVRVUk5TIFZPSUQgQVMgJCQKK0RF Q0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgnYmVmb3JlIHJhaXNlJyk7CisgIFJBSVNFIEVYQ0VQVElP TiAnVGVzdCBleGNlcHRpb24nIFVTSU5HIEVSUkNPREUgPSAnQUIwMDEnOworICBJTlNFUlQg SU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgcmFpc2UnKTsKK0VORDsKKyQkCitMQU5HVUFHRSBw bHBnc3FsOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzAoKQorUkVUVVJOUyB2 b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJs IFZBTFVFUyAoJ2JlZm9yZSBmX2V4Y2VwdGlvbl9hdXRvbicpOworICBQRVJGT1JNIGZfZXhj ZXB0aW9uX2F1dG9uKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmX2V4 Y2VwdGlvbl9hdXRvbicpOworRU5EOworJCQ7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TiBmdW5jMF9hdXRvbigpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQk CitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBmdW5jMCcpOworICBQRVJGT1JNIGZ1 bmMwKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMCcpOworRU5E OworJCQ7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMSgpCitSRVRVUk5TIHZv aWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTICgnYmVmb3JlIGZ1bmMwX2F1dG9uJyk7CisgIFBFUkZPUk0gZnVuYzBfYXV0b24o KTsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2FmdGVyIGZ1bmMwX2F1dG9uJyk7CitF TkQ7CiskJDsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGNhdGNoX2V4YygpCitSRVRV Uk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCisgIEJFR0lOCisgICAgSU5TRVJU IElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBmdW5jMScpOworICAgIFBFUkZPUk0gZnVuYzEo KTsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYzEnKTsKKyAgRVhD RVBUSU9OCisgICAgV0hFTiBPVEhFUlMgVEhFTgorICAgICAgSUYgU1FMU1RBVEUgPSAnQUIw MDEnIFRIRU4KKyAgICAgICAgUkFJU0UgTk9USUNFICdDYXVnaHQgY3VzdG9tIGV4Y2VwdGlv biB3aXRoIFNRTFNUQVRFIEFCMDAxLic7CisgICAgICBFTFNFCisgICAgICAgIFJBSVNFIE5P VElDRSAnQW4gZXhjZXB0aW9uIG9jY3VycmVkOiAlJywgU1FMRVJSTTsKKyAgICAgIEVORCBJ RjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYzEgaW4gZXhjJyk7 CisgIEVORDsKKyQkOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzFfYXV0b24o KQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQ UkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIFNUQVJUIFRSQU5TQUNU SU9OOworICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdiZWZvcmUgY2F0Y2hfZXhjJyk7 CisgICAgUEVSRk9STSBjYXRjaF9leGMoKTsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVT ICgnYWZ0ZXIgY2F0Y2hfZXhjJyk7CisgIENPTU1JVDsKK0VORDsKKyQkOworQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gZnVuYzIoKQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBn c3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBm dW5jMV9hdXRvbicpOworICBQRVJGT1JNIGZ1bmMxX2F1dG9uKCk7CisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMV9hdXRvbicpOworRU5EOworJCQ7CitDUkVBVEUg T1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMl9hdXRvbigpCitSRVRVUk5TIHZvaWQKK0xBTkdV QUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5T QUNUSU9OOworQkVHSU4KKyAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoJ2JlZm9yZSBmdW5jMicpOworICAgIFBFUkZPUk0gZnVuYzIoKTsKKyAg ICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYzInKTsKKyAgUk9MTEJBQ0s7 CitFTkQ7CiskJDsKK0NSRUFURSAgT1IgUkVQTEFDRSBGVU5DVElPTiBtYWluKCkKK1JFVFVS TlMgdm9pZCBBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9y ZSBmdW5jMl9hdXRvbicpOworICBQRVJGT1JNIGZ1bmMyX2F1dG9uKCk7CisgIElOU0VSVCBJ TlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMl9hdXRvbicpOworRU5EOworJCQgTEFOR1VB R0UgcGxwZ3NxbDsKK1NFTEVDVCBtYWluKCk7CitOT1RJQ0U6ICBDYXVnaHQgY3VzdG9tIGV4 Y2VwdGlvbiB3aXRoIFNRTFNUQVRFIEFCMDAxLgorIG1haW4gCistLS0tLS0KKyAKKygxIHJv dykKKworU0VMRUNUICogRlJPTSB0Ymw7CisgICAgICAgICBhICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBiZWZvcmUgZnVuYzJfYXV0b24KKyBiZWZvcmUgY2F0Y2hfZXhj CisgYmVmb3JlIGZ1bmMwCisgYmVmb3JlIHJhaXNlCisgYWZ0ZXIgZnVuYzEgaW4gZXhjCisg YWZ0ZXIgY2F0Y2hfZXhjCisgYWZ0ZXIgZnVuYzJfYXV0b24KKyg3IHJvd3MpCisKK0RST1Ag RlVOQ1RJT04gZnVuYzA7CitEUk9QIEZVTkNUSU9OIGZ1bmMwX2F1dG9uOworRFJPUCBGVU5D VElPTiBmdW5jMTsKK0RST1AgRlVOQ1RJT04gZnVuYzFfYXV0b247CitEUk9QIEZVTkNUSU9O IGZ1bmMyOworRFJPUCBGVU5DVElPTiBmdW5jMl9hdXRvbjsKK0RST1AgRlVOQ1RJT04gY2F0 Y2hfZXhjOworRFJPUCBGVU5DVElPTiBtYWluOworRFJPUCBGVU5DVElPTiBmX2V4Y2VwdGlv bl9hdXRvbjsKK0RST1AgVEFCTEUgdGJsOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIHN1YmJsb2NrIC0+ IGF1dG9uX3N1YmJsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJzdWJibG9jayAtPiBhdXRvbl9z dWJibG9jayInOyBFTkQ7ICQkOworTk9USUNFOiAgVGVzdCAic3ViYmxvY2sgLT4gYXV0b25f c3ViYmxvY2siCitDUkVBVEUgVEFCTEUgdGJsIChhIHZhcmNoYXIpOworQ1JFQVRFICBPUiBS RVBMQUNFIEZVTkNUSU9OIGZ1bmMoKQorUkVUVVJOUyB2b2lkIEFTICQkCitCRUdJTgorICBJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdzdWJibG9jaywgYmVmb3JlIGF1dG9uX3N1YmJsb2Nr Jyk7CisgIC0tIGJlZ2luIHN1YmJsb2NrCisgIERFQ0xBUkUKKyAgICBQUkFHTUEgQVVUT05P TU9VU19UUkFOU0FDVElPTjsKKyAgQkVHSU4KKyAgICBTVEFSVCBUUkFOU0FDVElPTjsKKyAg ICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdyb2xsYmFjayBpbiBhdXRvbl9zdWJibG9jaycp OworICAgIFJPTExCQUNLOworCisgICAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAgSU5TRVJU IElOVE8gdGJsIFZBTFVFUygnY29tbWl0IGluIGF1dG9uX3N1YmJsb2NrJyk7CisgICAgQ09N TUlUOworICBFTkQ7CisgIC0tIGVuZCBzdWJibG9jaworICBJTlNFUlQgSU5UTyB0YmwgVkFM VUVTKCdzdWJibG9jaywgYWZ0ZXIgYXV0b25fc3ViYmxvY2snKTsKK0VORDsKKyQkIExBTkdV QUdFIHBscGdzcWw7CitTVEFSVCBUUkFOU0FDVElPTjsKK1NFTEVDVCBmdW5jKCk7CisgZnVu YyAKKy0tLS0tLQorIAorKDEgcm93KQorCitST0xMQkFDSzsKK1NFTEVDVCAqIEZST00gdGJs OworICAgICAgICAgICAgYSAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgY29tbWl0IGluIGF1dG9uX3N1YmJsb2NrCisoMSByb3cpCisKK0RST1AgRlVOQ1RJ T04gZnVuYzsKK0RST1AgVEFCTEUgdGJsOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIGF1dG9uX3N1YmJs b2NrIC0+IHN1YmJsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJhdXRvbl9zdWJibG9jayAtPiBz dWJibG9jayInOyBFTkQ7ICQkOworTk9USUNFOiAgVGVzdCAiYXV0b25fc3ViYmxvY2sgLT4g c3ViYmxvY2siCitDUkVBVEUgVEFCTEUgdGJsIChhIHZhcmNoYXIpOworQ1JFQVRFICBPUiBS RVBMQUNFIEZVTkNUSU9OIGZ1bmMoKQorUkVUVVJOUyB2b2lkIEFTICQkCitERUNMQVJFCisg IFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUygnYXV0b25fc3ViYmxvY2ssIGJlZm9yZSBzdWJibG9jaycpOworICBTVEFS VCBUUkFOU0FDVElPTjsKKyAgLS0gYmVnaW4gc3ViYmxvY2sKKyAgQkVHSU4KKyAgICBTVEFS VCBUUkFOU0FDVElPTjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdyb2xsYmFjayBp biBzdWJibG9jaycpOworICAgIFJPTExCQUNLOworCisgICAgU1RBUlQgVFJBTlNBQ1RJT047 CisgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUygnY29tbWl0IGluIHN1YmJsb2NrJyk7Cisg ICAgQ09NTUlUOworICBFTkQ7CisgIC0tIGVuZCBzdWJibG9jaworICBST0xMQkFDSzsKKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUygnYXV0b25fc3ViYmxvY2ssIGFmdGVyIHN1YmJsb2Nr Jyk7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOworU1RBUlQgVFJBTlNBQ1RJT047CitT RUxFQ1QgZnVuYygpOworTk9USUNFOiAgdGhlcmUgaXMgYWxyZWFkeSBhIHRyYW5zYWN0aW9u IGluIHByb2dyZXNzCitFUlJPUjogIGludmFsaWQgdHJhbnNhY3Rpb24gdGVybWluYXRpb24K K0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBmdW5jKCkgbGluZSAxOCBhdCBST0xMQkFD SworUk9MTEJBQ0s7CitTRUxFQ1QgKiBGUk9NIHRibDsKKyAgICAgICAgICAgICAgICBhICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYXV0 b25fc3ViYmxvY2ssIGJlZm9yZSBzdWJibG9jaworIGNvbW1pdCBpbiBzdWJibG9jaworKDIg cm93cykKKworRFJPUCBGVU5DVElPTiBmdW5jOworRFJPUCBUQUJMRSB0Ymw7CistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0tLS0gYXV0b25fc3ViYmxvY2sgLT4gYXV0b25fc3ViYmxvY2sgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3Qg ImF1dG9uX3N1YmJsb2NrIC0+IGF1dG9uX3N1YmJsb2NrIic7IEVORDsgJCQ7CitOT1RJQ0U6 ICBUZXN0ICJhdXRvbl9zdWJibG9jayAtPiBhdXRvbl9zdWJibG9jayIKK0NSRUFURSBUQUJM RSB0YmwgKGEgdmFyY2hhcik7CitDUkVBVEUgIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYygp CitSRVRVUk5TIHZvaWQgQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJB TlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdhdXRvbl9zdWJi bG9jayAxLCBiZWZvcmUgYXV0b25fc3ViYmxvY2snKTsKKyAgU1RBUlQgVFJBTlNBQ1RJT047 CisgIC0tIGJlZ2luIHN1YmJsb2NrCisgIERFQ0xBUkUKKyAgICBQUkFHTUEgQVVUT05PTU9V U19UUkFOU0FDVElPTjsKKyAgQkVHSU4KKyAgICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgICBJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdyb2xsYmFjayBpbiBhdXRvbl9zdWJibG9jaycpOwor ICAgIFJPTExCQUNLOworCisgICAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAgSU5TRVJUIElO VE8gdGJsIFZBTFVFUygnY29tbWl0IGluIGF1dG9uX3N1YmJsb2NrJyk7CisgICAgQ09NTUlU OworICBFTkQ7CisgIC0tIGVuZCBzdWJibG9jaworICBST0xMQkFDSzsKKyAgSU5TRVJUIElO VE8gdGJsIFZBTFVFUygnYXV0b25fc3ViYmxvY2sgMSwgYWZ0ZXIgYXV0b25fc3ViYmxvY2sn KTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CitTVEFSVCBUUkFOU0FDVElPTjsKK1NF TEVDVCBmdW5jKCk7CitOT1RJQ0U6ICBBdXRvbm9tb3VzIHBvb2wgd2FzIHJlc2l6ZWQsIG5l dyBjYXBhY2l0eSBpcyAyCisgZnVuYyAKKy0tLS0tLQorIAorKDEgcm93KQorCitST0xMQkFD SzsKK1NFTEVDVCAqIEZST00gdGJsOworICAgICAgICAgICAgICAgICAgICBhICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgYXV0b25fc3ViYmxvY2sgMSwgYmVmb3JlIGF1dG9uX3N1YmJsb2NrCisgY29tbWl0IGlu IGF1dG9uX3N1YmJsb2NrCisgYXV0b25fc3ViYmxvY2sgMSwgYWZ0ZXIgYXV0b25fc3ViYmxv Y2sKKygzIHJvd3MpCisKK0RST1AgRlVOQ1RJT04gZnVuYzsKK0RST1AgVEFCTEUgdGJsOwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKy0tLS0tIG1hbnkgc3ViYmxvY2tzIHdpdGggZXhjZXB0aW9uIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNF ICdUZXN0ICJtYW55IHN1YmJsb2NrcyB3aXRoIGV4Y2VwdGlvbiInOyBFTkQ7ICQkOworTk9U SUNFOiAgVGVzdCAibWFueSBzdWJibG9ja3Mgd2l0aCBleGNlcHRpb24iCitDUkVBVEUgVEFC TEUgdGJsIChhIHZhcmNoYXIpOworQ1JFQVRFIEZVTkNUSU9OIGZfZXhjZXB0aW9uKCkKK1JF VFVSTlMgVk9JRCBBUyAkJAorQkVHSU4KKyAgUkFJU0UgRVhDRVBUSU9OICdUZXN0IGV4Y2Vw dGlvbicgVVNJTkcgRVJSQ09ERSA9ICdBQjAwMSc7CitFTkQ7CiskJAorTEFOR1VBR0UgcGxw Z3NxbDsKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMxKCkKK1JFVFVSTlMgdm9p ZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBW QUxVRVMgKCdiZWZvcmUgZl9leGNlcHRpb24nKTsKKyAgUEVSRk9STSBmX2V4Y2VwdGlvbigp OworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZl9leGNlcHRpb24nKTsKK0VO RDsKKyQkOworQ1JFQVRFICBPUiBSRVBMQUNFIEZVTkNUSU9OIG1haW4oKQorUkVUVVJOUyB2 b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05P TU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdt YWluIHN0YXJ0Jyk7CisgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKCd0cmFucyAxIGluIHN0YXJ0Jyk7CisKKyAgICBERUNMQVJFCisgICAgICBQ UkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKKyAgICBCRUdJTgorICAgICAgU1RBUlQg VFJBTlNBQ1RJT047CisgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCd0cmFucyAy IGluIHN0YXJ0Jyk7CisKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICBJTlNFUlQgSU5UTyB0 YmwgVkFMVUVTICgnZW1wdHkgMSBiZWdpbicpOworCisgICAgICAgICAgQkVHSU4KKyAgICAg ICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdleGMgYmVnaW4nKTsKKworICAgICAg ICAgICAgREVDTEFSRQorICAgICAgICAgICAgICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FD VElPTjsKKyAgICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKCdiZWZvcmUgZnVuYzEnKTsKKyAgICAgICAgICAgICAgUEVSRk9STSBmdW5j MSgpOworICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVu YzEnKTsKKyAgICAgICAgICAgIEVORDsKKworICAgICAgICAgIEVYQ0VQVElPTgorICAgICAg ICAgICAgV0hFTiBPVEhFUlMgVEhFTgorICAgICAgICAgICAgICBJRiBTUUxTVEFURSA9ICdB QjAwMScgVEhFTgorICAgICAgICAgICAgICAgIFJBSVNFIE5PVElDRSAnQ2F1Z2h0IGN1c3Rv bSBleGNlcHRpb24gd2l0aCBTUUxTVEFURSBBQjAwMS4nOworICAgICAgICAgICAgICBFTFNF CisgICAgICAgICAgICAgICAgUkFJU0UgTk9USUNFICdBbiBleGNlcHRpb24gb2NjdXJyZWQ6 ICUnLCBTUUxFUlJNOworICAgICAgICAgICAgICBFTkQgSUY7CisgICAgICAgICAgICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgnZXhjIGVuZCcpOworICAgICAgICAgIEVORDsKKworICAg ICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnZW1wdHkgMSBlbmQnKTsKKyAgICAgICAg RU5EOworCisgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCd0cmFucyAyIGluIHJv bGxiYWNrJyk7CisgICAgICBST0xMQkFDSzsKKyAgICBFTkQ7CisKKyAgICBJTlNFUlQgSU5U TyB0YmwgVkFMVUVTICgndHJhbnMgMSBpbiBjb21taXQnKTsKKyAgQ09NTUlUOworCisgIElO U0VSVCBJTlRPIHRibCBWQUxVRVMgKCdtYWluIGVuZCcpOworRU5EOworJCQ7CitTRUxFQ1Qg bWFpbigpOworTk9USUNFOiAgQXV0b25vbW91cyBwb29sIHdhcyByZXNpemVkLCBuZXcgY2Fw YWNpdHkgaXMgNAorTk9USUNFOiAgQ2F1Z2h0IGN1c3RvbSBleGNlcHRpb24gd2l0aCBTUUxT VEFURSBBQjAwMS4KK0VSUk9SOiAgaW52YWxpZCB0cmFuc2FjdGlvbiB0ZXJtaW5hdGlvbgor Q09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIG1haW4oKSBsaW5lIDQzIGF0IFJPTExCQUNL CitTRUxFQ1QgKiBGUk9NIHRibDsKKyAgICAgIGEgICAgICAgCistLS0tLS0tLS0tLS0tLQor IG1haW4gc3RhcnQKKyBiZWZvcmUgZnVuYzEKKygyIHJvd3MpCisKK0RST1AgRlVOQ1RJT04g ZnVuYzE7CitEUk9QIEZVTkNUSU9OIG1haW47CitEUk9QIEZVTkNUSU9OIGZfZXhjZXB0aW9u OworRFJPUCBUQUJMRSB0Ymw7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0gcHJvYyBpbiBtYW55IHN1YmJs b2NrcyBtYW55IHdpdGggZXhjZXB0aW9uIC0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAk JCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3QgInByb2MgaW4gbWFueSBzdWJibG9ja3MgbWFu eSB3aXRoIGV4Y2VwdGlvbiInOyBFTkQ7ICQkOworTk9USUNFOiAgVGVzdCAicHJvYyBpbiBt YW55IHN1YmJsb2NrcyBtYW55IHdpdGggZXhjZXB0aW9uIgorQ1JFQVRFIFRBQkxFIHRibCAo YSB2YXJjaGFyKTsKK0NSRUFURSBGVU5DVElPTiBmX2V4Y2VwdGlvbigpCitSRVRVUk5TIFZP SUQgQVMgJCQKK0JFR0lOCisgIFJBSVNFIEVYQ0VQVElPTiAnVGVzdCBleGNlcHRpb24nIFVT SU5HIEVSUkNPREUgPSAnQUIwMDEnOworRU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWw7CitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMSgpCitSRVRVUk5TIHZvaWQKK0xBTkdV QUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgn YmVmb3JlIGZfZXhjZXB0aW9uJyk7CisgIFBFUkZPUk0gZl9leGNlcHRpb24oKTsKKyAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoJ2FmdGVyIGZfZXhjZXB0aW9uJyk7CitFTkQ7CiskJDsK K0NSRUFURSBPUiBSRVBMQUNFIFBST0NFRFVSRSBwcm9jKCkKK0xBTkdVQUdFIHBscGdzcWwK K0FTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgncHJvYyBiZWZvcmUg cm9sbGJhY2snKTsKKyAgUk9MTEJBQ0s7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdw cm9jIGFmdGVyIHJvbGxiYWNrJyk7CitFTkQ7CiskJDsKK0NSRUFURSAgT1IgUkVQTEFDRSBG VU5DVElPTiBtYWluKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQK K0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnbWFpbiBzdGFydCcpOworICBTVEFSVCBUUkFOU0FD VElPTjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgndHJhbnMgMSBpbiBzdGFydCcp OworCisgICAgREVDTEFSRQorICAgICAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047 CisgICAgQkVHSU4KKyAgICAgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgICAgICBJTlNFUlQg SU5UTyB0YmwgVkFMVUVTICgndHJhbnMgMiBpbiBzdGFydCcpOworCisgICAgICAgIEJFR0lO CisgICAgICAgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2VtcHR5IDEgYmVnaW4nKTsK KworICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVT ICgnZXhjIGJlZ2luJyk7CisKKyAgICAgICAgICAgIERFQ0xBUkUKKyAgICAgICAgICAgICAg UFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CisgICAgICAgICAgICBCRUdJTgorICAg ICAgICAgICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYmVmb3JlIGZ1bmMxJyk7Cisg ICAgICAgICAgICAgIFBFUkZPUk0gZnVuYzEoKTsKKyAgICAgICAgICAgICAgSU5TRVJUIElO VE8gdGJsIFZBTFVFUyAoJ2FmdGVyIGZ1bmMxJyk7CisgICAgICAgICAgICBFTkQ7CisKKyAg ICAgICAgICBFWENFUFRJT04KKyAgICAgICAgICAgIFdIRU4gT1RIRVJTIFRIRU4KKyAgICAg ICAgICAgICAgSUYgU1FMU1RBVEUgPSAnQUIwMDEnIFRIRU4KKyAgICAgICAgICAgICAgICBS QUlTRSBOT1RJQ0UgJ0NhdWdodCBjdXN0b20gZXhjZXB0aW9uIHdpdGggU1FMU1RBVEUgQUIw MDEuJzsKKyAgICAgICAgICAgICAgRUxTRQorICAgICAgICAgICAgICAgIFJBSVNFIE5PVElD RSAnQW4gZXhjZXB0aW9uIG9jY3VycmVkOiAlJywgU1FMRVJSTTsKKyAgICAgICAgICAgICAg RU5EIElGOworICAgICAgICAgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2V4YyBiZWZv cmUgcHJvYycpOworICAgICAgICAgICAgQ0FMTCBwcm9jKCk7CisgICAgICAgICAgICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgnZXhjIGFmdGVyIHByb2MnKTsKKyAgICAgICAgICAgIElO U0VSVCBJTlRPIHRibCBWQUxVRVMgKCdleGMgZW5kJyk7CisgICAgICAgICAgRU5EOworCisg ICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdlbXB0eSAxIGVuZCcpOworICAgICAg ICBFTkQ7CisKKyAgICAgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ3RyYW5zIDIgaW4g cm9sbGJhY2snKTsKKyAgICAgIFJPTExCQUNLOworICAgIEVORDsKKworICAgIElOU0VSVCBJ TlRPIHRibCBWQUxVRVMgKCd0cmFucyAxIGluIGNvbW1pdCcpOworICBDT01NSVQ7CisKKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ21haW4gZW5kJyk7CitFTkQ7CiskJDsKK1NFTEVD VCBtYWluKCk7CitOT1RJQ0U6ICBBdXRvbm9tb3VzIHBvb2wgd2FzIHJlc2l6ZWQsIG5ldyBj YXBhY2l0eSBpcyAyCitOT1RJQ0U6ICBBdXRvbm9tb3VzIHBvb2wgd2FzIHJlc2l6ZWQsIG5l dyBjYXBhY2l0eSBpcyA0CitOT1RJQ0U6ICBDYXVnaHQgY3VzdG9tIGV4Y2VwdGlvbiB3aXRo IFNRTFNUQVRFIEFCMDAxLgorRVJST1I6ICBjYWxsIG9mIHByb2NlZHVyZXMgaXMgZm9yYmlk ZGVuIGN1cnJlbnRseSBpbiBhdXRvbm9tb3VzIHNlc3Npb25zLCBDQUxMIHByb2MoKQorQ09O VEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIG1haW4oKSBsaW5lIDM3IGF0IENBTEwKK1NFTEVD VCAqIEZST00gdGJsOworICAgICAgYSAgICAgICAKKy0tLS0tLS0tLS0tLS0tCisgbWFpbiBz dGFydAorIGJlZm9yZSBmdW5jMQorKDIgcm93cykKKworRFJPUCBGVU5DVElPTiBmdW5jMTsK K0RST1AgRlVOQ1RJT04gbWFpbjsKK0RST1AgRlVOQ1RJT04gZl9leGNlcHRpb247CitEUk9Q IFRBQkxFIHRibDsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMg Yi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IGY4YzdmNDg3NDcuLmNjMjFm OWViOTQgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMKKysrIGIv c3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1 ZGUgInBscGdzcWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ0 Y29wL2NtZHRhZy5oIgorI2luY2x1ZGUgInRjb3AvYXV0b25vbW91cy5oIgogI2luY2x1ZGUg InRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUg InRjb3AvdXRpbGl0eS5oIgpAQCAtMjU5LDYgKzI2MCwxMCBAQCBzdGF0aWMgSFRBQiAqc2hh cmVkX2Nhc3RfaGFzaCA9IE5VTEw7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBMb2NhbCBmdW5jdGlvbiBmb3J3 YXJkIGRlY2xhcmF0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGJ1aWxkX3N5bWJvbF90 YWJsZShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJCQkgICBQTHBnU1FMX25zaXRl bSAqbnNfc3RhcnQsIGludCAqcmV0X25pdGVtcywKKwkJCQkJICAgY29uc3QgY2hhciAqKipy ZXRfbmFtZXMsIE9pZCAqKnJldF90eXBlcywKKwkJCQkJICAgRGF0dW0gKipyZXRfdmFsdWVz LCBib29sICoqcmV0X2lzbnVsbCk7CiBzdGF0aWMgdm9pZCBjb2VyY2VfZnVuY3Rpb25fcmVz dWx0X3R1cGxlKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJCQkJCQkJCQkJIFR1cGxl RGVzYyB0dXBkZXNjKTsKIHN0YXRpYyB2b2lkIHBscGdzcWxfZXhlY19lcnJvcl9jYWxsYmFj ayh2b2lkICphcmcpOwpAQCAtMTY1Miw2ICsxNjU3LDI2IEBAIGV4ZWNfc3RtdF9ibG9jayhQ THBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfYmxvY2sgKmJsb2NrKQog CXZvbGF0aWxlIGludCByYyA9IC0xOwogCWludAkJCWk7CiAKKwkvKiBBdXRvbm9tb3VzIHRy YW5zYWN0aW9ucyAqLworCXsKKwkJQXV0b25vbW91c1N0YWNrTm9kZSogbm9kZSA9IE5VTEw7 CisJCU1lbW9yeUNvbnRleHQgb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1l bW9yeUNvbnRleHQpOworCisJCS8qIFN0b3JlIFBMcGdTUUxfc3RtdF9ibG9jayB0byBzdGFj ayAqLworCQlub2RlID0gcGFsbG9jKHNpemVvZihBdXRvbm9tb3VzU3RhY2tOb2RlKSk7CisJ CW5vZGUtPmJsb2NrID0gKHZvaWQqKWJsb2NrOworCQlub2RlLT5zZXNzaW9uID0gTlVMTDsK KwkJaWYgKGJsb2NrLT5hdXRvbm9tb3VzKSB7CisJCQllc3RhdGUtPmF1dG9ub21vdXNfc2Vz c2lvbiA9IEF1dG9ub21vdXNTZXNzaW9uR2V0KCk7CisJCQlpZighZXN0YXRlLT5hdXRvbm9t b3VzX3Nlc3Npb24pIHsKKwkJCQllbG9nKEVSUk9SLCAiTm8gZnJlZSBhdXRvbm9tb3VzIHdv cmtlcnMsICVzIGNhbid0IGJlIGV4ZWN1dGVkIiwgZXN0YXRlLT5mdW5jLT5mbl9zaWduYXR1 cmUpOworCQkJfQorCQkJbm9kZS0+c2Vzc2lvbiA9IGVzdGF0ZS0+YXV0b25vbW91c19zZXNz aW9uOworCQl9CisJCXNsaXN0X3B1c2hfaGVhZCgmQXV0b25vbW91c1N0YWNrLCAmbm9kZS0+ bm9kZSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCX0KKwogCS8qCiAJ ICogRmlyc3QgaW5pdGlhbGl6ZSBhbGwgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoaXMgYmxv Y2sKIAkgKi8KQEAgLTE4MzAsNiArMTg1NSw5IEBAIGV4ZWNfc3RtdF9ibG9jayhQTHBnU1FM X2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfYmxvY2sgKmJsb2NrKQogCQkJRXJy b3JEYXRhICAqZWRhdGE7CiAJCQlMaXN0Q2VsbCAgICplOwogCisJCQkvKiBBdXRvbm9tb3Vz IHRyYW5zYWN0aW9ucyAqLworCQkJZXN0YXRlLT5hdXRvbm9tb3VzX3Nlc3Npb24gPSBBdXRv bm9tb3VzU2Vzc2lvblBvcFN0YWNrU2Vzc2lvbkV4Y2VwdGlvbihibG9jayk7CisKIAkJCWVz dGF0ZS0+ZXJyX3RleHQgPSBnZXR0ZXh0X25vb3AoImR1cmluZyBleGNlcHRpb24gY2xlYW51 cCIpOwogCiAJCQkvKiBTYXZlIGVycm9yIGluZm8gaW4gb3VyIHN0bXRfbWNvbnRleHQgKi8K QEAgLTE5NDQsNiArMTk3Miw5IEBAIGV4ZWNfc3RtdF9ibG9jayhQTHBnU1FMX2V4ZWNzdGF0 ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfYmxvY2sgKmJsb2NrKQogCiAJZXN0YXRlLT5lcnJf dGV4dCA9IE5VTEw7CiAKKwllc3RhdGUtPmF1dG9ub21vdXNfc2Vzc2lvbiA9IEF1dG9ub21v dXNTZXNzaW9uUG9wU3RhY2tTZXNzaW9uKGJsb2NrLT5hdXRvbm9tb3VzKTsKKworCiAJLyoK IAkgKiBIYW5kbGUgdGhlIHJldHVybiBjb2RlLiAgVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRp ZmZlcmVudCBmcm9tCiAJICogTE9PUF9SQ19QUk9DRVNTSU5HKCk6IENPTlRJTlVFIG5ldmVy IG1hdGNoZXMgYSBibG9jaywgYW5kIEVYSVQgbWF0Y2hlcwpAQCAtMjE2OCw2ICsyMTk5LDI0 IEBAIGV4ZWNfc3RtdF9wZXJmb3JtKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdT UUxfc3RtdF9wZXJmb3JtICpzdG10KQogewogCVBMcGdTUUxfZXhwciAqZXhwciA9IHN0bXQt PmV4cHI7CiAKKwlpZiAoZXN0YXRlLT5hdXRvbm9tb3VzX3Nlc3Npb24pCisJeworCQlpbnQJ CW5wYXJhbXMgPSAwOworCQljb25zdCBjaGFyICoqcGFyYW1fbmFtZXMgPSBOVUxMOworCQlP aWQJICAgKnBhcmFtX3R5cGVzID0gTlVMTDsKKwkJQXV0b25vbW91c1ByZXBhcmVkU3RhdGVt ZW50ICphc3RtdDsKKwkJRGF0dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCUF1 dG9ub21vdXNSZXN1bHQgKmFyZXN1bHQ7CisKKwkJYnVpbGRfc3ltYm9sX3RhYmxlKGVzdGF0 ZSwgZXhwci0+bnMsICZucGFyYW1zLCAmcGFyYW1fbmFtZXMsICZwYXJhbV90eXBlcywgJnZh bHVlcywgJm51bGxzKTsKKwkJYXN0bXQgPSBBdXRvbm9tb3VzU2Vzc2lvblByZXBhcmUoZXN0 YXRlLT5hdXRvbm9tb3VzX3Nlc3Npb24sIGV4cHItPnF1ZXJ5LCBucGFyYW1zLCBwYXJhbV90 eXBlcywgcGFyYW1fbmFtZXMpOworCisJCWFyZXN1bHQgPSBBdXRvbm9tb3VzU2Vzc2lvbkV4 ZWN1dGVQcmVwYXJlZChhc3RtdCwgbnBhcmFtcywgdmFsdWVzLCBudWxscyk7CisJCWV4ZWNf c2V0X2ZvdW5kKGVzdGF0ZSwgKGxpc3RfbGVuZ3RoKGFyZXN1bHQtPnR1cGxlcykgIT0gMCkp OworCQlyZXR1cm4gUExQR1NRTF9SQ19PSzsKKwl9CisKIAkodm9pZCkgZXhlY19ydW5fc2Vs ZWN0KGVzdGF0ZSwgZXhwciwgMCwgTlVMTCk7CiAJZXhlY19zZXRfZm91bmQoZXN0YXRlLCAo ZXN0YXRlLT5ldmFsX3Byb2Nlc3NlZCAhPSAwKSk7CiAJZXhlY19ldmFsX2NsZWFudXAoZXN0 YXRlKTsKQEAgLTIxOTAsNiArMjIzOSwxNCBAQCBleGVjX3N0bXRfY2FsbChQTHBnU1FMX2V4 ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfY2FsbCAqc3RtdCkKIAlTUElFeGVjdXRl T3B0aW9ucyBvcHRpb25zOwogCWludAkJCXJjOwogCisJaWYgKGVzdGF0ZS0+YXV0b25vbW91 c19zZXNzaW9uKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9UUkFOU0FDVElPTl9URVJNSU5BVElPTiksCisJCQkgZXJybXNnKCJjYWxsIG9m IHByb2NlZHVyZXMgaXMgZm9yYmlkZGVuIGN1cnJlbnRseSBpbiBhdXRvbm9tb3VzIHNlc3Np b25zLCAlcyIsIHN0bXQtPmV4cHItPnF1ZXJ5KSkpOworCX0KKworCiAJLyoKIAkgKiBNYWtl IGEgcGxhbiBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgogCSAqLwpAQCAtNDAxOSw2 ICs0MDc2LDggQEAgcGxwZ3NxbF9lc3RhdGVfc2V0dXAoUExwZ1NRTF9leGVjc3RhdGUgKmVz dGF0ZSwKIAl9CiAJZXN0YXRlLT5yc2kgPSByc2k7CiAKKwllc3RhdGUtPmF1dG9ub21vdXNf c2Vzc2lvbiA9IE5VTEw7CisKIAllc3RhdGUtPmZvdW5kX3Zhcm5vID0gZnVuYy0+Zm91bmRf dmFybm87CiAJZXN0YXRlLT5uZGF0dW1zID0gZnVuYy0+bmRhdHVtczsKIAllc3RhdGUtPmRh dHVtcyA9IE5VTEw7CkBAIC00MjAzLDYgKzQyNjIsNzIgQEAgZXhlY19wcmVwYXJlX3BsYW4o UExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIH0KIAogCitzdGF0aWMKK3ZvaWQgYnVpbGRf c3ltYm9sX3RhYmxlKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCisJCQkJCSAgIFBMcGdT UUxfbnNpdGVtICpuc19zdGFydCwKKwkJCQkJICAgaW50ICpyZXRfbml0ZW1zLAorCQkJCQkg ICBjb25zdCBjaGFyICoqKnJldF9uYW1lcywKKwkJCQkJICAgT2lkICoqcmV0X3R5cGVzLAor CQkJCQkgICBEYXR1bSAqKnJldF92YWx1ZXMsCisJCQkJCSAgIGJvb2wgKipyZXRfaXNudWxs KQoreworCVBMcGdTUUxfbnNpdGVtICpuc2l0ZW07CisJTGlzdCAqbmFtZXMgPSBOSUw7CisJ TGlzdCAqaXRlbW5vcyA9IE5JTDsKKworCUxpc3RDZWxsICpsX25hbWUsICpsX2l0ZW1ubzsK KwlpbnQgaSwgbml0ZW1zOworCWNvbnN0IGNoYXIgKipuYW1lc192ZWN0b3I7CisJT2lkICp0 eXBlc192ZWN0b3I7CisJRGF0dW0gKnZhbHVlc192ZWN0b3I7CisJYm9vbCAqaXNudWxsX3Zl Y3RvcjsKKworCWZvciAobnNpdGVtID0gbnNfc3RhcnQ7CisJCSBuc2l0ZW07CisJCSBuc2l0 ZW0gPSBuc2l0ZW0tPnByZXYpCisJeworCQlpZiAobnNpdGVtLT5pdGVtdHlwZSA9PSBQTFBH U1FMX05TVFlQRV9WQVIpCisJCXsKKwkJCVN0cmluZyAgKm5hbWU7CisKKwkJCWlmIChzdHJj bXAobnNpdGVtLT5uYW1lLCAiZm91bmQiKSA9PSAwKQorCQkJCWNvbnRpbnVlOyAgLy8gWFhY CisJCQllbG9nKExPRywgIm5hbWVzcGFjZSBpdGVtIHZhcmlhYmxlIGl0ZW1ubyAlZCwgbmFt ZSAlcyIsCisJCQkJIG5zaXRlbS0+aXRlbW5vLCBuc2l0ZW0tPm5hbWUpOworCQkJbmFtZSA9 IG1ha2VTdHJpbmcobnNpdGVtLT5uYW1lKTsKKwkJCWlmICghbGlzdF9tZW1iZXIobmFtZXMs IG5hbWUpKQorCQkJeworCQkJCW5hbWVzID0gbGFwcGVuZChuYW1lcywgbmFtZSk7CisJCQkJ aXRlbW5vcyA9IGxhcHBlbmRfb2lkKGl0ZW1ub3MsIG5zaXRlbS0+aXRlbW5vKTsKKwkJCX0K KwkJfQorCX0KKworCW5pdGVtcyA9IGxpc3RfbGVuZ3RoKG5hbWVzKTsKKwluYW1lc192ZWN0 b3IgPSBwYWxsb2Mobml0ZW1zICogc2l6ZW9mKGNoYXIgKikpOworCXR5cGVzX3ZlY3RvciA9 IHBhbGxvYyhuaXRlbXMgKiBzaXplb2YoT2lkKSk7CisJdmFsdWVzX3ZlY3RvciA9IHBhbGxv YyhuaXRlbXMgKiBzaXplb2YoRGF0dW0pKTsKKwlpc251bGxfdmVjdG9yID0gcGFsbG9jKG5p dGVtcyAqIHNpemVvZihib29sKSk7CisJaSA9IDA7CisJZm9yYm90aChsX25hbWUsIG5hbWVz LCBsX2l0ZW1ubywgaXRlbW5vcykKKwl7CisJCWludCBpdGVtbm8gPSBsZmlyc3Rfb2lkKGxf aXRlbW5vKTsKKwkJUExwZ1NRTF9kYXR1bSAqZGF0dW0gPSBlc3RhdGUtPmRhdHVtc1tpdGVt bm9dOworCQlQTHBnU1FMX3ZhciAqdmFyID0gKFBMcGdTUUxfdmFyICopIGRhdHVtOworCQlu YW1lc192ZWN0b3JbaV0gPSBwc3RyZHVwKHN0clZhbChsZmlyc3QobF9uYW1lKSkpOworCQl0 eXBlc192ZWN0b3JbaV0gPSB2YXItPmRhdGF0eXBlLT50eXBvaWQ7CisJCXZhbHVlc192ZWN0 b3JbaV0gPSB2YXItPnZhbHVlOworCQlpc251bGxfdmVjdG9yW2ldID0gdmFyLT5pc251bGw7 CisJCSsraTsKKwl9CisKKwkqcmV0X25pdGVtcyA9IG5pdGVtczsKKwkqcmV0X25hbWVzID0g bmFtZXNfdmVjdG9yOworCSpyZXRfdHlwZXMgPSB0eXBlc192ZWN0b3I7CisJKnJldF92YWx1 ZXMgPSB2YWx1ZXNfdmVjdG9yOworCSpyZXRfaXNudWxsID0gaXNudWxsX3ZlY3RvcjsKK30K KwogLyogLS0tLS0tLS0tLQogICogZXhlY19zdG10X2V4ZWNzcWwJCQlFeGVjdXRlIGFuIFNR TCBzdGF0ZW1lbnQgKHBvc3NpYmx5IHdpdGggSU5UTykuCiAgKgpAQCAtNDIyNSw2ICs0MzUw LDI0IEBAIGV4ZWNfc3RtdF9leGVjc3FsKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJ ZWxzZSBpZiAocGxwZ3NxbF9leHRyYV93YXJuaW5ncyAmIFBMUEdTUUxfWENIRUNLX1RPT01B TllST1dTKQogCQl0b29fbWFueV9yb3dzX2xldmVsID0gV0FSTklORzsKIAorCWlmIChlc3Rh dGUtPmF1dG9ub21vdXNfc2Vzc2lvbikKKwl7CisJCWludAkJbnBhcmFtcyA9IDA7CisJCWNv bnN0IGNoYXIgKipwYXJhbV9uYW1lcyA9IE5VTEw7CisJCU9pZAkgICAqcGFyYW1fdHlwZXMg PSBOVUxMOworCQlBdXRvbm9tb3VzUHJlcGFyZWRTdGF0ZW1lbnQgKmFzdG10OworCQlEYXR1 bSAgKnZhbHVlczsKKwkJYm9vbCAgICpudWxsczsKKwkJQXV0b25vbW91c1Jlc3VsdCAqYXJl c3VsdDsKKworCQlidWlsZF9zeW1ib2xfdGFibGUoZXN0YXRlLCBzdG10LT5zcWxzdG10LT5u cywgJm5wYXJhbXMsICZwYXJhbV9uYW1lcywgJnBhcmFtX3R5cGVzLCAmdmFsdWVzLCAmbnVs bHMpOworCQlhc3RtdCA9IEF1dG9ub21vdXNTZXNzaW9uUHJlcGFyZShlc3RhdGUtPmF1dG9u b21vdXNfc2Vzc2lvbiwgc3RtdC0+c3Fsc3RtdC0+cXVlcnksIG5wYXJhbXMsIHBhcmFtX3R5 cGVzLCBwYXJhbV9uYW1lcyk7CisKKwkJYXJlc3VsdCA9IEF1dG9ub21vdXNTZXNzaW9uRXhl Y3V0ZVByZXBhcmVkKGFzdG10LCBucGFyYW1zLCB2YWx1ZXMsIG51bGxzKTsKKwkJZXhlY19z ZXRfZm91bmQoZXN0YXRlLCAobGlzdF9sZW5ndGgoYXJlc3VsdC0+dHVwbGVzKSAhPSAwKSk7 CisJCXJldHVybiBQTFBHU1FMX1JDX09LOworCX0KKwogCS8qCiAJICogT24gdGhlIGZpcnN0 IGNhbGwgZm9yIHRoaXMgc3RhdGVtZW50IGdlbmVyYXRlIHRoZSBwbGFuLCBhbmQgZGV0ZWN0 CiAJICogd2hldGhlciB0aGUgc3RhdGVtZW50IGlzIElOU0VSVC9VUERBVEUvREVMRVRFL01F UkdFCkBAIC00NDcyLDYgKzQ2MTUsMTIgQEAgZXhlY19zdG10X2R5bmV4ZWN1dGUoUExwZ1NR TF9leGVjc3RhdGUgKmVzdGF0ZSwKIAogCWV4ZWNfZXZhbF9jbGVhbnVwKGVzdGF0ZSk7CiAK KwlpZiAoZXN0YXRlLT5hdXRvbm9tb3VzX3Nlc3Npb24pCisJeworCQlBdXRvbm9tb3VzU2Vz c2lvbkV4ZWN1dGUoZXN0YXRlLT5hdXRvbm9tb3VzX3Nlc3Npb24sIHF1ZXJ5c3RyKTsKKwkJ cmV0dXJuIFBMUEdTUUxfUkNfT0s7CisJfQorCiAJLyoKIAkgKiBFeGVjdXRlIHRoZSBxdWVy eSB3aXRob3V0IHByZXBhcmluZyBhIHNhdmVkIHBsYW4uCiAJICovCkBAIC00OTU4LDEwICs1 MTA3LDE4IEBAIGV4ZWNfc3RtdF9jbG9zZShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBQ THBnU1FMX3N0bXRfY2xvc2UgKnN0bXQpCiBzdGF0aWMgaW50CiBleGVjX3N0bXRfY29tbWl0 KFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9jb21taXQgKnN0bXQp CiB7Ci0JaWYgKHN0bXQtPmNoYWluKQotCQlTUElfY29tbWl0X2FuZF9jaGFpbigpOworCWlm IChlc3RhdGUtPmF1dG9ub21vdXNfc2Vzc2lvbikKKwl7CisJCUF1dG9ub21vdXNTZXNzaW9u RXhlY3V0ZShlc3RhdGUtPmF1dG9ub21vdXNfc2Vzc2lvbiwgIkNPTU1JVCIpOworCQlyZXR1 cm4gUExQR1NRTF9SQ19PSzsKKwl9CiAJZWxzZQotCQlTUElfY29tbWl0KCk7CisJeworCQlp ZiAoc3RtdC0+Y2hhaW4pCisJCQlTUElfY29tbWl0X2FuZF9jaGFpbigpOworCQllbHNlCisJ CQlTUElfY29tbWl0KCk7CisJfQogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGJ1aWxkIG5ldyBz aW1wbGUtZXhwcmVzc2lvbiBpbmZyYXN0cnVjdHVyZSwgc2luY2UgdGhlIG9sZApAQCAtNDk4 MiwxMCArNTEzOSwxOCBAQCBleGVjX3N0bXRfY29tbWl0KFBMcGdTUUxfZXhlY3N0YXRlICpl c3RhdGUsIFBMcGdTUUxfc3RtdF9jb21taXQgKnN0bXQpCiBzdGF0aWMgaW50CiBleGVjX3N0 bXRfcm9sbGJhY2soUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgUExwZ1NRTF9zdG10X3Jv bGxiYWNrICpzdG10KQogewotCWlmIChzdG10LT5jaGFpbikKLQkJU1BJX3JvbGxiYWNrX2Fu ZF9jaGFpbigpOworCWlmIChlc3RhdGUtPmF1dG9ub21vdXNfc2Vzc2lvbikKKwl7CisJCUF1 dG9ub21vdXNTZXNzaW9uRXhlY3V0ZShlc3RhdGUtPmF1dG9ub21vdXNfc2Vzc2lvbiwgIlJP TExCQUNLIik7CisJCXJldHVybiBQTFBHU1FMX1JDX09LOworCX0KIAllbHNlCi0JCVNQSV9y b2xsYmFjaygpOworCXsKKwkJaWYgKHN0bXQtPmNoYWluKQorCQkJU1BJX3JvbGxiYWNrX2Fu ZF9jaGFpbigpOworCQllbHNlCisJCQlTUElfcm9sbGJhY2soKTsKKwl9CiAKIAkvKgogCSAq IFdlIG5lZWQgdG8gYnVpbGQgbmV3IHNpbXBsZS1leHByZXNzaW9uIGluZnJhc3RydWN0dXJl LCBzaW5jZSB0aGUgb2xkCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZ3Jh bS55IGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueQppbmRleCA2YTA5YmZkZDY3Li5j YjJhZjU2NTg0IDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZ3JhbS55Cisr KyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9ncmFtLnkKQEAgLTEwNyw2ICsxMDcsOCBAQCBz dGF0aWMJUExwZ1NRTF9leHByCSpyZWFkX2N1cnNvcl9hcmdzKFBMcGdTUUxfdmFyICpjdXJz b3IsCiBzdGF0aWMJTGlzdAkJCSpyZWFkX3JhaXNlX29wdGlvbnModm9pZCk7CiBzdGF0aWMJ dm9pZAkJCWNoZWNrX3JhaXNlX3BhcmFtZXRlcnMoUExwZ1NRTF9zdG10X3JhaXNlICpzdG10 KTsKIAorc3RhdGljIGJvb2wgbGFzdF9wcmFnbWE7CisKICV9CiAKICVleHBlY3QgMApAQCAt MTQzLDYgKzE0NSw3IEBAIHN0YXRpYwl2b2lkCQkJY2hlY2tfcmFpc2VfcGFyYW1ldGVycyhQ THBnU1FMX3N0bXRfcmFpc2UgKnN0bXQpOwogCQljaGFyCSAgICpsYWJlbDsKIAkJaW50CQkJ bl9pbml0dmFyczsKIAkJaW50CQkgICAqaW5pdHZhcm5vczsKKwkJYm9vbAlhdXRvbm9tb3Vz OwogCX0JCQlkZWNsaGRyOwogCXN0cnVjdAogCXsKQEAgLTMyMyw2ICszMjYsNyBAQCBzdGF0 aWMJdm9pZAkJCWNoZWNrX3JhaXNlX3BhcmFtZXRlcnMoUExwZ1NRTF9zdG10X3JhaXNlICpz dG10KTsKICV0b2tlbiA8a2V5d29yZD4JS19QR19FWENFUFRJT05fREVUQUlMCiAldG9rZW4g PGtleXdvcmQ+CUtfUEdfRVhDRVBUSU9OX0hJTlQKICV0b2tlbiA8a2V5d29yZD4JS19QR19S T1VUSU5FX09JRAorJXRva2VuIDxrZXl3b3JkPglLX1BSQUdNQQogJXRva2VuIDxrZXl3b3Jk PglLX1BSSU5UX1NUUklDVF9QQVJBTVMKICV0b2tlbiA8a2V5d29yZD4JS19QUklPUgogJXRv a2VuIDxrZXl3b3JkPglLX1FVRVJZCkBAIC00MTYsNiArNDIwLDcgQEAgcGxfYmxvY2sJCTog ZGVjbF9zZWN0IEtfQkVHSU4gcHJvY19zZWN0IGV4Y2VwdGlvbl9zZWN0IEtfRU5EIG9wdF9s YWJlbAogCQkJCQkJbmV3LT5saW5lbm8JCT0gcGxwZ3NxbF9sb2NhdGlvbl90b19saW5lbm8o QDIpOwogCQkJCQkJbmV3LT5zdG10aWQJCT0gKytwbHBnc3FsX2N1cnJfY29tcGlsZS0+bnN0 YXRlbWVudHM7CiAJCQkJCQluZXctPmxhYmVsCQk9ICQxLmxhYmVsOworCQkJCQkJbmV3LT5h dXRvbm9tb3VzID0gJDEuYXV0b25vbW91czsKIAkJCQkJCW5ldy0+bl9pbml0dmFycyA9ICQx Lm5faW5pdHZhcnM7CiAJCQkJCQluZXctPmluaXR2YXJub3MgPSAkMS5pbml0dmFybm9zOwog CQkJCQkJbmV3LT5ib2R5CQk9ICQzOwpAQCAtNDM2LDYgKzQ0MSw3IEBAIGRlY2xfc2VjdAkJ OiBvcHRfYmxvY2tfbGFiZWwKIAkJCQkJCSQkLmxhYmVsCSAgPSAkMTsKIAkJCQkJCSQkLm5f aW5pdHZhcnMgPSAwOwogCQkJCQkJJCQuaW5pdHZhcm5vcyA9IE5VTEw7CisJCQkJCQkkJC5h dXRvbm9tb3VzID0gZmFsc2U7CiAJCQkJCX0KIAkJCQl8IG9wdF9ibG9ja19sYWJlbCBkZWNs X3N0YXJ0CiAJCQkJCXsKQEAgLTQ0Myw2ICs0NDksNyBAQCBkZWNsX3NlY3QJCTogb3B0X2Js b2NrX2xhYmVsCiAJCQkJCQkkJC5sYWJlbAkgID0gJDE7CiAJCQkJCQkkJC5uX2luaXR2YXJz ID0gMDsKIAkJCQkJCSQkLmluaXR2YXJub3MgPSBOVUxMOworCQkJCQkJJCQuYXV0b25vbW91 cyA9IGZhbHNlOwogCQkJCQl9CiAJCQkJfCBvcHRfYmxvY2tfbGFiZWwgZGVjbF9zdGFydCBk ZWNsX3N0bXRzCiAJCQkJCXsKQEAgLTQ1MCw2ICs0NTcsOCBAQCBkZWNsX3NlY3QJCTogb3B0 X2Jsb2NrX2xhYmVsCiAJCQkJCQkkJC5sYWJlbAkgID0gJDE7CiAJCQkJCQkvKiBSZW1lbWJl ciB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gZGVjbF9zdG10cyAqLwogCQkJCQkJJCQubl9pbml0 dmFycyA9IHBscGdzcWxfYWRkX2luaXRkYXR1bXMoJigkJC5pbml0dmFybm9zKSk7CisJCQkJ CQkkJC5hdXRvbm9tb3VzID0gbGFzdF9wcmFnbWE7CisJCQkJCQlsYXN0X3ByYWdtYSA9IGZh bHNlOwogCQkJCQl9CiAJCQkJOwogCkBAIC00NTcsNiArNDY2LDcgQEAgZGVjbF9zdGFydAkJ OiBLX0RFQ0xBUkUKIAkJCQkJewogCQkJCQkJLyogRm9yZ2V0IGFueSB2YXJpYWJsZXMgY3Jl YXRlZCBiZWZvcmUgYmxvY2sgKi8KIAkJCQkJCXBscGdzcWxfYWRkX2luaXRkYXR1bXMoTlVM TCk7CisJCQkJCQlsYXN0X3ByYWdtYSA9IGZhbHNlOwogCQkJCQkJLyoKIAkJCQkJCSAqIERp c2FibGUgc2Nhbm5lciBsb29rdXAgb2YgaWRlbnRpZmllcnMgd2hpbGUKIAkJCQkJCSAqIHdl IHByb2Nlc3MgdGhlIGRlY2xfc3RtdHMKQEAgLTU1NCw2ICs1NjQsMTMgQEAgZGVjbF9zdGF0 ZW1lbnQJOiBkZWNsX3Zhcm5hbWUgZGVjbF9jb25zdCBkZWNsX2RhdGF0eXBlIGRlY2xfY29s bGF0ZSBkZWNsX25vdG51bGwKIAkJCQkJCQluZXctPmN1cnNvcl9leHBsaWNpdF9hcmdyb3cg PSAkNS0+ZG5vOwogCQkJCQkJbmV3LT5jdXJzb3Jfb3B0aW9ucyA9IENVUlNPUl9PUFRfRkFT VF9QTEFOIHwgJDI7CiAJCQkJCX0KKwkJCQl8IEtfUFJBR01BIGFueV9pZGVudGlmaWVyICc7 JworCQkJCQl7CisJCQkJCQlpZiAocGdfc3RyY2FzZWNtcCgkMiwgImF1dG9ub21vdXNfdHJh bnNhY3Rpb24iKSA9PSAwKQorCQkJCQkJCWxhc3RfcHJhZ21hID0gdHJ1ZTsKKwkJCQkJCWVs c2UKKwkJCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBwcmFnbWEiKTsKKwkJCQkJfQogCQkJ CTsKIAogb3B0X3Njcm9sbGFibGUgOgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3Jj L3BsX3VucmVzZXJ2ZWRfa3dsaXN0LmggYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNl cnZlZF9rd2xpc3QuaAppbmRleCAzZTI1OGE2YmI5Li5jZjhlMmFhNjlkIDEwMDY0NAotLS0g YS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaAorKysgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaApAQCAtODYsNiArODYsNyBA QCBQR19LRVlXT1JEKCJwZ19leGNlcHRpb25fY29udGV4dCIsIEtfUEdfRVhDRVBUSU9OX0NP TlRFWFQpCiBQR19LRVlXT1JEKCJwZ19leGNlcHRpb25fZGV0YWlsIiwgS19QR19FWENFUFRJ T05fREVUQUlMKQogUEdfS0VZV09SRCgicGdfZXhjZXB0aW9uX2hpbnQiLCBLX1BHX0VYQ0VQ VElPTl9ISU5UKQogUEdfS0VZV09SRCgicGdfcm91dGluZV9vaWQiLCBLX1BHX1JPVVRJTkVf T0lEKQorUEdfS0VZV09SRCgicHJhZ21hIiwgS19QUkFHTUEpCiBQR19LRVlXT1JEKCJwcmlu dF9zdHJpY3RfcGFyYW1zIiwgS19QUklOVF9TVFJJQ1RfUEFSQU1TKQogUEdfS0VZV09SRCgi cHJpb3IiLCBLX1BSSU9SKQogUEdfS0VZV09SRCgicXVlcnkiLCBLX1FVRVJZKQpkaWZmIC0t Z2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaCBiL3NyYy9wbC9wbHBnc3FsL3Ny Yy9wbHBnc3FsLmgKaW5kZXggOWYwYTkxMjExNS4uNWE5NThmMDYzNiAxMDA2NDQKLS0tIGEv c3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxwZ3NxbC5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRy ZWNvcmQuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCisjaW5jbHVkZSAidGNv cC9hdXRvbm9tb3VzLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEZWZpbml0aW9ucwpA QCAtNTAyLDYgKzUwMyw3IEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfc3RtdF9ibG9jawog CWludAkJCWxpbmVubzsKIAl1bnNpZ25lZCBpbnQgc3RtdGlkOwogCWNoYXIJICAgKmxhYmVs OworCWJvb2wJCWF1dG9ub21vdXM7CiAJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0 YXRlbWVudHMgKi8KIAlpbnQJCQluX2luaXR2YXJzOwkJLyogTGVuZ3RoIG9mIGluaXR2YXJu b3NbXSAqLwogCWludAkJICAgKmluaXR2YXJub3M7CQkvKiBkbm9zIG9mIHZhcmlhYmxlcyBk ZWNsYXJlZCBpbiB0aGlzIGJsb2NrICovCkBAIC0xMDQ2LDYgKzEwNDgsOSBAQCB0eXBlZGVm IHN0cnVjdCBQTHBnU1FMX2V4ZWNzdGF0ZQogCVJlc291cmNlT3duZXIgdHVwbGVfc3RvcmVf b3duZXI7CiAJUmV0dXJuU2V0SW5mbyAqcnNpOwogCisJQXV0b25vbW91c1Nlc3Npb24gKmF1 dG9ub21vdXNfc2Vzc2lvbjsKKworCS8qIHRoZSBkYXR1bXMgcmVwcmVzZW50aW5nIHRoZSBm dW5jdGlvbidzIGxvY2FsIHZhcmlhYmxlcyAqLwogCWludAkJCWZvdW5kX3Zhcm5vOwogCiAJ LyoKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9hdXRvbm9t b3VzLnNxbCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9hdXRvbm9tb3VzLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNWM3ZTljNTE5Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2F1dG9u b21vdXMuc3FsCkBAIC0wLDAgKzEsMTI5NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLSBhdXRvbl9m dW5jIHNpbXBsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJhdXRvbl9mdW5jIHNpbXBs ZSInOyBFTkQ7ICQkOworCitDUkVBVEUgVEFCTEUgdGJsIChhIGludCk7CisKK0NSRUFURSBP UiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdz cWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOwor QkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsKKworU1RB UlQgVFJBTlNBQ1RJT047CitTRUxFQ1QgZnVuYygpOworUk9MTEJBQ0s7CitTRUxFQ1QgKiBG Uk9NIHRibDsKKworRFJPUCBGVU5DVElPTiBmdW5jOworRFJPUCBUQUJMRSB0Ymw7CisKKwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKy0tLS0tIGF1dG9uX2Z1bmMgLT4gZnVuYyBjYWxsIHRocm91Z2ggU0VMRUNU IC0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNF ICdUZXN0ICJhdXRvbl9mdW5jIC0+IGZ1bmMgY2FsbCB0aHJvdWdoIFNFTEVDVCInOyBFTkQ7 ICQkOworCitDUkVBVEUgVEFCTEUgdGJsIChhIHZhcmNoYXIpOworCitDUkVBVEUgT1IgUkVQ TEFDRSBGVU5DVElPTiBmdW5jKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitB UyAkJAorREVDTEFSRQorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2luIGZ1 bmMnKTsKK0VORDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhdXRvbl9m dW5jKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQor ICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKCdiZWZvcmUgZnVuYycpOworICBTVEFSVCBUUkFOU0FDVElPTjsKKyAg U0VMRUNUIGZ1bmMoKTsKKyAgQ09NTUlUOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgn YWZ0ZXIgZnVuYycpOworRU5EOworJCQ7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VMRUNU IGF1dG9uX2Z1bmMoKTsKK1JPTExCQUNLOworU0VMRUNUICogRlJPTSB0Ymw7CisKK0RST1Ag RlVOQ1RJT04gZnVuYzsKK0RST1AgRlVOQ1RJT04gYXV0b25fZnVuYzsKK0RST1AgVEFCTEUg dGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBhdXRvbl9mdW5jIC0+IGZ1bmMgY2FsbCB0aHJv dWdoIFBFUkZPUk0gLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJB SVNFIE5PVElDRSAnVGVzdCAiYXV0b25fZnVuYyAtPiBmdW5jIGNhbGwgdGhyb3VnaCBQRVJG T1JNIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CisKK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdF IHBscGdzcWwKK0FTICQkCitERUNMQVJFCitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFM VUVTICgnaW4gZnVuYycpOworRU5EOworJCQ7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNU SU9OIGF1dG9uX2Z1bmMoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQk CitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBmdW5jJyk7CisgIFNUQVJUIFRSQU5T QUNUSU9OOworICBQRVJGT1JNIGZ1bmMoKTsKKyAgQ09NTUlUOworICBJTlNFUlQgSU5UTyB0 YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYycpOworRU5EOworJCQ7CisKK1NUQVJUIFRSQU5TQUNU SU9OOworU0VMRUNUIGF1dG9uX2Z1bmMoKTsKK1JPTExCQUNLOworU0VMRUNUICogRlJPTSB0 Ymw7CisKK0RST1AgRlVOQ1RJT04gZnVuYzsKK0RST1AgRlVOQ1RJT04gYXV0b25fZnVuYzsK K0RST1AgVEFCTEUgdGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBhdXRvbl9mdW5jIC0+IGF1 dG9uX2Z1bmMgY2FsbCB0aHJvdWdoIFNFTEVDVCAtLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RP ICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiYXV0b25fZnVuYyAtPiBhdXRvbl9mdW5j IGNhbGwgdGhyb3VnaCBTRUxFQ1QiJzsgRU5EOyAkJDsKKworQ1JFQVRFIFRBQkxFIHRibCAo YSB2YXJjaGFyKTsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXV0b25fZnVuYzEo KSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBS QUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJs IFZBTFVFUyAoJ2luIGF1dG9uX2Z1bmMxJyk7CitFTkQ7CiskJDsKKworQ1JFQVRFIE9SIFJF UExBQ0UgRlVOQ1RJT04gYXV0b25fZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBs cGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9O OworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBhdXRvbl9mdW5j MScpOworICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgU0VMRUNUIGF1dG9uX2Z1bmMxKCk7Cisg IENPTU1JVDsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2FmdGVyIGF1dG9uX2Z1bmMx Jyk7CitFTkQ7CiskJDsKKworU1RBUlQgVFJBTlNBQ1RJT047CitTRUxFQ1QgYXV0b25fZnVu YzIoKTsKK1JPTExCQUNLOworU0VMRUNUICogRlJPTSB0Ymw7CisKK0RST1AgRlVOQ1RJT04g YXV0b25fZnVuYzE7CitEUk9QIEZVTkNUSU9OIGF1dG9uX2Z1bmMyOworRFJPUCBUQUJMRSB0 Ymw7CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIGF1dG9uX2Z1bmMgLT4gYXV0b25fZnVuYyBjYWxs IHRocm91Z2ggUEVSRk9STS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJ U0UgTk9USUNFICdUZXN0ICJhdXRvbl9mdW5jIC0+IGF1dG9uX2Z1bmMgY2FsbCB0aHJvdWdo IFBFUkZPUk0iJzsgRU5EOyAkJDsKKworQ1JFQVRFIFRBQkxFIHRibCAoYSB2YXJjaGFyKTsK KworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXV0b25fZnVuYzEoKSBSRVRVUk5TIHZv aWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9N T1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2lu IGF1dG9uX2Z1bmMxJyk7CitFTkQ7CiskJDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJ T04gYXV0b25fZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQk CitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBhdXRvbl9mdW5jMScpOworICBTVEFS VCBUUkFOU0FDVElPTjsKKyAgUEVSRk9STSBhdXRvbl9mdW5jMSgpOworICBDT01NSVQ7Cisg IElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBhdXRvbl9mdW5jMScpOworRU5EOwor JCQ7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VMRUNUIGF1dG9uX2Z1bmMyKCk7CitST0xM QkFDSzsKK1NFTEVDVCAqIEZST00gdGJsOworCitEUk9QIEZVTkNUSU9OIGF1dG9uX2Z1bmMx OworRFJPUCBGVU5DVElPTiBhdXRvbl9mdW5jMjsKK0RST1AgVEFCTEUgdGJsOworCisKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCistLS0tLSA0IGF1dG9uIGZ1bmMgY2FsbHMsIHNpbXBsZSBTUUwgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAn VGVzdCAiNCBhdXRvbiBmdW5jIGNhbGxzLCBzaW1wbGUgU1FMIic7IEVORDsgJCQ7CisKK0NS RUFURSBUQUJMRSB0YmwgKGEgaW50KTsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04g ZnVuYzEoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJF CisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElO VE8gdGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVO Q1RJT04gZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitE RUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgU0VM RUNUIGZ1bmMxKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDIpOworRU5EOworJCQ7 CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMzKCkgUkVUVVJOUyB2b2lkCitM QU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19U UkFOU0FDVElPTjsKK0JFR0lOCisgIFNFTEVDVCBmdW5jMigpOworICBJTlNFUlQgSU5UTyB0 YmwgVkFMVUVTICgzKTsKK0VORDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElP TiBmdW5jNCgpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xB UkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQg SU5UTyB0YmwgVkFMVUVTICgwKTsKKyAgU0VMRUNUIGZ1bmMzKCk7CisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKDQpOworRU5EOworJCQ7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VM RUNUIGZ1bmM0KCk7CitST0xMQkFDSzsKK1NFTEVDVCAqIEZST00gdGJsOworVFJVTkNBVEUg dGJsOworCitEUk9QIEZVTkNUSU9OIGZ1bmMxOworRFJPUCBGVU5DVElPTiBmdW5jMjsKK0RS T1AgRlVOQ1RJT04gZnVuYzM7CitEUk9QIEZVTkNUSU9OIGZ1bmM0OworRFJPUCBUQUJMRSB0 Ymw7CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIDUgZnVuYyBjYWxscyDihJYxLCBzaW1wbGUgU1FM IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhdXRvbl9mdW5j IC0+IGZ1bmMgLT4gYXV0b25fZnVuYyAtPiBmdW5jIC0+IGF1dG9uX2Z1bmMKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitETyAkJCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3QgIjUgZnVuYyBjYWxscyAxLCBzaW1w bGUgU1FMIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgaW50KTsKKworQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzEoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdF IHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNU SU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsK KworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzIoKSBSRVRVUk5TIHZvaWQKK0xB TkdVQUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICBQRVJGT1JNIGZ1bmMxKCk7CisgIElO U0VSVCBJTlRPIHRibCBWQUxVRVMgKDIpOworRU5EOworJCQ7CisKK0NSRUFURSBPUiBSRVBM QUNFIEZVTkNUSU9OIGZ1bmMzKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitB UyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lO CisgIFNFTEVDVCBmdW5jMigpOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgzKTsKK0VO RDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jNCgpIFJFVFVSTlMg dm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIFBFUkZPUk0gZnVuYzMo KTsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMyk7CitFTkQ7CiskJDsKKworQ1JFQVRF IE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzUoKSBSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBs cGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9O OworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMCk7CisgIFNFTEVDVCBmdW5j NCgpOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICg1KTsKK0VORDsKKyQkOworCitTVEFS VCBUUkFOU0FDVElPTjsKK1NFTEVDVCBmdW5jNCgpOworUk9MTEJBQ0s7CitTRUxFQ1QgKiBG Uk9NIHRibDsKK1RSVU5DQVRFIHRibDsKKworRFJPUCBGVU5DVElPTiBmdW5jMTsKK0RST1Ag RlVOQ1RJT04gZnVuYzI7CitEUk9QIEZVTkNUSU9OIGZ1bmMzOworRFJPUCBGVU5DVElPTiBm dW5jNDsKK0RST1AgRlVOQ1RJT04gZnVuYzU7CitEUk9QIFRBQkxFIHRibDsKKworCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorLS0tLS0gNSBmdW5jIGNhbGxzIOKEljIsIHNpbXBsZSBTUUwgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGZ1bmMgLT4gYXV0b25fZnVuYyAtPiBm dW5jIC0+IGF1dG9uX2Z1bmMgLT4gZnVuYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNF IE5PVElDRSAnVGVzdCAiNSBmdW5jIGNhbGxzIDIsIHNpbXBsZSBTUUwiJzsgRU5EOyAkJDsK KworQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnQpOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTiBmdW5jMSgpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JF R0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDEpOworRU5EOworJCQ7CisKK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMyKCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBw bHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElP TjsKK0JFR0lOCisgIFNFTEVDVCBmdW5jMSgpOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVT ICgyKTsKK0VORDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMygp IFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIFBFUkZP Uk0gZnVuYzIoKTsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMyk7CitFTkQ7CiskJDsK KworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzQoKSBSRVRVUk5TIHZvaWQKK0xB TkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RS QU5TQUNUSU9OOworQkVHSU4KKyAgU0VMRUNUIGZ1bmMzKCk7CisgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKDMpOworRU5EOworJCQ7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9O IGZ1bmM1KCkgUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4K KyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMCk7CisgIFBFUkZPUk0gZnVuYzQoKTsKKyAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoNSk7CitFTkQ7CiskJDsKKworU0VMRUNUIGZ1bmM0 KCk7CitTRUxFQ1QgKiBGUk9NIHRibDsKK1RSVU5DQVRFIHRibDsKKworRFJPUCBGVU5DVElP TiBmdW5jMTsKK0RST1AgRlVOQ1RJT04gZnVuYzI7CitEUk9QIEZVTkNUSU9OIGZ1bmMzOwor RFJPUCBGVU5DVElPTiBmdW5jNDsKK0RST1AgRlVOQ1RJT04gZnVuYzU7CitEUk9QIFRBQkxF IHRibDsKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0gYXV0b25fZnVuYyAtPiBhdXRvbl9mdW5jIGNh bGwsIGR5bmFtaWMgU1FMIC0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lO IFJBSVNFIE5PVElDRSAnVGVzdCAiYXV0b24gLT4gYXV0b24gY2FsbCwgZHluYW1pYyBTUUwi JzsgRU5EOyAkJDsKKworQ1JFQVRFIFRBQkxFIHRibCAoYSBpbnQpOworCitDUkVBVEUgT1Ig UkVQTEFDRSBGVU5DVElPTiBmdW5jMSgpIFJFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3Nx bAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitC RUdJTgorICBFWEVDVVRFICdJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgxKSc7CitFTkQ7Cisk JDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzIoKSBSRVRVUk5TIHZvaWQK K0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VT X1RSQU5TQUNUSU9OOworQkVHSU4KKyAgRVhFQ1VURSAnSU5TRVJUIElOVE8gdGJsIFZBTFVF UyAoMCknOworICBTRUxFQ1QgZnVuYzEoKTsKKyAgRVhFQ1VURSAnSU5TRVJUIElOVE8gdGJs IFZBTFVFUyAoMiknOworRU5EOworJCQ7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0VMRUNU IGZ1bmMyKCk7CitST0xMQkFDSzsKK1NFTEVDVCAqIEZST00gdGJsOworVFJVTkNBVEUgdGJs OworCitEUk9QIEZVTkNUSU9OIGZ1bmMxOworRFJPUCBGVU5DVElPTiBmdW5jMjsKK0RST1Ag VEFCTEUgdGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBmb3IgbG9vcCB3aXRoIHRyYW5zYWN0 aW9uIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJF R0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZm9yIGxvb3Agd2l0aCB0cmFuc2FjdGlvbiBzdGF0 ZW1lbnRzIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgaW50KTsKKworQ1JF QVRFIEZVTkNUSU9OIGR5bmFtaWMoKSBSRVRVUk5TIGludGVnZXIKK0xBTkdVQUdFIHBscGdz cWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOwor QkVHSU4KKyAgRk9SIGkgSU4gMC4uOSBMT09QCisgICAgU1RBUlQgVFJBTlNBQ1RJT047Cisg ICAgRVhFQ1VURSAnSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJyB8fCBpOjp0ZXh0IHx8ICcp JzsKKyAgICBJRiBpICUgMiA9IDAgVEhFTgorICAgICAgQ09NTUlUOworICAgIEVMU0UKKyAg ICAgIFJPTExCQUNLOworICAgIEVORCBJRjsKKyAgRU5EIExPT1A7CisKKyAgUkVUVVJOIDQy OworRU5EOworJCQ7CisKKworU0VMRUNUIGR5bmFtaWMoKTsKK1NFTEVDVCAqIEZST00gdGJs OworVFJVTkNBVEUgdGJsOworCisKK0NSRUFURSBGVU5DVElPTiBzaW1wbGUoKSBSRVRVUk5T IGludGVnZXIKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBB VVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgRk9SIGkgSU4gMC4uOSBMT09QCisg ICAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoaSk7 CisgICAgSUYgaSAlIDIgPSAwIFRIRU4KKyAgICAgIENPTU1JVDsKKyAgICBFTFNFCisgICAg ICBST0xMQkFDSzsKKyAgICBFTkQgSUY7CisgIEVORCBMT09QOworCisgIFJFVFVSTiA0MjsK K0VORDsKKyQkOworCisKK1NFTEVDVCBzaW1wbGUoKTsKK1NFTEVDVCAqIEZST00gdGJsOwor VFJVTkNBVEUgdGJsOworCitEUk9QIEZVTkNUSU9OIGR5bmFtaWM7CitEUk9QIEZVTkNUSU9O IHNpbXBsZTsKK0RST1AgVEFCTEUgdGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSB0cmFuc2Fj dGlvbiBzY29wZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKy0tIGlmIGVycm9yIGlzIGluIGF1dG9ub21vdXMgZnVuY3Rpb24sIHRoZW4gZXhp dCBmcm9tIGl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJ0 cmFuc2FjdGlvbiBzY29wZSInOyBFTkQ7ICQkOworCitDUkVBVEUgVEFCTEUgdGJsIChhIGlu dGVnZXIgQ0hFQ0sgKGEgPiA1MDApKTsKKworQ1JFQVRFIEZVTkNUSU9OIHNlcF90cmFucygp CitSRVRVUk5TIHZvaWQKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RS QU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsKGEpIFZBTFVFUyg3MDApOyAg IC0tIDFzdCBhdXRvbm9tb3VzIHRyYW5zYWN0aW9uCisgIElOU0VSVCBJTlRPIHRibChhKSBW QUxVRVMoMTAwKTsgICAtLSAybmQgYXV0b25vbW91cyB0cmFuc2FjdGlvbgorICBJTlNFUlQg SU5UTyB0YmwoYSkgVkFMVUVTKDgwMCk7ICAgLS0gbm8gdHJhbnNhY3Rpb24sIGFzIGluIDJu ZCB2aW9sYXRpb24KK0VORAorJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUIHNlcF90 cmFucygpOworU0VMRUNUICogRlJPTSB0Ymw7CitUUlVOQ0FURSBUQUJMRSB0Ymw7CisKK0NS RUFURSBGVU5DVElPTiBvbmVfdHJhbnMoKQorUkVUVVJOUyB2b2lkCitBUyAkJAorREVDTEFS RQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIFNUQVJUIFRS QU5TQUNUSU9OOyAtLSAxIGF1dG9ub21vdXMgdHJhbnNhY3Rpb24KKyAgICBJTlNFUlQgSU5U TyB0YmwoYSkgVkFMVUVTKDE3MDApOworICAgIElOU0VSVCBJTlRPIHRibChhKSBWQUxVRVMo MjAwKTsgLS0gdmlvbGF0aW9uIG9mIGNvbnN0cmFpbnQKKyAgICBJTlNFUlQgSU5UTyB0Ymwo YSkgVkFMVUVTKDE4MDApOworICBDT01NSVQ7CitFTkQKKyQkIExBTkdVQUdFIHBscGdzcWw7 CisKK1NFTEVDVCBvbmVfdHJhbnMoKTsKK1NFTEVDVCAqIEZST00gdGJsOworVFJVTkNBVEUg dGJsOworCitEUk9QIEZVTkNUSU9OIHNlcF90cmFucygpOworRFJPUCBGVU5DVElPTiBvbmVf dHJhbnMoKTsKK0RST1AgVEFCTEUgdGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBub24gdHJh bnNhY3Rpb24gY29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAibm9uIHRyYW5zYWN0aW9u IGNvbW1hbmRzIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgaW50ZWdlcik7 CisKK0RPICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOwor QkVHSU4KKyAgIEVYRUNVVEUgJ1ZBQ1VVTSB0YmwnOworRU5EICQkOworCitEUk9QIFRBQkxF IHRibDsKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0gYXVkaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJCBCRUdJTiBS QUlTRSBOT1RJQ0UgJ1Rlc3QgImF1ZGl0Iic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0 YWJsZV90cmFja2luZyhsb2dfaWQgc2VyaWFsLCB1c2VybmFtZSB0ZXh0LCBldmVudF9kYXRl IHRpbWVzdGFtcCwgbXNnIHRleHQpOworCitDUkVBVEUgRlVOQ1RJT04gbG9nX2FjdGlvbl9h dHggKAorICB1c2VybmFtZSB0ZXh0LCBldmVudF9kYXRlIHRpbWVzdGFtcCwgbXNnIHRleHQK KykgUkVUVVJOUyB2b2lkIEFTCiskYm9keSQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01P VVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgSU5TRVJU IElOVE8gdGFibGVfdHJhY2tpbmcgVkFMVUVTIChuZXh0dmFsKCd0YWJsZV90cmFja2luZ19s b2dfaWRfc2VxJzo6cmVnY2xhc3MpLHVzZXJuYW1lLCBldmVudF9kYXRlLCBtc2cpOworICBD T01NSVQ7CitFTkQ7CiskYm9keSQKK0xBTkdVQUdFIHBscGdzcWw7CisKK0NSRUFURSBGVU5D VElPTiBsb2dfYWN0aW9uICgKKyAgdXNlcm5hbWUgdGV4dCwgZXZlbnRfZGF0ZSB0aW1lc3Rh bXAsIG1zZyB0ZXh0CispIFJFVFVSTlMgdm9pZCBBUworJGJvZHkkCitERUNMQVJFCisgdl9x dWVyeSB0ZXh0OworQkVHSU4KKyAgLS0gQ2FsbCB0aGUgYXV0b25vbW91cyBmdW5jdGlvbgor ICB2X3F1ZXJ5IDo9ICdTRUxFQ1QgbG9nX2FjdGlvbl9hdHggKCAnIHx8IHF1b3RlX251bGxh YmxlKHVzZXJuYW1lKSB8fAorICAgICAgICAgICAgICcsJyB8fCBxdW90ZV9udWxsYWJsZShl dmVudF9kYXRlKSB8fCAnLCcgfHwgcXVvdGVfbnVsbGFibGUobXNnKSB8fCAnICknOworICBF WEVDVVRFIHZfcXVlcnk7CisKKyAgLS0gRG8gc29tZXRoaW5nIGVsc2UKKyAgUkFJU0UgTk9U SUNFICdEaXZpc2lvbiBieSB6ZXJvJzsKKyAgUEVSRk9STSA1LzA7CitFTkQ7CiskYm9keSQK K0xBTkdVQUdFIFBMUEdTUUw7CisKKworU0VMRUNUICogRlJPTSBsb2dfYWN0aW9uKGN1cnJl bnRfdXNlcjo6dGV4dCwgbm93KCk6OnRpbWVzdGFtcCwgJ1Rlc3QnOjp0ZXh0KTsKK1NFTEVD VCBtc2cgRlJPTSB0YWJsZV90cmFja2luZzsKKworRFJPUCBGVU5DVElPTiBsb2dfYWN0aW9u OworRFJPUCBGVU5DVElPTiBsb2dfYWN0aW9uX2F0eDsKK0RST1AgVEFCTEUgdGFibGVfdHJh Y2tpbmc7CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIGF1ZGl0IHRocm91Z2ggdHJpZ2dlciAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdXNlcnMgYXJl IGluIHBnX3VzZXIgdGFibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJCBCRUdJTiBSQUlTRSBOT1RJQ0Ug J1Rlc3QgImF1ZGl0IHRocm91Z2ggdHJpZ2dlciInOyBFTkQ7ICQkOworCitDUkVBVEUgU0NI RU1BIGF1ZHRyaWc7CisKK0NSRUFURSBUQUJMRSBhdWR0cmlnLnRibCAoCisgICAgaWQgaW50 ZWdlciwKKyAgICB1c2VyX25hbWUgdmFyY2hhcgorKTsKKworQ1JFQVRFIFRBQkxFIGF1ZHRy aWcubG9nICgKKyAgdXNlcl9uYW1lIHZhcmNoYXIsCisgIGV2ZW50IHZhcmNoYXIKKyk7CisK K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGF1ZHRyaWcubG9nX2Z1bmMoKQorUkVUVVJO UyBUUklHR0VSCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFHTUEg QVVUT05PTU9VU19UUkFOU0FDVElPTjsKKyAgdl9hY3Rpb24gdmFyY2hhcjsKK0JFR0lOCisg IElGIChUR19PUCA9ICdJTlNFUlQnKSBUSEVOCisgICAgICB2X2FjdGlvbiA6PSAnQWRkZWQg aWQ9JyB8fCBORVcuaWQ6OnRleHQ7CisgIEVMU0lGIChUR19PUCA9ICdVUERBVEUnKSBUSEVO CisgICAgICB2X2FjdGlvbiA6PSAnVXBkYXRlZCBpZD0nIHx8IE5FVy5pZDo6dGV4dDsKKyAg RUxTSUYgKFRHX09QID0gJ0RFTEVURScpIFRIRU4KKyAgICAgIHZfYWN0aW9uIDo9ICdEZWxl dGVkIGlkPScgfHwgT0xELmlkOjp0ZXh0OworICBFTkQgSUY7CisgIElOU0VSVCBJTlRPIGF1 ZHRyaWcubG9nIFZBTFVFUyAoY3VycmVudF91c2VyLCB2X2FjdGlvbik7CisgIFJFVFVSTiBO RVc7CitFTkQ7CiskJDsKKworQ1JFQVRFIE9SIFJFUExBQ0UgVFJJR0dFUiBhdWR0cmlnX3Ry aWdfZnVuYworQUZURVIgSU5TRVJUIE9SIFVQREFURSBPUiBERUxFVEUKK09OIGF1ZHRyaWcu dGJsCitGT1IgRUFDSCBST1cKK0VYRUNVVEUgUFJPQ0VEVVJFIGF1ZHRyaWcubG9nX2Z1bmMo KTsKKworU0VMRUNUICogRlJPTSBhdWR0cmlnLmxvZzsKK1NFTEVDVCAqIEZST00gYXVkdHJp Zy50Ymw7CisKK0lOU0VSVCBJTlRPIGF1ZHRyaWcudGJsIFZBTFVFUyAoOTAwMSwnU01JVEgn KTsKK0lOU0VSVCBJTlRPIGF1ZHRyaWcudGJsIFZBTFVFUyAoOTAwMiwnSk9ORVMnKTsKK0RF TEVURSBGUk9NIGF1ZHRyaWcudGJsIFdIRVJFIGlkPTkwMDE7CitTRUxFQ1QgKiBGUk9NIGF1 ZHRyaWcubG9nOworU0VMRUNUICogRlJPTSBhdWR0cmlnLnRibDsKKworCitUUlVOQ0FURSBh dWR0cmlnLmxvZzsKK1RSVU5DQVRFIGF1ZHRyaWcudGJsOworU1RBUlQgVFJBTlNBQ1RJT047 CitJTlNFUlQgSU5UTyBhdWR0cmlnLnRibCBWQUxVRVMgKDkwMDEsJ1NNSVRIJyk7CitJTlNF UlQgSU5UTyBhdWR0cmlnLnRibCBWQUxVRVMgKDkwMDIsJ0pPTkVTJyk7CitERUxFVEUgRlJP TSBhdWR0cmlnLnRibCBXSEVSRSBpZD05MDAxOworUk9MTEJBQ0s7CisKK1NFTEVDVCAqIEZS T00gYXVkdHJpZy5sb2c7CitTRUxFQ1QgKiBGUk9NIGF1ZHRyaWcudGJsOworCitEUk9QIFRB QkxFIGF1ZHRyaWcubG9nOworRFJPUCBUQUJMRSBhdWR0cmlnLnRibDsKKworCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0tLS0gZnVuY3Rpb24gYW5kIHByb2NlZHVyZSBjYWxsIGluIGF1dG9ub21vdXMgc2Vz c2lvbnMgLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwcm9jZWR1cmUgY2FsbCBpcyBmb3JiaWRkZW4g aW4gYXV0b25vbW91cyBmdW5jdGlvbnMKKy0tIGJ1dCBwb3NzaWJsZSBpbiBzaW1wbGUgZnVu Y3Rpb25zLCB0aGF0IGFyZSBjYWxsZWQgaW4gYXV0b25vbW91cyBmdW5jdGlvbnMKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCitETyAkJCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3QgImZ1bmN0aW9uIGFuZCBwcm9j ZWR1cmUgY2FsbCBpbiBhdXRvbm9tb3VzIHNlc3Npb25zIic7IEVORDsgJCQ7CisKK0NSRUFU RSBUQUJMRSB0YmwgKGEgaW50KTsKKworQ1JFQVRFIEZVTkNUSU9OIGZ1bmMoKQorUkVUVVJO UyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoMSk7CitFTkQ7CiskJDsKKworQ1JFQVRFIFBST0NFRFVSRSBwcm9jKCkK K0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFM VUVTICgyKTsKKyAgUk9MTEJBQ0s7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDMpOwor RU5EOworJCQ7CisKKworLS0gY2hlY2s6IGF1dG9uX2Z1bmMgLT4gZnVuYworLS0gICAgICAg ICAgICAgICAgICAgLT4gcHJvYworCitDUkVBVEUgRlVOQ1RJT04gYXV0b25fZnVuYygpCitS RVRVUk5TIHZvaWQKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5T QUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoMTApOworICBTRUxF Q1QgKiBGUk9NIGZ1bmMoKTsKKyAgQ0FMTCBwcm9jKCk7CisgIElOU0VSVCBJTlRPIHRibCBW QUxVRVMgKDIwKTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CisKK1NFTEVDVCAgYXV0 b25fZnVuYygpOworU0VMRUNUICogRlJPTSB0Ymw7CitUUlVOQ0FURSBUQUJMRSB0Ymw7CisK KworLS0gY2hlY2s6IGF1dG9uX3Byb2MgLT4gZnVuYworLS0gICAgICAgICAgICAgICAgICAg LT4gcHJvYworCitDUkVBVEUgUFJPQ0VEVVJFIGF1dG9uX3Byb2MoKQorTEFOR1VBR0UgcGxw Z3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047 CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgxMCk7CisgIFNFTEVDVCAqIEZS T00gZnVuYygpOworICBDQUxMIHByb2MoKTsKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAo MjApOworRU5EOworJCQ7CisKK0NBTEwgYXV0b25fcHJvYygpOworU0VMRUNUICogRlJPTSB0 Ymw7CitUUlVOQ0FURSBUQUJMRSB0Ymw7CisKKworLS0gY2hlY2s6IGF1dG9uX2Z1bmNfMiAt PiBmdW5jXzIgLT4gcHJvY19ub190cmFucworCitDUkVBVEUgUFJPQ0VEVVJFIHByb2Nfbm9f dHJhbnMoKQorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKDIpOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgzKTsKK0VORDsK KyQkOworCitDUkVBVEUgRlVOQ1RJT04gZnVuY18yKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VB R0UgcGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKDMw KTsKKyAgQ0FMTCBwcm9jX25vX3RyYW5zKCk7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMg KDQwKTsKK0VORDsKKyQkOworCitDUkVBVEUgRlVOQ1RJT04gYXV0b25fZnVuY18yKCkKK1JF VFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01B IEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFM VUVTICgxMCk7CisgIFNFTEVDVCAqIEZST00gZnVuY18yKCk7CisgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKDIwKTsKK0VORDsKKyQkOworCitTRUxFQ1QgYXV0b25fZnVuY18yKCk7CitT RUxFQ1QgKiBGUk9NIHRibDsKK1RSVU5DQVRFIFRBQkxFIHRibDsKKworRFJPUCBGVU5DVElP TiBmdW5jOworRFJPUCBGVU5DVElPTiBmdW5jXzI7CitEUk9QIFBST0NFRFVSRSBwcm9jOwor RFJPUCBQUk9DRURVUkUgcHJvY19ub190cmFuczsKK0RST1AgRlVOQ1RJT04gYXV0b25fZnVu YzsKK0RST1AgRlVOQ1RJT04gYXV0b25fZnVuY18yOworRFJPUCBQUk9DRURVUkUgYXV0b25f cHJvYzsKK0RST1AgVEFCTEUgdGJsOworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLSBleGNlcHRpb24g c2ltcGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAnVGVzdCAiZXhjZXB0aW9uIHNpbXBsZSIn OyBFTkQ7ICQkOworCitDUkVBVEUgRlVOQ1RJT04gZl9leGNlcHRpb24oKQorUkVUVVJOUyBW T0lEIEFTICQkCitERUNMQVJFCisgICAgICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElP TjsKK0JFR0lOCisgICAgICBSQUlTRSBOT1RJQ0UgJ0NhbGwgZl9leGNlcHRpb24nOworICAg ICAgUkFJU0UgRVhDRVBUSU9OICdUZXN0IGV4Y2VwdGlvbicgVVNJTkcgRVJSQ09ERSA9ICdB QjAwMSc7CitFTkQ7CiskJAorTEFOR1VBR0UgcGxwZ3NxbDsKKworQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04gZl9tYWluICgpCitSRVRVUk5TIFZPSUQgQVMgJCQKK0JFR0lOCisgIEJF R0lOCisgICAgUEVSRk9STSBmX2V4Y2VwdGlvbigpOworICBFWENFUFRJT04KKyAgICBXSEVO IE9USEVSUyBUSEVOCisgICAgICBJRiBTUUxTVEFURSA9ICdBQjAwMScgVEhFTgorICAgICAg ICBSQUlTRSBOT1RJQ0UgJ0NhdWdodCBjdXN0b20gZXhjZXB0aW9uIHdpdGggU1FMU1RBVEUg QUIwMDEuJzsKKyAgICAgIEVMU0UKKyAgICAgICAgUkFJU0UgTk9USUNFICdBbiBleGNlcHRp b24gb2NjdXJyZWQ6ICUnLCBTUUxFUlJNOworICAgICAgRU5EIElGOworICBFTkQ7CitFTkQ7 CiskJAorTEFOR1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUICogRlJPTSBmX21haW4oKTsKKwor RFJPUCBGVU5DVElPTiBmX2V4Y2VwdGlvbjsKK0RST1AgRlVOQ1RJT04gZl9tYWluOworCisK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCistLS0tLSBleGNlcHRpb24gd2l0aCBtYW55IGZ1bmN0aW9ucyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElD RSAnVGVzdCAiZXhjZXB0aW9uIHdpdGggbWFueSBmdW5jdGlvbnMiJzsgRU5EOyAkJDsKKwor Q1JFQVRFIFRBQkxFIHRibCAoYSB2YXJjaGFyKTsKKworQ1JFQVRFIEZVTkNUSU9OIGZfZXhj ZXB0aW9uX2F1dG9uKCkKK1JFVFVSTlMgVk9JRCBBUyAkJAorREVDTEFSRQorICBQUkFHTUEg QVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxV RVMgKCdiZWZvcmUgcmFpc2UnKTsKKyAgUkFJU0UgRVhDRVBUSU9OICdUZXN0IGV4Y2VwdGlv bicgVVNJTkcgRVJSQ09ERSA9ICdBQjAwMSc7CisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMg KCdhZnRlciByYWlzZScpOworRU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWw7CisKK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMwKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VBR0Ug cGxwZ3NxbAorQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdiZWZv cmUgZl9leGNlcHRpb25fYXV0b24nKTsKKyAgUEVSRk9STSBmX2V4Y2VwdGlvbl9hdXRvbigp OworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZl9leGNlcHRpb25fYXV0b24n KTsKK0VORDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jMF9hdXRv bigpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FTICQkCitERUNMQVJFCisg IFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworQkVHSU4KKyAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoJ2JlZm9yZSBmdW5jMCcpOworICBQRVJGT1JNIGZ1bmMwKCk7CisgIElO U0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMCcpOworRU5EOworJCQ7CisKKwor Q1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYzEoKQorUkVUVVJOUyB2b2lkCitMQU5H VUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAo J2JlZm9yZSBmdW5jMF9hdXRvbicpOworICBQRVJGT1JNIGZ1bmMwX2F1dG9uKCk7CisgIElO U0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMF9hdXRvbicpOworRU5EOworJCQ7 CisKKworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gY2F0Y2hfZXhjKCkKK1JFVFVSTlMg dm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKKyAgQkVHSU4KKyAgICBJTlNFUlQgSU5U TyB0YmwgVkFMVUVTICgnYmVmb3JlIGZ1bmMxJyk7CisgICAgUEVSRk9STSBmdW5jMSgpOwor ICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMScpOworICBFWENFUFRJ T04KKyAgICBXSEVOIE9USEVSUyBUSEVOCisgICAgICBJRiBTUUxTVEFURSA9ICdBQjAwMScg VEhFTgorICAgICAgICBSQUlTRSBOT1RJQ0UgJ0NhdWdodCBjdXN0b20gZXhjZXB0aW9uIHdp dGggU1FMU1RBVEUgQUIwMDEuJzsKKyAgICAgIEVMU0UKKyAgICAgICAgUkFJU0UgTk9USUNF ICdBbiBleGNlcHRpb24gb2NjdXJyZWQ6ICUnLCBTUUxFUlJNOworICAgICAgRU5EIElGOwor ICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMSBpbiBleGMnKTsKKyAg RU5EOworJCQ7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMxX2F1dG9uKCkK K1JFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJB R01BIEFVVE9OT01PVVNfVFJBTlNBQ1RJT047CitCRUdJTgorICBTVEFSVCBUUkFOU0FDVElP TjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYmVmb3JlIGNhdGNoX2V4YycpOwor ICAgIFBFUkZPUk0gY2F0Y2hfZXhjKCk7CisgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAo J2FmdGVyIGNhdGNoX2V4YycpOworICBDT01NSVQ7CitFTkQ7CiskJDsKKworQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gZnVuYzIoKQorUkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBn c3FsCitBUyAkJAorQkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBm dW5jMV9hdXRvbicpOworICBQRVJGT1JNIGZ1bmMxX2F1dG9uKCk7CisgIElOU0VSVCBJTlRP IHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMV9hdXRvbicpOworRU5EOworJCQ7CisKK0NSRUFU RSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZ1bmMyX2F1dG9uKCkKK1JFVFVSTlMgdm9pZAorTEFO R1VBR0UgcGxwZ3NxbAorQVMgJCQKK0RFQ0xBUkUKKyAgUFJBR01BIEFVVE9OT01PVVNfVFJB TlNBQ1RJT047CitCRUdJTgorICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgICBJTlNFUlQgSU5U TyB0YmwgVkFMVUVTICgnYmVmb3JlIGZ1bmMyJyk7CisgICAgUEVSRk9STSBmdW5jMigpOwor ICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMicpOworICBST0xMQkFD SzsKK0VORDsKKyQkOworCitDUkVBVEUgIE9SIFJFUExBQ0UgRlVOQ1RJT04gbWFpbigpCitS RVRVUk5TIHZvaWQgQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdi ZWZvcmUgZnVuYzJfYXV0b24nKTsKKyAgUEVSRk9STSBmdW5jMl9hdXRvbigpOworICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgnYWZ0ZXIgZnVuYzJfYXV0b24nKTsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWw7CisKK1NFTEVDVCBtYWluKCk7CitTRUxFQ1QgKiBGUk9NIHRibDsK KworRFJPUCBGVU5DVElPTiBmdW5jMDsKK0RST1AgRlVOQ1RJT04gZnVuYzBfYXV0b247CitE Uk9QIEZVTkNUSU9OIGZ1bmMxOworRFJPUCBGVU5DVElPTiBmdW5jMV9hdXRvbjsKK0RST1Ag RlVOQ1RJT04gZnVuYzI7CitEUk9QIEZVTkNUSU9OIGZ1bmMyX2F1dG9uOworRFJPUCBGVU5D VElPTiBjYXRjaF9leGM7CitEUk9QIEZVTkNUSU9OIG1haW47CitEUk9QIEZVTkNUSU9OIGZf ZXhjZXB0aW9uX2F1dG9uOworRFJPUCBUQUJMRSB0Ymw7CisKKworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0t IHN1YmJsb2NrIC0+IGF1dG9uX3N1YmJsb2NrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorRE8gJCQgQkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJzdWJibG9j ayAtPiBhdXRvbl9zdWJibG9jayInOyBFTkQ7ICQkOworCitDUkVBVEUgVEFCTEUgdGJsIChh IHZhcmNoYXIpOworCitDUkVBVEUgIE9SIFJFUExBQ0UgRlVOQ1RJT04gZnVuYygpCitSRVRV Uk5TIHZvaWQgQVMgJCQKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMoJ3N1YmJs b2NrLCBiZWZvcmUgYXV0b25fc3ViYmxvY2snKTsKKyAgLS0gYmVnaW4gc3ViYmxvY2sKKyAg REVDTEFSRQorICAgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworICBCRUdJTgor ICAgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMoJ3Jv bGxiYWNrIGluIGF1dG9uX3N1YmJsb2NrJyk7CisgICAgUk9MTEJBQ0s7CisKKyAgICBTVEFS VCBUUkFOU0FDVElPTjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdjb21taXQgaW4g YXV0b25fc3ViYmxvY2snKTsKKyAgICBDT01NSVQ7CisgIEVORDsKKyAgLS0gZW5kIHN1YmJs b2NrCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMoJ3N1YmJsb2NrLCBhZnRlciBhdXRvbl9z dWJibG9jaycpOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworU1RBUlQgVFJBTlNB Q1RJT047CitTRUxFQ1QgZnVuYygpOworUk9MTEJBQ0s7CisKK1NFTEVDVCAqIEZST00gdGJs OworCitEUk9QIEZVTkNUSU9OIGZ1bmM7CitEUk9QIFRBQkxFIHRibDsKKworCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorLS0tLS0gYXV0b25fc3ViYmxvY2sgLT4gc3ViYmxvY2sgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAkJCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3Qg ImF1dG9uX3N1YmJsb2NrIC0+IHN1YmJsb2NrIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJM RSB0YmwgKGEgdmFyY2hhcik7CisKK0NSRUFURSAgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5j KCkKK1JFVFVSTlMgdm9pZCBBUyAkJAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19U UkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMoJ2F1dG9uX3N1 YmJsb2NrLCBiZWZvcmUgc3ViYmxvY2snKTsKKyAgU1RBUlQgVFJBTlNBQ1RJT047CisgIC0t IGJlZ2luIHN1YmJsb2NrCisgIEJFR0lOCisgICAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAg SU5TRVJUIElOVE8gdGJsIFZBTFVFUygncm9sbGJhY2sgaW4gc3ViYmxvY2snKTsKKyAgICBS T0xMQkFDSzsKKworICAgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMoJ2NvbW1pdCBpbiBzdWJibG9jaycpOworICAgIENPTU1JVDsKKyAgRU5EOwor ICAtLSBlbmQgc3ViYmxvY2sKKyAgUk9MTEJBQ0s7CisgIElOU0VSVCBJTlRPIHRibCBWQUxV RVMoJ2F1dG9uX3N1YmJsb2NrLCBhZnRlciBzdWJibG9jaycpOworRU5EOworJCQgTEFOR1VB R0UgcGxwZ3NxbDsKKworU1RBUlQgVFJBTlNBQ1RJT047CitTRUxFQ1QgZnVuYygpOworUk9M TEJBQ0s7CisKK1NFTEVDVCAqIEZST00gdGJsOworCitEUk9QIEZVTkNUSU9OIGZ1bmM7CitE Uk9QIFRBQkxFIHRibDsKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0gYXV0b25fc3ViYmxvY2sgLT4g YXV0b25fc3ViYmxvY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitETyAk JCBCRUdJTiBSQUlTRSBOT1RJQ0UgJ1Rlc3QgImF1dG9uX3N1YmJsb2NrIC0+IGF1dG9uX3N1 YmJsb2NrIic7IEVORDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CisK K0NSRUFURSAgT1IgUkVQTEFDRSBGVU5DVElPTiBmdW5jKCkKK1JFVFVSTlMgdm9pZCBBUyAk JAorREVDTEFSRQorICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisg IElOU0VSVCBJTlRPIHRibCBWQUxVRVMoJ2F1dG9uX3N1YmJsb2NrIDEsIGJlZm9yZSBhdXRv bl9zdWJibG9jaycpOworICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgLS0gYmVnaW4gc3ViYmxv Y2sKKyAgREVDTEFSRQorICAgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworICBC RUdJTgorICAgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgIElOU0VSVCBJTlRPIHRibCBWQUxV RVMoJ3JvbGxiYWNrIGluIGF1dG9uX3N1YmJsb2NrJyk7CisgICAgUk9MTEJBQ0s7CisKKyAg ICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdjb21t aXQgaW4gYXV0b25fc3ViYmxvY2snKTsKKyAgICBDT01NSVQ7CisgIEVORDsKKyAgLS0gZW5k IHN1YmJsb2NrCisgIFJPTExCQUNLOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKCdhdXRv bl9zdWJibG9jayAxLCBhZnRlciBhdXRvbl9zdWJibG9jaycpOworRU5EOworJCQgTEFOR1VB R0UgcGxwZ3NxbDsKKworU1RBUlQgVFJBTlNBQ1RJT047CitTRUxFQ1QgZnVuYygpOworUk9M TEJBQ0s7CitTRUxFQ1QgKiBGUk9NIHRibDsKKworRFJPUCBGVU5DVElPTiBmdW5jOworRFJP UCBUQUJMRSB0Ymw7CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tIG1hbnkgc3ViYmxvY2tzIHdpdGgg ZXhjZXB0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRE8gJCQg QkVHSU4gUkFJU0UgTk9USUNFICdUZXN0ICJtYW55IHN1YmJsb2NrcyB3aXRoIGV4Y2VwdGlv biInOyBFTkQ7ICQkOworCitDUkVBVEUgVEFCTEUgdGJsIChhIHZhcmNoYXIpOworCitDUkVB VEUgRlVOQ1RJT04gZl9leGNlcHRpb24oKQorUkVUVVJOUyBWT0lEIEFTICQkCitCRUdJTgor ICBSQUlTRSBFWENFUFRJT04gJ1Rlc3QgZXhjZXB0aW9uJyBVU0lORyBFUlJDT0RFID0gJ0FC MDAxJzsKK0VORDsKKyQkCitMQU5HVUFHRSBwbHBnc3FsOworCitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiBmdW5jMSgpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdzcWwKK0FT ICQkCitCRUdJTgorICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnYmVmb3JlIGZfZXhjZXB0 aW9uJyk7CisgIFBFUkZPUk0gZl9leGNlcHRpb24oKTsKKyAgSU5TRVJUIElOVE8gdGJsIFZB TFVFUyAoJ2FmdGVyIGZfZXhjZXB0aW9uJyk7CitFTkQ7CiskJDsKKworCitDUkVBVEUgIE9S IFJFUExBQ0UgRlVOQ1RJT04gbWFpbigpCitSRVRVUk5TIHZvaWQKK0xBTkdVQUdFIHBscGdz cWwKK0FTICQkCitERUNMQVJFCisgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOwor QkVHSU4KKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ21haW4gc3RhcnQnKTsKKyAgU1RB UlQgVFJBTlNBQ1RJT047CisgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ3RyYW5zIDEg aW4gc3RhcnQnKTsKKworICAgIERFQ0xBUkUKKyAgICAgIFBSQUdNQSBBVVRPTk9NT1VTX1RS QU5TQUNUSU9OOworICAgIEJFR0lOCisgICAgICBTVEFSVCBUUkFOU0FDVElPTjsKKyAgICAg ICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ3RyYW5zIDIgaW4gc3RhcnQnKTsKKworICAg ICAgICBCRUdJTgorICAgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdlbXB0eSAx IGJlZ2luJyk7CisKKyAgICAgICAgICBCRUdJTgorICAgICAgICAgICAgSU5TRVJUIElOVE8g dGJsIFZBTFVFUyAoJ2V4YyBiZWdpbicpOworCisgICAgICAgICAgICBERUNMQVJFCisgICAg ICAgICAgICAgIFBSQUdNQSBBVVRPTk9NT1VTX1RSQU5TQUNUSU9OOworICAgICAgICAgICAg QkVHSU4KKyAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJ2JlZm9yZSBm dW5jMScpOworICAgICAgICAgICAgICBQRVJGT1JNIGZ1bmMxKCk7CisgICAgICAgICAgICAg IElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdhZnRlciBmdW5jMScpOworICAgICAgICAgICAg RU5EOworCisgICAgICAgICAgRVhDRVBUSU9OCisgICAgICAgICAgICBXSEVOIE9USEVSUyBU SEVOCisgICAgICAgICAgICAgIElGIFNRTFNUQVRFID0gJ0FCMDAxJyBUSEVOCisgICAgICAg ICAgICAgICAgUkFJU0UgTk9USUNFICdDYXVnaHQgY3VzdG9tIGV4Y2VwdGlvbiB3aXRoIFNR TFNUQVRFIEFCMDAxLic7CisgICAgICAgICAgICAgIEVMU0UKKyAgICAgICAgICAgICAgICBS QUlTRSBOT1RJQ0UgJ0FuIGV4Y2VwdGlvbiBvY2N1cnJlZDogJScsIFNRTEVSUk07CisgICAg ICAgICAgICAgIEVORCBJRjsKKyAgICAgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMg KCdleGMgZW5kJyk7CisgICAgICAgICAgRU5EOworCisgICAgICAgIElOU0VSVCBJTlRPIHRi bCBWQUxVRVMgKCdlbXB0eSAxIGVuZCcpOworICAgICAgICBFTkQ7CisKKyAgICAgICAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoJ3RyYW5zIDIgaW4gcm9sbGJhY2snKTsKKyAgICAgIFJP TExCQUNLOworICAgIEVORDsKKworICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCd0cmFu cyAxIGluIGNvbW1pdCcpOworICBDT01NSVQ7CisKKyAgSU5TRVJUIElOVE8gdGJsIFZBTFVF UyAoJ21haW4gZW5kJyk7CitFTkQ7CiskJDsKKworU0VMRUNUIG1haW4oKTsKK1NFTEVDVCAq IEZST00gdGJsOworCitEUk9QIEZVTkNUSU9OIGZ1bmMxOworRFJPUCBGVU5DVElPTiBtYWlu OworRFJPUCBGVU5DVElPTiBmX2V4Y2VwdGlvbjsKK0RST1AgVEFCTEUgdGJsOworCisKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCistLS0tLSBwcm9jIGluIG1hbnkgc3ViYmxvY2tzIG1hbnkgd2l0aCBleGNlcHRp b24gLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RPICQkIEJFR0lOIFJBSVNFIE5PVElDRSAn VGVzdCAicHJvYyBpbiBtYW55IHN1YmJsb2NrcyBtYW55IHdpdGggZXhjZXB0aW9uIic7IEVO RDsgJCQ7CisKK0NSRUFURSBUQUJMRSB0YmwgKGEgdmFyY2hhcik7CisKK0NSRUFURSBGVU5D VElPTiBmX2V4Y2VwdGlvbigpCitSRVRVUk5TIFZPSUQgQVMgJCQKK0JFR0lOCisgIFJBSVNF IEVYQ0VQVElPTiAnVGVzdCBleGNlcHRpb24nIFVTSU5HIEVSUkNPREUgPSAnQUIwMDEnOwor RU5EOworJCQKK0xBTkdVQUdFIHBscGdzcWw7CisKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNU SU9OIGZ1bmMxKCkKK1JFVFVSTlMgdm9pZAorTEFOR1VBR0UgcGxwZ3NxbAorQVMgJCQKK0JF R0lOCisgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdiZWZvcmUgZl9leGNlcHRpb24nKTsK KyAgUEVSRk9STSBmX2V4Y2VwdGlvbigpOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgn YWZ0ZXIgZl9leGNlcHRpb24nKTsKK0VORDsKKyQkOworCitDUkVBVEUgT1IgUkVQTEFDRSBQ Uk9DRURVUkUgcHJvYygpCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorQkVHSU4KKyAgSU5T RVJUIElOVE8gdGJsIFZBTFVFUyAoJ3Byb2MgYmVmb3JlIHJvbGxiYWNrJyk7CisgIFJPTExC QUNLOworICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgncHJvYyBhZnRlciByb2xsYmFjaycp OworRU5EOworJCQ7CisKKworQ1JFQVRFICBPUiBSRVBMQUNFIEZVTkNUSU9OIG1haW4oKQor UkVUVVJOUyB2b2lkCitMQU5HVUFHRSBwbHBnc3FsCitBUyAkJAorREVDTEFSRQorICBQUkFH TUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKK0JFR0lOCisgIElOU0VSVCBJTlRPIHRibCBW QUxVRVMgKCdtYWluIHN0YXJ0Jyk7CisgIFNUQVJUIFRSQU5TQUNUSU9OOworICAgIElOU0VS VCBJTlRPIHRibCBWQUxVRVMgKCd0cmFucyAxIGluIHN0YXJ0Jyk7CisKKyAgICBERUNMQVJF CisgICAgICBQUkFHTUEgQVVUT05PTU9VU19UUkFOU0FDVElPTjsKKyAgICBCRUdJTgorICAg ICAgU1RBUlQgVFJBTlNBQ1RJT047CisgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMg KCd0cmFucyAyIGluIHN0YXJ0Jyk7CisKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICBJTlNF UlQgSU5UTyB0YmwgVkFMVUVTICgnZW1wdHkgMSBiZWdpbicpOworCisgICAgICAgICAgQkVH SU4KKyAgICAgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxVRVMgKCdleGMgYmVnaW4nKTsK KworICAgICAgICAgICAgREVDTEFSRQorICAgICAgICAgICAgICBQUkFHTUEgQVVUT05PTU9V U19UUkFOU0FDVElPTjsKKyAgICAgICAgICAgIEJFR0lOCisgICAgICAgICAgICAgIElOU0VS VCBJTlRPIHRibCBWQUxVRVMgKCdiZWZvcmUgZnVuYzEnKTsKKyAgICAgICAgICAgICAgUEVS Rk9STSBmdW5jMSgpOworICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgn YWZ0ZXIgZnVuYzEnKTsKKyAgICAgICAgICAgIEVORDsKKworICAgICAgICAgIEVYQ0VQVElP TgorICAgICAgICAgICAgV0hFTiBPVEhFUlMgVEhFTgorICAgICAgICAgICAgICBJRiBTUUxT VEFURSA9ICdBQjAwMScgVEhFTgorICAgICAgICAgICAgICAgIFJBSVNFIE5PVElDRSAnQ2F1 Z2h0IGN1c3RvbSBleGNlcHRpb24gd2l0aCBTUUxTVEFURSBBQjAwMS4nOworICAgICAgICAg ICAgICBFTFNFCisgICAgICAgICAgICAgICAgUkFJU0UgTk9USUNFICdBbiBleGNlcHRpb24g b2NjdXJyZWQ6ICUnLCBTUUxFUlJNOworICAgICAgICAgICAgICBFTkQgSUY7CisgICAgICAg ICAgICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgnZXhjIGJlZm9yZSBwcm9jJyk7CisgICAg ICAgICAgICBDQUxMIHByb2MoKTsKKyAgICAgICAgICAgIElOU0VSVCBJTlRPIHRibCBWQUxV RVMgKCdleGMgYWZ0ZXIgcHJvYycpOworICAgICAgICAgICAgSU5TRVJUIElOVE8gdGJsIFZB TFVFUyAoJ2V4YyBlbmQnKTsKKyAgICAgICAgICBFTkQ7CisKKyAgICAgICAgSU5TRVJUIElO VE8gdGJsIFZBTFVFUyAoJ2VtcHR5IDEgZW5kJyk7CisgICAgICAgIEVORDsKKworICAgICAg ICBJTlNFUlQgSU5UTyB0YmwgVkFMVUVTICgndHJhbnMgMiBpbiByb2xsYmFjaycpOworICAg ICAgUk9MTEJBQ0s7CisgICAgRU5EOworCisgICAgSU5TRVJUIElOVE8gdGJsIFZBTFVFUyAo J3RyYW5zIDEgaW4gY29tbWl0Jyk7CisgIENPTU1JVDsKKworICBJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTICgnbWFpbiBlbmQnKTsKK0VORDsKKyQkOworCitTRUxFQ1QgbWFpbigpOworU0VM RUNUICogRlJPTSB0Ymw7CisKK0RST1AgRlVOQ1RJT04gZnVuYzE7CitEUk9QIEZVTkNUSU9O IG1haW47CitEUk9QIEZVTkNUSU9OIGZfZXhjZXB0aW9uOworRFJPUCBUQUJMRSB0Ymw7CisK LS0gCjIuMzQuMQoK --------------5WLkzr69GyTCAtJtWRFLAKYh--