From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 350161FF179 for ; Wed, 7 Jan 2026 10:15:36 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EAC617149; Wed, 7 Jan 2026 10:16:07 +0100 (CET) From: Kefu Chai To: pve-devel@lists.proxmox.com Date: Tue, 6 Jan 2026 22:24:34 +0800 Message-ID: <20260106142440.2368585-11-k.chai@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260106142440.2368585-1-k.chai@proxmox.com> References: <20260106142440.2368585-1-k.chai@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1767709495704 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.063 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_SBL_A 0.1 Contains URL's A record listed in the Spamhaus SBL blocklist [188.114.96.3, 188.114.97.3] X-Mailman-Approved-At: Wed, 07 Jan 2026 10:16:04 +0100 Subject: [pve-devel] [PATCH pve-cluster 10/15] pmxcfs-rs: add pmxcfs-dfsm crate X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" QWRkIERpc3RyaWJ1dGVkIEZpbml0ZSBTdGF0ZSBNYWNoaW5lIGZvciBjbHVzdGVyIHN5bmNocm9u aXphdGlvbjoKLSBEZnNtOiBDb3JlIHN0YXRlIG1hY2hpbmUgaW1wbGVtZW50YXRpb24KLSBDbHVz dGVyRGF0YWJhc2VTZXJ2aWNlOiBNZW1EYiBzeW5jIChwbXhjZnNfdjEgQ1BHIGdyb3VwKQotIFN0 YXR1c1N5bmNTZXJ2aWNlOiBTdGF0dXMgc3luYyAocHZlX2t2c3RvcmVfdjEgQ1BHIGdyb3VwKQot IFByb3RvY29sOiBTeW5jU3RhcnQsIFN0YXRlLCBVcGRhdGUsIFVwZGF0ZUNvbXBsZXRlLCBWZXJp ZnkKLSBMZWFkZXIgZWxlY3Rpb24gYmFzZWQgb24gdmVyc2lvbiBhbmQgbXRpbWUKLSBJbmNyZW1l bnRhbCB1cGRhdGVzIGZvciBlZmZpY2llbmN5CgpUaGlzIGludGVncmF0ZXMgcG14Y2ZzLW1lbWRi LCBwbXhjZnMtc2VydmljZXMsIGFuZCBydXN0LWNvcm9zeW5jCnRvIHByb3ZpZGUgY2x1c3Rlci13 aWRlIGRhdGFiYXNlIHN5bmNocm9uaXphdGlvbi4gSXQgaW1wbGVtZW50cwp0aGUgd2lyZS1jb21w YXRpYmxlIHByb3RvY29sIHVzZWQgYnkgdGhlIEMgdmVyc2lvbi4KCkluY2x1ZGVzIHVuaXQgdGVz dHMgZm9yOgotIEluZGV4IHNlcmlhbGl6YXRpb24gYW5kIGNvbXBhcmlzb24KLSBMZWFkZXIgZWxl Y3Rpb24gbG9naWMKLSBUcmVlIGVudHJ5IHNlcmlhbGl6YXRpb24KLSBEaWZmIGNvbXB1dGF0aW9u IGJldHdlZW4gaW5kaWNlcwoKU2lnbmVkLW9mZi1ieTogS2VmdSBDaGFpIDxrLmNoYWlAcHJveG1v eC5jb20+Ci0tLQogc3JjL3BteGNmcy1ycy9DYXJnby50b21sICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL0NhcmdvLnRvbWwgICAgICAgICAg fCAgIDQ1ICsKIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vUkVBRE1FLm1kICAgICAgICAgICB8 ICAzNDAgKysrKysrCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9jYWxsYmFja3MucnMg ICAgfCAgIDUyICsKIC4uLi9zcmMvY2x1c3Rlcl9kYXRhYmFzZV9zZXJ2aWNlLnJzICAgICAgICAg ICB8ICAxMTYgKysKIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2NwZ19zZXJ2aWNlLnJz ICB8ICAxNjMgKysrCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9kZnNtX21lc3NhZ2Uu cnMgfCAgNzI4ICsrKysrKysrKysrKwogc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvZnVz ZV9tZXNzYWdlLnJzIHwgIDE4NSArKysKIC4uLi9wbXhjZnMtZGZzbS9zcmMva3Zfc3RvcmVfbWVz c2FnZS5ycyAgICAgICB8ICAzMjkgKysrKysrCiBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3Ny Yy9saWIucnMgICAgICAgICAgfCAgIDMyICsKIHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3Jj L21lc3NhZ2UucnMgICAgICB8ICAgMjEgKwogLi4uL3BteGNmcy1kZnNtL3NyYy9zdGF0ZV9tYWNo aW5lLnJzICAgICAgICAgIHwgMTAxMyArKysrKysrKysrKysrKysrKwogLi4uL3BteGNmcy1kZnNt L3NyYy9zdGF0dXNfc3luY19zZXJ2aWNlLnJzICAgIHwgIDExOCArKwogc3JjL3BteGNmcy1ycy9w bXhjZnMtZGZzbS9zcmMvdHlwZXMucnMgICAgICAgIHwgIDEwNyArKwogc3JjL3BteGNmcy1ycy9w bXhjZnMtZGZzbS9zcmMvd2lyZV9mb3JtYXQucnMgIHwgIDIyMCArKysrCiAuLi4vdGVzdHMvbXVs dGlfbm9kZV9zeW5jX3Rlc3RzLnJzICAgICAgICAgICAgfCAgNTY1ICsrKysrKysrKwogMTYgZmls ZXMgY2hhbmdlZCwgNDAzNSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Bt eGNmcy1ycy9wbXhjZnMtZGZzbS9DYXJnby50b21sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Bt eGNmcy1ycy9wbXhjZnMtZGZzbS9SRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14 Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9jYWxsYmFja3MucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9jbHVzdGVyX2RhdGFiYXNlX3NlcnZpY2UucnMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9jcGdfc2Vy dmljZS5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3Jj L2Rmc21fbWVzc2FnZS5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2Zz LWRmc20vc3JjL2Z1c2VfbWVzc2FnZS5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMt cnMvcG14Y2ZzLWRmc20vc3JjL2t2X3N0b3JlX21lc3NhZ2UucnMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9saWIucnMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9tZXNzYWdlLnJzCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvc3RhdGVfbWFjaGluZS5ycwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL3N0YXR1c19zeW5j X3NlcnZpY2UucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNt L3NyYy90eXBlcy5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbXhjZnMtcnMvcG14Y2ZzLWRm c20vc3JjL3dpcmVfZm9ybWF0LnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BteGNmcy1ycy9w bXhjZnMtZGZzbS90ZXN0cy9tdWx0aV9ub2RlX3N5bmNfdGVzdHMucnMKCmRpZmYgLS1naXQgYS9z cmMvcG14Y2ZzLXJzL0NhcmdvLnRvbWwgYi9zcmMvcG14Y2ZzLXJzL0NhcmdvLnRvbWwKaW5kZXgg ZjQ0OTdkNTguLjRkMThhYTkzIDEwMDY0NAotLS0gYS9zcmMvcG14Y2ZzLXJzL0NhcmdvLnRvbWwK KysrIGIvc3JjL3BteGNmcy1ycy9DYXJnby50b21sCkBAIC0xMCw2ICsxMCw3IEBAIG1lbWJlcnMg PSBbCiAgICAgInBteGNmcy10ZXN0LXV0aWxzIiwgIyBUZXN0IHV0aWxpdGllcyBhbmQgaGVscGVy cyAoZGV2LW9ubHkpCiAgICAgInBteGNmcy1zZXJ2aWNlcyIsICAgIyBTZXJ2aWNlIGZyYW1ld29y ayBmb3IgYXV0b21hdGljIHJldHJ5IGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudAogICAgICJwbXhj ZnMtaXBjIiwgICAgICAgICMgbGlicWItY29tcGF0aWJsZSBJUEMgc2VydmVyCisgICAgInBteGNm cy1kZnNtIiwgICAgICAgIyBEaXN0cmlidXRlZCBGaW5pdGUgU3RhdGUgTWFjaGluZSAob3ducyBD UEcpCiBdCiByZXNvbHZlciA9ICIyIgogCmRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNm cy1kZnNtL0NhcmdvLnRvbWwgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL0NhcmdvLnRvbWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjEyYThlN2Y2Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9DYXJnby50b21sCkBAIC0wLDAgKzEs NDUgQEAKK1twYWNrYWdlXQorbmFtZSA9ICJwbXhjZnMtZGZzbSIKK2Rlc2NyaXB0aW9uID0gIkRp c3RyaWJ1dGVkIEZpbml0ZSBTdGF0ZSBNYWNoaW5lIGZvciBjbHVzdGVyIHN0YXRlIHN5bmNocm9u aXphdGlvbiIKKwordmVyc2lvbi53b3Jrc3BhY2UgPSB0cnVlCitlZGl0aW9uLndvcmtzcGFjZSA9 IHRydWUKK2F1dGhvcnMud29ya3NwYWNlID0gdHJ1ZQorbGljZW5zZS53b3Jrc3BhY2UgPSB0cnVl CityZXBvc2l0b3J5LndvcmtzcGFjZSA9IHRydWUKKworW2xpbnRzXQord29ya3NwYWNlID0gdHJ1 ZQorCitbZGVwZW5kZW5jaWVzXQorIyBJbnRlcm5hbCBkZXBlbmRlbmNpZXMKK3BteGNmcy1hcGkt dHlwZXMud29ya3NwYWNlID0gdHJ1ZQorcG14Y2ZzLW1lbWRiLndvcmtzcGFjZSA9IHRydWUKK3Bt eGNmcy1zZXJ2aWNlcy53b3Jrc3BhY2UgPSB0cnVlCisKKyMgQ29yb3N5bmMgaW50ZWdyYXRpb24K K3J1c3QtY29yb3N5bmMud29ya3NwYWNlID0gdHJ1ZQorCisjIEVycm9yIGhhbmRsaW5nCithbnlo b3cud29ya3NwYWNlID0gdHJ1ZQordGhpc2Vycm9yLndvcmtzcGFjZSA9IHRydWUKKworIyBBc3lu YyBhbmQgY29uY3VycmVuY3kKK3BhcmtpbmdfbG90LndvcmtzcGFjZSA9IHRydWUKK2FzeW5jLXRy YWl0LndvcmtzcGFjZSA9IHRydWUKK3Rva2lvLndvcmtzcGFjZSA9IHRydWUKKworIyBTZXJpYWxp emF0aW9uCitzZXJkZS53b3Jrc3BhY2UgPSB0cnVlCitiaW5jb2RlLndvcmtzcGFjZSA9IHRydWUK K2J5dGVtdWNrLndvcmtzcGFjZSA9IHRydWUKKworIyBMb2dnaW5nCit0cmFjaW5nLndvcmtzcGFj ZSA9IHRydWUKKworIyBVdGlsaXRpZXMKK251bV9lbnVtLndvcmtzcGFjZSA9IHRydWUKKworW2Rl di1kZXBlbmRlbmNpZXNdCit0ZW1wZmlsZS53b3Jrc3BhY2UgPSB0cnVlCitsaWJjLndvcmtzcGFj ZSA9IHRydWUKZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vUkVBRE1FLm1k IGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjU2MDgyN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNm cy1ycy9wbXhjZnMtZGZzbS9SRUFETUUubWQKQEAgLTAsMCArMSwzNDAgQEAKKyMgcG14Y2ZzLWRm c20KKworKipEaXN0cmlidXRlZCBGaW5pdGUgU3RhdGUgTWFjaGluZSoqIGZvciBjbHVzdGVyLXdp ZGUgc3RhdGUgc3luY2hyb25pemF0aW9uIGluIHBteGNmcy4KKworVGhpcyBjcmF0ZSBpbXBsZW1l bnRzIHRoZSBERlNNIHByb3RvY29sIHVzZWQgdG8gcmVwbGljYXRlIGNvbmZpZ3VyYXRpb24gY2hh bmdlcyBhbmQgc3RhdHVzIHVwZGF0ZXMgYWNyb3NzIGFsbCBub2RlcyBpbiBhIFByb3htb3ggY2x1 c3RlciB2aWEgQ29yb3N5bmMgQ1BHIChDbG9zZWQgUHJvY2VzcyBHcm91cCkuCisKKyMjIE92ZXJ2 aWV3CisKK1RoZSBERlNNIGlzIHRoZSBjb3JlIG1lY2hhbmlzbSBmb3IgbWFpbnRhaW5pbmcgY29u c2lzdGVuY3kgYWNyb3NzIGNsdXN0ZXIgbm9kZXMuIEl0IGVuc3VyZXMgdGhhdDoKKworLSBBbGwg bm9kZXMgc2VlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAod3JpdGVzLCBjcmVhdGVzLCBkZWxldGVz KSBpbiB0aGUgc2FtZSBvcmRlcgorLSBEYXRhYmFzZSBzdGF0ZSByZW1haW5zIHN5bmNocm9uaXpl ZCBldmVuIGFmdGVyIG5ldHdvcmsgcGFydGl0aW9ucworLSBTdGF0dXMgaW5mb3JtYXRpb24gKFZN IHN0YXRlcywgUlJEIGRhdGEpIGlzIGJyb2FkY2FzdCB0byBhbGwgbm9kZXMKKy0gU3RhdGUgdmVy aWZpY2F0aW9uIGNhdGNoZXMgaW5jb25zaXN0ZW5jaWVzCisKKyMjIEFyY2hpdGVjdHVyZQorCisj IyMgS2V5IENvbXBvbmVudHMKKworIyMjIE1vZHVsZSBTdHJ1Y3R1cmUKKworfCBNb2R1bGUgfCBQ dXJwb3NlIHwgQyBFcXVpdmFsZW50IHwKK3wtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0t LS18Cit8IGBzdGF0ZV9tYWNoaW5lLnJzYCB8IENvcmUgREZTTSBsb2dpYywgc3RhdGUgdHJhbnNp dGlvbnMgfCBgZGZzbS5jYCB8Cit8IGBjbHVzdGVyX2RhdGFiYXNlX3NlcnZpY2UucnNgIHwgTWVt RGIgc3luYyBzZXJ2aWNlIHwgYGRjZGIuY2AsIGBsb29wLmM6c2VydmljZV9kY2RiYCB8Cit8IGBz dGF0dXNfc3luY19zZXJ2aWNlLnJzYCB8IFN0YXR1cy9rdnN0b3JlIHN5bmMgc2VydmljZSB8IGBs b29wLmM6c2VydmljZV9zdGF0dXNgIHwKK3wgYGNwZ19zZXJ2aWNlLnJzYCB8IENvcm9zeW5jIENQ RyBpbnRlZ3JhdGlvbiB8IGBkZnNtLmM6Y3BnX2NhbGxiYWNrc2AgfAorfCBgZGZzbV9tZXNzYWdl LnJzYCB8IFByb3RvY29sIG1lc3NhZ2UgdHlwZXMgfCBgZGZzbS5jOmRmc21fbWVzc2FnZV8qX2hl YWRlcl90YCB8Cit8IGBtZXNzYWdlLnJzYCB8IE1lc3NhZ2UgdHJhaXQgYW5kIHNlcmlhbGl6YXRp b24gfCAoaW5saW5lIGluIEMpIHwKK3wgYHdpcmVfZm9ybWF0LnJzYCB8IEMtY29tcGF0aWJsZSB3 aXJlIGZvcm1hdCB8IGBkY2RiLmM6Y19mdXNlX21lc3NhZ2VfaGVhZGVyX3RgIHwKK3wgYGJyb2Fk Y2FzdC5yc2AgfCBDbHVzdGVyLXdpZGUgbWVzc2FnZSBicm9hZGNhc3QgfCBgZGNkYi5jOmRjZGJf c2VuZF9mdXNlX21lc3NhZ2VgIHwKK3wgYHR5cGVzLnJzYCB8IFR5cGUgZGVmaW5pdGlvbnMgKG1v ZGVzLCBlcG9jaHMpIHwgYGRmc20uYzpkZnNtX21vZGVfdGAgfAorCisjIyBDIHRvIFJ1c3QgTWFw cGluZworCisjIyMgRGF0YSBTdHJ1Y3R1cmVzCisKK3wgQyBUeXBlIHwgUnVzdCBUeXBlIHwgTm90 ZXMgfAorfC0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS18Cit8IGBkZnNtX3RgIHwgYERmc21g IHwgTWFpbiBzdGF0ZSBtYWNoaW5lIHwKK3wgYGRmc21fbW9kZV90YCB8IGBEZnNtTW9kZWAgfCBF bnVtIHdpdGggdHlwZSBzYWZldHkgfAorfCBgZGZzbV9ub2RlX2luZm9fdGAgfCAoaW50ZXJuYWwp IHwgTm9kZSBzdGF0ZSB0cmFja2luZyB8Cit8IGBkZnNtX3N5bmNfaW5mb190YCB8IChpbnRlcm5h bCkgfCBTeW5jIHNlc3Npb24gaW5mbyB8Cit8IGBkZnNtX2NhbGxiYWNrc190YCB8IFRyYWl0LWJh c2VkIGNhbGxiYWNrcyB8IFR5cGUtc2FmZSBjYWxsYmFja3MgdmlhIHRyYWl0cyB8Cit8IGBkZnNt X21lc3NhZ2VfKl9oZWFkZXJfdGAgfCBgRGZzbU1lc3NhZ2VgIHwgVHlwZS1zYWZlIGVudW0gdmFy aWFudHMgfAorCisjIyMgRnVuY3Rpb25zCisKKyMjIyMgQ29yZSBERlNNIE9wZXJhdGlvbnMKKwor fCBDIEZ1bmN0aW9uIHwgUnVzdCBFcXVpdmFsZW50IHwgTG9jYXRpb24gfAorfC0tLS0tLS0tLS0t fC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18Cit8IGBkZnNtX25ldygpYCB8IGBEZnNtOjpu ZXcoKWAgfCBzdGF0ZV9tYWNoaW5lLnJzIHwKK3wgYGRmc21faW5pdGlhbGl6ZSgpYCB8IGBEZnNt Ojppbml0X2NwZygpYCB8IHN0YXRlX21hY2hpbmUucnMgfAorfCBgZGZzbV9qb2luKClgIHwgKHBh cnQgb2YgaW5pdF9jcGcpIHwgc3RhdGVfbWFjaGluZS5ycyB8Cit8IGBkZnNtX2Rpc3BhdGNoKClg IHwgYERmc206OmRpc3BhdGNoX2V2ZW50cygpYCB8IHN0YXRlX21hY2hpbmUucnMgfAorfCBgZGZz bV9zZW5kX21lc3NhZ2UoKWAgfCBgRGZzbTo6c2VuZF9tZXNzYWdlKClgIHwgc3RhdGVfbWFjaGlu ZS5ycyB8Cit8IGBkZnNtX3NlbmRfdXBkYXRlKClgIHwgYERmc206OnNlbmRfdXBkYXRlKClgIHwg c3RhdGVfbWFjaGluZS5ycyB8Cit8IGBkZnNtX3ZlcmlmeV9yZXF1ZXN0KClgIHwgYERmc206OnZl cmlmeV9yZXF1ZXN0KClgIHwgc3RhdGVfbWFjaGluZS5ycyB8Cit8IGBkZnNtX2ZpbmFsaXplKClg IHwgYERmc206OnN0b3Bfc2VydmljZXMoKWAgfCBzdGF0ZV9tYWNoaW5lLnJzIHwKKworIyMjIyBE Q0RCIChDbHVzdGVyIERhdGFiYXNlKSBPcGVyYXRpb25zCisKK3wgQyBGdW5jdGlvbiB8IFJ1c3Qg RXF1aXZhbGVudCB8IExvY2F0aW9uIHwKK3wtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwt LS0tLS0tLS0tfAorfCBgZGNkYl9uZXcoKWAgfCBgQ2x1c3RlckRhdGFiYXNlU2VydmljZTo6bmV3 KClgIHwgY2x1c3Rlcl9kYXRhYmFzZV9zZXJ2aWNlLnJzIHwKK3wgYGRjZGJfc2VuZF9mdXNlX21l c3NhZ2UoKWAgfCBgYnJvYWRjYXN0KClgIHwgYnJvYWRjYXN0LnJzIHwKK3wgYGRjZGJfc2VuZF91 bmxvY2soKWAgfCBgRnVzZU1lc3NhZ2U6OlVubG9ja2AgKyBicm9hZGNhc3QgfCBicm9hZGNhc3Qu cnMgfAorfCBgc2VydmljZV9kY2RiKClgIHwgYENsdXN0ZXJEYXRhYmFzZVNlcnZpY2VgIHwgY2x1 c3Rlcl9kYXRhYmFzZV9zZXJ2aWNlLnJzIHwKKworIyMjIyBTdGF0dXMgU3luYyBPcGVyYXRpb25z CisKK3wgQyBGdW5jdGlvbiB8IFJ1c3QgRXF1aXZhbGVudCB8IExvY2F0aW9uIHwKK3wtLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tfAorfCBgc2VydmljZV9zdGF0dXMoKWAg fCBgU3RhdHVzU3luY1NlcnZpY2VgIHwgc3RhdHVzX3N5bmNfc2VydmljZS5ycyB8Cit8IChrdnN0 b3JlIENQRyBncm91cCkgfCBgU3RhdHVzU3luY1NlcnZpY2VgIHwgVXNlcyBzZXBhcmF0ZSBDUEcg Z3JvdXAgfAorCisjIyMgQ2FsbGJhY2sgU3lzdGVtCisKKyoqQyBJbXBsZW1lbnRhdGlvbjoqKgor CisqKlJ1c3QgSW1wbGVtZW50YXRpb246KioKKy0gVXNlcyB0cmFpdC1iYXNlZCBjYWxsYmFja3Mg aW5zdGVhZCBvZiBmdW5jdGlvbiBwb2ludGVycworLSBDYWxsYmFja3MgYXJlIGltcGxlbWVudGVk IGJ5IGBNZW1EYkNhbGxiYWNrc2AgKG1lbWRiIGludGVncmF0aW9uKQorLSBEZWZpbmVkIGluIGV4 dGVybmFsIGNyYXRlcyAocG14Y2ZzLW1lbWRiKQorCisjIyBTeW5jaHJvbml6YXRpb24gUHJvdG9j b2wKKworVGhlIERGU00gZW5zdXJlcyBhbGwgbm9kZXMgbWFpbnRhaW4gY29uc2lzdGVudCBkYXRh YmFzZSBzdGF0ZSB0aHJvdWdoIGEgbXVsdGktcGhhc2Ugc3luY2hyb25pemF0aW9uIHByb3RvY29s OgorCisjIyMgUHJvdG9jb2wgUGhhc2VzCisKKyMjIyMgUGhhc2UgMTogTWVtYmVyc2hpcCBDaGFu Z2UKKworV2hlbiBub2RlcyBqb2luIG9yIGxlYXZlIHRoZSBjbHVzdGVyOgorCisxLiAqKkNvcm9z eW5jIENQRyoqIGRlbGl2ZXJzIG1lbWJlcnNoaXAgY2hhbmdlIG5vdGlmaWNhdGlvbgorMi4gKipE RlNNIGludmFsaWRhdGVzKiogY2FjaGVkIGNoZWNrc3VtcworMy4gKipNZXNzYWdlIHF1ZXVlcyoq IGFyZSBjbGVhcmVkCis0LiAqKkVwb2NoIGNvdW50ZXIqKiBpcyBpbmNyZW1lbnRlZAorCisqKkNQ RyBMZWFkZXIqKiAobG93ZXN0IG5vZGUgSUQpOgorLSBJbml0aWF0ZXMgc3luYyBieSBzZW5kaW5n IGBTeW5jU3RhcnRgIG1lc3NhZ2UKKy0gU2VuZHMgaXRzIG93biBgU3RhdGVgIChDUEcgZG9lc24n dCBsb29wIGJhY2sgbWVzc2FnZXMpCisKKyoqQWxsIEZvbGxvd2VycyoqOgorLSBSZXNwb25kIHRv IGBTeW5jU3RhcnRgIGJ5IHNlbmRpbmcgdGhlaXIgYFN0YXRlYAorLSBXYWl0IGZvciBvdGhlciBu b2Rlcycgc3RhdGVzCisKKyMjIyMgUGhhc2UgMjogU3RhdGUgRXhjaGFuZ2UKKworRWFjaCBub2Rl IGNvbGxlY3RzIGBTdGF0ZWAgbWVzc2FnZXMgY29udGFpbmluZyBzZXJpYWxpemVkICoqTWVtRGJJ bmRleCoqIChjb21wYWN0IHN0YXRlIHN1bW1hcnkgdXNpbmcgQy1jb21wYXRpYmxlIHdpcmUgZm9y bWF0KS4KKworU3RhdGUgZGlnZXN0cyBhcmUgY29tcHV0ZWQgdXNpbmcgU0hBLTI1NiBoYXNoaW5n IHRvIGRldGVjdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5vZGVzLgorCisjIyMjIFBoYXNlIDM6IExl YWRlciBFbGVjdGlvbgorCitXaGVuIGFsbCBzdGF0ZXMgYXJlIGNvbGxlY3RlZCwgYHByb2Nlc3Nf c3RhdGVfdXBkYXRlKClgIGlzIGNhbGxlZDoKKworMS4gKipQYXJzZSBpbmRpY2VzKiogZnJvbSBh bGwgbm9kZSBzdGF0ZXMKKzIuICoqRWxlY3QgZGF0YSBsZWFkZXIqKiAobWF5IGRpZmZlciBmcm9t IENQRyBsZWFkZXIpOgorICAgLSBIaWdoZXN0IGB2ZXJzaW9uYCB3aW5zCisgICAtIElmIHRpZWQs IGhpZ2hlc3QgYG10aW1lYCB3aW5zCiszLiAqKklkZW50aWZ5IHN5bmNlZCBub2RlcyoqOiBOb2Rl cyB3aG9zZSBpbmRleCBtYXRjaGVzIGxlYWRlciBleGFjdGx5Cis0LiAqKkRldGVybWluZSBvd24g c3RhdHVzKio6CisgICAtIElmIHdlJ3JlIHRoZSBkYXRhIGxlYWRlciDihpIgc2VuZCB1cGRhdGVz IHRvIGZvbGxvd2VycworICAgLSBJZiB3ZSdyZSBzeW5jZWQgd2l0aCBsZWFkZXIg4oaSIG1hcmsg YXMgU3luY2VkCisgICAtIE90aGVyd2lzZSDihpIgZW50ZXIgVXBkYXRlIG1vZGUgYW5kIHdhaXQK KworKipMZWFkZXIgRWxlY3Rpb24gQWxnb3JpdGhtKio6CisKKyMjIyMgUGhhc2UgNDogSW5jcmVt ZW50YWwgVXBkYXRlcworCisqKkRhdGEgTGVhZGVyKiogKG5vZGUgd2l0aCBoaWdoZXN0IHZlcnNp b24pOgorCisxLiAqKkNvbXBhcmUgaW5kaWNlcyoqIHVzaW5nIGBmaW5kX2RpZmZlcmVuY2VzKClg IGZvciBlYWNoIGZvbGxvd2VyCisyLiAqKlNlcmlhbGl6ZSBkaWZmZXJpbmcgZW50cmllcyoqIHRv IEMtY29tcGF0aWJsZSBUcmVlRW50cnkgZm9ybWF0CiszLiAqKlNlbmQgVXBkYXRlIG1lc3NhZ2Vz KiogdmlhIENQRworNC4gKipTZW5kIFVwZGF0ZUNvbXBsZXRlKiogd2hlbiBhbGwgdXBkYXRlcyBz ZW50CisKKyoqRm9sbG93ZXJzKiogKG91dC1vZi1zeW5jIG5vZGVzKToKKworMS4gKipSZWNlaXZl IFVwZGF0ZSBtZXNzYWdlcyoqCisyLiAqKkRlc2VyaWFsaXplIFRyZWVFbnRyeSoqIHZpYSBgVHJl ZUVudHJ5OjpkZXNlcmlhbGl6ZV9mcm9tX3VwZGF0ZSgpYAorMy4gKipBcHBseSB0byBkYXRhYmFz ZSoqIHZpYSBgTWVtRGI6OmFwcGx5X3RyZWVfZW50cnkoKWA6CisgICAtIElOU0VSVCBPUiBSRVBM QUNFIGluIFNRTGl0ZQorICAgLSBVcGRhdGUgaW4tbWVtb3J5IHN0cnVjdHVyZXMKKyAgIC0gSGFu ZGxlIGVudHJ5IG1vdmVzIChwYXJlbnQvbmFtZSBjaGFuZ2VzKQorNC4gKipPbiBVcGRhdGVDb21w bGV0ZSoqOiBUcmFuc2l0aW9uIHRvIFN5bmNlZCBtb2RlCisKKyMjIyMgUGhhc2UgNTogTm9ybWFs IE9wZXJhdGlvbnMKKworV2hlbiBpbiAqKlN5bmNlZCoqIG1vZGU6CisKKy0gRlVTRSBvcGVyYXRp b25zIGFyZSBicm9hZGNhc3QgdmlhIGBzZW5kX2Z1c2VfbWVzc2FnZSgpYAorLSBNZXNzYWdlcyBh cmUgZGVsaXZlcmVkIGltbWVkaWF0ZWx5IHZpYSBgZGVsaXZlcl9tZXNzYWdlKClgCistIExlYWRl ciBwZXJpb2RpY2FsbHkgc2VuZHMgYFZlcmlmeVJlcXVlc3RgIGZvciBjaGVja3N1bSBjb21wYXJp c29uCistIE5vZGVzIHJlc3BvbmQgd2l0aCBgVmVyaWZ5YCBjb250YWluaW5nIFNIQS0yNTYgb2Yg ZW50aXJlIGRhdGFiYXNlCistIE1pc21hdGNoZXMgdHJpZ2dlciBjbHVzdGVyIHJlc3luYworCist LS0KKworIyMgUHJvdG9jb2wgRGV0YWlscworCisjIyMgU3RhdGUgTWFjaGluZSBUcmFuc2l0aW9u cworCitCYXNlZCBvbiBhbmFseXNpcyBvZiBDIGltcGxlbWVudGF0aW9uIChgZGZzbS5jYCBsaW5l cyA3OTUtMTIwOSk6CisKKyMjIyMgQ3JpdGljYWwgUHJvdG9jb2wgUnVsZXMKKworMS4gKipFcG9j aCBNYW5hZ2VtZW50Kio6CisgICAtIEVhY2ggbm9kZSBjcmVhdGVzIGxvY2FsIGVwb2NoIGR1cmlu ZyBjb25mY2hnOiBgKGNvdW50ZXIrKywgdGltZSwgb3duX25vZGVpZCwgb3duX3BpZClgCisgICAt ICoqTGVhZGVyIHNlbmRzIFNZTkNfU1RBUlQgd2l0aCBpdHMgZXBvY2gqKgorICAgLSAqKkZvbGxv d2VycyBNVVNUIGFkb3B0IGxlYWRlcidzIGVwb2NoIGZyb20gU1lOQ19TVEFSVCoqIChgZGZzbS0+ c3luY19lcG9jaCA9IGhlYWRlci0+ZXBvY2hgKQorICAgLSBBbGwgU1RBVEUgbWVzc2FnZXMgaW4g c3luYyByb3VuZCB1c2UgYWRvcHRlZCBlcG9jaAorICAgLSBFcG9jaCBtaXNtYXRjaCDihpIgbWVz c2FnZSBkaXNjYXJkZWQgKG1heSBsZWFkIHRvIExFQVZFKQorCisyLiAqKk1lbWJlciBMaXN0IFZh bGlkYXRpb24qKjoKKyAgIC0gQnVpbHQgZnJvbSBgbWVtYmVyX2xpc3RgIGluIGNvbmZjaGcgY2Fs bGJhY2sKKyAgIC0gU3RvcmVkIGluIGBkZnNtLT5zeW5jX2luZm8tPm5vZGVzW11gCisgICAtIFNU QVRFIHNlbmRlciBNVVNUIGJlIGluIHRoaXMgbGlzdAorICAgLSBOb24tbWVtYmVyIFNUQVRFIOKG kiBpbW1lZGlhdGUgTEVBVkUKKworMy4gKipEdXBsaWNhdGUgRGV0ZWN0aW9uKio6CisgICAtIEVh Y2ggbm9kZSBzZW5kcyBTVEFURSBleGFjdGx5IG9uY2UgcGVyIHN5bmMgcm91bmQKKyAgIC0gVHJh Y2tlZCB2aWEgYG5pLT5zdGF0ZWAgcG9pbnRlciAoTlVMTCA9IG5vdCByZWNlaXZlZCwgbm9uLU5V TEwgPSByZWNlaXZlZCkKKyAgIC0gRHVwbGljYXRlIFNUQVRFIGZyb20gc2FtZSBub2RlaWQvcGlk IOKGkiBpbW1lZGlhdGUgTEVBVkUKKyAgIC0gKipSb290IGNhdXNlIG9mIGN1cnJlbnQgUnVzdC9D IHN5bmMgZmFpbHVyZSoqCisKKzQuICoqTWVzc2FnZSBPcmRlcmluZyoqIChvbmUgc3luYyByb3Vu ZCk6CisgICAKKzUuICoqTGVhZGVyIFNlbGVjdGlvbioqOgorICAgLSBEZXRlcm1pbmVkIGJ5IGBs b3dlc3Rfbm9kZWlkYCBmcm9tIG1lbWJlciBsaXN0CisgICAtIFNldCBpbiBjb25mY2hnIGNhbGxi YWNrIGJlZm9yZSBhbnkgbWVzc2FnZXMgc2VudAorICAgLSBVc2VkIHRvIHZhbGlkYXRlIFNZTkNf U1RBUlQgc2VuZGVyIChsb2dnZWQgYnV0IG5vdCBlbmZvcmNlZCkKKyAgIC0gUmUtZWxlY3RlZCBk dXJpbmcgc3RhdGUgcHJvY2Vzc2luZyBiYXNlZCBvbiBEQiB2ZXJzaW9ucworCisjIyMgREZTTSBT dGF0ZXMgKERmc21Nb2RlKQorCit8IFN0YXRlIHwgVmFsdWUgfCBEZXNjcmlwdGlvbiB8IEMgRXF1 aXZhbGVudCB8Cit8LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18 Cit8IGBTdGFydGAgfCAwIHwgSW5pdGlhbCBjb25uZWN0aW9uIHwgYERGU01fTU9ERV9TVEFSVGAg fAorfCBgU3RhcnRTeW5jYCB8IDEgfCBCZWdpbm5pbmcgc3luYyB8IGBERlNNX01PREVfU1RBUlRf U1lOQ2AgfAorfCBgU3luY2VkYCB8IDIgfCBGdWxseSBzeW5jaHJvbml6ZWQgfCBgREZTTV9NT0RF X1NZTkNFRGAgfAorfCBgVXBkYXRlYCB8IDMgfCBSZWNlaXZpbmcgdXBkYXRlcyB8IGBERlNNX01P REVfVVBEQVRFYCB8Cit8IGBMZWF2ZWAgfCAyNTMgfCBMZWF2aW5nIGdyb3VwIHwgYERGU01fTU9E RV9MRUFWRWAgfAorfCBgVmVyc2lvbkVycm9yYCB8IDI1NCB8IFByb3RvY29sIG1pc21hdGNoIHwg YERGU01fTU9ERV9WRVJTSU9OX0VSUk9SYCB8Cit8IGBFcnJvcmAgfCAyNTUgfCBFcnJvciBzdGF0 ZSB8IGBERlNNX01PREVfRVJST1JgIHwKKworIyMjIE1lc3NhZ2UgVHlwZXMgKERmc21NZXNzYWdl VHlwZSkKKworfCBUeXBlIHwgVmFsdWUgfCBQdXJwb3NlIHwKK3wtLS0tLS18LS0tLS0tLXwtLS0t LS0tLS18Cit8IGBOb3JtYWxgIHwgMCB8IEFwcGxpY2F0aW9uIG1lc3NhZ2VzICh3aXRoIGhlYWRl ciArIHBheWxvYWQpIHwKK3wgYFN5bmNTdGFydGAgfCAxIHwgU3RhcnQgc3luYyAoZnJvbSBsZWFk ZXIpIHwKK3wgYFN0YXRlYCB8IDIgfCBGdWxsIHN0YXRlIGRhdGEgfAorfCBgVXBkYXRlYCB8IDMg fCBJbmNyZW1lbnRhbCB1cGRhdGUgfAorfCBgVXBkYXRlQ29tcGxldGVgIHwgNCB8IEVuZCBvZiB1 cGRhdGVzIHwKK3wgYFZlcmlmeVJlcXVlc3RgIHwgNSB8IFJlcXVlc3Qgc3RhdGUgdmVyaWZpY2F0 aW9uIHwKK3wgYFZlcmlmeWAgfCA2IHwgU3RhdGUgY2hlY2tzdW0gcmVzcG9uc2UgfAorCitBbGwg bWVzc2FnZXMgdXNlIEMtY29tcGF0aWJsZSB3aXJlIGZvcm1hdCB3aXRoIGhlYWRlcnMgYW5kIHBh eWxvYWRzLgorCisjIyMgQXBwbGljYXRpb24gTWVzc2FnZSBUeXBlcworCitUaGUgREZTTSBjYW4g Y2FycnkgdHdvIHR5cGVzIG9mIGFwcGxpY2F0aW9uIG1lc3NhZ2VzOgorCisxLiAqKkZ1c2UgTWVz c2FnZXMqKiAoRmlsZXN5c3RlbSBvcGVyYXRpb25zKQorICAgLSBDUEcgR3JvdXA6IGBwbXhjZnNf djFgIChEQ0RCKQorICAgLSBNZXNzYWdlIHR5cGVzOiBgV3JpdGVgLCBgQ3JlYXRlYCwgYERlbGV0 ZWAsIGBNa2RpcmAsIGBSZW5hbWVgLCBgU2V0TXRpbWVgLCBgVW5sb2NrYAorICAgLSBEZWZpbmVk IGluOiBgcG14Y2ZzLWFwaS10eXBlczo6RnVzZU1lc3NhZ2VgCisKKzIuICoqS3ZTdG9yZSBNZXNz YWdlcyoqIChTdGF0dXMvUlJEIHN5bmMpCisgICAtIENQRyBHcm91cDogYHB2ZV9rdnN0b3JlX3Yx YAorICAgLSBNZXNzYWdlIHR5cGVzOiBgRGF0YWAgKGtleS12YWx1ZSBwYWlycyBmb3Igc3RhdHVz IHN5bmMpCisgICAtIERlZmluZWQgaW46IGBwbXhjZnMtYXBpLXR5cGVzOjpLdlN0b3JlTWVzc2Fn ZWAKKworIyMjIFdpcmUgRm9ybWF0IENvbXBhdGliaWxpdHkKKworQWxsIHdpcmUgZm9ybWF0cyBh cmUgKipieXRlLWNvbXBhdGlibGUqKiB3aXRoIHRoZSBDIGltcGxlbWVudGF0aW9uLiBNZXNzYWdl cyBpbmNsdWRlIGFwcHJvcHJpYXRlIGhlYWRlcnMgYW5kIHBheWxvYWRzIGFzIGRlZmluZWQgaW4g dGhlIEMgcHJvdG9jb2wuCisKKyMjIFN5bmNocm9uaXphdGlvbiBGbG93CisKKyMjIyAxLiBOb2Rl IEpvaW4KKworIyMjIDIuIE5vcm1hbCBPcGVyYXRpb24KKworIyMjIDMuIFN0YXRlIFZlcmlmaWNh dGlvbiAoUGVyaW9kaWMpCisKKyMjIEtleSBEaWZmZXJlbmNlcyBmcm9tIEMgSW1wbGVtZW50YXRp b24KKworIyMjIEV2ZW50IExvb3AgQXJjaGl0ZWN0dXJlCisKKyoqQyBWZXJzaW9uOioqCistIFVz ZXMgbGlicWIncyBgcWJfbG9vcGAgZm9yIGV2ZW50IGxvb3AKKy0gQ1BHIGZkIHJlZ2lzdGVyZWQg d2l0aCBgcWJfbG9vcF9wb2xsX2FkZCgpYAorLSBEaXNwYXRjaCBjYWxsZWQgZnJvbSBxYl9sb29w IHdoZW4gZmQgaXMgcmVhZGFibGUKKworKipSdXN0IFZlcnNpb246KioKKy0gVXNlcyB0b2tpbyBh c3luYyBydW50aW1lCistIFNlcnZpY2UgdHJhaXQgcHJvdmlkZXMgYGRpc3BhdGNoKClgIG1ldGhv ZAorLSBTZXJ2aWNlTWFuYWdlciBwb2xscyBmZCB1c2luZyB0b2tpbydzIGFzeW5jIEkvTworLSBO byBxYl9sb29wIGRlcGVuZGVuY3kKKworIyMjIENQRyBJbnN0YW5jZSBNYW5hZ2VtZW50CisKKyoq QyBWZXJzaW9uOioqCistIFNpbmdsZSBERlNNIHN0cnVjdCB3aXRoIGNhbGxiYWNrcworLSBUd28g ZGlmZmVyZW50IENQRyBncm91cHMgY3JlYXRlZCBzZXBhcmF0ZWx5CisKKyoqUnVzdCBWZXJzaW9u OioqCistIEVhY2ggQ1BHIGdyb3VwIGdldHMgaXRzIG93biBgRGZzbWAgaW5zdGFuY2UKKy0gYENs dXN0ZXJEYXRhYmFzZVNlcnZpY2VgIC0gbWFuYWdlcyBgcG14Y2ZzX3YxYCBDUEcgZ3JvdXAgKE1l bURiKQorLSBgU3RhdHVzU3luY1NlcnZpY2VgIC0gbWFuYWdlcyBgcHZlX2t2c3RvcmVfdjFgIENQ RyBncm91cCAoU3RhdHVzL1JSRCkKKy0gQm90aCB1c2Ugc2FtZSBERlNNIHByb3RvY29sIGJ1dCBk aWZmZXJlbnQgY2FsbGJhY2tzCisKKyMjIEVycm9yIEhhbmRsaW5nCisKKyMjIyBTcGxpdC1CcmFp biBQcmV2ZW50aW9uCisKKy0gQ2hlY2tzdW0gdmVyaWZpY2F0aW9uIGRldGVjdHMgZGl2ZXJnZW5j ZQorLSBBdXRvbWF0aWMgcmVzeW5jIG9uIG1pc21hdGNoCistIFZlcnNpb24gbW9ub3RvbmljaXR5 IGVuc3VyZXMgZm9yd2FyZCBwcm9ncmVzcworCisjIyMgTmV0d29yayBQYXJ0aXRpb24gUmVjb3Zl cnkKKworLSBNZW1iZXJzaGlwIGNoYW5nZXMgdHJpZ2dlciBzeW5jCistIEhpZ2hlc3QgdmVyc2lv biBhbHdheXMgd2lucworLSBTdGFsZSBkYXRhIGlzIHNhZmVseSByZXBsYWNlZAorCisjIyMgQ29u c2lzdGVuY3kgR3VhcmFudGVlcworCistIFNRTGl0ZSB0cmFuc2FjdGlvbnMgZW5zdXJlIGF0b21p YyB1cGRhdGVzCistIEluLW1lbW9yeSBzdHJ1Y3R1cmVzIHVwZGF0ZWQgYXRvbWljYWxseQorLSBW ZXJzaW9uIGluY3JlbWVudHMgYXJlIG1vbm90b25pYworLSBBbGwgbm9kZXMgY29udmVyZ2UgdG8g c2FtZSBzdGF0ZQorCisjIyBDb21wYXRpYmlsaXR5IE1hdHJpeAorCit8IEZlYXR1cmUgfCBDIFZl cnNpb24gfCBSdXN0IFZlcnNpb24gfCBDb21wYXRpYmxlIHwKK3wtLS0tLS0tLS18LS0tLS0tLS0t LS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfAorfCBXaXJlIGZvcm1hdCB8IGBkZnNtX21l c3NhZ2VfKl9oZWFkZXJfdGAgfCBgRGZzbU1lc3NhZ2U6OnNlcmlhbGl6ZSgpYCB8IFllcyB8Cit8 IENQRyBwcm90b2NvbCB8IGxpYmNvcm9zeW5jIHwgcnVzdC1jb3Jvc3luYyB8IFllcyB8Cit8IE1l c3NhZ2UgdHlwZXMgfCAwLTYgfCBgRGZzbU1lc3NhZ2VUeXBlYCB8IFllcyB8Cit8IFN0YXRlIG1h Y2hpbmUgfCBgZGZzbV9tb2RlX3RgIHwgYERmc21Nb2RlYCB8IFllcyB8Cit8IFByb3RvY29sIHZl cnNpb24gfCAxIHwgMSB8IFllcyB8Cit8IEdyb3VwIG5hbWVzIHwgYHBteGNmc192MWAsIGBwdmVf a3ZzdG9yZV92MWAgfCBTYW1lIHwgWWVzIHwKKworIyMgS25vd24gSXNzdWVzIC8gVE9ET3MKKwor IyMjIE1pc3NpbmcgRmVhdHVyZXMKKy0gWyBdICoqU3luYyBtZXNzYWdlIGJhdGNoaW5nKio6IEMg dmVyc2lvbiBjYW4gYmF0Y2ggdXBkYXRlcywgUnVzdCBzZW5kcyBpbmRpdmlkdWFsbHkKKy0gWyBd ICoqTWVzc2FnZSBxdWV1ZSBsaW1pdHMqKjogQyBoYXMgTUFYX1FVRVVFX0xFTiwgUnVzdCB1bmJv dW5kZWQgKHBvdGVudGlhbCBtZW1vcnkgaXNzdWUpCistIFsgXSAqKkRldGFpbGVkIGVycm9yIGNv ZGVzKio6IEMgcmV0dXJucyBzcGVjaWZpYyBDU19FUlJfKiBjb2RlcywgUnVzdCB1c2VzIGFueWhv dyBlcnJvcnMKKworIyMjIEJlaGF2aW9yYWwgRGlmZmVyZW5jZXMgKEJlbmlnbikKKy0gKipMb2dn aW5nKio6IFJ1c3QgdXNlcyBgdHJhY2luZ2AgaW5zdGVhZCBvZiBgcWJfbG9nYCAoY29tcGF0aWJs ZSB3aXRoIGpvdXJuYWxkKQorLSAqKlRocmVhZGluZyoqOiBSdXN0IHVzZXMgdG9raW8gdGFza3Ms IEMgdXNlcyBxYl9sb29wIHNpbmdsZS10aHJlYWRlZCBtb2RlbAorLSAqKlRpbWVycyoqOiBSdXN0 IHVzZXMgdG9raW8gdGltZXJzLCBDIHVzZXMgcWJfbG9vcCB0aW1lcnMgKHNhbWUgdGltZW91dCB2 YWx1ZXMpCisKKyMjIyBJbmNvbXBhdGliaWxpdGllcyAoTm9uZSBLbm93bikKK05vIGluY29tcGF0 aWJpbGl0aWVzIGhhdmUgYmVlbiBpZGVudGlmaWVkLiBUaGUgUnVzdCBpbXBsZW1lbnRhdGlvbiBp cyBmdWxseSB3aXJlLWNvbXBhdGlibGUgYW5kIGNhbiBvcGVyYXRlIGluIGEgbWl4ZWQgQy9SdXN0 IGNsdXN0ZXIuCisKKyMjIFJlZmVyZW5jZXMKKworIyMjIEMgSW1wbGVtZW50YXRpb24KKy0gYHNy Yy9wbXhjZnMvZGZzbS5jYCAvIGBkZnNtLmhgIC0gQ29yZSBERlNNIGltcGxlbWVudGF0aW9uCist IGBzcmMvcG14Y2ZzL2RjZGIuY2AgLyBgZGNkYi5oYCAtIERpc3RyaWJ1dGVkIGRhdGFiYXNlIGNv b3JkaW5hdGlvbgorLSBgc3JjL3BteGNmcy9sb29wLmNgIC8gYGxvb3AuaGAgLSBTZXJ2aWNlIGxv b3AgYW5kIG1hbmFnZW1lbnQKKworIyMjIFJlbGF0ZWQgQ3JhdGVzCistICoqcG14Y2ZzLW1lbWRi Kio6IERhdGFiYXNlIGNhbGxiYWNrcyBmb3IgREZTTQorLSAqKnBteGNmcy1zdGF0dXMqKjogU3Rh dHVzIHRyYWNraW5nIGFuZCBrdnN0b3JlCistICoqcG14Y2ZzLWFwaS10eXBlcyoqOiBNZXNzYWdl IHR5cGUgZGVmaW5pdGlvbnMKKy0gKipwbXhjZnMtc2VydmljZXMqKjogU2VydmljZSBmcmFtZXdv cmsgZm9yIGxpZmVjeWNsZSBtYW5hZ2VtZW50CistICoqcnVzdC1jb3Jvc3luYyoqOiBDUEcgYmlu ZGluZ3MgKGV4dGVybmFsIGRlcGVuZGVuY3kpCisKKyMjIyBDb3Jvc3luYyBEb2N1bWVudGF0aW9u CistIENQRyAoQ2xvc2VkIFByb2Nlc3MgR3JvdXApIEFQSTogaHR0cHM6Ly9naXRodWIuY29tL2Nv cm9zeW5jL2Nvcm9zeW5jCistIEdyb3VwIGNvbW11bmljYXRpb24gc2VtYW50aWNzOiBUb3RhbCBv cmRlciwgdmlydHVhbCBzeW5jaHJvbnkKZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2Zz LWRmc20vc3JjL2NhbGxiYWNrcy5ycyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2Nh bGxiYWNrcy5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uN2UzNWI4ZDQK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9jYWxsYmFj a3MucnMKQEAgLTAsMCArMSw1MiBAQAorLy8vIERGU00gYXBwbGljYXRpb24gY2FsbGJhY2tzCisv Ly8KKy8vLyBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0cmFpdCB0aGF0IGFwcGxp Y2F0aW9uIGxheWVycyBpbXBsZW1lbnQKKy8vLyB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgREZTTSBz dGF0ZSBtYWNoaW5lLgordXNlIGNyYXRlOjpOb2RlU3luY0luZm87CisKKy8vLyBDYWxsYmFjayB0 cmFpdCBmb3IgREZTTSBvcGVyYXRpb25zCisvLy8KKy8vLyBUaGUgYXBwbGljYXRpb24gbGF5ZXIg aW1wbGVtZW50cyB0aGlzIHRvIHJlY2VpdmUgREZTTSBldmVudHMuCisvLy8gVGhlIGdlbmVyaWMg cGFyYW1ldGVyIGBNYCBzcGVjaWZpZXMgdGhlIG1lc3NhZ2UgdHlwZSB0aGlzIGNhbGxiYWNrIGhh bmRsZXM6CisvLy8gLSBgQ2FsbGJhY2tzPEZ1c2VNZXNzYWdlPmAgZm9yIG1haW4gZGF0YWJhc2Ug b3BlcmF0aW9ucworLy8vIC0gYENhbGxiYWNrczxLdlN0b3JlTWVzc2FnZT5gIGZvciBzdGF0dXMg c3luY2hyb25pemF0aW9uCisvLy8KKy8vLyBUaGlzIHByb3ZpZGVzIHR5cGUgc2FmZXR5IGJ5IGVu c3VyaW5nIGVhY2ggREZTTSBpbnN0YW5jZSBvbmx5IGRlbGl2ZXJzCisvLy8gdGhlIGNvcnJlY3Qg bWVzc2FnZSB0eXBlIHRvIGl0cyBjYWxsYmFja3MuCitwdWIgdHJhaXQgQ2FsbGJhY2tzPE0+OiBT ZW5kICsgU3luYyB7CisgICAgLy8vIERlbGl2ZXIgYW4gYXBwbGljYXRpb24gbWVzc2FnZQorICAg IC8vLworICAgIC8vLyBUaGUgbWVzc2FnZSB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGdlbmVy aWMgcGFyYW1ldGVyOgorICAgIC8vLyAtIEZ1c2VNZXNzYWdlIGZvciBtYWluIGRhdGFiYXNlIG9w ZXJhdGlvbnMKKyAgICAvLy8gLSBLdlN0b3JlTWVzc2FnZSBmb3Igc3RhdHVzIHN5bmNocm9uaXph dGlvbgorICAgIGZuIGRlbGl2ZXJfbWVzc2FnZSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIG5v ZGVpZDogdTMyLAorICAgICAgICBwaWQ6IHUzMiwKKyAgICAgICAgbWVzc2FnZTogTSwKKyAgICAg ICAgdGltZXN0YW1wOiB1NjQsCisgICAgKSAtPiBhbnlob3c6OlJlc3VsdDwoaTMyLCBib29sKT47 CisKKyAgICAvLy8gQ29tcHV0ZSBzdGF0ZSBjaGVja3N1bSBmb3IgdmVyaWZpY2F0aW9uCisgICAg Zm4gY29tcHV0ZV9jaGVja3N1bSgmc2VsZiwgb3V0cHV0OiAmbXV0IFt1ODsgMzJdKSAtPiBhbnlo b3c6OlJlc3VsdDwoKT47CisKKyAgICAvLy8gR2V0IGN1cnJlbnQgc3RhdGUgZm9yIHN5bmNocm9u aXphdGlvbgorICAgIC8vLworICAgIC8vLyBDYWxsZWQgd2hlbiB3ZSBuZWVkIHRvIHNlbmQgb3Vy IHN0YXRlIHRvIG90aGVyIG5vZGVzIGR1cmluZyBzeW5jLgorICAgIGZuIGdldF9zdGF0ZSgmc2Vs ZikgLT4gYW55aG93OjpSZXN1bHQ8VmVjPHU4Pj47CisKKyAgICAvLy8gUHJvY2VzcyBzdGF0ZSB1 cGRhdGUgZHVyaW5nIHN5bmNocm9uaXphdGlvbgorICAgIGZuIHByb2Nlc3Nfc3RhdGVfdXBkYXRl KCZzZWxmLCBzdGF0ZXM6ICZbTm9kZVN5bmNJbmZvXSkgLT4gYW55aG93OjpSZXN1bHQ8Ym9vbD47 CisKKyAgICAvLy8gUHJvY2VzcyBpbmNyZW1lbnRhbCB1cGRhdGUgZnJvbSBsZWFkZXIKKyAgICAv Ly8KKyAgICAvLy8gVGhlIGxlYWRlciBzZW5kcyBpbmRpdmlkdWFsIFRyZWVFbnRyeSB1cGRhdGVz IGR1cmluZyBzeW5jaHJvbml6YXRpb24uCisgICAgLy8vIFRoZSBkYXRhIGlzIHNlcmlhbGl6ZWQg VHJlZUVudHJ5IGluIEMtY29tcGF0aWJsZSB3aXJlIGZvcm1hdC4KKyAgICBmbiBwcm9jZXNzX3Vw ZGF0ZSgmc2VsZiwgbm9kZWlkOiB1MzIsIHBpZDogdTMyLCBkYXRhOiAmW3U4XSkgLT4gYW55aG93 OjpSZXN1bHQ8KCk+OworCisgICAgLy8vIENvbW1pdCBzeW5jaHJvbml6ZWQgc3RhdGUKKyAgICBm biBjb21taXRfc3RhdGUoJnNlbGYpIC0+IGFueWhvdzo6UmVzdWx0PCgpPjsKKworICAgIC8vLyBD YWxsZWQgd2hlbiBjbHVzdGVyIGJlY29tZXMgc3luY2VkCisgICAgZm4gb25fc3luY2VkKCZzZWxm KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2NsdXN0ZXJf ZGF0YWJhc2Vfc2VydmljZS5ycyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2NsdXN0 ZXJfZGF0YWJhc2Vfc2VydmljZS5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uZGM4NWEzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNt L3NyYy9jbHVzdGVyX2RhdGFiYXNlX3NlcnZpY2UucnMKQEAgLTAsMCArMSwxMTYgQEAKKy8vISBD bHVzdGVyIERhdGFiYXNlIFNlcnZpY2UKKy8vIQorLy8hIFRoaXMgc2VydmljZSBzeW5jaHJvbml6 ZXMgdGhlIGRpc3RyaWJ1dGVkIGNsdXN0ZXIgZGF0YWJhc2UgKHBteGNmcy1tZW1kYikgYWNyb3Nz CisvLyEgYWxsIGNsdXN0ZXIgbm9kZXMgdXNpbmcgREZTTSAoRGlzdHJpYnV0ZWQgRmluaXRlIFN0 YXRlIE1hY2hpbmUpLgorLy8hCisvLyEgRXF1aXZhbGVudCB0byBDIGltcGxlbWVudGF0aW9uJ3Mg c2VydmljZV9kY2RiIChEaXN0cmlidXRlZCBDbHVzdGVyIERhdGFCYXNlKS4KKy8vISBQcm92aWRl cyBhdXRvbWF0aWMgcmV0cnksIGV2ZW50LWRyaXZlbiBDUEcgZGlzcGF0Y2hpbmcsIGFuZCBwZXJp b2RpYyBzdGF0ZSB2ZXJpZmljYXRpb24uCisKK3VzZSBhc3luY190cmFpdDo6YXN5bmNfdHJhaXQ7 Cit1c2UgcG14Y2ZzX3NlcnZpY2VzOjp7RGlzcGF0Y2hBY3Rpb24sIEluaXRSZXN1bHQsIFNlcnZp Y2UsIFNlcnZpY2VFcnJvcn07Cit1c2UgcnVzdF9jb3Jvc3luYzo6Q3NFcnJvcjsKK3VzZSBzdGQ6 OnN5bmM6OkFyYzsKK3VzZSBzdGQ6OnRpbWU6OkR1cmF0aW9uOwordXNlIHRyYWNpbmc6OntkZWJ1 ZywgZXJyb3IsIGluZm8sIHdhcm59OworCit1c2UgY3JhdGU6OkRmc207Cit1c2UgY3JhdGU6Om1l c3NhZ2U6Ok1lc3NhZ2UgYXMgTWVzc2FnZVRyYWl0OworCisvLy8gQ2x1c3RlciBEYXRhYmFzZSBT ZXJ2aWNlCisvLy8KKy8vLyBTeW5jaHJvbml6ZXMgdGhlIGRpc3RyaWJ1dGVkIGNsdXN0ZXIgZGF0 YWJhc2UgKHBteGNmcy1tZW1kYikgYWNyb3NzIGFsbCBub2Rlcy4KKy8vLyBJbXBsZW1lbnRzIHRo ZSBTZXJ2aWNlIHRyYWl0IHRvIHByb3ZpZGU6CisvLy8gLSBBdXRvbWF0aWMgcmV0cnkgaWYgQ1BH IGluaXRpYWxpemF0aW9uIGZhaWxzCisvLy8gLSBFdmVudC1kcml2ZW4gQ1BHIGRpc3BhdGNoaW5n IGZvciBkYXRhYmFzZSByZXBsaWNhdGlvbgorLy8vIC0gUGVyaW9kaWMgc3RhdGUgdmVyaWZpY2F0 aW9uIHZpYSB0aW1lciBjYWxsYmFjaworLy8vCisvLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEMg aW1wbGVtZW50YXRpb24ncyBzZXJ2aWNlX2RjZGIgKERpc3RyaWJ1dGVkIENsdXN0ZXIgRGF0YUJh c2UpLgorLy8vCisvLy8gVGhlIGdlbmVyaWMgcGFyYW1ldGVyIGBNYCBzcGVjaWZpZXMgdGhlIG1l c3NhZ2UgdHlwZSB0aGlzIHNlcnZpY2UgaGFuZGxlcy4KK3B1YiBzdHJ1Y3QgQ2x1c3RlckRhdGFi YXNlU2VydmljZTxNPiB7CisgICAgZGZzbTogQXJjPERmc208TT4+LAorICAgIGZkOiBPcHRpb248 aTMyPiwKK30KKworaW1wbDxNOiBNZXNzYWdlVHJhaXQgKyBDbG9uZSArIFNlbmQgKyBTeW5jICsg J3N0YXRpYz4gQ2x1c3RlckRhdGFiYXNlU2VydmljZTxNPiB7CisgICAgLy8vIENyZWF0ZSBhIG5l dyBjbHVzdGVyIGRhdGFiYXNlIHNlcnZpY2UKKyAgICBwdWIgZm4gbmV3KGRmc206IEFyYzxEZnNt PE0+PikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeyBkZnNtLCBmZDogTm9uZSB9CisgICAgfQor fQorCisjW2FzeW5jX3RyYWl0XQoraW1wbDxNOiBNZXNzYWdlVHJhaXQgKyBDbG9uZSArIFNlbmQg KyBTeW5jICsgJ3N0YXRpYz4gU2VydmljZSBmb3IgQ2x1c3RlckRhdGFiYXNlU2VydmljZTxNPiB7 CisgICAgZm4gbmFtZSgmc2VsZikgLT4gJnN0ciB7CisgICAgICAgICJjbHVzdGVyLWRhdGFiYXNl IgorICAgIH0KKworICAgIGFzeW5jIGZuIGluaXRpYWxpemUoJm11dCBzZWxmKSAtPiBwbXhjZnNf c2VydmljZXM6OlJlc3VsdDxJbml0UmVzdWx0PiB7CisgICAgICAgIGluZm8hKCJJbml0aWFsaXpp bmcgY2x1c3RlciBkYXRhYmFzZSBzZXJ2aWNlIChkY2RiKSIpOworCisgICAgICAgIC8vIEluaXRp YWxpemUgQ1BHIGNvbm5lY3Rpb24gKHRoaXMgYWxzbyBqb2lucyB0aGUgZ3JvdXApCisgICAgICAg IHNlbGYuZGZzbS5pbml0X2NwZygpLm1hcF9lcnIofGV8IHsKKyAgICAgICAgICAgIFNlcnZpY2VF cnJvcjo6SW5pdGlhbGl6YXRpb25GYWlsZWQoZm9ybWF0ISgiREZTTSBDUEcgaW5pdGlhbGl6YXRp b24gZmFpbGVkOiB7ZX0iKSkKKyAgICAgICAgfSk/OworCisgICAgICAgIC8vIEdldCBmaWxlIGRl c2NyaXB0b3IgZm9yIGV2ZW50IG1vbml0b3JpbmcKKyAgICAgICAgbGV0IGZkID0gc2VsZi5kZnNt LmZkX2dldCgpLm1hcF9lcnIofGV8IHsKKyAgICAgICAgICAgIHNlbGYuZGZzbS5zdG9wX3NlcnZp Y2VzKCkub2soKTsKKyAgICAgICAgICAgIFNlcnZpY2VFcnJvcjo6SW5pdGlhbGl6YXRpb25GYWls ZWQoZm9ybWF0ISgiRmFpbGVkIHRvIGdldCBERlNNIGZkOiB7ZX0iKSkKKyAgICAgICAgfSk/Owor CisgICAgICAgIHNlbGYuZmQgPSBTb21lKGZkKTsKKworICAgICAgICBpbmZvISgKKyAgICAgICAg ICAgICJDbHVzdGVyIGRhdGFiYXNlIHNlcnZpY2UgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IHdp dGggZmQge30iLAorICAgICAgICAgICAgZmQKKyAgICAgICAgKTsKKyAgICAgICAgT2soSW5pdFJl c3VsdDo6V2l0aEZpbGVEZXNjcmlwdG9yKGZkKSkKKyAgICB9CisKKyAgICBhc3luYyBmbiBkaXNw YXRjaCgmbXV0IHNlbGYpIC0+IHBteGNmc19zZXJ2aWNlczo6UmVzdWx0PERpc3BhdGNoQWN0aW9u PiB7CisgICAgICAgIG1hdGNoIHNlbGYuZGZzbS5kaXNwYXRjaF9ldmVudHMoKSB7CisgICAgICAg ICAgICBPayhfKSA9PiBPayhEaXNwYXRjaEFjdGlvbjo6Q29udGludWUpLAorICAgICAgICAgICAg RXJyKENzRXJyb3I6OkNzRXJyTGlicmFyeSkgfCBFcnIoQ3NFcnJvcjo6Q3NFcnJCYWRIYW5kbGUp ID0+IHsKKyAgICAgICAgICAgICAgICB3YXJuISgiREZTTSBjb25uZWN0aW9uIGxvc3QsIHJlcXVl c3RpbmcgcmVpbml0aWFsaXphdGlvbiIpOworICAgICAgICAgICAgICAgIE9rKERpc3BhdGNoQWN0 aW9uOjpSZWluaXRpYWxpemUpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBFcnIoZSkgPT4g eworICAgICAgICAgICAgICAgIGVycm9yISgiREZTTSBkaXNwYXRjaCBmYWlsZWQ6IHt9IiwgZSk7 CisgICAgICAgICAgICAgICAgRXJyKFNlcnZpY2VFcnJvcjo6RGlzcGF0Y2hGYWlsZWQoZm9ybWF0 ISgKKyAgICAgICAgICAgICAgICAgICAgIkRGU00gZGlzcGF0Y2ggZmFpbGVkOiB7ZX0iCisgICAg ICAgICAgICAgICAgKSkpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh c3luYyBmbiBmaW5hbGl6ZSgmbXV0IHNlbGYpIC0+IHBteGNmc19zZXJ2aWNlczo6UmVzdWx0PCgp PiB7CisgICAgICAgIGluZm8hKCJGaW5hbGl6aW5nIGNsdXN0ZXIgZGF0YWJhc2Ugc2VydmljZSIp OworCisgICAgICAgIHNlbGYuZmQgPSBOb25lOworCisgICAgICAgIGlmIGxldCBFcnIoZSkgPSBz ZWxmLmRmc20uc3RvcF9zZXJ2aWNlcygpIHsKKyAgICAgICAgICAgIHdhcm4hKCJFcnJvciBzdG9w cGluZyBjbHVzdGVyIGRhdGFiYXNlIHNlcnZpY2VzOiB7fSIsIGUpOworICAgICAgICB9CisKKyAg ICAgICAgaW5mbyEoIkNsdXN0ZXIgZGF0YWJhc2Ugc2VydmljZSBmaW5hbGl6ZWQiKTsKKyAgICAg ICAgT2soKCkpCisgICAgfQorCisgICAgYXN5bmMgZm4gdGltZXJfY2FsbGJhY2soJm11dCBzZWxm KSAtPiBwbXhjZnNfc2VydmljZXM6OlJlc3VsdDwoKT4geworICAgICAgICBkZWJ1ZyEoIkNsdXN0 ZXIgZGF0YWJhc2UgdGltZXIgY2FsbGJhY2s6IGluaXRpYXRpbmcgc3RhdGUgdmVyaWZpY2F0aW9u Iik7CisKKyAgICAgICAgLy8gUmVxdWVzdCBzdGF0ZSB2ZXJpZmljYXRpb24KKyAgICAgICAgaWYg bGV0IEVycihlKSA9IHNlbGYuZGZzbS52ZXJpZnlfcmVxdWVzdCgpIHsKKyAgICAgICAgICAgIHdh cm4hKCJERlNNIHN0YXRlIHZlcmlmaWNhdGlvbiByZXF1ZXN0IGZhaWxlZDoge30iLCBlKTsKKyAg ICAgICAgfQorCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGZuIHRpbWVyX3BlcmlvZCgm c2VsZikgLT4gT3B0aW9uPER1cmF0aW9uPiB7CisgICAgICAgIC8vIE1hdGNoIEMgaW1wbGVtZW50 YXRpb24ncyBEQ0RCX1ZFUklGWV9USU1FICg2MCAqIDYwIHNlY29uZHMpCisgICAgICAgIC8vIFBl cmlvZGljIHN0YXRlIHZlcmlmaWNhdGlvbiBoYXBwZW5zIG9uY2UgcGVyIGhvdXIKKyAgICAgICAg U29tZShEdXJhdGlvbjo6ZnJvbV9zZWNzKDM2MDApKQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Ny Yy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2NwZ19zZXJ2aWNlLnJzIGIvc3JjL3BteGNmcy1y cy9wbXhjZnMtZGZzbS9zcmMvY3BnX3NlcnZpY2UucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAuLmQ3OTY0MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNmcy1ycy9w bXhjZnMtZGZzbS9zcmMvY3BnX3NlcnZpY2UucnMKQEAgLTAsMCArMSwxNjMgQEAKKy8vISBTYWZl LCBpZGlvbWF0aWMgd3JhcHBlciBmb3IgQ29yb3N5bmMgQ1BHIChDbG9zZWQgUHJvY2VzcyBHcm91 cCkKKy8vIQorLy8hIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgdHJhaXQtYmFzZWQgYWJzdHJhY3Rp b24gb3ZlciB0aGUgQ29yb3N5bmMgQ1BHIEMgQVBJLAorLy8hIGhhbmRsaW5nIHRoZSB1bnNhZmUg RkZJIGJvdW5kYXJ5IGFuZCBjYWxsYmFjayBsaWZlY3ljbGUgbWFuYWdlbWVudCBpbnRlcm5hbGx5 LgorCit1c2UgYW55aG93OjpSZXN1bHQ7Cit1c2UgcnVzdF9jb3Jvc3luYzo6e05vZGVJZCwgY3Bn fTsKK3VzZSBzdGQ6OnN5bmM6OkFyYzsKKworLy8vIEhlbHBlciB0byBleHRyYWN0IENwZ0hhbmRs ZXIgZnJvbSBDUEcgY29udGV4dAorLy8vCisvLy8gIyBTYWZldHkKKy8vLyBBc3N1bWVzIGNvbnRl eHQgd2FzIHNldCB0byBhIHZhbGlkICpjb25zdCBBcmM8ZHluIENwZ0hhbmRsZXI+IHBvaW50ZXIK K3Vuc2FmZSBmbiBoYW5kbGVyX2Zyb21fY29udGV4dChoYW5kbGU6IGNwZzo6SGFuZGxlKSAtPiAm J3N0YXRpYyBkeW4gQ3BnSGFuZGxlciB7CisgICAgbGV0IGNvbnRleHQgPSBjcGc6OmNvbnRleHRf Z2V0KGhhbmRsZSkuZXhwZWN0KCJCVUc6IEZhaWxlZCB0byBnZXQgQ1BHIGNvbnRleHQiKTsKKwor ICAgIGFzc2VydF9uZSEoCisgICAgICAgIGNvbnRleHQsIDAsCisgICAgICAgICJCVUc6IENQRyBj b250ZXh0IGlzIG51bGwgLSBDcGdTZXJ2aWNlIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCIKKyAg ICApOworCisgICAgLy8gQ29udGV4dCBwb2ludHMgdG8gYSBsZWFrZWQgQXJjPGR5biBDcGdIYW5k bGVyPgorICAgIC8vIFdlIGJvcnJvdyB0aGUgQXJjIHRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUg aGFuZGxlcgorICAgIGxldCBhcmNfcHRyID0gY29udGV4dCBhcyAqY29uc3QgQXJjPGR5biBDcGdI YW5kbGVyPjsKKyAgICBsZXQgYXJjX3JlZjogJkFyYzxkeW4gQ3BnSGFuZGxlcj4gPSB1bnNhZmUg eyAmKmFyY19wdHIgfTsKKyAgICBhcmNfcmVmLmFzX3JlZigpCit9CisKKy8vLyBUcmFpdCBmb3Ig aGFuZGxpbmcgQ1BHIGV2ZW50cyBpbiBhIHNhZmUsIGlkaW9tYXRpYyB3YXkKKy8vLworLy8vIElt cGxlbWVudG9ycyByZWNlaXZlIGNhbGxiYWNrcyB3aGVuIENQRyBldmVudHMgb2NjdXIuIFRoZSB0 cmFpdCBoYW5kbGVzCisvLy8gYWxsIHVuc2FmZSBwb2ludGVyIGNvbnZlcnNpb24gYW5kIGNvbnRl eHQgbWFuYWdlbWVudCBpbnRlcm5hbGx5LgorcHViIHRyYWl0IENwZ0hhbmRsZXI6IFNlbmQgKyBT eW5jICsgJ3N0YXRpYyB7CisgICAgZm4gb25fZGVsaXZlcigmc2VsZiwgZ3JvdXBfbmFtZTogJnN0 ciwgbm9kZWlkOiBOb2RlSWQsIHBpZDogdTMyLCBtc2c6ICZbdThdKTsKKworICAgIGZuIG9uX2Nv bmZjaGcoCisgICAgICAgICZzZWxmLAorICAgICAgICBncm91cF9uYW1lOiAmc3RyLAorICAgICAg ICBtZW1iZXJfbGlzdDogJltjcGc6OkFkZHJlc3NdLAorICAgICAgICBsZWZ0X2xpc3Q6ICZbY3Bn OjpBZGRyZXNzXSwKKyAgICAgICAgam9pbmVkX2xpc3Q6ICZbY3BnOjpBZGRyZXNzXSwKKyAgICAp OworfQorCisvLy8gU2FmZSB3cmFwcGVyIGZvciBDUEcgaGFuZGxlIHRoYXQgbWFuYWdlcyBjYWxs YmFjayBsaWZlY3ljbGUKKy8vLworLy8vIFRoaXMgc2VydmljZSByZWdpc3RlcnMgY2FsbGJhY2tz IHdpdGggdGhlIENQRyBoYW5kbGUgYW5kIGVuc3VyZXMgcHJvcGVyCisvLy8gY2xlYW51cCB3aGVu IGRyb3BwZWQuIEl0IHVzZXMgQXJjIHJlZmVyZW5jZSBjb3VudGluZyB0byBzYWZlbHkgbWFuYWdl CisvLy8gdGhlIGhhbmRsZXIgbGlmZXRpbWUgYWNyb3NzIHRoZSBGRkkgYm91bmRhcnkuCitwdWIg c3RydWN0IENwZ1NlcnZpY2UgeworICAgIGhhbmRsZTogY3BnOjpIYW5kbGUsCisgICAgaGFuZGxl cjogQXJjPGR5biBDcGdIYW5kbGVyPiwKK30KKworaW1wbCBDcGdTZXJ2aWNlIHsKKyAgICBwdWIg Zm4gbmV3PFQ6IENwZ0hhbmRsZXI+KGhhbmRsZXI6IEFyYzxUPikgLT4gUmVzdWx0PFNlbGY+IHsK KyAgICAgICAgZm4gY3BnX2RlbGl2ZXJfY2FsbGJhY2soCisgICAgICAgICAgICBoYW5kbGU6ICZj cGc6OkhhbmRsZSwKKyAgICAgICAgICAgIGdyb3VwX25hbWU6IFN0cmluZywKKyAgICAgICAgICAg IG5vZGVpZDogTm9kZUlkLAorICAgICAgICAgICAgcGlkOiB1MzIsCisgICAgICAgICAgICBtc2c6 ICZbdThdLAorICAgICAgICAgICAgX21zZ19sZW46IHVzaXplLAorICAgICAgICApIHsKKyAgICAg ICAgICAgIHVuc2FmZSB7CisgICAgICAgICAgICAgICAgbGV0IGhhbmRsZXIgPSBoYW5kbGVyX2Zy b21fY29udGV4dCgqaGFuZGxlKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVyLm9uX2RlbGl2ZXIo Jmdyb3VwX25hbWUsIG5vZGVpZCwgcGlkLCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICB9 CisKKyAgICAgICAgZm4gY3BnX2NvbmZjaGdfY2FsbGJhY2soCisgICAgICAgICAgICBoYW5kbGU6 ICZjcGc6OkhhbmRsZSwKKyAgICAgICAgICAgIGdyb3VwX25hbWU6ICZzdHIsCisgICAgICAgICAg ICBtZW1iZXJfbGlzdDogVmVjPGNwZzo6QWRkcmVzcz4sCisgICAgICAgICAgICBsZWZ0X2xpc3Q6 IFZlYzxjcGc6OkFkZHJlc3M+LAorICAgICAgICAgICAgam9pbmVkX2xpc3Q6IFZlYzxjcGc6OkFk ZHJlc3M+LAorICAgICAgICApIHsKKyAgICAgICAgICAgIHVuc2FmZSB7CisgICAgICAgICAgICAg ICAgbGV0IGhhbmRsZXIgPSBoYW5kbGVyX2Zyb21fY29udGV4dCgqaGFuZGxlKTsKKyAgICAgICAg ICAgICAgICBoYW5kbGVyLm9uX2NvbmZjaGcoZ3JvdXBfbmFtZSwgJm1lbWJlcl9saXN0LCAmbGVm dF9saXN0LCAmam9pbmVkX2xpc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg ICAgbGV0IG1vZGVsX2RhdGEgPSBjcGc6Ok1vZGVsRGF0YTo6TW9kZWxWMShjcGc6Ok1vZGVsMURh dGEgeworICAgICAgICAgICAgZmxhZ3M6IGNwZzo6TW9kZWwxRmxhZ3M6Ok5vbmUsCisgICAgICAg ICAgICBkZWxpdmVyX2ZuOiBTb21lKGNwZ19kZWxpdmVyX2NhbGxiYWNrKSwKKyAgICAgICAgICAg IGNvbmZjaGdfZm46IFNvbWUoY3BnX2NvbmZjaGdfY2FsbGJhY2spLAorICAgICAgICAgICAgdG90 ZW1fY29uZmNoZ19mbjogTm9uZSwKKyAgICAgICAgfSk7CisKKyAgICAgICAgbGV0IGhhbmRsZSA9 IGNwZzo6aW5pdGlhbGl6ZSgmbW9kZWxfZGF0YSwgMCk/OworCisgICAgICAgIGxldCBoYW5kbGVy X2R5bjogQXJjPGR5biBDcGdIYW5kbGVyPiA9IGhhbmRsZXI7CisgICAgICAgIGxldCBsZWFrZWRf YXJjID0gQm94OjpuZXcoQXJjOjpjbG9uZSgmaGFuZGxlcl9keW4pKTsKKyAgICAgICAgbGV0IGFy Y19wdHIgPSBCb3g6OmludG9fcmF3KGxlYWtlZF9hcmMpIGFzICpjb25zdCBfIGFzIHU2NDsKKyAg ICAgICAgY3BnOjpjb250ZXh0X3NldChoYW5kbGUsIGFyY19wdHIpPzsKKworICAgICAgICBPayhT ZWxmIHsKKyAgICAgICAgICAgIGhhbmRsZSwKKyAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXJf ZHluLAorICAgICAgICB9KQorICAgIH0KKworICAgIHB1YiBmbiBqb2luKCZzZWxmLCBncm91cF9u YW1lOiAmc3RyKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgLy8gSU1QT1JUQU5UOiBDIGltcGxl bWVudGF0aW9uIHVzZXMgc3RybGVuKG5hbWUpICsgMSBmb3IgQ1BHIG5hbWUgbGVuZ3RoLAorICAg ICAgICAvLyB3aGljaCBpbmNsdWRlcyB0aGUgdHJhaWxpbmcgbnVsLiBUbyBlbnN1cmUgY29tcGF0 aWJpbGl0eSB3aXRoIEMgbm9kZXMsCisgICAgICAgIC8vIHdlIG11c3QgYWRkIFwwIHRvIHRoZSBn cm91cCBuYW1lLgorICAgICAgICAvLyBTZWUgc3JjL3BteGNmcy9kZnNtLmM6IGRmc20tPmNwZ19n cm91cF9uYW1lLmxlbmd0aCA9IHN0cmxlbihncm91cF9uYW1lKSArIDE7CisgICAgICAgIGxldCBn cm91cF9zdHJpbmcgPSBmb3JtYXQhKCJ7fVwwIiwgZ3JvdXBfbmFtZSk7CisgICAgICAgIHRyYWNp bmc6Ondhcm4hKAorICAgICAgICAgICAgIkNQRyBKT0lOOiBKb2luaW5nIGdyb3VwICd7fScgKHZl cmlmeSBtYXRjaGVzIEMncyBEQ0RCX0NQR19HUk9VUF9OQU1FPSdwdmVfZGNkYl92MScpIiwKKyAg ICAgICAgICAgIGdyb3VwX25hbWUKKyAgICAgICAgKTsKKyAgICAgICAgY3BnOjpqb2luKHNlbGYu aGFuZGxlLCAmZ3JvdXBfc3RyaW5nKT87CisgICAgICAgIHRyYWNpbmc6OmluZm8hKCJDUEcgSk9J TjogU3VjY2Vzc2Z1bGx5IGpvaW5lZCBncm91cCAne30nIiwgZ3JvdXBfbmFtZSk7CisgICAgICAg IE9rKCgpKQorICAgIH0KKworICAgIHB1YiBmbiBsZWF2ZSgmc2VsZiwgZ3JvdXBfbmFtZTogJnN0 cikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIC8vIEluY2x1ZGUgdHJhaWxpbmcgbnVsIHRvIG1h dGNoIEMncyBiZWhhdmlvciAoc2VlIGpvaW4oKSBjb21tZW50KQorICAgICAgICBsZXQgZ3JvdXBf c3RyaW5nID0gZm9ybWF0ISgie31cMCIsIGdyb3VwX25hbWUpOworICAgICAgICBjcGc6OmxlYXZl KHNlbGYuaGFuZGxlLCAmZ3JvdXBfc3RyaW5nKT87CisgICAgICAgIE9rKCgpKQorICAgIH0KKwor ICAgIHB1YiBmbiBtY2FzdCgmc2VsZiwgZ3VhcmFudGVlOiBjcGc6Okd1YXJhbnRlZSwgbXNnOiAm W3U4XSkgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIGNwZzo6bWNhc3Rfam9pbmVkKHNlbGYuaGFu ZGxlLCBndWFyYW50ZWUsIG1zZyk/OworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBwdWIg Zm4gZGlzcGF0Y2goJnNlbGYpIC0+IFJlc3VsdDwoKSwgcnVzdF9jb3Jvc3luYzo6Q3NFcnJvcj4g eworICAgICAgICBjcGc6OmRpc3BhdGNoKHNlbGYuaGFuZGxlLCBydXN0X2Nvcm9zeW5jOjpEaXNw YXRjaEZsYWdzOjpBbGwpCisgICAgfQorCisgICAgcHViIGZuIGZkKCZzZWxmKSAtPiBSZXN1bHQ8 aTMyPiB7CisgICAgICAgIE9rKGNwZzo6ZmRfZ2V0KHNlbGYuaGFuZGxlKT8pCisgICAgfQorCisg ICAgcHViIGZuIGhhbmRsZXIoJnNlbGYpIC0+ICZBcmM8ZHluIENwZ0hhbmRsZXI+IHsKKyAgICAg ICAgJnNlbGYuaGFuZGxlcgorICAgIH0KKworICAgIHB1YiBmbiBoYW5kbGUoJnNlbGYpIC0+IGNw Zzo6SGFuZGxlIHsKKyAgICAgICAgc2VsZi5oYW5kbGUKKyAgICB9Cit9CisKK2ltcGwgRHJvcCBm b3IgQ3BnU2VydmljZSB7CisgICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKKyAgICAgICAgaWYgbGV0 IE9rKGNvbnRleHQpID0gY3BnOjpjb250ZXh0X2dldChzZWxmLmhhbmRsZSkKKyAgICAgICAgICAg ICYmIGNvbnRleHQgIT0gMAorICAgICAgICB7CisgICAgICAgICAgICB1bnNhZmUgeworICAgICAg ICAgICAgICAgIGxldCBfYm94ZWQgPSBCb3g6OmZyb21fcmF3KGNvbnRleHQgYXMgKm11dCBBcmM8 ZHluIENwZ0hhbmRsZXI+KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxl dCBfID0gY3BnOjpmaW5hbGl6ZShzZWxmLmhhbmRsZSk7CisgICAgfQorfQorCit1bnNhZmUgaW1w bCBTZW5kIGZvciBDcGdTZXJ2aWNlIHt9Cit1bnNhZmUgaW1wbCBTeW5jIGZvciBDcGdTZXJ2aWNl IHt9CmRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9kZnNtX21lc3Nh Z2UucnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9kZnNtX21lc3NhZ2UucnMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjA1NGYwNmI4Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvZGZzbV9tZXNzYWdlLnJzCkBAIC0w LDAgKzEsNzI4IEBACisvLy8gREZTTSBQcm90b2NvbCBNZXNzYWdlIFR5cGVzCisvLy8KKy8vLyBU aGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBEZnNtTWVzc2FnZSBlbnVtIHdoaWNoIGVuY2Fwc3VsYXRl cyBhbGwgREZTTSBwcm90b2NvbCBtZXNzYWdlcworLy8vIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBk YXRhLCBwcm92aWRpbmcgdHlwZS1zYWZlIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlv bi4KKy8vLworLy8vIFdpcmUgZm9ybWF0IG1hdGNoZXMgQyBpbXBsZW1lbnRhdGlvbidzIGRmc21f bWVzc2FnZV8qX2hlYWRlcl90IHN0cnVjdHVyZXMgZm9yIGNvbXBhdGliaWxpdHkuCit1c2UgYW55 aG93OjpSZXN1bHQ7Cit1c2UgcG14Y2ZzX21lbWRiOjpUcmVlRW50cnk7CisKK3VzZSBzdXBlcjo6 bWVzc2FnZTo6TWVzc2FnZSBhcyBNZXNzYWdlVHJhaXQ7Cit1c2Ugc3VwZXI6OnR5cGVzOjp7RGZz bU1lc3NhZ2VUeXBlLCBTeW5jRXBvY2h9OworCisvLy8gREZTTSBwcm90b2NvbCBtZXNzYWdlIHdp dGggdHlwZWQgdmFyaWFudHMKKy8vLworLy8vIEVhY2ggdmFyaWFudCBjb3JyZXNwb25kcyB0byBh IG1lc3NhZ2UgdHlwZSBpbiB0aGUgREZTTSBwcm90b2NvbCBhbmQgY2FycmllcworLy8vIHRoZSBh cHByb3ByaWF0ZSBwYXlsb2FkIGRhdGEuIFRoZSB3aXJlIGZvcm1hdCBtYXRjaGVzIHRoZSBDIGlt cGxlbWVudGF0aW9uOgorLy8vCisvLy8gRm9yIE5vcm1hbCBtZXNzYWdlczogZGZzbV9tZXNzYWdl X25vcm1hbF9oZWFkZXJfdCAoMjQgYnl0ZXMpICsgZnVzZV9kYXRhCisvLy8gYGBgdGV4dAorLy8v IFt0eXBlOiB1MTZdW3N1YnR5cGU6IHUxNl1bcHJvdG9jb2w6IHUzMl1bdGltZTogdTMyXVtyZXNl cnZlZDogdTMyXVtjb3VudDogdTY0XVtmdXNlX2RhdGEuLi5dCisvLy8gYGBgCisvLy8KKy8vLyBU aGUgZ2VuZXJpYyBwYXJhbWV0ZXIgYE1gIHNwZWNpZmllcyB0aGUgYXBwbGljYXRpb24gbWVzc2Fn ZSB0eXBlIGFuZCBtdXN0IGltcGxlbWVudAorLy8vIHRoZSBgTWVzc2FnZWAgdHJhaXQgZm9yIHNl cmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uOgorLy8vIC0gYERmc21NZXNzYWdlPEZ1c2VNZXNz YWdlPmAgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMKKy8vLyAtIGBEZnNtTWVzc2FnZTxLdlN0b3Jl TWVzc2FnZT5gIGZvciBzdGF0dXMgc3luY2hyb25pemF0aW9uCisjW2Rlcml2ZShEZWJ1ZywgQ2xv bmUpXQorcHViIGVudW0gRGZzbU1lc3NhZ2U8TT4KK3doZXJlCisgICAgTTogTWVzc2FnZVRyYWl0 LAoreworICAgIC8vLyBSZWd1bGFyIGFwcGxpY2F0aW9uIG1lc3NhZ2UKKyAgICAvLy8KKyAgICAv Ly8gQ29udGFpbnMgYSB0eXBlZCBhcHBsaWNhdGlvbiBtZXNzYWdlIChGdXNlTWVzc2FnZSBvciBL dlN0b3JlTWVzc2FnZSkuCisgICAgLy8vIEMgd2lyZSBmb3JtYXQ6IGRmc21fbWVzc2FnZV9ub3Jt YWxfaGVhZGVyX3QgKyBhcHBsaWNhdGlvbl9tZXNzYWdlIGRhdGEKKyAgICBOb3JtYWwgeworICAg ICAgICBtc2dfY291bnQ6IHU2NCwKKyAgICAgICAgdGltZXN0YW1wOiB1MzIsICAgICAgICAvLyBV bml4IHRpbWVzdGFtcCAobWF0Y2hlcyBDJ3MgdTMyKQorICAgICAgICBwcm90b2NvbF92ZXJzaW9u OiB1MzIsIC8vIFByb3RvY29sIHZlcnNpb24KKyAgICAgICAgbWVzc2FnZTogTSwgICAgICAgICAg ICAvLyBUeXBlZCBtZXNzYWdlIChGdXNlTWVzc2FnZSBvciBLdlN0b3JlTWVzc2FnZSkKKyAgICB9 LAorCisgICAgLy8vIFN0YXJ0IHN5bmNocm9uaXphdGlvbiBzaWduYWwgZnJvbSBsZWFkZXIgKG5v IHBheWxvYWQpCisgICAgLy8vIEMgd2lyZSBmb3JtYXQ6IGRmc21fbWVzc2FnZV9zdGF0ZV9oZWFk ZXJfdCAoMzIgYnl0ZXM6IDE2IGJhc2UgKyAxNiBlcG9jaCkKKyAgICBTeW5jU3RhcnQgeyBzeW5j X2Vwb2NoOiBTeW5jRXBvY2ggfSwKKworICAgIC8vLyBTdGF0ZSBkYXRhIGZyb20gYW5vdGhlciBu b2RlIGR1cmluZyBzeW5jCisgICAgLy8vCisgICAgLy8vIFdpcmUgZm9ybWF0OiBkZnNtX21lc3Nh Z2Vfc3RhdGVfaGVhZGVyX3QgKDMyIGJ5dGVzKSArIFtzdGF0ZV9kYXRhOiByYXcgYnl0ZXNdCisg ICAgU3RhdGUgeworICAgICAgICBzeW5jX2Vwb2NoOiBTeW5jRXBvY2gsCisgICAgICAgIGRhdGE6 IFZlYzx1OD4sCisgICAgfSwKKworICAgIC8vLyBTdGF0ZSB1cGRhdGUgZnJvbSBsZWFkZXIKKyAg ICAvLy8KKyAgICAvLy8gQyB3aXJlIGZvcm1hdDogZGZzbV9tZXNzYWdlX3N0YXRlX2hlYWRlcl90 ICgzMiBieXRlczogMTYgYmFzZSArIDE2IGVwb2NoKSArIFRyZWVFbnRyeSBmaWVsZHMKKyAgICAv Ly8gVGhpcyBpcyBzZW50IGJ5IHRoZSBsZWFkZXIgZHVyaW5nIHN5bmNocm9uaXphdGlvbiB0byB1 cGRhdGUgZm9sbG93ZXJzCisgICAgLy8vIHdpdGggaW5kaXZpZHVhbCBkYXRhYmFzZSBlbnRyaWVz IHRoYXQgZGlmZmVyIGZyb20gdGhlaXIgc3RhdGUuCisgICAgVXBkYXRlIHsKKyAgICAgICAgc3lu Y19lcG9jaDogU3luY0Vwb2NoLAorICAgICAgICB0cmVlX2VudHJ5OiBUcmVlRW50cnksCisgICAg fSwKKworICAgIC8vLyBVcGRhdGUgY29tcGxldGUgc2lnbmFsIGZyb20gbGVhZGVyIChubyBwYXls b2FkKQorICAgIC8vLyBDIHdpcmUgZm9ybWF0OiBkZnNtX21lc3NhZ2Vfc3RhdGVfaGVhZGVyX3Qg KDMyIGJ5dGVzOiAxNiBiYXNlICsgMTYgZXBvY2gpCisgICAgVXBkYXRlQ29tcGxldGUgeyBzeW5j X2Vwb2NoOiBTeW5jRXBvY2ggfSwKKworICAgIC8vLyBWZXJpZmljYXRpb24gcmVxdWVzdCBmcm9t IGxlYWRlcgorICAgIC8vLworICAgIC8vLyBXaXJlIGZvcm1hdDogZGZzbV9tZXNzYWdlX3N0YXRl X2hlYWRlcl90ICgzMiBieXRlcykgKyBbY3N1bV9pZDogdTY0XQorICAgIFZlcmlmeVJlcXVlc3Qg eyBzeW5jX2Vwb2NoOiBTeW5jRXBvY2gsIGNzdW1faWQ6IHU2NCB9LAorCisgICAgLy8vIFZlcmlm aWNhdGlvbiByZXNwb25zZSB3aXRoIGNoZWNrc3VtCisgICAgLy8vCisgICAgLy8vIFdpcmUgZm9y bWF0OiBkZnNtX21lc3NhZ2Vfc3RhdGVfaGVhZGVyX3QgKDMyIGJ5dGVzKSArIFtjc3VtX2lkOiB1 NjRdW2NoZWNrc3VtOiBbdTg7IDMyXV0KKyAgICBWZXJpZnkgeworICAgICAgICBzeW5jX2Vwb2No OiBTeW5jRXBvY2gsCisgICAgICAgIGNzdW1faWQ6IHU2NCwKKyAgICAgICAgY2hlY2tzdW06IFt1 ODsgMzJdLAorICAgIH0sCit9CisKK2ltcGw8TT4gRGZzbU1lc3NhZ2U8TT4KK3doZXJlCisgICAg TTogTWVzc2FnZVRyYWl0LAoreworICAgIC8vLyBQcm90b2NvbCB2ZXJzaW9uIChzaG91bGQgbWF0 Y2ggY2x1c3Rlci13aWRlKQorICAgIHB1YiBjb25zdCBERUZBVUxUX1BST1RPQ09MX1ZFUlNJT046 IHUzMiA9IDE7CisKKyAgICAvLy8gR2V0IHRoZSBtZXNzYWdlIHR5cGUgZGlzY3JpbWluYW50Cisg ICAgcHViIGZuIG1lc3NhZ2VfdHlwZSgmc2VsZikgLT4gRGZzbU1lc3NhZ2VUeXBlIHsKKyAgICAg ICAgbWF0Y2ggc2VsZiB7CisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6Tm9ybWFsIHsgLi4gfSA9 PiBEZnNtTWVzc2FnZVR5cGU6Ok5vcm1hbCwKKyAgICAgICAgICAgIERmc21NZXNzYWdlOjpTeW5j U3RhcnQgeyAuLiB9ID0+IERmc21NZXNzYWdlVHlwZTo6U3luY1N0YXJ0LAorICAgICAgICAgICAg RGZzbU1lc3NhZ2U6OlN0YXRlIHsgLi4gfSA9PiBEZnNtTWVzc2FnZVR5cGU6OlN0YXRlLAorICAg ICAgICAgICAgRGZzbU1lc3NhZ2U6OlVwZGF0ZSB7IC4uIH0gPT4gRGZzbU1lc3NhZ2VUeXBlOjpV cGRhdGUsCisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6VXBkYXRlQ29tcGxldGUgeyAuLiB9ID0+ IERmc21NZXNzYWdlVHlwZTo6VXBkYXRlQ29tcGxldGUsCisgICAgICAgICAgICBEZnNtTWVzc2Fn ZTo6VmVyaWZ5UmVxdWVzdCB7IC4uIH0gPT4gRGZzbU1lc3NhZ2VUeXBlOjpWZXJpZnlSZXF1ZXN0 LAorICAgICAgICAgICAgRGZzbU1lc3NhZ2U6OlZlcmlmeSB7IC4uIH0gPT4gRGZzbU1lc3NhZ2VU eXBlOjpWZXJpZnksCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gU2VyaWFsaXplIG1lc3Nh Z2UgdG8gQy1jb21wYXRpYmxlIHdpcmUgZm9ybWF0CisgICAgLy8vCisgICAgLy8vIEZvciBOb3Jt YWwvVXBkYXRlOiBkZnNtX21lc3NhZ2Vfbm9ybWFsX2hlYWRlcl90ICgyNCBieXRlcykgKyBhcHBs aWNhdGlvbl9kYXRhCisgICAgLy8vIEZvcm1hdDogW3R5cGU6IHUxNl1bc3VidHlwZTogdTE2XVtw cm90b2NvbDogdTMyXVt0aW1lOiB1MzJdW3Jlc2VydmVkOiB1MzJdW2NvdW50OiB1NjRdW2RhdGEu Li5dCisgICAgcHViIGZuIHNlcmlhbGl6ZSgmc2VsZikgLT4gVmVjPHU4PiB7CisgICAgICAgIG1h dGNoIHNlbGYgeworICAgICAgICAgICAgRGZzbU1lc3NhZ2U6Ok5vcm1hbCB7CisgICAgICAgICAg ICAgICAgbXNnX2NvdW50LAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwKKyAgICAgICAgICAg ICAgICBwcm90b2NvbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAg ICAgICB9ID0+IHNlbGYuc2VyaWFsaXplX25vcm1hbF9tZXNzYWdlKCptc2dfY291bnQsICp0aW1l c3RhbXAsICpwcm90b2NvbF92ZXJzaW9uLCBtZXNzYWdlKSwKKyAgICAgICAgICAgIF8gPT4gc2Vs Zi5zZXJpYWxpemVfc3RhdGVfbWVzc2FnZSgpLAorICAgICAgICB9CisgICAgfQorCisgICAgLy8v IFNlcmlhbGl6ZSBhIE5vcm1hbCBtZXNzYWdlIHdpdGggQy1jb21wYXRpYmxlIGhlYWRlcgorICAg IGZuIHNlcmlhbGl6ZV9ub3JtYWxfbWVzc2FnZSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIG1z Z19jb3VudDogdTY0LAorICAgICAgICB0aW1lc3RhbXA6IHUzMiwKKyAgICAgICAgcHJvdG9jb2xf dmVyc2lvbjogdTMyLAorICAgICAgICBtZXNzYWdlOiAmTSwKKyAgICApIC0+IFZlYzx1OD4gewor ICAgICAgICBsZXQgbXNnX3R5cGUgPSBzZWxmLm1lc3NhZ2VfdHlwZSgpIGFzIHUxNjsKKyAgICAg ICAgbGV0IHN1YnR5cGUgPSBtZXNzYWdlLm1lc3NhZ2VfdHlwZSgpOworICAgICAgICBsZXQgYXBw X2RhdGEgPSBtZXNzYWdlLnNlcmlhbGl6ZSgpOworCisgICAgICAgIC8vIEMgaGVhZGVyOiB0eXBl ICh1MTYpICsgc3VidHlwZSAodTE2KSArIHByb3RvY29sICh1MzIpICsgdGltZSAodTMyKSArIHJl c2VydmVkICh1MzIpICsgY291bnQgKHU2NCkgPSAyNCBieXRlcworICAgICAgICBsZXQgbXV0IG1l c3NhZ2UgPSBWZWM6OndpdGhfY2FwYWNpdHkoMjQgKyBhcHBfZGF0YS5sZW4oKSk7CisKKyAgICAg ICAgLy8gZGZzbV9tZXNzYWdlX2hlYWRlcl90IGZpZWxkcworICAgICAgICBtZXNzYWdlLmV4dGVu ZF9mcm9tX3NsaWNlKCZtc2dfdHlwZS50b19sZV9ieXRlcygpKTsKKyAgICAgICAgbWVzc2FnZS5l eHRlbmRfZnJvbV9zbGljZSgmc3VidHlwZS50b19sZV9ieXRlcygpKTsKKyAgICAgICAgbWVzc2Fn ZS5leHRlbmRfZnJvbV9zbGljZSgmcHJvdG9jb2xfdmVyc2lvbi50b19sZV9ieXRlcygpKTsKKyAg ICAgICAgbWVzc2FnZS5leHRlbmRfZnJvbV9zbGljZSgmdGltZXN0YW1wLnRvX2xlX2J5dGVzKCkp OworICAgICAgICBtZXNzYWdlLmV4dGVuZF9mcm9tX3NsaWNlKCYwdTMyLnRvX2xlX2J5dGVzKCkp OyAvLyByZXNlcnZlZAorCisgICAgICAgIC8vIGNvdW50IGZpZWxkCisgICAgICAgIG1lc3NhZ2Uu ZXh0ZW5kX2Zyb21fc2xpY2UoJm1zZ19jb3VudC50b19sZV9ieXRlcygpKTsKKworICAgICAgICAv LyBhcHBsaWNhdGlvbiBtZXNzYWdlIGRhdGEKKyAgICAgICAgbWVzc2FnZS5leHRlbmRfZnJvbV9z bGljZSgmYXBwX2RhdGEpOworCisgICAgICAgIG1lc3NhZ2UKKyAgICB9CisKKyAgICAvLy8gU2Vy aWFsaXplIHN0YXRlIG1lc3NhZ2VzIChub24tTm9ybWFsKSB3aXRoIEMtY29tcGF0aWJsZSBoZWFk ZXIKKyAgICAvLy8gQyB3aXJlIGZvcm1hdDogZGZzbV9tZXNzYWdlX3N0YXRlX2hlYWRlcl90ICgz MiBieXRlcykgKyBwYXlsb2FkCisgICAgLy8vIEhlYWRlciBicmVha2Rvd246IGJhc2UgKDE2IGJ5 dGVzKSArIGVwb2NoICgxNiBieXRlcykKKyAgICBmbiBzZXJpYWxpemVfc3RhdGVfbWVzc2FnZSgm c2VsZikgLT4gVmVjPHU4PiB7CisgICAgICAgIGxldCBtc2dfdHlwZSA9IHNlbGYubWVzc2FnZV90 eXBlKCkgYXMgdTE2OworICAgICAgICBsZXQgKHN5bmNfZXBvY2gsIHBheWxvYWQpID0gc2VsZi5l eHRyYWN0X2Vwb2NoX2FuZF9wYXlsb2FkKCk7CisKKyAgICAgICAgLy8gRm9yIHN0YXRlIG1lc3Nh Z2VzOiBkZnNtX21lc3NhZ2Vfc3RhdGVfaGVhZGVyX3QgKDMyIGJ5dGVzOiAxNiBiYXNlICsgMTYg ZXBvY2gpICsgcGF5bG9hZAorICAgICAgICBsZXQgbXV0IG1lc3NhZ2UgPSBWZWM6OndpdGhfY2Fw YWNpdHkoMzIgKyBwYXlsb2FkLmxlbigpKTsKKworICAgICAgICAvLyBCYXNlIGhlYWRlciAoMTYg Ynl0ZXMpOiB0eXBlLCBzdWJ0eXBlLCBwcm90b2NvbCwgdGltZSwgcmVzZXJ2ZWQKKyAgICAgICAg bWVzc2FnZS5leHRlbmRfZnJvbV9zbGljZSgmbXNnX3R5cGUudG9fbGVfYnl0ZXMoKSk7CisgICAg ICAgIG1lc3NhZ2UuZXh0ZW5kX2Zyb21fc2xpY2UoJjB1MTYudG9fbGVfYnl0ZXMoKSk7IC8vIHN1 YnR5cGUgKHVudXNlZCkKKyAgICAgICAgbWVzc2FnZS5leHRlbmRfZnJvbV9zbGljZSgmU2VsZjo6 REVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OLnRvX2xlX2J5dGVzKCkpOworCisgICAgICAgIGxldCB0 aW1lc3RhbXAgPSBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU6Om5vdygpCisgICAgICAgICAgICAuZHVy YXRpb25fc2luY2Uoc3RkOjp0aW1lOjpVTklYX0VQT0NIKQorICAgICAgICAgICAgLnVud3JhcF9v cl9kZWZhdWx0KCkKKyAgICAgICAgICAgIC5hc19zZWNzKCkgYXMgdTMyOworICAgICAgICBtZXNz YWdlLmV4dGVuZF9mcm9tX3NsaWNlKCZ0aW1lc3RhbXAudG9fbGVfYnl0ZXMoKSk7CisgICAgICAg IG1lc3NhZ2UuZXh0ZW5kX2Zyb21fc2xpY2UoJjB1MzIudG9fbGVfYnl0ZXMoKSk7IC8vIHJlc2Vy dmVkCisKKyAgICAgICAgLy8gRXBvY2ggaGVhZGVyICgxNiBieXRlcyk6IGVwb2NoLCB0aW1lLCBu b2RlaWQsIHBpZAorICAgICAgICBtZXNzYWdlLmV4dGVuZF9mcm9tX3NsaWNlKCZzeW5jX2Vwb2No LnNlcmlhbGl6ZSgpKTsKKworICAgICAgICAvLyBQYXlsb2FkCisgICAgICAgIG1lc3NhZ2UuZXh0 ZW5kX2Zyb21fc2xpY2UoJnBheWxvYWQpOworCisgICAgICAgIG1lc3NhZ2UKKyAgICB9CisKKyAg ICAvLy8gRXh0cmFjdCBzeW5jX2Vwb2NoIGFuZCBwYXlsb2FkIGZyb20gc3RhdGUgbWVzc2FnZXMK KyAgICBmbiBleHRyYWN0X2Vwb2NoX2FuZF9wYXlsb2FkKCZzZWxmKSAtPiAoU3luY0Vwb2NoLCBW ZWM8dTg+KSB7CisgICAgICAgIG1hdGNoIHNlbGYgeworICAgICAgICAgICAgRGZzbU1lc3NhZ2U6 Ok5vcm1hbCB7IC4uIH0gPT4geworICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlISgiTm9ybWFs IG1lc3NhZ2VzIHVzZSBzZXJpYWxpemVfbm9ybWFsX21lc3NhZ2UiKQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgRGZzbU1lc3NhZ2U6OlN5bmNTdGFydCB7IHN5bmNfZXBvY2ggfSA9PiAoKnN5 bmNfZXBvY2gsIFZlYzo6bmV3KCkpLAorICAgICAgICAgICAgRGZzbU1lc3NhZ2U6OlN0YXRlIHsg c3luY19lcG9jaCwgZGF0YSB9ID0+ICgqc3luY19lcG9jaCwgZGF0YS5jbG9uZSgpKSwKKyAgICAg ICAgICAgIERmc21NZXNzYWdlOjpVcGRhdGUgeworICAgICAgICAgICAgICAgIHN5bmNfZXBvY2gs CisgICAgICAgICAgICAgICAgdHJlZV9lbnRyeSwKKyAgICAgICAgICAgIH0gPT4gKCpzeW5jX2Vw b2NoLCB0cmVlX2VudHJ5LnNlcmlhbGl6ZV9mb3JfdXBkYXRlKCkpLAorICAgICAgICAgICAgRGZz bU1lc3NhZ2U6OlVwZGF0ZUNvbXBsZXRlIHsgc3luY19lcG9jaCB9ID0+ICgqc3luY19lcG9jaCwg VmVjOjpuZXcoKSksCisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6VmVyaWZ5UmVxdWVzdCB7Cisg ICAgICAgICAgICAgICAgc3luY19lcG9jaCwKKyAgICAgICAgICAgICAgICBjc3VtX2lkLAorICAg ICAgICAgICAgfSA9PiAoKnN5bmNfZXBvY2gsIGNzdW1faWQudG9fbGVfYnl0ZXMoKS50b192ZWMo KSksCisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6VmVyaWZ5IHsKKyAgICAgICAgICAgICAgICBz eW5jX2Vwb2NoLAorICAgICAgICAgICAgICAgIGNzdW1faWQsCisgICAgICAgICAgICAgICAgY2hl Y2tzdW0sCisgICAgICAgICAgICB9ID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgbXV0IGRhdGEg PSBWZWM6OndpdGhfY2FwYWNpdHkoOCArIDMyKTsKKyAgICAgICAgICAgICAgICBkYXRhLmV4dGVu ZF9mcm9tX3NsaWNlKCZjc3VtX2lkLnRvX2xlX2J5dGVzKCkpOworICAgICAgICAgICAgICAgIGRh dGEuZXh0ZW5kX2Zyb21fc2xpY2UoY2hlY2tzdW0pOworICAgICAgICAgICAgICAgICgqc3luY19l cG9jaCwgZGF0YSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBE ZXNlcmlhbGl6ZSBtZXNzYWdlIGZyb20gQy1jb21wYXRpYmxlIHdpcmUgZm9ybWF0CisgICAgLy8v CisgICAgLy8vIE5vcm1hbCBtZXNzYWdlczogW2Jhc2UgaGVhZGVyOiAxNiBieXRlc11bY291bnQ6 IHU2NF1bYXBwIGRhdGFdCisgICAgLy8vIFN0YXRlIG1lc3NhZ2VzOiAgW2Jhc2UgaGVhZGVyOiAx NiBieXRlc11bZXBvY2g6IDE2IGJ5dGVzXVtwYXlsb2FkXQorICAgIC8vLworICAgIC8vLyAjIEFy Z3VtZW50cworICAgIC8vLyAqIGBkYXRhYCAtIFJhdyBtZXNzYWdlIGJ5dGVzIGZyb20gQ1BHCisg ICAgcHViIGZuIGRlc2VyaWFsaXplKGRhdGE6ICZbdThdKSAtPiBSZXN1bHQ8U2VsZj4geworICAg ICAgICBpZiBkYXRhLmxlbigpIDwgMTYgeworICAgICAgICAgICAgYW55aG93OjpiYWlsISgKKyAg ICAgICAgICAgICAgICAiTWVzc2FnZSB0b28gc2hvcnQ6IHt9IGJ5dGVzIChuZWVkIGF0IGxlYXN0 IDE2IGZvciBoZWFkZXIpIiwKKyAgICAgICAgICAgICAgICBkYXRhLmxlbigpCisgICAgICAgICAg ICApOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgZGZzbV9tZXNzYWdlX2hlYWRlcl90 ICgxNiBieXRlcykKKyAgICAgICAgbGV0IG1zZ190eXBlID0gdTE2Ojpmcm9tX2xlX2J5dGVzKFtk YXRhWzBdLCBkYXRhWzFdXSk7CisgICAgICAgIGxldCBzdWJ0eXBlID0gdTE2Ojpmcm9tX2xlX2J5 dGVzKFtkYXRhWzJdLCBkYXRhWzNdXSk7CisgICAgICAgIGxldCBwcm90b2NvbF92ZXJzaW9uID0g dTMyOjpmcm9tX2xlX2J5dGVzKFtkYXRhWzRdLCBkYXRhWzVdLCBkYXRhWzZdLCBkYXRhWzddXSk7 CisgICAgICAgIGxldCB0aW1lc3RhbXAgPSB1MzI6OmZyb21fbGVfYnl0ZXMoW2RhdGFbOF0sIGRh dGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXV0pOworICAgICAgICBsZXQgX3Jlc2VydmVkID0gdTMy Ojpmcm9tX2xlX2J5dGVzKFtkYXRhWzEyXSwgZGF0YVsxM10sIGRhdGFbMTRdLCBkYXRhWzE1XV0p OworCisgICAgICAgIGxldCBkZnNtX3R5cGUgPSBEZnNtTWVzc2FnZVR5cGU6OnRyeV9mcm9tKG1z Z190eXBlKT87CisKKyAgICAgICAgLy8gTm9ybWFsIG1lc3NhZ2VzIGhhdmUgZGlmZmVyZW50IHN0 cnVjdHVyZSB0aGFuIHN0YXRlIG1lc3NhZ2VzCisgICAgICAgIGlmIGRmc21fdHlwZSA9PSBEZnNt TWVzc2FnZVR5cGU6Ok5vcm1hbCB7CisgICAgICAgICAgICAvLyBOb3JtYWw6IFtiYXNlOiAxNl1b Y291bnQ6IDhdW2FwcF9kYXRhOiAuLi5dCisgICAgICAgICAgICBsZXQgcGF5bG9hZCA9ICZkYXRh WzE2Li5dOworICAgICAgICAgICAgU2VsZjo6ZGVzZXJpYWxpemVfbm9ybWFsX21lc3NhZ2Uoc3Vi dHlwZSwgcHJvdG9jb2xfdmVyc2lvbiwgdGltZXN0YW1wLCBwYXlsb2FkKQorICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgLy8gU3RhdGUgbWVzc2FnZXM6IFtiYXNlOiAxNl1bZXBvY2g6IDE2 XVtwYXlsb2FkOiAuLi5dCisgICAgICAgICAgICBpZiBkYXRhLmxlbigpIDwgMzIgeworICAgICAg ICAgICAgICAgIGFueWhvdzo6YmFpbCEoCisgICAgICAgICAgICAgICAgICAgICJTdGF0ZSBtZXNz YWdlIHRvbyBzaG9ydDoge30gYnl0ZXMgKG5lZWQgYXQgbGVhc3QgMzIgZm9yIHN0YXRlIGhlYWRl cikiLAorICAgICAgICAgICAgICAgICAgICBkYXRhLmxlbigpCisgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxldCBzeW5jX2Vwb2NoID0gU3luY0Vwb2NoOjpk ZXNlcmlhbGl6ZSgmZGF0YVsxNi4uMzJdKQorICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlfCBh bnlob3c6OmFueWhvdyEoIkZhaWxlZCB0byBkZXNlcmlhbGl6ZSBzeW5jIGVwb2NoOiB7ZX0iKSk/ OworICAgICAgICAgICAgbGV0IHBheWxvYWQgPSAmZGF0YVszMi4uXTsKKyAgICAgICAgICAgIFNl bGY6OmRlc2VyaWFsaXplX3N0YXRlX21lc3NhZ2UoZGZzbV90eXBlLCBzeW5jX2Vwb2NoLCBwYXls b2FkKQorICAgICAgICB9CisgICAgfQorCisgICAgLy8vIERlc2VyaWFsaXplIGEgTm9ybWFsIG1l c3NhZ2UKKyAgICBmbiBkZXNlcmlhbGl6ZV9ub3JtYWxfbWVzc2FnZSgKKyAgICAgICAgc3VidHlw ZTogdTE2LAorICAgICAgICBwcm90b2NvbF92ZXJzaW9uOiB1MzIsCisgICAgICAgIHRpbWVzdGFt cDogdTMyLAorICAgICAgICBwYXlsb2FkOiAmW3U4XSwKKyAgICApIC0+IFJlc3VsdDxTZWxmPiB7 CisgICAgICAgIC8vIE5vcm1hbCBtZXNzYWdlcyBoYXZlIGNvdW50IGZpZWxkICh1NjQpIGFmdGVy IGJhc2UgaGVhZGVyCisgICAgICAgIGlmIHBheWxvYWQubGVuKCkgPCA4IHsKKyAgICAgICAgICAg IGFueWhvdzo6YmFpbCEoIk5vcm1hbCBtZXNzYWdlIHRvbyBzaG9ydDogbmVlZCBjb3VudCBmaWVs ZCIpOworICAgICAgICB9CisgICAgICAgIGxldCBtc2dfY291bnQgPSB1NjQ6OmZyb21fbGVfYnl0 ZXMocGF5bG9hZFswLi44XS50cnlfaW50bygpLnVud3JhcCgpKTsKKyAgICAgICAgbGV0IGFwcF9k YXRhID0gJnBheWxvYWRbOC4uXTsKKworICAgICAgICAvLyBEZXNlcmlhbGl6ZSB1c2luZyB0aGUg TWVzc2FnZVRyYWl0CisgICAgICAgIGxldCBtZXNzYWdlID0gTTo6ZGVzZXJpYWxpemUoc3VidHlw ZSwgYXBwX2RhdGEpPzsKKworICAgICAgICBPayhEZnNtTWVzc2FnZTo6Tm9ybWFsIHsKKyAgICAg ICAgICAgIG1zZ19jb3VudCwKKyAgICAgICAgICAgIHRpbWVzdGFtcCwKKyAgICAgICAgICAgIHBy b3RvY29sX3ZlcnNpb24sCisgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICB9KQorICAgIH0K KworICAgIC8vLyBEZXNlcmlhbGl6ZSBhIHN0YXRlIG1lc3NhZ2UgKHdpdGggZXBvY2gpCisgICAg Zm4gZGVzZXJpYWxpemVfc3RhdGVfbWVzc2FnZSgKKyAgICAgICAgZGZzbV90eXBlOiBEZnNtTWVz c2FnZVR5cGUsCisgICAgICAgIHN5bmNfZXBvY2g6IFN5bmNFcG9jaCwKKyAgICAgICAgcGF5bG9h ZDogJlt1OF0sCisgICAgKSAtPiBSZXN1bHQ8U2VsZj4geworICAgICAgICBtYXRjaCBkZnNtX3R5 cGUgeworICAgICAgICAgICAgRGZzbU1lc3NhZ2VUeXBlOjpOb3JtYWwgPT4geworICAgICAgICAg ICAgICAgIHVucmVhY2hhYmxlISgiTm9ybWFsIG1lc3NhZ2VzIHVzZSBkZXNlcmlhbGl6ZV9ub3Jt YWxfbWVzc2FnZSIpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZnNtTWVzc2FnZVR5cGU6 OlVwZGF0ZSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHRyZWVfZW50cnkgPSBUcmVlRW50cnk6 OmRlc2VyaWFsaXplX2Zyb21fdXBkYXRlKHBheWxvYWQpPzsKKyAgICAgICAgICAgICAgICBPayhE ZnNtTWVzc2FnZTo6VXBkYXRlIHsKKyAgICAgICAgICAgICAgICAgICAgc3luY19lcG9jaCwKKyAg ICAgICAgICAgICAgICAgICAgdHJlZV9lbnRyeSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgRGZzbU1lc3NhZ2VUeXBlOjpTeW5jU3RhcnQgPT4gT2soRGZz bU1lc3NhZ2U6OlN5bmNTdGFydCB7IHN5bmNfZXBvY2ggfSksCisgICAgICAgICAgICBEZnNtTWVz c2FnZVR5cGU6OlN0YXRlID0+IE9rKERmc21NZXNzYWdlOjpTdGF0ZSB7CisgICAgICAgICAgICAg ICAgc3luY19lcG9jaCwKKyAgICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLnRvX3ZlYygpLAor ICAgICAgICAgICAgfSksCisgICAgICAgICAgICBEZnNtTWVzc2FnZVR5cGU6OlVwZGF0ZUNvbXBs ZXRlID0+IE9rKERmc21NZXNzYWdlOjpVcGRhdGVDb21wbGV0ZSB7IHN5bmNfZXBvY2ggfSksCisg ICAgICAgICAgICBEZnNtTWVzc2FnZVR5cGU6OlZlcmlmeVJlcXVlc3QgPT4geworICAgICAgICAg ICAgICAgIGlmIHBheWxvYWQubGVuKCkgPCA4IHsKKyAgICAgICAgICAgICAgICAgICAgYW55aG93 OjpiYWlsISgiVmVyaWZ5UmVxdWVzdCBtZXNzYWdlIHRvbyBzaG9ydCIpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBsZXQgY3N1bV9pZCA9IHU2NDo6ZnJvbV9sZV9ieXRlcyhw YXlsb2FkWzAuLjhdLnRyeV9pbnRvKCkudW53cmFwKCkpOworICAgICAgICAgICAgICAgIE9rKERm c21NZXNzYWdlOjpWZXJpZnlSZXF1ZXN0IHsKKyAgICAgICAgICAgICAgICAgICAgc3luY19lcG9j aCwKKyAgICAgICAgICAgICAgICAgICAgY3N1bV9pZCwKKyAgICAgICAgICAgICAgICB9KQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgRGZzbU1lc3NhZ2VUeXBlOjpWZXJpZnkgPT4geworICAg ICAgICAgICAgICAgIGlmIHBheWxvYWQubGVuKCkgPCA0MCB7CisgICAgICAgICAgICAgICAgICAg IGFueWhvdzo6YmFpbCEoIlZlcmlmeSBtZXNzYWdlIHRvbyBzaG9ydCIpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBsZXQgY3N1bV9pZCA9IHU2NDo6ZnJvbV9sZV9ieXRlcyhw YXlsb2FkWzAuLjhdLnRyeV9pbnRvKCkudW53cmFwKCkpOworICAgICAgICAgICAgICAgIGxldCBt dXQgY2hlY2tzdW0gPSBbMHU4OyAzMl07CisgICAgICAgICAgICAgICAgY2hlY2tzdW0uY29weV9m cm9tX3NsaWNlKCZwYXlsb2FkWzguLjQwXSk7CisgICAgICAgICAgICAgICAgT2soRGZzbU1lc3Nh Z2U6OlZlcmlmeSB7CisgICAgICAgICAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAgICAg ICAgICAgICAgIGNzdW1faWQsCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLAorICAgICAg ICAgICAgICAgIH0pCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8g SGVscGVyIHRvIGNyZWF0ZSBhIE5vcm1hbCBtZXNzYWdlIGZyb20gYW4gYXBwbGljYXRpb24gbWVz c2FnZQorICAgIHB1YiBmbiBmcm9tX21lc3NhZ2UobXNnX2NvdW50OiB1NjQsIG1lc3NhZ2U6IE0s IHByb3RvY29sX3ZlcnNpb246IHUzMikgLT4gU2VsZiB7CisgICAgICAgIGxldCB0aW1lc3RhbXAg PSBzdGQ6OnRpbWU6OlN5c3RlbVRpbWU6Om5vdygpCisgICAgICAgICAgICAuZHVyYXRpb25fc2lu Y2Uoc3RkOjp0aW1lOjpVTklYX0VQT0NIKQorICAgICAgICAgICAgLnVud3JhcF9vcl9kZWZhdWx0 KCkKKyAgICAgICAgICAgIC5hc19zZWNzKCkgYXMgdTMyOworCisgICAgICAgIERmc21NZXNzYWdl OjpOb3JtYWwgeworICAgICAgICAgICAgbXNnX2NvdW50LAorICAgICAgICAgICAgdGltZXN0YW1w LAorICAgICAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiwKKyAgICAgICAgICAgIG1lc3NhZ2UsCisg ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gSGVscGVyIHRvIGNyZWF0ZSBhbiBVcGRhdGUgbWVz c2FnZSBmcm9tIGEgVHJlZUVudHJ5CisgICAgLy8vCisgICAgLy8vIFVzZWQgYnkgdGhlIGxlYWRl ciBkdXJpbmcgc3luY2hyb25pemF0aW9uIHRvIHNlbmQgaW5kaXZpZHVhbCBkYXRhYmFzZSBlbnRy aWVzCisgICAgLy8vIHRvIG5vZGVzIHRoYXQgbmVlZCB0byBjYXRjaCB1cC4gTWF0Y2hlcyBDJ3Mg ZGNkYl9zZW5kX3VwZGF0ZV9pbm9kZSgpLgorICAgIHB1YiBmbiBmcm9tX3RyZWVfZW50cnkodHJl ZV9lbnRyeTogVHJlZUVudHJ5LCBzeW5jX2Vwb2NoOiBTeW5jRXBvY2gpIC0+IFNlbGYgeworICAg ICAgICBEZnNtTWVzc2FnZTo6VXBkYXRlIHsKKyAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAg ICAgICAgICB0cmVlX2VudHJ5LAorICAgICAgICB9CisgICAgfQorfQorCisjW2NmZyh0ZXN0KV0K K21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworICAgIHVzZSBjcmF0ZTo6RnVzZU1lc3Nh Z2U7CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zeW5jX3N0YXJ0X3JvdW5kdHJpcCgpIHsK KyAgICAgICAgbGV0IHN5bmNfZXBvY2ggPSBTeW5jRXBvY2ggeworICAgICAgICAgICAgZXBvY2g6 IDEsCisgICAgICAgICAgICB0aW1lOiAxMjM0NTY3ODkwLAorICAgICAgICAgICAgbm9kZWlkOiAx LAorICAgICAgICAgICAgcGlkOiAxMDAwLAorICAgICAgICB9OworICAgICAgICBsZXQgbXNnOiBE ZnNtTWVzc2FnZTxGdXNlTWVzc2FnZT4gPSBEZnNtTWVzc2FnZTo6U3luY1N0YXJ0IHsgc3luY19l cG9jaCB9OworICAgICAgICBsZXQgc2VyaWFsaXplZCA9IG1zZy5zZXJpYWxpemUoKTsKKyAgICAg ICAgbGV0IGRlc2VyaWFsaXplZCA9IERmc21NZXNzYWdlOjo8RnVzZU1lc3NhZ2U+OjpkZXNlcmlh bGl6ZSgmc2VyaWFsaXplZCkudW53cmFwKCk7CisKKyAgICAgICAgYXNzZXJ0ISgKKyAgICAgICAg ICAgIG1hdGNoZXMhKGRlc2VyaWFsaXplZCwgRGZzbU1lc3NhZ2U6OlN5bmNTdGFydCB7IHN5bmNf ZXBvY2g6IGUgfSBpZiBlID09IHN5bmNfZXBvY2gpCisgICAgICAgICk7CisgICAgfQorCisgICAg I1t0ZXN0XQorICAgIGZuIHRlc3Rfbm9ybWFsX3JvdW5kdHJpcCgpIHsKKyAgICAgICAgbGV0IGZ1 c2VfbXNnID0gRnVzZU1lc3NhZ2U6OkNyZWF0ZSB7CisgICAgICAgICAgICBwYXRoOiAiL3Rlc3Qv ZmlsZSIudG9fc3RyaW5nKCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IG1zZzogRGZzbU1l c3NhZ2U8RnVzZU1lc3NhZ2U+ID0gRGZzbU1lc3NhZ2U6Ok5vcm1hbCB7CisgICAgICAgICAgICBt c2dfY291bnQ6IDQyLAorICAgICAgICAgICAgdGltZXN0YW1wOiAxMjM0NTY3ODkwLAorICAgICAg ICAgICAgcHJvdG9jb2xfdmVyc2lvbjogRGZzbU1lc3NhZ2U6OjxGdXNlTWVzc2FnZT46OkRFRkFV TFRfUFJPVE9DT0xfVkVSU0lPTiwKKyAgICAgICAgICAgIG1lc3NhZ2U6IGZ1c2VfbXNnLmNsb25l KCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBtc2cuc2VyaWFsaXpl KCk7CisgICAgICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBEZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdl Pjo6ZGVzZXJpYWxpemUoJnNlcmlhbGl6ZWQpLnVud3JhcCgpOworCisgICAgICAgIG1hdGNoIGRl c2VyaWFsaXplZCB7CisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6Tm9ybWFsIHsKKyAgICAgICAg ICAgICAgICBtc2dfY291bnQsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wLAorICAgICAgICAg ICAgICAgIHByb3RvY29sX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAg ICAgICAgIH0gPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEobXNnX2NvdW50LCA0Mik7 CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxISh0aW1lc3RhbXAsIDEyMzQ1Njc4OTApOworICAg ICAgICAgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX3Zl cnNpb24sCisgICAgICAgICAgICAgICAgICAgIERmc21NZXNzYWdlOjo8RnVzZU1lc3NhZ2U+OjpE RUZBVUxUX1BST1RPQ09MX1ZFUlNJT04KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgIGFzc2VydF9lcSEobWVzc2FnZSwgZnVzZV9tc2cpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgXyA9PiBwYW5pYyEoIldyb25nIG1lc3NhZ2UgdHlwZSIpLAorICAgICAgICB9CisgICAg fQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyaWZ5X3JlcXVlc3Rfcm91bmR0cmlwKCkg eworICAgICAgICBsZXQgc3luY19lcG9jaCA9IFN5bmNFcG9jaCB7CisgICAgICAgICAgICBlcG9j aDogMiwKKyAgICAgICAgICAgIHRpbWU6IDEyMzQ1Njc4OTEsCisgICAgICAgICAgICBub2RlaWQ6 IDIsCisgICAgICAgICAgICBwaWQ6IDIwMDAsCisgICAgICAgIH07CisgICAgICAgIGxldCBtc2c6 IERmc21NZXNzYWdlPEZ1c2VNZXNzYWdlPiA9IERmc21NZXNzYWdlOjpWZXJpZnlSZXF1ZXN0IHsK KyAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAgICAgICBjc3VtX2lkOiAweDEyMzQ1Njc4 OUFCQ0RFRjAsCisgICAgICAgIH07CisgICAgICAgIGxldCBzZXJpYWxpemVkID0gbXNnLnNlcmlh bGl6ZSgpOworICAgICAgICBsZXQgZGVzZXJpYWxpemVkID0gRGZzbU1lc3NhZ2U6OjxGdXNlTWVz c2FnZT46OmRlc2VyaWFsaXplKCZzZXJpYWxpemVkKS51bndyYXAoKTsKKworICAgICAgICBtYXRj aCBkZXNlcmlhbGl6ZWQgeworICAgICAgICAgICAgRGZzbU1lc3NhZ2U6OlZlcmlmeVJlcXVlc3Qg eworICAgICAgICAgICAgICAgIHN5bmNfZXBvY2g6IGUsCisgICAgICAgICAgICAgICAgY3N1bV9p ZCwKKyAgICAgICAgICAgIH0gPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEoZSwgc3lu Y19lcG9jaCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxIShjc3VtX2lkLCAweDEyMzQ1Njc4 OUFCQ0RFRjApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIldyb25n IG1lc3NhZ2UgdHlwZSIpLAorICAgICAgICB9CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZu IHRlc3RfdmVyaWZ5X3JvdW5kdHJpcCgpIHsKKyAgICAgICAgbGV0IHN5bmNfZXBvY2ggPSBTeW5j RXBvY2ggeworICAgICAgICAgICAgZXBvY2g6IDMsCisgICAgICAgICAgICB0aW1lOiAxMjM0NTY3 ODkyLAorICAgICAgICAgICAgbm9kZWlkOiAzLAorICAgICAgICAgICAgcGlkOiAzMDAwLAorICAg ICAgICB9OworICAgICAgICBsZXQgY2hlY2tzdW0gPSBbNDJ1ODsgMzJdOworICAgICAgICBsZXQg bXNnOiBEZnNtTWVzc2FnZTxGdXNlTWVzc2FnZT4gPSBEZnNtTWVzc2FnZTo6VmVyaWZ5IHsKKyAg ICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAgICAgICBjc3VtX2lkOiAweDExMjIzMzQ0NTU2 Njc3ODgsCisgICAgICAgICAgICBjaGVja3N1bSwKKyAgICAgICAgfTsKKyAgICAgICAgbGV0IHNl cmlhbGl6ZWQgPSBtc2cuc2VyaWFsaXplKCk7CisgICAgICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBE ZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6ZGVzZXJpYWxpemUoJnNlcmlhbGl6ZWQpLnVud3Jh cCgpOworCisgICAgICAgIG1hdGNoIGRlc2VyaWFsaXplZCB7CisgICAgICAgICAgICBEZnNtTWVz c2FnZTo6VmVyaWZ5IHsKKyAgICAgICAgICAgICAgICBzeW5jX2Vwb2NoOiBlLAorICAgICAgICAg ICAgICAgIGNzdW1faWQsCisgICAgICAgICAgICAgICAgY2hlY2tzdW06IHJlY3ZfY2hlY2tzdW0s CisgICAgICAgICAgICB9ID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGUsIHN5bmNf ZXBvY2gpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEoY3N1bV9pZCwgMHgxMTIyMzM0NDU1 NjY3Nzg4KTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKHJlY3ZfY2hlY2tzdW0sIGNoZWNr c3VtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJXcm9uZyBtZXNz YWdlIHR5cGUiKSwKKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0 X2ludmFsaWRfbWFnaWMoKSB7CisgICAgICAgIGxldCBkYXRhID0gdmVjIVsweEFBLCAweDAwLCAw eDAxLCAweDAyXTsKKyAgICAgICAgYXNzZXJ0IShEZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6 ZGVzZXJpYWxpemUoJmRhdGEpLmlzX2VycigpKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAg Zm4gdGVzdF90b29fc2hvcnQoKSB7CisgICAgICAgIGxldCBkYXRhID0gdmVjIVsweEZGXTsKKyAg ICAgICAgYXNzZXJ0IShEZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6ZGVzZXJpYWxpemUoJmRh dGEpLmlzX2VycigpKTsKKyAgICB9CisKKyAgICAvLyA9PT09PSBFZGdlIENhc2UgVGVzdHMgPT09 PT0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3N0YXRlX21lc3NhZ2VfdG9vX3Nob3J0KCkg eworICAgICAgICAvLyBTdGF0ZSBtZXNzYWdlcyBuZWVkIGF0IGxlYXN0IDMyIGJ5dGVzICgxNiBi YXNlICsgMTYgZXBvY2gpCisgICAgICAgIGxldCBtdXQgZGF0YSA9IHZlYyFbMHU4OyAzMV07IC8v IE9uZSBieXRlIHNob3J0CisgICAgICAgIC8vIFNldCBtZXNzYWdlIHR5cGUgdG8gU3RhdGUgKDIp CisgICAgICAgIGRhdGFbMC4uMl0uY29weV9mcm9tX3NsaWNlKCYydTE2LnRvX2xlX2J5dGVzKCkp OworCisgICAgICAgIGxldCByZXN1bHQgPSBEZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6ZGVz ZXJpYWxpemUoJmRhdGEpOworICAgICAgICBhc3NlcnQhKHJlc3VsdC5pc19lcnIoKSwgIlN0YXRl IG1lc3NhZ2Ugd2l0aCAzMSBieXRlcyBzaG91bGQgZmFpbCIpOworICAgICAgICBhc3NlcnQhKHJl c3VsdC51bndyYXBfZXJyKCkudG9fc3RyaW5nKCkuY29udGFpbnMoInRvbyBzaG9ydCIpKTsKKyAg ICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9ub3JtYWxfbWVzc2FnZV9taXNzaW5nX2Nv dW50KCkgeworICAgICAgICAvLyBOb3JtYWwgbWVzc2FnZXMgbmVlZCBjb3VudCBmaWVsZCAodTY0 KSBhZnRlciAxNi1ieXRlIGhlYWRlcgorICAgICAgICBsZXQgbXV0IGRhdGEgPSB2ZWMhWzB1ODsg MjBdOyAvLyBIZWFkZXIgKyA0IGJ5dGVzIChub3QgZW5vdWdoIGZvciB1NjQgY291bnQpCisgICAg ICAgIC8vIFNldCBtZXNzYWdlIHR5cGUgdG8gTm9ybWFsICgwKQorICAgICAgICBkYXRhWzAuLjJd LmNvcHlfZnJvbV9zbGljZSgmMHUxNi50b19sZV9ieXRlcygpKTsKKworICAgICAgICBsZXQgcmVz dWx0ID0gRGZzbU1lc3NhZ2U6OjxGdXNlTWVzc2FnZT46OmRlc2VyaWFsaXplKCZkYXRhKTsKKyAg ICAgICAgYXNzZXJ0ISgKKyAgICAgICAgICAgIHJlc3VsdC5pc19lcnIoKSwKKyAgICAgICAgICAg ICJOb3JtYWwgbWVzc2FnZSB3aXRob3V0IGZ1bGwgY291bnQgZmllbGQgc2hvdWxkIGZhaWwiCisg ICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyaWZ5X21lc3Nh Z2VfdHJ1bmNhdGVkX2NoZWNrc3VtKCkgeworICAgICAgICAvLyBWZXJpZnkgbWVzc2FnZXMgbmVl ZCBjc3VtX2lkICg4IGJ5dGVzKSArIGNoZWNrc3VtICgzMiBieXRlcykgPSA0MCBieXRlcyBwYXls b2FkCisgICAgICAgIGxldCBzeW5jX2Vwb2NoID0gU3luY0Vwb2NoIHsKKyAgICAgICAgICAgIGVw b2NoOiAxLAorICAgICAgICAgICAgdGltZTogMTIzLAorICAgICAgICAgICAgbm9kZWlkOiAxLAor ICAgICAgICAgICAgcGlkOiAxMDAsCisgICAgICAgIH07CisgICAgICAgIGxldCBtdXQgZGF0YSA9 IFZlYzo6bmV3KCk7CisKKyAgICAgICAgLy8gQmFzZSBoZWFkZXIgKDE2IGJ5dGVzKQorICAgICAg ICBkYXRhLmV4dGVuZF9mcm9tX3NsaWNlKCY2dTE2LnRvX2xlX2J5dGVzKCkpOyAvLyBWZXJpZnkg bWVzc2FnZSB0eXBlCisgICAgICAgIGRhdGEuZXh0ZW5kX2Zyb21fc2xpY2UoJjB1MTYudG9fbGVf Ynl0ZXMoKSk7IC8vIHN1YnR5cGUKKyAgICAgICAgZGF0YS5leHRlbmRfZnJvbV9zbGljZSgmMXUz Mi50b19sZV9ieXRlcygpKTsgLy8gcHJvdG9jb2wKKyAgICAgICAgZGF0YS5leHRlbmRfZnJvbV9z bGljZSgmMTIzdTMyLnRvX2xlX2J5dGVzKCkpOyAvLyB0aW1lCisgICAgICAgIGRhdGEuZXh0ZW5k X2Zyb21fc2xpY2UoJjB1MzIudG9fbGVfYnl0ZXMoKSk7IC8vIHJlc2VydmVkCisKKyAgICAgICAg Ly8gRXBvY2ggKDE2IGJ5dGVzKQorICAgICAgICBkYXRhLmV4dGVuZF9mcm9tX3NsaWNlKCZzeW5j X2Vwb2NoLnNlcmlhbGl6ZSgpKTsKKworICAgICAgICAvLyBUcnVuY2F0ZWQgcGF5bG9hZCAob25s eSAzOSBieXRlcyBpbnN0ZWFkIG9mIDQwKQorICAgICAgICBkYXRhLmV4dGVuZF9mcm9tX3NsaWNl KCYweDEyMzQ1Njc4dTY0LnRvX2xlX2J5dGVzKCkpOworICAgICAgICBkYXRhLmV4dGVuZF9mcm9t X3NsaWNlKCZbMHU4OyAzMV0pOyAvLyBPbmx5IDMxIGJ5dGVzIG9mIGNoZWNrc3VtCisKKyAgICAg ICAgbGV0IHJlc3VsdCA9IERmc21NZXNzYWdlOjo8RnVzZU1lc3NhZ2U+OjpkZXNlcmlhbGl6ZSgm ZGF0YSk7CisgICAgICAgIGFzc2VydCEoCisgICAgICAgICAgICByZXN1bHQuaXNfZXJyKCksCisg ICAgICAgICAgICAiVmVyaWZ5IG1lc3NhZ2Ugd2l0aCB0cnVuY2F0ZWQgY2hlY2tzdW0gc2hvdWxk IGZhaWwiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdXBk YXRlX21lc3NhZ2Vfd2l0aF90cmVlX2VudHJ5KCkgeworICAgICAgICB1c2UgcG14Y2ZzX21lbWRi OjpUcmVlRW50cnk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgdmFsaWQgdHJlZSBlbnRyeSB3aXRo IG1hdGNoaW5nIHNpemUKKyAgICAgICAgbGV0IGRhdGEgPSB2ZWMhWzEsIDIsIDMsIDQsIDVdOwor ICAgICAgICBsZXQgdHJlZV9lbnRyeSA9IFRyZWVFbnRyeSB7CisgICAgICAgICAgICBpbm9kZTog NDIsCisgICAgICAgICAgICBwYXJlbnQ6IDAsCisgICAgICAgICAgICB2ZXJzaW9uOiAxLAorICAg ICAgICAgICAgd3JpdGVyOiAwLAorICAgICAgICAgICAgbmFtZTogInRlc3RmaWxlIi50b19zdHJp bmcoKSwKKyAgICAgICAgICAgIG10aW1lOiAxMjM0NTY3ODkwLAorICAgICAgICAgICAgc2l6ZTog ZGF0YS5sZW4oKSwgLy8gc2l6ZSBtdXN0IG1hdGNoIGRhdGEubGVuKCkKKyAgICAgICAgICAgIGVu dHJ5X3R5cGU6IDgsICAgIC8vIERUX1JFRyAocmVndWxhciBmaWxlKQorICAgICAgICAgICAgZGF0 YSwKKyAgICAgICAgfTsKKworICAgICAgICBsZXQgc3luY19lcG9jaCA9IFN5bmNFcG9jaCB7Cisg ICAgICAgICAgICBlcG9jaDogNSwKKyAgICAgICAgICAgIHRpbWU6IDk5OSwKKyAgICAgICAgICAg IG5vZGVpZDogMiwKKyAgICAgICAgICAgIHBpZDogMjAwLAorICAgICAgICB9OworICAgICAgICBs ZXQgbXNnOiBEZnNtTWVzc2FnZTxGdXNlTWVzc2FnZT4gPSBEZnNtTWVzc2FnZTo6VXBkYXRlIHsK KyAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAgICAgICB0cmVlX2VudHJ5OiB0cmVlX2Vu dHJ5LmNsb25lKCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBtc2cu c2VyaWFsaXplKCk7CisgICAgICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBEZnNtTWVzc2FnZTo6PEZ1 c2VNZXNzYWdlPjo6ZGVzZXJpYWxpemUoJnNlcmlhbGl6ZWQpLnVud3JhcCgpOworCisgICAgICAg IG1hdGNoIGRlc2VyaWFsaXplZCB7CisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6VXBkYXRlIHsK KyAgICAgICAgICAgICAgICBzeW5jX2Vwb2NoOiBlLAorICAgICAgICAgICAgICAgIHRyZWVfZW50 cnk6IHJlY3ZfZW50cnksCisgICAgICAgICAgICB9ID0+IHsKKyAgICAgICAgICAgICAgICBhc3Nl cnRfZXEhKGUsIHN5bmNfZXBvY2gpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEocmVjdl9l bnRyeS5pbm9kZSwgdHJlZV9lbnRyeS5pbm9kZSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2Vx IShyZWN2X2VudHJ5Lm5hbWUsIHRyZWVfZW50cnkubmFtZSk7CisgICAgICAgICAgICAgICAgYXNz ZXJ0X2VxIShyZWN2X2VudHJ5LnNpemUsIHRyZWVfZW50cnkuc2l6ZSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBfID0+IHBhbmljISgiV3JvbmcgbWVzc2FnZSB0eXBlIiksCisgICAgICAg IH0KKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF91cGRhdGVfY29tcGxldGVfcm91 bmR0cmlwKCkgeworICAgICAgICBsZXQgc3luY19lcG9jaCA9IFN5bmNFcG9jaCB7CisgICAgICAg ICAgICBlcG9jaDogMTAsCisgICAgICAgICAgICB0aW1lOiA1NTU1LAorICAgICAgICAgICAgbm9k ZWlkOiAzLAorICAgICAgICAgICAgcGlkOiAzMDAsCisgICAgICAgIH07CisgICAgICAgIGxldCBt c2c6IERmc21NZXNzYWdlPEZ1c2VNZXNzYWdlPiA9IERmc21NZXNzYWdlOjpVcGRhdGVDb21wbGV0 ZSB7IHN5bmNfZXBvY2ggfTsKKworICAgICAgICBsZXQgc2VyaWFsaXplZCA9IG1zZy5zZXJpYWxp emUoKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIHNlcmlhbGl6ZWQubGVuKCks CisgICAgICAgICAgICAzMiwKKyAgICAgICAgICAgICJVcGRhdGVDb21wbGV0ZSBzaG91bGQgYmUg ZXhhY3RseSAzMiBieXRlcyAoaGVhZGVyICsgZXBvY2gpIgorICAgICAgICApOworCisgICAgICAg IGxldCBkZXNlcmlhbGl6ZWQgPSBEZnNtTWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6ZGVzZXJpYWxp emUoJnNlcmlhbGl6ZWQpLnVud3JhcCgpOworCisgICAgICAgIGFzc2VydCEoCisgICAgICAgICAg ICBtYXRjaGVzIShkZXNlcmlhbGl6ZWQsIERmc21NZXNzYWdlOjpVcGRhdGVDb21wbGV0ZSB7IHN5 bmNfZXBvY2g6IGUgfSBpZiBlID09IHN5bmNfZXBvY2gpCisgICAgICAgICk7CisgICAgfQorCisg ICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc3RhdGVfbWVzc2FnZV93aXRoX2xhcmdlX3BheWxvYWQo KSB7CisgICAgICAgIGxldCBzeW5jX2Vwb2NoID0gU3luY0Vwb2NoIHsKKyAgICAgICAgICAgIGVw b2NoOiA3LAorICAgICAgICAgICAgdGltZTogNzc3NywKKyAgICAgICAgICAgIG5vZGVpZDogNCwK KyAgICAgICAgICAgIHBpZDogNDAwLAorICAgICAgICB9OworICAgICAgICAvLyBDcmVhdGUgYSBs YXJnZSBwYXlsb2FkICgxTUIpCisgICAgICAgIGxldCBsYXJnZV9kYXRhID0gdmVjIVsweEFCOyAx MDI0ICogMTAyNF07CisKKyAgICAgICAgbGV0IG1zZzogRGZzbU1lc3NhZ2U8RnVzZU1lc3NhZ2U+ ID0gRGZzbU1lc3NhZ2U6OlN0YXRlIHsKKyAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAg ICAgICBkYXRhOiBsYXJnZV9kYXRhLmNsb25lKCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0 IHNlcmlhbGl6ZWQgPSBtc2cuc2VyaWFsaXplKCk7CisgICAgICAgIC8vIFNob3VsZCBiZSAzMiBi eXRlcyBoZWFkZXIgKyAxTUIgZGF0YQorICAgICAgICBhc3NlcnRfZXEhKHNlcmlhbGl6ZWQubGVu KCksIDMyICsgMTAyNCAqIDEwMjQpOworCisgICAgICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBEZnNt TWVzc2FnZTo6PEZ1c2VNZXNzYWdlPjo6ZGVzZXJpYWxpemUoJnNlcmlhbGl6ZWQpLnVud3JhcCgp OworCisgICAgICAgIG1hdGNoIGRlc2VyaWFsaXplZCB7CisgICAgICAgICAgICBEZnNtTWVzc2Fn ZTo6U3RhdGUgeworICAgICAgICAgICAgICAgIHN5bmNfZXBvY2g6IGUsCisgICAgICAgICAgICAg ICAgZGF0YSwKKyAgICAgICAgICAgIH0gPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcSEo ZSwgc3luY19lcG9jaCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxIShkYXRhLmxlbigpLCBs YXJnZV9kYXRhLmxlbigpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKGRhdGEsIGxhcmdl X2RhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIldyb25nIG1l c3NhZ2UgdHlwZSIpLAorICAgICAgICB9CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRl c3RfbWVzc2FnZV90eXBlX2RldGVjdGlvbigpIHsKKyAgICAgICAgbGV0IHN5bmNfZXBvY2ggPSBT eW5jRXBvY2ggeworICAgICAgICAgICAgZXBvY2g6IDEsCisgICAgICAgICAgICB0aW1lOiAxMDAs CisgICAgICAgICAgICBub2RlaWQ6IDEsCisgICAgICAgICAgICBwaWQ6IDUwLAorICAgICAgICB9 OworCisgICAgICAgIGxldCBzeW5jX3N0YXJ0OiBEZnNtTWVzc2FnZTxGdXNlTWVzc2FnZT4gPSBE ZnNtTWVzc2FnZTo6U3luY1N0YXJ0IHsgc3luY19lcG9jaCB9OworICAgICAgICBhc3NlcnRfZXEh KHN5bmNfc3RhcnQubWVzc2FnZV90eXBlKCksIERmc21NZXNzYWdlVHlwZTo6U3luY1N0YXJ0KTsK KworICAgICAgICBsZXQgc3RhdGU6IERmc21NZXNzYWdlPEZ1c2VNZXNzYWdlPiA9IERmc21NZXNz YWdlOjpTdGF0ZSB7CisgICAgICAgICAgICBzeW5jX2Vwb2NoLAorICAgICAgICAgICAgZGF0YTog dmVjIVsxLCAyLCAzXSwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShzdGF0ZS5tZXNz YWdlX3R5cGUoKSwgRGZzbU1lc3NhZ2VUeXBlOjpTdGF0ZSk7CisKKyAgICAgICAgbGV0IHVwZGF0 ZV9jb21wbGV0ZTogRGZzbU1lc3NhZ2U8RnVzZU1lc3NhZ2U+ID0gRGZzbU1lc3NhZ2U6OlVwZGF0 ZUNvbXBsZXRlIHsgc3luY19lcG9jaCB9OworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAg ICAgdXBkYXRlX2NvbXBsZXRlLm1lc3NhZ2VfdHlwZSgpLAorICAgICAgICAgICAgRGZzbU1lc3Nh Z2VUeXBlOjpVcGRhdGVDb21wbGV0ZQorICAgICAgICApOworICAgIH0KKworICAgICNbdGVzdF0K KyAgICBmbiB0ZXN0X2Zyb21fbWVzc2FnZV9oZWxwZXIoKSB7CisgICAgICAgIGxldCBmdXNlX21z ZyA9IEZ1c2VNZXNzYWdlOjpNa2RpciB7CisgICAgICAgICAgICBwYXRoOiAiL25ldy9kaXIiLnRv X3N0cmluZygpLAorICAgICAgICB9OworICAgICAgICBsZXQgbXNnX2NvdW50ID0gMTIzOworICAg ICAgICBsZXQgcHJvdG9jb2xfdmVyc2lvbiA9IERmc21NZXNzYWdlOjo8RnVzZU1lc3NhZ2U+OjpE RUZBVUxUX1BST1RPQ09MX1ZFUlNJT047CisKKyAgICAgICAgbGV0IGRmc21fbXNnID0gRGZzbU1l c3NhZ2U6OmZyb21fbWVzc2FnZShtc2dfY291bnQsIGZ1c2VfbXNnLmNsb25lKCksIHByb3RvY29s X3ZlcnNpb24pOworCisgICAgICAgIG1hdGNoIGRmc21fbXNnIHsKKyAgICAgICAgICAgIERmc21N ZXNzYWdlOjpOb3JtYWwgeworICAgICAgICAgICAgICAgIG1zZ19jb3VudDogY291bnQsCisgICAg ICAgICAgICAgICAgdGltZXN0YW1wOiBfLAorICAgICAgICAgICAgICAgIHByb3RvY29sX3ZlcnNp b246IHB2LAorICAgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICB9ID0+IHsKKyAg ICAgICAgICAgICAgICBhc3NlcnRfZXEhKGNvdW50LCBtc2dfY291bnQpOworICAgICAgICAgICAg ICAgIGFzc2VydF9lcSEocHYsIHByb3RvY29sX3ZlcnNpb24pOworICAgICAgICAgICAgICAgIGFz c2VydF9lcSEobWVzc2FnZSwgZnVzZV9tc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg XyA9PiBwYW5pYyEoImZyb21fbWVzc2FnZSBzaG91bGQgY3JlYXRlIE5vcm1hbCB2YXJpYW50Iiks CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF92ZXJpZnlfcmVx dWVzdF93aXRoX21heF9jc3VtX2lkKCkgeworICAgICAgICBsZXQgc3luY19lcG9jaCA9IFN5bmNF cG9jaCB7CisgICAgICAgICAgICBlcG9jaDogOTksCisgICAgICAgICAgICB0aW1lOiA5OTk5LAor ICAgICAgICAgICAgbm9kZWlkOiA1LAorICAgICAgICAgICAgcGlkOiA1MDAsCisgICAgICAgIH07 CisgICAgICAgIGxldCBtYXhfY3N1bV9pZCA9IHU2NDo6TUFYOyAvLyBUZXN0IHdpdGggbWF4aW11 bSB2YWx1ZQorCisgICAgICAgIGxldCBtc2c6IERmc21NZXNzYWdlPEZ1c2VNZXNzYWdlPiA9IERm c21NZXNzYWdlOjpWZXJpZnlSZXF1ZXN0IHsKKyAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAg ICAgICAgICBjc3VtX2lkOiBtYXhfY3N1bV9pZCwKKyAgICAgICAgfTsKKworICAgICAgICBsZXQg c2VyaWFsaXplZCA9IG1zZy5zZXJpYWxpemUoKTsKKyAgICAgICAgbGV0IGRlc2VyaWFsaXplZCA9 IERmc21NZXNzYWdlOjo8RnVzZU1lc3NhZ2U+OjpkZXNlcmlhbGl6ZSgmc2VyaWFsaXplZCkudW53 cmFwKCk7CisKKyAgICAgICAgbWF0Y2ggZGVzZXJpYWxpemVkIHsKKyAgICAgICAgICAgIERmc21N ZXNzYWdlOjpWZXJpZnlSZXF1ZXN0IHsKKyAgICAgICAgICAgICAgICBzeW5jX2Vwb2NoOiBlLAor ICAgICAgICAgICAgICAgIGNzdW1faWQsCisgICAgICAgICAgICB9ID0+IHsKKyAgICAgICAgICAg ICAgICBhc3NlcnRfZXEhKGUsIHN5bmNfZXBvY2gpOworICAgICAgICAgICAgICAgIGFzc2VydF9l cSEoY3N1bV9pZCwgbWF4X2NzdW1faWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgXyA9 PiBwYW5pYyEoIldyb25nIG1lc3NhZ2UgdHlwZSIpLAorICAgICAgICB9CisgICAgfQorfQpkaWZm IC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvZnVzZV9tZXNzYWdlLnJzIGIv c3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvZnVzZV9tZXNzYWdlLnJzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lZTVkMjhmOAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2Z1c2VfbWVzc2FnZS5ycwpAQCAtMCwwICsxLDE4 NSBAQAorLy8vIEZVU0UgbWVzc2FnZSB0eXBlcyBmb3IgY2x1c3RlciBzeW5jaHJvbml6YXRpb24K Ky8vLworLy8vIFRoZXNlIGFyZSB0aGUgaGlnaC1sZXZlbCBvcGVyYXRpb25zIHRoYXQgZ2V0IGJy b2FkY2FzdCB0aHJvdWdoIHRoZSBjbHVzdGVyCisvLy8gdmlhIHRoZSBtYWluIGRhdGFiYXNlIERG U00gKHBteGNmc192MSBDUEcgZ3JvdXApLgordXNlIGFueWhvdzo6e0NvbnRleHQsIFJlc3VsdH07 CisKK3VzZSBjcmF0ZTo6bWVzc2FnZTo6TWVzc2FnZTsKK3VzZSBjcmF0ZTo6d2lyZV9mb3JtYXQ6 OntDRnVzZU1lc3NhZ2UsIENNZXNzYWdlVHlwZX07CisKKyNbZGVyaXZlKERlYnVnLCBDbG9uZSwg UGFydGlhbEVxKV0KK3B1YiBlbnVtIEZ1c2VNZXNzYWdlIHsKKyAgICAvLy8gQ3JlYXRlIGEgcmVn dWxhciBmaWxlCisgICAgQ3JlYXRlIHsgcGF0aDogU3RyaW5nIH0sCisgICAgLy8vIENyZWF0ZSBh IGRpcmVjdG9yeQorICAgIE1rZGlyIHsgcGF0aDogU3RyaW5nIH0sCisgICAgLy8vIFdyaXRlIGRh dGEgdG8gYSBmaWxlCisgICAgV3JpdGUgeworICAgICAgICBwYXRoOiBTdHJpbmcsCisgICAgICAg IG9mZnNldDogdTY0LAorICAgICAgICBkYXRhOiBWZWM8dTg+LAorICAgIH0sCisgICAgLy8vIERl bGV0ZSBhIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgRGVsZXRlIHsgcGF0aDogU3RyaW5nIH0sCisg ICAgLy8vIFJlbmFtZS9tb3ZlIGEgZmlsZSBvciBkaXJlY3RvcnkKKyAgICBSZW5hbWUgeyBmcm9t OiBTdHJpbmcsIHRvOiBTdHJpbmcgfSwKKyAgICAvLy8gVXBkYXRlIG1vZGlmaWNhdGlvbiB0aW1l CisgICAgTXRpbWUgeyBwYXRoOiBTdHJpbmcgfSwKKyAgICAvLy8gUmVxdWVzdCB1bmxvY2sgKG5v dCB5ZXQgaW1wbGVtZW50ZWQpCisgICAgVW5sb2NrUmVxdWVzdCB7IHBhdGg6IFN0cmluZyB9LAor ICAgIC8vLyBVbmxvY2sgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCisgICAgVW5sb2NrIHsgcGF0aDog U3RyaW5nIH0sCit9CisKK2ltcGwgTWVzc2FnZSBmb3IgRnVzZU1lc3NhZ2UgeworICAgIGZuIG1l c3NhZ2VfdHlwZSgmc2VsZikgLT4gdTE2IHsKKyAgICAgICAgbWF0Y2ggc2VsZiB7CisgICAgICAg ICAgICBGdXNlTWVzc2FnZTo6Q3JlYXRlIHsgLi4gfSA9PiBDTWVzc2FnZVR5cGU6OkNyZWF0ZSBh cyB1MTYsCisgICAgICAgICAgICBGdXNlTWVzc2FnZTo6TWtkaXIgeyAuLiB9ID0+IENNZXNzYWdl VHlwZTo6TWtkaXIgYXMgdTE2LAorICAgICAgICAgICAgRnVzZU1lc3NhZ2U6OldyaXRlIHsgLi4g fSA9PiBDTWVzc2FnZVR5cGU6OldyaXRlIGFzIHUxNiwKKyAgICAgICAgICAgIEZ1c2VNZXNzYWdl OjpEZWxldGUgeyAuLiB9ID0+IENNZXNzYWdlVHlwZTo6RGVsZXRlIGFzIHUxNiwKKyAgICAgICAg ICAgIEZ1c2VNZXNzYWdlOjpSZW5hbWUgeyAuLiB9ID0+IENNZXNzYWdlVHlwZTo6UmVuYW1lIGFz IHUxNiwKKyAgICAgICAgICAgIEZ1c2VNZXNzYWdlOjpNdGltZSB7IC4uIH0gPT4gQ01lc3NhZ2VU eXBlOjpNdGltZSBhcyB1MTYsCisgICAgICAgICAgICBGdXNlTWVzc2FnZTo6VW5sb2NrUmVxdWVz dCB7IC4uIH0gPT4gQ01lc3NhZ2VUeXBlOjpVbmxvY2tSZXF1ZXN0IGFzIHUxNiwKKyAgICAgICAg ICAgIEZ1c2VNZXNzYWdlOjpVbmxvY2sgeyAuLiB9ID0+IENNZXNzYWdlVHlwZTo6VW5sb2NrIGFz IHUxNiwKKyAgICAgICAgfQorICAgIH0KKworICAgIGZuIHNlcmlhbGl6ZSgmc2VsZikgLT4gVmVj PHU4PiB7CisgICAgICAgIGxldCBjX21zZyA9IG1hdGNoIHNlbGYgeworICAgICAgICAgICAgRnVz ZU1lc3NhZ2U6OkNyZWF0ZSB7IHBhdGggfSA9PiBDRnVzZU1lc3NhZ2UgeworICAgICAgICAgICAg ICAgIHNpemU6IDAsCisgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgICAg IGZsYWdzOiAwLAorICAgICAgICAgICAgICAgIHBhdGg6IHBhdGguY2xvbmUoKSwKKyAgICAgICAg ICAgICAgICB0bzogTm9uZSwKKyAgICAgICAgICAgICAgICBkYXRhOiBWZWM6Om5ldygpLAorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIEZ1c2VNZXNzYWdlOjpNa2RpciB7IHBhdGggfSA9PiBD RnVzZU1lc3NhZ2UgeworICAgICAgICAgICAgICAgIHNpemU6IDAsCisgICAgICAgICAgICAgICAg b2Zmc2V0OiAwLAorICAgICAgICAgICAgICAgIGZsYWdzOiAwLAorICAgICAgICAgICAgICAgIHBh dGg6IHBhdGguY2xvbmUoKSwKKyAgICAgICAgICAgICAgICB0bzogTm9uZSwKKyAgICAgICAgICAg ICAgICBkYXRhOiBWZWM6Om5ldygpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIEZ1c2VN ZXNzYWdlOjpXcml0ZSB7IHBhdGgsIG9mZnNldCwgZGF0YSB9ID0+IENGdXNlTWVzc2FnZSB7Cisg ICAgICAgICAgICAgICAgc2l6ZTogZGF0YS5sZW4oKSBhcyB1MzIsCisgICAgICAgICAgICAgICAg b2Zmc2V0OiAqb2Zmc2V0IGFzIHUzMiwKKyAgICAgICAgICAgICAgICBmbGFnczogMCwKKyAgICAg ICAgICAgICAgICBwYXRoOiBwYXRoLmNsb25lKCksCisgICAgICAgICAgICAgICAgdG86IE5vbmUs CisgICAgICAgICAgICAgICAgZGF0YTogZGF0YS5jbG9uZSgpLAorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIEZ1c2VNZXNzYWdlOjpEZWxldGUgeyBwYXRoIH0gPT4gQ0Z1c2VNZXNzYWdlIHsK KyAgICAgICAgICAgICAgICBzaXplOiAwLAorICAgICAgICAgICAgICAgIG9mZnNldDogMCwKKyAg ICAgICAgICAgICAgICBmbGFnczogMCwKKyAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmNsb25l KCksCisgICAgICAgICAgICAgICAgdG86IE5vbmUsCisgICAgICAgICAgICAgICAgZGF0YTogVmVj OjpuZXcoKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBGdXNlTWVzc2FnZTo6UmVuYW1l IHsgZnJvbSwgdG8gfSA9PiBDRnVzZU1lc3NhZ2UgeworICAgICAgICAgICAgICAgIHNpemU6IDAs CisgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgICAgIGZsYWdzOiAwLAor ICAgICAgICAgICAgICAgIHBhdGg6IGZyb20uY2xvbmUoKSwKKyAgICAgICAgICAgICAgICB0bzog U29tZSh0by5jbG9uZSgpKSwKKyAgICAgICAgICAgICAgICBkYXRhOiBWZWM6Om5ldygpLAorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIEZ1c2VNZXNzYWdlOjpNdGltZSB7IHBhdGggfSA9PiBD RnVzZU1lc3NhZ2UgeworICAgICAgICAgICAgICAgIHNpemU6IDAsCisgICAgICAgICAgICAgICAg b2Zmc2V0OiAwLAorICAgICAgICAgICAgICAgIGZsYWdzOiAwLAorICAgICAgICAgICAgICAgIHBh dGg6IHBhdGguY2xvbmUoKSwKKyAgICAgICAgICAgICAgICB0bzogTm9uZSwKKyAgICAgICAgICAg ICAgICBkYXRhOiBWZWM6Om5ldygpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIEZ1c2VN ZXNzYWdlOjpVbmxvY2tSZXF1ZXN0IHsgcGF0aCB9ID0+IENGdXNlTWVzc2FnZSB7CisgICAgICAg ICAgICAgICAgc2l6ZTogMCwKKyAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAg ICAgICAgZmxhZ3M6IDAsCisgICAgICAgICAgICAgICAgcGF0aDogcGF0aC5jbG9uZSgpLAorICAg ICAgICAgICAgICAgIHRvOiBOb25lLAorICAgICAgICAgICAgICAgIGRhdGE6IFZlYzo6bmV3KCks CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgRnVzZU1lc3NhZ2U6OlVubG9jayB7IHBhdGgg fSA9PiBDRnVzZU1lc3NhZ2UgeworICAgICAgICAgICAgICAgIHNpemU6IDAsCisgICAgICAgICAg ICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgICAgIGZsYWdzOiAwLAorICAgICAgICAgICAg ICAgIHBhdGg6IHBhdGguY2xvbmUoKSwKKyAgICAgICAgICAgICAgICB0bzogTm9uZSwKKyAgICAg ICAgICAgICAgICBkYXRhOiBWZWM6Om5ldygpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsK KworICAgICAgICBjX21zZy5zZXJpYWxpemUoKQorICAgIH0KKworICAgIGZuIGRlc2VyaWFsaXpl KG1lc3NhZ2VfdHlwZTogdTE2LCBkYXRhOiAmW3U4XSkgLT4gUmVzdWx0PFNlbGY+IHsKKyAgICAg ICAgbGV0IGNfbXNnID0gQ0Z1c2VNZXNzYWdlOjpwYXJzZShkYXRhKS5jb250ZXh0KCJGYWlsZWQg dG8gcGFyc2UgQyBGVVNFIG1lc3NhZ2UiKT87CisgICAgICAgIGxldCBtc2dfdHlwZSA9IENNZXNz YWdlVHlwZTo6dHJ5X2Zyb20obWVzc2FnZV90eXBlKS5jb250ZXh0KCJJbnZhbGlkIEMgbWVzc2Fn ZSB0eXBlIik/OworCisgICAgICAgIE9rKG1hdGNoIG1zZ190eXBlIHsKKyAgICAgICAgICAgIENN ZXNzYWdlVHlwZTo6Q3JlYXRlID0+IEZ1c2VNZXNzYWdlOjpDcmVhdGUgeyBwYXRoOiBjX21zZy5w YXRoIH0sCisgICAgICAgICAgICBDTWVzc2FnZVR5cGU6Ok1rZGlyID0+IEZ1c2VNZXNzYWdlOjpN a2RpciB7IHBhdGg6IGNfbXNnLnBhdGggfSwKKyAgICAgICAgICAgIENNZXNzYWdlVHlwZTo6V3Jp dGUgPT4gRnVzZU1lc3NhZ2U6OldyaXRlIHsKKyAgICAgICAgICAgICAgICBwYXRoOiBjX21zZy5w YXRoLAorICAgICAgICAgICAgICAgIG9mZnNldDogY19tc2cub2Zmc2V0IGFzIHU2NCwKKyAgICAg ICAgICAgICAgICBkYXRhOiBjX21zZy5kYXRhLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg IENNZXNzYWdlVHlwZTo6RGVsZXRlID0+IEZ1c2VNZXNzYWdlOjpEZWxldGUgeyBwYXRoOiBjX21z Zy5wYXRoIH0sCisgICAgICAgICAgICBDTWVzc2FnZVR5cGU6OlJlbmFtZSA9PiBGdXNlTWVzc2Fn ZTo6UmVuYW1lIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBjX21zZy5wYXRoLAorICAgICAgICAg ICAgICAgIHRvOiBjX21zZy50by51bndyYXBfb3JfZGVmYXVsdCgpLAorICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIENNZXNzYWdlVHlwZTo6TXRpbWUgPT4gRnVzZU1lc3NhZ2U6Ok10aW1lIHsg cGF0aDogY19tc2cucGF0aCB9LAorICAgICAgICAgICAgQ01lc3NhZ2VUeXBlOjpVbmxvY2tSZXF1 ZXN0ID0+IEZ1c2VNZXNzYWdlOjpVbmxvY2tSZXF1ZXN0IHsgcGF0aDogY19tc2cucGF0aCB9LAor ICAgICAgICAgICAgQ01lc3NhZ2VUeXBlOjpVbmxvY2sgPT4gRnVzZU1lc3NhZ2U6OlVubG9jayB7 IHBhdGg6IGNfbXNnLnBhdGggfSwKKyAgICAgICAgfSkKKyAgICB9Cit9CisKKyNbY2ZnKHRlc3Qp XQorbW9kIHRlc3RzIHsKKyAgICB1c2Ugc3VwZXI6Oio7CisKKyAgICAjW3Rlc3RdCisgICAgZm4g dGVzdF9mdXNlX21lc3NhZ2VfY3JlYXRlKCkgeworICAgICAgICBsZXQgbXNnID0gRnVzZU1lc3Nh Z2U6OkNyZWF0ZSB7CisgICAgICAgICAgICBwYXRoOiAiL3Rlc3QvZmlsZSIudG9fc3RyaW5nKCks CisgICAgICAgIH07CisgICAgICAgIGFzc2VydF9lcSEobXNnLm1lc3NhZ2VfdHlwZSgpLCBDTWVz c2FnZVR5cGU6OkNyZWF0ZSBhcyB1MTYpOworCisgICAgICAgIGxldCBzZXJpYWxpemVkID0gbXNn LnNlcmlhbGl6ZSgpOworICAgICAgICBsZXQgZGVzZXJpYWxpemVkID0gRnVzZU1lc3NhZ2U6OmRl c2VyaWFsaXplKG1zZy5tZXNzYWdlX3R5cGUoKSwgJnNlcmlhbGl6ZWQpLnVud3JhcCgpOworICAg ICAgICBhc3NlcnRfZXEhKG1zZywgZGVzZXJpYWxpemVkKTsKKyAgICB9CisKKyAgICAjW3Rlc3Rd CisgICAgZm4gdGVzdF9mdXNlX21lc3NhZ2Vfd3JpdGUoKSB7CisgICAgICAgIGxldCBtc2cgPSBG dXNlTWVzc2FnZTo6V3JpdGUgeworICAgICAgICAgICAgcGF0aDogIi90ZXN0L2ZpbGUiLnRvX3N0 cmluZygpLAorICAgICAgICAgICAgb2Zmc2V0OiAxMDAsCisgICAgICAgICAgICBkYXRhOiB2ZWMh WzEsIDIsIDMsIDQsIDVdLAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKG1zZy5tZXNz YWdlX3R5cGUoKSwgQ01lc3NhZ2VUeXBlOjpXcml0ZSBhcyB1MTYpOworCisgICAgICAgIGxldCBz ZXJpYWxpemVkID0gbXNnLnNlcmlhbGl6ZSgpOworICAgICAgICBsZXQgZGVzZXJpYWxpemVkID0g RnVzZU1lc3NhZ2U6OmRlc2VyaWFsaXplKG1zZy5tZXNzYWdlX3R5cGUoKSwgJnNlcmlhbGl6ZWQp LnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKG1zZywgZGVzZXJpYWxpemVkKTsKKyAgICB9 CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9mdXNlX21lc3NhZ2VfcmVuYW1lKCkgeworICAg ICAgICBsZXQgbXNnID0gRnVzZU1lc3NhZ2U6OlJlbmFtZSB7CisgICAgICAgICAgICBmcm9tOiAi L29sZC9wYXRoIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHRvOiAiL25ldy9wYXRoIi50b19z dHJpbmcoKSwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShtc2cubWVzc2FnZV90eXBl KCksIENNZXNzYWdlVHlwZTo6UmVuYW1lIGFzIHUxNik7CisKKyAgICAgICAgbGV0IHNlcmlhbGl6 ZWQgPSBtc2cuc2VyaWFsaXplKCk7CisgICAgICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBGdXNlTWVz c2FnZTo6ZGVzZXJpYWxpemUobXNnLm1lc3NhZ2VfdHlwZSgpLCAmc2VyaWFsaXplZCkudW53cmFw KCk7CisgICAgICAgIGFzc2VydF9lcSEobXNnLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KK30KZGlm ZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2t2X3N0b3JlX21lc3NhZ2Uu cnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9rdl9zdG9yZV9tZXNzYWdlLnJzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kYjQ5YTQ2OQotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL2t2X3N0b3JlX21lc3NhZ2UucnMK QEAgLTAsMCArMSwzMjkgQEAKKy8vLyBLdlN0b3JlIG1lc3NhZ2UgdHlwZXMgZm9yIERGU00gc3Rh dHVzIHN5bmNocm9uaXphdGlvbgorLy8vCisvLy8gVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgS3ZT dG9yZSBtZXNzYWdlIHR5cGVzIHRoYXQgYXJlIGRlbGl2ZXJlZCB0aHJvdWdoCisvLy8gdGhlIHN0 YXR1cyBERlNNIHN0YXRlIG1hY2hpbmUgKHB2ZV9rdnN0b3JlX3YxIENQRyBncm91cCkuCit1c2Ug YW55aG93OjpDb250ZXh0OworCit1c2UgY3JhdGU6Om1lc3NhZ2U6Ok1lc3NhZ2U7CisKKy8vLyBL dlN0b3JlIG1lc3NhZ2UgdHlwZSBJRHMgKG1hdGNoZXMgQydzIGt2c3RvcmVfbWVzc2FnZV90IGVu dW0pCisjW2Rlcml2ZSgKKyAgICBEZWJ1ZywgQ2xvbmUsIENvcHksIFBhcnRpYWxFcSwgRXEsIG51 bV9lbnVtOjpUcnlGcm9tUHJpbWl0aXZlLCBudW1fZW51bTo6SW50b1ByaW1pdGl2ZSwKKyldCisj W3JlcHIodTE2KV0KK2VudW0gS3ZTdG9yZU1lc3NhZ2VUeXBlIHsKKyAgICBVcGRhdGUgPSAxLCAg ICAgICAgIC8vIEtWU1RPUkVfTUVTU0FHRV9VUERBVEUKKyAgICBVcGRhdGVDb21wbGV0ZSA9IDIs IC8vIEtWU1RPUkVfTUVTU0FHRV9VUERBVEVfQ09NUExFVEUKKyAgICBMb2cgPSAzLCAgICAgICAg ICAgIC8vIEtWU1RPUkVfTUVTU0FHRV9MT0cKK30KKworLy8vIEt2U3RvcmUgbWVzc2FnZSB0eXBl cyBmb3IgZXBoZW1lcmFsIHN0YXR1cyBzeW5jaHJvbml6YXRpb24KKy8vLworLy8vIFRoZXNlIG1l c3NhZ2VzIGFyZSB1c2VkIGJ5IHRoZSBrdnN0b3JlIERGU00gKHB2ZV9rdnN0b3JlX3YxIENQRyBn cm91cCkKKy8vLyB0byBzeW5jaHJvbml6ZSBlcGhlbWVyYWwgZGF0YSBsaWtlIFJSRCBtZXRyaWNz LCBub2RlIElQcywgYW5kIGNsdXN0ZXIgbG9ncy4KKy8vLworLy8vIE1hdGNoZXMgQyBpbXBsZW1l bnRhdGlvbidzIEtWU1RPUkVfTUVTU0FHRV8qIHR5cGVzIGluIHN0YXR1cy5jCisjW2Rlcml2ZShE ZWJ1ZywgQ2xvbmUsIFBhcnRpYWxFcSldCitwdWIgZW51bSBLdlN0b3JlTWVzc2FnZSB7CisgICAg Ly8vIFVwZGF0ZSBrZXktdmFsdWUgZGF0YSBmcm9tIGEgbm9kZQorICAgIC8vLworICAgIC8vLyBX aXJlIGZvcm1hdDoga2V5ICgyNTYgYnl0ZXMsIG51bGwtdGVybWluYXRlZCkgKyB2YWx1ZSAodmFy aWFibGUgbGVuZ3RoKQorICAgIC8vLyBNYXRjaGVzIEMncyBLVlNUT1JFX01FU1NBR0VfVVBEQVRF CisgICAgVXBkYXRlIHsga2V5OiBTdHJpbmcsIHZhbHVlOiBWZWM8dTg+IH0sCisKKyAgICAvLy8g Q2x1c3RlciBsb2cgZW50cnkKKyAgICAvLy8KKyAgICAvLy8gV2lyZSBmb3JtYXQ6IGNsb2dfZW50 cnlfdCBzdHJ1Y3QKKyAgICAvLy8gTWF0Y2hlcyBDJ3MgS1ZTVE9SRV9NRVNTQUdFX0xPRworICAg IExvZyB7CisgICAgICAgIHRpbWU6IHUzMiwKKyAgICAgICAgcHJpb3JpdHk6IHU4LAorICAgICAg ICBub2RlOiBTdHJpbmcsCisgICAgICAgIGlkZW50OiBTdHJpbmcsCisgICAgICAgIHRhZzogU3Ry aW5nLAorICAgICAgICBtZXNzYWdlOiBTdHJpbmcsCisgICAgfSwKKworICAgIC8vLyBVcGRhdGUg Y29tcGxldGUgc2lnbmFsIChub3QgY3VycmVudGx5IHVzZWQpCisgICAgLy8vCisgICAgLy8vIE1h dGNoZXMgQydzIEtWU1RPUkVfTUVTU0FHRV9VUERBVEVfQ09NUExFVEUKKyAgICBVcGRhdGVDb21w bGV0ZSwKK30KKworaW1wbCBLdlN0b3JlTWVzc2FnZSB7CisgICAgLy8vIEdldCBtZXNzYWdlIHR5 cGUgSUQgKG1hdGNoZXMgQydzIGt2c3RvcmVfbWVzc2FnZV90IGVudW0pCisgICAgcHViIGZuIG1l c3NhZ2VfdHlwZSgmc2VsZikgLT4gdTE2IHsKKyAgICAgICAgbGV0IG1zZ190eXBlID0gbWF0Y2gg c2VsZiB7CisgICAgICAgICAgICBLdlN0b3JlTWVzc2FnZTo6VXBkYXRlIHsgLi4gfSA9PiBLdlN0 b3JlTWVzc2FnZVR5cGU6OlVwZGF0ZSwKKyAgICAgICAgICAgIEt2U3RvcmVNZXNzYWdlOjpVcGRh dGVDb21wbGV0ZSA9PiBLdlN0b3JlTWVzc2FnZVR5cGU6OlVwZGF0ZUNvbXBsZXRlLAorICAgICAg ICAgICAgS3ZTdG9yZU1lc3NhZ2U6OkxvZyB7IC4uIH0gPT4gS3ZTdG9yZU1lc3NhZ2VUeXBlOjpM b2csCisgICAgICAgIH07CisgICAgICAgIG1zZ190eXBlLmludG8oKQorICAgIH0KKworICAgIC8v LyBTZXJpYWxpemUgdG8gQy1jb21wYXRpYmxlIHdpcmUgZm9ybWF0CisgICAgLy8vCisgICAgLy8v IFVwZGF0ZSBmb3JtYXQ6IGtleSAoMjU2IGJ5dGVzLCBudWxsLXRlcm1pbmF0ZWQpICsgdmFsdWUg KHZhcmlhYmxlKQorICAgIC8vLyBMb2cgZm9ybWF0OiBjbG9nX2VudHJ5X3Qgc3RydWN0CisgICAg cHViIGZuIHNlcmlhbGl6ZSgmc2VsZikgLT4gVmVjPHU4PiB7CisgICAgICAgIG1hdGNoIHNlbGYg eworICAgICAgICAgICAgS3ZTdG9yZU1lc3NhZ2U6OlVwZGF0ZSB7IGtleSwgdmFsdWUgfSA9PiB7 CisgICAgICAgICAgICAgICAgLy8gQyBmb3JtYXQ6IGNoYXIga2V5WzI1Nl0gKyBkYXRhCisgICAg ICAgICAgICAgICAgbGV0IG11dCBidWYgPSB2ZWMhWzB1ODsgMjU2XTsKKyAgICAgICAgICAgICAg ICBsZXQga2V5X2J5dGVzID0ga2V5LmFzX2J5dGVzKCk7CisgICAgICAgICAgICAgICAgbGV0IGNv cHlfbGVuID0ga2V5X2J5dGVzLmxlbigpLm1pbigyNTUpOyAvLyBMZWF2ZSByb29tIGZvciBudWxs IHRlcm1pbmF0b3IKKyAgICAgICAgICAgICAgICBidWZbLi5jb3B5X2xlbl0uY29weV9mcm9tX3Ns aWNlKCZrZXlfYnl0ZXNbLi5jb3B5X2xlbl0pOworICAgICAgICAgICAgICAgIC8vIGJ1ZiBpcyBh bHJlYWR5IHplcm8tZmlsbGVkLCBzbyBudWxsIHRlcm1pbmF0b3IgaXMgYXV0b21hdGljCisKKyAg ICAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UodmFsdWUpOworICAgICAgICAgICAg ICAgIGJ1ZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgS3ZTdG9yZU1lc3NhZ2U6OkxvZyB7 CisgICAgICAgICAgICAgICAgdGltZSwKKyAgICAgICAgICAgICAgICBwcmlvcml0eSwKKyAgICAg ICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgIGlkZW50LAorICAgICAgICAgICAgICAg IHRhZywKKyAgICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgfSA9PiB7CisgICAg ICAgICAgICAgICAgLy8gQyBmb3JtYXQ6IGNsb2dfZW50cnlfdAorICAgICAgICAgICAgICAgIC8v IHN0cnVjdCBjbG9nX2VudHJ5X3QgeworICAgICAgICAgICAgICAgIC8vICAgICB1aW50MzJfdCB0 aW1lOworICAgICAgICAgICAgICAgIC8vICAgICB1aW50OF90IHByaW9yaXR5OworICAgICAgICAg ICAgICAgIC8vICAgICB1aW50OF90IHBhZGRpbmdbM107CisgICAgICAgICAgICAgICAgLy8gICAg IHVpbnQzMl90IG5vZGVfbGVuLCBpZGVudF9sZW4sIHRhZ19sZW4sIG1zZ19sZW47CisgICAgICAg ICAgICAgICAgLy8gICAgIGNoYXIgZGF0YVtdOyAgLy8gbm9kZSArIGlkZW50ICsgdGFnICsgbWVz c2FnZSAoYWxsIG51bGwtdGVybWluYXRlZCkKKyAgICAgICAgICAgICAgICAvLyB9CisKKyAgICAg ICAgICAgICAgICBsZXQgbm9kZV9ieXRlcyA9IG5vZGUuYXNfYnl0ZXMoKTsKKyAgICAgICAgICAg ICAgICBsZXQgaWRlbnRfYnl0ZXMgPSBpZGVudC5hc19ieXRlcygpOworICAgICAgICAgICAgICAg IGxldCB0YWdfYnl0ZXMgPSB0YWcuYXNfYnl0ZXMoKTsKKyAgICAgICAgICAgICAgICBsZXQgbXNn X2J5dGVzID0gbWVzc2FnZS5hc19ieXRlcygpOworCisgICAgICAgICAgICAgICAgbGV0IG5vZGVf bGVuID0gKG5vZGVfYnl0ZXMubGVuKCkgKyAxKSBhcyB1MzI7IC8vICsxIGZvciBudWxsCisgICAg ICAgICAgICAgICAgbGV0IGlkZW50X2xlbiA9IChpZGVudF9ieXRlcy5sZW4oKSArIDEpIGFzIHUz MjsKKyAgICAgICAgICAgICAgICBsZXQgdGFnX2xlbiA9ICh0YWdfYnl0ZXMubGVuKCkgKyAxKSBh cyB1MzI7CisgICAgICAgICAgICAgICAgbGV0IG1zZ19sZW4gPSAobXNnX2J5dGVzLmxlbigpICsg MSkgYXMgdTMyOworCisgICAgICAgICAgICAgICAgbGV0IHRvdGFsX2xlbiA9IDQgKyAxICsgMyAr IDE2ICsgbm9kZV9sZW4gKyBpZGVudF9sZW4gKyB0YWdfbGVuICsgbXNnX2xlbjsKKyAgICAgICAg ICAgICAgICBsZXQgbXV0IGJ1ZiA9IFZlYzo6d2l0aF9jYXBhY2l0eSh0b3RhbF9sZW4gYXMgdXNp emUpOworCisgICAgICAgICAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCZ0aW1lLnRvX2xl X2J5dGVzKCkpOworICAgICAgICAgICAgICAgIGJ1Zi5wdXNoKCpwcmlvcml0eSk7CisgICAgICAg ICAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCZbMHU4OyAzXSk7IC8vIHBhZGRpbmcKKyAg ICAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJm5vZGVfbGVuLnRvX2xlX2J5dGVz KCkpOworICAgICAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmaWRlbnRfbGVuLnRv X2xlX2J5dGVzKCkpOworICAgICAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmdGFn X2xlbi50b19sZV9ieXRlcygpKTsKKyAgICAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xp Y2UoJm1zZ19sZW4udG9fbGVfYnl0ZXMoKSk7CisKKyAgICAgICAgICAgICAgICBidWYuZXh0ZW5k X2Zyb21fc2xpY2Uobm9kZV9ieXRlcyk7CisgICAgICAgICAgICAgICAgYnVmLnB1c2goMCk7IC8v IG51bGwgdGVybWluYXRvcgorICAgICAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZShp ZGVudF9ieXRlcyk7CisgICAgICAgICAgICAgICAgYnVmLnB1c2goMCk7CisgICAgICAgICAgICAg ICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKHRhZ19ieXRlcyk7CisgICAgICAgICAgICAgICAgYnVm LnB1c2goMCk7CisgICAgICAgICAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKG1zZ19ieXRl cyk7CisgICAgICAgICAgICAgICAgYnVmLnB1c2goMCk7CisKKyAgICAgICAgICAgICAgICBidWYK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEt2U3RvcmVNZXNzYWdlOjpVcGRhdGVDb21wbGV0 ZSA9PiB7CisgICAgICAgICAgICAgICAgLy8gTm8gcGF5bG9hZAorICAgICAgICAgICAgICAgIFZl Yzo6bmV3KCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBEZXNl cmlhbGl6ZSBmcm9tIEMtY29tcGF0aWJsZSB3aXJlIGZvcm1hdAorICAgIHB1YiBmbiBkZXNlcmlh bGl6ZShtc2dfdHlwZTogdTE2LCBkYXRhOiAmW3U4XSkgLT4gYW55aG93OjpSZXN1bHQ8U2VsZj4g eworICAgICAgICB1c2UgS3ZTdG9yZU1lc3NhZ2VUeXBlOjoqOworCisgICAgICAgIGxldCBtc2df dHlwZSA9IEt2U3RvcmVNZXNzYWdlVHlwZTo6dHJ5X2Zyb20obXNnX3R5cGUpCisgICAgICAgICAg ICAubWFwX2Vycih8X3wgYW55aG93Ojphbnlob3chKCJVbmtub3duIGt2c3RvcmUgbWVzc2FnZSB0 eXBlOiB7bXNnX3R5cGV9IikpPzsKKworICAgICAgICBtYXRjaCBtc2dfdHlwZSB7CisgICAgICAg ICAgICBVcGRhdGUgPT4geworICAgICAgICAgICAgICAgIGlmIGRhdGEubGVuKCkgPCAyNTYgewor ICAgICAgICAgICAgICAgICAgICBhbnlob3c6OmJhaWwhKCJVUERBVEUgbWVzc2FnZSB0b28gc2hv cnQ6IHt9IDwgMjU2IiwgZGF0YS5sZW4oKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgLy8gRmluZCBudWxsIHRlcm1pbmF0b3IgaW4gZmlyc3QgMjU2IGJ5dGVzCisgICAg ICAgICAgICAgICAgbGV0IGtleV9lbmQgPSBkYXRhWy4uMjU2XQorICAgICAgICAgICAgICAgICAg ICAuaXRlcigpCisgICAgICAgICAgICAgICAgICAgIC5wb3NpdGlvbih8JmJ8IGIgPT0gMCkKKyAg ICAgICAgICAgICAgICAgICAgLm9rX29yX2Vsc2UofHwgYW55aG93Ojphbnlob3chKCJVUERBVEUg a2V5IG5vdCBudWxsLXRlcm1pbmF0ZWQiKSk/OworCisgICAgICAgICAgICAgICAgbGV0IGtleSA9 IHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJmRhdGFbLi5rZXlfZW5kXSkKKyAgICAgICAgICAgICAgICAg ICAgLm1hcF9lcnIofGV8IGFueWhvdzo6YW55aG93ISgiSW52YWxpZCBVVEYtOCBpbiBVUERBVEUg a2V5OiB7ZX0iKSk/CisgICAgICAgICAgICAgICAgICAgIC50b19zdHJpbmcoKTsKKworICAgICAg ICAgICAgICAgIGxldCB2YWx1ZSA9IGRhdGFbMjU2Li5dLnRvX3ZlYygpOworCisgICAgICAgICAg ICAgICAgT2soS3ZTdG9yZU1lc3NhZ2U6OlVwZGF0ZSB7IGtleSwgdmFsdWUgfSkKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIFVwZGF0ZUNvbXBsZXRlID0+IE9rKEt2U3RvcmVNZXNzYWdlOjpV cGRhdGVDb21wbGV0ZSksCisgICAgICAgICAgICBMb2cgPT4geworICAgICAgICAgICAgICAgIGlm IGRhdGEubGVuKCkgPCAyMCB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1pbmltdW06IDQrMSsz KzE2ID0gMjQgYnl0ZXMgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgIGFueWhvdzo6YmFpbCEo IkxPRyBtZXNzYWdlIHRvbyBzaG9ydCIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIGxldCB0aW1lID0gdTMyOjpmcm9tX2xlX2J5dGVzKFtkYXRhWzBdLCBkYXRhWzFdLCBk YXRhWzJdLCBkYXRhWzNdXSk7CisgICAgICAgICAgICAgICAgbGV0IHByaW9yaXR5ID0gZGF0YVs0 XTsKKyAgICAgICAgICAgICAgICAvLyBkYXRhWzUuLjhdIGlzIHBhZGRpbmcKKworICAgICAgICAg ICAgICAgIGxldCBub2RlX2xlbiA9IHUzMjo6ZnJvbV9sZV9ieXRlcyhbZGF0YVs4XSwgZGF0YVs5 XSwgZGF0YVsxMF0sIGRhdGFbMTFdXSkgYXMgdXNpemU7CisgICAgICAgICAgICAgICAgbGV0IGlk ZW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHUzMjo6ZnJvbV9sZV9ieXRlcyhbZGF0YVsx Ml0sIGRhdGFbMTNdLCBkYXRhWzE0XSwgZGF0YVsxNV1dKSBhcyB1c2l6ZTsKKyAgICAgICAgICAg ICAgICBsZXQgdGFnX2xlbiA9IHUzMjo6ZnJvbV9sZV9ieXRlcyhbZGF0YVsxNl0sIGRhdGFbMTdd LCBkYXRhWzE4XSwgZGF0YVsxOV1dKSBhcyB1c2l6ZTsKKyAgICAgICAgICAgICAgICBsZXQgbXNn X2xlbiA9IHUzMjo6ZnJvbV9sZV9ieXRlcyhbZGF0YVsyMF0sIGRhdGFbMjFdLCBkYXRhWzIyXSwg ZGF0YVsyM11dKSBhcyB1c2l6ZTsKKworICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZF9sZW4g PSAyNCArIG5vZGVfbGVuICsgaWRlbnRfbGVuICsgdGFnX2xlbiArIG1zZ19sZW47CisgICAgICAg ICAgICAgICAgaWYgZGF0YS5sZW4oKSAhPSBleHBlY3RlZF9sZW4geworICAgICAgICAgICAgICAg ICAgICBhbnlob3c6OmJhaWwhKAorICAgICAgICAgICAgICAgICAgICAgICAgIkxPRyBtZXNzYWdl IHNpemUgbWlzbWF0Y2g6IHt9ICE9IHt9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu bGVuKCksCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9sZW4KKyAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsZXQgbXV0 IG9mZnNldCA9IDI0OworCisgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBzdGQ6OnN0cjo6ZnJv bV91dGY4KCZkYXRhW29mZnNldC4ub2Zmc2V0ICsgbm9kZV9sZW4gLSAxXSkKKyAgICAgICAgICAg ICAgICAgICAgLm1hcF9lcnIofGV8IGFueWhvdzo6YW55aG93ISgiSW52YWxpZCBVVEYtOCBpbiBM T0cgbm9kZToge2V9IikpPworICAgICAgICAgICAgICAgICAgICAudG9fc3RyaW5nKCk7CisgICAg ICAgICAgICAgICAgb2Zmc2V0ICs9IG5vZGVfbGVuOworCisgICAgICAgICAgICAgICAgbGV0IGlk ZW50ID0gc3RkOjpzdHI6OmZyb21fdXRmOCgmZGF0YVtvZmZzZXQuLm9mZnNldCArIGlkZW50X2xl biAtIDFdKQorICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXwgYW55aG93Ojphbnlob3ch KCJJbnZhbGlkIFVURi04IGluIExPRyBpZGVudDoge2V9IikpPworICAgICAgICAgICAgICAgICAg ICAudG9fc3RyaW5nKCk7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGlkZW50X2xlbjsKKwor ICAgICAgICAgICAgICAgIGxldCB0YWcgPSBzdGQ6OnN0cjo6ZnJvbV91dGY4KCZkYXRhW29mZnNl dC4ub2Zmc2V0ICsgdGFnX2xlbiAtIDFdKQorICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8 ZXwgYW55aG93Ojphbnlob3chKCJJbnZhbGlkIFVURi04IGluIExPRyB0YWc6IHtlfSIpKT8KKyAg ICAgICAgICAgICAgICAgICAgLnRvX3N0cmluZygpOworICAgICAgICAgICAgICAgIG9mZnNldCAr PSB0YWdfbGVuOworCisgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBzdGQ6OnN0cjo6ZnJv bV91dGY4KCZkYXRhW29mZnNldC4ub2Zmc2V0ICsgbXNnX2xlbiAtIDFdKQorICAgICAgICAgICAg ICAgICAgICAubWFwX2Vycih8ZXwgYW55aG93Ojphbnlob3chKCJJbnZhbGlkIFVURi04IGluIExP RyBtZXNzYWdlOiB7ZX0iKSk/CisgICAgICAgICAgICAgICAgICAgIC50b19zdHJpbmcoKTsKKwor ICAgICAgICAgICAgICAgIE9rKEt2U3RvcmVNZXNzYWdlOjpMb2cgeworICAgICAgICAgICAgICAg ICAgICB0aW1lLAorICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSwKKyAgICAgICAgICAgICAg ICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQsCisgICAgICAgICAgICAgICAg ICAgIHRhZywKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICB9 KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbXBsIE1lc3NhZ2UgZm9y IEt2U3RvcmVNZXNzYWdlIHsKKyAgICBmbiBtZXNzYWdlX3R5cGUoJnNlbGYpIC0+IHUxNiB7Cisg ICAgICAgIC8vIERlbGVnYXRlIHRvIHRoZSBleGlzdGluZyBtZXRob2QKKyAgICAgICAgS3ZTdG9y ZU1lc3NhZ2U6Om1lc3NhZ2VfdHlwZShzZWxmKQorICAgIH0KKworICAgIGZuIHNlcmlhbGl6ZSgm c2VsZikgLT4gVmVjPHU4PiB7CisgICAgICAgIC8vIERlbGVnYXRlIHRvIHRoZSBleGlzdGluZyBt ZXRob2QKKyAgICAgICAgS3ZTdG9yZU1lc3NhZ2U6OnNlcmlhbGl6ZShzZWxmKQorICAgIH0KKwor ICAgIGZuIGRlc2VyaWFsaXplKG1lc3NhZ2VfdHlwZTogdTE2LCBkYXRhOiAmW3U4XSkgLT4gYW55 aG93OjpSZXN1bHQ8U2VsZj4geworICAgICAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgZXhpc3Rpbmcg bWV0aG9kCisgICAgICAgIEt2U3RvcmVNZXNzYWdlOjpkZXNlcmlhbGl6ZShtZXNzYWdlX3R5cGUs IGRhdGEpCisgICAgICAgICAgICAuY29udGV4dCgiRmFpbGVkIHRvIGRlc2VyaWFsaXplIEt2U3Rv cmVNZXNzYWdlIikKKyAgICB9Cit9CisKKyNbY2ZnKHRlc3QpXQorbW9kIHRlc3RzIHsKKyAgICB1 c2Ugc3VwZXI6Oio7CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9rdnN0b3JlX21lc3NhZ2Vf dXBkYXRlX3NlcmlhbGl6YXRpb24oKSB7CisgICAgICAgIGxldCBtc2cgPSBLdlN0b3JlTWVzc2Fn ZTo6VXBkYXRlIHsKKyAgICAgICAgICAgIGtleTogInRlc3Rfa2V5Ii50b19zdHJpbmcoKSwKKyAg ICAgICAgICAgIHZhbHVlOiB2ZWMhWzEsIDIsIDMsIDQsIDVdLAorICAgICAgICB9OworCisgICAg ICAgIGxldCBzZXJpYWxpemVkID0gbXNnLnNlcmlhbGl6ZSgpOworICAgICAgICBhc3NlcnRfZXEh KHNlcmlhbGl6ZWQubGVuKCksIDI1NiArIDUpOworICAgICAgICBhc3NlcnRfZXEhKCZzZXJpYWxp emVkWy4uOF0sIGIidGVzdF9rZXkiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShzZXJpYWxpemVkWzhd LCAwKTsgLy8gbnVsbCB0ZXJtaW5hdG9yCisgICAgICAgIGFzc2VydF9lcSEoJnNlcmlhbGl6ZWRb MjU2Li5dLCAmWzEsIDIsIDMsIDQsIDVdKTsKKworICAgICAgICBsZXQgZGVzZXJpYWxpemVkID0g S3ZTdG9yZU1lc3NhZ2U6OmRlc2VyaWFsaXplKDEsICZzZXJpYWxpemVkKS51bndyYXAoKTsKKyAg ICAgICAgYXNzZXJ0X2VxIShtc2csIGRlc2VyaWFsaXplZCk7CisgICAgfQorCisgICAgI1t0ZXN0 XQorICAgIGZuIHRlc3Rfa3ZzdG9yZV9tZXNzYWdlX2xvZ19zZXJpYWxpemF0aW9uKCkgeworICAg ICAgICBsZXQgbXNnID0gS3ZTdG9yZU1lc3NhZ2U6OkxvZyB7CisgICAgICAgICAgICB0aW1lOiAx MjM0NTY3ODkwLAorICAgICAgICAgICAgcHJpb3JpdHk6IDUsCisgICAgICAgICAgICBub2RlOiAi bm9kZTEiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgaWRlbnQ6ICJwbXhjZnMiLnRvX3N0cmlu ZygpLAorICAgICAgICAgICAgdGFnOiAiaW5mbyIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBt ZXNzYWdlOiAidGVzdCBtZXNzYWdlIi50b19zdHJpbmcoKSwKKyAgICAgICAgfTsKKworICAgICAg ICBsZXQgc2VyaWFsaXplZCA9IG1zZy5zZXJpYWxpemUoKTsKKyAgICAgICAgbGV0IGRlc2VyaWFs aXplZCA9IEt2U3RvcmVNZXNzYWdlOjpkZXNlcmlhbGl6ZSgzLCAmc2VyaWFsaXplZCkudW53cmFw KCk7CisgICAgICAgIGFzc2VydF9lcSEobXNnLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KKworICAg ICNbdGVzdF0KKyAgICBmbiB0ZXN0X2t2c3RvcmVfbWVzc2FnZV90eXBlKCkgeworICAgICAgICBh c3NlcnRfZXEhKAorICAgICAgICAgICAgS3ZTdG9yZU1lc3NhZ2U6OlVwZGF0ZSB7CisgICAgICAg ICAgICAgICAga2V5OiAiIi5pbnRvKCksCisgICAgICAgICAgICAgICAgdmFsdWU6IHZlYyFbXQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgLm1lc3NhZ2VfdHlwZSgpLAorICAgICAgICAgICAg MQorICAgICAgICApOworICAgICAgICBhc3NlcnRfZXEhKEt2U3RvcmVNZXNzYWdlOjpVcGRhdGVD b21wbGV0ZS5tZXNzYWdlX3R5cGUoKSwgMik7CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAg ICAgICBLdlN0b3JlTWVzc2FnZTo6TG9nIHsKKyAgICAgICAgICAgICAgICB0aW1lOiAwLAorICAg ICAgICAgICAgICAgIHByaW9yaXR5OiAwLAorICAgICAgICAgICAgICAgIG5vZGU6ICIiLmludG8o KSwKKyAgICAgICAgICAgICAgICBpZGVudDogIiIuaW50bygpLAorICAgICAgICAgICAgICAgIHRh ZzogIiIuaW50bygpLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICIiLmludG8oKQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgLm1lc3NhZ2VfdHlwZSgpLAorICAgICAgICAgICAgMworICAg ICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2t2c3RvcmVfbWVzc2Fn ZV90eXBlX3JvdW5kdHJpcCgpIHsKKyAgICAgICAgLy8gVGVzdCB0aGF0IG1lc3NhZ2VfdHlwZSgp IGFuZCBkZXNlcmlhbGl6ZSgpIGFyZSBjb25zaXN0ZW50CisgICAgICAgIHVzZSBzdXBlcjo6S3ZT dG9yZU1lc3NhZ2VUeXBlOworCisgICAgICAgIGFzc2VydF9lcSEodTE2Ojpmcm9tKEt2U3RvcmVN ZXNzYWdlVHlwZTo6VXBkYXRlKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEodTE2Ojpmcm9tKEt2 U3RvcmVNZXNzYWdlVHlwZTo6VXBkYXRlQ29tcGxldGUpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2Vx ISh1MTY6OmZyb20oS3ZTdG9yZU1lc3NhZ2VUeXBlOjpMb2cpLCAzKTsKKworICAgICAgICBhc3Nl cnRfZXEhKAorICAgICAgICAgICAgS3ZTdG9yZU1lc3NhZ2VUeXBlOjp0cnlfZnJvbSgxKS51bndy YXAoKSwKKyAgICAgICAgICAgIEt2U3RvcmVNZXNzYWdlVHlwZTo6VXBkYXRlCisgICAgICAgICk7 CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBLdlN0b3JlTWVzc2FnZVR5cGU6OnRy eV9mcm9tKDIpLnVud3JhcCgpLAorICAgICAgICAgICAgS3ZTdG9yZU1lc3NhZ2VUeXBlOjpVcGRh dGVDb21wbGV0ZQorICAgICAgICApOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAg S3ZTdG9yZU1lc3NhZ2VUeXBlOjp0cnlfZnJvbSgzKS51bndyYXAoKSwKKyAgICAgICAgICAgIEt2 U3RvcmVNZXNzYWdlVHlwZTo6TG9nCisgICAgICAgICk7CisKKyAgICAgICAgYXNzZXJ0IShLdlN0 b3JlTWVzc2FnZVR5cGU6OnRyeV9mcm9tKDApLmlzX2VycigpKTsKKyAgICAgICAgYXNzZXJ0IShL dlN0b3JlTWVzc2FnZVR5cGU6OnRyeV9mcm9tKDQpLmlzX2VycigpKTsKKyAgICB9Cit9CmRpZmYg LS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9saWIucnMgYi9zcmMvcG14Y2Zz LXJzL3BteGNmcy1kZnNtL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLjg5MjQwNDgzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMt ZGZzbS9zcmMvbGliLnJzCkBAIC0wLDAgKzEsMzIgQEAKKy8vLyBEaXN0cmlidXRlZCBGaW5pdGUg U3RhdGUgTWFjaGluZSAoREZTTSkgZm9yIGNsdXN0ZXIgc3RhdGUgc3luY2hyb25pemF0aW9uCisv Ly8KKy8vLyBUaGlzIGNyYXRlIGltcGxlbWVudHMgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHN5bmNo cm9uaXppbmcgY29uZmlndXJhdGlvbgorLy8vIGNoYW5nZXMgYWNyb3NzIHRoZSBjbHVzdGVyIG5v ZGVzIHVzaW5nIENvcm9zeW5jIENQRy4KKy8vLworLy8vIFRoZSBERlNNIGhhbmRsZXM6CisvLy8g LSBTdGF0ZSBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBub2RlcworLy8vIC0gTWVzc2FnZSBvcmRl cmluZyBhbmQgcXVldWluZworLy8vIC0gTGVhZGVyLWJhc2VkIHN0YXRlIHVwZGF0ZXMKKy8vLyAt IFNwbGl0LWJyYWluIHByZXZlbnRpb24KKy8vLyAtIE1lbWJlcnNoaXAgY2hhbmdlIGhhbmRsaW5n Cittb2QgY2FsbGJhY2tzOworcHViIG1vZCBjbHVzdGVyX2RhdGFiYXNlX3NlcnZpY2U7Cittb2Qg Y3BnX3NlcnZpY2U7Cittb2QgZGZzbV9tZXNzYWdlOworbW9kIGZ1c2VfbWVzc2FnZTsKK21vZCBr dl9zdG9yZV9tZXNzYWdlOworbW9kIG1lc3NhZ2U7Cittb2Qgc3RhdGVfbWFjaGluZTsKK3B1YiBt b2Qgc3RhdHVzX3N5bmNfc2VydmljZTsKK21vZCB0eXBlczsKK21vZCB3aXJlX2Zvcm1hdDsKKwor Ly8gUmUtZXhwb3J0IHB1YmxpYyBBUEkKK3B1YiB1c2UgY2FsbGJhY2tzOjpDYWxsYmFja3M7Citw dWIgdXNlIGNsdXN0ZXJfZGF0YWJhc2Vfc2VydmljZTo6Q2x1c3RlckRhdGFiYXNlU2VydmljZTsK K3B1YiB1c2UgY3BnX3NlcnZpY2U6OntDcGdIYW5kbGVyLCBDcGdTZXJ2aWNlfTsKK3B1YiB1c2Ug ZnVzZV9tZXNzYWdlOjpGdXNlTWVzc2FnZTsKK3B1YiB1c2Uga3Zfc3RvcmVfbWVzc2FnZTo6S3ZT dG9yZU1lc3NhZ2U7CitwdWIgdXNlIHN0YXRlX21hY2hpbmU6OntEZnNtLCBEZnNtQnJvYWRjYXN0 fTsKK3B1YiB1c2Ugc3RhdHVzX3N5bmNfc2VydmljZTo6U3RhdHVzU3luY1NlcnZpY2U7CitwdWIg dXNlIHR5cGVzOjpOb2RlU3luY0luZm87CmRpZmYgLS1naXQgYS9zcmMvcG14Y2ZzLXJzL3BteGNm cy1kZnNtL3NyYy9tZXNzYWdlLnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvbWVz c2FnZS5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjRlNjg0N2IKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9tZXNzYWdlLnJz CkBAIC0wLDAgKzEsMjEgQEAKKy8vLyBIaWdoLWxldmVsIG1lc3NhZ2UgYWJzdHJhY3Rpb24gZm9y IERGU00KKy8vLworLy8vIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgTWVzc2FnZSB0cmFpdCBmb3Ig d29ya2luZyB3aXRoIGNsdXN0ZXIgbWVzc2FnZXMKKy8vLyBhdCBhIGhpZ2hlciBhYnN0cmFjdGlv biBsZXZlbCB0aGFuIHJhdyBieXRlcy4KK3VzZSBhbnlob3c6OlJlc3VsdDsKKworLy8vIFRyYWl0 IGZvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSBzZW50IHRocm91Z2ggREZTTQorcHViIHRyYWl0IE1l c3NhZ2U6IFNpemVkIHsKKyAgICAvLy8gR2V0IHRoZSBtZXNzYWdlIHR5cGUgaWRlbnRpZmllcgor ICAgIGZuIG1lc3NhZ2VfdHlwZSgmc2VsZikgLT4gdTE2OworCisgICAgLy8vIFNlcmlhbGl6ZSB0 aGUgbWVzc2FnZSB0byBieXRlcyAoYXBwbGljYXRpb24gbWVzc2FnZSBwYXlsb2FkIG9ubHkpCisg ICAgLy8vCisgICAgLy8vIFRoaXMgc2VyaWFsaXplcyBvbmx5IHRoZSBhcHBsaWNhdGlvbi1sZXZl bCBwYXlsb2FkLiBUaGUgREZTTSBwcm90b2NvbAorICAgIC8vLyBoZWFkZXJzIChtc2dfY291bnQs IHRpbWVzdGFtcCwgcHJvdG9jb2xfdmVyc2lvbiwgZXRjLikgYXJlIGFkZGVkIGJ5CisgICAgLy8v IERmc21NZXNzYWdlOjpzZXJpYWxpemUoKSB3aGVuIHdyYXBwaW5nIGluIERmc21NZXNzYWdlOjpO b3JtYWwuCisgICAgZm4gc2VyaWFsaXplKCZzZWxmKSAtPiBWZWM8dTg+OworCisgICAgLy8vIERl c2VyaWFsaXplIGZyb20gYnl0ZXMgZ2l2ZW4gYSBtZXNzYWdlIHR5cGUKKyAgICBmbiBkZXNlcmlh bGl6ZShtZXNzYWdlX3R5cGU6IHUxNiwgZGF0YTogJlt1OF0pIC0+IFJlc3VsdDxTZWxmPjsKK30K ZGlmZiAtLWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL3N0YXRlX21hY2hpbmUu cnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy9zdGF0ZV9tYWNoaW5lLnJzCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4yYzkwZTRlYQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL3N0YXRlX21hY2hpbmUucnMKQEAgLTAs MCArMSwxMDEzIEBACisvLy8gREZTTSBzdGF0ZSBtYWNoaW5lIGltcGxlbWVudGF0aW9uCisvLy8K Ky8vLyBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgbWFpbiBEZnNtIHN0cnVjdCBhbmQgaXRzIGlt cGxlbWVudGF0aW9uCisvLy8gZm9yIG1hbmFnaW5nIGRpc3RyaWJ1dGVkIHN0YXRlIHN5bmNocm9u aXphdGlvbi4KK3VzZSBhbnlob3c6OntDb250ZXh0LCBSZXN1bHR9OwordXNlIHBhcmtpbmdfbG90 Ojp7TXV0ZXgsIFJ3TG9ja307Cit1c2UgcG14Y2ZzX2FwaV90eXBlczo6TWVtYmVySW5mbzsKK3Vz ZSBydXN0X2Nvcm9zeW5jOjp7Tm9kZUlkLCBjcGd9OwordXNlIHN0ZDo6Y29sbGVjdGlvbnM6OntC VHJlZU1hcCwgVmVjRGVxdWV9OwordXNlIHN0ZDo6c3luYzo6QXJjOwordXNlIHN0ZDo6c3luYzo6 YXRvbWljOjp7QXRvbWljVTMyLCBBdG9taWNVNjQsIE9yZGVyaW5nfTsKK3VzZSBzdGQ6OnRpbWU6 OntTeXN0ZW1UaW1lLCBVTklYX0VQT0NIfTsKKwordXNlIHN1cGVyOjpjcGdfc2VydmljZTo6e0Nw Z0hhbmRsZXIsIENwZ1NlcnZpY2V9OwordXNlIHN1cGVyOjpkZnNtX21lc3NhZ2U6OkRmc21NZXNz YWdlOwordXNlIHN1cGVyOjptZXNzYWdlOjpNZXNzYWdlIGFzIE1lc3NhZ2VUcmFpdDsKK3VzZSBz dXBlcjo6dHlwZXM6OntEZnNtTW9kZSwgUXVldWVkTWVzc2FnZSwgU3luY0Vwb2NofTsKK3VzZSBj cmF0ZTo6e0NhbGxiYWNrcywgRnVzZU1lc3NhZ2UsIE5vZGVTeW5jSW5mb307CisKKy8vLyBFeHRl bnNpb24gdHJhaXQgdG8gYWRkIGJyb2FkY2FzdCgpIG1ldGhvZCB0byBPcHRpb248QXJjPERmc208 RnVzZU1lc3NhZ2U+Pj4KKy8vLworLy8vIFRoaXMgYWxsb3dzIGNhbGxpbmcgYC5icm9hZGNhc3Qo KWAgZGlyZWN0bHkgb24gT3B0aW9uPEFyYzxEZnNtPEZ1c2VNZXNzYWdlPj4+IGZpZWxkcworLy8v IHdpdGhvdXQgZXhwbGljaXQgTm9uZSBjaGVja2luZyBhdCBjYWxsIHNpdGVzLgorcHViIHRyYWl0 IERmc21Ccm9hZGNhc3QgeworICAgIGZuIGJyb2FkY2FzdCgmc2VsZiwgbXNnOiBGdXNlTWVzc2Fn ZSk7Cit9CisKK2ltcGwgRGZzbUJyb2FkY2FzdCBmb3IgT3B0aW9uPEFyYzxEZnNtPEZ1c2VNZXNz YWdlPj4+IHsKKyAgICBmbiBicm9hZGNhc3QoJnNlbGYsIG1zZzogRnVzZU1lc3NhZ2UpIHsKKyAg ICAgICAgaWYgbGV0IFNvbWUoZGZzbSkgPSBzZWxmIHsKKyAgICAgICAgICAgIGxldCBfID0gZGZz bS5icm9hZGNhc3QobXNnKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8vIERGU00gc3RhdGUg bWFjaGluZQorLy8vCisvLy8gVGhlIGdlbmVyaWMgcGFyYW1ldGVyIGBNYCBzcGVjaWZpZXMgdGhl IG1lc3NhZ2UgdHlwZSB0aGlzIERGU00gaGFuZGxlczoKKy8vLyAtIGBEZnNtPEZ1c2VNZXNzYWdl PmAgZm9yIG1haW4gZGF0YWJhc2Ugb3BlcmF0aW9ucworLy8vIC0gYERmc208S3ZTdG9yZU1lc3Nh Z2U+YCBmb3Igc3RhdHVzIHN5bmNocm9uaXphdGlvbgorcHViIHN0cnVjdCBEZnNtPE0+IHsKKyAg ICAvLy8gQ1BHIHNlcnZpY2UgZm9yIGNsdXN0ZXIgY29tbXVuaWNhdGlvbiAobWF0Y2hpbmcgQydz IGRmc21fdC0+Y3BnX2hhbmRsZSkKKyAgICBjcGdfc2VydmljZTogUndMb2NrPE9wdGlvbjxBcmM8 Q3BnU2VydmljZT4+PiwKKworICAgIC8vLyBDbHVzdGVyIGdyb3VwIG5hbWUgZm9yIENQRworICAg IGNsdXN0ZXJfbmFtZTogU3RyaW5nLAorCisgICAgLy8vIENhbGxiYWNrcyBmb3IgYXBwbGljYXRp b24gaW50ZWdyYXRpb24KKyAgICBjYWxsYmFja3M6IEFyYzxkeW4gQ2FsbGJhY2tzPE0+PiwKKwor ICAgIC8vLyBDdXJyZW50IG9wZXJhdGluZyBtb2RlCisgICAgbW9kZTogUndMb2NrPERmc21Nb2Rl PiwKKworICAgIC8vLyBDdXJyZW50IHN5bmMgZXBvY2gKKyAgICBzeW5jX2Vwb2NoOiBSd0xvY2s8 U3luY0Vwb2NoPiwKKworICAgIC8vLyBMb2NhbCBlcG9jaCBjb3VudGVyCisgICAgbG9jYWxfZXBv Y2hfY291bnRlcjogTXV0ZXg8dTMyPiwKKworICAgIC8vLyBOb2RlIHN5bmNocm9uaXphdGlvbiBp bmZvCisgICAgc3luY19ub2RlczogUndMb2NrPFZlYzxOb2RlU3luY0luZm8+PiwKKworICAgIC8v LyBNZXNzYWdlIHF1ZXVlIChvcmRlcmVkIGJ5IGNvdW50KQorICAgIG1zZ19xdWV1ZTogTXV0ZXg8 QlRyZWVNYXA8dTY0LCBRdWV1ZWRNZXNzYWdlPE0+Pj4sCisKKyAgICAvLy8gU3luYyBxdWV1ZSBm b3IgbWVzc2FnZXMgZHVyaW5nIHVwZGF0ZSBtb2RlCisgICAgc3luY19xdWV1ZTogTXV0ZXg8VmVj RGVxdWU8UXVldWVkTWVzc2FnZTxNPj4+LAorCisgICAgLy8vIE1lc3NhZ2UgY291bnRlciBmb3Ig b3JkZXJpbmcgKGF0b21pYyBmb3IgbG9jay1mcmVlIGluY3JlbWVudCkKKyAgICBtc2dfY291bnRl cjogQXRvbWljVTY0LAorCisgICAgLy8vIExvd2VzdCBub2RlIElEIGluIGNsdXN0ZXIgKGxlYWRl cikKKyAgICBsb3dlc3Rfbm9kZWlkOiBSd0xvY2s8dTMyPiwKKworICAgIC8vLyBPdXIgbm9kZSBJ RCAoc2V0IGR1cmluZyBpbml0X2NwZyB2aWEgY3BnX2xvY2FsX2dldCkKKyAgICBub2RlaWQ6IEF0 b21pY1UzMiwKKworICAgIC8vLyBPdXIgcHJvY2VzcyBJRAorICAgIHBpZDogdTMyLAorCisgICAg Ly8vIFByb3RvY29sIHZlcnNpb24gZm9yIGNsdXN0ZXIgY29tcGF0aWJpbGl0eQorICAgIHByb3Rv Y29sX3ZlcnNpb246IHUzMiwKKworICAgIC8vLyBTdGF0ZSB2ZXJpZmljYXRpb24gLSBTSEEtMjU2 IGNoZWNrc3VtCisgICAgY2hlY2tzdW06IE11dGV4PFt1ODsgMzJdPiwKKworICAgIC8vLyBDaGVj a3N1bSBlcG9jaCAod2hlbiBpdCB3YXMgY29tcHV0ZWQpCisgICAgY2hlY2tzdW1fZXBvY2g6IE11 dGV4PFN5bmNFcG9jaD4sCisKKyAgICAvLy8gQ2hlY2tzdW0gSUQgZm9yIHZlcmlmaWNhdGlvbgor ICAgIGNoZWNrc3VtX2lkOiBNdXRleDx1NjQ+LAorCisgICAgLy8vIENoZWNrc3VtIGNvdW50ZXIg Zm9yIHZlcmlmeSByZXF1ZXN0cworICAgIGNoZWNrc3VtX2NvdW50ZXI6IE11dGV4PHU2ND4sCit9 CisKK2ltcGw8TT4gRGZzbTxNPgord2hlcmUKKyAgICBNOiBNZXNzYWdlVHJhaXQsCit7CisgICAg Ly8vIENyZWF0ZSBhIG5ldyBERlNNIGluc3RhbmNlCisgICAgLy8vCisgICAgLy8vIE5vdGU6IG5v ZGVpZCB3aWxsIGJlIG9idGFpbmVkIGZyb20gQ1BHIHZpYSBjcGdfbG9jYWxfZ2V0KCkgZHVyaW5n IGluaXRfY3BnKCkKKyAgICBwdWIgZm4gbmV3KGNsdXN0ZXJfbmFtZTogU3RyaW5nLCBjYWxsYmFj a3M6IEFyYzxkeW4gQ2FsbGJhY2tzPE0+PikgLT4gUmVzdWx0PFNlbGY+IHsKKyAgICAgICAgU2Vs Zjo6bmV3X3dpdGhfcHJvdG9jb2xfdmVyc2lvbihjbHVzdGVyX25hbWUsIGNhbGxiYWNrcywgRGZz bU1lc3NhZ2U6OjxNPjo6REVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OKQorICAgIH0KKworICAgIC8v LyBDcmVhdGUgYSBuZXcgREZTTSBpbnN0YW5jZSB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wgdmVy c2lvbgorICAgIC8vLworICAgIC8vLyBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgREZTTSBuZWVkcyB0 byB1c2UgYSBub24tZGVmYXVsdCBwcm90b2NvbCB2ZXJzaW9uLAorICAgIC8vLyBzdWNoIGFzIHRo ZSBzdGF0dXMva3ZzdG9yZSBERlNNIHdoaWNoIHVzZXMgcHJvdG9jb2wgdmVyc2lvbiAwIGZvcgor ICAgIC8vLyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEMgaW1wbGVtZW50YXRpb24uCisgICAgLy8v CisgICAgLy8vIE5vdGU6IG5vZGVpZCB3aWxsIGJlIG9idGFpbmVkIGZyb20gQ1BHIHZpYSBjcGdf bG9jYWxfZ2V0KCkgZHVyaW5nIGluaXRfY3BnKCkKKyAgICBwdWIgZm4gbmV3X3dpdGhfcHJvdG9j b2xfdmVyc2lvbigKKyAgICAgICAgY2x1c3Rlcl9uYW1lOiBTdHJpbmcsCisgICAgICAgIGNhbGxi YWNrczogQXJjPGR5biBDYWxsYmFja3M8TT4+LAorICAgICAgICBwcm90b2NvbF92ZXJzaW9uOiB1 MzIsCisgICAgKSAtPiBSZXN1bHQ8U2VsZj4geworICAgICAgICBsZXQgbm93ID0gU3lzdGVtVGlt ZTo6bm93KCkKKyAgICAgICAgICAgIC5kdXJhdGlvbl9zaW5jZShVTklYX0VQT0NIKQorICAgICAg ICAgICAgLnVud3JhcF9vcl9kZWZhdWx0KCkKKyAgICAgICAgICAgIC5hc19zZWNzKCkgYXMgdTMy OworICAgICAgICBsZXQgcGlkID0gc3RkOjpwcm9jZXNzOjppZCgpOworCisgICAgICAgIE9rKFNl bGYgeworICAgICAgICAgICAgY3BnX3NlcnZpY2U6IFJ3TG9jazo6bmV3KE5vbmUpLAorICAgICAg ICAgICAgY2x1c3Rlcl9uYW1lLAorICAgICAgICAgICAgY2FsbGJhY2tzLAorICAgICAgICAgICAg bW9kZTogUndMb2NrOjpuZXcoRGZzbU1vZGU6OlN0YXJ0KSwKKyAgICAgICAgICAgIHN5bmNfZXBv Y2g6IFJ3TG9jazo6bmV3KFN5bmNFcG9jaCB7CisgICAgICAgICAgICAgICAgZXBvY2g6IDAsCisg ICAgICAgICAgICAgICAgdGltZTogbm93LAorICAgICAgICAgICAgICAgIG5vZGVpZDogMCwKKyAg ICAgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIGxvY2FsX2Vw b2NoX2NvdW50ZXI6IE11dGV4OjpuZXcoMCksCisgICAgICAgICAgICBzeW5jX25vZGVzOiBSd0xv Y2s6Om5ldyhWZWM6Om5ldygpKSwKKyAgICAgICAgICAgIG1zZ19xdWV1ZTogTXV0ZXg6Om5ldyhC VHJlZU1hcDo6bmV3KCkpLAorICAgICAgICAgICAgc3luY19xdWV1ZTogTXV0ZXg6Om5ldyhWZWNE ZXF1ZTo6bmV3KCkpLAorICAgICAgICAgICAgbXNnX2NvdW50ZXI6IEF0b21pY1U2NDo6bmV3KDAp LAorICAgICAgICAgICAgbG93ZXN0X25vZGVpZDogUndMb2NrOjpuZXcoMCksCisgICAgICAgICAg ICBub2RlaWQ6IEF0b21pY1UzMjo6bmV3KDApLCAvLyBXaWxsIGJlIHNldCBieSBpbml0X2NwZygp IHVzaW5nIGNwZ19sb2NhbF9nZXQoKQorICAgICAgICAgICAgcGlkLAorICAgICAgICAgICAgcHJv dG9jb2xfdmVyc2lvbiwKKyAgICAgICAgICAgIGNoZWNrc3VtOiBNdXRleDo6bmV3KFswdTg7IDMy XSksCisgICAgICAgICAgICBjaGVja3N1bV9lcG9jaDogTXV0ZXg6Om5ldyhTeW5jRXBvY2ggewor ICAgICAgICAgICAgICAgIGVwb2NoOiAwLAorICAgICAgICAgICAgICAgIHRpbWU6IDAsCisgICAg ICAgICAgICAgICAgbm9kZWlkOiAwLAorICAgICAgICAgICAgICAgIHBpZDogMCwKKyAgICAgICAg ICAgIH0pLAorICAgICAgICAgICAgY2hlY2tzdW1faWQ6IE11dGV4OjpuZXcoMCksCisgICAgICAg ICAgICBjaGVja3N1bV9jb3VudGVyOiBNdXRleDo6bmV3KDApLAorICAgICAgICB9KQorICAgIH0K KworICAgIHB1YiBmbiBnZXRfbW9kZSgmc2VsZikgLT4gRGZzbU1vZGUgeworICAgICAgICAqc2Vs Zi5tb2RlLnJlYWQoKQorICAgIH0KKworICAgIHB1YiBmbiBzZXRfbW9kZSgmc2VsZiwgbmV3X21v ZGU6IERmc21Nb2RlKSB7CisgICAgICAgIGxldCBtdXQgbW9kZSA9IHNlbGYubW9kZS53cml0ZSgp OworICAgICAgICBsZXQgb2xkX21vZGUgPSAqbW9kZTsKKworICAgICAgICBpZiBvbGRfbW9kZS5p c19lcnJvcigpICYmICFuZXdfbW9kZS5pc19lcnJvcigpIHsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorCisgICAgICAgIGlmIG9sZF9tb2RlID09IG5ld19tb2RlIHsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgICptb2RlID0gbmV3X21vZGU7CisgICAg ICAgIGRyb3AobW9kZSk7CisKKyAgICAgICAgaWYgbmV3X21vZGUuaXNfZXJyb3IoKSB7CisgICAg ICAgICAgICB0cmFjaW5nOjplcnJvciEoIkRGU006IHt9IiwgbmV3X21vZGUpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdHJhY2luZzo6aW5mbyEoIkRGU006IHt9IiwgbmV3X21vZGUp OworICAgICAgICB9CisgICAgfQorCisgICAgcHViIGZuIGlzX2xlYWRlcigmc2VsZikgLT4gYm9v bCB7CisgICAgICAgIGxldCBsb3dlc3QgPSAqc2VsZi5sb3dlc3Rfbm9kZWlkLnJlYWQoKTsKKyAg ICAgICAgbG93ZXN0ID4gMCAmJiBsb3dlc3QgPT0gc2VsZi5ub2RlaWQubG9hZChPcmRlcmluZzo6 UmVsYXhlZCkKKyAgICB9CisKKyAgICBwdWIgZm4gZ2V0X25vZGVpZCgmc2VsZikgLT4gdTMyIHsK KyAgICAgICAgc2VsZi5ub2RlaWQubG9hZChPcmRlcmluZzo6UmVsYXhlZCkKKyAgICB9CisKKyAg ICBwdWIgZm4gZ2V0X3BpZCgmc2VsZikgLT4gdTMyIHsKKyAgICAgICAgc2VsZi5waWQKKyAgICB9 CisKKyAgICAvLy8gQ2hlY2sgaWYgREZTTSBpcyBzeW5jZWQgYW5kIHJlYWR5CisgICAgcHViIGZu IGlzX3N5bmNlZCgmc2VsZikgLT4gYm9vbCB7CisgICAgICAgIHNlbGYuZ2V0X21vZGUoKSA9PSBE ZnNtTW9kZTo6U3luY2VkCisgICAgfQorCisgICAgLy8vIENoZWNrIGlmIERGU00gZW5jb3VudGVy ZWQgYW4gZXJyb3IKKyAgICBwdWIgZm4gaXNfZXJyb3IoJnNlbGYpIC0+IGJvb2wgeworICAgICAg ICBzZWxmLmdldF9tb2RlKCkuaXNfZXJyb3IoKQorICAgIH0KK30KKworaW1wbDxNOiBNZXNzYWdl VHJhaXQgKyBDbG9uZT4gRGZzbTxNPiB7CisgICAgZm4gc2VuZF9zeW5jX3N0YXJ0KCZzZWxmKSAt PiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgdHJhY2luZzo6ZGVidWchKCJERlNNOiBzZW5kaW5nIFNZ TkNfU1RBUlQgbWVzc2FnZSIpOworICAgICAgICBsZXQgc3luY19lcG9jaCA9ICpzZWxmLnN5bmNf ZXBvY2gucmVhZCgpOworICAgICAgICBzZWxmLnNlbmRfZGZzbV9tZXNzYWdlKCZEZnNtTWVzc2Fn ZTo6PE0+OjpTeW5jU3RhcnQgeyBzeW5jX2Vwb2NoIH0pCisgICAgfQorCisgICAgZm4gc2VuZF9z dGF0ZSgmc2VsZikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZT TTogZ2VuZXJhdGluZyBhbmQgc2VuZGluZyBzdGF0ZSIpOworCisgICAgICAgIGxldCBzdGF0ZV9k YXRhID0gc2VsZgorICAgICAgICAgICAgLmNhbGxiYWNrcworICAgICAgICAgICAgLmdldF9zdGF0 ZSgpCisgICAgICAgICAgICAuY29udGV4dCgiRmFpbGVkIHRvIGdldCBzdGF0ZSBmcm9tIGNhbGxi YWNrcyIpPzsKKworICAgICAgICB0cmFjaW5nOjppbmZvISgiREZTTTogc2VuZGluZyBzdGF0ZSAo e30gYnl0ZXMpIiwgc3RhdGVfZGF0YS5sZW4oKSk7CisKKyAgICAgICAgbGV0IHN5bmNfZXBvY2gg PSAqc2VsZi5zeW5jX2Vwb2NoLnJlYWQoKTsKKyAgICAgICAgbGV0IGRmc21fbXNnOiBEZnNtTWVz c2FnZTxNPiA9IERmc21NZXNzYWdlOjpTdGF0ZSB7CisgICAgICAgICAgICBzeW5jX2Vwb2NoLAor ICAgICAgICAgICAgZGF0YTogc3RhdGVfZGF0YSwKKyAgICAgICAgfTsKKyAgICAgICAgc2VsZi5z ZW5kX2Rmc21fbWVzc2FnZSgmZGZzbV9tc2cpPzsKKworICAgICAgICBPaygoKSkKKyAgICB9CisK KyAgICBwdWIoc3VwZXIpIGZuIHNlbmRfZGZzbV9tZXNzYWdlKCZzZWxmLCBtZXNzYWdlOiAmRGZz bU1lc3NhZ2U8TT4pIC0+IFJlc3VsdDwoKT4geworICAgICAgICBsZXQgc2VyaWFsaXplZCA9IG1l c3NhZ2Uuc2VyaWFsaXplKCk7CisKKyAgICAgICAgaWYgbGV0IFNvbWUocmVmIHNlcnZpY2UpID0g KnNlbGYuY3BnX3NlcnZpY2UucmVhZCgpIHsKKyAgICAgICAgICAgIHNlcnZpY2UKKyAgICAgICAg ICAgICAgICAubWNhc3QoY3BnOjpHdWFyYW50ZWU6OlR5cGVBZ3JlZWQsICZzZXJpYWxpemVkKQor ICAgICAgICAgICAgICAgIC5jb250ZXh0KCJGYWlsZWQgdG8gYnJvYWRjYXN0IERGU00gbWVzc2Fn ZSIpPzsKKyAgICAgICAgICAgIE9rKCgpKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg YW55aG93OjpiYWlsISgiQ1BHIG5vdCBpbml0aWFsaXplZCIpCisgICAgICAgIH0KKyAgICB9CisK KyAgICBwdWIgZm4gcHJvY2Vzc19zdGF0ZSgmc2VsZiwgbm9kZWlkOiB1MzIsIHBpZDogdTMyLCBz dGF0ZTogJlt1OF0pIC0+IFJlc3VsdDwoKT4geworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoCisg ICAgICAgICAgICAiREZTTTogcHJvY2Vzc2luZyBzdGF0ZSBmcm9tIG5vZGUge30ve30gKHt9IGJ5 dGVzKSIsCisgICAgICAgICAgICBub2RlaWQsCisgICAgICAgICAgICBwaWQsCisgICAgICAgICAg ICBzdGF0ZS5sZW4oKQorICAgICAgICApOworCisgICAgICAgIGxldCBtdXQgc3luY19ub2RlcyA9 IHNlbGYuc3luY19ub2Rlcy53cml0ZSgpOworCisgICAgICAgIGlmIGxldCBTb21lKG5vZGUpID0g c3luY19ub2RlcworICAgICAgICAgICAgLml0ZXJfbXV0KCkKKyAgICAgICAgICAgIC5maW5kKHxu fCBuLm5vZGVpZCA9PSBub2RlaWQgJiYgbi5waWQgPT0gcGlkKQorICAgICAgICB7CisgICAgICAg ICAgICBub2RlLnN0YXRlID0gU29tZShzdGF0ZS50b192ZWMoKSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgiREZTTTogcmVjZWl2ZWQgc3RhdGUgZnJvbSB1 bmtub3duIG5vZGUge30ve30iLCBub2RlaWQsIHBpZCk7CisgICAgICAgICAgICByZXR1cm4gT2so KCkpOworICAgICAgICB9CisKKyAgICAgICAgbGV0IGFsbF9yZWNlaXZlZCA9IHN5bmNfbm9kZXMu aXRlcigpLmFsbCh8bnwgbi5zdGF0ZS5pc19zb21lKCkpOworICAgICAgICBkcm9wKHN5bmNfbm9k ZXMpOworCisgICAgICAgIGlmIGFsbF9yZWNlaXZlZCB7CisgICAgICAgICAgICB0cmFjaW5nOjpp bmZvISgiREZTTTogcmVjZWl2ZWQgYWxsIHN0YXRlcywgcHJvY2Vzc2luZyBzeW5jaHJvbml6YXRp b24iKTsKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc19zdGF0ZV9zeW5jKCk/OworICAgICAgICB9 CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gcHJvY2Vzc19zdGF0ZV9zeW5jKCZz ZWxmKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgdHJhY2luZzo6aW5mbyEoIkRGU006IHByb2Nl c3Npbmcgc3RhdGUgc3luY2hyb25pemF0aW9uIik7CisKKyAgICAgICAgbGV0IHN5bmNfbm9kZXMg PSBzZWxmLnN5bmNfbm9kZXMucmVhZCgpLmNsb25lKCk7CisKKyAgICAgICAgbWF0Y2ggc2VsZi5j YWxsYmFja3MucHJvY2Vzc19zdGF0ZV91cGRhdGUoJnN5bmNfbm9kZXMpIHsKKyAgICAgICAgICAg IE9rKHN5bmNlZCkgPT4geworICAgICAgICAgICAgICAgIGlmIHN5bmNlZCB7CisgICAgICAgICAg ICAgICAgICAgIHRyYWNpbmc6OmluZm8hKCJERlNNOiBzdGF0ZSBzeW5jaHJvbml6YXRpb24gc3Vj Y2Vzc2Z1bCIpOworCisgICAgICAgICAgICAgICAgICAgIGxldCBteV9ub2RlaWQgPSBzZWxmLm5v ZGVpZC5sb2FkKE9yZGVyaW5nOjpSZWxheGVkKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IG11 dCBzeW5jX25vZGVzX3dyaXRlID0gc2VsZi5zeW5jX25vZGVzLndyaXRlKCk7CisgICAgICAgICAg ICAgICAgICAgIGlmIGxldCBTb21lKG5vZGUpID0gc3luY19ub2Rlc193cml0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgLml0ZXJfbXV0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5maW5k KHxufCBuLm5vZGVpZCA9PSBteV9ub2RlaWQgJiYgbi5waWQgPT0gc2VsZi5waWQpCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3luY2VkID0gdHJ1 ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcm9wKHN5bmNf bm9kZXNfd3JpdGUpOworCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0X21vZGUoRGZzbU1v ZGU6OlN5bmNlZCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2tzLm9uX3N5bmNl ZCgpOworICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGl2ZXJfbWVzc2FnZV9xdWV1ZSgpPzsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjpp bmZvISgiREZTTTogZW50ZXJpbmcgVVBEQVRFIG1vZGUsIHdhaXRpbmcgZm9yIGxlYWRlciIpOwor ICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9tb2RlKERmc21Nb2RlOjpVcGRhdGUpOworICAg ICAgICAgICAgICAgICAgICBzZWxmLmRlbGl2ZXJfbWVzc2FnZV9xdWV1ZSgpPzsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFcnIoZSkgPT4geworICAgICAg ICAgICAgICAgIHRyYWNpbmc6OmVycm9yISgiREZTTTogc3RhdGUgc3luY2hyb25pemF0aW9uIGZh aWxlZDoge30iLCBlKTsKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9tb2RlKERmc21Nb2RlOjpF cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVycihlKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIHB1YiBmbiBxdWV1ZV9tZXNz YWdlKCZzZWxmLCBub2RlaWQ6IHUzMiwgcGlkOiB1MzIsIG1zZ19jb3VudDogdTY0LCBtZXNzYWdl OiBNLCB0aW1lc3RhbXA6IHU2NCkKKyAgICB3aGVyZQorICAgICAgICBNOiBDbG9uZSwKKyAgICB7 CisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgKKyAgICAgICAgICAgICJERlNNOiBxdWV1ZWluZyBt ZXNzYWdlIHt9IGZyb20ge30ve30iLAorICAgICAgICAgICAgbXNnX2NvdW50LAorICAgICAgICAg ICAgbm9kZWlkLAorICAgICAgICAgICAgcGlkCisgICAgICAgICk7CisKKyAgICAgICAgbGV0IHFt ID0gUXVldWVkTWVzc2FnZSB7CisgICAgICAgICAgICBub2RlaWQsCisgICAgICAgICAgICBwaWQs CisgICAgICAgICAgICBfbXNnX2NvdW50OiBtc2dfY291bnQsCisgICAgICAgICAgICBtZXNzYWdl LAorICAgICAgICAgICAgdGltZXN0YW1wLAorICAgICAgICB9OworCisgICAgICAgIGxldCBtb2Rl ID0gc2VsZi5nZXRfbW9kZSgpOworCisgICAgICAgIGxldCBub2RlX3N5bmNlZCA9IHNlbGYKKyAg ICAgICAgICAgIC5zeW5jX25vZGVzCisgICAgICAgICAgICAucmVhZCgpCisgICAgICAgICAgICAu aXRlcigpCisgICAgICAgICAgICAuZmluZCh8bnwgbi5ub2RlaWQgPT0gbm9kZWlkICYmIG4ucGlk ID09IHBpZCkKKyAgICAgICAgICAgIC5tYXAofG58IG4uc3luY2VkKQorICAgICAgICAgICAgLnVu d3JhcF9vcihmYWxzZSk7CisKKyAgICAgICAgaWYgbW9kZSA9PSBEZnNtTW9kZTo6VXBkYXRlICYm IG5vZGVfc3luY2VkIHsKKyAgICAgICAgICAgIHNlbGYuc3luY19xdWV1ZS5sb2NrKCkucHVzaF9i YWNrKHFtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlbGYubXNnX3F1ZXVlLmxv Y2soKS5pbnNlcnQobXNnX2NvdW50LCBxbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWIo c3VwZXIpIGZuIGRlbGl2ZXJfbWVzc2FnZV9xdWV1ZSgmc2VsZikgLT4gUmVzdWx0PCgpPgorICAg IHdoZXJlCisgICAgICAgIE06IENsb25lLAorICAgIHsKKyAgICAgICAgbGV0IG11dCBxdWV1ZSA9 IHNlbGYubXNnX3F1ZXVlLmxvY2soKTsKKyAgICAgICAgaWYgcXVldWUuaXNfZW1wdHkoKSB7Cisg ICAgICAgICAgICByZXR1cm4gT2soKCkpOworICAgICAgICB9CisKKyAgICAgICAgdHJhY2luZzo6 aW5mbyEoIkRGU006IGRlbGl2ZXJpbmcge30gcXVldWVkIG1lc3NhZ2VzIiwgcXVldWUubGVuKCkp OworCisgICAgICAgIGxldCBtb2RlID0gc2VsZi5nZXRfbW9kZSgpOworICAgICAgICBsZXQgc3lu Y19ub2RlcyA9IHNlbGYuc3luY19ub2Rlcy5yZWFkKCkuY2xvbmUoKTsKKworICAgICAgICBsZXQg bXV0IHRvX3JlbW92ZSA9IFZlYzo6bmV3KCk7CisKKyAgICAgICAgZm9yIChjb3VudCwgcW0pIGlu IHF1ZXVlLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgbm9kZV9pbmZvID0gc3luY19ub2Rlcwor ICAgICAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgICAgICAuZmluZCh8bnwgbi5ub2Rl aWQgPT0gcW0ubm9kZWlkICYmIG4ucGlkID09IHFtLnBpZCk7CisKKyAgICAgICAgICAgIGxldCBT b21lKGluZm8pID0gbm9kZV9pbmZvIGVsc2UgeworICAgICAgICAgICAgICAgIHRyYWNpbmc6OmRl YnVnISgKKyAgICAgICAgICAgICAgICAgICAgIkRGU006IHJlbW92aW5nIG1lc3NhZ2UgZnJvbSBu b24tbWVtYmVyIHt9L3t9IiwKKyAgICAgICAgICAgICAgICAgICAgcW0ubm9kZWlkLAorICAgICAg ICAgICAgICAgICAgICBxbS5waWQKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IHRvX3JlbW92ZS5wdXNoKCpjb3VudCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICB9OworCisgICAgICAgICAgICBpZiBtb2RlID09IERmc21Nb2RlOjpTeW5jZWQgJiYg aW5mby5zeW5jZWQgeworICAgICAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZTTTogZGVs aXZlcmluZyBtZXNzYWdlIHt9IiwgY291bnQpOworCisgICAgICAgICAgICAgICAgbWF0Y2ggc2Vs Zi5jYWxsYmFja3MuZGVsaXZlcl9tZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICBxbS5ub2Rl aWQsCisgICAgICAgICAgICAgICAgICAgIHFtLnBpZCwKKyAgICAgICAgICAgICAgICAgICAgcW0u bWVzc2FnZS5jbG9uZSgpLAorICAgICAgICAgICAgICAgICAgICBxbS50aW1lc3RhbXAsCisgICAg ICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIE9rKChyZXN1bHQsIHByb2Nlc3Nl ZCkpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVnISgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiREZTTTogbWVzc2FnZSBkZWxpdmVyZWQsIHJlc3VsdD17 fSwgcHJvY2Vzc2VkPXt9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEVycihl KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjplcnJvciEoIkRGU006IGZh aWxlZCB0byBkZWxpdmVyIG1lc3NhZ2U6IHt9IiwgZSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b19yZW1vdmUucHVzaCgqY291 bnQpOworICAgICAgICAgICAgfSBlbHNlIGlmIG1vZGUgPT0gRGZzbU1vZGU6OlVwZGF0ZSAmJiBp bmZvLnN5bmNlZCB7CisgICAgICAgICAgICAgICAgc2VsZi5zeW5jX3F1ZXVlLmxvY2soKS5wdXNo X2JhY2socW0uY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgdG9fcmVtb3ZlLnB1c2goKmNvdW50 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciBjb3VudCBpbiB0b19y ZW1vdmUgeworICAgICAgICAgICAgcXVldWUucmVtb3ZlKCZjb3VudCk7CisgICAgICAgIH0KKwor ICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBwdWIoc3VwZXIpIGZuIGRlbGl2ZXJfc3luY19x dWV1ZSgmc2VsZikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIGxldCBtdXQgc3luY19xdWV1ZSA9 IHNlbGYuc3luY19xdWV1ZS5sb2NrKCk7CisgICAgICAgIGxldCBxdWV1ZV9sZW4gPSBzeW5jX3F1 ZXVlLmxlbigpOworCisgICAgICAgIGlmIHF1ZXVlX2xlbiA9PSAwIHsKKyAgICAgICAgICAgIHJl dHVybiBPaygoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cmFjaW5nOjppbmZvISgiREZTTTog ZGVsaXZlcmluZyB7fSBzeW5jIHF1ZXVlIG1lc3NhZ2VzIiwgcXVldWVfbGVuKTsKKworICAgICAg ICB3aGlsZSBsZXQgU29tZShxbSkgPSBzeW5jX3F1ZXVlLnBvcF9mcm9udCgpIHsKKyAgICAgICAg ICAgIHRyYWNpbmc6OmRlYnVnISgKKyAgICAgICAgICAgICAgICAiREZTTTogZGVsaXZlcmluZyBz eW5jIG1lc3NhZ2UgZnJvbSB7fS97fSIsCisgICAgICAgICAgICAgICAgcW0ubm9kZWlkLAorICAg ICAgICAgICAgICAgIHFtLnBpZAorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgbWF0Y2gg c2VsZgorICAgICAgICAgICAgICAgIC5jYWxsYmFja3MKKyAgICAgICAgICAgICAgICAuZGVsaXZl cl9tZXNzYWdlKHFtLm5vZGVpZCwgcW0ucGlkLCBxbS5tZXNzYWdlLCBxbS50aW1lc3RhbXApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgT2soKHJlc3VsdCwgcHJvY2Vzc2VkKSkgPT4g eworICAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoCisgICAgICAgICAgICAgICAg ICAgICAgICAiREZTTTogc3luYyBtZXNzYWdlIGRlbGl2ZXJlZCwgcmVzdWx0PXt9LCBwcm9jZXNz ZWQ9e30iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgICAg ICAgICAgICAgcHJvY2Vzc2VkCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIEVycihlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRy YWNpbmc6OmVycm9yISgiREZTTTogZmFpbGVkIHRvIGRlbGl2ZXIgc3luYyBtZXNzYWdlOiB7fSIs IGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg ICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBTZW5kIGEgbWVzc2FnZSB0byB0aGUgY2x1c3Rl cgorICAgIC8vLworICAgIC8vLyBDcmVhdGVzIGEgcHJvcGVybHkgZm9ybWF0dGVkIE5vcm1hbCBt ZXNzYWdlIHdpdGggQy1jb21wYXRpYmxlIGhlYWRlcnMuCisgICAgcHViIGZuIHNlbmRfbWVzc2Fn ZSgmc2VsZiwgbWVzc2FnZTogTSkgLT4gUmVzdWx0PHU2ND4geworICAgICAgICBsZXQgbXNnX2Nv dW50ID0gc2VsZi5tc2dfY291bnRlci5mZXRjaF9hZGQoMSwgT3JkZXJpbmc6OlNlcUNzdCkgKyAx OworCisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZTTTogc2VuZGluZyBtZXNzYWdlIHt9Iiwg bXNnX2NvdW50KTsKKworICAgICAgICBsZXQgZGZzbV9tc2cgPSBEZnNtTWVzc2FnZTo6ZnJvbV9t ZXNzYWdlKG1zZ19jb3VudCwgbWVzc2FnZSwgc2VsZi5wcm90b2NvbF92ZXJzaW9uKTsKKworICAg ICAgICBzZWxmLnNlbmRfZGZzbV9tZXNzYWdlKCZkZnNtX21zZyk/OworCisgICAgICAgIE9rKG1z Z19jb3VudCkKKyAgICB9CisKKyAgICAvLy8gU2VuZCBhIFRyZWVFbnRyeSB1cGRhdGUgdG8gdGhl IGNsdXN0ZXIgKGxlYWRlciBvbmx5LCBkdXJpbmcgc3luY2hyb25pemF0aW9uKQorICAgIC8vLwor ICAgIC8vLyBUaGlzIGlzIHVzZWQgYnkgdGhlIGxlYWRlciB0byBzZW5kIGluZGl2aWR1YWwgZGF0 YWJhc2UgZW50cmllcyB0byBmb2xsb3dlcnMKKyAgICAvLy8gdGhhdCBuZWVkIHRvIGNhdGNoIHVw LiBNYXRjaGVzIEMncyBkZnNtX3NlbmRfdXBkYXRlKCkuCisgICAgcHViIGZuIHNlbmRfdXBkYXRl KCZzZWxmLCB0cmVlX2VudHJ5OiBwbXhjZnNfbWVtZGI6OlRyZWVFbnRyeSkgLT4gUmVzdWx0PCgp PiB7CisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZTTTogc2VuZGluZyBVcGRhdGUgZm9yIGlu b2RlIHt9IiwgdHJlZV9lbnRyeS5pbm9kZSk7CisKKyAgICAgICAgbGV0IHN5bmNfZXBvY2ggPSAq c2VsZi5zeW5jX2Vwb2NoLnJlYWQoKTsKKyAgICAgICAgbGV0IGRmc21fbXNnOiBEZnNtTWVzc2Fn ZTxNPiA9IERmc21NZXNzYWdlOjpmcm9tX3RyZWVfZW50cnkodHJlZV9lbnRyeSwgc3luY19lcG9j aCk7CisgICAgICAgIHNlbGYuc2VuZF9kZnNtX21lc3NhZ2UoJmRmc21fbXNnKT87CisKKyAgICAg ICAgT2soKCkpCisgICAgfQorCisgICAgLy8vIFNlbmQgVXBkYXRlQ29tcGxldGUgc2lnbmFsIHRv IGNsdXN0ZXIgKGxlYWRlciBvbmx5LCBhZnRlciBzZW5kaW5nIGFsbCB1cGRhdGVzKQorICAgIC8v LworICAgIC8vLyBTaWduYWxzIHRvIGZvbGxvd2VycyB0aGF0IGFsbCBVcGRhdGUgbWVzc2FnZXMg aGF2ZSBiZWVuIHNlbnQgYW5kIHRoZXkgY2FuCisgICAgLy8vIG5vdyB0cmFuc2l0aW9uIHRvIFN5 bmNlZCBtb2RlLiBNYXRjaGVzIEMncyBkZnNtX3NlbmRfdXBkYXRlX2NvbXBsZXRlKCkuCisgICAg cHViIGZuIHNlbmRfdXBkYXRlX2NvbXBsZXRlKCZzZWxmKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAg ICAgdHJhY2luZzo6aW5mbyEoIkRGU006IHNlbmRpbmcgVXBkYXRlQ29tcGxldGUiKTsKKworICAg ICAgICBsZXQgc3luY19lcG9jaCA9ICpzZWxmLnN5bmNfZXBvY2gucmVhZCgpOworICAgICAgICBs ZXQgZGZzbV9tc2c6IERmc21NZXNzYWdlPE0+ID0gRGZzbU1lc3NhZ2U6OlVwZGF0ZUNvbXBsZXRl IHsgc3luY19lcG9jaCB9OworICAgICAgICBzZWxmLnNlbmRfZGZzbV9tZXNzYWdlKCZkZnNtX21z Zyk/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBSZXF1ZXN0IGNoZWNrc3Vt IHZlcmlmaWNhdGlvbiAobGVhZGVyIG9ubHkpCisgICAgLy8vIFRoaXMgc2hvdWxkIGJlIGNhbGxl ZCBwZXJpb2RpY2FsbHkgYnkgdGhlIGxlYWRlciB0byB2ZXJpZnkgY2x1c3RlciBzdGF0ZSBjb25z aXN0ZW5jeQorICAgIHB1YiBmbiB2ZXJpZnlfcmVxdWVzdCgmc2VsZikgLT4gUmVzdWx0PCgpPiB7 CisgICAgICAgIC8vIE9ubHkgbGVhZGVyIHNob3VsZCBzZW5kIHZlcmlmeSByZXF1ZXN0cworICAg ICAgICBpZiAhc2VsZi5pc19sZWFkZXIoKSB7CisgICAgICAgICAgICByZXR1cm4gT2soKCkpOwor ICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSB2ZXJpZnkgd2hlbiBzeW5jZWQKKyAgICAgICAg aWYgc2VsZi5nZXRfbW9kZSgpICE9IERmc21Nb2RlOjpTeW5jZWQgeworICAgICAgICAgICAgcmV0 dXJuIE9rKCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8g d2FpdCBmb3IgcHJldmlvdXMgdmVyaWZpY2F0aW9uIHRvIGNvbXBsZXRlCisgICAgICAgIGxldCBj aGVja3N1bV9jb3VudGVyID0gKnNlbGYuY2hlY2tzdW1fY291bnRlci5sb2NrKCk7CisgICAgICAg IGxldCBjaGVja3N1bV9pZCA9ICpzZWxmLmNoZWNrc3VtX2lkLmxvY2soKTsKKworICAgICAgICBp ZiBjaGVja3N1bV9jb3VudGVyICE9IGNoZWNrc3VtX2lkIHsKKyAgICAgICAgICAgIHRyYWNpbmc6 OmRlYnVnISgKKyAgICAgICAgICAgICAgICAiREZTTTogZGVsYXlpbmcgdmVyaWZ5IHJlcXVlc3Qg ezowMTZ4fSIsCisgICAgICAgICAgICAgICAgY2hlY2tzdW1fY291bnRlciArIDEKKyAgICAgICAg ICAgICk7CisgICAgICAgICAgICByZXR1cm4gT2soKCkpOworICAgICAgICB9CisKKyAgICAgICAg Ly8gSW5jcmVtZW50IGNvdW50ZXIgYW5kIHNlbmQgdmVyaWZ5IHJlcXVlc3QKKyAgICAgICAgKnNl bGYuY2hlY2tzdW1fY291bnRlci5sb2NrKCkgPSBjaGVja3N1bV9jb3VudGVyICsgMTsKKyAgICAg ICAgbGV0IG5ld19jb3VudGVyID0gY2hlY2tzdW1fY291bnRlciArIDE7CisKKyAgICAgICAgdHJh Y2luZzo6ZGVidWchKCJERlNNOiBzZW5kaW5nIHZlcmlmeSByZXF1ZXN0IHs6MDE2eH0iLCBuZXdf Y291bnRlcik7CisKKyAgICAgICAgLy8gU2VuZCBWRVJJRllfUkVRVUVTVCBtZXNzYWdlIHdpdGgg Y291bnRlcgorICAgICAgICBsZXQgc3luY19lcG9jaCA9ICpzZWxmLnN5bmNfZXBvY2gucmVhZCgp OworICAgICAgICBsZXQgZGZzbV9tc2c6IERmc21NZXNzYWdlPE0+ID0gRGZzbU1lc3NhZ2U6OlZl cmlmeVJlcXVlc3QgeworICAgICAgICAgICAgc3luY19lcG9jaCwKKyAgICAgICAgICAgIGNzdW1f aWQ6IG5ld19jb3VudGVyLAorICAgICAgICB9OworICAgICAgICBzZWxmLnNlbmRfZGZzbV9tZXNz YWdlKCZkZnNtX21zZyk/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBIYW5k bGUgdmVyaWZ5IHJlcXVlc3QgZnJvbSBsZWFkZXIKKyAgICBwdWIgZm4gaGFuZGxlX3ZlcmlmeV9y ZXF1ZXN0KCZzZWxmLCBtZXNzYWdlX2Vwb2NoOiBTeW5jRXBvY2gsIGNzdW1faWQ6IHU2NCkgLT4g UmVzdWx0PCgpPiB7CisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZTTTogcmVjZWl2ZWQgdmVy aWZ5IHJlcXVlc3QgezowMTZ4fSIsIGNzdW1faWQpOworCisgICAgICAgIC8vIENvbXB1dGUgY3Vy cmVudCBzdGF0ZSBjaGVja3N1bQorICAgICAgICBsZXQgbXV0IGNoZWNrc3VtID0gWzB1ODsgMzJd OworICAgICAgICBzZWxmLmNhbGxiYWNrcy5jb21wdXRlX2NoZWNrc3VtKCZtdXQgY2hlY2tzdW0p PzsKKworICAgICAgICAvLyBTYXZlIGNoZWNrc3VtIGluZm8KKyAgICAgICAgLy8gU3RvcmUgdGhl IGVwb2NoIEZST00gVEhFIE1FU1NBR0UgKG1hdGNoaW5nIEM6IGRmc20uYzo3MzYpCisgICAgICAg ICpzZWxmLmNoZWNrc3VtLmxvY2soKSA9IGNoZWNrc3VtOworICAgICAgICAqc2VsZi5jaGVja3N1 bV9lcG9jaC5sb2NrKCkgPSBtZXNzYWdlX2Vwb2NoOworICAgICAgICAqc2VsZi5jaGVja3N1bV9p ZC5sb2NrKCkgPSBjc3VtX2lkOworCisgICAgICAgIC8vIFNlbmQgdGhlIGNoZWNrc3VtIHZlcmlm aWNhdGlvbiByZXNwb25zZQorICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoIkRGU006IHNlbmRpbmcg dmVyaWZ5IHJlc3BvbnNlIik7CisKKyAgICAgICAgbGV0IHN5bmNfZXBvY2ggPSAqc2VsZi5zeW5j X2Vwb2NoLnJlYWQoKTsKKyAgICAgICAgbGV0IGRmc21fbXNnID0gRGZzbU1lc3NhZ2U6OlZlcmlm eSB7CisgICAgICAgICAgICBzeW5jX2Vwb2NoLAorICAgICAgICAgICAgY3N1bV9pZCwKKyAgICAg ICAgICAgIGNoZWNrc3VtLAorICAgICAgICB9OworICAgICAgICBzZWxmLnNlbmRfZGZzbV9tZXNz YWdlKCZkZnNtX21zZyk/OworCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBIYW5k bGUgdmVyaWZ5IHJlc3BvbnNlIGZyb20gYSBub2RlCisgICAgcHViIGZuIGhhbmRsZV92ZXJpZnko CisgICAgICAgICZzZWxmLAorICAgICAgICBtZXNzYWdlX2Vwb2NoOiBTeW5jRXBvY2gsCisgICAg ICAgIGNzdW1faWQ6IHU2NCwKKyAgICAgICAgcmVjZWl2ZWRfY2hlY2tzdW06ICZbdTg7IDMyXSwK KyAgICApIC0+IFJlc3VsdDwoKT4geworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoIkRGU006IHJl Y2VpdmVkIHZlcmlmeSByZXNwb25zZSIpOworCisgICAgICAgIGxldCBvdXJfY2hlY2tzdW1faWQg PSAqc2VsZi5jaGVja3N1bV9pZC5sb2NrKCk7CisgICAgICAgIGxldCBvdXJfY2hlY2tzdW1fZXBv Y2ggPSAqc2VsZi5jaGVja3N1bV9lcG9jaC5sb2NrKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYg dGhpcyB2ZXJpZmljYXRpb24gbWF0Y2hlcyBvdXIgc2F2ZWQgY2hlY2tzdW0KKyAgICAgICAgLy8g Q29tcGFyZSB3aXRoIE1FU1NBR0UgZXBvY2gsIG5vdCBjdXJyZW50IGVwb2NoIChtYXRjaGluZyBD OiBkZnNtLmM6NzY2LTc2NykKKyAgICAgICAgaWYgb3VyX2NoZWNrc3VtX2lkID09IGNzdW1faWQg JiYgb3VyX2NoZWNrc3VtX2Vwb2NoID09IG1lc3NhZ2VfZXBvY2ggeworICAgICAgICAgICAgbGV0 IG91cl9jaGVja3N1bSA9ICpzZWxmLmNoZWNrc3VtLmxvY2soKTsKKworICAgICAgICAgICAgLy8g Q29tcGFyZSBjaGVja3N1bXMKKyAgICAgICAgICAgIGlmIG91cl9jaGVja3N1bSAhPSAqcmVjZWl2 ZWRfY2hlY2tzdW0geworICAgICAgICAgICAgICAgIHRyYWNpbmc6OmVycm9yISgKKyAgICAgICAg ICAgICAgICAgICAgIkRGU006IGNoZWNrc3VtIG1pc21hdGNoISBFeHBlY3RlZCB7OjAxNng/fSwg Z290IHs6MDE2eD99IiwKKyAgICAgICAgICAgICAgICAgICAgJm91cl9jaGVja3N1bVsuLjhdLAor ICAgICAgICAgICAgICAgICAgICAmcmVjZWl2ZWRfY2hlY2tzdW1bLi44XQorICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgICAgdHJhY2luZzo6ZXJyb3IhKCJERlNNOiBkYXRhIGRpdmVy Z2VuY2UgZGV0ZWN0ZWQgLSByZXN0YXJ0aW5nIGNsdXN0ZXIgc3luYyIpOworICAgICAgICAgICAg ICAgIHNlbGYuc2V0X21vZGUoRGZzbU1vZGU6OkxlYXZlKTsKKyAgICAgICAgICAgICAgICByZXR1 cm4gRXJyKGFueWhvdzo6YW55aG93ISgiQ2hlY2tzdW0gdmVyaWZpY2F0aW9uIGZhaWxlZCIpKTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJhY2luZzo6aW5mbyEoIkRG U006IGRhdGEgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NmdWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZTTTogc2tpcHBpbmcg dmVyaWZpY2F0aW9uIC0gbm8gY2hlY2tzdW0gc2F2ZWQgb3IgZXBvY2ggbWlzbWF0Y2giKTsKKyAg ICAgICAgfQorCisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIC8vLyBJbnZhbGlkYXRlIHNh dmVkIGNoZWNrc3VtIChjYWxsZWQgb24gbWVtYmVyc2hpcCBjaGFuZ2VzKQorICAgIHB1YiBmbiBp bnZhbGlkYXRlX2NoZWNrc3VtKCZzZWxmKSB7CisgICAgICAgIGxldCBjb3VudGVyID0gKnNlbGYu Y2hlY2tzdW1fY291bnRlci5sb2NrKCk7CisgICAgICAgICpzZWxmLmNoZWNrc3VtX2lkLmxvY2so KSA9IGNvdW50ZXI7CisKKyAgICAgICAgLy8gUmVzZXQgY2hlY2tzdW0gZXBvY2gKKyAgICAgICAg KnNlbGYuY2hlY2tzdW1fZXBvY2gubG9jaygpID0gU3luY0Vwb2NoIHsKKyAgICAgICAgICAgIGVw b2NoOiAwLAorICAgICAgICAgICAgdGltZTogMCwKKyAgICAgICAgICAgIG5vZGVpZDogMCwKKyAg ICAgICAgICAgIHBpZDogMCwKKyAgICAgICAgfTsKKworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEo IkRGU006IGNoZWNrc3VtIGludmFsaWRhdGVkIik7CisgICAgfQorfQorCisvLy8gRnVzZU1lc3Nh Z2Utc3BlY2lmaWMgbWV0aG9kcworaW1wbCBEZnNtPEZ1c2VNZXNzYWdlPiB7CisgICAgLy8vIEJy b2FkY2FzdCBhIGZpbGVzeXN0ZW0gb3BlcmF0aW9uIHRvIHRoZSBjbHVzdGVyCisgICAgLy8vCisg ICAgLy8vIENoZWNrcyBpZiB0aGUgY2x1c3RlciBpcyBzeW5jZWQgYmVmb3JlIGJyb2FkY2FzdGlu Zy4KKyAgICAvLy8gSWYgbm90IHN5bmNlZCwgdGhlIG1lc3NhZ2UgaXMgc2lsZW50bHkgZHJvcHBl ZC4KKyAgICBwdWIgZm4gYnJvYWRjYXN0KCZzZWxmLCBtc2c6IEZ1c2VNZXNzYWdlKSAtPiBSZXN1 bHQ8KCk+IHsKKyAgICAgICAgaWYgIXNlbGYuaXNfc3luY2VkKCkgeworICAgICAgICAgICAgcmV0 dXJuIE9rKCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiQnJvYWRj YXN0aW5nIHs6P30iLCBtc2cpOworICAgICAgICBzZWxmLnNlbmRfbWVzc2FnZShtc2cpPzsKKyAg ICAgICAgdHJhY2luZzo6ZGVidWchKCJCcm9hZGNhc3Qgc3VjY2Vzc2Z1bCIpOworCisgICAgICAg IE9rKCgpKQorICAgIH0KK30KKworaW1wbDxNOiBNZXNzYWdlVHJhaXQgKyBDbG9uZT4gRGZzbTxN PiB7CisgICAgLy8vIEhhbmRsZSBpbmNvbWluZyBERlNNIG1lc3NhZ2UgZnJvbSBjbHVzdGVyIChj YWxsZWQgYnkgQ3BnSGFuZGxlcikKKyAgICBmbiBoYW5kbGVfZGZzbV9tZXNzYWdlKAorICAgICAg ICAmc2VsZiwKKyAgICAgICAgbm9kZWlkOiB1MzIsCisgICAgICAgIHBpZDogdTMyLAorICAgICAg ICBtZXNzYWdlOiBEZnNtTWVzc2FnZTxNPiwKKyAgICApIC0+IGFueWhvdzo6UmVzdWx0PCgpPiB7 CisgICAgICAgIC8vIFZhbGlkYXRlIGVwb2NoIGZvciBzdGF0ZSBtZXNzYWdlcyAoYWxsIGV4Y2Vw dCBOb3JtYWwgYW5kIFN5bmNTdGFydCkKKyAgICAgICAgLy8gVGhpcyBtYXRjaGVzIEMgaW1wbGVt ZW50YXRpb24ncyBlcG9jaCBjaGVja2luZyBpbiBkZnNtLmM6NjY1LTY3MworICAgICAgICBsZXQg c2hvdWxkX3ZhbGlkYXRlX2Vwb2NoID0gIW1hdGNoZXMhKAorICAgICAgICAgICAgbWVzc2FnZSwK KyAgICAgICAgICAgIERmc21NZXNzYWdlOjpOb3JtYWwgeyAuLiB9IHwgRGZzbU1lc3NhZ2U6OlN5 bmNTdGFydCB7IC4uIH0KKyAgICAgICAgKTsKKworICAgICAgICBpZiBzaG91bGRfdmFsaWRhdGVf ZXBvY2ggeworICAgICAgICAgICAgbGV0IGN1cnJlbnRfZXBvY2ggPSAqc2VsZi5zeW5jX2Vwb2No LnJlYWQoKTsKKyAgICAgICAgICAgIGxldCBtZXNzYWdlX2Vwb2NoID0gbWF0Y2ggJm1lc3NhZ2Ug eworICAgICAgICAgICAgICAgIERmc21NZXNzYWdlOjpTdGF0ZSB7IHN5bmNfZXBvY2gsIC4uIH0K KyAgICAgICAgICAgICAgICB8IERmc21NZXNzYWdlOjpVcGRhdGUgeyBzeW5jX2Vwb2NoLCAuLiB9 CisgICAgICAgICAgICAgICAgfCBEZnNtTWVzc2FnZTo6VXBkYXRlQ29tcGxldGUgeyBzeW5jX2Vw b2NoIH0KKyAgICAgICAgICAgICAgICB8IERmc21NZXNzYWdlOjpWZXJpZnlSZXF1ZXN0IHsgc3lu Y19lcG9jaCwgLi4gfQorICAgICAgICAgICAgICAgIHwgRGZzbU1lc3NhZ2U6OlZlcmlmeSB7IHN5 bmNfZXBvY2gsIC4uIH0gPT4gKnN5bmNfZXBvY2gsCisgICAgICAgICAgICAgICAgXyA9PiB1bnJl YWNoYWJsZSEoKSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIG1lc3NhZ2VfZXBv Y2ggIT0gY3VycmVudF9lcG9jaCB7CisgICAgICAgICAgICAgICAgdHJhY2luZzo6ZGVidWchKAor ICAgICAgICAgICAgICAgICAgICAiREZTTTogaWdub3JpbmcgbWVzc2FnZSB3aXRoIHdyb25nIGVw b2NoIChleHBlY3RlZCB7Oj99LCBnb3Qgezo/fSkiLAorICAgICAgICAgICAgICAgICAgICBjdXJy ZW50X2Vwb2NoLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2Vwb2NoCisgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gT2soKCkpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgLy8gTWF0Y2ggb24gdHlwZWQgbWVzc2FnZSB2YXJpYW50cwor ICAgICAgICBtYXRjaCBtZXNzYWdlIHsKKyAgICAgICAgICAgIERmc21NZXNzYWdlOjpOb3JtYWwg eworICAgICAgICAgICAgICAgIG1zZ19jb3VudCwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXAs CisgICAgICAgICAgICAgICAgcHJvdG9jb2xfdmVyc2lvbjogXywKKyAgICAgICAgICAgICAgICBt ZXNzYWdlOiBhcHBfbXNnLAorICAgICAgICAgICAgfSA9PiBzZWxmLmhhbmRsZV9ub3JtYWxfbWVz c2FnZShub2RlaWQsIHBpZCwgbXNnX2NvdW50LCB0aW1lc3RhbXAsIGFwcF9tc2cpLAorICAgICAg ICAgICAgRGZzbU1lc3NhZ2U6OlN5bmNTdGFydCB7IHN5bmNfZXBvY2ggfSA9PiBzZWxmLmhhbmRs ZV9zeW5jX3N0YXJ0KG5vZGVpZCwgc3luY19lcG9jaCksCisgICAgICAgICAgICBEZnNtTWVzc2Fn ZTo6U3RhdGUgeworICAgICAgICAgICAgICAgIHN5bmNfZXBvY2g6IF8sCisgICAgICAgICAgICAg ICAgZGF0YSwKKyAgICAgICAgICAgIH0gPT4gc2VsZi5wcm9jZXNzX3N0YXRlKG5vZGVpZCwgcGlk LCAmZGF0YSksCisgICAgICAgICAgICBEZnNtTWVzc2FnZTo6VXBkYXRlIHsKKyAgICAgICAgICAg ICAgICBzeW5jX2Vwb2NoOiBfLAorICAgICAgICAgICAgICAgIHRyZWVfZW50cnksCisgICAgICAg ICAgICB9ID0+IHNlbGYuaGFuZGxlX3VwZGF0ZShub2RlaWQsIHBpZCwgdHJlZV9lbnRyeSksCisg ICAgICAgICAgICBEZnNtTWVzc2FnZTo6VXBkYXRlQ29tcGxldGUgeyBzeW5jX2Vwb2NoOiBfIH0g PT4gc2VsZi5oYW5kbGVfdXBkYXRlX2NvbXBsZXRlKCksCisgICAgICAgICAgICBEZnNtTWVzc2Fn ZTo6VmVyaWZ5UmVxdWVzdCB7CisgICAgICAgICAgICAgICAgc3luY19lcG9jaCwKKyAgICAgICAg ICAgICAgICBjc3VtX2lkLAorICAgICAgICAgICAgfSA9PiBzZWxmLmhhbmRsZV92ZXJpZnlfcmVx dWVzdChzeW5jX2Vwb2NoLCBjc3VtX2lkKSwKKyAgICAgICAgICAgIERmc21NZXNzYWdlOjpWZXJp ZnkgeworICAgICAgICAgICAgICAgIHN5bmNfZXBvY2gsCisgICAgICAgICAgICAgICAgY3N1bV9p ZCwKKyAgICAgICAgICAgICAgICBjaGVja3N1bSwKKyAgICAgICAgICAgIH0gPT4gc2VsZi5oYW5k bGVfdmVyaWZ5KHN5bmNfZXBvY2gsIGNzdW1faWQsICZjaGVja3N1bSksCisgICAgICAgIH0KKyAg ICB9CisKKyAgICAvLy8gSGFuZGxlIG1lbWJlcnNoaXAgY2hhbmdlIG5vdGlmaWNhdGlvbiAoY2Fs bGVkIGJ5IENwZ0hhbmRsZXIpCisgICAgZm4gaGFuZGxlX21lbWJlcnNoaXBfY2hhbmdlKCZzZWxm LCBtZW1iZXJzOiAmW01lbWJlckluZm9dKSAtPiBhbnlob3c6OlJlc3VsdDwoKT4geworICAgICAg ICB0cmFjaW5nOjppbmZvISgKKyAgICAgICAgICAgICJERlNNOiBoYW5kbGluZyBtZW1iZXJzaGlw IGNoYW5nZSAoe30gbWVtYmVycykiLAorICAgICAgICAgICAgbWVtYmVycy5sZW4oKQorICAgICAg ICApOworCisgICAgICAgIC8vIEludmFsaWRhdGUgc2F2ZWQgY2hlY2tzdW0KKyAgICAgICAgc2Vs Zi5pbnZhbGlkYXRlX2NoZWNrc3VtKCk7CisKKyAgICAgICAgLy8gVXBkYXRlIGVwb2NoCisgICAg ICAgIGxldCBtdXQgY291bnRlciA9IHNlbGYubG9jYWxfZXBvY2hfY291bnRlci5sb2NrKCk7Cisg ICAgICAgICpjb3VudGVyICs9IDE7CisKKyAgICAgICAgbGV0IG5vdyA9IFN5c3RlbVRpbWU6Om5v dygpCisgICAgICAgICAgICAuZHVyYXRpb25fc2luY2UoVU5JWF9FUE9DSCkKKyAgICAgICAgICAg IC51bndyYXBfb3JfZGVmYXVsdCgpCisgICAgICAgICAgICAuYXNfc2VjcygpIGFzIHUzMjsKKwor ICAgICAgICBsZXQgbmV3X2Vwb2NoID0gU3luY0Vwb2NoIHsKKyAgICAgICAgICAgIGVwb2NoOiAq Y291bnRlciwKKyAgICAgICAgICAgIHRpbWU6IG5vdywKKyAgICAgICAgICAgIG5vZGVpZDogc2Vs Zi5ub2RlaWQubG9hZChPcmRlcmluZzo6UmVsYXhlZCksCisgICAgICAgICAgICBwaWQ6IHNlbGYu cGlkLAorICAgICAgICB9OworCisgICAgICAgICpzZWxmLnN5bmNfZXBvY2gud3JpdGUoKSA9IG5l d19lcG9jaDsKKyAgICAgICAgZHJvcChjb3VudGVyKTsKKworICAgICAgICAvLyBGaW5kIGxvd2Vz dCBub2RlIElEIChsZWFkZXIpCisgICAgICAgIGxldCBsb3dlc3QgPSBtZW1iZXJzLml0ZXIoKS5t YXAofG18IG0ubm9kZV9pZCkubWluKCkudW53cmFwX29yKDApOworICAgICAgICAqc2VsZi5sb3dl c3Rfbm9kZWlkLndyaXRlKCkgPSBsb3dlc3Q7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBzeW5j IG5vZGVzCisgICAgICAgIGxldCBtdXQgc3luY19ub2RlcyA9IHNlbGYuc3luY19ub2Rlcy53cml0 ZSgpOworICAgICAgICBzeW5jX25vZGVzLmNsZWFyKCk7CisKKyAgICAgICAgZm9yIG1lbWJlciBp biBtZW1iZXJzIHsKKyAgICAgICAgICAgIHN5bmNfbm9kZXMucHVzaChOb2RlU3luY0luZm8gewor ICAgICAgICAgICAgICAgIG5vZGVpZDogbWVtYmVyLm5vZGVfaWQsCisgICAgICAgICAgICAgICAg cGlkOiBtZW1iZXIucGlkLAorICAgICAgICAgICAgICAgIHN0YXRlOiBOb25lLAorICAgICAgICAg ICAgICAgIHN5bmNlZDogZmFsc2UsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg ICBkcm9wKHN5bmNfbm9kZXMpOworCisgICAgICAgIC8vIENsZWFyIHF1ZXVlcworICAgICAgICBz ZWxmLnN5bmNfcXVldWUubG9jaygpLmNsZWFyKCk7CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIG5l eHQgbW9kZQorICAgICAgICBpZiBtZW1iZXJzLmxlbigpID09IDEgeworICAgICAgICAgICAgLy8g U2luZ2xlIG5vZGUgLSBhbHJlYWR5IHN5bmNlZAorICAgICAgICAgICAgdHJhY2luZzo6aW5mbyEo IkRGU006IHNpbmdsZSBub2RlIGNsdXN0ZXIsIG1hcmtpbmcgYXMgc3luY2VkIik7CisgICAgICAg ICAgICBzZWxmLnNldF9tb2RlKERmc21Nb2RlOjpTeW5jZWQpOworCisgICAgICAgICAgICAvLyBN YXJrIG91cnNlbHZlcyBhcyBzeW5jZWQKKyAgICAgICAgICAgIGxldCBtdXQgc3luY19ub2RlcyA9 IHNlbGYuc3luY19ub2Rlcy53cml0ZSgpOworICAgICAgICAgICAgaWYgbGV0IFNvbWUobm9kZSkg PSBzeW5jX25vZGVzLmZpcnN0X211dCgpIHsKKyAgICAgICAgICAgICAgICBub2RlLnN5bmNlZCA9 IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlbGl2ZXIgcXVldWVkIG1l c3NhZ2VzCisgICAgICAgICAgICBzZWxmLmRlbGl2ZXJfbWVzc2FnZV9xdWV1ZSgpPzsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE11bHRpLW5vZGUgLSBzdGFydCBzeW5jaHJvbml6 YXRpb24KKyAgICAgICAgICAgIHRyYWNpbmc6OmluZm8hKCJERlNNOiBtdWx0aS1ub2RlIGNsdXN0 ZXIsIHN0YXJ0aW5nIHN5bmMiKTsKKyAgICAgICAgICAgIHNlbGYuc2V0X21vZGUoRGZzbU1vZGU6 OlN0YXJ0U3luYyk7CisKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIHRoZSBsZWFkZXIsIGluaXRp YXRlIHN5bmMKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfbGVhZGVyKCkgeworICAgICAgICAgICAg ICAgIHRyYWNpbmc6OmluZm8hKCJERlNNOiB3ZSBhcmUgbGVhZGVyLCBzZW5kaW5nIHN5bmMgc3Rh cnQiKTsKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfc3luY19zdGFydCgpPzsKKworICAgICAg ICAgICAgICAgIC8vIExlYWRlciBhbHNvIG5lZWRzIHRvIHNlbmQgaXRzIG93biBzdGF0ZQorICAg ICAgICAgICAgICAgIC8vIChDUEcgZG9lc24ndCBsb29wIGJhY2sgbWVzc2FnZXMgdG8gc2VuZGVy KQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9zdGF0ZSgpLmNvbnRleHQoIkZhaWxlZCB0byBz ZW5kIGxlYWRlciBzdGF0ZSIpPzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IE9rKCgpKQorICAgIH0KKworICAgIC8vLyBIYW5kbGUgbm9ybWFsIGFwcGxpY2F0aW9uIG1lc3Nh Z2UKKyAgICBmbiBoYW5kbGVfbm9ybWFsX21lc3NhZ2UoCisgICAgICAgICZzZWxmLAorICAgICAg ICBub2RlaWQ6IHUzMiwKKyAgICAgICAgcGlkOiB1MzIsCisgICAgICAgIG1zZ19jb3VudDogdTY0 LAorICAgICAgICB0aW1lc3RhbXA6IHUzMiwKKyAgICAgICAgbWVzc2FnZTogTSwKKyAgICApIC0+ IFJlc3VsdDwoKT4geworICAgICAgICAvLyBDIHZlcnNpb246IGRlbGl2ZXIgaW1tZWRpYXRlbHkg aWYgaW4gU3luY2VkIG1vZGUsIG90aGVyd2lzZSBxdWV1ZQorICAgICAgICBpZiBzZWxmLmdldF9t b2RlKCkgPT0gRGZzbU1vZGU6OlN5bmNlZCB7CisgICAgICAgICAgICAvLyBEZWxpdmVyIGltbWVk aWF0ZWx5IC0gbWVzc2FnZSBpcyBhbHJlYWR5IGRlc2VyaWFsaXplZAorICAgICAgICAgICAgbWF0 Y2ggc2VsZi5jYWxsYmFja3MuZGVsaXZlcl9tZXNzYWdlKAorICAgICAgICAgICAgICAgIG5vZGVp ZCwKKyAgICAgICAgICAgICAgICBwaWQsCisgICAgICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAg ICAgICAgICAgICB0aW1lc3RhbXAgYXMgdTY0LCAvLyBDb252ZXJ0IGJhY2sgdG8gdTY0IGZvciBj YWxsYmFjayBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBP aygocmVzdWx0LCBwcm9jZXNzZWQpKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6 OmRlYnVnISgKKyAgICAgICAgICAgICAgICAgICAgICAgICJERlNNOiBtZXNzYWdlIGRlbGl2ZXJl ZCBpbW1lZGlhdGVseSwgcmVzdWx0PXt9LCBwcm9jZXNzZWQ9e30iLAorICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkCisgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEVy cihlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNpbmc6OmVycm9yISgiREZTTTogZmFp bGVkIHRvIGRlbGl2ZXIgbWVzc2FnZToge30iLCBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBRdWV1ZSBmb3IgbGF0 ZXIgZGVsaXZlcnkgLSBzdG9yZSB0eXBlZCBtZXNzYWdlIGRpcmVjdGx5CisgICAgICAgICAgICBz ZWxmLnF1ZXVlX21lc3NhZ2Uobm9kZWlkLCBwaWQsIG1zZ19jb3VudCwgbWVzc2FnZSwgdGltZXN0 YW1wIGFzIHU2NCk7CisgICAgICAgIH0KKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgLy8v IEhhbmRsZSBTeW5jU3RhcnQgbWVzc2FnZSBmcm9tIGxlYWRlcgorICAgIGZuIGhhbmRsZV9zeW5j X3N0YXJ0KCZzZWxmLCBub2RlaWQ6IHUzMiwgbmV3X2Vwb2NoOiBTeW5jRXBvY2gpIC0+IFJlc3Vs dDwoKT4geworICAgICAgICB0cmFjaW5nOjppbmZvISgKKyAgICAgICAgICAgICJERlNNOiByZWNl aXZlZCBTeW5jU3RhcnQgZnJvbSBub2RlIHt9IHdpdGggZXBvY2ggezo/fSIsCisgICAgICAgICAg ICBub2RlaWQsCisgICAgICAgICAgICBuZXdfZXBvY2gKKyAgICAgICAgKTsKKworICAgICAgICAv LyBBZG9wdCB0aGUgbmV3IGVwb2NoIGZyb20gdGhlIGxlYWRlciAoY3JpdGljYWwgZm9yIHN5bmMg cHJvdG9jb2whKQorICAgICAgICAvLyBUaGlzIG1hdGNoZXMgQyBpbXBsZW1lbnRhdGlvbiB3aGlj aCB1cGRhdGVzIGRmc20tPnN5bmNfZXBvY2gKKyAgICAgICAgKnNlbGYuc3luY19lcG9jaC53cml0 ZSgpID0gbmV3X2Vwb2NoOworICAgICAgICB0cmFjaW5nOjpkZWJ1ZyEoIkRGU006IGFkb3B0ZWQg bmV3IHN5bmMgZXBvY2ggZnJvbSBsZWFkZXIiKTsKKworICAgICAgICAvLyBTZW5kIG91ciBzdGF0 ZSBiYWNrIHRvIHRoZSBjbHVzdGVyCisgICAgICAgIC8vIEJVVDogZG9uJ3Qgc2VuZCBpZiB3ZSdy ZSB0aGUgbGVhZGVyICh3ZSBhbHJlYWR5IHNlbnQgb3VyIHN0YXRlIGluIGhhbmRsZV9tZW1iZXJz aGlwX2NoYW5nZSkKKyAgICAgICAgbGV0IG15X25vZGVpZCA9IHNlbGYubm9kZWlkLmxvYWQoT3Jk ZXJpbmc6OlJlbGF4ZWQpOworICAgICAgICBpZiBub2RlaWQgIT0gbXlfbm9kZWlkIHsKKyAgICAg ICAgICAgIHNlbGYuc2VuZF9zdGF0ZSgpCisgICAgICAgICAgICAgICAgLmNvbnRleHQoIkZhaWxl ZCB0byBzZW5kIHN0YXRlIGluIHJlc3BvbnNlIHRvIFN5bmNTdGFydCIpPzsKKyAgICAgICAgICAg IHRyYWNpbmc6OmRlYnVnISgiREZTTTogc2VudCBzdGF0ZSBpbiByZXNwb25zZSB0byBTeW5jU3Rh cnQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYWNpbmc6OmRlYnVnISgiREZT TTogc2tpcHBpbmcgc3RhdGUgc2VuZCAod2UncmUgdGhlIGxlYWRlciB3aG8gYWxyZWFkeSBzZW50 IHN0YXRlKSIpOworICAgICAgICB9CisKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgLy8v IEhhbmRsZSBVcGRhdGUgbWVzc2FnZSBmcm9tIGxlYWRlcgorICAgIGZuIGhhbmRsZV91cGRhdGUo CisgICAgICAgICZzZWxmLAorICAgICAgICBub2RlaWQ6IHUzMiwKKyAgICAgICAgcGlkOiB1MzIs CisgICAgICAgIHRyZWVfZW50cnk6IHBteGNmc19tZW1kYjo6VHJlZUVudHJ5LAorICAgICkgLT4g UmVzdWx0PCgpPiB7CisgICAgICAgIC8vIFNlcmlhbGl6ZSBUcmVlRW50cnkgZm9yIGNhbGxiYWNr IChwcm9jZXNzX3VwZGF0ZSBleHBlY3RzIHJhdyBieXRlcyBmb3Igbm93KQorICAgICAgICBsZXQg c2VyaWFsaXplZCA9IHRyZWVfZW50cnkuc2VyaWFsaXplX2Zvcl91cGRhdGUoKTsKKyAgICAgICAg aWYgbGV0IEVycihlKSA9IHNlbGYuY2FsbGJhY2tzLnByb2Nlc3NfdXBkYXRlKG5vZGVpZCwgcGlk LCAmc2VyaWFsaXplZCkgeworICAgICAgICAgICAgdHJhY2luZzo6ZXJyb3IhKCJERlNNOiBmYWls ZWQgdG8gcHJvY2VzcyB1cGRhdGU6IHt9IiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgT2soKCkp CisgICAgfQorCisgICAgLy8vIEhhbmRsZSBVcGRhdGVDb21wbGV0ZSBtZXNzYWdlCisgICAgZm4g aGFuZGxlX3VwZGF0ZV9jb21wbGV0ZSgmc2VsZikgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIHRy YWNpbmc6OmluZm8hKCJERlNNOiByZWNlaXZlZCBVcGRhdGVDb21wbGV0ZSBmcm9tIGxlYWRlciIp OworICAgICAgICBzZWxmLmRlbGl2ZXJfc3luY19xdWV1ZSgpPzsKKyAgICAgICAgc2VsZi5zZXRf bW9kZShEZnNtTW9kZTo6U3luY2VkKTsKKyAgICAgICAgc2VsZi5jYWxsYmFja3Mub25fc3luY2Vk KCk7CisgICAgICAgIE9rKCgpKQorICAgIH0KK30KKworLy8vIEltcGxlbWVudGF0aW9uIG9mIENw Z0hhbmRsZXIgdHJhaXQgZm9yIERGU00KKy8vLworLy8vIFRoaXMgYWxsb3dzIERmc20gdG8gcmVj ZWl2ZSBDUEcgY2FsbGJhY2tzIGluIGFuIGlkaW9tYXRpYyBSdXN0IHdheSwKKy8vLyB3aXRoIGFs bCB1bnNhZmUgcG9pbnRlciBoYW5kbGluZyBtYW5hZ2VkIGJ5IHRoZSBDcGdTZXJ2aWNlLgoraW1w bDxNOiBNZXNzYWdlVHJhaXQgKyBDbG9uZSArIFNlbmQgKyBTeW5jICsgJ3N0YXRpYz4gQ3BnSGFu ZGxlciBmb3IgRGZzbTxNPiB7CisgICAgZm4gb25fZGVsaXZlcigmc2VsZiwgX2dyb3VwX25hbWU6 ICZzdHIsIG5vZGVpZDogTm9kZUlkLCBwaWQ6IHUzMiwgbXNnOiAmW3U4XSkgeworICAgICAgICB0 cmFjaW5nOjpkZWJ1ZyEoCisgICAgICAgICAgICAiREZTTSBDUEcgbWVzc2FnZSBmcm9tIG5vZGUg e30gKHBpZCB7fSk6IHt9IGJ5dGVzIiwKKyAgICAgICAgICAgIHUzMjo6ZnJvbShub2RlaWQpLAor ICAgICAgICAgICAgcGlkLAorICAgICAgICAgICAgbXNnLmxlbigpCisgICAgICAgICk7CisKKyAg ICAgICAgLy8gRGVzZXJpYWxpemUgREZTTSBwcm90b2NvbCBtZXNzYWdlCisgICAgICAgIG1hdGNo IERmc21NZXNzYWdlOjo8TT46OmRlc2VyaWFsaXplKG1zZykgeworICAgICAgICAgICAgT2soZGZz bV9tc2cpID0+IHsKKyAgICAgICAgICAgICAgICBpZiBsZXQgRXJyKGUpID0gc2VsZi5oYW5kbGVf ZGZzbV9tZXNzYWdlKHUzMjo6ZnJvbShub2RlaWQpLCBwaWQsIGRmc21fbXNnKSB7CisgICAgICAg ICAgICAgICAgICAgIHRyYWNpbmc6OmVycm9yISgiRXJyb3IgaGFuZGxpbmcgREZTTSBtZXNzYWdl OiB7fSIsIGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IEVycihlKSA9PiB7CisgICAgICAgICAgICAgICAgdHJhY2luZzo6ZXJyb3IhKCJGYWlsZWQgdG8g ZGVzZXJpYWxpemUgREZTTSBtZXNzYWdlOiB7fSIsIGUpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorCisgICAgZm4gb25fY29uZmNoZygKKyAgICAgICAgJnNlbGYsCisgICAgICAg IF9ncm91cF9uYW1lOiAmc3RyLAorICAgICAgICBtZW1iZXJfbGlzdDogJltjcGc6OkFkZHJlc3Nd LAorICAgICAgICBfbGVmdF9saXN0OiAmW2NwZzo6QWRkcmVzc10sCisgICAgICAgIF9qb2luZWRf bGlzdDogJltjcGc6OkFkZHJlc3NdLAorICAgICkgeworICAgICAgICB0cmFjaW5nOjppbmZvISgi REZTTSBDUEcgbWVtYmVyc2hpcCBjaGFuZ2U6IHt9IG1lbWJlcnMiLCBtZW1iZXJfbGlzdC5sZW4o KSk7CisKKyAgICAgICAgLy8gQnVpbGQgTWVtYmVySW5mbyBsaXN0IGZyb20gQ1BHIGFkZHJlc3Nl cworICAgICAgICBsZXQgbWVtYmVyczogVmVjPE1lbWJlckluZm8+ID0gbWVtYmVyX2xpc3QKKyAg ICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgIC5tYXAofGFkZHJ8IE1lbWJlckluZm8gewor ICAgICAgICAgICAgICAgIG5vZGVfaWQ6IHUzMjo6ZnJvbShhZGRyLm5vZGVpZCksCisgICAgICAg ICAgICAgICAgcGlkOiBhZGRyLnBpZCwKKyAgICAgICAgICAgICAgICBqb2luZWRfYXQ6IFN5c3Rl bVRpbWU6Om5vdygpCisgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbl9zaW5jZShVTklYX0VQ T0NIKQorICAgICAgICAgICAgICAgICAgICAudW53cmFwX29yX2RlZmF1bHQoKQorICAgICAgICAg ICAgICAgICAgICAuYXNfc2VjcygpLAorICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC5jb2xs ZWN0KCk7CisKKyAgICAgICAgLy8gTm90aWZ5IERGU00gb2YgbWVtYmVyc2hpcCBjaGFuZ2UKKyAg ICAgICAgaWYgbGV0IEVycihlKSA9IHNlbGYuaGFuZGxlX21lbWJlcnNoaXBfY2hhbmdlKCZtZW1i ZXJzKSB7CisgICAgICAgICAgICB0cmFjaW5nOjplcnJvciEoIkZhaWxlZCB0byBoYW5kbGUgbWVt YmVyc2hpcCBjaGFuZ2U6IHt9IiwgZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ltcGw8TTog TWVzc2FnZVRyYWl0ICsgQ2xvbmUgKyBTZW5kICsgU3luYyArICdzdGF0aWM+IERmc208TT4gewor ICAgIC8vLyBJbml0aWFsaXplIENQRyAoQ2xvc2VkIFByb2Nlc3MgR3JvdXApIGZvciBjbHVzdGVy IGNvbW11bmljYXRpb24KKyAgICAvLy8KKyAgICAvLy8gVXNlcyB0aGUgaWRpb21hdGljIENwZ1Nl cnZpY2Ugd3JhcHBlciB3aGljaCBoYW5kbGVzIGFsbCB1bnNhZmUgRkZJCisgICAgLy8vIGFuZCBj YWxsYmFjayBtYW5hZ2VtZW50IGludGVybmFsbHkuCisgICAgcHViIGZuIGluaXRfY3BnKHNlbGY6 ICZBcmM8U2VsZj4pIC0+IFJlc3VsdDwoKT4geworICAgICAgICB0cmFjaW5nOjppbmZvISgiREZT TTogSW5pdGlhbGl6aW5nIENQRyIpOworCisgICAgICAgIC8vIENyZWF0ZSBDUEcgc2VydmljZSB3 aXRoIHRoaXMgRGZzbSBhcyB0aGUgaGFuZGxlcgorICAgICAgICAvLyBDcGdTZXJ2aWNlIGhhbmRs ZXMgYWxsIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBhbmQgY29udGV4dCBtYW5hZ2VtZW50CisgICAg ICAgIGxldCBjcGdfc2VydmljZSA9IEFyYzo6bmV3KENwZ1NlcnZpY2U6Om5ldyhBcmM6OmNsb25l KHNlbGYpKT8pOworCisgICAgICAgIC8vIEdldCBvdXIgbm9kZSBJRCBmcm9tIENQRyAobWF0Y2hl cyBDJ3MgY3BnX2xvY2FsX2dldCkKKyAgICAgICAgLy8gVGhpcyBNVVNUIGJlIGRvbmUgYWZ0ZXIg Y3BnX2luaXRpYWxpemUgYnV0IGJlZm9yZSBqb2luaW5nIHRoZSBncm91cAorICAgICAgICBsZXQg bm9kZWlkID0gY3BnOjpsb2NhbF9nZXQoY3BnX3NlcnZpY2UuaGFuZGxlKCkpPzsKKyAgICAgICAg bGV0IG5vZGVpZF91MzIgPSB1MzI6OmZyb20obm9kZWlkKTsKKyAgICAgICAgc2VsZi5ub2RlaWQu c3RvcmUobm9kZWlkX3UzMiwgT3JkZXJpbmc6OlJlbGF4ZWQpOworICAgICAgICB0cmFjaW5nOjpp bmZvISgiREZTTTogR290IG5vZGUgSUQge30gZnJvbSBDUEciLCBub2RlaWRfdTMyKTsKKworICAg ICAgICAvLyBKb2luIHRoZSBDUEcgZ3JvdXAKKyAgICAgICAgbGV0IGdyb3VwX25hbWUgPSAmc2Vs Zi5jbHVzdGVyX25hbWU7CisgICAgICAgIGNwZ19zZXJ2aWNlCisgICAgICAgICAgICAuam9pbihn cm91cF9uYW1lKQorICAgICAgICAgICAgLmNvbnRleHQoIkZhaWxlZCB0byBqb2luIENQRyBncm91 cCIpPzsKKworICAgICAgICB0cmFjaW5nOjppbmZvISgiREZTTSBqb2luZWQgQ1BHIGdyb3VwICd7 fSciLCBncm91cF9uYW1lKTsKKworICAgICAgICAvLyBTdG9yZSB0aGUgc2VydmljZQorICAgICAg ICAqc2VsZi5jcGdfc2VydmljZS53cml0ZSgpID0gU29tZShjcGdfc2VydmljZSk7CisKKyAgICAg ICAgLy8gRGlzcGF0Y2ggb25jZSB0byBnZXQgaW5pdGlhbCBtZW1iZXJzaGlwCisgICAgICAgIGlm IGxldCBTb21lKHJlZiBzZXJ2aWNlKSA9ICpzZWxmLmNwZ19zZXJ2aWNlLnJlYWQoKQorICAgICAg ICAgICAgJiYgbGV0IEVycihlKSA9IHNlcnZpY2UuZGlzcGF0Y2goKQorICAgICAgICB7CisgICAg ICAgICAgICB0cmFjaW5nOjp3YXJuISgiRmFpbGVkIHRvIGRpc3BhdGNoIENQRyBldmVudHM6IHs6 P30iLCBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYWNpbmc6OmluZm8hKCJERlNNIENQRyBp bml0aWFsaXplZCBzdWNjZXNzZnVsbHkiKTsKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAg Ly8vIERpc3BhdGNoIENQRyBldmVudHMgKHNob3VsZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGZy b20gZXZlbnQgbG9vcCkKKyAgICAvLy8gTWF0Y2hpbmcgQydzIHNlcnZpY2VfZGZzbV9kaXNwYXRj aAorICAgIHB1YiBmbiBkaXNwYXRjaF9ldmVudHMoJnNlbGYpIC0+IFJlc3VsdDwoKSwgcnVzdF9j b3Jvc3luYzo6Q3NFcnJvcj4geworICAgICAgICBpZiBsZXQgU29tZShyZWYgc2VydmljZSkgPSAq c2VsZi5jcGdfc2VydmljZS5yZWFkKCkgeworICAgICAgICAgICAgc2VydmljZS5kaXNwYXRjaCgp CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgfQorICAgIH0K KworICAgIC8vLyBHZXQgQ1BHIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbW9uaXRvcmluZwor ICAgIHB1YiBmbiBmZF9nZXQoJnNlbGYpIC0+IFJlc3VsdDxpMzI+IHsKKyAgICAgICAgaWYgbGV0 IFNvbWUocmVmIHNlcnZpY2UpID0gKnNlbGYuY3BnX3NlcnZpY2UucmVhZCgpIHsKKyAgICAgICAg ICAgIHNlcnZpY2UuZmQoKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRXJyKGFueWhv dzo6YW55aG93ISgiQ1BHIHNlcnZpY2Ugbm90IGluaXRpYWxpemVkIikpCisgICAgICAgIH0KKyAg ICB9CisKKyAgICAvLy8gU3RvcCBERlNNIHNlcnZpY2VzIChsZWF2ZSBDUEcgZ3JvdXAgYW5kIGZp bmFsaXplKQorICAgIHB1YiBmbiBzdG9wX3NlcnZpY2VzKCZzZWxmKSAtPiBSZXN1bHQ8KCk+IHsK KyAgICAgICAgdHJhY2luZzo6aW5mbyEoIkRGU006IFN0b3BwaW5nIHNlcnZpY2VzIik7CisKKyAg ICAgICAgLy8gTGVhdmUgdGhlIENQRyBncm91cCBiZWZvcmUgZHJvcHBpbmcgdGhlIHNlcnZpY2UK KyAgICAgICAgbGV0IGdyb3VwX25hbWUgPSBzZWxmLmNsdXN0ZXJfbmFtZS5jbG9uZSgpOworICAg ICAgICBpZiBsZXQgU29tZShyZWYgc2VydmljZSkgPSAqc2VsZi5jcGdfc2VydmljZS5yZWFkKCkK KyAgICAgICAgICAgICYmIGxldCBFcnIoZSkgPSBzZXJ2aWNlLmxlYXZlKCZncm91cF9uYW1lKQor ICAgICAgICB7CisgICAgICAgICAgICB0cmFjaW5nOjp3YXJuISgiRXJyb3IgbGVhdmluZyBDUEcg Z3JvdXA6IHs6P30iLCBlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyb3AgdGhlIHNlcnZp Y2UgKENwZ1NlcnZpY2U6OmRyb3AgaGFuZGxlcyBmaW5hbGl6YXRpb24pCisgICAgICAgICpzZWxm LmNwZ19zZXJ2aWNlLndyaXRlKCkgPSBOb25lOworCisgICAgICAgIHRyYWNpbmc6OmluZm8hKCJE RlNNIHNlcnZpY2VzIHN0b3BwZWQiKTsKKyAgICAgICAgT2soKCkpCisgICAgfQorfQpkaWZmIC0t Z2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvc3RhdHVzX3N5bmNfc2VydmljZS5y cyBiL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vc3JjL3N0YXR1c19zeW5jX3NlcnZpY2UucnMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjg3NzA1OGE0Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvc3RhdHVzX3N5bmNfc2Vydmlj ZS5ycwpAQCAtMCwwICsxLDExOCBAQAorLy8hIFN0YXR1cyBTeW5jIFNlcnZpY2UKKy8vIQorLy8h IFRoaXMgc2VydmljZSBzeW5jaHJvbml6ZXMgZXBoZW1lcmFsIHN0YXR1cyBkYXRhIGFjcm9zcyB0 aGUgY2x1c3RlciB1c2luZyBhIHNlcGFyYXRlCisvLyEgREZTTSBpbnN0YW5jZSB3aXRoIHRoZSAi cHZlX2t2c3RvcmVfdjEiIENQRyBncm91cC4KKy8vIQorLy8hIEVxdWl2YWxlbnQgdG8gQyBpbXBs ZW1lbnRhdGlvbidzIHNlcnZpY2Vfc3RhdHVzICh0aGUga3ZzdG9yZSBERlNNKS4KKy8vISBIYW5k bGVzIHN5bmNocm9uaXphdGlvbiBvZjoKKy8vISAtIFJSRCBkYXRhIChwZXJmb3JtYW5jZSBtZXRy aWNzIGZyb20gZWFjaCBub2RlKQorLy8hIC0gTm9kZSBJUCBhZGRyZXNzZXMKKy8vISAtIENsdXN0 ZXIgbG9nIGVudHJpZXMKKy8vISAtIE90aGVyIGVwaGVtZXJhbCBzdGF0dXMga2V5LXZhbHVlIGRh dGEKKwordXNlIGFzeW5jX3RyYWl0Ojphc3luY190cmFpdDsKK3VzZSBwbXhjZnNfc2VydmljZXM6 OntEaXNwYXRjaEFjdGlvbiwgSW5pdFJlc3VsdCwgU2VydmljZSwgU2VydmljZUVycm9yfTsKK3Vz ZSBydXN0X2Nvcm9zeW5jOjpDc0Vycm9yOwordXNlIHN0ZDo6c3luYzo6QXJjOwordXNlIHN0ZDo6 dGltZTo6RHVyYXRpb247Cit1c2UgdHJhY2luZzo6e2Vycm9yLCBpbmZvLCB3YXJufTsKKwordXNl IGNyYXRlOjpEZnNtOwordXNlIGNyYXRlOjptZXNzYWdlOjpNZXNzYWdlIGFzIE1lc3NhZ2VUcmFp dDsKKworLy8vIFN0YXR1cyBTeW5jIFNlcnZpY2UKKy8vLworLy8vIFN5bmNocm9uaXplcyBlcGhl bWVyYWwgc3RhdHVzIGRhdGEgYWNyb3NzIGFsbCBub2RlcyB1c2luZyBhIHNlcGFyYXRlIERGU00g aW5zdGFuY2UuCisvLy8gVXNlcyBDUEcgZ3JvdXAgInB2ZV9rdnN0b3JlX3YxIiAoc2VwYXJhdGUg ZnJvbSBtYWluIGNvbmZpZyBkYXRhYmFzZSAicG14Y2ZzX3YxIikuCisvLy8KKy8vLyBUaGlzIGlt cGxlbWVudHMgdGhlIFNlcnZpY2UgdHJhaXQgdG8gcHJvdmlkZToKKy8vLyAtIEF1dG9tYXRpYyBy ZXRyeSBpZiBDUEcgaW5pdGlhbGl6YXRpb24gZmFpbHMKKy8vLyAtIEV2ZW50LWRyaXZlbiBDUEcg ZGlzcGF0Y2hpbmcgZm9yIHN0YXR1cyByZXBsaWNhdGlvbgorLy8vIC0gU2VwYXJhdGlvbiBvZiBz dGF0dXMgZGF0YSBmcm9tIGNvbmZpZyBkYXRhIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKy8vLwor Ly8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBDIGltcGxlbWVudGF0aW9uJ3Mgc2VydmljZV9zdGF0 dXMgKHRoZSBrdnN0b3JlIERGU00pLgorLy8vCisvLy8gVGhlIGdlbmVyaWMgcGFyYW1ldGVyIGBN YCBzcGVjaWZpZXMgdGhlIG1lc3NhZ2UgdHlwZSB0aGlzIHNlcnZpY2UgaGFuZGxlcy4KK3B1YiBz dHJ1Y3QgU3RhdHVzU3luY1NlcnZpY2U8TT4geworICAgIGRmc206IEFyYzxEZnNtPE0+PiwKKyAg ICBmZDogT3B0aW9uPGkzMj4sCit9CisKK2ltcGw8TTogTWVzc2FnZVRyYWl0ICsgQ2xvbmUgKyBT ZW5kICsgU3luYyArICdzdGF0aWM+IFN0YXR1c1N5bmNTZXJ2aWNlPE0+IHsKKyAgICAvLy8gQ3Jl YXRlIGEgbmV3IHN0YXR1cyBzeW5jIHNlcnZpY2UKKyAgICBwdWIgZm4gbmV3KGRmc206IEFyYzxE ZnNtPE0+PikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgeyBkZnNtLCBmZDogTm9uZSB9CisgICAg fQorfQorCisjW2FzeW5jX3RyYWl0XQoraW1wbDxNOiBNZXNzYWdlVHJhaXQgKyBDbG9uZSArIFNl bmQgKyBTeW5jICsgJ3N0YXRpYz4gU2VydmljZSBmb3IgU3RhdHVzU3luY1NlcnZpY2U8TT4gewor ICAgIGZuIG5hbWUoJnNlbGYpIC0+ICZzdHIgeworICAgICAgICAic3RhdHVzLXN5bmMiCisgICAg fQorCisgICAgYXN5bmMgZm4gaW5pdGlhbGl6ZSgmbXV0IHNlbGYpIC0+IHBteGNmc19zZXJ2aWNl czo6UmVzdWx0PEluaXRSZXN1bHQ+IHsKKyAgICAgICAgaW5mbyEoIkluaXRpYWxpemluZyBzdGF0 dXMgc3luYyBzZXJ2aWNlIChrdnN0b3JlKSIpOworCisgICAgICAgIC8vIEluaXRpYWxpemUgQ1BH IGNvbm5lY3Rpb24gZm9yIGt2c3RvcmUgZ3JvdXAKKyAgICAgICAgc2VsZi5kZnNtLmluaXRfY3Bn KCkubWFwX2Vycih8ZXwgeworICAgICAgICAgICAgU2VydmljZUVycm9yOjpJbml0aWFsaXphdGlv bkZhaWxlZChmb3JtYXQhKAorICAgICAgICAgICAgICAgICJTdGF0dXMgc3luYyBDUEcgaW5pdGlh bGl6YXRpb24gZmFpbGVkOiB7ZX0iCisgICAgICAgICAgICApKQorICAgICAgICB9KT87CisKKyAg ICAgICAgLy8gR2V0IGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbW9uaXRvcmluZworICAgICAg ICBsZXQgZmQgPSBzZWxmLmRmc20uZmRfZ2V0KCkubWFwX2Vycih8ZXwgeworICAgICAgICAgICAg c2VsZi5kZnNtLnN0b3Bfc2VydmljZXMoKS5vaygpOworICAgICAgICAgICAgU2VydmljZUVycm9y OjpJbml0aWFsaXphdGlvbkZhaWxlZChmb3JtYXQhKCJGYWlsZWQgdG8gZ2V0IHN0YXR1cyBzeW5j IGZkOiB7ZX0iKSkKKyAgICAgICAgfSk/OworCisgICAgICAgIHNlbGYuZmQgPSBTb21lKGZkKTsK KworICAgICAgICBpbmZvISgKKyAgICAgICAgICAgICJTdGF0dXMgc3luYyBzZXJ2aWNlIGluaXRp YWxpemVkIHN1Y2Nlc3NmdWxseSB3aXRoIGZkIHt9IiwKKyAgICAgICAgICAgIGZkCisgICAgICAg ICk7CisgICAgICAgIE9rKEluaXRSZXN1bHQ6OldpdGhGaWxlRGVzY3JpcHRvcihmZCkpCisgICAg fQorCisgICAgYXN5bmMgZm4gZGlzcGF0Y2goJm11dCBzZWxmKSAtPiBwbXhjZnNfc2VydmljZXM6 OlJlc3VsdDxEaXNwYXRjaEFjdGlvbj4geworICAgICAgICBtYXRjaCBzZWxmLmRmc20uZGlzcGF0 Y2hfZXZlbnRzKCkgeworICAgICAgICAgICAgT2soXykgPT4gT2soRGlzcGF0Y2hBY3Rpb246OkNv bnRpbnVlKSwKKyAgICAgICAgICAgIEVycihDc0Vycm9yOjpDc0VyckxpYnJhcnkpIHwgRXJyKENz RXJyb3I6OkNzRXJyQmFkSGFuZGxlKSA9PiB7CisgICAgICAgICAgICAgICAgd2FybiEoIlN0YXR1 cyBzeW5jIGNvbm5lY3Rpb24gbG9zdCwgcmVxdWVzdGluZyByZWluaXRpYWxpemF0aW9uIik7Cisg ICAgICAgICAgICAgICAgT2soRGlzcGF0Y2hBY3Rpb246OlJlaW5pdGlhbGl6ZSkKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIEVycihlKSA9PiB7CisgICAgICAgICAgICAgICAgZXJyb3IhKCJT dGF0dXMgc3luYyBkaXNwYXRjaCBmYWlsZWQ6IHt9IiwgZSk7CisgICAgICAgICAgICAgICAgRXJy KFNlcnZpY2VFcnJvcjo6RGlzcGF0Y2hGYWlsZWQoZm9ybWF0ISgKKyAgICAgICAgICAgICAgICAg ICAgIlN0YXR1cyBzeW5jIGRpc3BhdGNoIGZhaWxlZDoge2V9IgorICAgICAgICAgICAgICAgICkp KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXN5bmMgZm4gZmluYWxp emUoJm11dCBzZWxmKSAtPiBwbXhjZnNfc2VydmljZXM6OlJlc3VsdDwoKT4geworICAgICAgICBp bmZvISgiRmluYWxpemluZyBzdGF0dXMgc3luYyBzZXJ2aWNlIik7CisKKyAgICAgICAgc2VsZi5m ZCA9IE5vbmU7CisKKyAgICAgICAgaWYgbGV0IEVycihlKSA9IHNlbGYuZGZzbS5zdG9wX3NlcnZp Y2VzKCkgeworICAgICAgICAgICAgd2FybiEoIkVycm9yIHN0b3BwaW5nIHN0YXR1cyBzeW5jIHNl cnZpY2VzOiB7fSIsIGUpOworICAgICAgICB9CisKKyAgICAgICAgaW5mbyEoIlN0YXR1cyBzeW5j IHNlcnZpY2UgZmluYWxpemVkIik7CisgICAgICAgIE9rKCgpKQorICAgIH0KKworICAgIGFzeW5j IGZuIHRpbWVyX2NhbGxiYWNrKCZtdXQgc2VsZikgLT4gcG14Y2ZzX3NlcnZpY2VzOjpSZXN1bHQ8 KCk+IHsKKyAgICAgICAgLy8gU3RhdHVzIHN5bmMgZG9lc24ndCBuZWVkIHBlcmlvZGljIHZlcmlm aWNhdGlvbiBsaWtlIHRoZSBtYWluIGRhdGFiYXNlCisgICAgICAgIC8vIFN0YXR1cyBkYXRhIGlz IGVwaGVtZXJhbCBhbmQgZG9lc24ndCByZXF1aXJlIHRoZSBzYW1lIGNvbnNpc3RlbmN5IGd1YXJh bnRlZXMKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4gdGltZXJfcGVyaW9kKCZzZWxm KSAtPiBPcHRpb248RHVyYXRpb24+IHsKKyAgICAgICAgLy8gTm8gcGVyaW9kaWMgdGltZXIgbmVl ZGVkIGZvciBzdGF0dXMgc3luYworICAgICAgICBOb25lCisgICAgfQorfQpkaWZmIC0tZ2l0IGEv c3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS9zcmMvdHlwZXMucnMgYi9zcmMvcG14Y2ZzLXJzL3Bt eGNmcy1kZnNtL3NyYy90eXBlcy5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uNWEyZWI5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNt L3NyYy90eXBlcy5ycwpAQCAtMCwwICsxLDEwNyBAQAorLy8vIERGU00gdHlwZSBkZWZpbml0aW9u cworLy8vCisvLy8gVGhpcyBtb2R1bGUgY29udGFpbnMgYWxsIHR5cGUgZGVmaW5pdGlvbnMgdXNl ZCBieSB0aGUgREZTTSBzdGF0ZSBtYWNoaW5lLgorLy8vIERGU00gb3BlcmF0aW5nIG1vZGVzCisj W2Rlcml2ZShEZWJ1ZywgQ2xvbmUsIENvcHksIFBhcnRpYWxFcSwgRXEsIFBhcnRpYWxPcmQsIE9y ZCldCitwdWIgZW51bSBEZnNtTW9kZSB7CisgICAgLy8vIEluaXRpYWwgc3RhdGUgLSBzdGFydGlu ZyBjbHVzdGVyIGNvbm5lY3Rpb24KKyAgICBTdGFydCA9IDAsCisKKyAgICAvLy8gU3RhcnRpbmcg ZGF0YSBzeW5jaHJvbml6YXRpb24KKyAgICBTdGFydFN5bmMgPSAxLAorCisgICAgLy8vIEFsbCBk YXRhIGlzIHVwIHRvIGRhdGUKKyAgICBTeW5jZWQgPSAyLAorCisgICAgLy8vIFdhaXRpbmcgZm9y IHVwZGF0ZXMgZnJvbSBsZWFkZXIKKyAgICBVcGRhdGUgPSAzLAorCisgICAgLy8vIEVycm9yIHN0 YXRlcyAoPj0gMTI4KQorICAgIExlYXZlID0gMjUzLAorICAgIFZlcnNpb25FcnJvciA9IDI1NCwK KyAgICBFcnJvciA9IDI1NSwKK30KKworaW1wbCBEZnNtTW9kZSB7CisgICAgLy8vIENoZWNrIGlm IHRoaXMgaXMgYW4gZXJyb3IgbW9kZQorICAgIHB1YiBmbiBpc19lcnJvcigmc2VsZikgLT4gYm9v bCB7CisgICAgICAgICgqc2VsZiBhcyB1OCkgPj0gMTI4CisgICAgfQorfQorCitpbXBsIHN0ZDo6 Zm10OjpEaXNwbGF5IGZvciBEZnNtTW9kZSB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0 ZDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgbWF0 Y2ggc2VsZiB7CisgICAgICAgICAgICBEZnNtTW9kZTo6U3RhcnQgPT4gd3JpdGUhKGYsICJzdGFy dCBjbHVzdGVyIGNvbm5lY3Rpb24iKSwKKyAgICAgICAgICAgIERmc21Nb2RlOjpTdGFydFN5bmMg PT4gd3JpdGUhKGYsICJzdGFydGluZyBkYXRhIHN5bmNocm9uaXphdGlvbiIpLAorICAgICAgICAg ICAgRGZzbU1vZGU6OlN5bmNlZCA9PiB3cml0ZSEoZiwgImFsbCBkYXRhIGlzIHVwIHRvIGRhdGUi KSwKKyAgICAgICAgICAgIERmc21Nb2RlOjpVcGRhdGUgPT4gd3JpdGUhKGYsICJ3YWl0aW5nIGZv ciB1cGRhdGVzIGZyb20gbGVhZGVyIiksCisgICAgICAgICAgICBEZnNtTW9kZTo6TGVhdmUgPT4g d3JpdGUhKGYsICJsZWF2aW5nIGNsdXN0ZXIiKSwKKyAgICAgICAgICAgIERmc21Nb2RlOjpWZXJz aW9uRXJyb3IgPT4gd3JpdGUhKGYsICJwcm90b2NvbCB2ZXJzaW9uIG1pc21hdGNoIiksCisgICAg ICAgICAgICBEZnNtTW9kZTo6RXJyb3IgPT4gd3JpdGUhKGYsICJzZXJpb3VzIGludGVybmFsIGVy cm9yIiksCisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vLyBERlNNIG1lc3NhZ2UgdHlwZXMgKGlu dGVybmFsIHByb3RvY29sIG1lc3NhZ2VzKQorLy8vIE1hdGNoZXMgQydzIGRmc21fbWVzc2FnZV90 IGVudW0gdmFsdWVzCisjW2Rlcml2ZShEZWJ1ZywgQ2xvbmUsIENvcHksIFBhcnRpYWxFcSwgRXEs IG51bV9lbnVtOjpUcnlGcm9tUHJpbWl0aXZlKV0KKyNbcmVwcih1MTYpXQorcHViIGVudW0gRGZz bU1lc3NhZ2VUeXBlIHsKKyAgICBOb3JtYWwgPSAwLAorICAgIFN5bmNTdGFydCA9IDEsCisgICAg U3RhdGUgPSAyLAorICAgIFVwZGF0ZSA9IDMsCisgICAgVXBkYXRlQ29tcGxldGUgPSA0LAorICAg IFZlcmlmeVJlcXVlc3QgPSA1LAorICAgIFZlcmlmeSA9IDYsCit9CisKKy8vLyBTeW5jIGVwb2No IC0gaWRlbnRpZmllcyBhIHN5bmNocm9uaXphdGlvbiBzZXNzaW9uCisvLy8gTWF0Y2hlcyBDJ3Mg ZGZzbV9zeW5jX2Vwb2NoX3Qgc3RydWN0dXJlICgxNiBieXRlcyB0b3RhbCkKKyNbZGVyaXZlKERl YnVnLCBDbG9uZSwgQ29weSwgUGFydGlhbEVxLCBFcSwgSGFzaCldCitwdWIgc3RydWN0IFN5bmNF cG9jaCB7CisgICAgcHViIGVwb2NoOiB1MzIsCisgICAgcHViIHRpbWU6IHUzMiwKKyAgICBwdWIg bm9kZWlkOiB1MzIsCisgICAgcHViIHBpZDogdTMyLAorfQorCitpbXBsIFN5bmNFcG9jaCB7Cisg ICAgLy8vIFNlcmlhbGl6ZSB0byBDLWNvbXBhdGlibGUgd2lyZSBmb3JtYXQgKDE2IGJ5dGVzKQor ICAgIC8vLyBGb3JtYXQ6IFtlcG9jaDogdTMyXVt0aW1lOiB1MzJdW25vZGVpZDogdTMyXVtwaWQ6 IHUzMl0KKyAgICBwdWIgZm4gc2VyaWFsaXplKCZzZWxmKSAtPiBbdTg7IDE2XSB7CisgICAgICAg IGxldCBtdXQgYnl0ZXMgPSBbMHU4OyAxNl07CisgICAgICAgIGJ5dGVzWzAuLjRdLmNvcHlfZnJv bV9zbGljZSgmc2VsZi5lcG9jaC50b19sZV9ieXRlcygpKTsKKyAgICAgICAgYnl0ZXNbNC4uOF0u Y29weV9mcm9tX3NsaWNlKCZzZWxmLnRpbWUudG9fbGVfYnl0ZXMoKSk7CisgICAgICAgIGJ5dGVz WzguLjEyXS5jb3B5X2Zyb21fc2xpY2UoJnNlbGYubm9kZWlkLnRvX2xlX2J5dGVzKCkpOworICAg ICAgICBieXRlc1sxMi4uMTZdLmNvcHlfZnJvbV9zbGljZSgmc2VsZi5waWQudG9fbGVfYnl0ZXMo KSk7CisgICAgICAgIGJ5dGVzCisgICAgfQorCisgICAgLy8vIERlc2VyaWFsaXplIGZyb20gQy1j b21wYXRpYmxlIHdpcmUgZm9ybWF0ICgxNiBieXRlcykKKyAgICBwdWIgZm4gZGVzZXJpYWxpemUo Ynl0ZXM6ICZbdThdKSAtPiBSZXN1bHQ8U2VsZiwgJidzdGF0aWMgc3RyPiB7CisgICAgICAgIGlm IGJ5dGVzLmxlbigpIDwgMTYgeworICAgICAgICAgICAgcmV0dXJuIEVycigiU3luY0Vwb2NoIHJl cXVpcmVzIDE2IGJ5dGVzIik7CisgICAgICAgIH0KKyAgICAgICAgT2soU3luY0Vwb2NoIHsKKyAg ICAgICAgICAgIGVwb2NoOiB1MzI6OmZyb21fbGVfYnl0ZXMoYnl0ZXNbMC4uNF0udHJ5X2ludG8o KS51bndyYXAoKSksCisgICAgICAgICAgICB0aW1lOiB1MzI6OmZyb21fbGVfYnl0ZXMoYnl0ZXNb NC4uOF0udHJ5X2ludG8oKS51bndyYXAoKSksCisgICAgICAgICAgICBub2RlaWQ6IHUzMjo6ZnJv bV9sZV9ieXRlcyhieXRlc1s4Li4xMl0udHJ5X2ludG8oKS51bndyYXAoKSksCisgICAgICAgICAg ICBwaWQ6IHUzMjo6ZnJvbV9sZV9ieXRlcyhieXRlc1sxMi4uMTZdLnRyeV9pbnRvKCkudW53cmFw KCkpLAorICAgICAgICB9KQorICAgIH0KK30KKworLy8vIFF1ZXVlZCBtZXNzYWdlIGF3YWl0aW5n IGRlbGl2ZXJ5CisjW2Rlcml2ZShEZWJ1ZywgQ2xvbmUpXQorcHViKHN1cGVyKSBzdHJ1Y3QgUXVl dWVkTWVzc2FnZTxNPiB7CisgICAgcHViIG5vZGVpZDogdTMyLAorICAgIHB1YiBwaWQ6IHUzMiwK KyAgICBwdWIgX21zZ19jb3VudDogdTY0LAorICAgIHB1YiBtZXNzYWdlOiBNLAorICAgIHB1YiB0 aW1lc3RhbXA6IHU2NCwKK30KKworLy8gUmUtZXhwb3J0IE5vZGVTeW5jSW5mbyBmcm9tIHBteGNm cy1hcGktdHlwZXMgZm9yIHVzZSBpbiBDYWxsYmFja3MgdHJhaXQKK3B1YiB1c2UgcG14Y2ZzX2Fw aV90eXBlczo6Tm9kZVN5bmNJbmZvOwpkaWZmIC0tZ2l0IGEvc3JjL3BteGNmcy1ycy9wbXhjZnMt ZGZzbS9zcmMvd2lyZV9mb3JtYXQucnMgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy93 aXJlX2Zvcm1hdC5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjc1MGIy ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcG14Y2ZzLXJzL3BteGNmcy1kZnNtL3NyYy93aXJl X2Zvcm1hdC5ycwpAQCAtMCwwICsxLDIyMCBAQAorLy8vIEMtY29tcGF0aWJsZSB3aXJlIGZvcm1h dCBmb3IgY2x1c3RlciBjb21tdW5pY2F0aW9uCisvLy8KKy8vLyBUaGlzIG1vZHVsZSBpbXBsZW1l bnRzIHRoZSBleGFjdCB3aXJlIHByb3RvY29sIHVzZWQgYnkgdGhlIEMgdmVyc2lvbiBvZiBwbXhj ZnMKKy8vLyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIEMtYmFzZWQgY2x1c3RlciBub2Rl cy4KKy8vLworLy8vIFRoZSBDIHZlcnNpb24gdXNlcyBhIHNpbXBsZSBmb3JtYXQgd2l0aCBpb3Zl YyBhcnJheXMgY29udGFpbmluZyByYXcgQyB0eXBlcy4KK3VzZSBhbnlob3c6OntDb250ZXh0LCBS ZXN1bHR9OwordXNlIGJ5dGVtdWNrOjp7UG9kLCBaZXJvYWJsZX07Cit1c2Ugc3RkOjpmZmk6OkNT dHI7CisKKy8vLyBDIG1lc3NhZ2UgdHlwZXMgKG11c3QgbWF0Y2ggZGNkYi5oKQorI1tkZXJpdmUo RGVidWcsIENsb25lLCBDb3B5LCBQYXJ0aWFsRXEsIEVxLCBudW1fZW51bTo6VHJ5RnJvbVByaW1p dGl2ZSldCisjW3JlcHIodTE2KV0KK3B1YiBlbnVtIENNZXNzYWdlVHlwZSB7CisgICAgV3JpdGUg PSAxLAorICAgIE1rZGlyID0gMiwKKyAgICBEZWxldGUgPSAzLAorICAgIFJlbmFtZSA9IDQsCisg ICAgQ3JlYXRlID0gNSwKKyAgICBNdGltZSA9IDYsCisgICAgVW5sb2NrUmVxdWVzdCA9IDcsCisg ICAgVW5sb2NrID0gOCwKK30KKworLy8vIEMtY29tcGF0aWJsZSBGVVNFIG1lc3NhZ2UgaGVhZGVy CisvLy8gTGF5b3V0IG1hdGNoZXMgdGhlIGlvdmVjIGFycmF5IGZyb20gQzogW3NpemVdW29mZnNl dF1bcGF0aGxlbl1bdG9sZW5dW2ZsYWdzXQorI1tkZXJpdmUoRGVidWcsIENsb25lLCBDb3B5LCBQ b2QsIFplcm9hYmxlKV0KKyNbcmVwcihDKV0KK3N0cnVjdCBDRnVzZU1lc3NhZ2VIZWFkZXIgewor ICAgIHNpemU6IHUzMiwKKyAgICBvZmZzZXQ6IHUzMiwKKyAgICBwYXRobGVuOiB1MzIsCisgICAg dG9sZW46IHUzMiwKKyAgICBmbGFnczogdTMyLAorfQorCisvLy8gUGFyc2VkIEMgRlVTRSBtZXNz YWdlCisjW2Rlcml2ZShEZWJ1ZywgQ2xvbmUpXQorcHViIHN0cnVjdCBDRnVzZU1lc3NhZ2Ugewor ICAgIHB1YiBzaXplOiB1MzIsCisgICAgcHViIG9mZnNldDogdTMyLAorICAgIHB1YiBmbGFnczog dTMyLAorICAgIHB1YiBwYXRoOiBTdHJpbmcsCisgICAgcHViIHRvOiBPcHRpb248U3RyaW5nPiwK KyAgICBwdWIgZGF0YTogVmVjPHU4PiwKK30KKworaW1wbCBDRnVzZU1lc3NhZ2UgeworICAgIC8v LyBQYXJzZSBhIEMgRlVTRSBtZXNzYWdlIGZyb20gcmF3IGJ5dGVzCisgICAgcHViIGZuIHBhcnNl KGRhdGE6ICZbdThdKSAtPiBSZXN1bHQ8U2VsZj4geworICAgICAgICBpZiBkYXRhLmxlbigpIDwg c3RkOjptZW06OnNpemVfb2Y6OjxDRnVzZU1lc3NhZ2VIZWFkZXI+KCkgeworICAgICAgICAgICAg cmV0dXJuIEVycihhbnlob3c6OmFueWhvdyEoCisgICAgICAgICAgICAgICAgIk1lc3NhZ2UgdG9v IHNob3J0OiB7fSA8IHt9IiwKKyAgICAgICAgICAgICAgICBkYXRhLmxlbigpLAorICAgICAgICAg ICAgICAgIHN0ZDo6bWVtOjpzaXplX29mOjo8Q0Z1c2VNZXNzYWdlSGVhZGVyPigpCisgICAgICAg ICAgICApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcnNlIGhlYWRlciBtYW51YWxseSB0 byBhdm9pZCBhbGlnbm1lbnQgaXNzdWVzCisgICAgICAgIGxldCBoZWFkZXIgPSBDRnVzZU1lc3Nh Z2VIZWFkZXIgeworICAgICAgICAgICAgc2l6ZTogdTMyOjpmcm9tX2xlX2J5dGVzKFtkYXRhWzBd LCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdXSksCisgICAgICAgICAgICBvZmZzZXQ6IHUzMjo6 ZnJvbV9sZV9ieXRlcyhbZGF0YVs0XSwgZGF0YVs1XSwgZGF0YVs2XSwgZGF0YVs3XV0pLAorICAg ICAgICAgICAgcGF0aGxlbjogdTMyOjpmcm9tX2xlX2J5dGVzKFtkYXRhWzhdLCBkYXRhWzldLCBk YXRhWzEwXSwgZGF0YVsxMV1dKSwKKyAgICAgICAgICAgIHRvbGVuOiB1MzI6OmZyb21fbGVfYnl0 ZXMoW2RhdGFbMTJdLCBkYXRhWzEzXSwgZGF0YVsxNF0sIGRhdGFbMTVdXSksCisgICAgICAgICAg ICBmbGFnczogdTMyOjpmcm9tX2xlX2J5dGVzKFtkYXRhWzE2XSwgZGF0YVsxN10sIGRhdGFbMThd LCBkYXRhWzE5XV0pLAorICAgICAgICB9OworCisgICAgICAgIGxldCBtdXQgb2Zmc2V0ID0gc3Rk OjptZW06OnNpemVfb2Y6OjxDRnVzZU1lc3NhZ2VIZWFkZXI+KCk7CisKKyAgICAgICAgLy8gUGFy c2UgcGF0aAorICAgICAgICBsZXQgcGF0aCA9IGlmIGhlYWRlci5wYXRobGVuID4gMCB7CisgICAg ICAgICAgICBpZiBvZmZzZXQgKyBoZWFkZXIucGF0aGxlbiBhcyB1c2l6ZSA+IGRhdGEubGVuKCkg eworICAgICAgICAgICAgICAgIHJldHVybiBFcnIoYW55aG93Ojphbnlob3chKCJJbnZhbGlkIHBh dGggbGVuZ3RoIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV0IHBhdGhfYnl0ZXMg PSAmZGF0YVtvZmZzZXQuLm9mZnNldCArIGhlYWRlci5wYXRobGVuIGFzIHVzaXplXTsKKyAgICAg ICAgICAgIG9mZnNldCArPSBoZWFkZXIucGF0aGxlbiBhcyB1c2l6ZTsKKworICAgICAgICAgICAg Ly8gQyBzdHJpbmdzIGFyZSBudWxsLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgIENTdHI6OmZyb21f Ynl0ZXNfdW50aWxfbnVsKHBhdGhfYnl0ZXMpCisgICAgICAgICAgICAgICAgLmNvbnRleHQoIklu dmFsaWQgcGF0aCBzdHJpbmciKT8KKyAgICAgICAgICAgICAgICAudG9fc3RyKCkKKyAgICAgICAg ICAgICAgICAuY29udGV4dCgiUGF0aCBub3QgdmFsaWQgVVRGLTgiKT8KKyAgICAgICAgICAgICAg ICAudG9fc3RyaW5nKCkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZzo6bmV3 KCkKKyAgICAgICAgfTsKKworICAgICAgICAvLyBQYXJzZSAndG8nIChmb3IgcmVuYW1lIG9wZXJh dGlvbnMpCisgICAgICAgIGxldCB0byA9IGlmIGhlYWRlci50b2xlbiA+IDAgeworICAgICAgICAg ICAgaWYgb2Zmc2V0ICsgaGVhZGVyLnRvbGVuIGFzIHVzaXplID4gZGF0YS5sZW4oKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIEVycihhbnlob3c6OmFueWhvdyEoIkludmFsaWQgdG9sZW4iKSk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZXQgdG9fYnl0ZXMgPSAmZGF0YVtvZmZzZXQu Lm9mZnNldCArIGhlYWRlci50b2xlbiBhcyB1c2l6ZV07CisgICAgICAgICAgICBvZmZzZXQgKz0g aGVhZGVyLnRvbGVuIGFzIHVzaXplOworCisgICAgICAgICAgICBTb21lKAorICAgICAgICAgICAg ICAgIENTdHI6OmZyb21fYnl0ZXNfdW50aWxfbnVsKHRvX2J5dGVzKQorICAgICAgICAgICAgICAg ICAgICAuY29udGV4dCgiSW52YWxpZCB0byBzdHJpbmciKT8KKyAgICAgICAgICAgICAgICAgICAg LnRvX3N0cigpCisgICAgICAgICAgICAgICAgICAgIC5jb250ZXh0KCJUbyBwYXRoIG5vdCB2YWxp ZCBVVEYtOCIpPworICAgICAgICAgICAgICAgICAgICAudG9fc3RyaW5nKCksCisgICAgICAgICAg ICApCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBOb25lCisgICAgICAgIH07CisKKyAg ICAgICAgLy8gUGFyc2UgZGF0YSBidWZmZXIKKyAgICAgICAgbGV0IGJ1Zl9kYXRhID0gaWYgaGVh ZGVyLnNpemUgPiAwIHsKKyAgICAgICAgICAgIGlmIG9mZnNldCArIGhlYWRlci5zaXplIGFzIHVz aXplID4gZGF0YS5sZW4oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVycihhbnlob3c6OmFu eWhvdyEoIkludmFsaWQgZGF0YSBzaXplIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZGF0YVtvZmZzZXQuLm9mZnNldCArIGhlYWRlci5zaXplIGFzIHVzaXplXS50b192ZWMoKQorICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmVjOjpuZXcoKQorICAgICAgICB9OworCisgICAg ICAgIE9rKENGdXNlTWVzc2FnZSB7CisgICAgICAgICAgICBzaXplOiBoZWFkZXIuc2l6ZSwKKyAg ICAgICAgICAgIG9mZnNldDogaGVhZGVyLm9mZnNldCwKKyAgICAgICAgICAgIGZsYWdzOiBoZWFk ZXIuZmxhZ3MsCisgICAgICAgICAgICBwYXRoLAorICAgICAgICAgICAgdG8sCisgICAgICAgICAg ICBkYXRhOiBidWZfZGF0YSwKKyAgICAgICAgfSkKKyAgICB9CisKKyAgICAvLy8gU2VyaWFsaXpl IHRvIEMgd2lyZSBmb3JtYXQKKyAgICBwdWIgZm4gc2VyaWFsaXplKCZzZWxmKSAtPiBWZWM8dTg+ IHsKKyAgICAgICAgbGV0IHBhdGhfYnl0ZXMgPSBzZWxmLnBhdGguYXNfYnl0ZXMoKTsKKyAgICAg ICAgbGV0IHBhdGhsZW4gPSBpZiBwYXRoX2J5dGVzLmlzX2VtcHR5KCkgeworICAgICAgICAgICAg MAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHBhdGhfYnl0ZXMubGVuKCkgKyAxKSBh cyB1MzIgLy8gKzEgZm9yIG51bGwgdGVybWluYXRvcgorICAgICAgICB9OworCisgICAgICAgIGxl dCB0b19ieXRlcyA9IHNlbGYudG8uYXNfcmVmKCkubWFwKHxzfCBzLmFzX2J5dGVzKCkpLnVud3Jh cF9vcigmW10pOworICAgICAgICBsZXQgdG9sZW4gPSBpZiB0b19ieXRlcy5pc19lbXB0eSgpIHsK KyAgICAgICAgICAgIDAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh0b19ieXRlcy5s ZW4oKSArIDEpIGFzIHUzMgorICAgICAgICB9OworCisgICAgICAgIGxldCBoZWFkZXIgPSBDRnVz ZU1lc3NhZ2VIZWFkZXIgeworICAgICAgICAgICAgc2l6ZTogc2VsZi5zaXplLAorICAgICAgICAg ICAgb2Zmc2V0OiBzZWxmLm9mZnNldCwKKyAgICAgICAgICAgIHBhdGhsZW4sCisgICAgICAgICAg ICB0b2xlbiwKKyAgICAgICAgICAgIGZsYWdzOiBzZWxmLmZsYWdzLAorICAgICAgICB9OworCisg ICAgICAgIGxldCBtdXQgcmVzdWx0ID0gVmVjOjpuZXcoKTsKKworICAgICAgICAvLyBTZXJpYWxp emUgaGVhZGVyCisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZShieXRlbXVjazo6Ynl0 ZXNfb2YoJmhlYWRlcikpOworCisgICAgICAgIC8vIFNlcmlhbGl6ZSBwYXRoICh3aXRoIG51bGwg dGVybWluYXRvcikKKyAgICAgICAgaWYgcGF0aGxlbiA+IDAgeworICAgICAgICAgICAgcmVzdWx0 LmV4dGVuZF9mcm9tX3NsaWNlKHBhdGhfYnl0ZXMpOworICAgICAgICAgICAgcmVzdWx0LnB1c2go MCk7IC8vIG51bGwgdGVybWluYXRvcgorICAgICAgICB9CisKKyAgICAgICAgLy8gU2VyaWFsaXpl ICd0bycgKHdpdGggbnVsbCB0ZXJtaW5hdG9yKQorICAgICAgICBpZiB0b2xlbiA+IDAgeworICAg ICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKHRvX2J5dGVzKTsKKyAgICAgICAgICAg IHJlc3VsdC5wdXNoKDApOyAvLyBudWxsIHRlcm1pbmF0b3IKKyAgICAgICAgfQorCisgICAgICAg IC8vIFNlcmlhbGl6ZSBkYXRhCisgICAgICAgIGlmIHNlbGYuc2l6ZSA+IDAgeworICAgICAgICAg ICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLmRhdGEpOworICAgICAgICB9CisKKyAg ICAgICAgcmVzdWx0CisgICAgfQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAg dXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc2VyaWFsaXplX2Rlc2Vy aWFsaXplX3dyaXRlKCkgeworICAgICAgICBsZXQgbXNnID0gQ0Z1c2VNZXNzYWdlIHsKKyAgICAg ICAgICAgIHNpemU6IDEzLAorICAgICAgICAgICAgb2Zmc2V0OiAwLAorICAgICAgICAgICAgZmxh Z3M6IDAsCisgICAgICAgICAgICBwYXRoOiAiL3Rlc3QudHh0Ii50b19zdHJpbmcoKSwKKyAgICAg ICAgICAgIHRvOiBOb25lLAorICAgICAgICAgICAgZGF0YTogYiJIZWxsbywgV29ybGQhIi50b192 ZWMoKSwKKyAgICAgICAgfTsKKworICAgICAgICBsZXQgc2VyaWFsaXplZCA9IG1zZy5zZXJpYWxp emUoKTsKKyAgICAgICAgbGV0IHBhcnNlZCA9IENGdXNlTWVzc2FnZTo6cGFyc2UoJnNlcmlhbGl6 ZWQpLnVud3JhcCgpOworCisgICAgICAgIGFzc2VydF9lcSEocGFyc2VkLnNpemUsIG1zZy5zaXpl KTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYXJzZWQub2Zmc2V0LCBtc2cub2Zmc2V0KTsKKyAgICAg ICAgYXNzZXJ0X2VxIShwYXJzZWQuZmxhZ3MsIG1zZy5mbGFncyk7CisgICAgICAgIGFzc2VydF9l cSEocGFyc2VkLnBhdGgsIG1zZy5wYXRoKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYXJzZWQudG8s IG1zZy50byk7CisgICAgICAgIGFzc2VydF9lcSEocGFyc2VkLmRhdGEsIG1zZy5kYXRhKTsKKyAg ICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemVfZGVzZXJpYWxpemVfcmVu YW1lKCkgeworICAgICAgICBsZXQgbXNnID0gQ0Z1c2VNZXNzYWdlIHsKKyAgICAgICAgICAgIHNp emU6IDAsCisgICAgICAgICAgICBvZmZzZXQ6IDAsCisgICAgICAgICAgICBmbGFnczogMCwKKyAg ICAgICAgICAgIHBhdGg6ICIvb2xkLnR4dCIudG9fc3RyaW5nKCksCisgICAgICAgICAgICB0bzog U29tZSgiL25ldy50eHQiLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgIGRhdGE6IFZlYzo6bmV3 KCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBtc2cuc2VyaWFsaXpl KCk7CisgICAgICAgIGxldCBwYXJzZWQgPSBDRnVzZU1lc3NhZ2U6OnBhcnNlKCZzZXJpYWxpemVk KS51bndyYXAoKTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhcnNlZC5wYXRoLCBtc2cucGF0aCk7 CisgICAgICAgIGFzc2VydF9lcSEocGFyc2VkLnRvLCBtc2cudG8pOworICAgIH0KK30KZGlmZiAt LWdpdCBhL3NyYy9wbXhjZnMtcnMvcG14Y2ZzLWRmc20vdGVzdHMvbXVsdGlfbm9kZV9zeW5jX3Rl c3RzLnJzIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS90ZXN0cy9tdWx0aV9ub2RlX3N5bmNf dGVzdHMucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmQzNzhmOTE0Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3BteGNmcy1ycy9wbXhjZnMtZGZzbS90ZXN0cy9tdWx0aV9u b2RlX3N5bmNfdGVzdHMucnMKQEAgLTAsMCArMSw1NjUgQEAKKy8vLyBNdWx0aS1ub2RlIGludGVn cmF0aW9uIHRlc3RzIGZvciBERlNNIGNsdXN0ZXIgc3luY2hyb25pemF0aW9uCisvLy8KKy8vLyBU aGVzZSB0ZXN0cyBzaW11bGF0ZSBtdWx0aS1ub2RlIGNsdXN0ZXJzIHRvIHZlcmlmeSB0aGUgY29t cGxldGUgc3luY2hyb25pemF0aW9uCisvLy8gcHJvdG9jb2wgd29ya3MgY29ycmVjdGx5IHdpdGgg bXVsdGlwbGUgUnVzdCBub2RlcyBleGNoYW5naW5nIHN0YXRlLgordXNlIGFueWhvdzo6UmVzdWx0 OwordXNlIHBteGNmc19kZnNtOjp7Q2FsbGJhY2tzLCBGdXNlTWVzc2FnZSwgTm9kZVN5bmNJbmZv fTsKK3VzZSBwbXhjZnNfbWVtZGI6OntNZW1EYiwgTWVtRGJJbmRleCwgUk9PVF9JTk9ERSwgVHJl ZUVudHJ5fTsKK3VzZSBzdGQ6OnN5bmM6OntBcmMsIE11dGV4fTsKK3VzZSB0ZW1wZmlsZTo6VGVt cERpcjsKKworLy8vIE1vY2sgY2FsbGJhY2tzIGZvciB0ZXN0aW5nIERGU00gd2l0aG91dCBmdWxs IHBteGNmcyBpbnRlZ3JhdGlvbgorc3RydWN0IE1vY2tDYWxsYmFja3MgeworICAgIG1lbWRiOiBN ZW1EYiwKKyAgICBzdGF0ZXNfcmVjZWl2ZWQ6IEFyYzxNdXRleDxWZWM8Tm9kZVN5bmNJbmZvPj4+ LAorICAgIHVwZGF0ZXNfcmVjZWl2ZWQ6IEFyYzxNdXRleDxWZWM8VHJlZUVudHJ5Pj4+LAorICAg IHN5bmNlZF9jb3VudDogQXJjPE11dGV4PHVzaXplPj4sCit9CisKK2ltcGwgTW9ja0NhbGxiYWNr cyB7CisgICAgZm4gbmV3KG1lbWRiOiBNZW1EYikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYgewor ICAgICAgICAgICAgbWVtZGIsCisgICAgICAgICAgICBzdGF0ZXNfcmVjZWl2ZWQ6IEFyYzo6bmV3 KE11dGV4OjpuZXcoVmVjOjpuZXcoKSkpLAorICAgICAgICAgICAgdXBkYXRlc19yZWNlaXZlZDog QXJjOjpuZXcoTXV0ZXg6Om5ldyhWZWM6Om5ldygpKSksCisgICAgICAgICAgICBzeW5jZWRfY291 bnQ6IEFyYzo6bmV3KE11dGV4OjpuZXcoMCkpLAorICAgICAgICB9CisgICAgfQorCisgICAgI1th bGxvdyhkZWFkX2NvZGUpXQorICAgIGZuIGdldF9zdGF0ZXMoJnNlbGYpIC0+IFZlYzxOb2RlU3lu Y0luZm8+IHsKKyAgICAgICAgc2VsZi5zdGF0ZXNfcmVjZWl2ZWQubG9jaygpLnVud3JhcCgpLmNs b25lKCkKKyAgICB9CisKKyAgICAjW2FsbG93KGRlYWRfY29kZSldCisgICAgZm4gZ2V0X3VwZGF0 ZXMoJnNlbGYpIC0+IFZlYzxUcmVlRW50cnk+IHsKKyAgICAgICAgc2VsZi51cGRhdGVzX3JlY2Vp dmVkLmxvY2soKS51bndyYXAoKS5jbG9uZSgpCisgICAgfQorCisgICAgI1thbGxvdyhkZWFkX2Nv ZGUpXQorICAgIGZuIGdldF9zeW5jZWRfY291bnQoJnNlbGYpIC0+IHVzaXplIHsKKyAgICAgICAg KnNlbGYuc3luY2VkX2NvdW50LmxvY2soKS51bndyYXAoKQorICAgIH0KK30KKworaW1wbCBDYWxs YmFja3M8RnVzZU1lc3NhZ2U+IGZvciBNb2NrQ2FsbGJhY2tzIHsKKyAgICBmbiBkZWxpdmVyX21l c3NhZ2UoCisgICAgICAgICZzZWxmLAorICAgICAgICBfbm9kZWlkOiB1MzIsCisgICAgICAgIF9w aWQ6IHUzMiwKKyAgICAgICAgX21lc3NhZ2U6IEZ1c2VNZXNzYWdlLAorICAgICAgICBfdGltZXN0 YW1wOiB1NjQsCisgICAgKSAtPiBSZXN1bHQ8KGkzMiwgYm9vbCk+IHsKKyAgICAgICAgT2soKDAs IHRydWUpKQorICAgIH0KKworICAgIGZuIGNvbXB1dGVfY2hlY2tzdW0oJnNlbGYsIG91dHB1dDog Jm11dCBbdTg7IDMyXSkgLT4gUmVzdWx0PCgpPiB7CisgICAgICAgIGxldCBjaGVja3N1bSA9IHNl bGYubWVtZGIuY29tcHV0ZV9kYXRhYmFzZV9jaGVja3N1bSgpPzsKKyAgICAgICAgb3V0cHV0LmNv cHlfZnJvbV9zbGljZSgmY2hlY2tzdW0pOworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICBm biBnZXRfc3RhdGUoJnNlbGYpIC0+IFJlc3VsdDxWZWM8dTg+PiB7CisgICAgICAgIGxldCBpbmRl eCA9IHNlbGYubWVtZGIuZW5jb2RlX2luZGV4KCk/OworICAgICAgICBPayhpbmRleC5zZXJpYWxp emUoKSkKKyAgICB9CisKKyAgICBmbiBwcm9jZXNzX3N0YXRlX3VwZGF0ZSgmc2VsZiwgc3RhdGVz OiAmW05vZGVTeW5jSW5mb10pIC0+IFJlc3VsdDxib29sPiB7CisgICAgICAgIC8vIFN0b3JlIHJl Y2VpdmVkIHN0YXRlcyBmb3IgdmVyaWZpY2F0aW9uCisgICAgICAgICpzZWxmLnN0YXRlc19yZWNl aXZlZC5sb2NrKCkudW53cmFwKCkgPSBzdGF0ZXMudG9fdmVjKCk7CisKKyAgICAgICAgLy8gUGFy c2UgaW5kaWNlcyBmcm9tIHN0YXRlcworICAgICAgICBsZXQgbXV0IGluZGljZXM6IFZlYzwodTMy LCB1MzIsIE1lbURiSW5kZXgpPiA9IFZlYzo6bmV3KCk7CisgICAgICAgIGZvciBub2RlIGluIHN0 YXRlcyB7CisgICAgICAgICAgICBpZiBsZXQgU29tZShzdGF0ZV9kYXRhKSA9ICZub2RlLnN0YXRl IHsKKyAgICAgICAgICAgICAgICBtYXRjaCBNZW1EYkluZGV4OjpkZXNlcmlhbGl6ZShzdGF0ZV9k YXRhKSB7CisgICAgICAgICAgICAgICAgICAgIE9rKGluZGV4KSA9PiBpbmRpY2VzLnB1c2goKG5v ZGUubm9kZWlkLCBub2RlLnBpZCwgaW5kZXgpKSwKKyAgICAgICAgICAgICAgICAgICAgRXJyKF8p ID0+IGNvbnRpbnVlLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorCisgICAgICAgIGlmIGluZGljZXMuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICByZXR1cm4g T2sodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5kIGxlYWRlciAoaGlnaGVzdCB2 ZXJzaW9uLCBvciBpZiB0aWUsIGhpZ2hlc3QgbXRpbWUpCisgICAgICAgIGxldCBtdXQgbGVhZGVy X2lkeCA9IDA7CisgICAgICAgIGZvciBpIGluIDEuLmluZGljZXMubGVuKCkgeworICAgICAgICAg ICAgbGV0IChfLCBfLCBjdXJyZW50X2luZGV4KSA9ICZpbmRpY2VzW2ldOworICAgICAgICAgICAg bGV0IChfLCBfLCBsZWFkZXJfaW5kZXgpID0gJmluZGljZXNbbGVhZGVyX2lkeF07CisgICAgICAg ICAgICBpZiBjdXJyZW50X2luZGV4ID4gbGVhZGVyX2luZGV4IHsKKyAgICAgICAgICAgICAgICBs ZWFkZXJfaWR4ID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxldCAo X2xlYWRlcl9ub2RlaWQsIF9sZWFkZXJfcGlkLCBsZWFkZXJfaW5kZXgpID0gJmluZGljZXNbbGVh ZGVyX2lkeF07CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgV0UgYXJlIHN5bmNlZCB3aXRoIGxlYWRl cgorICAgICAgICBsZXQgb3VyX2luZGV4ID0gc2VsZi5tZW1kYi5lbmNvZGVfaW5kZXgoKT87Cisg ICAgICAgIGxldCB3ZV9hcmVfc3luY2VkID0gb3VyX2luZGV4LnZlcnNpb24gPT0gbGVhZGVyX2lu ZGV4LnZlcnNpb24KKyAgICAgICAgICAgICYmIG91cl9pbmRleC5tdGltZSA9PSBsZWFkZXJfaW5k ZXgubXRpbWUKKyAgICAgICAgICAgICYmIG91cl9pbmRleC5zaXplID09IGxlYWRlcl9pbmRleC5z aXplCisgICAgICAgICAgICAmJiBvdXJfaW5kZXguZW50cmllcy5sZW4oKSA9PSBsZWFkZXJfaW5k ZXguZW50cmllcy5sZW4oKQorICAgICAgICAgICAgJiYgb3VyX2luZGV4CisgICAgICAgICAgICAg ICAgLmVudHJpZXMKKyAgICAgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAgICAgLnpp cChsZWFkZXJfaW5kZXguZW50cmllcy5pdGVyKCkpCisgICAgICAgICAgICAgICAgLmFsbCh8KGEs IGIpfCBhLmlub2RlID09IGIuaW5vZGUgJiYgYS5kaWdlc3QgPT0gYi5kaWdlc3QpOworCisgICAg ICAgIE9rKHdlX2FyZV9zeW5jZWQpCisgICAgfQorCisgICAgZm4gcHJvY2Vzc191cGRhdGUoJnNl bGYsIF9ub2RlaWQ6IHUzMiwgX3BpZDogdTMyLCBkYXRhOiAmW3U4XSkgLT4gUmVzdWx0PCgpPiB7 CisgICAgICAgIC8vIERlc2VyaWFsaXplIGFuZCBzdG9yZSB1cGRhdGUKKyAgICAgICAgbGV0IHRy ZWVfZW50cnkgPSBUcmVlRW50cnk6OmRlc2VyaWFsaXplX2Zyb21fdXBkYXRlKGRhdGEpPzsKKyAg ICAgICAgc2VsZi51cGRhdGVzX3JlY2VpdmVkCisgICAgICAgICAgICAubG9jaygpCisgICAgICAg ICAgICAudW53cmFwKCkKKyAgICAgICAgICAgIC5wdXNoKHRyZWVfZW50cnkuY2xvbmUoKSk7CisK KyAgICAgICAgLy8gQXBwbHkgdG8gZGF0YWJhc2UKKyAgICAgICAgc2VsZi5tZW1kYi5hcHBseV90 cmVlX2VudHJ5KHRyZWVfZW50cnkpPzsKKyAgICAgICAgT2soKCkpCisgICAgfQorCisgICAgZm4g Y29tbWl0X3N0YXRlKCZzZWxmKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAgICAgT2soKCkpCisgICAg fQorCisgICAgZm4gb25fc3luY2VkKCZzZWxmKSB7CisgICAgICAgICpzZWxmLnN5bmNlZF9jb3Vu dC5sb2NrKCkudW53cmFwKCkgKz0gMTsKKyAgICB9Cit9CisKK2ZuIGNyZWF0ZV90ZXN0X25vZGUo bm9kZV9pZDogdTMyKSAtPiBSZXN1bHQ8KE1lbURiLCBUZW1wRGlyLCBBcmM8TW9ja0NhbGxiYWNr cz4pPiB7CisgICAgbGV0IHRlbXBfZGlyID0gVGVtcERpcjo6bmV3KCk/OworICAgIGxldCBkYl9w YXRoID0gdGVtcF9kaXIucGF0aCgpLmpvaW4oZm9ybWF0ISgibm9kZXtub2RlX2lkfS5kYiIpKTsK KyAgICBsZXQgbWVtZGIgPSBNZW1EYjo6b3BlbigmZGJfcGF0aCwgdHJ1ZSk/OworICAgIC8vIE5v dGU6IExvY2FsIG9wZXJhdGlvbnMgYWx3YXlzIHVzZSB3cml0ZXI9MCAobWF0Y2hpbmcgQyBpbXBs ZW1lbnRhdGlvbikKKyAgICAvLyBSZW1vdGUgREZTTSB1cGRhdGVzIHVzZSB0aGUgd3JpdGVyIGZp ZWxkIGZyb20gdGhlIGluY29taW5nIFRyZWVFbnRyeQorCisgICAgbGV0IGNhbGxiYWNrcyA9IEFy Yzo6bmV3KE1vY2tDYWxsYmFja3M6Om5ldyhtZW1kYi5jbG9uZSgpKSk7CisgICAgT2soKG1lbWRi LCB0ZW1wX2RpciwgY2FsbGJhY2tzKSkKK30KKworI1t0ZXN0XQorZm4gdGVzdF90d29fbm9kZV9l bXB0eV9zeW5jKCkgLT4gUmVzdWx0PCgpPiB7CisgICAgLy8gQ3JlYXRlIHR3byBub2RlcyB3aXRo IGVtcHR5IGRhdGFiYXNlcworICAgIGxldCAoX21lbWRiMSwgX3RlbXAxLCBjYWxsYmFja3MxKSA9 IGNyZWF0ZV90ZXN0X25vZGUoMSk/OworICAgIGxldCAoX21lbWRiMiwgX3RlbXAyLCBjYWxsYmFj a3MyKSA9IGNyZWF0ZV90ZXN0X25vZGUoMik/OworCisgICAgLy8gR2VuZXJhdGUgc3RhdGVzIGZy b20gYm90aCBub2RlcworICAgIGxldCBzdGF0ZTEgPSBjYWxsYmFja3MxLmdldF9zdGF0ZSgpPzsK KyAgICBsZXQgc3RhdGUyID0gY2FsbGJhY2tzMi5nZXRfc3RhdGUoKT87CisKKyAgICAvLyBTaW11 bGF0ZSBzdGF0ZSBleGNoYW5nZQorICAgIGxldCBzdGF0ZXMgPSB2ZWMhWworICAgICAgICBOb2Rl U3luY0luZm8geworICAgICAgICAgICAgbm9kZWlkOiAxLAorICAgICAgICAgICAgcGlkOiAxMDAw LAorICAgICAgICAgICAgc3RhdGU6IFNvbWUoc3RhdGUxKSwKKyAgICAgICAgICAgIHN5bmNlZDog ZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIE5vZGVTeW5jSW5mbyB7CisgICAgICAgICAgICBu b2RlaWQ6IDIsCisgICAgICAgICAgICBwaWQ6IDIwMDAsCisgICAgICAgICAgICBzdGF0ZTogU29t ZShzdGF0ZTIpLAorICAgICAgICAgICAgc3luY2VkOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICBd OworCisgICAgLy8gQm90aCBub2RlcyBwcm9jZXNzIHN0YXRlcworICAgIGxldCBzeW5jZWQxID0g Y2FsbGJhY2tzMS5wcm9jZXNzX3N0YXRlX3VwZGF0ZSgmc3RhdGVzKT87CisgICAgbGV0IHN5bmNl ZDIgPSBjYWxsYmFja3MyLnByb2Nlc3Nfc3RhdGVfdXBkYXRlKCZzdGF0ZXMpPzsKKworICAgIC8v IEJvdGggc2hvdWxkIGJlIHN5bmNlZCAoZW1wdHkgZGF0YWJhc2VzIGFyZSBpZGVudGljYWwpCisg ICAgYXNzZXJ0IShzeW5jZWQxLCAiTm9kZSAxIHNob3VsZCBiZSBzeW5jZWQiKTsKKyAgICBhc3Nl cnQhKHN5bmNlZDIsICJOb2RlIDIgc2hvdWxkIGJlIHN5bmNlZCIpOworCisgICAgT2soKCkpCit9 CisKKyNbdGVzdF0KK2ZuIHRlc3RfdHdvX25vZGVfbGVhZGVyX2VsZWN0aW9uKCkgLT4gUmVzdWx0 PCgpPiB7CisgICAgLy8gQ3JlYXRlIHR3byBub2RlcworICAgIGxldCAobWVtZGIxLCBfdGVtcDEs IGNhbGxiYWNrczEpID0gY3JlYXRlX3Rlc3Rfbm9kZSgxKT87CisgICAgbGV0IChfbWVtZGIyLCBf dGVtcDIsIGNhbGxiYWNrczIpID0gY3JlYXRlX3Rlc3Rfbm9kZSgyKT87CisKKyAgICAvLyBOb2Rl IDEgaGFzIG1vcmUgZGF0YSAoaGlnaGVyIHZlcnNpb24pCisgICAgbWVtZGIxLmNyZWF0ZSgiL2Zp bGUxLnR4dCIsIDAsIDEwMDApPzsKKyAgICBtZW1kYjEud3JpdGUoIi9maWxlMS50eHQiLCAwLCAx MDAxLCBiImRhdGEgZnJvbSBub2RlIDEiLCAwKT87CisKKyAgICAvLyBHZW5lcmF0ZSBzdGF0ZXMK KyAgICBsZXQgc3RhdGUxID0gY2FsbGJhY2tzMS5nZXRfc3RhdGUoKT87CisgICAgbGV0IHN0YXRl MiA9IGNhbGxiYWNrczIuZ2V0X3N0YXRlKCk/OworCisgICAgLy8gUGFyc2UgdG8gY2hlY2sgdmVy c2lvbnMKKyAgICBsZXQgaW5kZXgxID0gTWVtRGJJbmRleDo6ZGVzZXJpYWxpemUoJnN0YXRlMSk/ OworICAgIGxldCBpbmRleDIgPSBNZW1EYkluZGV4OjpkZXNlcmlhbGl6ZSgmc3RhdGUyKT87CisK KyAgICAvLyBOb2RlIDEgc2hvdWxkIGhhdmUgaGlnaGVyIHZlcnNpb24KKyAgICBhc3NlcnQhKAor ICAgICAgICBpbmRleDEudmVyc2lvbiA+IGluZGV4Mi52ZXJzaW9uLAorICAgICAgICAiTm9kZSAx IHZlcnNpb24ge30gc2hvdWxkIGJlID4gTm9kZSAyIHZlcnNpb24ge30iLAorICAgICAgICBpbmRl eDEudmVyc2lvbiwKKyAgICAgICAgaW5kZXgyLnZlcnNpb24KKyAgICApOworCisgICAgLy8gU2lt dWxhdGUgc3RhdGUgZXhjaGFuZ2UKKyAgICBsZXQgc3RhdGVzID0gdmVjIVsKKyAgICAgICAgTm9k ZVN5bmNJbmZvIHsKKyAgICAgICAgICAgIG5vZGVpZDogMSwKKyAgICAgICAgICAgIHBpZDogMTAw MCwKKyAgICAgICAgICAgIHN0YXRlOiBTb21lKHN0YXRlMSksCisgICAgICAgICAgICBzeW5jZWQ6 IGZhbHNlLAorICAgICAgICB9LAorICAgICAgICBOb2RlU3luY0luZm8geworICAgICAgICAgICAg bm9kZWlkOiAyLAorICAgICAgICAgICAgcGlkOiAyMDAwLAorICAgICAgICAgICAgc3RhdGU6IFNv bWUoc3RhdGUyKSwKKyAgICAgICAgICAgIHN5bmNlZDogZmFsc2UsCisgICAgICAgIH0sCisgICAg XTsKKworICAgIC8vIFByb2Nlc3Mgc3RhdGVzCisgICAgbGV0IHN5bmNlZDEgPSBjYWxsYmFja3Mx LnByb2Nlc3Nfc3RhdGVfdXBkYXRlKCZzdGF0ZXMpPzsKKyAgICBsZXQgc3luY2VkMiA9IGNhbGxi YWNrczIucHJvY2Vzc19zdGF0ZV91cGRhdGUoJnN0YXRlcyk/OworCisgICAgLy8gTm9kZSAxIChs ZWFkZXIpIHNob3VsZCBiZSBzeW5jZWQsIE5vZGUgMiAoZm9sbG93ZXIpIHNob3VsZCBub3QKKyAg ICBhc3NlcnQhKHN5bmNlZDEsICJOb2RlIDEgKGxlYWRlcikgc2hvdWxkIGJlIHN5bmNlZCIpOwor ICAgIGFzc2VydCEoIXN5bmNlZDIsICJOb2RlIDIgKGZvbGxvd2VyKSBzaG91bGQgbm90IGJlIHN5 bmNlZCIpOworCisgICAgT2soKCkpCit9CisKKyNbdGVzdF0KK2ZuIHRlc3RfaW5jcmVtZW50YWxf dXBkYXRlX3RyYW5zZmVyKCkgLT4gUmVzdWx0PCgpPiB7CisgICAgLy8gQ3JlYXRlIGxlYWRlciBh bmQgZm9sbG93ZXIKKyAgICBsZXQgKGxlYWRlcl9kYiwgX3RlbXBfbGVhZGVyLCBfKSA9IGNyZWF0 ZV90ZXN0X25vZGUoMSk/OworICAgIGxldCAoZm9sbG93ZXJfZGIsIF90ZW1wX2ZvbGxvd2VyLCBm b2xsb3dlcl9jYWxsYmFja3MpID0gY3JlYXRlX3Rlc3Rfbm9kZSgyKT87CisKKyAgICAvLyBMZWFk ZXIgaGFzIGRhdGEKKyAgICBsZWFkZXJfZGIuY3JlYXRlKCIvY29uZmlnIiwgbGliYzo6U19JRkRJ UiwgMTAwMCk/OworICAgIGxlYWRlcl9kYi5jcmVhdGUoIi9jb25maWcvbm9kZS5jb25mIiwgMCwg MTAwMSk/OworICAgIGxlYWRlcl9kYi53cml0ZSgiL2NvbmZpZy9ub2RlLmNvbmYiLCAwLCAxMDAy LCBiImhvc3RuYW1lPXB2ZTEiLCAwKT87CisKKyAgICAvLyBHZXQgZW50cmllcyBmcm9tIGxlYWRl cgorICAgIGxldCBsZWFkZXJfZW50cmllcyA9IGxlYWRlcl9kYi5nZXRfYWxsX2VudHJpZXMoKT87 CisKKyAgICAvLyBTaW11bGF0ZSBzZW5kaW5nIHVwZGF0ZXMgdG8gZm9sbG93ZXIKKyAgICBmb3Ig ZW50cnkgaW4gbGVhZGVyX2VudHJpZXMgeworICAgICAgICBpZiBlbnRyeS5pbm9kZSA9PSBST09U X0lOT0RFIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHJvb3QgKGJvdGggaGF2ZSBp dCkKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlcmlhbGl6ZSBhcyB1cGRhdGUgbWVzc2FnZQor ICAgICAgICBsZXQgdXBkYXRlX21zZyA9IGVudHJ5LnNlcmlhbGl6ZV9mb3JfdXBkYXRlKCk7CisK KyAgICAgICAgLy8gRm9sbG93ZXIgcmVjZWl2ZXMgYW5kIHByb2Nlc3NlcyB1cGRhdGUKKyAgICAg ICAgZm9sbG93ZXJfY2FsbGJhY2tzLnByb2Nlc3NfdXBkYXRlKDEsIDEwMDAsICZ1cGRhdGVfbXNn KT87CisgICAgfQorCisgICAgLy8gVmVyaWZ5IGZvbGxvd2VyIGhhcyB0aGUgZGF0YQorICAgIGxl dCBjb25maWdfZGlyID0gZm9sbG93ZXJfZGIubG9va3VwX3BhdGgoIi9jb25maWciKTsKKyAgICBh c3NlcnQhKAorICAgICAgICBjb25maWdfZGlyLmlzX3NvbWUoKSwKKyAgICAgICAgIkZvbGxvd2Vy IHNob3VsZCBoYXZlIC9jb25maWcgZGlyZWN0b3J5IgorICAgICk7CisgICAgYXNzZXJ0IShjb25m aWdfZGlyLnVud3JhcCgpLmlzX2RpcigpKTsKKworICAgIGxldCBjb25maWdfZmlsZSA9IGZvbGxv d2VyX2RiLmxvb2t1cF9wYXRoKCIvY29uZmlnL25vZGUuY29uZiIpOworICAgIGFzc2VydCEoCisg ICAgICAgIGNvbmZpZ19maWxlLmlzX3NvbWUoKSwKKyAgICAgICAgIkZvbGxvd2VyIHNob3VsZCBo YXZlIC9jb25maWcvbm9kZS5jb25mIgorICAgICk7CisKKyAgICBsZXQgY29uZmlnX2RhdGEgPSBm b2xsb3dlcl9kYi5yZWFkKCIvY29uZmlnL25vZGUuY29uZiIsIDAsIDEwMjQpPzsKKyAgICBhc3Nl cnRfZXEhKAorICAgICAgICBjb25maWdfZGF0YSwgYiJob3N0bmFtZT1wdmUxIiwKKyAgICAgICAg IkZvbGxvd2VyIHNob3VsZCBoYXZlIGNvcnJlY3QgZGF0YSIKKyAgICApOworCisgICAgT2soKCkp Cit9CisKKyNbdGVzdF0KK2ZuIHRlc3RfdGhyZWVfbm9kZV9zeW5jKCkgLT4gUmVzdWx0PCgpPiB7 CisgICAgLy8gQ3JlYXRlIHRocmVlIG5vZGVzCisgICAgbGV0IChtZW1kYjEsIF90ZW1wMSwgY2Fs bGJhY2tzMSkgPSBjcmVhdGVfdGVzdF9ub2RlKDEpPzsKKyAgICBsZXQgKG1lbWRiMiwgX3RlbXAy LCBjYWxsYmFja3MyKSA9IGNyZWF0ZV90ZXN0X25vZGUoMik/OworICAgIGxldCAoX21lbWRiMywg X3RlbXAzLCBjYWxsYmFja3MzKSA9IGNyZWF0ZV90ZXN0X25vZGUoMyk/OworCisgICAgLy8gTm9k ZSAxIGhhcyB0aGUgbW9zdCByZWNlbnQgZGF0YQorICAgIG1lbWRiMS5jcmVhdGUoIi9jbHVzdGVy LmNvbmYiLCAwLCA1MDAwKT87CisgICAgbWVtZGIxLndyaXRlKCIvY2x1c3Rlci5jb25mIiwgMCwg NTAwMSwgYiJ2ZXJzaW9uPTMiLCAwKT87CisKKyAgICAvLyBOb2RlIDIgaGFzIG9sZGVyIGRhdGEK KyAgICBtZW1kYjIuY3JlYXRlKCIvY2x1c3Rlci5jb25mIiwgMCwgNDAwMCk/OworICAgIG1lbWRi Mi53cml0ZSgiL2NsdXN0ZXIuY29uZiIsIDAsIDQwMDEsIGIidmVyc2lvbj0yIiwgMCk/OworCisg ICAgLy8gTm9kZSAzIGlzIGVtcHR5IChuZXcgbm9kZSBqb2luaW5nKQorCisgICAgLy8gR2VuZXJh dGUgc3RhdGVzCisgICAgbGV0IHN0YXRlMSA9IGNhbGxiYWNrczEuZ2V0X3N0YXRlKCk/OworICAg IGxldCBzdGF0ZTIgPSBjYWxsYmFja3MyLmdldF9zdGF0ZSgpPzsKKyAgICBsZXQgc3RhdGUzID0g Y2FsbGJhY2tzMy5nZXRfc3RhdGUoKT87CisKKyAgICBsZXQgc3RhdGVzID0gdmVjIVsKKyAgICAg ICAgTm9kZVN5bmNJbmZvIHsKKyAgICAgICAgICAgIG5vZGVpZDogMSwKKyAgICAgICAgICAgIHBp ZDogMTAwMCwKKyAgICAgICAgICAgIHN0YXRlOiBTb21lKHN0YXRlMS5jbG9uZSgpKSwKKyAgICAg ICAgICAgIHN5bmNlZDogZmFsc2UsCisgICAgICAgIH0sCisgICAgICAgIE5vZGVTeW5jSW5mbyB7 CisgICAgICAgICAgICBub2RlaWQ6IDIsCisgICAgICAgICAgICBwaWQ6IDIwMDAsCisgICAgICAg ICAgICBzdGF0ZTogU29tZShzdGF0ZTIuY2xvbmUoKSksCisgICAgICAgICAgICBzeW5jZWQ6IGZh bHNlLAorICAgICAgICB9LAorICAgICAgICBOb2RlU3luY0luZm8geworICAgICAgICAgICAgbm9k ZWlkOiAzLAorICAgICAgICAgICAgcGlkOiAzMDAwLAorICAgICAgICAgICAgc3RhdGU6IFNvbWUo c3RhdGUzLmNsb25lKCkpLAorICAgICAgICAgICAgc3luY2VkOiBmYWxzZSwKKyAgICAgICAgfSwK KyAgICBdOworCisgICAgLy8gQWxsIG5vZGVzIHByb2Nlc3Mgc3RhdGVzCisgICAgbGV0IHN5bmNl ZDEgPSBjYWxsYmFja3MxLnByb2Nlc3Nfc3RhdGVfdXBkYXRlKCZzdGF0ZXMpPzsKKyAgICBsZXQg c3luY2VkMiA9IGNhbGxiYWNrczIucHJvY2Vzc19zdGF0ZV91cGRhdGUoJnN0YXRlcyk/OworICAg IGxldCBzeW5jZWQzID0gY2FsbGJhY2tzMy5wcm9jZXNzX3N0YXRlX3VwZGF0ZSgmc3RhdGVzKT87 CisKKyAgICAvLyBOb2RlIDEgKGxlYWRlcikgc2hvdWxkIGJlIHN5bmNlZAorICAgIGFzc2VydCEo c3luY2VkMSwgIk5vZGUgMSAobGVhZGVyKSBzaG91bGQgYmUgc3luY2VkIik7CisKKyAgICAvLyBO b2RlcyAyIGFuZCAzIG5lZWQgdXBkYXRlcworICAgIGFzc2VydCEoIXN5bmNlZDIsICJOb2RlIDIg c2hvdWxkIG5lZWQgdXBkYXRlcyIpOworICAgIGFzc2VydCEoIXN5bmNlZDMsICJOb2RlIDMgc2hv dWxkIG5lZWQgdXBkYXRlcyIpOworCisgICAgLy8gVmVyaWZ5IGxlYWRlciBoYXMgaGlnaGVzdCB2 ZXJzaW9uCisgICAgbGV0IGluZGV4MSA9IE1lbURiSW5kZXg6OmRlc2VyaWFsaXplKCZzdGF0ZTEp PzsKKyAgICBsZXQgaW5kZXgyID0gTWVtRGJJbmRleDo6ZGVzZXJpYWxpemUoJnN0YXRlMik/Owor ICAgIGxldCBpbmRleDMgPSBNZW1EYkluZGV4OjpkZXNlcmlhbGl6ZSgmc3RhdGUzKT87CisKKyAg ICBhc3NlcnQhKGluZGV4MS52ZXJzaW9uID49IGluZGV4Mi52ZXJzaW9uKTsKKyAgICBhc3NlcnQh KGluZGV4MS52ZXJzaW9uID49IGluZGV4My52ZXJzaW9uKTsKKworICAgIE9rKCgpKQorfQorCisj W3Rlc3RdCitmbiB0ZXN0X3VwZGF0ZV9tZXNzYWdlX3dpcmVfZm9ybWF0X2NvbXBhdGliaWxpdHko KSAtPiBSZXN1bHQ8KCk+IHsKKyAgICAvLyBWZXJpZnkgb3VyIHdpcmUgZm9ybWF0IG1hdGNoZXMg QyBpbXBsZW1lbnRhdGlvbiBleGFjdGx5CisgICAgbGV0IGVudHJ5ID0gVHJlZUVudHJ5IHsKKyAg ICAgICAgaW5vZGU6IDQyLAorICAgICAgICBwYXJlbnQ6IDEsCisgICAgICAgIHZlcnNpb246IDEw MCwKKyAgICAgICAgd3JpdGVyOiAyLAorICAgICAgICBtdGltZTogMTIzNDUsCisgICAgICAgIHNp emU6IDExLAorICAgICAgICBlbnRyeV90eXBlOiA4LCAvLyBEVF9SRUcKKyAgICAgICAgbmFtZTog InRlc3QuY29uZiIudG9fc3RyaW5nKCksCisgICAgICAgIGRhdGE6IGIiaGVsbG8gd29ybGQiLnRv X3ZlYygpLAorICAgIH07CisKKyAgICBsZXQgc2VyaWFsaXplZCA9IGVudHJ5LnNlcmlhbGl6ZV9m b3JfdXBkYXRlKCk7CisKKyAgICAvLyBWZXJpZnkgaGVhZGVyIHNpemUgKDQxIGJ5dGVzKQorICAg IC8vIHBhcmVudCg4KSArIGlub2RlKDgpICsgdmVyc2lvbig4KSArIHdyaXRlcig0KSArIG10aW1l KDQpICsgc2l6ZSg0KSArIG5hbWVsZW4oNCkgKyB0eXBlKDEpCisgICAgbGV0IGV4cGVjdGVkX2hl YWRlcl9zaXplID0gOCArIDggKyA4ICsgNCArIDQgKyA0ICsgNCArIDE7CisgICAgYXNzZXJ0X2Vx IShleHBlY3RlZF9oZWFkZXJfc2l6ZSwgNDEpOworCisgICAgLy8gVmVyaWZ5IHRvdGFsIHNpemUK KyAgICBsZXQgbmFtZWxlbiA9ICJ0ZXN0LmNvbmYiLmxlbigpICsgMTsgLy8gSW5jbHVkZSBudWxs IHRlcm1pbmF0b3IKKyAgICBsZXQgZXhwZWN0ZWRfdG90YWwgPSBleHBlY3RlZF9oZWFkZXJfc2l6 ZSArIG5hbWVsZW4gKyAxMTsKKyAgICBhc3NlcnRfZXEhKHNlcmlhbGl6ZWQubGVuKCksIGV4cGVj dGVkX3RvdGFsKTsKKworICAgIC8vIFZlcmlmeSB3ZSBjYW4gZGVzZXJpYWxpemUgaXQgYmFjawor ICAgIGxldCBkZXNlcmlhbGl6ZWQgPSBUcmVlRW50cnk6OmRlc2VyaWFsaXplX2Zyb21fdXBkYXRl KCZzZXJpYWxpemVkKT87CisgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQuaW5vZGUsIGVudHJ5 Lmlub2RlKTsKKyAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5wYXJlbnQsIGVudHJ5LnBhcmVu dCk7CisgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQudmVyc2lvbiwgZW50cnkudmVyc2lvbik7 CisgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQud3JpdGVyLCBlbnRyeS53cml0ZXIpOworICAg IGFzc2VydF9lcSEoZGVzZXJpYWxpemVkLm10aW1lLCBlbnRyeS5tdGltZSk7CisgICAgYXNzZXJ0 X2VxIShkZXNlcmlhbGl6ZWQuc2l6ZSwgZW50cnkuc2l6ZSk7CisgICAgYXNzZXJ0X2VxIShkZXNl cmlhbGl6ZWQuZW50cnlfdHlwZSwgZW50cnkuZW50cnlfdHlwZSk7CisgICAgYXNzZXJ0X2VxIShk ZXNlcmlhbGl6ZWQubmFtZSwgZW50cnkubmFtZSk7CisgICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6 ZWQuZGF0YSwgZW50cnkuZGF0YSk7CisKKyAgICBPaygoKSkKK30KKworI1t0ZXN0XQorZm4gdGVz dF9pbmRleF93aXJlX2Zvcm1hdF9jb21wYXRpYmlsaXR5KCkgLT4gUmVzdWx0PCgpPiB7CisgICAg Ly8gVmVyaWZ5IG1lbWRiX2luZGV4X3Qgd2lyZSBmb3JtYXQgbWF0Y2hlcyBDIGltcGxlbWVudGF0 aW9uCisgICAgdXNlIHBteGNmc19tZW1kYjo6SW5kZXhFbnRyeTsKKworICAgIGxldCBlbnRyaWVz ID0gdmVjIVsKKyAgICAgICAgSW5kZXhFbnRyeSB7CisgICAgICAgICAgICBpbm9kZTogMSwKKyAg ICAgICAgICAgIGRpZ2VzdDogWzB1ODsgMzJdLAorICAgICAgICB9LAorICAgICAgICBJbmRleEVu dHJ5IHsKKyAgICAgICAgICAgIGlub2RlOiAyLAorICAgICAgICAgICAgZGlnZXN0OiBbMXU4OyAz Ml0sCisgICAgICAgIH0sCisgICAgXTsKKworICAgIGxldCBpbmRleCA9IE1lbURiSW5kZXg6Om5l dygKKyAgICAgICAgMTAwLCAgIC8vIHZlcnNpb24KKyAgICAgICAgMiwgICAgIC8vIGxhc3RfaW5v ZGUKKyAgICAgICAgMSwgICAgIC8vIHdyaXRlcgorICAgICAgICAxMjM0NSwgLy8gbXRpbWUKKyAg ICAgICAgZW50cmllcywKKyAgICApOworCisgICAgbGV0IHNlcmlhbGl6ZWQgPSBpbmRleC5zZXJp YWxpemUoKTsKKworICAgIC8vIFZlcmlmeSBoZWFkZXIgc2l6ZSAoMzIgYnl0ZXMpCisgICAgLy8g dmVyc2lvbig4KSArIGxhc3RfaW5vZGUoOCkgKyB3cml0ZXIoNCkgKyBtdGltZSg0KSArIHNpemUo NCkgKyBieXRlcyg0KQorICAgIGxldCBleHBlY3RlZF9oZWFkZXJfc2l6ZSA9IDggKyA4ICsgNCAr IDQgKyA0ICsgNDsKKyAgICBhc3NlcnRfZXEhKGV4cGVjdGVkX2hlYWRlcl9zaXplLCAzMik7CisK KyAgICAvLyBWZXJpZnkgZW50cnkgc2l6ZSAoNDAgYnl0ZXMgZWFjaCkKKyAgICAvLyBpbm9kZSg4 KSArIGRpZ2VzdCgzMikKKyAgICBsZXQgZXhwZWN0ZWRfZW50cnlfc2l6ZSA9IDggKyAzMjsKKyAg ICBhc3NlcnRfZXEhKGV4cGVjdGVkX2VudHJ5X3NpemUsIDQwKTsKKworICAgIC8vIFZlcmlmeSB0 b3RhbCBzaXplCisgICAgbGV0IGV4cGVjdGVkX3RvdGFsID0gZXhwZWN0ZWRfaGVhZGVyX3NpemUg KyAyICogZXhwZWN0ZWRfZW50cnlfc2l6ZTsKKyAgICBhc3NlcnRfZXEhKHNlcmlhbGl6ZWQubGVu KCksIGV4cGVjdGVkX3RvdGFsKTsKKyAgICBhc3NlcnRfZXEhKHNlcmlhbGl6ZWQubGVuKCksIGlu ZGV4LmJ5dGVzIGFzIHVzaXplKTsKKworICAgIC8vIFZlcmlmeSBkZXNlcmlhbGl6YXRpb24KKyAg ICBsZXQgZGVzZXJpYWxpemVkID0gTWVtRGJJbmRleDo6ZGVzZXJpYWxpemUoJnNlcmlhbGl6ZWQp PzsKKyAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC52ZXJzaW9uLCBpbmRleC52ZXJzaW9uKTsK KyAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC5sYXN0X2lub2RlLCBpbmRleC5sYXN0X2lub2Rl KTsKKyAgICBhc3NlcnRfZXEhKGRlc2VyaWFsaXplZC53cml0ZXIsIGluZGV4LndyaXRlcik7Cisg ICAgYXNzZXJ0X2VxIShkZXNlcmlhbGl6ZWQubXRpbWUsIGluZGV4Lm10aW1lKTsKKyAgICBhc3Nl cnRfZXEhKGRlc2VyaWFsaXplZC5zaXplLCBpbmRleC5zaXplKTsKKyAgICBhc3NlcnRfZXEhKGRl c2VyaWFsaXplZC5ieXRlcywgaW5kZXguYnl0ZXMpOworICAgIGFzc2VydF9lcSEoZGVzZXJpYWxp emVkLmVudHJpZXMubGVuKCksIDIpOworCisgICAgT2soKCkpCit9CisKKyNbdGVzdF0KK2ZuIHRl c3Rfc3luY193aXRoX2NvbmZsaWN0cygpIC0+IFJlc3VsdDwoKT4geworICAgIC8vIFRlc3Qgc2Nl bmFyaW86IHR3byBub2RlcyBtb2RpZmllZCBkaWZmZXJlbnQgZmlsZXMKKyAgICBsZXQgKG1lbWRi MSwgX3RlbXAxLCBfY2FsbGJhY2tzMSkgPSBjcmVhdGVfdGVzdF9ub2RlKDEpPzsKKyAgICBsZXQg KG1lbWRiMiwgX3RlbXAyLCBfY2FsbGJhY2tzMikgPSBjcmVhdGVfdGVzdF9ub2RlKDIpPzsKKwor ICAgIC8vIEJvdGggc3RhcnQgd2l0aCBzYW1lIGJhc2UKKyAgICBtZW1kYjEuY3JlYXRlKCIvYmFz ZS5jb25mIiwgMCwgMTAwMCk/OworICAgIG1lbWRiMS53cml0ZSgiL2Jhc2UuY29uZiIsIDAsIDEw MDEsIGIic2hhcmVkIiwgMCk/OworCisgICAgbWVtZGIyLmNyZWF0ZSgiL2Jhc2UuY29uZiIsIDAs IDEwMDApPzsKKyAgICBtZW1kYjIud3JpdGUoIi9iYXNlLmNvbmYiLCAwLCAxMDAxLCBiInNoYXJl ZCIsIDApPzsKKworICAgIC8vIE5vZGUgMSBhZGRzIGZpbGUxCisgICAgbWVtZGIxLmNyZWF0ZSgi L2ZpbGUxLnR4dCIsIDAsIDIwMDApPzsKKyAgICBtZW1kYjEud3JpdGUoIi9maWxlMS50eHQiLCAw LCAyMDAxLCBiImZyb20gbm9kZSAxIiwgMCk/OworCisgICAgLy8gTm9kZSAyIGFkZHMgZmlsZTIK KyAgICBtZW1kYjIuY3JlYXRlKCIvZmlsZTIudHh0IiwgMCwgMjAwMCk/OworICAgIG1lbWRiMi53 cml0ZSgiL2ZpbGUyLnR4dCIsIDAsIDIwMDEsIGIiZnJvbSBub2RlIDIiLCAwKT87CisKKyAgICAv LyBHZW5lcmF0ZSBpbmRpY2VzCisgICAgbGV0IGluZGV4MSA9IG1lbWRiMS5lbmNvZGVfaW5kZXgo KT87CisgICAgbGV0IGluZGV4MiA9IG1lbWRiMi5lbmNvZGVfaW5kZXgoKT87CisKKyAgICAvLyBG aW5kIGRpZmZlcmVuY2VzCisgICAgbGV0IGRpZmZzXzFfdnNfMiA9IGluZGV4MS5maW5kX2RpZmZl cmVuY2VzKCZpbmRleDIpOworICAgIGxldCBkaWZmc18yX3ZzXzEgPSBpbmRleDIuZmluZF9kaWZm ZXJlbmNlcygmaW5kZXgxKTsKKworICAgIC8vIE5vZGUgMSBoYXMgZmlsZTEgdGhhdCBub2RlIDIg ZG9lc24ndCBoYXZlCisgICAgYXNzZXJ0ISgKKyAgICAgICAgIWRpZmZzXzFfdnNfMi5pc19lbXB0 eSgpLAorICAgICAgICAiTm9kZSAxIHNob3VsZCBoYXZlIGVudHJpZXMgbm9kZSAyIGRvZXNuJ3Qg aGF2ZSIKKyAgICApOworCisgICAgLy8gTm9kZSAyIGhhcyBmaWxlMiB0aGF0IG5vZGUgMSBkb2Vz bid0IGhhdmUKKyAgICBhc3NlcnQhKAorICAgICAgICAhZGlmZnNfMl92c18xLmlzX2VtcHR5KCks CisgICAgICAgICJOb2RlIDIgc2hvdWxkIGhhdmUgZW50cmllcyBub2RlIDEgZG9lc24ndCBoYXZl IgorICAgICk7CisKKyAgICAvLyBIaWdoZXIgdmVyc2lvbiB3aW5zIC0gaW4gdGhpcyBjYXNlIHRo ZXkncmUgYm90aCB2MyAoYmFzZSArIGNyZWF0ZSArIHdyaXRlKQorICAgIC8vIHNvIG10aW1lIHdv dWxkIGJlIHRpZWJyZWFrZXIKKworICAgIE9rKCgpKQorfQorCisjW3Rlc3RdCitmbiB0ZXN0X2xh cmdlX2ZpbGVfdXBkYXRlKCkgLT4gUmVzdWx0PCgpPiB7CisgICAgLy8gVGVzdCB1cGRhdGluZyBh IGZpbGUgd2l0aCBzaWduaWZpY2FudCBkYXRhCisgICAgbGV0IChsZWFkZXJfZGIsIF90ZW1wX2xl YWRlciwgXykgPSBjcmVhdGVfdGVzdF9ub2RlKDEpPzsKKyAgICBsZXQgKGZvbGxvd2VyX2RiLCBf dGVtcF9mb2xsb3dlciwgZm9sbG93ZXJfY2FsbGJhY2tzKSA9IGNyZWF0ZV90ZXN0X25vZGUoMik/ OworCisgICAgLy8gQ3JlYXRlIGEgZmlsZSB3aXRoIDEwS0Igb2YgZGF0YQorICAgIGxldCBsYXJn ZV9kYXRhOiBWZWM8dTg+ID0gKDAuLjEwMjQwKS5tYXAofGl8IChpICUgMjU2KSBhcyB1OCkuY29s bGVjdCgpOworCisgICAgbGVhZGVyX2RiLmNyZWF0ZSgiL2xhcmdlLmJpbiIsIDAsIDEwMDApPzsK KyAgICBsZWFkZXJfZGIud3JpdGUoIi9sYXJnZS5iaW4iLCAwLCAxMDAxLCAmbGFyZ2VfZGF0YSwg MCk/OworCisgICAgLy8gR2V0IHRoZSBlbnRyeQorICAgIGxldCBlbnRyeSA9IGxlYWRlcl9kYi5s b29rdXBfcGF0aCgiL2xhcmdlLmJpbiIpLnVud3JhcCgpOworCisgICAgLy8gU2VyaWFsaXplIGFu ZCBzZW5kCisgICAgbGV0IHVwZGF0ZV9tc2cgPSBlbnRyeS5zZXJpYWxpemVfZm9yX3VwZGF0ZSgp OworCisgICAgLy8gRm9sbG93ZXIgcmVjZWl2ZXMKKyAgICBmb2xsb3dlcl9jYWxsYmFja3MucHJv Y2Vzc191cGRhdGUoMSwgMTAwMCwgJnVwZGF0ZV9tc2cpPzsKKworICAgIC8vIFZlcmlmeQorICAg IGxldCBmb2xsb3dlcl9lbnRyeSA9IGZvbGxvd2VyX2RiLmxvb2t1cF9wYXRoKCIvbGFyZ2UuYmlu IikudW53cmFwKCk7CisgICAgYXNzZXJ0X2VxIShmb2xsb3dlcl9lbnRyeS5zaXplLCBsYXJnZV9k YXRhLmxlbigpKTsKKyAgICBhc3NlcnRfZXEhKGZvbGxvd2VyX2VudHJ5LmRhdGEsIGxhcmdlX2Rh dGEpOworCisgICAgT2soKCkpCit9CisKKyNbdGVzdF0KK2ZuIHRlc3RfZGlyZWN0b3J5X2hpZXJh cmNoeV9zeW5jKCkgLT4gUmVzdWx0PCgpPiB7CisgICAgLy8gVGVzdCBzeW5jaW5nIG5lc3RlZCBk aXJlY3Rvcnkgc3RydWN0dXJlCisgICAgbGV0IChsZWFkZXJfZGIsIF90ZW1wX2xlYWRlciwgXykg PSBjcmVhdGVfdGVzdF9ub2RlKDEpPzsKKyAgICBsZXQgKGZvbGxvd2VyX2RiLCBfdGVtcF9mb2xs b3dlciwgZm9sbG93ZXJfY2FsbGJhY2tzKSA9IGNyZWF0ZV90ZXN0X25vZGUoMik/OworCisgICAg Ly8gQ3JlYXRlIGRpcmVjdG9yeSBoaWVyYXJjaHkgb24gbGVhZGVyCisgICAgbGVhZGVyX2RiLmNy ZWF0ZSgiL2V0YyIsIGxpYmM6OlNfSUZESVIsIDEwMDApPzsKKyAgICBsZWFkZXJfZGIuY3JlYXRl KCIvZXRjL3B2ZSIsIGxpYmM6OlNfSUZESVIsIDEwMDEpPzsKKyAgICBsZWFkZXJfZGIuY3JlYXRl KCIvZXRjL3B2ZS9ub2RlcyIsIGxpYmM6OlNfSUZESVIsIDEwMDIpPzsKKyAgICBsZWFkZXJfZGIu Y3JlYXRlKCIvZXRjL3B2ZS9ub2Rlcy9wdmUxIiwgbGliYzo6U19JRkRJUiwgMTAwMyk/OworICAg IGxlYWRlcl9kYi5jcmVhdGUoIi9ldGMvcHZlL25vZGVzL3B2ZTEvY29uZmlnIiwgMCwgMTAwNCk/ OworICAgIGxlYWRlcl9kYi53cml0ZSgKKyAgICAgICAgIi9ldGMvcHZlL25vZGVzL3B2ZTEvY29u ZmlnIiwKKyAgICAgICAgMCwKKyAgICAgICAgMTAwNSwKKyAgICAgICAgYiJjcHU6IDJcbm1lbTog NDA5NiIsCisgICAgICAgIDAsCisgICAgKT87CisKKyAgICAvLyBTZW5kIGFsbCBlbnRyaWVzIHRv IGZvbGxvd2VyCisgICAgbGV0IGVudHJpZXMgPSBsZWFkZXJfZGIuZ2V0X2FsbF9lbnRyaWVzKCk/ OworICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzIHsKKyAgICAgICAgaWYgZW50cnkuaW5vZGUgPT0g Uk9PVF9JTk9ERSB7CisgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCByb290CisgICAgICAg IH0KKyAgICAgICAgbGV0IHVwZGF0ZV9tc2cgPSBlbnRyeS5zZXJpYWxpemVfZm9yX3VwZGF0ZSgp OworICAgICAgICBmb2xsb3dlcl9jYWxsYmFja3MucHJvY2Vzc191cGRhdGUoMSwgMTAwMCwgJnVw ZGF0ZV9tc2cpPzsKKyAgICB9CisKKyAgICAvLyBWZXJpZnkgZW50aXJlIGhpZXJhcmNoeQorICAg IGFzc2VydCEoZm9sbG93ZXJfZGIubG9va3VwX3BhdGgoIi9ldGMiKS5pc19zb21lKCkpOworICAg IGFzc2VydCEoZm9sbG93ZXJfZGIubG9va3VwX3BhdGgoIi9ldGMvcHZlIikuaXNfc29tZSgpKTsK KyAgICBhc3NlcnQhKGZvbGxvd2VyX2RiLmxvb2t1cF9wYXRoKCIvZXRjL3B2ZS9ub2RlcyIpLmlz X3NvbWUoKSk7CisgICAgYXNzZXJ0IShmb2xsb3dlcl9kYi5sb29rdXBfcGF0aCgiL2V0Yy9wdmUv bm9kZXMvcHZlMSIpLmlzX3NvbWUoKSk7CisKKyAgICBsZXQgY29uZmlnID0gZm9sbG93ZXJfZGIu bG9va3VwX3BhdGgoIi9ldGMvcHZlL25vZGVzL3B2ZTEvY29uZmlnIik7CisgICAgYXNzZXJ0IShj b25maWcuaXNfc29tZSgpKTsKKyAgICBhc3NlcnRfZXEhKGNvbmZpZy51bndyYXAoKS5kYXRhLCBi ImNwdTogMlxubWVtOiA0MDk2Iik7CisKKyAgICBPaygoKSkKK30KLS0gCjIuNDcuMwoKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFp bGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3ht b3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK