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 7D7A81FF168 for ; Mon, 14 Oct 2024 11:32:47 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 75BB1313A7; Mon, 14 Oct 2024 11:33:18 +0200 (CEST) Message-ID: <4aef8355-d0a6-48fe-b413-7a70cfce11c9@proxmox.com> Date: Mon, 14 Oct 2024 11:32:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20240912143322.548839-1-c.ebner@proxmox.com> <20240912143322.548839-16-c.ebner@proxmox.com> <1728569144.0jenvegsgc.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <1728569144.0jenvegsgc.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.376 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH v3 proxmox-backup 15/33] fix #3044: server: implement push support for sync operations X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gMTAvMTAvMjQgMTY6NDgsIEZhYmlhbiBHcsO8bmJpY2hsZXIgd3JvdGU6Cj4gbGVmdCBzb21l IGhpZ2hlciBsZXZlbCBjb21tZW50cyBvbiB0aGUgY292ZXIgbGV0dGVyIGFzIHdlbGwgdGhhdCBh cmUKPiByZWxldmFudCBmb3IgdGhpcyBwYXRjaCEKCk9rYXksIHdpbGwgYmUgYWRkcmVzc2VkIHRo ZXJlLgoKPiBPbiBTZXB0ZW1iZXIgMTIsIDIwMjQgNDozMyBwbSwgQ2hyaXN0aWFuIEVibmVyIHdy b3RlOgo+PiBBZGRzIHRoZSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkIHRvIHB1c2ggZGF0YXN0b3Jl IGNvbnRlbnRzIGZyb20gYQo+PiBzb3VyY2UgdG8gYSByZW1vdGUgdGFyZ2V0Lgo+PiBUaGlzIGlu Y2x1ZGVzIHN5bmNpbmcgb2YgdGhlIG5hbWVzcGFjZXMsIGJhY2t1cCBncm91cHMgYW5kIHNuYXBz aG90cwo+PiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZmlsdGVycyBhcyB3ZWxsIGFzIHJlbW92aW5n IHZhbmlzaGVkIGNvbnRlbnRzCj4+IGZyb20gdGhlIHRhcmdldCB3aGVuIHJlcXVlc3RlZC4KPj4K Pj4gV2hpbGUgdHJ5aW5nIHRvIG1pbWljIHRoZSBwdWxsIGRpcmVjdGlvbiBvZiBzeW5jIGpvYnMs IHRoZQo+PiBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQgYXMgYWNjZXNzIHRvIHRoZSByZW1v dGUgbXVzdCBiZSBwZXJmb3JtZWQKPj4gdmlhIHRoZSBSRVNUIEFQSSwgbm90IG5lZWRlZCBmb3Ig dGhlIHB1bGwgam9iIHdoaWNoIGNhbiBhY2Nlc3MgdGhlCj4+IGxvY2FsIGRhdGFzdG9yZSB2aWEg dGhlIGZpbGVzeXN0ZW0gZGlyZWN0bHkuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBF Ym5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4KPj4gLS0tCj4+IGNoYW5nZXMgc2luY2UgdmVyc2lv biAyOgo+PiAtIEltcGxlbWVudCBhZGRpdGlvbmFsIHBlcm1pc3Npb24gY2hlY2tzIGxpbWl0aW5n IHBvc3NpYmxlIHJlbW90ZQo+PiAgICBkYXRhc3RvcmUgb3BlcmF0aW9ucy4KPj4gLSBSZW5hbWUg YG93bmVyYCB0byBgbG9jYWxfdXNlcmAsIHRoaXMgaXMgdGhlIHVzZXIgd2hvJ3MgdmlldyBvZiB0 aGUKPj4gICAgbG9jYWwgZGF0YXN0b3JlIGlzIHVzZWQgZm9yIHRoZSBwdXNoIHRvIHRoZSByZW1v dGUgdGFyZ2V0LiBJdCBjYW4gYmUKPj4gICAgZGlmZmVyZW50IGZyb20gdGhlIGpvYiB1c2VyLCBl eGVjdXRpbmcgdGhlIHN5bmMgam9iIGFuZCByZXF1aXJpbmcgdGhlCj4+ICAgIHBlcm1pc3Npb25z IHRvIGFjY2VzcyB0aGUgcmVtb3RlLgo+Pgo+PiAgIHNyYy9zZXJ2ZXIvbW9kLnJzICB8ICAgMSAr Cj4+ICAgc3JjL3NlcnZlci9wdXNoLnJzIHwgODkyICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+PiAgIDIgZmlsZXMgY2hhbmdlZCwgODkzIGluc2VydGlvbnMo KykKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3NlcnZlci9wdXNoLnJzCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvc2VydmVyL21vZC5ycyBiL3NyYy9zZXJ2ZXIvbW9kLnJzCj4+IGluZGV4IDQ2 ODg0N2MyZS4uODgyYzVjYzEwIDEwMDY0NAo+PiAtLS0gYS9zcmMvc2VydmVyL21vZC5ycwo+PiAr KysgYi9zcmMvc2VydmVyL21vZC5ycwo+PiBAQCAtMzQsNiArMzQsNyBAQCBwdWIgdXNlIHJlcG9y dDo6KjsKPj4gICBwdWIgbW9kIGF1dGg7Cj4+ICAgCj4+ICAgcHViKGNyYXRlKSBtb2QgcHVsbDsK Pj4gK3B1YihjcmF0ZSkgbW9kIHB1c2g7Cj4+ICAgcHViKGNyYXRlKSBtb2Qgc3luYzsKPj4gICAK Pj4gICBwdWIoY3JhdGUpIGFzeW5jIGZuIHJlbG9hZF9wcm94eV9jZXJ0aWZpY2F0ZSgpIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKPj4gZGlmZiAtLWdpdCBhL3NyYy9zZXJ2ZXIvcHVzaC5ycyBiL3Ny Yy9zZXJ2ZXIvcHVzaC5ycwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw MDAuLmNmYmI4ODcyOAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3NyYy9zZXJ2ZXIvcHVzaC5y cwo+PiBAQCAtMCwwICsxLDg5MiBAQAo+PiArLy8hIFN5bmMgZGF0YXN0b3JlIGJ5IHB1c2hpbmcg Y29udGVudHMgdG8gcmVtb3RlIHNlcnZlcgo+PiArCj4+ICt1c2Ugc3RkOjpjbXA6Ok9yZGVyaW5n Owo+PiArdXNlIHN0ZDo6Y29sbGVjdGlvbnM6Okhhc2hTZXQ7Cj4+ICt1c2Ugc3RkOjpzeW5jOjp7 QXJjLCBNdXRleH07Cj4+ICsKPj4gK3VzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBFcnJv cn07Cj4+ICt1c2UgZnV0dXJlczo6c3RyZWFtOjp7c2VsZiwgU3RyZWFtRXh0LCBUcnlTdHJlYW1F eHR9Owo+PiArdXNlIHRva2lvOjpzeW5jOjptcHNjOwo+PiArdXNlIHRva2lvX3N0cmVhbTo6d3Jh cHBlcnM6OlJlY2VpdmVyU3RyZWFtOwo+PiArdXNlIHRyYWNpbmc6OmluZm87Cj4+ICsKPj4gK3Vz ZSBwYnNfYXBpX3R5cGVzOjp7Cj4+ICsgICAgcHJpbnRfc3RvcmVfYW5kX25zLCBBdXRoaWQsIEJh Y2t1cERpciwgQmFja3VwR3JvdXAsIEJhY2t1cE5hbWVzcGFjZSwgQ3J5cHRNb2RlLCBHcm91cEZp bHRlciwKPj4gKyAgICBHcm91cExpc3RJdGVtLCBOYW1lc3BhY2VMaXN0SXRlbSwgT3BlcmF0aW9u LCBSYXRlTGltaXRDb25maWcsIFJlbW90ZSwgU25hcHNob3RMaXN0SXRlbSwKPj4gKyAgICBQUklW X1JFTU9URV9EQVRBU1RPUkVfQkFDS1VQLCBQUklWX1JFTU9URV9EQVRBU1RPUkVfTU9ESUZZLCBQ UklWX1JFTU9URV9EQVRBU1RPUkVfUFJVTkUsCj4+ICt9Owo+PiArdXNlIHBic19jbGllbnQ6OntC YWNrdXBSZXBvc2l0b3J5LCBCYWNrdXBXcml0ZXIsIEh0dHBDbGllbnQsIFVwbG9hZE9wdGlvbnN9 Owo+PiArdXNlIHBic19jb25maWc6OkNhY2hlZFVzZXJJbmZvOwo+PiArdXNlIHBic19kYXRhc3Rv cmU6OmRhdGFfYmxvYjo6Q2h1bmtJbmZvOwo+PiArdXNlIHBic19kYXRhc3RvcmU6OmR5bmFtaWNf aW5kZXg6OkR5bmFtaWNJbmRleFJlYWRlcjsKPj4gK3VzZSBwYnNfZGF0YXN0b3JlOjpmaXhlZF9p bmRleDo6Rml4ZWRJbmRleFJlYWRlcjsKPj4gK3VzZSBwYnNfZGF0YXN0b3JlOjppbmRleDo6SW5k ZXhGaWxlOwo+PiArdXNlIHBic19kYXRhc3RvcmU6Om1hbmlmZXN0Ojp7QXJjaGl2ZVR5cGUsIENM SUVOVF9MT0dfQkxPQl9OQU1FLCBNQU5JRkVTVF9CTE9CX05BTUV9Owo+PiArdXNlIHBic19kYXRh c3RvcmU6OnJlYWRfY2h1bms6OkFzeW5jUmVhZENodW5rOwo+PiArdXNlIHBic19kYXRhc3RvcmU6 OntCYWNrdXBNYW5pZmVzdCwgRGF0YVN0b3JlLCBTdG9yZVByb2dyZXNzfTsKPj4gKwo+PiArdXNl IHN1cGVyOjpzeW5jOjp7Cj4+ICsgICAgY2hlY2tfbmFtZXNwYWNlX2RlcHRoX2xpbWl0LCBMb2Nh bFNvdXJjZSwgUmVtb3ZlZFZhbmlzaGVkU3RhdHMsIFNraXBJbmZvLCBTa2lwUmVhc29uLAo+PiAr ICAgIFN5bmNTb3VyY2UsIFN5bmNTdGF0cywKPj4gK307Cj4+ICt1c2UgY3JhdGU6OmFwaTI6OmNv bmZpZzo6cmVtb3RlOwo+PiArCj4+ICsvLy8gVGFyZ2V0IGZvciBiYWNrdXBzIHRvIGJlIHB1c2hl ZCB0bwo+PiArcHViKGNyYXRlKSBzdHJ1Y3QgUHVzaFRhcmdldCB7Cj4+ICsgICAgLy8gTmFtZSBv ZiB0aGUgcmVtb3RlIGFzIGZvdW5kIGluIHJlbW90ZS5jZmcKPj4gKyAgICByZW1vdGU6IFN0cmlu ZywKPj4gKyAgICAvLyBUYXJnZXQgcmVwb3NpdG9yeSBvbiByZW1vdGUKPj4gKyAgICByZXBvOiBC YWNrdXBSZXBvc2l0b3J5LAo+PiArICAgIC8vIFRhcmdldCBuYW1lc3BhY2Ugb24gcmVtb3RlCj4+ ICsgICAgbnM6IEJhY2t1cE5hbWVzcGFjZSwKPj4gKyAgICAvLyBIdHRwIGNsaWVudCB0byBjb25u ZWN0IHRvIHJlbW90ZQo+PiArICAgIGNsaWVudDogSHR0cENsaWVudCwKPj4gK30KPj4gKwo+PiAr Ly8vIFBhcmFtZXRlcnMgZm9yIGEgcHVzaCBvcGVyYXRpb24KPj4gK3B1YihjcmF0ZSkgc3RydWN0 IFB1c2hQYXJhbWV0ZXJzIHsKPj4gKyAgICAvLy8gU291cmNlIG9mIGJhY2t1cHMgdG8gYmUgcHVz aGVkIHRvIHJlbW90ZQo+PiArICAgIHNvdXJjZTogQXJjPExvY2FsU291cmNlPiwKPj4gKyAgICAv Ly8gVGFyZ2V0IGZvciBiYWNrdXBzIHRvIGJlIHB1c2hlZCB0bwo+PiArICAgIHRhcmdldDogUHVz aFRhcmdldCwKPj4gKyAgICAvLy8gTG9jYWwgdXNlciBsaW1pdGluZyB0aGUgYWNjZXNzaWJsZSBz b3VyY2UgY29udGVudHMsIG1ha2VzIHN1cmUgdGhhdCB0aGUgc3luYyBqb2Igc2VlcyB0aGUKPj4g KyAgICAvLy8gc2FtZSBzb3VyY2UgY29udGVudCB3aGVuIGV4ZWN1dGVkIGJ5IGRpZmZlcmVudCB1 c2VycyB3aXRoIGRpZmZlcmVudCBwcml2aWxlZ2VzCj4+ICsgICAgbG9jYWxfdXNlcjogQXV0aGlk LAo+PiArICAgIC8vLyBVc2VyIGFzIHdoaWNoIHRoZSBqb2IgZ2V0cyBleGVjdXRlZCwgcmVxdWly ZXMgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSByZW1vdGUKPj4gKyAgICBwdWIoY3JhdGUpIGpvYl91 c2VyOiBPcHRpb248QXV0aGlkPiwKPj4gKyAgICAvLy8gV2hldGhlciB0byByZW1vdmUgZ3JvdXBz IHdoaWNoIGV4aXN0IGxvY2FsbHksIGJ1dCBub3Qgb24gdGhlIHJlbW90ZSBlbmQKPj4gKyAgICBy ZW1vdmVfdmFuaXNoZWQ6IGJvb2wsCj4+ICsgICAgLy8vIEhvdyBtYW55IGxldmVscyBvZiBzdWIt bmFtZXNwYWNlcyB0byBwdXNoICgwID09IG5vIHJlY3Vyc2lvbiwgTm9uZSA9PSBtYXhpbXVtIHJl Y3Vyc2lvbikKPj4gKyAgICBtYXhfZGVwdGg6IE9wdGlvbjx1c2l6ZT4sCj4+ICsgICAgLy8vIEZp bHRlcnMgZm9yIHJlZHVjaW5nIHRoZSBwdXNoIHNjb3BlCj4+ICsgICAgZ3JvdXBfZmlsdGVyOiBW ZWM8R3JvdXBGaWx0ZXI+LAo+PiArICAgIC8vLyBIb3cgbWFueSBzbmFwc2hvdHMgc2hvdWxkIGJl IHRyYW5zZmVycmVkIGF0IG1vc3QgKHRha2luZyB0aGUgbmV3ZXN0IE4gc25hcHNob3RzKQo+PiAr ICAgIHRyYW5zZmVyX2xhc3Q6IE9wdGlvbjx1c2l6ZT4sCj4+ICt9Cj4+ICsKPj4gK2ltcGwgUHVz aFBhcmFtZXRlcnMgewo+PiArICAgIC8vLyBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGBQdXNo UGFyYW1ldGVyc2AuCj4+ICsgICAgI1thbGxvdyhjbGlwcHk6OnRvb19tYW55X2FyZ3VtZW50cyld Cj4+ICsgICAgcHViKGNyYXRlKSBmbiBuZXcoCj4+ICsgICAgICAgIHN0b3JlOiAmc3RyLAo+PiAr ICAgICAgICBuczogQmFja3VwTmFtZXNwYWNlLAo+PiArICAgICAgICByZW1vdGVfaWQ6ICZzdHIs Cj4+ICsgICAgICAgIHJlbW90ZV9zdG9yZTogJnN0ciwKPj4gKyAgICAgICAgcmVtb3RlX25zOiBC YWNrdXBOYW1lc3BhY2UsCj4+ICsgICAgICAgIGxvY2FsX3VzZXI6IEF1dGhpZCwKPj4gKyAgICAg ICAgcmVtb3ZlX3ZhbmlzaGVkOiBPcHRpb248Ym9vbD4sCj4+ICsgICAgICAgIG1heF9kZXB0aDog T3B0aW9uPHVzaXplPiwKPj4gKyAgICAgICAgZ3JvdXBfZmlsdGVyOiBPcHRpb248VmVjPEdyb3Vw RmlsdGVyPj4sCj4+ICsgICAgICAgIGxpbWl0OiBSYXRlTGltaXRDb25maWcsCj4+ICsgICAgICAg IHRyYW5zZmVyX2xhc3Q6IE9wdGlvbjx1c2l6ZT4sCj4+ICsgICAgKSAtPiBSZXN1bHQ8U2VsZiwg RXJyb3I+IHsKPj4gKyAgICAgICAgaWYgbGV0IFNvbWUobWF4X2RlcHRoKSA9IG1heF9kZXB0aCB7 Cj4+ICsgICAgICAgICAgICBucy5jaGVja19tYXhfZGVwdGgobWF4X2RlcHRoKT87Cj4+ICsgICAg ICAgICAgICByZW1vdGVfbnMuY2hlY2tfbWF4X2RlcHRoKG1heF9kZXB0aCk/Owo+PiArICAgICAg ICB9Owo+PiArICAgICAgICBsZXQgcmVtb3ZlX3ZhbmlzaGVkID0gcmVtb3ZlX3ZhbmlzaGVkLnVu d3JhcF9vcihmYWxzZSk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IHNvdXJjZSA9IEFyYzo6bmV3KExv Y2FsU291cmNlIHsKPj4gKyAgICAgICAgICAgIHN0b3JlOiBEYXRhU3RvcmU6Omxvb2t1cF9kYXRh c3RvcmUoc3RvcmUsIFNvbWUoT3BlcmF0aW9uOjpSZWFkKSk/LAo+PiArICAgICAgICAgICAgbnMs Cj4+ICsgICAgICAgIH0pOwo+PiArCj4+ICsgICAgICAgIGxldCAocmVtb3RlX2NvbmZpZywgX2Rp Z2VzdCkgPSBwYnNfY29uZmlnOjpyZW1vdGU6OmNvbmZpZygpPzsKPj4gKyAgICAgICAgbGV0IHJl bW90ZTogUmVtb3RlID0gcmVtb3RlX2NvbmZpZy5sb29rdXAoInJlbW90ZSIsIHJlbW90ZV9pZCk/ Owo+PiArCj4+ICsgICAgICAgIGxldCByZXBvID0gQmFja3VwUmVwb3NpdG9yeTo6bmV3KAo+PiAr ICAgICAgICAgICAgU29tZShyZW1vdGUuY29uZmlnLmF1dGhfaWQuY2xvbmUoKSksCj4+ICsgICAg ICAgICAgICBTb21lKHJlbW90ZS5jb25maWcuaG9zdC5jbG9uZSgpKSwKPj4gKyAgICAgICAgICAg IHJlbW90ZS5jb25maWcucG9ydCwKPj4gKyAgICAgICAgICAgIHJlbW90ZV9zdG9yZS50b19zdHJp bmcoKSwKPj4gKyAgICAgICAgKTsKPj4gKwo+PiArICAgICAgICBsZXQgY2xpZW50ID0gcmVtb3Rl OjpyZW1vdGVfY2xpZW50X2NvbmZpZygmcmVtb3RlLCBTb21lKGxpbWl0KSk/Owo+PiArICAgICAg ICBsZXQgdGFyZ2V0ID0gUHVzaFRhcmdldCB7Cj4+ICsgICAgICAgICAgICByZW1vdGU6IHJlbW90 ZV9pZC50b19zdHJpbmcoKSwKPj4gKyAgICAgICAgICAgIHJlcG8sCj4+ICsgICAgICAgICAgICBu czogcmVtb3RlX25zLAo+PiArICAgICAgICAgICAgY2xpZW50LAo+PiArICAgICAgICB9Owo+PiAr ICAgICAgICBsZXQgZ3JvdXBfZmlsdGVyID0gZ3JvdXBfZmlsdGVyLnVud3JhcF9vcl9kZWZhdWx0 KCk7Cj4+ICsKPj4gKyAgICAgICAgT2soU2VsZiB7Cj4+ICsgICAgICAgICAgICBzb3VyY2UsCj4+ ICsgICAgICAgICAgICB0YXJnZXQsCj4+ICsgICAgICAgICAgICBsb2NhbF91c2VyLAo+PiArICAg ICAgICAgICAgam9iX3VzZXI6IE5vbmUsCj4+ICsgICAgICAgICAgICByZW1vdmVfdmFuaXNoZWQs Cj4+ICsgICAgICAgICAgICBtYXhfZGVwdGgsCj4+ICsgICAgICAgICAgICBncm91cF9maWx0ZXIs Cj4+ICsgICAgICAgICAgICB0cmFuc2Zlcl9sYXN0LAo+PiArICAgICAgICB9KQo+PiArICAgIH0K Pj4gK30KPj4gKwo+PiArZm4gY2hlY2tfbnNfcmVtb3RlX2RhdGFzdG9yZV9wcml2cygKPj4gKyAg ICBwYXJhbXM6ICZQdXNoUGFyYW1ldGVycywKPj4gKyAgICBuYW1lc3BhY2U6ICZCYWNrdXBOYW1l c3BhY2UsCj4+ICsgICAgcHJpdnM6IHU2NCwKPj4gKykgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ PiArICAgIGxldCBhdXRoX2lkID0gcGFyYW1zCj4+ICsgICAgICAgIC5qb2JfdXNlcgo+PiArICAg ICAgICAuYXNfcmVmKCkKPj4gKyAgICAgICAgLm9rX29yX2Vsc2UofHwgZm9ybWF0X2VyciEoIm1p c3Npbmcgam9iIGF1dGhpZCIpKT87Cj4+ICsgICAgbGV0IHVzZXJfaW5mbyA9IENhY2hlZFVzZXJJ bmZvOjpuZXcoKT87Cj4+ICsgICAgbGV0IG11dCBhY2xfcGF0aDogVmVjPCZzdHI+ID0gdmVjIVsi cmVtb3RlIiwgJnBhcmFtcy50YXJnZXQucmVtb3RlLCBwYXJhbXMudGFyZ2V0LnJlcG8uc3RvcmUo KV07Cj4+ICsKPj4gKyAgICBpZiAhbmFtZXNwYWNlLmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAgIGxl dCBuc19jb21wb25lbnRzOiBWZWM8JnN0cj4gPSBuYW1lc3BhY2UuY29tcG9uZW50cygpLmNvbGxl Y3QoKTsKPj4gKyAgICAgICAgYWNsX3BhdGguZXh0ZW5kKG5zX2NvbXBvbmVudHMpOwo+PiArICAg IH0KPj4gKwo+PiArICAgIHVzZXJfaW5mby5jaGVja19wcml2cyhhdXRoX2lkLCAmYWNsX3BhdGgs IHByaXZzLCBmYWxzZSk/Owo+PiArCj4+ICsgICAgT2soKCkpCj4+ICt9Cj4+ICsKPj4gKy8vIEZl dGNoIHRoZSBsaXN0IG9mIG5hbWVzcGFjZXMgZm91bmQgb24gdGFyZ2V0Cj4+ICthc3luYyBmbiBm ZXRjaF90YXJnZXRfbmFtZXNwYWNlcyhwYXJhbXM6ICZQdXNoUGFyYW1ldGVycykgLT4gUmVzdWx0 PFZlYzxCYWNrdXBOYW1lc3BhY2U+LCBFcnJvcj4gewo+PiArICAgIGxldCBhcGlfcGF0aCA9IGZv cm1hdCEoCj4+ICsgICAgICAgICJhcGkyL2pzb24vYWRtaW4vZGF0YXN0b3JlL3tzdG9yZX0vbmFt ZXNwYWNlIiwKPj4gKyAgICAgICAgc3RvcmUgPSBwYXJhbXMudGFyZ2V0LnJlcG8uc3RvcmUoKSwK Pj4gKyAgICApOwo+PiArICAgIGxldCBtdXQgcmVzdWx0ID0gcGFyYW1zLnRhcmdldC5jbGllbnQu Z2V0KCZhcGlfcGF0aCwgTm9uZSkuYXdhaXQ/Owo+PiArICAgIGxldCBuYW1lc3BhY2VzOiBWZWM8 TmFtZXNwYWNlTGlzdEl0ZW0+ID0gc2VyZGVfanNvbjo6ZnJvbV92YWx1ZShyZXN1bHRbImRhdGEi XS50YWtlKCkpPzsKPj4gKyAgICBsZXQgbXV0IG5hbWVzcGFjZXM6IFZlYzxCYWNrdXBOYW1lc3Bh Y2U+ID0gbmFtZXNwYWNlcwo+PiArICAgICAgICAuaW50b19pdGVyKCkKPj4gKyAgICAgICAgLm1h cCh8bmFtZXNwYWNlfCBuYW1lc3BhY2UubnMpCj4+ICsgICAgICAgIC5jb2xsZWN0KCk7Cj4+ICsg ICAgbmFtZXNwYWNlcy5zb3J0X3Vuc3RhYmxlX2J5X2tleSh8YXwgYS5uYW1lX2xlbigpKTsKPj4g Kwo+PiArICAgIE9rKG5hbWVzcGFjZXMpCj4+ICt9Cj4+ICsKPj4gKy8vIFJlbW92ZSB0aGUgcHJv dmlkZWQgbmFtZXNwYWNlIGZyb20gdGhlIHRhcmdldAo+PiArYXN5bmMgZm4gcmVtb3ZlX3Rhcmdl dF9uYW1lc3BhY2UoCj4+ICsgICAgcGFyYW1zOiAmUHVzaFBhcmFtZXRlcnMsCj4+ICsgICAgbmFt ZXNwYWNlOiAmQmFja3VwTmFtZXNwYWNlLAo+PiArKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4+ ICsgICAgaWYgbmFtZXNwYWNlLmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAgIGJhaWwhKCJjYW5ub3Qg cmVtb3ZlIHJvb3QgbmFtZXNwYWNlIGZyb20gdGFyZ2V0Iik7Cj4+ICsgICAgfQo+PiArCj4+ICsg ICAgY2hlY2tfbnNfcmVtb3RlX2RhdGFzdG9yZV9wcml2cyhwYXJhbXMsIG5hbWVzcGFjZSwgUFJJ Vl9SRU1PVEVfREFUQVNUT1JFX1BSVU5FKQo+PiArICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3Jt YXRfZXJyISgiUHJ1bmluZyByZW1vdGUgZGF0YXN0b3JlIGNvbnRlbnRzIG5vdCBhbGxvd2VkIC0g e2Vycn0iKSk/Owo+IAo+IHRoaXMgc2hvdWxkIGJlIE1PRElGWSwgbm90IFBSVU5FIHRvIG1pbWlj IHB1bGwtYmFzZWQgc3luY2luZywgc2VlIGNvdmVyIGxldHRlcgoKQWNrLCBjaGFuZ2VkIHRvIGJl IGBQUklWX1JFTU9URV9EQVRBU1RPUkVfTU9ESUZZYCBmb3IgdGhlIHVwY29taW5nIAp2ZXJzaW9u IG9mIHRoZSBwYXRjaGVzLgo+IAo+PiArCj4+ICsgICAgbGV0IGFwaV9wYXRoID0gZm9ybWF0ISgK Pj4gKyAgICAgICAgImFwaTIvanNvbi9hZG1pbi9kYXRhc3RvcmUve3N0b3JlfS9uYW1lc3BhY2Ui LAo+PiArICAgICAgICBzdG9yZSA9IHBhcmFtcy50YXJnZXQucmVwby5zdG9yZSgpLAo+PiArICAg ICk7Cj4+ICsKPj4gKyAgICBsZXQgdGFyZ2V0X25zID0gbmFtZXNwYWNlLm1hcF9wcmVmaXgoJnBh cmFtcy5zb3VyY2UubnMsICZwYXJhbXMudGFyZ2V0Lm5zKT87Cj4+ICsgICAgbGV0IHRhcmdldF9u cyA9IHBhcmFtcy5tYXBfbmFtZXNwYWNlKG5hbWVzcGFjZSk/Owo+IAo+IHdvdWxkIGl0IG1ha2Ug c2Vuc2UgdG8gbWFrZSB0aGlzIGxlc3MgdmVyYm9zZSAqYW5kIG1vcmUgcmVhZGFibGUqIGJ5Cj4g aW1wbGVtZW50aW5nIGEgYG1hcF9uYW1lc3BhY2VgIG9uIHBhcmFtcz8gNyBjYWxsIHNpdGVzIDsp CgpZZXMsIHRoYXQgbWFrZXMgaXQgaW5kZWVkIG1vcmUgcmVhZGFibGUuIEkgaG93ZXZlciBkZWNp ZGVkIHRvIGNhbGwgaXQgCmBtYXBfdG9fdGFyZ2V0YCwgYWxzbyBsZWF2aW5nIHRoZSBvcHRpb24g dG8gbWFrZSB0aGlzIGdlbmVyaWMgb3ZlciBhIAooY3VycmVudGx5IG5vdCByZXF1aXJlZCkgdHlw ZSwgaWYgZXZlciBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KCj4gCj4+ICsgICAgbGV0IGFyZ3MgPSBz ZXJkZV9qc29uOjpqc29uISh7Cj4+ICsgICAgICAgICJucyI6IHRhcmdldF9ucy5uYW1lKCksCj4+ ICsgICAgICAgICJkZWxldGUtZ3JvdXBzIjogdHJ1ZSwKPj4gKyAgICB9KTsKPj4gKwo+PiArICAg IHBhcmFtcy50YXJnZXQuY2xpZW50LmRlbGV0ZSgmYXBpX3BhdGgsIFNvbWUoYXJncykpLmF3YWl0 PzsKPj4gKwo+PiArICAgIE9rKCgpKQo+PiArfQo+PiArCj4+ICsvLyBGZXRjaCB0aGUgbGlzdCBv ZiBncm91cHMgZm91bmQgb24gdGFyZ2V0IGluIGdpdmVuIG5hbWVzcGFjZQo+PiArYXN5bmMgZm4g ZmV0Y2hfdGFyZ2V0X2dyb3VwcygKPj4gKyAgICBwYXJhbXM6ICZQdXNoUGFyYW1ldGVycywKPj4g KyAgICBuYW1lc3BhY2U6ICZCYWNrdXBOYW1lc3BhY2UsCj4+ICspIC0+IFJlc3VsdDxWZWM8QmFj a3VwR3JvdXA+LCBFcnJvcj4gewo+PiArICAgIGxldCBhcGlfcGF0aCA9IGZvcm1hdCEoCj4+ICsg ICAgICAgICJhcGkyL2pzb24vYWRtaW4vZGF0YXN0b3JlL3tzdG9yZX0vZ3JvdXBzIiwKPj4gKyAg ICAgICAgc3RvcmUgPSBwYXJhbXMudGFyZ2V0LnJlcG8uc3RvcmUoKSwKPj4gKyAgICApOwo+PiAr Cj4+ICsgICAgbGV0IGFyZ3MgPSBpZiAhbmFtZXNwYWNlLmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAg IGxldCB0YXJnZXRfbnMgPSBuYW1lc3BhY2UubWFwX3ByZWZpeCgmcGFyYW1zLnNvdXJjZS5ucywg JnBhcmFtcy50YXJnZXQubnMpPzsKPj4gKyAgICAgICAgU29tZShzZXJkZV9qc29uOjpqc29uISh7 ICJucyI6IHRhcmdldF9ucy5uYW1lKCkgfSkpCj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAg Tm9uZQo+PiArICAgIH07Cj4+ICsKPj4gKyAgICBsZXQgbXV0IHJlc3VsdCA9IHBhcmFtcy50YXJn ZXQuY2xpZW50LmdldCgmYXBpX3BhdGgsIGFyZ3MpLmF3YWl0PzsKPj4gKyAgICBsZXQgZ3JvdXBz OiBWZWM8R3JvdXBMaXN0SXRlbT4gPSBzZXJkZV9qc29uOjpmcm9tX3ZhbHVlKHJlc3VsdFsiZGF0 YSJdLnRha2UoKSk/Owo+PiArICAgIGxldCBtdXQgZ3JvdXBzOiBWZWM8QmFja3VwR3JvdXA+ID0g Z3JvdXBzLmludG9faXRlcigpLm1hcCh8Z3JvdXB8IGdyb3VwLmJhY2t1cCkuY29sbGVjdCgpOwo+ PiArCj4+ICsgICAgZ3JvdXBzLnNvcnRfdW5zdGFibGVfYnkofGEsIGJ8IHsKPj4gKyAgICAgICAg bGV0IHR5cGVfb3JkZXIgPSBhLnR5LmNtcCgmYi50eSk7Cj4+ICsgICAgICAgIGlmIHR5cGVfb3Jk ZXIgPT0gT3JkZXJpbmc6OkVxdWFsIHsKPj4gKyAgICAgICAgICAgIGEuaWQuY21wKCZiLmlkKQo+ PiArICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgdHlwZV9vcmRlcgo+PiArICAgICAg ICB9Cj4+ICsgICAgfSk7Cj4+ICsKPj4gKyAgICBPayhncm91cHMpCj4+ICt9Cj4+ICsKPj4gKy8v IFJlbW92ZSB0aGUgcHJvdmlkZWQgYmFja3VwIGdyb3VwIGluIGdpdmVuIG5hbWVzcGFjZSBmcm9t IHRoZSB0YXJnZXQKPj4gK2FzeW5jIGZuIHJlbW92ZV90YXJnZXRfZ3JvdXAoCj4+ICsgICAgcGFy YW1zOiAmUHVzaFBhcmFtZXRlcnMsCj4+ICsgICAgbmFtZXNwYWNlOiAmQmFja3VwTmFtZXNwYWNl LAo+PiArICAgIGJhY2t1cF9ncm91cDogJkJhY2t1cEdyb3VwLAo+PiArKSAtPiBSZXN1bHQ8KCks IEVycm9yPiB7Cj4+ICsgICAgY2hlY2tfbnNfcmVtb3RlX2RhdGFzdG9yZV9wcml2cyhwYXJhbXMs IG5hbWVzcGFjZSwgUFJJVl9SRU1PVEVfREFUQVNUT1JFX1BSVU5FKQo+PiArICAgICAgICAubWFw X2Vycih8ZXJyfCBmb3JtYXRfZXJyISgiUHJ1bmluZyByZW1vdGUgZGF0YXN0b3JlIGNvbnRlbnRz IG5vdCBhbGxvd2VkIC0ge2Vycn0iKSk/Owo+PiArCj4+ICsgICAgbGV0IGFwaV9wYXRoID0gZm9y bWF0ISgKPj4gKyAgICAgICAgImFwaTIvanNvbi9hZG1pbi9kYXRhc3RvcmUve3N0b3JlfS9ncm91 cHMiLAo+PiArICAgICAgICBzdG9yZSA9IHBhcmFtcy50YXJnZXQucmVwby5zdG9yZSgpLAo+PiAr ICAgICk7Cj4+ICsKPj4gKyAgICBsZXQgbXV0IGFyZ3MgPSBzZXJkZV9qc29uOjpqc29uISh7Cj4+ ICsgICAgICAgICJiYWNrdXAtaWQiOiBiYWNrdXBfZ3JvdXAuaWQsCj4+ICsgICAgICAgICJiYWNr dXAtdHlwZSI6IGJhY2t1cF9ncm91cC50eSwKPj4gKyAgICB9KTsKPj4gKyAgICBpZiAhbmFtZXNw YWNlLmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAgIGxldCB0YXJnZXRfbnMgPSBuYW1lc3BhY2UubWFw X3ByZWZpeCgmcGFyYW1zLnNvdXJjZS5ucywgJnBhcmFtcy50YXJnZXQubnMpPzsKPj4gKyAgICAg ICAgYXJnc1sibnMiXSA9IHNlcmRlX2pzb246OnRvX3ZhbHVlKHRhcmdldF9ucy5uYW1lKCkpPzsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICBwYXJhbXMudGFyZ2V0LmNsaWVudC5kZWxldGUoJmFwaV9w YXRoLCBTb21lKGFyZ3MpKS5hd2FpdD87Cj4+ICsKPj4gKyAgICBPaygoKSkKPj4gK30KPj4gKwo+ PiArLy8gQ2hlY2sgaWYgdGhlIG5hbWVzcGFjZSBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHRh cmdldCwgY3JlYXRlIGl0IG90aGVyd2lzZQo+PiArYXN5bmMgZm4gY2hlY2tfb3JfY3JlYXRlX3Rh cmdldF9uYW1lc3BhY2UoCj4+ICsgICAgcGFyYW1zOiAmUHVzaFBhcmFtZXRlcnMsCj4+ICsgICAg dGFyZ2V0X25hbWVzcGFjZXM6ICZbQmFja3VwTmFtZXNwYWNlXSwKPj4gKyAgICBuYW1lc3BhY2U6 ICZCYWNrdXBOYW1lc3BhY2UsCj4+ICspIC0+IFJlc3VsdDxib29sLCBFcnJvcj4gewo+PiArICAg IGxldCBtdXQgY3JlYXRlZCA9IGZhbHNlOwo+PiArCj4+ICsgICAgaWYgIW5hbWVzcGFjZS5pc19y b290KCkgJiYgIXRhcmdldF9uYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWVzcGFjZSkgewo+PiArICAg ICAgICAvLyBOYW1lc3BhY2Ugbm90IHByZXNlbnQgb24gdGFyZ2V0LCBjcmVhdGUgbmFtZXNwYWNl Lgo+PiArICAgICAgICAvLyBTdWItbmFtZXNwYWNlcyBoYXZlIHRvIGJlIGNyZWF0ZWQgYnkgY3Jl YXRpbmcgcGFyZW50IGNvbXBvbmVudHMgZmlyc3QuCj4+ICsKPj4gKyAgICAgICAgY2hlY2tfbnNf cmVtb3RlX2RhdGFzdG9yZV9wcml2cygmcGFyYW1zLCBuYW1lc3BhY2UsIFBSSVZfUkVNT1RFX0RB VEFTVE9SRV9NT0RJRlkpCj4+ICsgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXRfZXJy ISgiQ3JlYXRpbmcgbmFtZXNwYWNlIG5vdCBhbGxvd2VkIC0ge2Vycn0iKSk/Owo+PiArCj4+ICsg ICAgICAgIGxldCBtdXQgcGFyZW50ID0gQmFja3VwTmFtZXNwYWNlOjpyb290KCk7Cj4+ICsgICAg ICAgIGZvciBuYW1lc3BhY2VfY29tcG9uZW50IGluIG5hbWVzcGFjZS5jb21wb25lbnRzKCkgewo+ PiArICAgICAgICAgICAgbGV0IG5hbWVzcGFjZSA9IEJhY2t1cE5hbWVzcGFjZTo6bmV3KG5hbWVz cGFjZV9jb21wb25lbnQpPzsKPj4gKyAgICAgICAgICAgIGxldCBhcGlfcGF0aCA9IGZvcm1hdCEo Cj4+ICsgICAgICAgICAgICAgICAgImFwaTIvanNvbi9hZG1pbi9kYXRhc3RvcmUve3N0b3JlfS9u YW1lc3BhY2UiLAo+PiArICAgICAgICAgICAgICAgIHN0b3JlID0gcGFyYW1zLnRhcmdldC5yZXBv LnN0b3JlKCksCj4+ICsgICAgICAgICAgICApOwo+PiArICAgICAgICAgICAgbGV0IG11dCBhcmdz ID0gc2VyZGVfanNvbjo6anNvbiEoeyAibmFtZSI6IG5hbWVzcGFjZS5uYW1lKCkgfSk7Cj4+ICsg ICAgICAgICAgICBpZiAhcGFyZW50LmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAgICAgICAgICAgYXJn c1sicGFyZW50Il0gPSBzZXJkZV9qc29uOjp0b192YWx1ZShwYXJlbnQuY2xvbmUoKSk/Owo+PiAr ICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgaWYgbGV0IEVycihlcnIpID0gcGFyYW1zLnRh cmdldC5jbGllbnQucG9zdCgmYXBpX3BhdGgsIFNvbWUoYXJncykpLmF3YWl0IHsKPj4gKyAgICAg ICAgICAgICAgICBsZXQgdGFyZ2V0X3N0b3JlX2FuZF9ucyA9Cj4+ICsgICAgICAgICAgICAgICAg ICAgIHByaW50X3N0b3JlX2FuZF9ucyhwYXJhbXMudGFyZ2V0LnJlcG8uc3RvcmUoKSwgJm5hbWVz cGFjZSk7Cj4+ICsgICAgICAgICAgICAgICAgYmFpbCEoInN5bmMgaW50byB7dGFyZ2V0X3N0b3Jl X2FuZF9uc30gZmFpbGVkIC0gbmFtZXNwYWNlIGNyZWF0aW9uIGZhaWxlZDoge2Vycn0iKTsKPj4g KyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIHBhcmVudC5wdXNoKG5hbWVzcGFjZS5uYW1l KCkpPzsKPiAKPiB0aGlzIHRyaWVzIHRvIGNyZWF0ZSBldmVyeSBwcmVmaXggb2YgdGhlIG1pc3Np bmcgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mCj4ganVzdCB0aGUgbWlzc2luZyBsb3dlciBlbmQgb2Yg dGhlIGhpZXJhcmNoeS4uIHdoaWNoIGlzIGN1cnJlbnRseSBmaW5lLAo+IHNpbmNlIHRoZSBjcmVh dGVfbmFtZXNwYWNlIEFQSSBlbmRwb2ludCBkb2Vzbid0IGZhaWwgaWYgdGhlIG5hbWVzcGFjZQo+ IGFscmVhZHkgZXhpc3RzLCBidXQgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgbGlzdCBvZiBleGlz dGluZyBuYW1lc3BhY2VzCj4gaGVyZSwgd2UgY291bGQgbWFrZSBpdCBtb3JlIGZ1dHVyZSBwcm9v ZiAoYW5kIGEgYml0IGZhc3RlciA7KSkgYnkKPiBza2lwcGluZyB0aG9zZS4uCgpBZGRlZCB0aGUg YWRkaXRpb25hbCBjaGVja3MgdG8gbm90IHBlcmZvcm0gdGhlIGFwaSBjYWxscyB0byBwcmUtZXhp c3RpbmcgCm5hbWVzcGFjZSBjb21wb25lbnRzIG9mIHRoZSB0YXJnZXQuCgo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgICAgY3JlYXRlZCA9IHRydWU7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAg T2soY3JlYXRlZCkKPj4gK30KPj4gKwo+PiArLy8vIFB1c2ggY29udGVudHMgb2Ygc291cmNlIGRh dGFzdG9yZSBtYXRjaGVkIGJ5IGdpdmVuIHB1c2ggcGFyYW1ldGVycyB0byB0YXJnZXQuCj4+ICtw dWIoY3JhdGUpIGFzeW5jIGZuIHB1c2hfc3RvcmUobXV0IHBhcmFtczogUHVzaFBhcmFtZXRlcnMp IC0+IFJlc3VsdDxTeW5jU3RhdHMsIEVycm9yPiB7Cj4+ICsgICAgbGV0IG11dCBlcnJvcnMgPSBm YWxzZTsKPj4gKwo+PiArICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2Ygc291cmNlIG5hbWVzcGFjZXMg dG8gcHVzaCB0byB0YXJnZXQsIGxpbWl0ZWQgYnkgbWF4LWRlcHRoCj4+ICsgICAgbGV0IG11dCBu YW1lc3BhY2VzID0gcGFyYW1zLnNvdXJjZS5saXN0X25hbWVzcGFjZXMoJm11dCBwYXJhbXMubWF4 X2RlcHRoKS5hd2FpdD87Cj4+ICsKPj4gKyAgICBjaGVja19uYW1lc3BhY2VfZGVwdGhfbGltaXQo JnBhcmFtcy5zb3VyY2UuZ2V0X25zKCksICZwYXJhbXMudGFyZ2V0Lm5zLCAmbmFtZXNwYWNlcyk/ Owo+PiArCj4+ICsgICAgbmFtZXNwYWNlcy5zb3J0X3Vuc3RhYmxlX2J5X2tleSh8YXwgYS5uYW1l X2xlbigpKTsKPj4gKwo+PiArICAgIC8vIEZldGNoIGFsbCBhY2Nlc3NpYmxlIG5hbWVzcGFjZXMg YWxyZWFkeSBwcmVzZW50IG9uIHRoZSB0YXJnZXQKPj4gKyAgICBsZXQgdGFyZ2V0X25hbWVzcGFj ZXMgPSBmZXRjaF90YXJnZXRfbmFtZXNwYWNlcygmcGFyYW1zKS5hd2FpdD87Cj4+ICsgICAgLy8g UmVtZW1iZXIgc3luY2VkIG5hbWVzcGFjZXMsIHJlbW92aW5nIG5vbi1zeW5jZWQgb25lcyB3aGVu IHJlbW92ZSB2YW5pc2hlZCBmbGFnIGlzIHNldAo+PiArICAgIGxldCBtdXQgc3luY2VkX25hbWVz cGFjZXMgPSBIYXNoU2V0Ojp3aXRoX2NhcGFjaXR5KG5hbWVzcGFjZXMubGVuKCkpOwo+PiArCj4+ ICsgICAgbGV0IChtdXQgZ3JvdXBzLCBtdXQgc25hcHNob3RzKSA9ICgwLCAwKTsKPj4gKyAgICBs ZXQgbXV0IHN0YXRzID0gU3luY1N0YXRzOjpkZWZhdWx0KCk7Cj4+ICsgICAgZm9yIG5hbWVzcGFj ZSBpbiBuYW1lc3BhY2VzIHsKPj4gKyAgICAgICAgbGV0IHNvdXJjZV9zdG9yZV9hbmRfbnMgPSBw cmludF9zdG9yZV9hbmRfbnMocGFyYW1zLnNvdXJjZS5zdG9yZS5uYW1lKCksICZuYW1lc3BhY2Up Owo+PiArICAgICAgICBsZXQgdGFyZ2V0X25hbWVzcGFjZSA9IG5hbWVzcGFjZS5tYXBfcHJlZml4 KCZwYXJhbXMuc291cmNlLm5zLCAmcGFyYW1zLnRhcmdldC5ucyk/Owo+PiArICAgICAgICBsZXQg dGFyZ2V0X3N0b3JlX2FuZF9ucyA9IHByaW50X3N0b3JlX2FuZF9ucyhwYXJhbXMudGFyZ2V0LnJl cG8uc3RvcmUoKSwgJnRhcmdldF9uYW1lc3BhY2UpOwo+PiArCj4+ICsgICAgICAgIGluZm8hKCIt LS0tIik7Cj4+ICsgICAgICAgIGluZm8hKCJTeW5jaW5nIHtzb3VyY2Vfc3RvcmVfYW5kX25zfSBp bnRvIHt0YXJnZXRfc3RvcmVfYW5kX25zfSIpOwo+PiArCj4+ICsgICAgICAgIHN5bmNlZF9uYW1l c3BhY2VzLmluc2VydCh0YXJnZXRfbmFtZXNwYWNlLmNsb25lKCkpOwo+PiArCj4+ICsgICAgICAg IG1hdGNoIGNoZWNrX29yX2NyZWF0ZV90YXJnZXRfbmFtZXNwYWNlKCZwYXJhbXMsICZ0YXJnZXRf bmFtZXNwYWNlcywgJnRhcmdldF9uYW1lc3BhY2UpLmF3YWl0Cj4+ICsgICAgICAgIHsKPj4gKyAg ICAgICAgICAgIE9rKHRydWUpID0+IGluZm8hKCJDcmVhdGVkIG5hbWVzcGFjZSB7dGFyZ2V0X25h bWVzcGFjZX0iKSwKPj4gKyAgICAgICAgICAgIE9rKGZhbHNlKSA9PiB7fQo+PiArICAgICAgICAg ICAgRXJyKGVycikgPT4gewo+PiArICAgICAgICAgICAgICAgIGluZm8hKCJDYW5ub3Qgc3luYyB7 c291cmNlX3N0b3JlX2FuZF9uc30gaW50byB7dGFyZ2V0X3N0b3JlX2FuZF9uc30gLSB7ZXJyfSIp Owo+PiArICAgICAgICAgICAgICAgIGVycm9ycyA9IHRydWU7Cj4+ICsgICAgICAgICAgICAgICAg Y29udGludWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAg ICBtYXRjaCBwdXNoX25hbWVzcGFjZSgmbmFtZXNwYWNlLCAmcGFyYW1zKS5hd2FpdCB7Cj4+ICsg ICAgICAgICAgICBPaygoc3luY19wcm9ncmVzcywgc3luY19zdGF0cywgc3luY19lcnJvcnMpKSA9 PiB7Cj4+ICsgICAgICAgICAgICAgICAgZXJyb3JzIHw9IHN5bmNfZXJyb3JzOwo+PiArICAgICAg ICAgICAgICAgIHN0YXRzLmFkZChzeW5jX3N0YXRzKTsKPj4gKwo+PiArICAgICAgICAgICAgICAg IGlmIHBhcmFtcy5tYXhfZGVwdGggIT0gU29tZSgwKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAg IGdyb3VwcyArPSBzeW5jX3Byb2dyZXNzLmRvbmVfZ3JvdXBzOwo+PiArICAgICAgICAgICAgICAg ICAgICBzbmFwc2hvdHMgKz0gc3luY19wcm9ncmVzcy5kb25lX3NuYXBzaG90czsKPj4gKwo+PiAr ICAgICAgICAgICAgICAgICAgICBsZXQgbnMgPSBpZiBuYW1lc3BhY2UuaXNfcm9vdCgpIHsKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICJyb290IG5hbWVzcGFjZSIuaW50bygpCj4+ICsgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt YXQhKCJuYW1lc3BhY2Uge25hbWVzcGFjZX0iKQo+PiArICAgICAgICAgICAgICAgICAgICB9Owo+ PiArICAgICAgICAgICAgICAgICAgICBpbmZvISgKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICJGaW5pc2hlZCBzeW5jaW5nIHtuc30sIGN1cnJlbnQgcHJvZ3Jlc3M6IHtncm91cHN9IGdyb3Vw cywge3NuYXBzaG90c30gc25hcHNob3RzIgo+PiArICAgICAgICAgICAgICAgICAgICApOwo+PiAr ICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIEVycihl cnIpID0+IHsKPj4gKyAgICAgICAgICAgICAgICBlcnJvcnMgPSB0cnVlOwo+PiArICAgICAgICAg ICAgICAgIGluZm8hKCJFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgc3luY2luZyBuYW1lc3BhY2Ug e25hbWVzcGFjZX0gLSB7ZXJyfSIpOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgaWYgcGFyYW1zLnJlbW92ZV92YW5pc2hlZCB7Cj4+ICsgICAg ICAgIGZvciB0YXJnZXRfbmFtZXNwYWNlIGluIHRhcmdldF9uYW1lc3BhY2VzIHsKPj4gKyAgICAg ICAgICAgIGlmIHN5bmNlZF9uYW1lc3BhY2VzLmNvbnRhaW5zKCZ0YXJnZXRfbmFtZXNwYWNlKSB7 Cj4+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAg ICAgICAgICBpZiBsZXQgRXJyKGVycikgPSByZW1vdmVfdGFyZ2V0X25hbWVzcGFjZSgmcGFyYW1z LCAmdGFyZ2V0X25hbWVzcGFjZSkuYXdhaXQgewo+PiArICAgICAgICAgICAgICAgIGluZm8hKCJm YWlsZWQgdG8gcmVtb3ZlIHZhbmlzaGVkIG5hbWVzcGFjZSB7dGFyZ2V0X25hbWVzcGFjZX0gLSB7 ZXJyfSIpOwo+PiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAgICAgICAgICAgfQo+ PiArICAgICAgICAgICAgaW5mbyEoInJlbW92ZWQgdmFuaXNoZWQgbmFtZXNwYWNlIHt0YXJnZXRf bmFtZXNwYWNlfSIpOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgZXJy b3JzIHsKPj4gKyAgICAgICAgYmFpbCEoInN5bmMgZmFpbGVkIHdpdGggc29tZSBlcnJvcnMuIik7 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgT2soc3RhdHMpCj4+ICt9Cj4+ICsKPj4gKy8vLyBQdXNo IG5hbWVzcGFjZSBpbmNsdWRpbmcgYWxsIGJhY2t1cCBncm91cHMgdG8gdGFyZ2V0Cj4+ICsvLy8K Pj4gKy8vLyBJdGVyYXRlIG92ZXIgYWxsIGJhY2t1cCBncm91cHMgaW4gdGhlIG5hbWVzcGFjZSBh bmQgcHVzaCB0aGVtIHRvIHRoZSB0YXJnZXQuCj4+ICtwdWIoY3JhdGUpIGFzeW5jIGZuIHB1c2hf bmFtZXNwYWNlKAo+PiArICAgIG5hbWVzcGFjZTogJkJhY2t1cE5hbWVzcGFjZSwKPj4gKyAgICBw YXJhbXM6ICZQdXNoUGFyYW1ldGVycywKPj4gKykgLT4gUmVzdWx0PChTdG9yZVByb2dyZXNzLCBT eW5jU3RhdHMsIGJvb2wpLCBFcnJvcj4gewo+PiArICAgIC8vIENoZWNrIGlmIHVzZXIgaXMgYWxs b3dlZCB0byBwZXJmb3JtIGJhY2t1cHMgb24gcmVtb3RlIGRhdGFzdG9yZQo+PiArICAgIGNoZWNr X25zX3JlbW90ZV9kYXRhc3RvcmVfcHJpdnMocGFyYW1zLCBuYW1lc3BhY2UsIFBSSVZfUkVNT1RF X0RBVEFTVE9SRV9CQUNLVVApCj4+ICsgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdF9lcnIh KCJQdXNoaW5nIHRvIHJlbW90ZSBub3QgYWxsb3dlZCAtIHtlcnJ9IikpPzsKPj4gKwo+PiArICAg IGxldCBtdXQgbGlzdDogVmVjPEJhY2t1cEdyb3VwPiA9IHBhcmFtcwo+PiArICAgICAgICAuc291 cmNlCj4+ICsgICAgICAgIC5saXN0X2dyb3VwcyhuYW1lc3BhY2UsICZwYXJhbXMubG9jYWxfdXNl cikKPj4gKyAgICAgICAgLmF3YWl0PzsKPj4gKwo+PiArICAgIGxpc3Quc29ydF91bnN0YWJsZV9i eSh8YSwgYnwgewo+PiArICAgICAgICBsZXQgdHlwZV9vcmRlciA9IGEudHkuY21wKCZiLnR5KTsK Pj4gKyAgICAgICAgaWYgdHlwZV9vcmRlciA9PSBPcmRlcmluZzo6RXF1YWwgewo+PiArICAgICAg ICAgICAgYS5pZC5jbXAoJmIuaWQpCj4+ICsgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAg ICB0eXBlX29yZGVyCj4+ICsgICAgICAgIH0KPj4gKyAgICB9KTsKPj4gKwo+PiArICAgIGxldCB0 b3RhbCA9IGxpc3QubGVuKCk7Cj4+ICsgICAgbGV0IGxpc3Q6IFZlYzxCYWNrdXBHcm91cD4gPSBs aXN0Cj4+ICsgICAgICAgIC5pbnRvX2l0ZXIoKQo+PiArICAgICAgICAuZmlsdGVyKHxncm91cHwg Z3JvdXAuYXBwbHlfZmlsdGVycygmcGFyYW1zLmdyb3VwX2ZpbHRlcikpCj4+ICsgICAgICAgIC5j b2xsZWN0KCk7Cj4+ICsKPj4gKyAgICBpbmZvISgKPj4gKyAgICAgICAgImZvdW5kIHtmaWx0ZXJl ZH0gZ3JvdXBzIHRvIHN5bmMgKG91dCBvZiB7dG90YWx9IHRvdGFsKSIsCj4+ICsgICAgICAgIGZp bHRlcmVkID0gbGlzdC5sZW4oKQo+PiArICAgICk7Cj4+ICsKPj4gKyAgICBsZXQgdGFyZ2V0X2dy b3VwcyA9IGlmIHBhcmFtcy5yZW1vdmVfdmFuaXNoZWQgewo+PiArICAgICAgICBmZXRjaF90YXJn ZXRfZ3JvdXBzKHBhcmFtcywgbmFtZXNwYWNlKS5hd2FpdD8KPj4gKyAgICB9IGVsc2Ugewo+PiAr ICAgICAgICAvLyBhdm9pZCBmZXRjaGluZyBvZiBncm91cHMsIG5vdCByZXF1aXJlZCBpZiByZW1v dmUgdmFuaXNoZWQgbm90IHNldAo+PiArICAgICAgICBWZWM6Om5ldygpCj4+ICsgICAgfTsKPiAK PiBzaG91bGQgd2UgdGhlbiBmZXRjaCB0aGVtIGJlbG93IGluIHRoZSBpZiByZW1vdmVfdmFuaXNo ZWQgYnJhbmNoLCBsaWtlCj4gd2UgZG8gd2hlbiBoYW5kbGluZyBzbmFwc2hvdHM/CgpZZXMsIEkg ZG8gbm90IHJlY2FsbCB3aHkgZXhhY3RseSBJIGRpZCBmZXRjaCB0aGUgZ3JvdXBzIGFscmVhZHkg aGVyZSwgCm1pZ2h0IGJlIGEgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIGl0ZXJhdGlvbiBkdXJp bmcgaW1wbGVtZW50YXRpb24uCgpBcyB0aGlzIGlzIG5ldmVyIHVzZWQgb3RoZXIgdGhhbiBmb3Ig dGhlIHJlbW92ZSB2YW5pc2hlZCBjYXNlLCBtb3ZlZCB0aGUgCmNhbGwgdGhlcmUuCgo+PiArCj4+ ICsgICAgbGV0IG11dCBlcnJvcnMgPSBmYWxzZTsKPj4gKyAgICAvLyBSZW1lbWJlciBzeW5jZWQg Z3JvdXBzLCByZW1vdmUgb3RoZXJzIHdoZW4gdGhlIHJlbW92ZSB2YW5pc2hlZCBmbGFnIGlzIHNl dAo+PiArICAgIGxldCBtdXQgc3luY2VkX2dyb3VwcyA9IEhhc2hTZXQ6Om5ldygpOwo+PiArICAg IGxldCBtdXQgcHJvZ3Jlc3MgPSBTdG9yZVByb2dyZXNzOjpuZXcobGlzdC5sZW4oKSBhcyB1NjQp Owo+PiArICAgIGxldCBtdXQgc3RhdHMgPSBTeW5jU3RhdHM6OmRlZmF1bHQoKTsKPj4gKwo+PiAr ICAgIGZvciAoZG9uZSwgZ3JvdXApIGluIGxpc3QuaW50b19pdGVyKCkuZW51bWVyYXRlKCkgewo+ PiArICAgICAgICBwcm9ncmVzcy5kb25lX2dyb3VwcyA9IGRvbmUgYXMgdTY0Owo+PiArICAgICAg ICBwcm9ncmVzcy5kb25lX3NuYXBzaG90cyA9IDA7Cj4+ICsgICAgICAgIHByb2dyZXNzLmdyb3Vw X3NuYXBzaG90cyA9IDA7Cj4+ICsgICAgICAgIHN5bmNlZF9ncm91cHMuaW5zZXJ0KGdyb3VwLmNs b25lKCkpOwo+PiArCj4+ICsgICAgICAgIG1hdGNoIHB1c2hfZ3JvdXAocGFyYW1zLCBuYW1lc3Bh Y2UsICZncm91cCwgJm11dCBwcm9ncmVzcykuYXdhaXQgewo+PiArICAgICAgICAgICAgT2soc3lu Y19zdGF0cykgPT4gc3RhdHMuYWRkKHN5bmNfc3RhdHMpLAo+PiArICAgICAgICAgICAgRXJyKGVy cikgPT4gewo+PiArICAgICAgICAgICAgICAgIGluZm8hKCJzeW5jIGdyb3VwICd7Z3JvdXB9JyBm YWlsZWQgIC0ge2Vycn0iKTsKPj4gKyAgICAgICAgICAgICAgICBlcnJvcnMgPSB0cnVlOwo+PiAr ICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgcGFy YW1zLnJlbW92ZV92YW5pc2hlZCB7Cj4+ICsgICAgICAgIGZvciB0YXJnZXRfZ3JvdXAgaW4gdGFy Z2V0X2dyb3VwcyB7Cj4+ICsgICAgICAgICAgICBpZiBzeW5jZWRfZ3JvdXBzLmNvbnRhaW5zKCZ0 YXJnZXRfZ3JvdXApIHsKPj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAg ICAgIH0KPj4gKyAgICAgICAgICAgIGlmICF0YXJnZXRfZ3JvdXAuYXBwbHlfZmlsdGVycygmcGFy YW1zLmdyb3VwX2ZpbHRlcikgewo+PiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiArICAg ICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAgICBpbmZvISgiZGVsZXRlIHZhbmlzaGVkIGdy b3VwICd7dGFyZ2V0X2dyb3VwfSciKTsKPj4gKwo+PiArICAgICAgICAgICAgbGV0IGNvdW50X2Jl Zm9yZSA9IG1hdGNoIGZldGNoX3RhcmdldF9ncm91cHMocGFyYW1zLCBuYW1lc3BhY2UpLmF3YWl0 IHsKPj4gKyAgICAgICAgICAgICAgICBPayhzbmFwc2hvdHMpID0+IHNuYXBzaG90cy5sZW4oKSwK Pj4gKyAgICAgICAgICAgICAgICBFcnIoX2VycikgPT4gMCwgLy8gaWdub3JlIGVycm9ycwo+PiAr ICAgICAgICAgICAgfTsKPj4gKwo+PiArICAgICAgICAgICAgaWYgbGV0IEVycihlcnIpID0gcmVt b3ZlX3RhcmdldF9ncm91cChwYXJhbXMsIG5hbWVzcGFjZSwgJnRhcmdldF9ncm91cCkuYXdhaXQg ewo+PiArICAgICAgICAgICAgICAgIGluZm8hKCJ7ZXJyfSIpOwo+PiArICAgICAgICAgICAgICAg IGVycm9ycyA9IHRydWU7Cj4+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgIGxldCBtdXQgY291bnRfYWZ0ZXIgPSBtYXRjaCBm ZXRjaF90YXJnZXRfZ3JvdXBzKHBhcmFtcywgbmFtZXNwYWNlKS5hd2FpdCB7Cj4+ICsgICAgICAg ICAgICAgICAgT2soc25hcHNob3RzKSA9PiBzbmFwc2hvdHMubGVuKCksCj4+ICsgICAgICAgICAg ICAgICAgRXJyKF9lcnIpID0+IDAsIC8vIGlnbm9yZSBlcnJvcnMKPj4gKyAgICAgICAgICAgIH07 Cj4+ICsKPj4gKyAgICAgICAgICAgIGxldCBkZWxldGVkX2dyb3VwcyA9IGlmIGNvdW50X2FmdGVy ID4gMCB7Cj4+ICsgICAgICAgICAgICAgICAgaW5mbyEoImtlcHQgc29tZSBwcm90ZWN0ZWQgc25h cHNob3RzIG9mIGdyb3VwICd7dGFyZ2V0X2dyb3VwfSciKTsKPj4gKyAgICAgICAgICAgICAgICAw Cj4+ICsgICAgICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgIDEKPj4gKyAgICAg ICAgICAgIH07Cj4+ICsKPj4gKyAgICAgICAgICAgIGlmIGNvdW50X2FmdGVyID4gY291bnRfYmVm b3JlIHsKPj4gKyAgICAgICAgICAgICAgICBjb3VudF9hZnRlciA9IGNvdW50X2JlZm9yZTsKPj4g KyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgICAgc3RhdHMuYWRkKFN5bmNTdGF0czo6 ZnJvbShSZW1vdmVkVmFuaXNoZWRTdGF0cyB7Cj4+ICsgICAgICAgICAgICAgICAgc25hcHNob3Rz OiBjb3VudF9iZWZvcmUgLSBjb3VudF9hZnRlciwKPj4gKyAgICAgICAgICAgICAgICBncm91cHM6 IGRlbGV0ZWRfZ3JvdXBzLAo+PiArICAgICAgICAgICAgICAgIG5hbWVzcGFjZXM6IDAsCj4+ICsg ICAgICAgICAgICB9KSk7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBPaygo cHJvZ3Jlc3MsIHN0YXRzLCBlcnJvcnMpKQo+PiArfQo+PiArCj4+ICthc3luYyBmbiBmZXRjaF90 YXJnZXRfc25hcHNob3RzKAo+PiArICAgIHBhcmFtczogJlB1c2hQYXJhbWV0ZXJzLAo+PiArICAg IG5hbWVzcGFjZTogJkJhY2t1cE5hbWVzcGFjZSwKPj4gKyAgICBncm91cDogJkJhY2t1cEdyb3Vw LAo+PiArKSAtPiBSZXN1bHQ8VmVjPFNuYXBzaG90TGlzdEl0ZW0+LCBFcnJvcj4gewo+PiArICAg IGxldCBhcGlfcGF0aCA9IGZvcm1hdCEoCj4+ICsgICAgICAgICJhcGkyL2pzb24vYWRtaW4vZGF0 YXN0b3JlL3tzdG9yZX0vc25hcHNob3RzIiwKPj4gKyAgICAgICAgc3RvcmUgPSBwYXJhbXMudGFy Z2V0LnJlcG8uc3RvcmUoKSwKPj4gKyAgICApOwo+PiArICAgIGxldCBtdXQgYXJncyA9IHNlcmRl X2pzb246OnRvX3ZhbHVlKGdyb3VwKT87Cj4+ICsgICAgaWYgIW5hbWVzcGFjZS5pc19yb290KCkg ewo+PiArICAgICAgICBsZXQgdGFyZ2V0X25zID0gbmFtZXNwYWNlLm1hcF9wcmVmaXgoJnBhcmFt cy5zb3VyY2UubnMsICZwYXJhbXMudGFyZ2V0Lm5zKT87Cj4+ICsgICAgICAgIGFyZ3NbIm5zIl0g PSBzZXJkZV9qc29uOjp0b192YWx1ZSh0YXJnZXRfbnMpPzsKPj4gKyAgICB9Cj4+ICsgICAgbGV0 IG11dCByZXN1bHQgPSBwYXJhbXMudGFyZ2V0LmNsaWVudC5nZXQoJmFwaV9wYXRoLCBTb21lKGFy Z3MpKS5hd2FpdD87Cj4+ICsgICAgbGV0IHNuYXBzaG90czogVmVjPFNuYXBzaG90TGlzdEl0ZW0+ ID0gc2VyZGVfanNvbjo6ZnJvbV92YWx1ZShyZXN1bHRbImRhdGEiXS50YWtlKCkpPzsKPj4gKwo+ PiArICAgIE9rKHNuYXBzaG90cykKPj4gK30KPj4gKwo+PiArYXN5bmMgZm4gZmV0Y2hfcHJldmlv dXNfYmFja3VwX3RpbWUoCj4+ICsgICAgcGFyYW1zOiAmUHVzaFBhcmFtZXRlcnMsCj4+ICsgICAg bmFtZXNwYWNlOiAmQmFja3VwTmFtZXNwYWNlLAo+PiArICAgIGdyb3VwOiAmQmFja3VwR3JvdXAs Cj4+ICspIC0+IFJlc3VsdDxPcHRpb248aTY0PiwgRXJyb3I+IHsKPj4gKyAgICBsZXQgbXV0IHNu YXBzaG90cyA9IGZldGNoX3RhcmdldF9zbmFwc2hvdHMocGFyYW1zLCBuYW1lc3BhY2UsIGdyb3Vw KS5hd2FpdD87Cj4+ICsgICAgc25hcHNob3RzLnNvcnRfdW5zdGFibGVfYnkofGEsIGJ8IGEuYmFj a3VwLnRpbWUuY21wKCZiLmJhY2t1cC50aW1lKSk7Cj4+ICsgICAgT2soc25hcHNob3RzLmxhc3Qo KS5tYXAofHNuYXBzaG90fCBzbmFwc2hvdC5iYWNrdXAudGltZSkpCj4+ICt9Cj4+ICsKPj4gK2Fz eW5jIGZuIGZvcmdldF90YXJnZXRfc25hcHNob3QoCj4+ICsgICAgcGFyYW1zOiAmUHVzaFBhcmFt ZXRlcnMsCj4+ICsgICAgbmFtZXNwYWNlOiAmQmFja3VwTmFtZXNwYWNlLAo+PiArICAgIHNuYXBz aG90OiAmQmFja3VwRGlyLAo+PiArKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4+ICsgICAgY2hl Y2tfbnNfcmVtb3RlX2RhdGFzdG9yZV9wcml2cyhwYXJhbXMsIG5hbWVzcGFjZSwgUFJJVl9SRU1P VEVfREFUQVNUT1JFX1BSVU5FKQo+PiArICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXRfZXJy ISgiUHJ1bmluZyByZW1vdGUgZGF0YXN0b3JlIGNvbnRlbnRzIG5vdCBhbGxvd2VkIC0ge2Vycn0i KSk/Owo+PiArCj4+ICsgICAgbGV0IGFwaV9wYXRoID0gZm9ybWF0ISgKPj4gKyAgICAgICAgImFw aTIvanNvbi9hZG1pbi9kYXRhc3RvcmUve3N0b3JlfS9zbmFwc2hvdHMiLAo+PiArICAgICAgICBz dG9yZSA9IHBhcmFtcy50YXJnZXQucmVwby5zdG9yZSgpLAo+PiArICAgICk7Cj4+ICsgICAgbGV0 IG11dCBhcmdzID0gc2VyZGVfanNvbjo6dG9fdmFsdWUoc25hcHNob3QpPzsKPj4gKyAgICBpZiAh bmFtZXNwYWNlLmlzX3Jvb3QoKSB7Cj4+ICsgICAgICAgIGxldCB0YXJnZXRfbnMgPSBuYW1lc3Bh Y2UubWFwX3ByZWZpeCgmcGFyYW1zLnNvdXJjZS5ucywgJnBhcmFtcy50YXJnZXQubnMpPzsKPj4g KyAgICAgICAgYXJnc1sibnMiXSA9IHNlcmRlX2pzb246OnRvX3ZhbHVlKHRhcmdldF9ucyk/Owo+ PiArICAgIH0KPj4gKyAgICBwYXJhbXMudGFyZ2V0LmNsaWVudC5kZWxldGUoJmFwaV9wYXRoLCBT b21lKGFyZ3MpKS5hd2FpdD87Cj4+ICsKPj4gKyAgICBPaygoKSkKPj4gK30KPj4gKwo+PiArLy8v IFB1c2ggZ3JvdXAgaW5jbHVkaW5nIGFsbCBzbmFwaHNob3RzIHRvIHRhcmdldAo+PiArLy8vCj4+ ICsvLy8gSXRlcmF0ZSBvdmVyIGFsbCBzbmFwc2hvdHMgaW4gdGhlIGdyb3VwIGFuZCBwdXNoIHRo ZW0gdG8gdGhlIHRhcmdldC4KPj4gKy8vLyBUaGUgZ3JvdXAgc3luYyBvcGVyYXRpb24gY29uc2lz dHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczoKPj4gKy8vLyAtIFF1ZXJ5IHNuYXBzaG90cyBvZiBn aXZlbiBncm91cCBmcm9tIHRoZSBzb3VyY2UKPj4gKy8vLyAtIFNvcnQgc25hcHNob3RzIGJ5IHRp bWUKPj4gKy8vLyAtIEFwcGx5IHRyYW5zZmVyIGxhc3QgY3V0b2ZmIGFuZCBmaWx0ZXJzIHRvIGxp c3QKPj4gKy8vLyAtIEl0ZXJhdGUgdGhlIHNuYXBzaG90IGxpc3QgYW5kIHB1c2ggZWFjaCBzbmFw c2hvdCBpbmRpdmlkdWFsbHkKPj4gKy8vLyAtIChPcHRpb25hbCk6IFJlbW92ZSB2YW5pc2hlZCBn cm91cHMgaWYgYHJlbW92ZV92YW5pc2hlZGAgZmxhZyBpcyBzZXQKPj4gK3B1YihjcmF0ZSkgYXN5 bmMgZm4gcHVzaF9ncm91cCgKPj4gKyAgICBwYXJhbXM6ICZQdXNoUGFyYW1ldGVycywKPj4gKyAg ICBuYW1lc3BhY2U6ICZCYWNrdXBOYW1lc3BhY2UsCj4+ICsgICAgZ3JvdXA6ICZCYWNrdXBHcm91 cCwKPj4gKyAgICBwcm9ncmVzczogJm11dCBTdG9yZVByb2dyZXNzLAo+PiArKSAtPiBSZXN1bHQ8 U3luY1N0YXRzLCBFcnJvcj4gewo+PiArICAgIGxldCBtdXQgYWxyZWFkeV9zeW5jZWRfc2tpcF9p bmZvID0gU2tpcEluZm86Om5ldyhTa2lwUmVhc29uOjpBbHJlYWR5U3luY2VkKTsKPj4gKyAgICBs ZXQgbXV0IHRyYW5zZmVyX2xhc3Rfc2tpcF9pbmZvID0gU2tpcEluZm86Om5ldyhTa2lwUmVhc29u OjpUcmFuc2Zlckxhc3QpOwo+PiArCj4+ICsgICAgbGV0IG11dCBzbmFwc2hvdHM6IFZlYzxCYWNr dXBEaXI+ID0gcGFyYW1zLnNvdXJjZS5saXN0X2JhY2t1cF9kaXJzKG5hbWVzcGFjZSwgZ3JvdXAp LmF3YWl0PzsKPj4gKyAgICBzbmFwc2hvdHMuc29ydF91bnN0YWJsZV9ieSh8YSwgYnwgYS50aW1l LmNtcCgmYi50aW1lKSk7Cj4+ICsKPj4gKyAgICBsZXQgdG90YWxfc25hcHNob3RzID0gc25hcHNo b3RzLmxlbigpOwo+PiArICAgIGxldCBjdXRvZmYgPSBwYXJhbXMKPj4gKyAgICAgICAgLnRyYW5z ZmVyX2xhc3QKPj4gKyAgICAgICAgLm1hcCh8Y291bnR8IHRvdGFsX3NuYXBzaG90cy5zYXR1cmF0 aW5nX3N1Yihjb3VudCkpCj4+ICsgICAgICAgIC51bndyYXBfb3JfZGVmYXVsdCgpOwo+PiArCj4+ ICsgICAgbGV0IGxhc3Rfc25hcHNob3RfdGltZSA9IGZldGNoX3ByZXZpb3VzX2JhY2t1cF90aW1l KHBhcmFtcywgbmFtZXNwYWNlLCBncm91cCkKPj4gKyAgICAgICAgLmF3YWl0Pwo+PiArICAgICAg ICAudW53cmFwX29yKGk2NDo6TUlOKTsKPj4gKwo+PiArICAgIGxldCBtdXQgc291cmNlX3NuYXBz aG90cyA9IEhhc2hTZXQ6Om5ldygpOwo+PiArICAgIGxldCBzbmFwc2hvdHM6IFZlYzxCYWNrdXBE aXI+ID0gc25hcHNob3RzCj4+ICsgICAgICAgIC5pbnRvX2l0ZXIoKQo+PiArICAgICAgICAuZW51 bWVyYXRlKCkKPj4gKyAgICAgICAgLmZpbHRlcih8Jihwb3MsIHJlZiBzbmFwc2hvdCl8IHsKPj4g KyAgICAgICAgICAgIHNvdXJjZV9zbmFwc2hvdHMuaW5zZXJ0KHNuYXBzaG90LnRpbWUpOwo+PiAr ICAgICAgICAgICAgaWYgbGFzdF9zbmFwc2hvdF90aW1lID4gc25hcHNob3QudGltZSB7Cj4+ICsg ICAgICAgICAgICAgICAgYWxyZWFkeV9zeW5jZWRfc2tpcF9pbmZvLnVwZGF0ZShzbmFwc2hvdC50 aW1lKTsKPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4+ICsgICAgICAgICAgICB9 IGVsc2UgaWYgYWxyZWFkeV9zeW5jZWRfc2tpcF9pbmZvLmNvdW50ID4gMCB7Cj4+ICsgICAgICAg ICAgICAgICAgaW5mbyEoInthbHJlYWR5X3N5bmNlZF9za2lwX2luZm99Iik7Cj4+ICsgICAgICAg ICAgICAgICAgYWxyZWFkeV9zeW5jZWRfc2tpcF9pbmZvLnJlc2V0KCk7Cj4+ICsgICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAg IGlmIHBvcyA8IGN1dG9mZiAmJiBsYXN0X3NuYXBzaG90X3RpbWUgIT0gc25hcHNob3QudGltZSB7 Cj4+ICsgICAgICAgICAgICAgICAgdHJhbnNmZXJfbGFzdF9za2lwX2luZm8udXBkYXRlKHNuYXBz aG90LnRpbWUpOwo+PiArICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4gKyAgICAgICAg ICAgIH0gZWxzZSBpZiB0cmFuc2Zlcl9sYXN0X3NraXBfaW5mby5jb3VudCA+IDAgewo+PiArICAg ICAgICAgICAgICAgIGluZm8hKCJ7dHJhbnNmZXJfbGFzdF9za2lwX2luZm99Iik7Cj4+ICsgICAg ICAgICAgICAgICAgdHJhbnNmZXJfbGFzdF9za2lwX2luZm8ucmVzZXQoKTsKPj4gKyAgICAgICAg ICAgIH0KPj4gKyAgICAgICAgICAgIHRydWUKPj4gKyAgICAgICAgfSkKPj4gKyAgICAgICAgLm1h cCh8KF8sIGRpcil8IGRpcikKPj4gKyAgICAgICAgLmNvbGxlY3QoKTsKPj4gKwo+PiArICAgIHBy b2dyZXNzLmdyb3VwX3NuYXBzaG90cyA9IHNuYXBzaG90cy5sZW4oKSBhcyB1NjQ7Cj4+ICsKPj4g KyAgICBsZXQgdGFyZ2V0X3NuYXBzaG90cyA9IGZldGNoX3RhcmdldF9zbmFwc2hvdHMocGFyYW1z LCBuYW1lc3BhY2UsIGdyb3VwKS5hd2FpdD87Cj4+ICsgICAgbGV0IHRhcmdldF9zbmFwc2hvdHM6 IFZlYzxCYWNrdXBEaXI+ID0gdGFyZ2V0X3NuYXBzaG90cwo+PiArICAgICAgICAuaW50b19pdGVy KCkKPj4gKyAgICAgICAgLm1hcCh8c25hcHNob3R8IHNuYXBzaG90LmJhY2t1cCkKPj4gKyAgICAg ICAgLmNvbGxlY3QoKTsKPj4gKwo+PiArICAgIGxldCBtdXQgc3RhdHMgPSBTeW5jU3RhdHM6OmRl ZmF1bHQoKTsKPj4gKyAgICBmb3IgKHBvcywgc291cmNlX3NuYXBzaG90KSBpbiBzbmFwc2hvdHMu aW50b19pdGVyKCkuZW51bWVyYXRlKCkgewo+PiArICAgICAgICBpZiB0YXJnZXRfc25hcHNob3Rz LmNvbnRhaW5zKCZzb3VyY2Vfc25hcHNob3QpIHsKPj4gKyAgICAgICAgICAgIHByb2dyZXNzLmRv bmVfc25hcHNob3RzID0gcG9zIGFzIHU2NCArIDE7Cj4+ICsgICAgICAgICAgICBpbmZvISgicGVy Y2VudGFnZSBkb25lOiB7cHJvZ3Jlc3N9Iik7Cj4+ICsgICAgICAgICAgICBjb250aW51ZTsKPj4g KyAgICAgICAgfQo+PiArICAgICAgICBsZXQgcmVzdWx0ID0gcHVzaF9zbmFwc2hvdChwYXJhbXMs IG5hbWVzcGFjZSwgJnNvdXJjZV9zbmFwc2hvdCkuYXdhaXQ7Cj4+ICsKPj4gKyAgICAgICAgcHJv Z3Jlc3MuZG9uZV9zbmFwc2hvdHMgPSBwb3MgYXMgdTY0ICsgMTsKPj4gKyAgICAgICAgaW5mbyEo InBlcmNlbnRhZ2UgZG9uZToge3Byb2dyZXNzfSIpOwo+PiArCj4+ICsgICAgICAgIC8vIHN0b3Ag b24gZXJyb3IKPj4gKyAgICAgICAgbGV0IHN5bmNfc3RhdHMgPSByZXN1bHQ/Owo+PiArICAgICAg ICBzdGF0cy5hZGQoc3luY19zdGF0cyk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgcGFyYW1z LnJlbW92ZV92YW5pc2hlZCB7Cj4+ICsgICAgICAgIGxldCB0YXJnZXRfc25hcHNob3RzID0gZmV0 Y2hfdGFyZ2V0X3NuYXBzaG90cyhwYXJhbXMsIG5hbWVzcGFjZSwgZ3JvdXApLmF3YWl0PzsKPj4g KyAgICAgICAgZm9yIHNuYXBzaG90IGluIHRhcmdldF9zbmFwc2hvdHMgewo+PiArICAgICAgICAg ICAgaWYgc291cmNlX3NuYXBzaG90cy5jb250YWlucygmc25hcHNob3QuYmFja3VwLnRpbWUpIHsK Pj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAg ICAgICAgIGlmIHNuYXBzaG90LnByb3RlY3RlZCB7Cj4+ICsgICAgICAgICAgICAgICAgaW5mbyEo Cj4+ICsgICAgICAgICAgICAgICAgICAgICJkb24ndCBkZWxldGUgdmFuaXNoZWQgc25hcHNob3Qg e25hbWV9IChwcm90ZWN0ZWQpIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNuYXBz aG90LmJhY2t1cAo+PiArICAgICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgICAgICAgICAgY29u dGludWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBpZiBsZXQgRXJyKGVycikg PSBmb3JnZXRfdGFyZ2V0X3NuYXBzaG90KHBhcmFtcywgbmFtZXNwYWNlLCAmc25hcHNob3QuYmFj a3VwKS5hd2FpdCB7Cj4+ICsgICAgICAgICAgICAgICAgaW5mbyEoCj4+ICsgICAgICAgICAgICAg ICAgICAgICJjb3VsZCBub3QgZGVsZXRlIHZhbmlzaGVkIHNuYXBzaG90IHtuYW1lfSAtIHtlcnJ9 IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNuYXBzaG90LmJhY2t1cAo+PiArICAg ICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBpbmZvISgi ZGVsZXRlIHZhbmlzaGVkIHNuYXBzaG90IHtuYW1lfSIsIG5hbWUgPSBzbmFwc2hvdC5iYWNrdXAp Owo+PiArICAgICAgICAgICAgc3RhdHMuYWRkKFN5bmNTdGF0czo6ZnJvbShSZW1vdmVkVmFuaXNo ZWRTdGF0cyB7Cj4+ICsgICAgICAgICAgICAgICAgc25hcHNob3RzOiAxLAo+PiArICAgICAgICAg ICAgICAgIGdyb3VwczogMCwKPj4gKyAgICAgICAgICAgICAgICBuYW1lc3BhY2VzOiAwLAo+PiAr ICAgICAgICAgICAgfSkpOwo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgT2so c3RhdHMpCj4+ICt9Cj4+ICsKPj4gKy8vLyBQdXNoIHNuYXBzaG90IHRvIHRhcmdldAo+PiArLy8v Cj4+ICsvLy8gQ3JlYXRlcyBhIG5ldyBzbmFwc2hvdCBvbiB0aGUgdGFyZ2V0IGFuZCBwdXNoZXMg dGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBzbmFwc2hvdCB0byB0aGUKPj4gKy8vLyB0YXJnZXQg YnkgY3JlYXRpbmcgYSBuZXcgbWFuaWZlc3QgZmlsZSBhbmQgY29ubmVjdGluZyB0byB0aGUgcmVt b3RlIGFzIGJhY2t1cCB3cml0ZXIgY2xpZW50Lgo+PiArLy8vIENodW5rcyBhcmUgd3JpdHRlbiBi eSByZWNyZWF0aW5nIHRoZSBpbmRleCBieSB1cGxvYWRpbmcgdGhlIGNodW5rIHN0cmVhbSBhcyBy ZWFkIGZyb20gdGhlCj4+ICsvLy8gc291cmNlLiBEYXRhIGJsb2JzIGFyZSB1cGxvYWRlZCBhcyBz dWNoLgo+PiArcHViKGNyYXRlKSBhc3luYyBmbiBwdXNoX3NuYXBzaG90KAo+PiArICAgIHBhcmFt czogJlB1c2hQYXJhbWV0ZXJzLAo+PiArICAgIG5hbWVzcGFjZTogJkJhY2t1cE5hbWVzcGFjZSwK Pj4gKyAgICBzbmFwc2hvdDogJkJhY2t1cERpciwKPj4gKykgLT4gUmVzdWx0PFN5bmNTdGF0cywg RXJyb3I+IHsKPj4gKyAgICBsZXQgbXV0IHN0YXRzID0gU3luY1N0YXRzOjpkZWZhdWx0KCk7Cj4+ ICsgICAgbGV0IHRhcmdldF9ucyA9IG5hbWVzcGFjZS5tYXBfcHJlZml4KCZwYXJhbXMuc291cmNl Lm5zLCAmcGFyYW1zLnRhcmdldC5ucyk/Owo+PiArICAgIGxldCBiYWNrdXBfZGlyID0gcGFyYW1z Cj4+ICsgICAgICAgIC5zb3VyY2UKPj4gKyAgICAgICAgLnN0b3JlCj4+ICsgICAgICAgIC5iYWNr dXBfZGlyKHBhcmFtcy5zb3VyY2UubnMuY2xvbmUoKSwgc25hcHNob3QuY2xvbmUoKSk/Owo+PiAr Cj4+ICsgICAgbGV0IHJlYWRlciA9IHBhcmFtcy5zb3VyY2UucmVhZGVyKG5hbWVzcGFjZSwgc25h cHNob3QpLmF3YWl0PzsKPj4gKwo+PiArICAgIC8vIExvYWQgdGhlIHNvdXJjZSBtYW5pZmVzdCwg bmVlZGVkIHRvIGZpbmQgY3J5cHQgbW9kZSBmb3IgZmlsZXMKPj4gKyAgICBsZXQgbXV0IHRtcF9z b3VyY2VfbWFuaWZlc3RfcGF0aCA9IGJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+ICsgICAgdG1w X3NvdXJjZV9tYW5pZmVzdF9wYXRoLnB1c2goTUFOSUZFU1RfQkxPQl9OQU1FKTsKPj4gKyAgICB0 bXBfc291cmNlX21hbmlmZXN0X3BhdGguc2V0X2V4dGVuc2lvbigidG1wIik7Cj4+ICsgICAgbGV0 IHNvdXJjZV9tYW5pZmVzdCA9IGlmIGxldCBTb21lKG1hbmlmZXN0X2Jsb2IpID0gcmVhZGVyCj4+ ICsgICAgICAgIC5sb2FkX2ZpbGVfaW50byhNQU5JRkVTVF9CTE9CX05BTUUsICZ0bXBfc291cmNl X21hbmlmZXN0X3BhdGgpCj4+ICsgICAgICAgIC5hd2FpdD8KPj4gKyAgICB7Cj4+ICsgICAgICAg IEJhY2t1cE1hbmlmZXN0Ojp0cnlfZnJvbShtYW5pZmVzdF9ibG9iKT8KPiAKPiB3aHkgZG8gd2Ug Y29weSB0aGUgbWFuaWZlc3QgaW50byBhIC50bXAgZmlsZSBwYXRoIGhlcmUgaW5zdGVhZCBvZiBq dXN0Cj4gcmVhZGluZyBpdD8gYW5kIGlmIHdlIG5lZWQgdGhlIGNvcHksIHdobydzIGNsZWFuaW5n IGl0IHVwPwoKU3dpdGNoZWQgdGhpcyBvdmVyIHRvIHJlYWRpbmcgdGhlIG1hbmlmZXN0IGRpcmVj dGx5LCBhcyB5b3UgYXJlIHJpZ2h0IAphbmQgdGhlIHRlbXAgZmlsZSBpcyBub3QgcmVxdWlyZWQg YXQgYWxsLiBJIHdhcyBwcmltZWQgYnkgdGhlIHB1bGwgCmltcGxlbWVudGF0aW9uIHdoZXJlIGl0 IGlzIHJlcXVpcmVkIHNpbmNlIHJlYWQgZnJvbSB0aGUgcmVtb3RlLgpNYWtlcyB0aGlzIHBhcnQg d2F5IGNsZWFuZXIgYW5kIGNvbmNpc2UuCgo+IAo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAg IC8vIG5vIG1hbmlmZXN0IGluIHNuYXBzaG90LCBza2lwCj4+ICsgICAgICAgIHJldHVybiBPayhz dGF0cyk7Cj4+ICsgICAgfTsKPj4gKwo+PiArICAgIC8vIE1hbmlmZXN0IHRvIGJlIGNyZWF0ZWQg b24gdGFyZ2V0LCByZWZlcmVuY2luZyBhbGwgdGhlIHNvdXJjZSBhcmNoaXZlcyBhZnRlciB1cGxv YWQuCj4+ICsgICAgbGV0IG11dCBtYW5pZmVzdCA9IEJhY2t1cE1hbmlmZXN0OjpuZXcoc25hcHNo b3QuY2xvbmUoKSk7Cj4+ICsKPj4gKyAgICAvLyB3cml0ZXIgaW5zdGFuY2UgbG9ja3MgdGhlIHNu YXBzaG90IG9uIHRoZSByZW1vdGUgc2lkZQo+PiArICAgIGxldCBiYWNrdXBfd3JpdGVyID0gQmFj a3VwV3JpdGVyOjpzdGFydCgKPj4gKyAgICAgICAgJnBhcmFtcy50YXJnZXQuY2xpZW50LAo+PiAr ICAgICAgICBOb25lLAo+PiArICAgICAgICBwYXJhbXMudGFyZ2V0LnJlcG8uc3RvcmUoKSwKPj4g KyAgICAgICAgJnRhcmdldF9ucywKPj4gKyAgICAgICAgc25hcHNob3QsCj4+ICsgICAgICAgIGZh bHNlLAo+PiArICAgICAgICBmYWxzZSwKPj4gKyAgICApCj4+ICsgICAgLmF3YWl0PzsKPj4gKwo+ PiArICAgIC8vIFVzZSBtYW5pZmVzdCBvZiBwcmV2aW91cyBzbmFwc2hvdHMgaW4gZ3JvdXAgb24g dGFyZ2V0IGZvciBjaHVuayB1cGxvYWQgZGVkdXBsaWNhdGlvbgo+PiArICAgIGxldCBwcmV2aW91 c19tYW5pZmVzdCA9IG1hdGNoIGJhY2t1cF93cml0ZXIuZG93bmxvYWRfcHJldmlvdXNfbWFuaWZl c3QoKS5hd2FpdCB7Cj4+ICsgICAgICAgIE9rKG1hbmlmZXN0KSA9PiBTb21lKEFyYzo6bmV3KG1h bmlmZXN0KSksCj4+ICsgICAgICAgIEVycihlcnIpID0+IHsKPj4gKyAgICAgICAgICAgIGxvZzo6 aW5mbyEoIkNvdWxkIG5vdCBkb3dubG9hZCBwcmV2aW91cyBtYW5pZmVzdCAtIHtlcnJ9Iik7Cj4+ ICsgICAgICAgICAgICBOb25lCj4+ICsgICAgICAgIH0KPj4gKyAgICB9Owo+IAo+IHRoaXMgc2hv dWxkIG5vdCBiZSBhdHRlbXB0ZWQgZm9yIHRoZSBmaXJzdCBzbmFwc2hvdCBpbiBhIGdyb3VwLCBl bHNlIGl0Cj4gZG9lcyByZXF1ZXN0cyB3ZSBhbHJlYWR5IGtub3cgd2lsbCBmYWlsIGFuZCBzcGFt cyB0aGUgbG9nIGFzIGEgcmVzdWx0IGFzCj4gd2VsbC4uCgpBZ3JlZWQsIGFkZGVkIGEgY2hlY2sg dG8gbWFrZSBzdXJlIHRvIG9ubHkgdHJ5IHRvIGZldGNoIHRoZSBwcmV2aW91cyAKbWFuaWZlc3Qg aWYgdGhlcmUgYXJlIHNuYXBzaG90cyBwcmVzZW50IGZvciB0aGlzIGJhY2t1cCBncm91cCBvbiB0 aGUgdGFyZ2V0LgoKPj4gKwo+PiArICAgIGxldCB1cGxvYWRfb3B0aW9ucyA9IFVwbG9hZE9wdGlv bnMgewo+PiArICAgICAgICBjb21wcmVzczogdHJ1ZSwKPj4gKyAgICAgICAgZW5jcnlwdDogZmFs c2UsCj4gCj4gdGhpcyBtaWdodCB3YXJyYW50IGEgY29tbWVudCB3aHkgaXQncyBva2F5IHRvIGRv IHRoYXQgKEkgaG9wZSBpdCBpcz8gOykpCgpBY2ssIGFkZGVkIHNvbWUgZGV0YWlscyBvbiB3aHkg dG8gc2V0IHVwIHRoZSB1cGxvYWQgb3B0aW9ucyBhcyBpcy4gCkJhc2ljYWxseSB0aGlzIGlzIHBv c3NpYmxlLCBzaW5jZSB0aGUgYmFja3VwIHdyaXRlciBzdHJlYW0gY29kZSAKcGVyZm9ybWluZyBj b21wcmVzc2lvbiBhbmQgZW5jcnlwdGlvbiBpcyBieXBhc3NlZCBieSB1c2luZyB0aGUgCmB1cGxv YWRfaW5kZXhfY2h1bmtfaW5mb2AgbWV0aG9kLgpUaGVyZWZvcmUgZXZlbiBmb3IgZW5jcnlwdGVk IGFuZCBjb21wcmVzc2VkIGJhY2t1cHMsIHVwbG9hZGluZyBvZiB0aGUgCmNodW5rcyBhcyByZWFk IGZyb20gdGhlIHNvdXJjZSBpcyBwb3NzaWJsZS4gVGhlIHJlbGV2YW50IHBhcnRzIG5lZWQgdG8g CmJlIGluY2x1ZGVkIGluIHRoZSBtYW5pZmVzdCBob3dldmVyLCBzbyBpdCBpcyByZXN0b3JhYmxl LgoKQ29tcHJlc3Npb24gaXMgc2V0IHRvIHRydWUsIHNvIHRoYXQgdGhlIGJsb2IgdXBsb2FkIG9m IGUuZy4gdGhlIGJhY2t1cCAKbG9nIGZpbGUgKGlmIHByZXNlbnQpIHdpbGwgYmUgY29tcHJlc3Nl ZC4KCj4+ICsgICAgICAgIHByZXZpb3VzX21hbmlmZXN0LAo+PiArICAgICAgICAuLlVwbG9hZE9w dGlvbnM6OmRlZmF1bHQoKQo+PiArICAgIH07Cj4+ICsKPj4gKyAgICAvLyBBdm9pZCBkb3VibGUg dXBsb2FkIHBlbmFsdHkgYnkgcmVtZW1iZXJpbmcgYWxyZWFkeSBzZWVuIGNodW5rcwo+PiArICAg IGxldCBrbm93bl9jaHVua3MgPSBBcmM6Om5ldyhNdXRleDo6bmV3KEhhc2hTZXQ6OndpdGhfY2Fw YWNpdHkoMTAyNCAqIDEwMjQpKSk7Cj4+ICsKPj4gKyAgICBmb3IgZW50cnkgaW4gc291cmNlX21h bmlmZXN0LmZpbGVzKCkgewo+PiArICAgICAgICBsZXQgbXV0IHBhdGggPSBiYWNrdXBfZGlyLmZ1 bGxfcGF0aCgpOwo+PiArICAgICAgICBwYXRoLnB1c2goJmVudHJ5LmZpbGVuYW1lKTsKPj4gKyAg ICAgICAgaWYgcGF0aC50cnlfZXhpc3RzKCk/IHsKPj4gKyAgICAgICAgICAgIG1hdGNoIEFyY2hp dmVUeXBlOjpmcm9tX3BhdGgoJmVudHJ5LmZpbGVuYW1lKT8gewo+PiArICAgICAgICAgICAgICAg IEFyY2hpdmVUeXBlOjpCbG9iID0+IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGUg PSBzdGQ6OmZzOjpGaWxlOjpvcGVuKHBhdGguY2xvbmUoKSk/Owo+PiArICAgICAgICAgICAgICAg ICAgICBsZXQgYmFja3VwX3N0YXRzID0gYmFja3VwX3dyaXRlci51cGxvYWRfYmxvYihmaWxlLCAm ZW50cnkuZmlsZW5hbWUpLmF3YWl0PzsKPj4gKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qu YWRkX2ZpbGUoCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5maWxlbmFtZS50b19z dHJpbmcoKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cF9zdGF0cy5zaXplLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwX3N0YXRzLmNzdW0sCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICBlbnRyeS5jaHVua19jcnlwdF9tb2RlKCksCj4+ICsgICAgICAgICAg ICAgICAgICAgICk/Owo+PiArICAgICAgICAgICAgICAgICAgICBzdGF0cy5hZGQoU3luY1N0YXRz IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX2NvdW50OiBiYWNrdXBfc3RhdHMu Y2h1bmtfY291bnQgYXMgdXNpemUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBieXRlczog YmFja3VwX3N0YXRzLnNpemUgYXMgdXNpemUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBl bGFwc2VkOiBiYWNrdXBfc3RhdHMuZHVyYXRpb24sCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICByZW1vdmVkOiBOb25lLAo+PiArICAgICAgICAgICAgICAgICAgICB9KTsKPj4gKyAgICAgICAg ICAgICAgICB9Cj4+ICsgICAgICAgICAgICAgICAgQXJjaGl2ZVR5cGU6OkR5bmFtaWNJbmRleCA9 PiB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IER5bmFtaWNJbmRleFJlYWRl cjo6b3BlbigmcGF0aCk/Owo+PiArICAgICAgICAgICAgICAgICAgICBsZXQgY2h1bmtfcmVhZGVy ID0gcmVhZGVyLmNodW5rX3JlYWRlcihlbnRyeS5jaHVua19jcnlwdF9tb2RlKCkpOwo+PiArICAg ICAgICAgICAgICAgICAgICBsZXQgc3luY19zdGF0cyA9IHB1c2hfaW5kZXgoCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAmZW50cnkuZmlsZW5hbWUsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICBpbmRleCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX3JlYWRlciwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrdXBfd3JpdGVyLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgJm11dCBtYW5pZmVzdCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGVu dHJ5LmNodW5rX2NyeXB0X21vZGUoKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAma25vd25fY2h1bmtzLAo+PiArICAgICAgICAg ICAgICAgICAgICApCj4+ICsgICAgICAgICAgICAgICAgICAgIC5hd2FpdD87Cj4+ICsgICAgICAg ICAgICAgICAgICAgIHN0YXRzLmFkZChzeW5jX3N0YXRzKTsKPj4gKyAgICAgICAgICAgICAgICB9 Cj4+ICsgICAgICAgICAgICAgICAgQXJjaGl2ZVR5cGU6OkZpeGVkSW5kZXggPT4gewo+PiArICAg ICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBGaXhlZEluZGV4UmVhZGVyOjpvcGVuKCZwYXRo KT87Cj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBjaHVua19yZWFkZXIgPSByZWFkZXIuY2h1 bmtfcmVhZGVyKGVudHJ5LmNodW5rX2NyeXB0X21vZGUoKSk7Cj4+ICsgICAgICAgICAgICAgICAg ICAgIGxldCBzaXplID0gaW5kZXguaW5kZXhfYnl0ZXMoKTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgbGV0IHN5bmNfc3RhdHMgPSBwdXNoX2luZGV4KAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgJmVudHJ5LmZpbGVuYW1lLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19yZWFkZXIsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAmYmFja3VwX3dyaXRlciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICZt dXQgbWFuaWZlc3QsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5jaHVua19jcnlw dF9tb2RlKCksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBTb21lKHNpemUpLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgJmtub3duX2NodW5rcywKPj4gKyAgICAgICAgICAgICAgICAg ICAgKQo+PiArICAgICAgICAgICAgICAgICAgICAuYXdhaXQ/Owo+PiArICAgICAgICAgICAgICAg ICAgICBzdGF0cy5hZGQoc3luY19zdGF0cyk7Cj4+ICsgICAgICAgICAgICAgICAgfQo+PiArICAg ICAgICAgICAgfQo+PiArICAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgaW5mbyEoIntw YXRoOj99IGRvZXMgbm90IGV4aXN0LCBza2lwcGVkLiIpOwo+PiArICAgICAgICB9Cj4+ICsgICAg fQo+PiArCj4+ICsgICAgLy8gRmV0Y2ggY2xpZW50IGxvZyBmcm9tIHNvdXJjZSBhbmQgcHVzaCB0 byB0YXJnZXQKPj4gKyAgICAvLyB0aGlzIGhhcyB0byBiZSBoYW5kbGVkIGluZGl2aWR1YWxseSBz aW5jZSB0aGUgbG9nIGlzIG5ldmVyIHBhcnQgb2YgdGhlIG1hbmlmZXN0Cj4+ICsgICAgbGV0IG11 dCBjbGllbnRfbG9nX3BhdGggPSBiYWNrdXBfZGlyLmZ1bGxfcGF0aCgpOwo+PiArICAgIGNsaWVu dF9sb2dfcGF0aC5wdXNoKENMSUVOVF9MT0dfQkxPQl9OQU1FKTsKPj4gKyAgICBpZiBjbGllbnRf bG9nX3BhdGguaXNfZmlsZSgpIHsKPj4gKyAgICAgICAgYmFja3VwX3dyaXRlcgo+PiArICAgICAg ICAgICAgLnVwbG9hZF9ibG9iX2Zyb21fZmlsZSgKPj4gKyAgICAgICAgICAgICAgICAmY2xpZW50 X2xvZ19wYXRoLAo+PiArICAgICAgICAgICAgICAgIENMSUVOVF9MT0dfQkxPQl9OQU1FLAo+PiAr ICAgICAgICAgICAgICAgIHVwbG9hZF9vcHRpb25zLmNsb25lKCksCj4+ICsgICAgICAgICAgICAp Cj4+ICsgICAgICAgICAgICAuYXdhaXQ/Owo+PiArICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgIGlu Zm8hKCJDbGllbnQgbG9nIGF0IHtjbGllbnRfbG9nX3BhdGg6P30gZG9lcyBub3QgZXhpc3Qgb3Ig aXMgbm90IGEgZmlsZSwgc2tpcHBlZC4iKTsKPj4gKyAgICB9Cj4gCj4gSSBhbSBub3Qgc3VyZSB0 aGlzIHdhcnJhbnRzIGEgbG9nIGxpbmUuLiB0aGUgY2xpZW50IGxvZyBpcyBvcHRpb25hbAo+IGFm dGVyIGFsbCwgc28gdGhpcyBjYW4gaGFwcGVuIHF1aXRlIGEgbG90IGluIHByYWN0aWNlIChlLmcu LCBpZiB5b3UgZG8KPiBob3N0IGJhY2t1cHMgd2l0aG91dCBib3RoZXJpbmcgdG8gdXBsb2FkIGxv Z3MuLikKID4KPiBJIHRoaW5rIHdlIHNob3VsZCBmb2xsb3cgdGhlIGxvZ2ljIG9mIHB1bGwgYmFz ZWQgc3luY2luZyBoZXJlIC0gYWRkIGEKPiBsb2cgdG8gdGhlIGxhc3QgcHJldmlvdXNseSBzeW5j ZWQgc25hcHNob3QgaWYgaXQgZXhpc3RzIGFuZCBpcyBtaXNzaW5nCj4gb24gdGhlIG90aGVyIGVu ZCwgb3RoZXJ3aXNlIG9ubHkgYXR0ZW1wdCB0byB1cGxvYWQgYSBsb2cgaWYgaXQgZXhpc3RzCj4g d2l0aG91dCBsb2dnaW5nIGl0cyBhYnNlbmNlLgoKRHJvcHBlZCB0aGUgbG9nIGxpbmUgZm9yIG5v dywgYXMgZmV0Y2hpbmcgdGhlIGluZm8gZnJvbSB0aGUgcHJldmlvdXMgCnNuYXBzaG90IG9uIHRo ZSB0YXJnZXQganVzdCB0byBkaXNwbGF5IHRoaXMgbG9nIGxpbmUgc2VlbWVkIHJhdGhlciAKaW5l ZmZpY2llbnQuCj4+ICsKPj4gKyAgICAvLyBSZXdyaXRlIG1hbmlmZXN0IGZvciBwdXNoZWQgc25h cHNob3QsIHJlLWFkZGluZyB0aGUgZXhpc3RpbmcgZmluZ2VycHJpbnQgYW5kIHNpZ25hdHVyZQo+ PiArICAgIGxldCBtdXQgbWFuaWZlc3RfanNvbiA9IHNlcmRlX2pzb246OnRvX3ZhbHVlKG1hbmlm ZXN0KT87Cj4+ICsgICAgbWFuaWZlc3RfanNvblsidW5wcm90ZWN0ZWQiXSA9IHNvdXJjZV9tYW5p ZmVzdC51bnByb3RlY3RlZDsKPj4gKyAgICBpZiBsZXQgU29tZShzaWduYXR1cmUpID0gc291cmNl X21hbmlmZXN0LnNpZ25hdHVyZSB7Cj4+ICsgICAgICAgIG1hbmlmZXN0X2pzb25bInNpZ25hdHVy ZSJdID0gc2VyZGVfanNvbjo6dG9fdmFsdWUoc2lnbmF0dXJlKT87Cj4+ICsgICAgfQo+PiArICAg IGxldCBtYW5pZmVzdF9zdHJpbmcgPSBzZXJkZV9qc29uOjp0b19zdHJpbmdfcHJldHR5KCZtYW5p ZmVzdF9qc29uKS51bndyYXAoKTsKPiAKPiBjb3VsZG4ndCB3ZSBqdXN0IHVwbG9hZCB0aGUgb3Jp Z2luYWwgbWFuaWZlc3QgaGVyZT8KClllcywgdGhpcyB3aWxsIGJlIGRvbmUgaW5zdGVhZC4gVGhp cyB3b3JrcyBldmVuIGlmIHRoZSBiYWNrdXAgZmluaXNoIApjYWxsIChvdmVyLSl3cml0ZXMgc29t ZSB2YWx1ZXMgKGBjaHVua191cGxvYWRfc3RhdHNgKSwgd2hpY2ggaXMgd2h5IEkgCmltcGxlbWVu dGVkIHRoaXMgZGlmZmVyZW50bHkgYXQgZmlyc3QuCgo+PiArICAgIGxldCBiYWNrdXBfc3RhdHMg PSBiYWNrdXBfd3JpdGVyCj4+ICsgICAgICAgIC51cGxvYWRfYmxvYl9mcm9tX2RhdGEoCj4+ICsg ICAgICAgICAgICBtYW5pZmVzdF9zdHJpbmcuaW50b19ieXRlcygpLAo+PiArICAgICAgICAgICAg TUFOSUZFU1RfQkxPQl9OQU1FLAo+PiArICAgICAgICAgICAgdXBsb2FkX29wdGlvbnMsCj4+ICsg ICAgICAgICkKPj4gKyAgICAgICAgLmF3YWl0PzsKPj4gKyAgICBiYWNrdXBfd3JpdGVyLmZpbmlz aCgpLmF3YWl0PzsKPj4gKwo+PiArICAgIHN0YXRzLmFkZChTeW5jU3RhdHMgewo+PiArICAgICAg ICBjaHVua19jb3VudDogYmFja3VwX3N0YXRzLmNodW5rX2NvdW50IGFzIHVzaXplLAo+PiArICAg ICAgICBieXRlczogYmFja3VwX3N0YXRzLnNpemUgYXMgdXNpemUsCj4+ICsgICAgICAgIGVsYXBz ZWQ6IGJhY2t1cF9zdGF0cy5kdXJhdGlvbiwKPj4gKyAgICAgICAgcmVtb3ZlZDogTm9uZSwKPj4g KyAgICB9KTsKPj4gKwo+PiArICAgIE9rKHN0YXRzKQo+PiArfQo+PiArCj4+ICsvLyBSZWFkIGZp eGVkIG9yIGR5bmFtaWMgaW5kZXggYW5kIHB1c2ggdG8gdGFyZ2V0IGJ5IHVwbG9hZGluZyB2aWEg dGhlIGJhY2t1cCB3cml0ZXIgaW5zdGFuY2UKPj4gKy8vCj4+ICsvLyBGb3IgZml4ZWQgaW5kZXhl cywgdGhlIHNpemUgbXVzdCBiZSBwcm92aWRlZCBhcyBnaXZlbiBieSB0aGUgaW5kZXggcmVhZGVy Lgo+PiArI1thbGxvdyhjbGlwcHk6OnRvb19tYW55X2FyZ3VtZW50cyldCj4+ICthc3luYyBmbiBw dXNoX2luZGV4PCdhPigKPj4gKyAgICBmaWxlbmFtZTogJidhIHN0ciwKPj4gKyAgICBpbmRleDog aW1wbCBJbmRleEZpbGUgKyBTZW5kICsgJ3N0YXRpYywKPj4gKyAgICBjaHVua19yZWFkZXI6IEFy YzxkeW4gQXN5bmNSZWFkQ2h1bms+LAo+PiArICAgIGJhY2t1cF93cml0ZXI6ICZCYWNrdXBXcml0 ZXIsCj4+ICsgICAgbWFuaWZlc3Q6ICZtdXQgQmFja3VwTWFuaWZlc3QsCj4+ICsgICAgY3J5cHRf bW9kZTogQ3J5cHRNb2RlLAo+PiArICAgIHNpemU6IE9wdGlvbjx1NjQ+LAo+PiArICAgIGtub3du X2NodW5rczogJkFyYzxNdXRleDxIYXNoU2V0PFt1ODsgMzJdPj4+LAo+PiArKSAtPiBSZXN1bHQ8 U3luY1N0YXRzLCBFcnJvcj4gewo+PiArICAgIGxldCAodXBsb2FkX2NoYW5uZWxfdHgsIHVwbG9h ZF9jaGFubmVsX3J4KSA9IG1wc2M6OmNoYW5uZWwoMjApOwo+PiArICAgIGxldCBtdXQgY2h1bmtf aW5mb3MgPQo+PiArICAgICAgICBzdHJlYW06Oml0ZXIoMC4uaW5kZXguaW5kZXhfY291bnQoKSku bWFwKG1vdmUgfHBvc3wgaW5kZXguY2h1bmtfaW5mbyhwb3MpLnVud3JhcCgpKTsKPiAKPiBzbyB0 aGlzIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBjaHVua3MgaW4gdGhlIGluZGV4Li4KPiAKPj4gKwo+ PiArICAgIHRva2lvOjpzcGF3bihhc3luYyBtb3ZlIHsKPj4gKyAgICAgICAgd2hpbGUgbGV0IFNv bWUoY2h1bmtfaW5mbykgPSBjaHVua19pbmZvcy5uZXh0KCkuYXdhaXQgewo+PiArICAgICAgICAg ICAgbGV0IGNodW5rX2luZm8gPSBjaHVua19yZWFkZXIKPj4gKyAgICAgICAgICAgICAgICAucmVh ZF9yYXdfY2h1bmsoJmNodW5rX2luZm8uZGlnZXN0KQo+IAo+IGFuZCB0aGlzIHJlYWRzIHRoZW0K PiAKPj4gKyAgICAgICAgICAgICAgICAuYXdhaXQKPj4gKyAgICAgICAgICAgICAgICAubWFwKHxj aHVua3wgQ2h1bmtJbmZvIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgY2h1bmssCj4+ICsgICAg ICAgICAgICAgICAgICAgIGRpZ2VzdDogY2h1bmtfaW5mby5kaWdlc3QsCj4+ICsgICAgICAgICAg ICAgICAgICAgIGNodW5rX2xlbjogY2h1bmtfaW5mby5zaXplKCksCj4+ICsgICAgICAgICAgICAg ICAgICAgIG9mZnNldDogY2h1bmtfaW5mby5yYW5nZS5zdGFydCwKPj4gKyAgICAgICAgICAgICAg ICB9KTsKPj4gKyAgICAgICAgICAgIGxldCBfID0gdXBsb2FkX2NoYW5uZWxfdHguc2VuZChjaHVu a19pbmZvKS5hd2FpdDsKPiAKPiBhbmQgc2VuZHMgdGhlbSBmdXJ0aGVyIGFsb25nIHRvIHRoZSB1 cGxvYWQgY29kZS4uIHdoaWNoIHdpbGwgdGhlbiAoaW4KPiBtYW55IGNhc2VzKSB0aHJvdyBhd2F5 IGFsbCB0aGF0IGRhdGEgd2UganVzdCByZWFkIGJlY2F1c2UgaXQncyBhbHJlYWR5Cj4gb24gdGhl IHRhcmdldCBhbmQgd2Uga25vdyB0aGF0IGJlY2F1c2Ugb2YgdGhlIHByZXZpb3VzIG1hbmlmZXN0 Li4KPiAKPiB3b3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8gZGVkdXBsaWNhdGUgaGVyZSBhbHJlYWR5 LCBhbmQgaW5zdGVhZCBvZgo+IHJlYWRpbmcga25vd24gY2h1bmtzIG92ZXIgYW5kIG92ZXIgYWdh aW4sIGp1c3QgdGVsbCB0aGUgc2VydmVyIHRvCj4gcmUtcmVnaXN0ZXIgdGhlbT8gb3IgYW0gSSBt aXNzaW5nIHNvbWV0aGluZyBoZXJlPyA6KQoKR29vZCBjYXRjaCwgdGhpcyBpcyBpbmRlZWQgYSBw b3NzaWJsZSBodWdlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2shCgpEaWQgZml4IHRoaXMgYnkgbW92 aW5nIHRoZSBrbm93biBjaHVua3MgY2hlY2sgaGVyZSAoYXMgc3VnZ2VzdGVkKSBhbmQgCnN0cmVh bSBhIGBNZXJnZWRDaHVua0luZm9gIGluc3RlYWQgb2YgYENodW5rSW5mb2AsIHdoaWNoIGFsbG93 cyB0byBvbmx5IApzZW5kIHRoZSBjaHVuaydzIGRpZ2VzdCBhbmQgc2l6ZSBvdmVyIHRvIHRoZSBi YWNrdXAgd3JpdGVyLiBCeSB0aGlzIAprbm93biBjaHVuayBhcmUgbmV2ZXIgcmVhZC4KCj4gCj4+ ICsgICAgICAgIH0KPj4gKyAgICB9KTsKPj4gKwo+PiArICAgIGxldCBjaHVua19pbmZvX3N0cmVh bSA9IFJlY2VpdmVyU3RyZWFtOjpuZXcodXBsb2FkX2NoYW5uZWxfcngpLm1hcF9lcnIoRXJyb3I6 OmZyb20pOwo+PiArCj4+ICsgICAgbGV0IHVwbG9hZF9vcHRpb25zID0gVXBsb2FkT3B0aW9ucyB7 Cj4+ICsgICAgICAgIGNvbXByZXNzOiB0cnVlLAo+PiArICAgICAgICBlbmNyeXB0OiBmYWxzZSwK Pj4gKyAgICAgICAgZml4ZWRfc2l6ZTogc2l6ZSwKPj4gKyAgICAgICAgLi5VcGxvYWRPcHRpb25z OjpkZWZhdWx0KCkKPj4gKyAgICB9Owo+PiArCj4+ICsgICAgbGV0IHVwbG9hZF9zdGF0cyA9IGJh Y2t1cF93cml0ZXIKPj4gKyAgICAgICAgLnVwbG9hZF9pbmRleF9jaHVua19pbmZvKAo+PiArICAg ICAgICAgICAgZmlsZW5hbWUsCj4+ICsgICAgICAgICAgICBjaHVua19pbmZvX3N0cmVhbSwKPj4g KyAgICAgICAgICAgIHVwbG9hZF9vcHRpb25zLAo+PiArICAgICAgICAgICAga25vd25fY2h1bmtz LmNsb25lKCksCj4+ICsgICAgICAgICkKPj4gKyAgICAgICAgLmF3YWl0PzsKPj4gKwo+PiArICAg IG1hbmlmZXN0LmFkZF9maWxlKAo+PiArICAgICAgICBmaWxlbmFtZS50b19zdHJpbmcoKSwKPj4g KyAgICAgICAgdXBsb2FkX3N0YXRzLnNpemUsCj4+ICsgICAgICAgIHVwbG9hZF9zdGF0cy5jc3Vt LAo+PiArICAgICAgICBjcnlwdF9tb2RlLAo+PiArICAgICk/Owo+PiArCj4+ICsgICAgT2soU3lu Y1N0YXRzIHsKPj4gKyAgICAgICAgY2h1bmtfY291bnQ6IHVwbG9hZF9zdGF0cy5jaHVua19jb3Vu dCBhcyB1c2l6ZSwKPj4gKyAgICAgICAgYnl0ZXM6IHVwbG9hZF9zdGF0cy5zaXplIGFzIHVzaXpl LAo+PiArICAgICAgICBlbGFwc2VkOiB1cGxvYWRfc3RhdHMuZHVyYXRpb24sCj4+ICsgICAgICAg IHJlbW92ZWQ6IE5vbmUsCj4+ICsgICAgfSkKPj4gK30KPj4gLS0gCj4+IDIuMzkuMgo+Pgo+Pgo+ Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBw YnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQo+PiBo dHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2 ZWwKPj4KPj4KPj4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlzdHMucHJv eG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0 aW5mby9wYnMtZGV2ZWwKPiAKPiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJv eG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGlu Zm8vcGJzLWRldmVsCg==