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 1tGEiB-001hJ6-Ij for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Nov 2024 09:51:56 +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 1tGEiA-00DVau-9K for pgsql-hackers@arkaria.postgresql.org; Wed, 27 Nov 2024 09:51:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tGEgz-00DRhX-BT for pgsql-hackers@lists.postgresql.org; Wed, 27 Nov 2024 09:50:41 +0000 Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tGEgw-00484l-F7 for pgsql-hackers@postgresql.org; Wed, 27 Nov 2024 09:50:39 +0000 Received: by mail-yb1-xb2b.google.com with SMTP id 3f1490d57ef6-e3882273bc8so5954052276.1 for ; Wed, 27 Nov 2024 01:50:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datadoghq.com; s=google; t=1732701037; x=1733305837; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=3i7AkaCq0o99aGybIRPV5ZkS0qvYP+SsURtbPShNAmU=; b=EhNzk9NnHaR5rnSbo2asMt6SOOHcvRFER33fho5/AnC6qiSlLuc6sav52NjSYd0C7I eXbIC0NKqgNntXRogmIhjxSQeZv65oBHxO+EkrZk70yLmYVUjGBBoS3TjjRCs4KfrH8S MNRNlZhOqMwWrJyCqcBgFQgn/1qkBhdfy+WN0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732701037; x=1733305837; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3i7AkaCq0o99aGybIRPV5ZkS0qvYP+SsURtbPShNAmU=; b=HU32KM9L6/cRnAULsa4R0Yc9QJrDK5msS0TXGwfWP45MMpbbBfy48PcwWC+qireNTg QSyjnMc+5fDY+oSir/DvXsivpScOdEH/Dr0d7m+WlQjEjyediP+Y6JCqgf2i8qnhnjGG m3CN2iUF5tcXq8bpljiwLEDTagk/QAl13ehcC/qv94nmSs94ieCXQTSn/sGa3ZulMLwx HvxH3+bS2JIMmcZpf/c4xeGmtxnAw0utb13kDbEryINHn1P6Yz5hZ6Kczaab3enltTUa MkI12P13aGc9pWk+iulrNxwHzkmSYAFqendg+IcKjiXPrRAKjCVvybZjKe3SeWzQUUu0 cNwQ== X-Gm-Message-State: AOJu0YxB7B1C+/YcHrYzsDNchoT+DVLv6y33bqGAiZR/sNjPuvqj9Lku +Hgz7ECqLNUSap09ZFkfcYxrbO6aqXVxtfIowcqADiZUtME/Yr7rnBicN0TWU4AfNH335K+Z3FR GCg2GnqxIVaE02C0fUE2n323pSr0K6PwcshRaPDPSvrOjiBonPHA= X-Gm-Gg: ASbGnctWlTV7u3XBqwoB4k9XAnc5df3n6jC1oHNg3XxLT6qgc0R7pq6ttfBrfoL84aV SJ6lH/GnD3dNmPHiXPrnMLRUKs4i2nfw= X-Google-Smtp-Source: AGHT+IElXdj6zYa0hEtNdEV1XxAyHXrM42TVXJ9jd3vR8pwxIFyXGdBp2MHoXoioXsxiHpYtIaIhSCAsvnQ6dmnZQpY= X-Received: by 2002:a05:6902:1004:b0:e38:ea81:d01e with SMTP id 3f1490d57ef6-e395b86a0a2mr1662653276.8.1732701036956; Wed, 27 Nov 2024 01:50:36 -0800 (PST) MIME-Version: 1.0 From: Anthonin Bonnefoy Date: Wed, 27 Nov 2024 10:50:25 +0100 Message-ID: Subject: Add Pipelining support in psql To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d038300627e1e501" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d038300627e1e501 Content-Type: text/plain; charset="UTF-8" Hi, With \bind, \parse, \bind_named and \close, it is possible to issue queries from psql using the extended protocol. However, it wasn't possible to send those queries using pipelining and the only way to test pipelined queries was through pgbench's tap tests. The attached patch adds pipelining support to psql with 3 new meta-commands, mirroring what's already done in pgbench: - \startpipeline starts a new pipeline. All extended queries will be queued until the end of the pipeline is reached. - \endpipeline ends an ongoing pipeline. All queued commands will be sent to the server and all responses will be processed by the psql. - \syncpipeline queue a synchronisation point without flushing the commands to the server Those meta-commands will allow testing pipelined query behaviour using psql regression tests. Regards, Anthonin --000000000000d038300627e1e501 Content-Type: application/octet-stream; name="v01-0001-Add-pipelining-support-in-psql.patch" Content-Disposition: attachment; filename="v01-0001-Add-pipelining-support-in-psql.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3zpf3jr0 RnJvbSBkOTcyZWZjMWU2MjllZGM1MDQ5NWNiZTAyM2U5MDE0M2UzZjlmMTgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogVHVlLCA1IE5vdiAyMDI0IDEwOjI2OjU0ICswMTAwClN1Ympl Y3Q6IEFkZCBwaXBlbGluaW5nIHN1cHBvcnQgaW4gcHNxbAoKV2l0aCBcYmluZCwgXHBhcnNlLCBc YmluZF9uYW1lZCBhbmQgXGNsb3NlLCBpdCBpcyBwb3NzaWJsZSB0byBpc3N1ZQpxdWVyaWVzIGZy b20gcHNxbCB1c2luZyB0aGUgZXh0ZW5kZWQgcHJvdG9jb2wuIEhvd2V2ZXIsIGl0IHdhc24ndApw b3NzaWJsZSB0byBzZW5kIHRob3NlIHF1ZXJpZXMgdXNpbmcgcGlwZWxpbmluZyBhbmQgdGhlIG9u bHkgd2F5IHRvIHRlc3QKcGlwZWxpbmVkIHF1ZXJpZXMgd2FzIHRocm91Z2ggcGdiZW5jaCdzIHRh cCB0ZXN0cy4KClRoaXMgcGF0Y2ggYWRkcyBhZGRpdGlvbmFsIHBzcWwgbWV0YS1jb21tYW5kcyB0 byBzdXBwb3J0IHBpcGVsaW5pbmc6ClxzdGFydHBpcGVsaW5lLCBcZW5kcGlwZWxpbmUgYW5kIFxz eW5jcGlwZWxpbmUsIG1pcnJvcmluZyB0aGUgZXhpc3RpbmcKbWV0YS1jb21tYW5kcyBpbiBwZ2Jl bmNoLgoKXHN0YXJ0cGlwZWxpbmUgc3RhcnRzIGEgbmV3IHBpcGVsaW5lLiBBbGwgZXh0ZW5kZWQg cXVlcmllcyB3aWxsIGJlCnF1ZXVlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwaXBlbGluZSBpcyBy ZWFjaGVkLgpcZW5kcGlwZWxpbmUgZW5kcyBhbiBvbmdvaW5nIHBpcGVsaW5lLiBBbGwgcXVldWVk IGNvbW1hbmRzIHdpbGwgYmUgc2VudAp0byB0aGUgc2VydmVyIGFuZCBhbGwgcmVzcG9uc2VzIHdp bGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBwc3FsLgpcc3luY3BpcGVsaW5lIHF1ZXVlIGEgc3luY2hy b25pc2F0aW9uIHBvaW50IHdpdGhvdXQgZmx1c2hpbmcgdGhlCmNvbW1hbmRzIHRvIHRoZSBzZXJ2 ZXIKClRob3NlIG1ldGEtY29tbWFuZHMgd2lsbCBhbGxvdyB0byB0ZXN0IHBpcGVsaW5lIGJlaGF2 aW91ciB1c2luZwpwc3FsIHJlZ3Jlc3Npb24gdGVzdHMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sICAgICB8ICA1OSArKysrKwogc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyAgICAg ICAgICAgICB8ICA3NyArKysrKysrCiBzcmMvYmluL3BzcWwvY29tbW9uLmMgICAgICAgICAgICAg IHwgIDk4ICsrKysrKysrLQogc3JjL2Jpbi9wc3FsL2hlbHAuYyAgICAgICAgICAgICAgICB8ICAg MyArCiBzcmMvYmluL3BzcWwvc2V0dGluZ3MuaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iaW4v cHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgfCAgIDQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgfCAzMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsICAgICAgfCAyMDkgKysrKysrKysrKysrKysrKysrCiA4 IGZpbGVzIGNoYW5nZWQsIDc4NSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYv cHNxbC1yZWYuc2dtbAppbmRleCBlNDIwNzNlZDc0OC4uZWQxNjZmNzU3YTYgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3Bz cWwtcmVmLnNnbWwKQEAgLTM1NjIsNiArMzU2Miw2NSBAQCB0ZXN0ZGI9Jmd0OyA8dXNlcmlucHV0 PlxzZXRlbnYgTEVTUyAtaW14NEY8L3VzZXJpbnB1dD4KICAgICAgICAgPC9saXN0aXRlbT4KICAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFwcC1wc3FsLW1l dGEtY29tbWFuZC1waXBlbGluZSI+CisgICAgICA8dGVybT48bGl0ZXJhbD5cc3RhcnRwaXBlbGlu ZTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICA8dGVybT48bGl0ZXJhbD5cc3luY3BpcGVsaW5lPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPlxlbmRwaXBlbGluZTwvbGl0ZXJh bD48L3Rlcm0+CisKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAg VGhpcyBncm91cCBvZiBjb21tYW5kcyBpbXBsZW1lbnRzIHBpcGVsaW5pbmcgb2YgU1FMIHN0YXRl bWVudHMuCisgICAgICAgICAgQSBwaXBlbGluZSBtdXN0IGJlZ2luIHdpdGggYSA8Y29tbWFuZD5c c3RhcnRwaXBlbGluZTwvY29tbWFuZD4KKyAgICAgICAgICBhbmQgZW5kIHdpdGggYW4gPGNvbW1h bmQ+XGVuZHBpcGVsaW5lPC9jb21tYW5kPi4gSW4gYmV0d2VlbiB0aGVyZQorICAgICAgICAgIG1h eSBiZSBhbnkgbnVtYmVyIG9mIDxjb21tYW5kPlxzeW5jcGlwZWxpbmU8L2NvbW1hbmQ+IGNvbW1h bmRzLAorICAgICAgICAgIHdoaWNoIHNlbmRzIGEgPGxpbmsgbGlua2VuZD0icHJvdG9jb2wtZmxv dy1leHQtcXVlcnkiPnN5bmMgbWVzc2FnZTwvbGluaz4KKyAgICAgICAgICB3aXRob3V0IGVuZGlu ZyB0aGUgb25nb2luZyBwaXBlbGluZSBhbmQgZmx1c2hpbmcgdGhlIHNlbmQgYnVmZmVyLgorICAg ICAgICAgIEluIHBpcGVsaW5lIG1vZGUsIHN0YXRlbWVudHMgYXJlIHNlbnQgdG8gdGhlIHNlcnZl ciB3aXRob3V0IHdhaXRpbmcKKyAgICAgICAgICBmb3IgdGhlIHJlc3VsdHMgb2YgcHJldmlvdXMg c3RhdGVtZW50cy4gIFNlZQorICAgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLXBpcGVsaW5l LW1vZGUiLz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBh cmE+CisgICAgICAgICAgUGlwZWxpbmUgbW9kZSByZXF1aXJlcyB0aGUgdXNlIG9mIGV4dGVuZGVk IHF1ZXJ5IHByb3RvY29sLiBBbGwgcXVlcmllcyBuZWVkCisgICAgICAgICAgdG8gYmUgc2VudCB1 c2luZyB0aGUgbWV0YS1jb21tYW5kcyA8bGl0ZXJhbD5cYmluZDwvbGl0ZXJhbD4sCisgICAgICAg ICAgPGxpdGVyYWw+XGJpbmRfbmFtZWQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5cY2xvc2U8L2xpdGVy YWw+IG9yCisgICAgICAgICAgPGxpdGVyYWw+XHBhcnNlPC9saXRlcmFsPi4gV2hpbGUgYSBwaXBl bGluZSBpcyBvbmdvaW5nLAorICAgICAgICAgIDxsaXRlcmFsPlxnPC9saXRlcmFsPiB3aWxsIGFw cGVuZCB0aGUgY3VycmVudCBxdWVyeSBidWZmZXIgdG8gdGhlIHBpcGVsaW5lIGFuZAorICAgICAg ICAgIG90aGVyIG1ldGEtY29tbWFuZHMgbGlrZSA8bGl0ZXJhbD5cZ3g8L2xpdGVyYWw+IG9yIDxs aXRlcmFsPlxnZGVzYzwvbGl0ZXJhbD4KKyAgICAgICAgICBhcmUgbm90IGFsbG93ZWQgaW4gcGlw ZWxpbmUgbW9kZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgPC9w YXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgIEV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+ Citcc3RhcnRwaXBlbGluZQorLS0gUGlwZSBhIFBhcnNlLCBCaW5kIGFuZCBFeGVjdXRlIG9mICJT RUxFQ1QgMSIKK1NFTEVDVCAxIFxiaW5kIFxnCistLSBQaXBlIGEgUGFyc2Ugb2YgIlNFTEVDVCAk MSIsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50ICdzdG10MScK K1NFTEVDVCAkMSBccGFyc2Ugc3RtdDEKKy0tIFBpcGUgYSBCaW5kIGFuZCBFeGVjdXRlIG9mIHRo ZSBwcmVwYXJlZCBzdGF0ZW1lbnQgJ3N0bXQxJyB3aXRoIHBhcmFtZXRlciAxCitcYmluZF9uYW1l ZCBzdG10MSAxIFxnCistLSBQaXBlIGEgUGFyc2UsIEJpbmQgYW5kIEV4ZWN1dGUgb2YgIlNFTEVD VCBwZ19jdXJyZW50X3hhY3RfaWQoKSIKK1NFTEVDVCBwZ19jdXJyZW50X3hhY3RfaWQoKSBcYmlu ZCBcZworLS0gUGlwZSBhIHN5bmNocm9uaXNhdGlvbiBwb2ludC4gVGhpcyB3aWxsIGNvbW1pdCB0 aGUgaW1wbGljaXQgdHJhbnNhY3Rpb24KKy0tIGJsb2NrIHN0YXJ0ZWQgYnkgdGhlIHBpcGVsaW5l Citcc3luY3BpcGVsaW5lCistLSBQaXBlIGEgUGFyc2UsIEJpbmQgYW5kIEV4ZWN1dGUgb2YgU0VM RUNUIHBnX2N1cnJlbnRfeGFjdF9pZCgpCistLSBUaGlzIHdpbGwgZGlzcGxheSBhIGRpZmZlcmVu dCB4aWQgYXMgYSBuZXcgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIHdhcyBzdGFydGVkIGFmdGVyIHRo ZSBzeW5jaHJvbmlzYXRpb24gcG9pbnQKK1NFTEVDVCBwZ19jdXJyZW50X3hhY3RfaWQoKSBcYmlu ZCBcZworLS0gUGlwZSBhIENsb3NlIG9mIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgJ3N0bXQxJwor XGNsb3NlIHN0bXQxCistLSBFbmQgdGhlIHBpcGVsaW5lLCBzZW5kaW5nIGFsbCBwaXBlZCBjb21t YW5kcyB0byB0aGUgc2VydmVyIGFuZCBwcm9jZXNzIHRoZSByZXN1bHRzCitcZW5kcGlwZWxpbmUK KzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKwogCiAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAtcHNxbC1tZXRhLWNv bW1hbmQtdC1sYyI+CiAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlx0PC9saXRlcmFsPjwvdGVybT4K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9zcmMvYmluL3BzcWwvY29tbWFu ZC5jCmluZGV4IDFmM2NiYjExZjdjLi4wNjczMjlkMjQxYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL2NvbW1hbmQuYworKysgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCkBAIC05MCw2ICs5MCw3 IEBAIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2Vsc2UoUHNxbFNjYW5TdGF0 ZSBzY2FuX3N0YXRlLCBDb25kaXRpb25hbFN0CiAJCQkJCQkJCQkJIFBRRXhwQnVmZmVyIHF1ZXJ5 X2J1Zik7CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF9lbmRpZihQc3FsU2Nh blN0YXRlIHNjYW5fc3RhdGUsIENvbmRpdGlvbmFsU3RhY2sgY3N0YWNrLAogCQkJCQkJCQkJCSAg UFFFeHBCdWZmZXIgcXVlcnlfYnVmKTsKK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21t YW5kX2VuZHBpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJh bmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX2VuY29kaW5nKFBzcWxT Y2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xh c2hSZXN1bHQgZXhlY19jb21tYW5kX2VycnZlcmJvc2UoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRl LCBib29sIGFjdGl2ZV9icmFuY2gpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1h bmRfZihQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7CkBAIC0x MzIsNiArMTMzLDggQEAgc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfc2V0ZW52 KFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmUKIAkJCQkJCQkJCQkgICBjb25z dCBjaGFyICpjbWQpOwogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfc2Zfc3Yo UHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsCiAJCQkJCQkJCQkJ ICBjb25zdCBjaGFyICpjbWQsIGJvb2wgaXNfZnVuYyk7CitzdGF0aWMgYmFja3NsYXNoUmVzdWx0 IGV4ZWNfY29tbWFuZF9zdGFydHBpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9v bCBhY3RpdmVfYnJhbmNoKTsKK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhlY19jb21tYW5kX3N5 bmNwaXBlbGluZShQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCk7 CiBzdGF0aWMgYmFja3NsYXNoUmVzdWx0IGV4ZWNfY29tbWFuZF90KFBzcWxTY2FuU3RhdGUgc2Nh bl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKIHN0YXRpYyBiYWNrc2xhc2hSZXN1bHQgZXhl Y19jb21tYW5kX1QoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gp Owogc3RhdGljIGJhY2tzbGFzaFJlc3VsdCBleGVjX2NvbW1hbmRfdGltaW5nKFBzcWxTY2FuU3Rh dGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoKTsKQEAgLTM1MSw2ICszNTQsOCBAQCBl eGVjX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLAogCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfZWxz ZShzY2FuX3N0YXRlLCBjc3RhY2ssIHF1ZXJ5X2J1Zik7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwg ImVuZGlmIikgPT0gMCkKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX2VuZGlmKHNjYW5fc3RhdGUs IGNzdGFjaywgcXVlcnlfYnVmKTsKKwllbHNlIGlmIChzdHJjbXAoY21kLCAiZW5kcGlwZWxpbmUi KSA9PSAwKQorCQlzdGF0dXMgPSBleGVjX2NvbW1hbmRfZW5kcGlwZWxpbmUoc2Nhbl9zdGF0ZSwg YWN0aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgImVuY29kaW5nIikgPT0gMCkK IAkJc3RhdHVzID0gZXhlY19jb21tYW5kX2VuY29kaW5nKHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFu Y2gpOwogCWVsc2UgaWYgKHN0cmNtcChjbWQsICJlcnJ2ZXJib3NlIikgPT0gMCkKQEAgLTQwOCw2 ICs0MTMsMTAgQEAgZXhlY19jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKIAkJc3RhdHVzID0gZXhl Y19jb21tYW5kX3NmX3N2KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFuY2gsIGNtZCwgdHJ1ZSk7CiAJ ZWxzZSBpZiAoc3RyY21wKGNtZCwgInN2IikgPT0gMCB8fCBzdHJjbXAoY21kLCAic3YrIikgPT0g MCkKIAkJc3RhdHVzID0gZXhlY19jb21tYW5kX3NmX3N2KHNjYW5fc3RhdGUsIGFjdGl2ZV9icmFu Y2gsIGNtZCwgZmFsc2UpOworCWVsc2UgaWYgKHN0cmNtcChjbWQsICJzdGFydHBpcGVsaW5lIikg PT0gMCkKKwkJc3RhdHVzID0gZXhlY19jb21tYW5kX3N0YXJ0cGlwZWxpbmUoc2Nhbl9zdGF0ZSwg YWN0aXZlX2JyYW5jaCk7CisJZWxzZSBpZiAoc3RyY21wKGNtZCwgInN5bmNwaXBlbGluZSIpID09 IDApCisJCXN0YXR1cyA9IGV4ZWNfY29tbWFuZF9zeW5jcGlwZWxpbmUoc2Nhbl9zdGF0ZSwgYWN0 aXZlX2JyYW5jaCk7CiAJZWxzZSBpZiAoc3RyY21wKGNtZCwgInQiKSA9PSAwKQogCQlzdGF0dXMg PSBleGVjX2NvbW1hbmRfdChzY2FuX3N0YXRlLCBhY3RpdmVfYnJhbmNoKTsKIAllbHNlIGlmIChz dHJjbXAoY21kLCAiVCIpID09IDApCkBAIC0xNTI2LDYgKzE1MzUsMTMgQEAgZXhlY19jb21tYW5k X2coUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsIGNvbnN0IGNo YXIgKmNtZCkKIAogCWlmIChzdGF0dXMgPT0gUFNRTF9DTURfU0tJUF9MSU5FICYmIGFjdGl2ZV9i cmFuY2gpCiAJeworCQlpZiAoc3RyY21wKGNtZCwgImd4IikgPT0gMCAmJiBQUXBpcGVsaW5lU3Rh dHVzKHBzZXQuZGIpID09IFBRX1BJUEVMSU5FX09OKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIlxc Z3ggbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZSIpOworCQkJY2xlYW5fZXh0ZW5kZWRfc3Rh dGUoKTsKKwkJCXJldHVybiBQU1FMX0NNRF9FUlJPUjsKKwkJfQorCiAJCWlmICghZm5hbWUpCiAJ CQlwc2V0LmdmbmFtZSA9IE5VTEw7CiAJCWVsc2UKQEAgLTE2ODksNiArMTcwNSwxMiBAQCBleGVj X2NvbW1hbmRfZ2V4ZWMoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0YXRlLCBib29sIGFjdGl2ZV9icmFu Y2gpCiAKIAlpZiAoYWN0aXZlX2JyYW5jaCkKIAl7CisJCWlmIChQUXBpcGVsaW5lU3RhdHVzKHBz ZXQuZGIpID09IFBRX1BJUEVMSU5FX09OKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIlxcZ2V4ZWMg bm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZSIpOworCQkJY2xlYW5fZXh0ZW5kZWRfc3RhdGUo KTsKKwkJCXJldHVybiBQU1FMX0NNRF9FUlJPUjsKKwkJfQogCQlwc2V0LmdleGVjX2ZsYWcgPSB0 cnVlOwogCQlzdGF0dXMgPSBQU1FMX0NNRF9TRU5EOwogCX0KQEAgLTE3MDksNiArMTczMSwxMyBA QCBleGVjX2NvbW1hbmRfZ3NldChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZl X2JyYW5jaCkKIAkJY2hhcgkgICAqcHJlZml4ID0gcHNxbF9zY2FuX3NsYXNoX29wdGlvbihzY2Fu X3N0YXRlLAogCQkJCQkJCQkJCQkJCU9UX05PUk1BTCwgTlVMTCwgZmFsc2UpOwogCisJCWlmIChQ UXBpcGVsaW5lU3RhdHVzKHBzZXQuZGIpID09IFBRX1BJUEVMSU5FX09OKQorCQl7CisJCQlwZ19s b2dfZXJyb3IoIlxcZ3NldCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlIik7CisJCQljbGVh bl9leHRlbmRlZF9zdGF0ZSgpOworCQkJcmV0dXJuIFBTUUxfQ01EX0VSUk9SOworCQl9CisKIAkJ aWYgKHByZWZpeCkKIAkJCXBzZXQuZ3NldF9wcmVmaXggPSBwcmVmaXg7CiAJCWVsc2UKQEAgLTI2 NzIsNiArMjcwMSw1NCBAQCBleGVjX2NvbW1hbmRfc2Zfc3YoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0 YXRlLCBib29sIGFjdGl2ZV9icmFuY2gsCiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoKKyAqIFxz dGFydHBpcGVsaW5lIC0tIGVudGVyIHBpcGVsaW5lIG1vZGUKKyAqLworc3RhdGljIGJhY2tzbGFz aFJlc3VsdAorZXhlY19jb21tYW5kX3N0YXJ0cGlwZWxpbmUoUHNxbFNjYW5TdGF0ZSBzY2FuX3N0 YXRlLCBib29sIGFjdGl2ZV9icmFuY2gpCit7CisJaWYgKGFjdGl2ZV9icmFuY2gpCisJeworCQlw c2V0LnNlbmRfbW9kZSA9IFBTUUxfU1RBUlRfUElQRUxJTkVfTU9ERTsKKwl9CisJZWxzZQorCQlp Z25vcmVfc2xhc2hfb3B0aW9ucyhzY2FuX3N0YXRlKTsKKworCXJldHVybiBQU1FMX0NNRF9TRU5E OworfQorCisvKgorICogXHN5bmNwaXBlbGluZSAtLSBzZW5kIGEgc3luYyBtZXNzYWdlIHRvIGFu IGFjdGl2ZSBwaXBlbGluZQorICovCitzdGF0aWMgYmFja3NsYXNoUmVzdWx0CitleGVjX2NvbW1h bmRfc3luY3BpcGVsaW5lKFBzcWxTY2FuU3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJh bmNoKQoreworCWlmIChhY3RpdmVfYnJhbmNoKQorCXsKKwkJcHNldC5zZW5kX21vZGUgPSBQU1FM X1NFTkRfUElQRUxJTkVfU1lOQzsKKwl9CisJZWxzZQorCQlpZ25vcmVfc2xhc2hfb3B0aW9ucyhz Y2FuX3N0YXRlKTsKKworCXJldHVybiBQU1FMX0NNRF9TRU5EOworfQorCisvKgorICogXGVuZHBp cGVsaW5lIC0tIGVuZCBwaXBlbGluZSBtb2RlCisgKi8KK3N0YXRpYyBiYWNrc2xhc2hSZXN1bHQK K2V4ZWNfY29tbWFuZF9lbmRwaXBlbGluZShQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wg YWN0aXZlX2JyYW5jaCkKK3sKKwlpZiAoYWN0aXZlX2JyYW5jaCkKKwl7CisJCXBzZXQuc2VuZF9t b2RlID0gUFNRTF9FTkRfUElQRUxJTkVfTU9ERTsKKwl9CisJZWxzZQorCQlpZ25vcmVfc2xhc2hf b3B0aW9ucyhzY2FuX3N0YXRlKTsKKworCXJldHVybiBQU1FMX0NNRF9TRU5EOworfQorCiAvKgog ICogXHQgLS0gdHVybiBvZmYgdGFibGUgaGVhZGVycyBhbmQgcm93IGNvdW50CiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tb24uYyBiL3NyYy9iaW4vcHNxbC9jb21tb24uYwppbmRl eCA4YTkyMTFkYjQxYS4uM2MwYWQ0ZGQ5Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21t b24uYworKysgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMKQEAgLTQxNSw2ICs0MTUsOCBAQCBBY2Nl cHRSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBzaG93X2Vycm9yKQogCQkJY2Fz ZSBQR1JFU19FTVBUWV9RVUVSWToKIAkJCWNhc2UgUEdSRVNfQ09QWV9JTjoKIAkJCWNhc2UgUEdS RVNfQ09QWV9PVVQ6CisJCQljYXNlIFBHUkVTX1BJUEVMSU5FX1NZTkM6CisJCQljYXNlIFBHUkVT X1BJUEVMSU5FX0FCT1JURUQ6CiAJCQkJLyogRmluZSwgZG8gbm90aGluZyAqLwogCQkJCU9LID0g dHJ1ZTsKIAkJCQlicmVhazsKQEAgLTE0MTgsNiArMTQyMCwyOCBAQCBEZXNjcmliZVF1ZXJ5KGNv bnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykKIAlyZXR1cm4gT0s7CiB9CiAK Ky8qCisgKiBSZWFkIGFuZCBkaXNjYXJkIGFsbCByZXN1bHRzIHVudGlsIGEgc3luY2hyb25pc2F0 aW9uIHBvaW50IGlzIGZvdW5kLgorICovCitzdGF0aWMgUEdyZXN1bHQgKgorZGlzY2FyZFVudGls U3luYyh2b2lkKQoreworCWZvciAoOzspCisJeworCQlQR3Jlc3VsdCAgICpyZXMgPSBQUWdldFJl c3VsdChwc2V0LmRiKTsKKwkJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0 U3RhdHVzKHJlcyk7CisKKwkJaWYgKHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNfUElQRUxJTkVfU1lO QykKKwkJCXJldHVybiByZXM7CisKKwkJLyoKKwkJICogQW4gYWJvcnRlZCBwaXBlbGluZSB3aWxs IGhhdmUgZWl0aGVyIE5VTEwgcmVzdWx0cyBvciByZXN1bHRzIGluIGFuCisJCSAqIFBHUkVTX1BJ UEVMSU5FX0FCT1JURUQgc3RhdHVzCisJCSAqLworCQlBc3NlcnQocmVzID09IE5VTEwgfHwgcmVz dWx0X3N0YXR1cyA9PSBQR1JFU19QSVBFTElORV9BQk9SVEVEKTsKKwkJUFFjbGVhcihyZXMpOwor CX0KK30KIAogLyoKICAqIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0 aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkKQEAgLTE0NTEsNiArMTQ3NSw3IEBAIEV4ZWNRdWVy eUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCWJvb2wJCXRpbWluZyA9IHBz ZXQudGltaW5nOwogCWJvb2wJCXN1Y2Nlc3MgPSBmYWxzZTsKIAlib29sCQlyZXR1cm5fZWFybHkg PSBmYWxzZTsKKwlib29sCQlwcm9jZXNzX3BpcGVsaW5lID0gZmFsc2U7CiAJaW5zdHJfdGltZQli ZWZvcmUsCiAJCQkJYWZ0ZXI7CiAJUEdyZXN1bHQgICAqcmVzdWx0OwpAQCAtMTQ4NCw2ICsxNTA5 LDIxIEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJ CQkJCQkJCSAgKGNvbnN0IGNoYXIgKmNvbnN0ICopIHBzZXQuYmluZF9wYXJhbXMsCiAJCQkJCQkJ CQkJICBOVUxMLCBOVUxMLCAwKTsKIAkJCWJyZWFrOworCQljYXNlIFBTUUxfU1RBUlRfUElQRUxJ TkVfTU9ERToKKwkJCXN1Y2Nlc3MgPSBQUWVudGVyUGlwZWxpbmVNb2RlKHBzZXQuZGIpOworCQkJ YnJlYWs7CisJCWNhc2UgUFNRTF9FTkRfUElQRUxJTkVfTU9ERToKKwkJCXN1Y2Nlc3MgPSBQUXBp cGVsaW5lU3luYyhwc2V0LmRiKTsKKwkJCS8qIEVuZCBvZiB0aGUgcGlwZWxpbmUsIGFsbCBxdWV1 ZWQgY29tbWFuZHMgbmVlZCB0byBiZSBwcm9jZXNzZWQgKi8KKwkJCXByb2Nlc3NfcGlwZWxpbmUg PSB0cnVlOworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJcHNldC5udW1fc3luY3MrKzsKKwkJCWJyZWFr OworCQljYXNlIFBTUUxfU0VORF9QSVBFTElORV9TWU5DOgorCQkJc3VjY2VzcyA9IFBRc2VuZFBp cGVsaW5lU3luYyhwc2V0LmRiKTsKKwkJCWlmIChzdWNjZXNzKQorCQkJCXBzZXQubnVtX3N5bmNz Kys7CisJCQlicmVhazsKIAkJY2FzZSBQU1FMX1NFTkRfUVVFUlk6CiAJCQlzdWNjZXNzID0gUFFz ZW5kUXVlcnkocHNldC5kYiwgcXVlcnkpOwogCQkJYnJlYWs7CkBAIC0xNTAxLDYgKzE1NDEsMTUg QEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksCiAJCXJldHVy biAtMTsKIAl9CiAKKwlpZiAoIXByb2Nlc3NfcGlwZWxpbmUgJiYgUFFwaXBlbGluZVN0YXR1cyhw c2V0LmRiKSA9PSBQUV9QSVBFTElORV9PTikKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGluIGEgcGlw ZWxpbmUgYW5kIGhhdmVuJ3QgcmVjZWl2ZWQgYSBwaXBlbGluZSBlbmQgc28gdGhlcmUncworCQkg KiBubyByZXN1bHQgdG8gcHJvY2VzcyB5ZXQuCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKIAkv KgogCSAqIEZldGNoIHRoZSByZXN1bHQgaW4gY2h1bmtzIGlmIEZFVENIX0NPVU5UIGlzIHNldCwg ZXhjZXB0IHdoZW46CiAJICoKQEAgLTE1ODUsNiArMTYzNCwxNSBAQCBFeGVjUXVlcnlBbmRQcm9j ZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCQkgKiBpZ25vcmUgbWFudWFsbHkuCiAJ CQkJICovCiAJCQkJcmVzdWx0ID0gTlVMTDsKKwkJCWVsc2UgaWYgKHByb2Nlc3NfcGlwZWxpbmUp CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGFuIGVycm9yIHdpdGhpbiBhIHBpcGVsaW5l LiBBbGwgY29tbWFuZHMgYXJlCisJCQkJICogYWJvcnRlZCB1bnRpbCB0aGUgbmV4dCBzeW5jaHJv bmlzYXRpb24gcG9pbnQuIFdlIG5lZWQgdG8KKwkJCQkgKiBjb25zdW1lIGFsbCByZXN1bHRzIHVu dGlsIHRoaXMgc3luY2hyb25pc2F0aW9uIHBvaW50LgorCQkJCSAqLworCQkJCXJlc3VsdCA9IGRp c2NhcmRVbnRpbFN5bmMoKTsKKwkJCX0KIAkJCWVsc2UKIAkJCQlyZXN1bHQgPSBQUWdldFJlc3Vs dChwc2V0LmRiKTsKIApAQCAtMTc3MSwxMiArMTgyOSwzOCBAQCBFeGVjUXVlcnlBbmRQcm9jZXNz UmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwKIAkJCX0KIAkJfQogCisJCWlmIChyZXN1bHRfc3Rh dHVzID09IFBHUkVTX1BJUEVMSU5FX1NZTkMpCisJCXsKKwkJCS8qIFdlIGhhdmUgYSBzeW5jIHJl c3BvbnNlLCBkZWNyZWFzZSB0aGUgc3luYyBjb3VudGVyICovCisJCQlwc2V0Lm51bV9zeW5jcy0t OworCisJCQkvKgorCQkJICogQWZ0ZXIgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQsIHJlc2V0IHN1 Y2Nlc3Mgc3RhdGUgdG8gcHJpbnQKKwkJCSAqIHBvc3NpYmxlIHN1Y2Nlc3NmdWwgcmVzdWx0cwor CQkJICovCisJCQlzdWNjZXNzID0gdHJ1ZTsKKwkJCS8qIElmIGFsbCBzeW5jcyB3ZXJlIHByb2Nl c3NlZCwgZXhpdCBwaXBlbGluZSBtb2RlICovCisJCQlpZiAocHNldC5udW1fc3luY3MgPD0gMCkK KwkJCQlzdWNjZXNzICY9IFBRZXhpdFBpcGVsaW5lTW9kZShwc2V0LmRiKTsKKwkJfQorCiAJCS8q CiAJCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkgYWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9m IGEgc2luZ2xlLWNvbW1hbmQKIAkJICogc3RyaW5nLCBpdCB3aWxsIHJldHVybiBOVUxMLiAgT3Ro ZXJ3aXNlLCB3ZSdsbCBoYXZlIG90aGVyIHJlc3VsdHMKIAkJICogdG8gcHJvY2Vzcy4gIFdlIG5l ZWQgdG8gZG8gdGhhdCB0byBjaGVjayB3aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QuCiAJCSAqLwog CQluZXh0X3Jlc3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOworCQlpZiAocHJvY2Vzc19waXBl bGluZSAmJiByZXN1bHRfc3RhdHVzICE9IFBHUkVTX1BJUEVMSU5FX1NZTkMpCisJCXsKKwkJCS8q CisJCQkgKiBJbiBwaXBlbGluZSBtb2RlLCBhIE5VTEwgcmVzdWx0IGluZGljYXRlcyB0aGUgZW5k IG9mIHRoZQorCQkJICogY3VycmVudCBxdWVyeSBiZWluZyBwcm9jZXNzZWQuIFdlIG5lZWQgdG8g Y2FsbCBQUWdldFJlc3VsdCBhCisJCQkgKiBzZWNvbmQgdGltZSB0byBtb3ZlIHRvIHRoZSBuZXh0 IHJlc3BvbnNlLgorCQkJICovCisJCQlBc3NlcnQobmV4dF9yZXN1bHQgPT0gTlVMTCk7CisJCQlu ZXh0X3Jlc3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOworCQl9CisKIAkJbGFzdCA9IChuZXh0 X3Jlc3VsdCA9PSBOVUxMKTsKIAogCQkvKgpAQCAtMTc5OCw4ICsxODgyLDEyIEBAIEV4ZWNRdWVy eUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJKmVsYXBzZWRfbXNlYyA9 IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGFmdGVyKTsKIAkJfQogCi0JCS8qIHRoaXMgbWF5IG9y IG1heSBub3QgcHJpbnQgc29tZXRoaW5nIGRlcGVuZGluZyBvbiBzZXR0aW5ncyAqLwotCQlpZiAo cmVzdWx0ICE9IE5VTEwpCisJCS8qCisJCSAqIFRoaXMgbWF5IG9yIG1heSBub3QgcHJpbnQgc29t ZXRoaW5nIGRlcGVuZGluZyBvbiBzZXR0aW5ncy4gQQorCQkgKiBwaXBlbGluZSBzeW5jIHdpbGwg aGF2ZSBhIG5vbiBudWxsIHJlc3VsdCBidXQgZG9lc24ndCBoYXZlIGFueXRoaW5nCisJCSAqIHRv IHByaW50LCB0aHVzIHdlIGlnbm9yZSB0aGVtCisJCSAqLworCQlpZiAocmVzdWx0ICE9IE5VTEwg JiYgcmVzdWx0X3N0YXR1cyAhPSBQR1JFU19QSVBFTElORV9TWU5DKQogCQl7CiAJCQkvKgogCQkJ ICogSWYgcmVzdWx0cyBuZWVkIHRvIGJlIHByaW50ZWQgaW50byB0aGUgZmlsZSBzcGVjaWZpZWQg YnkgXGcsCkBAIC0xODM3LDYgKzE5MjUsOSBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhj b25zdCBjaGFyICpxdWVyeSwKIAkvKiBjbG9zZSBcZyBmaWxlIGlmIHdlIG9wZW5lZCBpdCAqLwog CUNsb3NlR091dHB1dChnZmlsZV9mb3V0LCBnZmlsZV9pc19waXBlKTsKIAorCS8qIEFmdGVyIHF1 ZXJ5IHByb2Nlc3MsIHBpcGVsaW5lIG51bV9zeW5jcyBzaG91bGQgYmUgMCAqLworCUFzc2VydChw c2V0Lm51bV9zeW5jcyA9PSAwKTsKKwogCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9t IGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLwogCWlmICghQ2hlY2tDb25uZWN0aW9uKCkpCiAJCXJl dHVybiAtMTsKQEAgLTIyOTYsNiArMjM4Nyw5IEBAIGNsZWFuX2V4dGVuZGVkX3N0YXRlKHZvaWQp CiAJCQlmcmVlKHBzZXQuc3RtdE5hbWUpOwogCQkJcHNldC5iaW5kX3BhcmFtcyA9IE5VTEw7CiAJ CQlicmVhazsKKwkJY2FzZSBQU1FMX1NUQVJUX1BJUEVMSU5FX01PREU6CS8qIFxzdGFydHBpcGVs aW5lICovCisJCWNhc2UgUFNRTF9FTkRfUElQRUxJTkVfTU9ERToJLyogXGVuZHBpcGVsaW5lICov CisJCWNhc2UgUFNRTF9TRU5EX1BJUEVMSU5FX1NZTkM6CS8qIFxzeW5jcGlwZWxpbmUgKi8KIAkJ Y2FzZSBQU1FMX1NFTkRfUVVFUlk6CiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwppbmRleCAzZjRhZmMyZDE0MS4uZTU1 MGEyOTI5N2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9w c3FsL2hlbHAuYwpAQCAtMTY3LDYgKzE2Nyw3IEBAIHNsYXNoVXNhZ2UodW5zaWduZWQgc2hvcnQg aW50IHBhZ2VyKQogCUhFTFAwKCIgIFxcY2xvc2UgU1RNVF9OQU1FICAgICAgIGNsb3NlIGFuIGV4 aXN0aW5nIHByZXBhcmVkIHN0YXRlbWVudFxuIik7CiAJSEVMUDAoIiAgXFxjb3B5cmlnaHQgICAg ICAgICAgICAgc2hvdyBQb3N0Z3JlU1FMIHVzYWdlIGFuZCBkaXN0cmlidXRpb24gdGVybXNcbiIp OwogCUhFTFAwKCIgIFxcY3Jvc3N0YWJ2aWV3IFtDT0xVTU5TXSBleGVjdXRlIHF1ZXJ5IGFuZCBk aXNwbGF5IHJlc3VsdCBpbiBjcm9zc3RhYlxuIik7CisJSEVMUDAoIiAgXFxlbmRwaXBlbGluZSAg ICAgICAgICAgZXhpdCBwaXBlbGluZSBtb2RlXG4iKTsKIAlIRUxQMCgiICBcXGVycnZlcmJvc2Ug ICAgICAgICAgICBzaG93IG1vc3QgcmVjZW50IGVycm9yIG1lc3NhZ2UgYXQgbWF4aW11bSB2ZXJi b3NpdHlcbiIpOwogCUhFTFAwKCIgIFxcZyBbKE9QVElPTlMpXSBbRklMRV0gIGV4ZWN1dGUgcXVl cnkgKGFuZCBzZW5kIHJlc3VsdCB0byBmaWxlIG9yIHxwaXBlKTtcbiIKIAkJICAiICAgICAgICAg ICAgICAgICAgICAgICAgIFxcZyB3aXRoIG5vIGFyZ3VtZW50cyBpcyBlcXVpdmFsZW50IHRvIGEg c2VtaWNvbG9uXG4iKTsKQEAgLTE3Niw2ICsxNzcsOCBAQCBzbGFzaFVzYWdlKHVuc2lnbmVkIHNo b3J0IGludCBwYWdlcikKIAlIRUxQMCgiICBcXGd4IFsoT1BUSU9OUyldIFtGSUxFXSBhcyBcXGcs IGJ1dCBmb3JjZXMgZXhwYW5kZWQgb3V0cHV0IG1vZGVcbiIpOwogCUhFTFAwKCIgIFxccGFyc2Ug U1RNVF9OQU1FICAgICAgIGNyZWF0ZSBhIHByZXBhcmVkIHN0YXRlbWVudFxuIik7CiAJSEVMUDAo IiAgXFxxICAgICAgICAgICAgICAgICAgICAgcXVpdCBwc3FsXG4iKTsKKwlIRUxQMCgiICBcXHN0 YXJ0cGlwZWxpbmUgICAgICAgICBlbnRlciBwaXBlbGluZSBtb2RlXG4iKTsKKwlIRUxQMCgiICBc XHN5bmNwaXBlbGluZSAgICAgICAgICBhZGQgYSBzeW5jaHJvbmlzYXRpb24gcG9pbnQgdG8gYW4g b25nb2luZyBwaXBlbGluZVxuIik7CiAJSEVMUDAoIiAgXFx3YXRjaCBbW2k9XVNFQ10gW2M9Tl0g W209TUlOXVxuIgogCQkgICIgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSBxdWVyeSBl dmVyeSBTRUMgc2Vjb25kcywgdXAgdG8gTiB0aW1lcyxcbiIKIAkJICAiICAgICAgICAgICAgICAg ICAgICAgICAgIHN0b3AgaWYgbGVzcyB0aGFuIE1JTiByb3dzIGFyZSByZXR1cm5lZFxuIik7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaCBiL3NyYy9iaW4vcHNxbC9zZXR0aW5n cy5oCmluZGV4IGEyMmRlOGVmNzhlLi41NTI0N2M0ZGMzMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w c3FsL3NldHRpbmdzLmgKKysrIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgKQEAgLTY5LDYgKzY5 LDkgQEAgdHlwZWRlZiBlbnVtCiAJUFNRTF9TRU5EX0VYVEVOREVEX1BBUlNFLAogCVBTUUxfU0VO RF9FWFRFTkRFRF9RVUVSWV9QQVJBTVMsCiAJUFNRTF9TRU5EX0VYVEVOREVEX1FVRVJZX1BSRVBB UkVELAorCVBTUUxfU0VORF9QSVBFTElORV9TWU5DLAorCVBTUUxfU1RBUlRfUElQRUxJTkVfTU9E RSwKKwlQU1FMX0VORF9QSVBFTElORV9NT0RFLAogfSBQU1FMX1NFTkRfTU9ERTsKIAogdHlwZWRl ZiBlbnVtCkBAIC0xMDgsNiArMTExLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX3BzcWxTZXR0aW5ncwog CVBTUUxfU0VORF9NT0RFIHNlbmRfbW9kZTsJLyogb25lLXNob3QgcmVxdWVzdCB0byBzZW5kIHF1 ZXJ5IHdpdGggbm9ybWFsCiAJCQkJCQkJCSAqIG9yIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sICov CiAJaW50CQkJYmluZF9ucGFyYW1zOwkvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLworCWludAkJ CW51bV9zeW5jczsJCS8qIG51bWJlciBvZiBvbmdvaW5nIHN5bmNzICovCiAJY2hhcgkgICoqYmlu ZF9wYXJhbXM7CS8qIHBhcmFtZXRlcnMgZm9yIGV4dGVuZGVkIHF1ZXJ5IHByb3RvY29sIGNhbGwg Ki8KIAljaGFyCSAgICpzdG10TmFtZTsJCS8qIHByZXBhcmVkIHN0YXRlbWVudCBuYW1lIHVzZWQg Zm9yIGV4dGVuZGVkCiAJCQkJCQkJCSAqIHF1ZXJ5IHByb3RvY29sIGNvbW1hbmRzICovCmRpZmYg LS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgYi9zcmMvYmluL3BzcWwvdGFi LWNvbXBsZXRlLmluLmMKaW5kZXggZmFkMjI3Nzk5MWQuLjc0MmQyNjI3YWZjIDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5pbi5jCkBAIC0xODY3LDcgKzE4NjcsNyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3Qg Y2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQkiXFxkcmRzIiwgIlxcZHJnIiwgIlxc ZFJzIiwgIlxcZFJwIiwgIlxcZHMiLAogCQkiXFxkdCIsICJcXGRUIiwgIlxcZHYiLCAiXFxkdSIs ICJcXGR4IiwgIlxcZFgiLCAiXFxkeSIsCiAJCSJcXGVjaG8iLCAiXFxlZGl0IiwgIlxcZWYiLCAi XFxlbGlmIiwgIlxcZWxzZSIsICJcXGVuY29kaW5nIiwKLQkJIlxcZW5kaWYiLCAiXFxlcnJ2ZXJi b3NlIiwgIlxcZXYiLAorCQkiXFxlbmRpZiIsICJcXGVuZHBpcGVsaW5lIiwgIlxcZXJydmVyYm9z ZSIsICJcXGV2IiwKIAkJIlxcZiIsCiAJCSJcXGciLCAiXFxnZGVzYyIsICJcXGdldGVudiIsICJc XGdleGVjIiwgIlxcZ3NldCIsICJcXGd4IiwKIAkJIlxcaGVscCIsICJcXGh0bWwiLApAQCAtMTg3 Nyw3ICsxODc3LDcgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFy dCwgaW50IGVuZCkKIAkJIlxccGFyc2UiLCAiXFxwYXNzd29yZCIsICJcXHByaW50IiwgIlxccHJv bXB0IiwgIlxccHNldCIsCiAJCSJcXHFlY2hvIiwgIlxccXVpdCIsCiAJCSJcXHJlc2V0IiwKLQkJ IlxccyIsICJcXHNldCIsICJcXHNldGVudiIsICJcXHNmIiwgIlxcc3YiLAorCQkiXFxzIiwgIlxc c2V0IiwgIlxcc2V0ZW52IiwgIlxcc2YiLCAiXFxzdGFydHBpcGVsaW5lIiwgIlxcc3YiLCAiXFxz eW5jcGlwZWxpbmUiLAogCQkiXFx0IiwgIlxcVCIsICJcXHRpbWluZyIsCiAJCSJcXHVuc2V0IiwK IAkJIlxceCIsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCAzNmRjMzFjMTZjNC4u NmUwNWY5MDg0ODQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNjgyOCwzICs2 ODI4LDMzOCBAQCBDUkVBVEUgVEFCTEUgZGVmcHJpdnMgKGEgaW50KTsKIAogXHBzZXQgbnVsbCAn JwogRFJPUCBUQUJMRSBkZWZwcml2czsKKy0tIHBpcGVsaW5pbmcKK0NSRUFURSBUQUJMRSBwc3Fs X3BpcGVsaW5lKGEgSU5URUdFUiBQUklNQVJZIEtFWSwgcyBURVhUKTsKKy0tIHNpbmdsZSBxdWVy eQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1xlbmRwaXBlbGlu ZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEKKygxIHJvdykKKworLS0gbXVsdGlwbGUg cXVlcmllcworXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1NFTEVD VCAkMSwgJDIgXGJpbmQgJ3ZhbDInICd2YWwzJyBcZworU0VMRUNUICQxLCAkMiBcYmluZCAndmFs MicgJ3ZhbDMnIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyB2YWwx CisoMSByb3cpCisKKyA/Y29sdW1uPyB8ID9jb2x1bW4/IAorLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgdmFsMiAgICAgfCB2YWwzCisoMSByb3cpCisKKyA/Y29sdW1uPyB8ID9jb2x1bW4/IAorLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgdmFsMiAgICAgfCB2YWwzCisoMSByb3cpCisKKy0tIHNlbmQg bXVsdGlwbGUgc3luY3MKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxn Citcc3luY3BpcGVsaW5lCitcc3luY3BpcGVsaW5lCitTRUxFQ1QgJDEsICQyIFxiaW5kICd2YWwy JyAndmFsMycgXGcKK1xzeW5jcGlwZWxpbmUKK1NFTEVDVCAkMSwgJDIgXGJpbmQgJ3ZhbDQnICd2 YWw1JyBcZworXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdmFsMQorKDEg cm93KQorCisgP2NvbHVtbj8gfCA/Y29sdW1uPyAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHZh bDIgICAgIHwgdmFsMworKDEgcm93KQorCisgP2NvbHVtbj8gfCA/Y29sdW1uPyAKKy0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHZhbDQgICAgIHwgdmFsNQorKDEgcm93KQorCistLSBzdGFydHBpcGVs aW5lIHNob3VsZG4ndCBoYXZlIGFueSBlZmZlY3QgaWYgYWxyZWFkeSBpbiBhIHBpcGVsaW5lCitc c3RhcnRwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcK K1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEKKygxIHJvdykKKwor LS0gQ29udmVydCBhbiBpbXBsaWNpdCB0eCBibG9jayB0byBhbiBleHBsaWNpdCB0eCBibG9jawor XHN0YXJ0cGlwZWxpbmUKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUgVkFMVUVTICgkMSkgXGJp bmQgMSBcZworQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUgVkFMVUVT ICgkMSkgXGJpbmQgMiBcZworUk9MTEJBQ0sgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQorLS0gTXVs dGlwbGUgZXhwbGljaXQgdHJhbnNhY3Rpb25zCitcc3RhcnRwaXBlbGluZQorQkVHSU4gXGJpbmQg XGcKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUgVkFMVUVTICgkMSkgXGJpbmQgMSBcZworUk9M TEJBQ0sgXGJpbmQgXGcKK0JFR0lOIFxiaW5kIFxnCitJTlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5l IFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK0NPTU1JVCBcYmluZCBcZworXGVuZHBpcGVsaW5lCist LSBDT1BZIEZST00gU1RESU4KK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEn IFxnCitDT1BZIHBzcWxfcGlwZWxpbmUgRlJPTSBTVERJTiBcYmluZCBcZworXGVuZHBpcGVsaW5l CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdmFsMQorKDEgcm93KQorCistLSBDT1BZIFRPIFNU RE9VVAorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK2NvcHkgcHNx bF9waXBlbGluZSBUTyBTVERPVVQgXGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAndmFsMicgXGcK K1xlbmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEKKygxIHJvdykKKwor MQlcTgorMgl0ZXN0MgorMwl0ZXN0MworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDIKKygx IHJvdykKKworLS0gVXNlIFxwYXJzZSBhbmQgXGJpbmRfbmFtZWQKK1xzdGFydHBpcGVsaW5lCitT RUxFQ1QgJDEgXHBhcnNlICcnCitTRUxFQ1QgJDEsICQyIFxwYXJzZSAnJworU0VMRUNUICQyIFxw YXJzZSBwaXBlbGluZV8xCitcYmluZF9uYW1lZCAnJyAxIDIgXGcKK1xiaW5kX25hbWVkIHBpcGVs aW5lXzEgMiBcZworXGVuZHBpcGVsaW5lCitFUlJPUjogIGNvdWxkIG5vdCBkZXRlcm1pbmUgZGF0 YSB0eXBlIG9mIHBhcmFtZXRlciAkMQorLS0gcGlwZWxpbmluZyBlcnJvcnMKKy0tIGVuZHBpcGVs aW5lIG91dHNpZGUgb2YgcGlwZWxpbmUgc2hvdWxkIGZhaWwKK1xlbmRwaXBlbGluZQorY2Fubm90 IHNlbmQgcGlwZWxpbmUgd2hlbiBub3QgaW4gcGlwZWxpbmUgbW9kZQorLS0gUXVlcnkgdXNpbmcg c2ltcGxlIHByb3RvY29sIHNob3VsZCBub3QgYmUgc2VudCBhbmQgc2hvdWxkIGxlYXZlIHRoZSBw aXBlbGluZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgMTsKK1BRc2VuZFF1ZXJ5IG5v dCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1NFTEVDVCAkMSBcYmluZCAndmFsMScgXGcKK1xl bmRwaXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHZhbDEKKygxIHJvdykKKworLS0g QWZ0ZXIgYW4gYWJvcnRlZCBwaXBlbGluZSwgY29tbWFuZHMgYWZ0ZXIgYSBzeW5jIHNob3VsZCBi ZSBkaXNwbGF5ZWQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgXGcKK1xzeW5jcGlw ZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxnCitcZW5kcGlwZWxpbmUKK0VSUk9SOiAgYmluZCBt ZXNzYWdlIHN1cHBsaWVzIDAgcGFyYW1ldGVycywgYnV0IHByZXBhcmVkIHN0YXRlbWVudCAiIiBy ZXF1aXJlcyAxCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgMQorKDEgcm93KQorCistLSBJbmNv cnJlY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIHRoZSBwaXBlbGluZSB3aWxsIGJlIGFib3J0ZWQg YW5kIGZvbGxvd2luZyBxdWVyaWVzIHdvbid0IGJlIGV4ZWN1dGVkCitcc3RhcnRwaXBlbGluZQor U0VMRUNUIFxiaW5kICd2YWwxJyBcZworU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworXGVuZHBp cGVsaW5lCitFUlJPUjogIGJpbmQgbWVzc2FnZSBzdXBwbGllcyAxIHBhcmFtZXRlcnMsIGJ1dCBw cmVwYXJlZCBzdGF0ZW1lbnQgIiIgcmVxdWlyZXMgMAorLS0gQW4gZXhwbGljaXQgdHJhbnNhY3Rp b24gd2l0aCBhbiBlcnJvciBuZWVkcyB0byBiZSByb2xsYmFja2VkIGFmdGVyIHRoZSBwaXBlbGlu ZQorXHN0YXJ0cGlwZWxpbmUKK0JFR0lOIFxiaW5kIFxnCitJTlNFUlQgSU5UTyBwc3FsX3BpcGVs aW5lIFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK1JPTExCQUNLIFxiaW5kIFxnCitcZW5kcGlwZWxp bmUKK0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWlu dCAicHNxbF9waXBlbGluZV9wa2V5IgorREVUQUlMOiAgS2V5IChhKT0oMSkgYWxyZWFkeSBleGlz dHMuCitST0xMQkFDSzsKKy0tIFx3YXRjaCBzZW5kcyBhIHNpbXBsZSBxdWVyeSB3aGljaCB3b24n dCBiZSBhbGxvd2VkIHdpdGhpbiBhIHBpcGVsaW5lCitcc3RhcnRwaXBlbGluZQorU0VMRUNUIFxi aW5kIFxnCitcd2F0Y2ggMQorUFFzZW5kUXVlcnkgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9k ZQorCitcZW5kcGlwZWxpbmUKKy0tCisoMSByb3cpCisKKy0tIFxnZGVzYyBzaG91bGQgZmFpbCBh cyBzeW5jaHJvbm91cyBjb21tYW5kcyBhcmUgbm90IGFsbG93ZWQgaW4gcGlwZWxpbmUsIHBpcGVs aW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJp bmQgMSBcZ2Rlc2MKK3N5bmNocm9ub3VzIGNvbW1hbmQgZXhlY3V0aW9uIGZ1bmN0aW9ucyBhcmUg bm90IGFsbG93ZWQgaW4gcGlwZWxpbmUgbW9kZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK1xlbmRw aXBlbGluZQorID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIDEKKygxIHJvdykKKworLS0gXGdzZXQg aXMgbm90IGFsbG93ZWQsIHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBp cGVsaW5lCitTRUxFQ1QgJDEgYXMgaSwgJDIgYXMgaiBccGFyc2UgJycKK1NFTEVDVCAkMSBhcyBr LCAkMiBhcyBsIFxwYXJzZSAnc2Vjb25kJworXGJpbmRfbmFtZWQgJycgMSAyIFxnc2V0CitcZ3Nl dCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlCitcYmluZF9uYW1lZCBzZWNvbmQgMSAyIFxn c2V0IHByZWYwMl8gXGVjaG8gOnByZWYwMl9pIDpwcmVmMDJfagorXGdzZXQgbm90IGFsbG93ZWQg aW4gcGlwZWxpbmUgbW9kZQorXGJpbmRfbmFtZWQgJycgMSAyIFxnCitcZW5kcGlwZWxpbmUKKyBp IHwgaiAKKy0tLSstLS0KKyAxIHwgMgorKDEgcm93KQorCistLSBcZ3ggaXMgbm90IGFsbG93ZWQs IHBpcGVsaW5lIHNob3VsZCBzdGlsbCBiZSB1c2FibGUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1Qg JDEgXGJpbmQgMSBcZ3gKK1xneCBub3QgYWxsb3dlZCBpbiBwaXBlbGluZSBtb2RlCitccmVzZXQK K1NFTEVDVCAkMSBcYmluZCAxIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0t LS0KKyAxCisoMSByb3cpCisKKy0tIFxnZXhlYyBpcyBub3QgYWxsb3dlZCwgcGlwZWxpbmUgc2hv dWxkIHN0aWxsIGJlIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAnSU5TRVJUIElOVE8g cHNxbF9waXBlbGluZShhKSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKScgXHBhcnNlICdp bnNlcnRfc3RtdCcKK1xiaW5kX25hbWVkIGluc2VydF9zdG10IFxnZXhlYworXGdleGVjIG5vdCBh bGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1xiaW5kX25hbWVkIGluc2VydF9zdG10IFxnCitTRUxF Q1QgQ09VTlQoKikgRlJPTSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgP2NvbHVtbj8gICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSU5TRVJUIElOVE8gcHNxbF9waXBlbGluZShhKSBTRUxFQ1QgZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwKQorKDEgcm93KQorCisgY291bnQgCistLS0tLS0tCisgICAgIDMKKygxIHJvdykK KworLS0gcGlwZWxpbmluZyBhbmQgdHJhbnNhY3Rpb24gYmxvY2sgYmVoYXZpb3VyCistLSBzZXQg bG9jYWwgd2lsbCBpc3N1ZSBhIHdhcm5pbmcgd2hlbiBtb2RpZnlpbmcgYSBHVUMgb3V0c2lkZSBv ZiBhIHRyYW5zYWN0aW9uIGJsb2NrCistLSBUaGUgY2hhbmdlIHdpbGwgc3RpbGwgYmUgdmFsaWQg YXMgYSBwaXBlbGluZSBydW5zIHdpdGhpbiBhbiBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jawor LS0gU2VuZGluZyBhIHN5bmMgd2lsbCBjb21taXQgdGhlIGltcGxpY2l0IHRyYW5zYWN0aW9uIGJs b2NrLiBUaGUgZmlyc3QgY29tbWFuZCBhZnRlciBhIHN5bmMKKy0tIHdvbid0IGJlIHNlZW4gYXMg YmVsb25naW5nIHRvIGEgcGlwZWxpbmUuCitcc3RhcnRwaXBlbGluZQorU0VUIExPQ0FMIHN0YXRl bWVudF90aW1lb3V0PScxaCcgXGJpbmQgXGcKK1NIT1cgc3RhdGVtZW50X3RpbWVvdXQgXGJpbmQg XGcKK1xzeW5jcGlwZWxpbmUKK1NIT1cgc3RhdGVtZW50X3RpbWVvdXQgXGJpbmQgXGcKK1NFVCBM T0NBTCBzdGF0ZW1lbnRfdGltZW91dD0nMmgnIFxiaW5kIFxnCitTSE9XIHN0YXRlbWVudF90aW1l b3V0IFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKK1dBUk5JTkc6ICBTRVQgTE9DQUwgY2FuIG9ubHkg YmUgdXNlZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MKKyBzdGF0ZW1lbnRfdGltZW91dCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0KKyAxaAorKDEgcm93KQorCisgc3RhdGVtZW50X3RpbWVvdXQgCistLS0t LS0tLS0tLS0tLS0tLS0tCisgMAorKDEgcm93KQorCisgc3RhdGVtZW50X3RpbWVvdXQgCistLS0t LS0tLS0tLS0tLS0tLS0tCisgMmgKKygxIHJvdykKKworLS0gUmVpbmRleCBjb25jdXJyZW50bHkg aXMgZm9yYmlkZGVuIGluIHRoZSBtaWRkbGUgb2YgYSBwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUK K1NFTEVDVCAkMSBcYmluZCAxIFxnCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBwc3FsX3Bp cGVsaW5lIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisgMQorKDEgcm93KQorCitFUlJPUjogIFJFSU5ERVggQ09OQ1VS UkVOVExZIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIFJlaW5kZXgg Y29uY3VycmVudGx5IHdpbGwgd29yayBpZiBpdCdzIHRoZSBmaXJzdCBjb21tYW5kIG9mIGEgcGlw ZWxpbmUKK1xzdGFydHBpcGVsaW5lCitSRUlOREVYIFRBQkxFIENPTkNVUlJFTlRMWSBwc3FsX3Bp cGVsaW5lIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisgMgorKDEgcm93KQorCistLSBzdWJ0cmFuc2FjdGlvbnMgYXJl IG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1xzdGFydHBpcGVsaW5lCitTQVZFUE9JTlQg YSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1JPTExCQUNLIFRPIFNBVkVQT0lOVCBh IFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCitFUlJPUjogIFNB VkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2NrcworLS0gTG9jayBj b21tYW5kIHdpbGwgZmFpbCBhcyBmaXJzdCBwaXBlbGluZSBjb21tYW5kIGlzIG5vdCBzZWVuIGFz IGEgdHJhbnNhY3Rpb24gYmxvY2sKK1xzdGFydHBpcGVsaW5lCitMT0NLIHBzcWxfcGlwZWxpbmUg XGJpbmQgXGcKK1NFTEVDVCAkMSBcYmluZCAyIFxnCitcZW5kcGlwZWxpbmUKK0VSUk9SOiAgTE9D SyBUQUJMRSBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2NrcworLS0gTG9jayBj b21tYW5kIHdpbGwgc3VjY2VlZCBhZnRlciB0aGUgZmlyc3QgY29tbWFuZCBhcyBwaXBlbGluZSB3 aWxsIGJlIHNlZW4gYXMgYW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2sKK1xzdGFydHBpcGVs aW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZworTE9DSyBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitT RUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisgP2NvbHVtbj8gCistLS0tLS0tLS0t CisgMQorKDEgcm93KQorCisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgMgorKDEgcm93KQorCist LSBWYWN1dW0gY29tbWFuZCB3aWxsIHdvcmsgYXMgdGhlIGZpcnN0IGNvbW1hbmQKK1xzdGFydHBp cGVsaW5lCitWQUNVVU0gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVsaW5lCistLSBW YWN1dW0gY29tbWFuZCB3aWxsIGZhaWwgd2l0aGluIHBpcGVsaW5lIGltcGxpY2l0IHRyYW5zYWN0 aW9uCitcc3RhcnRwaXBlbGluZQorU0VMRUNUIDEgXGJpbmQgXGcKK1ZBQ1VVTSBwc3FsX3BpcGVs aW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAg ICAgMQorKDEgcm93KQorCitFUlJPUjogIFZBQ1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5z YWN0aW9uIGJsb2NrCistLSBWYWN1dW0gY29tbWFuZCB3aWxsIHdvcmsgYWZ0ZXIgYSBzeW5jCitc c3RhcnRwaXBlbGluZQorU0VMRUNUIDEgXGJpbmQgXGcKK1xzeW5jcGlwZWxpbmUKK1ZBQ1VVTSBw c3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKKyA/Y29sdW1uPyAKKy0tLS0tLS0t LS0KKyAgICAgICAgMQorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsCmluZGV4IGM1MDIxZmMw YjEzLi5lOWJkODk3Mjk5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwKQEAgLTE5MjksMyArMTkyOSwy MTIgQEAgQ1JFQVRFIFRBQkxFIGRlZnByaXZzIChhIGludCk7CiBceiBkZWZwcml2cwogXHBzZXQg bnVsbCAnJwogRFJPUCBUQUJMRSBkZWZwcml2czsKKworLS0gcGlwZWxpbmluZworQ1JFQVRFIFRB QkxFIHBzcWxfcGlwZWxpbmUoYSBJTlRFR0VSIFBSSU1BUlkgS0VZLCBzIFRFWFQpOworCistLSBz aW5nbGUgcXVlcnkKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitc ZW5kcGlwZWxpbmUKKworLS0gbXVsdGlwbGUgcXVlcmllcworXHN0YXJ0cGlwZWxpbmUKK1NFTEVD VCAkMSBcYmluZCAndmFsMScgXGcKK1NFTEVDVCAkMSwgJDIgXGJpbmQgJ3ZhbDInICd2YWwzJyBc ZworU0VMRUNUICQxLCAkMiBcYmluZCAndmFsMicgJ3ZhbDMnIFxnCitcZW5kcGlwZWxpbmUKKwor LS0gc2VuZCBtdWx0aXBsZSBzeW5jcworXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAn dmFsMScgXGcKK1xzeW5jcGlwZWxpbmUKK1xzeW5jcGlwZWxpbmUKK1NFTEVDVCAkMSwgJDIgXGJp bmQgJ3ZhbDInICd2YWwzJyBcZworXHN5bmNwaXBlbGluZQorU0VMRUNUICQxLCAkMiBcYmluZCAn dmFsNCcgJ3ZhbDUnIFxnCitcZW5kcGlwZWxpbmUKKworLS0gc3RhcnRwaXBlbGluZSBzaG91bGRu J3QgaGF2ZSBhbnkgZWZmZWN0IGlmIGFscmVhZHkgaW4gYSBwaXBlbGluZQorXHN0YXJ0cGlwZWxp bmUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitcZW5kcGlwZWxp bmUKKworLS0gQ29udmVydCBhbiBpbXBsaWNpdCB0eCBibG9jayB0byBhbiBleHBsaWNpdCB0eCBi bG9jaworXHN0YXJ0cGlwZWxpbmUKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUgVkFMVUVTICgk MSkgXGJpbmQgMSBcZworQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJTlRPIHBzcWxfcGlwZWxpbmUg VkFMVUVTICgkMSkgXGJpbmQgMiBcZworUk9MTEJBQ0sgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQor CistLSBNdWx0aXBsZSBleHBsaWNpdCB0cmFuc2FjdGlvbnMKK1xzdGFydHBpcGVsaW5lCitCRUdJ TiBcYmluZCBcZworSU5TRVJUIElOVE8gcHNxbF9waXBlbGluZSBWQUxVRVMgKCQxKSBcYmluZCAx IFxnCitST0xMQkFDSyBcYmluZCBcZworQkVHSU4gXGJpbmQgXGcKK0lOU0VSVCBJTlRPIHBzcWxf cGlwZWxpbmUgVkFMVUVTICgkMSkgXGJpbmQgMSBcZworQ09NTUlUIFxiaW5kIFxnCitcZW5kcGlw ZWxpbmUKKworLS0gQ09QWSBGUk9NIFNURElOCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxi aW5kICd2YWwxJyBcZworQ09QWSBwc3FsX3BpcGVsaW5lIEZST00gU1RESU4gXGJpbmQgXGcKK1xl bmRwaXBlbGluZQorMgl0ZXN0MgorMwl0ZXN0MworXC4KKworLS0gQ09QWSBUTyBTVERPVVQKK1xz dGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitjb3B5IHBzcWxfcGlwZWxp bmUgVE8gU1RET1VUIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDInIFxnCitcZW5kcGlw ZWxpbmUKKworLS0gVXNlIFxwYXJzZSBhbmQgXGJpbmRfbmFtZWQKK1xzdGFydHBpcGVsaW5lCitT RUxFQ1QgJDEgXHBhcnNlICcnCitTRUxFQ1QgJDEsICQyIFxwYXJzZSAnJworU0VMRUNUICQyIFxw YXJzZSBwaXBlbGluZV8xCitcYmluZF9uYW1lZCAnJyAxIDIgXGcKK1xiaW5kX25hbWVkIHBpcGVs aW5lXzEgMiBcZworXGVuZHBpcGVsaW5lCisKKy0tIHBpcGVsaW5pbmcgZXJyb3JzCisKKy0tIGVu ZHBpcGVsaW5lIG91dHNpZGUgb2YgcGlwZWxpbmUgc2hvdWxkIGZhaWwKK1xlbmRwaXBlbGluZQor CistLSBRdWVyeSB1c2luZyBzaW1wbGUgcHJvdG9jb2wgc2hvdWxkIG5vdCBiZSBzZW50IGFuZCBz aG91bGQgbGVhdmUgdGhlIHBpcGVsaW5lIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAx OworU0VMRUNUICQxIFxiaW5kICd2YWwxJyBcZworXGVuZHBpcGVsaW5lCisKKy0tIEFmdGVyIGFu IGFib3J0ZWQgcGlwZWxpbmUsIGNvbW1hbmRzIGFmdGVyIGEgc3luYyBzaG91bGQgYmUgZGlzcGxh eWVkCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIFxnCitcc3luY3BpcGVsaW5lCitT RUxFQ1QgJDEgXGJpbmQgMSBcZworXGVuZHBpcGVsaW5lCisKKy0tIEluY29ycmVjdCBudW1iZXIg b2YgcGFyYW1ldGVycywgdGhlIHBpcGVsaW5lIHdpbGwgYmUgYWJvcnRlZCBhbmQgZm9sbG93aW5n IHF1ZXJpZXMgd29uJ3QgYmUgZXhlY3V0ZWQKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgXGJpbmQg J3ZhbDEnIFxnCitTRUxFQ1QgJDEgXGJpbmQgJ3ZhbDEnIFxnCitcZW5kcGlwZWxpbmUKKworLS0g QW4gZXhwbGljaXQgdHJhbnNhY3Rpb24gd2l0aCBhbiBlcnJvciBuZWVkcyB0byBiZSByb2xsYmFj a2VkIGFmdGVyIHRoZSBwaXBlbGluZQorXHN0YXJ0cGlwZWxpbmUKK0JFR0lOIFxiaW5kIFxnCitJ TlNFUlQgSU5UTyBwc3FsX3BpcGVsaW5lIFZBTFVFUyAoJDEpIFxiaW5kIDEgXGcKK1JPTExCQUNL IFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKK1JPTExCQUNLOworCistLSBcd2F0Y2ggc2VuZHMgYSBz aW1wbGUgcXVlcnkgd2hpY2ggd29uJ3QgYmUgYWxsb3dlZCB3aXRoaW4gYSBwaXBlbGluZQorXHN0 YXJ0cGlwZWxpbmUKK1NFTEVDVCBcYmluZCBcZworXHdhdGNoIDEKK1xlbmRwaXBlbGluZQorCist LSBcZ2Rlc2Mgc2hvdWxkIGZhaWwgYXMgc3luY2hyb25vdXMgY29tbWFuZHMgYXJlIG5vdCBhbGxv d2VkIGluIHBpcGVsaW5lLCBwaXBlbGluZSBzaG91bGQgc3RpbGwgYmUgdXNhYmxlCitcc3RhcnRw aXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGdkZXNjCitTRUxFQ1QgJDEgXGJpbmQgMSBcZwor XGVuZHBpcGVsaW5lCisKKy0tIFxnc2V0IGlzIG5vdCBhbGxvd2VkLCBwaXBlbGluZSBzaG91bGQg c3RpbGwgYmUgdXNhYmxlCitcc3RhcnRwaXBlbGluZQorU0VMRUNUICQxIGFzIGksICQyIGFzIGog XHBhcnNlICcnCitTRUxFQ1QgJDEgYXMgaywgJDIgYXMgbCBccGFyc2UgJ3NlY29uZCcKK1xiaW5k X25hbWVkICcnIDEgMiBcZ3NldAorXGJpbmRfbmFtZWQgc2Vjb25kIDEgMiBcZ3NldCBwcmVmMDJf IFxlY2hvIDpwcmVmMDJfaSA6cHJlZjAyX2oKK1xiaW5kX25hbWVkICcnIDEgMiBcZworXGVuZHBp cGVsaW5lCisKKy0tIFxneCBpcyBub3QgYWxsb3dlZCwgcGlwZWxpbmUgc2hvdWxkIHN0aWxsIGJl IHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NFTEVDVCAkMSBcYmluZCAxIFxneAorXHJlc2V0CitT RUxFQ1QgJDEgXGJpbmQgMSBcZworXGVuZHBpcGVsaW5lCisKKy0tIFxnZXhlYyBpcyBub3QgYWxs b3dlZCwgcGlwZWxpbmUgc2hvdWxkIHN0aWxsIGJlIHVzYWJsZQorXHN0YXJ0cGlwZWxpbmUKK1NF TEVDVCAnSU5TRVJUIElOVE8gcHNxbF9waXBlbGluZShhKSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVz KDEsIDEwKScgXHBhcnNlICdpbnNlcnRfc3RtdCcKK1xiaW5kX25hbWVkIGluc2VydF9zdG10IFxn ZXhlYworXGJpbmRfbmFtZWQgaW5zZXJ0X3N0bXQgXGcKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBz cWxfcGlwZWxpbmUgXGJpbmQgXGcKK1xlbmRwaXBlbGluZQorCistLSBwaXBlbGluaW5nIGFuZCB0 cmFuc2FjdGlvbiBibG9jayBiZWhhdmlvdXIKKworLS0gc2V0IGxvY2FsIHdpbGwgaXNzdWUgYSB3 YXJuaW5nIHdoZW4gbW9kaWZ5aW5nIGEgR1VDIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiBibG9j aworLS0gVGhlIGNoYW5nZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGEgcGlwZWxpbmUgcnVucyB3 aXRoaW4gYW4gaW1wbGljaXQgdHJhbnNhY3Rpb24gYmxvY2sKKy0tIFNlbmRpbmcgYSBzeW5jIHdp bGwgY29tbWl0IHRoZSBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9jay4gVGhlIGZpcnN0IGNvbW1h bmQgYWZ0ZXIgYSBzeW5jCistLSB3b24ndCBiZSBzZWVuIGFzIGJlbG9uZ2luZyB0byBhIHBpcGVs aW5lLgorXHN0YXJ0cGlwZWxpbmUKK1NFVCBMT0NBTCBzdGF0ZW1lbnRfdGltZW91dD0nMWgnIFxi aW5kIFxnCitTSE9XIHN0YXRlbWVudF90aW1lb3V0IFxiaW5kIFxnCitcc3luY3BpcGVsaW5lCitT SE9XIHN0YXRlbWVudF90aW1lb3V0IFxiaW5kIFxnCitTRVQgTE9DQUwgc3RhdGVtZW50X3RpbWVv dXQ9JzJoJyBcYmluZCBcZworU0hPVyBzdGF0ZW1lbnRfdGltZW91dCBcYmluZCBcZworXGVuZHBp cGVsaW5lCisKKy0tIFJlaW5kZXggY29uY3VycmVudGx5IGlzIGZvcmJpZGRlbiBpbiB0aGUgbWlk ZGxlIG9mIGEgcGlwZWxpbmUKK1xzdGFydHBpcGVsaW5lCitTRUxFQ1QgJDEgXGJpbmQgMSBcZwor UkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcHNxbF9waXBlbGluZSBcYmluZCBcZworU0VMRUNU ICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBSZWluZGV4IGNvbmN1cnJlbnRseSB3 aWxsIHdvcmsgaWYgaXQncyB0aGUgZmlyc3QgY29tbWFuZCBvZiBhIHBpcGVsaW5lCitcc3RhcnRw aXBlbGluZQorUkVJTkRFWCBUQUJMRSBDT05DVVJSRU5UTFkgcHNxbF9waXBlbGluZSBcYmluZCBc ZworU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBzdWJ0cmFuc2FjdGlv bnMgYXJlIG5vdCBhbGxvd2VkIGluIHBpcGVsaW5lIG1vZGUKK1xzdGFydHBpcGVsaW5lCitTQVZF UE9JTlQgYSBcYmluZCBcZworU0VMRUNUICQxIFxiaW5kIDEgXGcKK1JPTExCQUNLIFRPIFNBVkVQ T0lOVCBhIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisKKy0t IExvY2sgY29tbWFuZCB3aWxsIGZhaWwgYXMgZmlyc3QgcGlwZWxpbmUgY29tbWFuZCBpcyBub3Qg c2VlbiBhcyBhIHRyYW5zYWN0aW9uIGJsb2NrCitcc3RhcnRwaXBlbGluZQorTE9DSyBwc3FsX3Bp cGVsaW5lIFxiaW5kIFxnCitTRUxFQ1QgJDEgXGJpbmQgMiBcZworXGVuZHBpcGVsaW5lCisKKy0t IExvY2sgY29tbWFuZCB3aWxsIHN1Y2NlZWQgYWZ0ZXIgdGhlIGZpcnN0IGNvbW1hbmQgYXMgcGlw ZWxpbmUgd2lsbCBiZSBzZWVuIGFzIGFuIGltcGxpY2l0IHRyYW5zYWN0aW9uIGJsb2NrCitcc3Rh cnRwaXBlbGluZQorU0VMRUNUICQxIFxiaW5kIDEgXGcKK0xPQ0sgcHNxbF9waXBlbGluZSBcYmlu ZCBcZworU0VMRUNUICQxIFxiaW5kIDIgXGcKK1xlbmRwaXBlbGluZQorCistLSBWYWN1dW0gY29t bWFuZCB3aWxsIHdvcmsgYXMgdGhlIGZpcnN0IGNvbW1hbmQKK1xzdGFydHBpcGVsaW5lCitWQUNV VU0gcHNxbF9waXBlbGluZSBcYmluZCBcZworXGVuZHBpcGVsaW5lCisKKy0tIFZhY3V1bSBjb21t YW5kIHdpbGwgZmFpbCB3aXRoaW4gcGlwZWxpbmUgaW1wbGljaXQgdHJhbnNhY3Rpb24KK1xzdGFy dHBpcGVsaW5lCitTRUxFQ1QgMSBcYmluZCBcZworVkFDVVVNIHBzcWxfcGlwZWxpbmUgXGJpbmQg XGcKK1xlbmRwaXBlbGluZQorCistLSBWYWN1dW0gY29tbWFuZCB3aWxsIHdvcmsgYWZ0ZXIgYSBz eW5jCitcc3RhcnRwaXBlbGluZQorU0VMRUNUIDEgXGJpbmQgXGcKK1xzeW5jcGlwZWxpbmUKK1ZB Q1VVTSBwc3FsX3BpcGVsaW5lIFxiaW5kIFxnCitcZW5kcGlwZWxpbmUKLS0gCjIuMzkuNSAoQXBw bGUgR2l0LTE1NCkKCg== --000000000000d038300627e1e501--