From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 263B21FF164 for <inbox@lore.proxmox.com>; Fri, 31 Jan 2025 17:10:45 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 298D3834; Fri, 31 Jan 2025 17:10:42 +0100 (CET) Message-ID: <56fd0cca-7a31-4892-9e3f-2cac1a54b6bb@proxmox.com> Date: Fri, 31 Jan 2025 17:10:35 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Dominik Csapak <d.csapak@proxmox.com>, Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> References: <20250116115109.143589-1-l.leahu-vladucu@proxmox.com> <20250116115109.143589-2-l.leahu-vladucu@proxmox.com> <892e96b6-3f05-41d2-8301-590703af8c4c@proxmox.com> Content-Language: en-US From: =?UTF-8?Q?Lauren=C8=9Biu_Leahu-Vl=C4=83ducu?= <l.leahu-vladucu@proxmox.com> In-Reply-To: <892e96b6-3f05-41d2-8301-590703af8c4c@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.163 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 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox-backup-proxy.rs, mod.rs, changer.rs, api.rs, proxmox-tape.rs, proxmox-backup-api.rs, proxy.rs] Subject: Re: [pbs-devel] [PATCH proxmox-backup 1/1] Automatically select a drive (if part of a changer) when loading tapes X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> VGhhbmtzIGZvciB5b3VyIHJldmlldyEgSSBhbHJlYWR5IG1hZGUgYWxtb3N0IGFsbCB0aGUgcmVx dWVzdGVkIGNoYW5nZXMuIApTb21lIGZ1cnRoZXIgY29tbWVudHMgaW5saW5lOgoKT24gMjguMDEu MjUgMTM6MjUsIERvbWluaWsgQ3NhcGFrIHdyb3RlOgo+IFRoYW5rcyBmb3IgdGFja2xpbmcgdGhp cyEKPiAKPiBhIGZldyBoaWdoIGxldmVsIGNvbW1lbnRzOgo+IAo+ICogcGxlYXNlIHdyaXRlIHRo ZSByZWxldmFudCB0ZXh0IGFzIGNvbW1pdCBtZXNzYWdlIChhcyBtZW50aW9uZWQgb2ZmLWxpc3Qp Cj4gIMKgIGJhc2ljYWxseSB0aGUgdGV4dCBpbiB0aGUgKGhlcmUgbm90IG5lZWRlZCkgY292ZXIt bGV0dGVyIHdvdWxkIGZpdAo+ICDCoCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UKPiAKPiAqIHJ1c3Rm bXQ6IHBsZWFzZSB1c2UgaXQsIHRoZXJlIGFyZSBzb21lIGxpbmVzIHRoYXQgYXJlIHZlcnkgbG9u Zy4KPiAgwqAgY29tbWVudHMgc2hvdWxkIHByb2JhYmx5IGFsc28gbm90IGV4Y2VlZCB0aGUgbGlu ZSBsZW5ndGggbGltaXQKClNvcnJ5LCBJIHRob3VnaHQgcnVzdGZtdCBpcyBydW5uaW5nLCBidXQg aXQgd2FzIG15IGVkaXRvcidzIGRlZmF1bHQgCmZhbGxiYWNrIGZvcm1hdHRlciBkdWUgdG8gdGhl IGZhY3QgdGhhdCBpdCBjb3VsZCBub3QgZmluZCB0aGUgCnJ1c3QtYW5hbHl6ZXIgKEkgZm9yZ290 IHRvIGluc3RhbGwgaXQpLiBNeSBiYWQuIEkgZml4ZWQgdGhpcyBhbHJlYWR5IGFuZCAKd2lsbCBi ZSBhdmFpbGFibGUgaW4gdGhlIG5leHQgdmVyc2lvbiBvZiB0aGUgcGF0Y2guCgo+IAo+ICogaXQg d291bGQgYmUgZ29vZCB0byBleHBsYWluIHRoZSByZWFzb24gZm9yIHRoZSBjb2RlIGEgYml0IG1v cmUsIGUuZy4gCj4geW91IGludHJvZHVjZQo+ICDCoCB0aGUgcHJvZHVjdC1jb25maWcgY3JhdGUg aGVyZSBhbmQgZG8gYW4gaW5pdGlhbGl6YXRpb24sCj4gIMKgIGJ1dCBuZWl0aGVyIGJ5IGxvb2tp bmcgYXQgdGhlIGNvZGUsIG5vciBieSByZWFkaW5nIHRoZSBjb21taXQKPiAgwqAgbWVzc2FnZSBp IGtub3cgZXhhY3RseSB3aHkgKGkga25vdyBpdCBiZWNhdXNlIHdlIHRhbGtlZCBvZmYtbGlzdCkK PiAgwqAgYSBzaG9ydCBzZW50ZW5jZSBsaWtlOgo+IAo+ICDCoCBhZGRlZCB0aGUgcHJvZHVjdC1j b25maWcgY3JhdGUgc28gd2UncmUgYWJsZSB0byByZXVzZSB0aGUKPiAgwqAgJ3JlcGxhY2VfY29u ZmlnJyBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQuCj4gCj4gIMKgIGNhbiBhbHJlYWR5IGJlIGVub3Vn aAo+IAo+ICogdGhlIHBhdGNoIGRvZXMgbm90IGN1cnJlbnRseSBhcHBseSBjbGVhbmx5IGJlY2F1 c2Ugd2UgZGlkCj4gIMKgIHNvbWUgY29kZSBtb3ZlcyAoZS5nLiBwYnMtYXBpLXR5cGVzIGlzIG5v dyBhbiBleHRlcm5hbCBjcmF0ZSkKPiAKPiAKPiBTb21lIG90aGVyIGNvbW1lbnRzIGlubGluZToK PiAKPiBPbiAxLzE2LzI1IDEyOjUxLCBMYXVyZW7Im2l1IExlYWh1LVZsxINkdWN1IHdyb3RlOgo+ PiBTaWduZWQtb2ZmLWJ5OiBMYXVyZW7Im2l1IExlYWh1LVZsxINkdWN1IDxsLmxlYWh1LXZsYWR1 Y3VAcHJveG1veC5jb20+Cj4+IC0tLQo+PiDCoCBDYXJnby50b21swqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAyICsKPj4gwqAgcGJzLWFwaS10eXBl cy9zcmMvdGFwZS9jaGFuZ2VyLnJzIHzCoCAxNCArKystCj4+IMKgIHNyYy9hcGkyL3RhcGUvY2hh bmdlci5yc8KgwqDCoMKgwqDCoMKgwqDCoCB8IDExNyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0KPj4gwqAgc3JjL2Jpbi9wcm94bW94LWJhY2t1cC1hcGkucnPCoMKgwqDCoCB8wqDCoCAy ICsKPj4gwqAgc3JjL2Jpbi9wcm94bW94LWJhY2t1cC1wcm94eS5yc8KgwqAgfMKgwqAgMiArCj4+ IMKgIHNyYy9iaW4vcHJveG1veC10YXBlLnJzwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDUwICsr KysrKysrKysrLS0KPj4gwqAgc3JjL3RhcGUvY2hhbmdlci9tb2QucnPCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgMTkgKysrKy0KPj4gwqAgc3JjL3RhcGUvZHJpdmUvdmlydHVhbF90YXBlLnJzwqDC oMKgIHzCoMKgIDggKy0KPj4gwqAgc3JjL3RhcGUvZHJpdmVfaW5mby5yc8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDUxICsrKysrKysrKysrKysKPj4gwqAgc3JjL3RhcGUvbW9kLnJzwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCBzcmMvdG9vbHMv bW9kLnJzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA3ICsrCj4+IMKg IHd3dy90YXBlL0NoYW5nZXJTdGF0dXMuanPCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNiArKystCj4+ IMKgIDEyIGZpbGVzIGNoYW5nZWQsIDI3NCBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkK Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90YXBlL2RyaXZlX2luZm8ucnMKPj4KPj4gZGlm ZiAtLWdpdCBhL0NhcmdvLnRvbWwgYi9DYXJnby50b21sCj4+IGluZGV4IGFkZWViNmVmLi4zNDhk MWNlYSAxMDA2NDQKPj4gLS0tIGEvQ2FyZ28udG9tbAo+PiArKysgYi9DYXJnby50b21sCj4+IEBA IC03Miw2ICs3Miw3IEBAIHByb3htb3gtbGRhcCA9ICIwLjIuMSIKPj4gwqAgcHJveG1veC1tZXRy aWNzID0gIjAuMy4xIgo+PiDCoCBwcm94bW94LW5vdGlmeSA9ICIwLjUuMSIKPj4gwqAgcHJveG1v eC1vcGVuaWQgPSAiMC4xMC4wIgo+PiArcHJveG1veC1wcm9kdWN0LWNvbmZpZyA9ICIwLjIuMiIK Pj4gwqAgcHJveG1veC1yZXN0LXNlcnZlciA9IHsgdmVyc2lvbiA9ICIwLjguNSIsIGZlYXR1cmVz ID0gWyAidGVtcGxhdGVzIiBdIH0KPj4gwqAgIyBzb21lIHVzZSAiY2xpIiwgc29tZSB1c2UgImNs aSIgYW5kICJzZXJ2ZXIiLCBwYnMtY29uZmlnIHVzZXMgbm90aGluZwo+PiDCoCBwcm94bW94LXJv dXRlciA9IHsgdmVyc2lvbiA9ICIzLjAuMCIsIGRlZmF1bHQtZmVhdHVyZXMgPSBmYWxzZSB9Cj4+ IEBAIC0yMjEsNiArMjIyLDcgQEAgcHJveG1veC1sZGFwLndvcmtzcGFjZSA9IHRydWUKPj4gwqAg cHJveG1veC1tZXRyaWNzLndvcmtzcGFjZSA9IHRydWUKPj4gwqAgcHJveG1veC1ub3RpZnkgPSB7 IHdvcmtzcGFjZSA9IHRydWUsIGZlYXR1cmVzID0gWyAicGJzLWNvbnRleHQiIF0gfQo+PiDCoCBw cm94bW94LW9wZW5pZC53b3Jrc3BhY2UgPSB0cnVlCj4+ICtwcm94bW94LXByb2R1Y3QtY29uZmln LndvcmtzcGFjZSA9IHRydWUKPj4gwqAgcHJveG1veC1yZXN0LXNlcnZlciA9IHsgd29ya3NwYWNl ID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJyYXRlLSAKPj4gbGltaXRlZC1zdHJlYW0iIF0gfQo+PiDC oCBwcm94bW94LXJvdXRlciA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJjbGki LCAic2VydmVyIl0gfQo+PiDCoCBwcm94bW94LXNjaGVtYSA9IHsgd29ya3NwYWNlID0gdHJ1ZSwg ZmVhdHVyZXMgPSBbICJhcGktbWFjcm8iIF0gfQo+PiBkaWZmIC0tZ2l0IGEvcGJzLWFwaS10eXBl cy9zcmMvdGFwZS9jaGFuZ2VyLnJzIGIvcGJzLWFwaS10eXBlcy9zcmMvIAo+PiB0YXBlL2NoYW5n ZXIucnMKPj4gaW5kZXggZGYzODIzY2YuLjUyZWUwOGRiIDEwMDY0NAo+PiAtLS0gYS9wYnMtYXBp LXR5cGVzL3NyYy90YXBlL2NoYW5nZXIucnMKPj4gKysrIGIvcGJzLWFwaS10eXBlcy9zcmMvdGFw ZS9jaGFuZ2VyLnJzCj4+IEBAIC04LDEwICs4LDIwIEBAIHVzZSBwcm94bW94X3NjaGVtYTo6ewo+ PiDCoCB1c2UgY3JhdGU6OntPcHRpb25hbERldmljZUlkZW50aWZpY2F0aW9uLCBQUk9YTU9YX1NB RkVfSURfRk9STUFUfTsKPj4gK2NvbnN0IFRBUEVfQ0hBTkdFUl9NSU5fTEVOR1RIOiB1c2l6ZSA9 IDM7Cj4+ICtjb25zdCBUQVBFX0NIQU5HRVJfTUFYX0xFTkdUSDogdXNpemUgPSAzMjsKPj4gKwo+ PiDCoCBwdWIgY29uc3QgQ0hBTkdFUl9OQU1FX1NDSEVNQTogU2NoZW1hID0gU3RyaW5nU2NoZW1h OjpuZXcoIlRhcGUgCj4+IENoYW5nZXIgSWRlbnRpZmllci4iKQo+PiDCoMKgwqDCoMKgIC5mb3Jt YXQoJlBST1hNT1hfU0FGRV9JRF9GT1JNQVQpCj4+IC3CoMKgwqAgLm1pbl9sZW5ndGgoMykKPj4g LcKgwqDCoCAubWF4X2xlbmd0aCgzMikKPj4gK8KgwqDCoCAubWluX2xlbmd0aChUQVBFX0NIQU5H RVJfTUlOX0xFTkdUSCkKPj4gK8KgwqDCoCAubWF4X2xlbmd0aChUQVBFX0NIQU5HRVJfTUFYX0xF TkdUSCkKPj4gK8KgwqDCoCAuc2NoZW1hKCk7Cj4+ICsKPj4gK3B1YiBjb25zdCBDSEFOR0VSX05B TUVfU0NIRU1BX0FVVE9NQVRJQ19EUklWRV9BU0lHTk1FTlQ6IFNjaGVtYSA9Cj4gCj4gdHlwbzog QVNJR05NRU5UIHZzIEFTU0lHTk1FTlQKPiAKPj4gK8KgwqDCoCBTdHJpbmdTY2hlbWE6Om5ldygi VGFwZSBDaGFuZ2VyIElkZW50aWZpZXIgdG8gYmUgdXNlZCBmb3IgCj4+IGF1dG9tYXRpYyB0YXBl IGRyaXZlIGFzc2lnbm1lbnQuIikKPj4gK8KgwqDCoCAuZm9ybWF0KCZQUk9YTU9YX1NBRkVfSURf Rk9STUFUKQo+PiArwqDCoMKgIC5taW5fbGVuZ3RoKFRBUEVfQ0hBTkdFUl9NSU5fTEVOR1RIKQo+ PiArwqDCoMKgIC5tYXhfbGVuZ3RoKFRBUEVfQ0hBTkdFUl9NQVhfTEVOR1RIKQo+PiDCoMKgwqDC oMKgIC5zY2hlbWEoKTsKPj4gwqAgcHViIGNvbnN0IFNDU0lfQ0hBTkdFUl9QQVRIX1NDSEVNQTog U2NoZW1hID0KPj4gZGlmZiAtLWdpdCBhL3NyYy9hcGkyL3RhcGUvY2hhbmdlci5ycyBiL3NyYy9h cGkyL3RhcGUvY2hhbmdlci5ycwo+PiBpbmRleCA3ZWNmN2JmZi4uYjczZDY4MzIgMTAwNjQ0Cj4+ IC0tLSBhL3NyYy9hcGkyL3RhcGUvY2hhbmdlci5ycwo+PiArKysgYi9zcmMvYXBpMi90YXBlL2No YW5nZXIucnMKPj4gQEAgLTEsNiArMSw2IEBACj4+IMKgIHVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpI YXNoTWFwOwo+PiAtdXNlIGFueWhvdzo6RXJyb3I7Cj4+ICt1c2UgYW55aG93Ojp7YmFpbCwgRXJy b3J9Owo+PiDCoCB1c2Ugc2VyZGVfanNvbjo6VmFsdWU7Cj4+IMKgIHVzZSBwcm94bW94X3JvdXRl cjo6e2xpc3Rfc3ViZGlyc19hcGlfbWV0aG9kLCBQZXJtaXNzaW9uLCBSb3V0ZXIsIAo+PiBScGNF bnZpcm9ubWVudCwgU3ViZGlyTWFwfTsKPj4gQEAgLTgsNyArOCw4IEBAIHVzZSBwcm94bW94X3Nj aGVtYTo6YXBpOwo+PiDCoCB1c2UgcGJzX2FwaV90eXBlczo6ewo+PiDCoMKgwqDCoMKgIEF1dGhp ZCwgQ2hhbmdlckxpc3RFbnRyeSwgTHRvVGFwZURyaXZlLCBNdHhFbnRyeUtpbmQsIAo+PiBNdHhT dGF0dXNFbnRyeSwgU2NzaVRhcGVDaGFuZ2VyLAo+PiAtwqDCoMKgIENIQU5HRVJfTkFNRV9TQ0hF TUEsIFBSSVZfVEFQRV9BVURJVCwgUFJJVl9UQVBFX1JFQUQsCj4+ICvCoMKgwqAgQ0hBTkdFUl9O QU1FX1NDSEVNQSwgUFJJVl9UQVBFX0FVRElULCBQUklWX1RBUEVfUkVBRCwgCj4+IE1FRElBX0xB QkVMX1NDSEVNQSwgVVBJRF9TQ0hFTUEsCj4+ICvCoMKgwqAgRHJpdmVMaXN0RW50cnksIERldmlj ZUFjdGl2aXR5Cj4+IMKgIH07Cj4+IMKgIHVzZSBwYnNfY29uZmlnOjpDYWNoZWRVc2VySW5mbzsK Pj4gwqAgdXNlIHBic190YXBlOjp7Cj4+IEBAIC0xOTksNyArMjAwLDExOSBAQCBwdWIgZm4gbGlz dF9jaGFuZ2VycygKPj4gwqDCoMKgwqDCoCBPayhsaXN0KQo+PiDCoCB9Cj4+ICsjW2FwaSgKPj4g K8KgwqDCoCBpbnB1dDogewo+PiArwqDCoMKgwqDCoMKgwqAgcHJvcGVydGllczogewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuYW1lOiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2NoZW1hOiBDSEFOR0VSX05BTUVfU0NIRU1BLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAibGFiZWwtdGV4dCI6IHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzY2hlbWE6IE1FRElBX0xBQkVMX1NDSEVNQSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSwKPj4gK8KgwqDCoMKgwqDCoMKgIH0sCj4+ICvC oMKgwqAgfSwKPj4gK8KgwqDCoCByZXR1cm5zOiB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzY2hlbWE6 IFVQSURfU0NIRU1BLAo+PiArwqDCoMKgIH0sCj4+ICvCoMKgwqAgYWNjZXNzOiB7Cj4+ICvCoMKg wqDCoMKgwqDCoCBwZXJtaXNzaW9uOiAmUGVybWlzc2lvbjo6UHJpdmlsZWdlKCZbInRhcGUiLCAi ZGV2aWNlIiwgCj4+ICJ7bmFtZX0iXSwgUFJJVl9UQVBFX1JFQUQsIGZhbHNlKSwKPj4gK8KgwqDC oCB9LAo+PiArKV0KPj4gKy8vLyBMb2FkIG1lZGlhIHdpdGggc3BlY2lmaWVkIGxhYmVsCj4+ICsv Ly8KPj4gKy8vLyBJc3N1ZSBhIG1lZGlhIGxvYWQgcmVxdWVzdCB0byB0aGUgYXNzb2NpYXRlZCBj aGFuZ2VyIGRldmljZS4KPj4gK3B1YiBmbiBsb2FkX21lZGlhKAo+PiArwqDCoMKgIG5hbWU6IFN0 cmluZywKPj4gK8KgwqDCoCBsYWJlbF90ZXh0OiBTdHJpbmcsCj4+ICvCoMKgwqAgcnBjZW52OiAm bXV0IGR5biBScGNFbnZpcm9ubWVudCwKPj4gKykgLT4gUmVzdWx0PFZhbHVlLCBFcnJvcj4gewo+ PiArwqDCoMKgIGxldCBkcml2ZSA9IGNob29zZV9kcml2ZSgmbmFtZSwgcnBjZW52KTsKPj4gK8Kg wqDCoCBzdXBlcjo6ZHJpdmU6OmxvYWRfbWVkaWEoZHJpdmU/LCBsYWJlbF90ZXh0LCBycGNlbnYp Cj4+ICt9PiArCj4+ICsjW2FwaSgKPj4gK8KgwqDCoCBpbnB1dDogewo+PiArwqDCoMKgwqDCoMKg wqAgcHJvcGVydGllczogewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYW1lOiB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2NoZW1hOiBDSEFOR0VSX05BTUVfU0NIRU1B LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAic291cmNlLXNsb3QiOiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVz Y3JpcHRpb246ICJTb3VyY2Ugc2xvdCBudW1iZXIuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBtaW5pbXVtOiAxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiAr wqDCoMKgwqDCoMKgwqAgfSwKPj4gK8KgwqDCoCB9LAo+PiArwqDCoMKgIGFjY2Vzczogewo+PiAr wqDCoMKgwqDCoMKgwqAgcGVybWlzc2lvbjogJlBlcm1pc3Npb246OlByaXZpbGVnZSgmWyJ0YXBl IiwgImRldmljZSIsIAo+PiAie25hbWV9Il0sIFBSSVZfVEFQRV9SRUFELCBmYWxzZSksCj4+ICvC oMKgwqAgfSwKPj4gKyldCj4+ICsvLy8gTG9hZCBtZWRpYSBmcm9tIHRoZSBzcGVjaWZpZWQgc2xv dAo+PiArLy8vCj4+ICsvLy8gSXNzdWUgYSBtZWRpYSBsb2FkIHJlcXVlc3QgdG8gdGhlIGFzc29j aWF0ZWQgY2hhbmdlciBkZXZpY2UuCj4+ICtwdWIgYXN5bmMgZm4gbG9hZF9zbG90KAo+PiArwqDC oMKgIG5hbWU6IFN0cmluZywKPj4gK8KgwqDCoCBzb3VyY2Vfc2xvdDogdTY0LAo+PiArwqDCoMKg IHJwY2VudjogJm11dCBkeW4gUnBjRW52aXJvbm1lbnQsKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7 Cj4+ICvCoMKgwqAgbGV0IGRyaXZlID0gY2hvb3NlX2RyaXZlKCZuYW1lLCBycGNlbnYpOwo+PiAr wqDCoMKgIHN1cGVyOjpkcml2ZTo6bG9hZF9zbG90KGRyaXZlPywgc291cmNlX3Nsb3QpLmF3YWl0 Cj4+ICt9Cj4+ICsKPj4gK2ZuIGNob29zZV9kcml2ZSgKPj4gK8KgwqDCoCBjaGFuZ2VyOiAmc3Ry LAo+PiArwqDCoMKgIHJwY2VudjogJm11dCBkeW4gUnBjRW52aXJvbm1lbnQpIC0+IFJlc3VsdDxT dHJpbmcsIEVycm9yPiB7Cj4+ICvCoMKgwqAgLy8gV2UgaGF2ZSB0byBhdXRvbWF0aWNhbGx5IHNl bGVjdCBhIGRyaXZlIGZyb20gdGhlIHNwZWNpZmllZCAKPj4gY2hhbmdlci4gRm9yIHRoYXQgcHVy cG9zZSwgd2UgdGFrZSBhbGwgZHJpdmVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIAo+PiBjaGFuZ2Vy Cj4+ICvCoMKgwqAgLy8gYW5kIHNlYXJjaCBmb3IgdGhlIG9uZSB0aGF0IGhhcyBub3QgYmVlbiB1 c2VkIGZvciB0aGUgbG9uZ2VzdCAKPj4gdGltZSAodG8gZW5zdXJlIHNpbWlsYXIgd2VhciBiZXR3 ZWVuIHRoZSBkcml2ZXMpLCBvciB1c2Ugb25lIHRoYXQgaGFzIAo+PiBuZXZlciBiZWVuIHVzZWQu Cj4gCj4gUGxlYXNlIGtlZXAgdGhlIGxpbmUgbGVuZ3RoIGxpbWl0IGFsc28gZm9yIGNvbW1lbnRz Cj4gCj4+ICvCoMKgwqAgbGV0IGRyaXZlcyA9IAo+PiBzdXBlcjo6ZHJpdmU6Omxpc3RfZHJpdmVz KE9wdGlvbjo6ZnJvbShjaGFuZ2VyLnRvX3N0cmluZygpKSwgdHJ1ZSwgCj4+IFZhbHVlOjpOdWxs LCBycGNlbnYpOwo+PiArCj4gCj4gSSdkIHVzZSBgU29tZSh4KWAgaW5zdGVhZCBvZiBgT3B0aW9u Ojpmcm9tKHgpYCBiZWNhdXNlIGl0J3Mgc2hvcnRlciwgYW5kIAo+IGJlY2F1c2UgaXQncwo+IGNs ZWFyZXIgd2hhdCBpdCBkb2VzCj4gCj4+ICvCoMKgwqAgbWF0Y2ggZHJpdmVzIHsKPj4gK8KgwqDC oMKgwqDCoMKgIE9rKGVudHJpZXMpID0+IHsKPiAKPiB0aGlzIHBhdHRlcm4gd2l0aCBhIGJhaWwh IGluIHRoZSBFcnIgY2FzZSBpcyBpbWhvIG11Y2ggbmVhdGVyIHdoZW4gCj4gd3JpdHRlbiBsaWtl IHRoaXM6Cj4gCj4gbGV0IGVudHJpZXMgPSBsaXN0X2RyaXZlcyguLikubWFwX2Vycih8ZXJyfCBm b3JtYXRfZXJyISgiY2Fubm90IHF1ZXJ5IAo+IGRyaXZlczoge2Vycn0iKSk/Owo+IAo+IHdpdGgg dGhhdCB5b3UgZWxpbWluYXRlIGEgY29tcGxldGUgbGV2ZWwgb2YgaW5kZW50YXRpb24gZm9yIHRo ZSAKPiByZW1haW5pbmcgY29kZQo+IAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgaWRs ZV9kcml2ZXM6IFZlYzxEcml2ZUxpc3RFbnRyeT4gPSAKPj4gZW50cmllcy5pbnRvX2l0ZXIoKS5m aWx0ZXIofGVudHJ5fCBtYXRjaGVzIShlbnRyeS5hY3Rpdml0eSwgTm9uZSB8IAo+PiBTb21lKERl dmljZUFjdGl2aXR5OjpOb0FjdGl2aXR5KSkpLmNvbGxlY3QoKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbGV0IGRyaXZlc19pbmZvID0gCj4+IGNyYXRlOjp0YXBlOjpkcml2ZV9pbmZvOjpn ZXRfZHJpdmVzX2luZm8oKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXRjaCBk cml2ZXNfaW5mbyB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT2soZHJpdmVz X2luZm8pID0+IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxl dCBtdXQgaW5kZXhfb2xkZXN0IDogT3B0aW9uPHVzaXplPiA9IAo+PiBPcHRpb246OmRlZmF1bHQo KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBtdXQgb2xk ZXN0X3RpbWU6IE9wdGlvbjxpNjQ+ID0gCj4+IE9wdGlvbjo6ZGVmYXVsdCgpOwo+PiArCj4gCj4g SSdkIHdyaXRlCj4gCj4gbGV0IG11dCBmb286IE9wdGlvbjxUPiA9IE5vbmU7Cj4gCj4gaGVyZS4K PiAKPiBZZXMsIGl0J3MgY2xlYXIgdGhhdCBOb25lIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IHJ1 c3QgZGV2ZWxvcGVycywgYnV0Cj4gc2VlaW5nIHRoZSBgTm9uZWAgZXhwbGljaXRlbHkgaGVyZSBt YWtlcyB0aGUgY29kZSBtdWNoIG1vcmUgcmVhZGFibGUgSU1PCj4gCj4gCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgaW5kZXggaW4gMC4uaWRsZV9kcml2ZXMu bGVuKCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsZXQgZXhpc3RpbmdfZHJpdmUgPSAKPj4gZHJpdmVzX2luZm8uZHJpdmVzLmdldCgmaWRsZV9k cml2ZXNbaW5kZXhdLmNvbmZpZy5uYW1lKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXRjaCBleGlzdGluZ19kcml2ZSB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU29tZShl eGlzdGluZ19kcml2ZSkgPT4gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgb2xkZXN0X3RpbWUuaXNfbm9uZSgpIHx8 IAo+PiBvbGRlc3RfdGltZS5pc19zb21lX2FuZCh8b2xkZXN0X3RpbWV8IGV4aXN0aW5nX2RyaXZl Lmxhc3RfdXNhZ2UgPCAKPj4gb2xkZXN0X3RpbWUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2xkZXN0 X3RpbWUgPSAKPj4gT3B0aW9uOjpmcm9tKGV4aXN0aW5nX2RyaXZlLmxhc3RfdXNhZ2UpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbmRleF9vbGRlc3QgPSBPcHRpb246OmZyb20oaW5kZXgpOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgTm9uZSA9PiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBEcml2ZSBoYXMgbmV2ZXIgYmVlbiB1 c2VkLCBzbyAKPj4gbGV0J3MgdXNlIHRoaXMgb25lIQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW5kZXhfb2xkZXN0ID0g T3B0aW9uOjpmcm9tKGluZGV4KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBtYXRjaCBpbmRleF9vbGRlc3Qgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTb21lKGluZGV4X29sZGVzdCkgPT4gCj4+ IE9rKGlkbGVfZHJpdmVzLmdldChpbmRleF9vbGRlc3QpLnVud3JhcCgpLmNvbmZpZy5uYW1lLmNs b25lKCkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBOb25lID0+IGJhaWwhKCJ0aGVyZSBhcmUgbm8gaWRsZSBkcml2ZXMgdG8gCj4+IGNob29zZSBm b3IgYXV0b21hdGljIGRyaXZlIGFzc2lnbm1lbnQiKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0s Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRXJyKF9lcnJvcikgPT4gewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gU2ltcGx5IHVzZSB0aGUg Zmlyc3QgZHJpdmUsIGlmIHBvc3NpYmxlLgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbWF0Y2ggaWRsZV9kcml2ZXMuZmlyc3QoKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNvbWUoaWRsZV9kcml2ZSkgPT4gCj4+ IE9rKGlkbGVfZHJpdmUuY29uZmlnLm5hbWUuY2xvbmUoKSksCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vbmUgPT4gYmFpbCEoInRoZXJlIGFyZSBu byBpZGxlIGRyaXZlcyB0byAKPj4gY2hvb3NlIGZvciBhdXRvbWF0aWMgZHJpdmUgYXNzaWdubWVu dCIpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IAo+IHdvdWxkbid0IHRoZSBjb2RlIGhlcmUg Z2V0IG11Y2ggZWFzaWVyIGlmIHRoZSAnZHJpdmVzX2luZm8nIHdvdWxkIHJldHVybiAKPiBhIGxp c3Qgc29ydGVkIGJ5IHRoZSBsYXN0X3VzYWdlPwo+IAo+IHRoZSBpIHRoaW5rIHRoZSBjb2RlIGNv dWxkIGJvaWwgZG93biB0byBzb21ldGhpbmcgbGlrZSB0aGlzIChqdXN0IAo+IHBzZXVkb2NvZGUp Ogo+IAo+IGxldCBpZGxlX2RyaXZlcyA9IGdldF9pZGxlX2RyaXZlcygpOwo+IGxldCBkcml2ZXNf aW5fb3JkZXIgPSBnZXRfc29ydGVkX2RyaXZlc19pbmZvKCk7IC8vIHNob3VsZCBpbmNsdWRlIGFs bCAKPiBkcml2ZXMsIGFsc28gdGhvc2UgdGhhdCBoYXZlIG5vIGxhc3QgdXNhZ2UgcmVjb3JkZWQg KHNvcnRlZCBiZWZvcmUgb25lcyAKPiB3aXRoIHVzYWdlKQo+IAo+IGxldCBjaG9zZW4gPSBkcml2 ZXNfaW5fb3JkZXIuZmlsdGVyKHxkcml2ZXwgCj4gaWRsZV9kcml2ZXMuY29udGFpbnMoZHJpdmUp KS5maXJzdCgpOwo+IAo+IG1hdGNoIGNob3NlbiB7Cj4gIMKgwqAgU29tZSh4eCkgPT4gLy8gZG8g c29tZXRoaW5nIHdpdGggY2hvc2VuIGRyaXZlIGFuZCB1cGRhdGUgbGlzdAo+ICDCoMKgIE5vbmUg PT4gLy8gZmFsbGJhY2sgbWVjaGFuaXNtIG9yIGVycm9yCj4gfQo+IAoKU3VyZSwgdGhpcyB3b3Vs ZCBtYWtlIGl0IHNpbXBsZXIgZm9yIHRoaXMgdXNlIGNhc2UgLSBJIGFncmVlLiBUYWtpbmcgYSAK c3RlcCBiYWNrIGZvciBhIG1vbWVudCwgd2UgZG8gbm90IGhhdmUgYW55IGZpbGVzIHN0b3Jpbmcg YW55IHN0YXRlIGZvciAKdGFwZSBkcml2ZXMvY2hhbmdlcnMgZXhjZXB0IHRoZSBvbmVzIG1hZGUg dG8gYmUgY2hhbmdlZCBieSB0aGUgdXNlciAoaW4gCi9ldGMvcHJveG1veC1iYWNrdXAvdGFwZS5j ZmcpLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gY3JlYXRlIHN1Y2ggYSBmaWxlIGZvciBzdG9y aW5nIHN0YXRlcyByZWxhdGVkIHRvIAp0YXBlIGRyaXZlcy9jaGFuZ2VycyB3aGVyZSB3ZSBtaWdo dCB3YW50IHRvIHN0b3JlIG1vcmUgdGhhbiB0aGUgdGltZSBvZiAKdGhlIGxhc3QgdXNhZ2UgKGFs dGhvdWdoIG9ubHkgdGhpcyBpcyBzdG9yZWQsIGF0IHRoZSBtb21lbnQpLiBUaGlzIGlzIAp0aGUg cmVhc29uIHdoeSBJIG5hbWVkIGl0ICJkcml2ZXNfaW5mbyIgb3IgInRhcGVfZHJpdmVfaW5mbyIu IEluIHRoYXQgCmNvbnRleHQsIHNvcnRpbmcgZHJpdmVzIGJ5IHRoZSBsYXN0IHRpbWUgb2YgdXNh Z2UgY2FuIGJlIGFkZGVkLCBidXQgaXMgCnByZXR0eSBzcGVjaWZpYy4KCkhvd2V2ZXIsIGlmIGEg bW9yZSBnZW5lcmFsIGZpbGUgZm9yIHN1Y2ggcHVycG9zZXMgaXMgbm90IGRlc2lyZWQsIEkgY2Fu IApnbGFkbHkgbWFrZSBpdCBtb3JlIHVzZSBjYXNlLXNwZWNpZmljIGFuZCByZW5hbWUgdGhlIGZp bGUgYW5kIHN0cnVjdHMgCmFsdG9nZXRoZXIgdG8gYmV0dGVyIHJlZmxlY3Qgd2hhdCB0aGUgbmV3 IGNvZGUgZG9lcy4gUmV0dXJuaW5nIGEgc29ydGVkIApsaXN0IG9mIGRyaXZlcyB3b3VsZCBtYWtl IG1vcmUgc2Vuc2UgaW4gdGhhdCBjb250ZXh0LgoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgRXJyKGVycm9yKSA9PiBi YWlsISgiY2Fubm90IHF1ZXJ5IGRyaXZlczoge30iLCBlcnJvcikKPj4gK8KgwqDCoCB9Cj4+ICt9 Cj4+ICsKPj4gwqAgY29uc3QgU1VCRElSUzogU3ViZGlyTWFwID0gJlsKPj4gK8KgwqDCoCAoImxv YWQtbWVkaWEiLCAmUm91dGVyOjpuZXcoKS5wb3N0KCZBUElfTUVUSE9EX0xPQURfTUVESUEpKSwK Pj4gK8KgwqDCoCAoImxvYWQtc2xvdCIsICZSb3V0ZXI6Om5ldygpLnBvc3QoJkFQSV9NRVRIT0Rf TE9BRF9TTE9UKSksCj4+IMKgwqDCoMKgwqAgKCJzdGF0dXMiLCAmUm91dGVyOjpuZXcoKS5nZXQo JkFQSV9NRVRIT0RfR0VUX1NUQVRVUykpLAo+PiDCoMKgwqDCoMKgICgidHJhbnNmZXIiLCAmUm91 dGVyOjpuZXcoKS5wb3N0KCZBUElfTUVUSE9EX1RSQU5TRkVSKSksCj4+IMKgIF07Cj4+IGRpZmYg LS1naXQgYS9zcmMvYmluL3Byb3htb3gtYmFja3VwLWFwaS5ycyBiL3NyYy9iaW4vcHJveG1veC1i YWNrdXAtIAo+PiBhcGkucnMKPj4gaW5kZXggN2E3MmQ0OWEuLmM2YjJkNTMyIDEwMDY0NAo+PiAt LS0gYS9zcmMvYmluL3Byb3htb3gtYmFja3VwLWFwaS5ycwo+PiArKysgYi9zcmMvYmluL3Byb3ht b3gtYmFja3VwLWFwaS5ycwo+PiBAQCAtNDMsNiArNDMsOCBAQCBmbiBnZXRfaW5kZXgoKSAtPiBQ aW48Qm94PGR5biBGdXR1cmU8T3V0cHV0ID0gCj4+IFJlc3BvbnNlPEJvZHk+PiArIFNlbmQ+PiB7 Cj4+IMKgIGFzeW5jIGZuIHJ1bigpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gwqDCoMKgwqDC oCBpbml0X2xvZ2dlcigiUEJTX0xPRyIsIExldmVsRmlsdGVyOjpJTkZPKT87Cj4+ICvCoMKgwqAg bGV0IF8gPSBwcm94bW94X2JhY2t1cDo6dG9vbHM6OmluaXRfcHJvZHVjdF9jb25maWcoKTsKPj4g Kwo+IAo+IHlvdSBpbnRyb2R1Y2UgdGhpcyBtZXRob2QgaGVyZSwgYnV0IGFsd2F5cyBpZ25vcmUg dGhlIGVycm9yLgo+IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBpbml0IGZhaWxzPyB3aWxsIHRoZSAn cmVwbGFjZV9jb25maWcnIHBhbmljIGxhdGVyPwo+ICh0aGF0IHdvdWxkIGJlIHZlcnkgYmFkPykK PiAKPiBpIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBzcGxpdCB0aGlzIG91dCBpbnRvIGl0 J3Mgb3duIHBhdGNoCj4gd2l0aCBhIGdvb2QgcmVhc29uaW5nIHdoeSB0aGUgZXJyb3IgaXMgc2Fm ZSB0byBiZSBpZ25vcmVkIChvciBub3QpCj4gCj4gSU1ITyBpZiB0aGUgaW5pdCBmYWlscywgd2Ug Y2Fubm90IGNvbnRpbnVlIGFueXdheSwgZS5nLgo+IGluIHRoZSBtYWluIGZ1bmN0aW9uIG9mIHRo ZSBiYWNrdXAtcHJveHkgd2UgZmFpbCBpZsKgIGBiYWNrdXBfdXNlcigpYCBmYWlscwo+IAo+PiDC oMKgwqDCoMKgIGNvbmZpZzo6Y3JlYXRlX2NvbmZpZ2RpcigpPzsKPj4gwqDCoMKgwqDCoCBjb25m aWc6OnVwZGF0ZV9zZWxmX3NpZ25lZF9jZXJ0KGZhbHNlKT87Cj4+IGRpZmYgLS1naXQgYS9zcmMv YmluL3Byb3htb3gtYmFja3VwLXByb3h5LnJzIGIvc3JjL2Jpbi9wcm94bW94LWJhY2t1cC0gCj4+ IHByb3h5LnJzCj4+IGluZGV4IGNlMWJlMWMwLi5lYjdkYTBlNCAxMDA2NDQKPj4gLS0tIGEvc3Jj L2Jpbi9wcm94bW94LWJhY2t1cC1wcm94eS5ycwo+PiArKysgYi9zcmMvYmluL3Byb3htb3gtYmFj a3VwLXByb3h5LnJzCj4+IEBAIC0xODEsNiArMTgxLDggQEAgYXN5bmMgZm4gZ2V0X2luZGV4X2Z1 dHVyZShlbnY6IFJlc3RFbnZpcm9ubWVudCwgCj4+IHBhcnRzOiBQYXJ0cykgLT4gUmVzcG9uc2U8 Qm9keT4KPj4gwqAgYXN5bmMgZm4gcnVuKCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiDCoMKg wqDCoMKgIGluaXRfbG9nZ2VyKCJQQlNfTE9HIiwgTGV2ZWxGaWx0ZXI6OklORk8pPzsKPj4gK8Kg wqDCoCBsZXQgXyA9IHByb3htb3hfYmFja3VwOjp0b29sczo6aW5pdF9wcm9kdWN0X2NvbmZpZygp Owo+PiArCj4+IMKgwqDCoMKgwqAgcHJveG1veF9iYWNrdXA6OmF1dGhfaGVscGVyczo6c2V0dXBf YXV0aF9jb250ZXh0KGZhbHNlKTsKPj4gwqDCoMKgwqDCoCBwcm94bW94X2JhY2t1cDo6c2VydmVy Ojpub3RpZmljYXRpb25zOjppbml0KCk/Owo+PiDCoMKgwqDCoMKgIG1ldHJpY19jb2xsZWN0aW9u Ojppbml0KCk/Owo+PiBkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wcm94bW94LXRhcGUucnMgYi9zcmMv YmluL3Byb3htb3gtdGFwZS5ycwo+PiBpbmRleCA4ZTg1ODRiMy4uOGRlOTRhZjAgMTAwNjQ0Cj4+ IC0tLSBhL3NyYy9iaW4vcHJveG1veC10YXBlLnJzCj4+ICsrKyBiL3NyYy9iaW4vcHJveG1veC10 YXBlLnJzCj4+IEBAIC0xLDYgKzEsOCBAQAo+PiDCoCB1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFz aE1hcDsKPj4gwqAgdXNlIGFueWhvdzo6e2JhaWwsIGZvcm1hdF9lcnIsIEVycm9yfTsKPj4gK3Vz ZSBwYnNfYXBpX3R5cGVzOjpDSEFOR0VSX05BTUVfU0NIRU1BX0FVVE9NQVRJQ19EUklWRV9BU0lH Tk1FTlQ7Cj4+ICt1c2UgcGJzX2NvbmZpZzo6ZHJpdmU6OmNvbXBsZXRlX2NoYW5nZXJfbmFtZTsK Pj4gwqAgdXNlIHNlcmRlX2pzb246Ontqc29uLCBWYWx1ZX07Cj4+IMKgIHVzZSBwcm94bW94X2h1 bWFuX2J5dGU6Okh1bWFuQnl0ZTsKPj4gQEAgLTIxNCw2ICsyMTYsMTAgQEAgYXN5bmMgZm4gZWpl Y3RfbWVkaWEobXV0IHBhcmFtOiBWYWx1ZSkgLT4gCj4+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzY2hlbWE6IERSSVZFX05BTUVfU0NI RU1BLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wdGlvbmFsOiB0cnVl LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjaGFuZ2VyOiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2NoZW1h OiBDSEFOR0VSX05BTUVfU0NIRU1BX0FVVE9NQVRJQ19EUklWRV9BU0lHTk1FTlQsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3B0aW9uYWw6IHRydWUsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJsYWJlbC10ZXh0 Ijogewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjaGVtYTogTUVESUFf TEFCRUxfU0NIRU1BLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiBAQCAtMjMw LDExICsyMzYsMjUgQEAgYXN5bmMgZm4gbG9hZF9tZWRpYShtdXQgcGFyYW06IFZhbHVlKSAtPiAK Pj4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiDCoMKgwqDCoMKgIGxldCAoY29uZmlnLCBfZGlnZXN0 KSA9IHBic19jb25maWc6OmRyaXZlOjpjb25maWcoKT87Cj4+IC3CoMKgwqAgbGV0IGRyaXZlID0g ZXh0cmFjdF9kcml2ZV9uYW1lKCZtdXQgcGFyYW0sICZjb25maWcpPzsKPj4gK8KgwqDCoCBsZXQg ZHJpdmUgPSBleHRyYWN0X2RyaXZlX25hbWUoJm11dCBwYXJhbSwgJmNvbmZpZyk7Cj4+ICvCoMKg wqAgbGV0IGNoYW5nZXIgPSBwYXJhbVsiY2hhbmdlciJdLmFzX3N0cigpOwo+PiArCj4+ICvCoMKg wqAgbGV0IHBhdGggPSBtYXRjaCBjaGFuZ2VyIHsKPj4gK8KgwqDCoMKgwqDCoMKgIFNvbWUoY2hh bmdlcikgPT4gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQhKCJhcGkyL2pzb24v dGFwZS9jaGFuZ2VyL3t9L2xvYWQtbWVkaWEiLCBjaGFuZ2VyKQo+PiArwqDCoMKgwqDCoMKgwqAg fQo+PiArwqDCoMKgwqDCoMKgwqAgTm9uZSA9PiB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGxldCBkcml2ZSA9IGRyaXZlPzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9ybWF0ISgi YXBpMi9qc29uL3RhcGUvZHJpdmUve30vbG9hZC1tZWRpYSIsIGRyaXZlKQo+PiArwqDCoMKgwqDC oMKgwqAgfQo+PiArwqDCoMKgIH07Cj4gCj4gaGVyZSB5b3UgY291bGQgaW5zdGVhZCBkbyB0aGUg Zm9sbG93aW5nOgo+IAo+IGxldCBwYXRoID0gbWF0Y2ggKGNoYW5nZXIsIGRyaXZlKSB7Cj4gIMKg wqAgKFNvbWUoY2hhbmdlciksIE5vbmUpID0+IC8vIGNoYW5nZXIgcGF0aAo+ICDCoMKgIChOb25l LCBTb21lKGRyaXZlKSkgPT4gLy8gZHJpdmUgcGF0aAo+ICDCoMKgIF8gPT4gLy8gZmFpbCB3aXRo IGVycm9yIHRoYXQgZXhhY3RseSBvbmUgb2YgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHNldAo+IH07 Cj4gCj4gaW4geW91ciBjb2RlLCBpIGNhbiBnaXZlIGJvdGgsIGJ1dCBpdCB3aWxsIGF1dG9kZXRl Y3QgdGhlIGRyaXZlIGV2ZW4gaWYKPiBnaXZlbiBleHBsaWNpdGx5IHdoZW4gdGhlIGNoYW5nZXIg aXMgZ2l2ZW4sIHdoaWNoIG1pZ2h0IGJlIGNvbmZ1c2luZwo+IGZvciB1c2Vycwo+IAo+PiArCj4+ ICvCoMKgwqAgaWYgbGV0IFNvbWUocGFyYW0pID0gcGFyYW0uYXNfb2JqZWN0X211dCgpIHsKPj4g K8KgwqDCoMKgwqDCoMKgIHBhcmFtLnJlbW92ZSgiY2hhbmdlciIpOwo+PiArwqDCoMKgIH0KPj4g wqDCoMKgwqDCoCBsZXQgY2xpZW50ID0gY29ubmVjdF90b19sb2NhbGhvc3QoKT87Cj4+IC3CoMKg wqAgbGV0IHBhdGggPSBmb3JtYXQhKCJhcGkyL2pzb24vdGFwZS9kcml2ZS97fS9sb2FkLW1lZGlh IiwgZHJpdmUpOwo+PiDCoMKgwqDCoMKgIGxldCByZXN1bHQgPSBjbGllbnQucG9zdCgmcGF0aCwg U29tZShwYXJhbSkpLmF3YWl0PzsKPj4gwqDCoMKgwqDCoCB2aWV3X3Rhc2tfcmVzdWx0KCZjbGll bnQsIHJlc3VsdCwgJm91dHB1dF9mb3JtYXQpLmF3YWl0PzsKPj4gQEAgLTI3Niw2ICsyOTYsMTAg QEAgYXN5bmMgZm4gZXhwb3J0X21lZGlhKG11dCBwYXJhbTogVmFsdWUpIC0+IAo+PiBSZXN1bHQ8 KCksIEVycm9yPiB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2NoZW1h OiBEUklWRV9OQU1FX1NDSEVNQSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBvcHRpb25hbDogdHJ1ZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhbmdlcjogewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNjaGVtYTogQ0hBTkdFUl9OQU1FX1NDSEVNQV9BVVRPTUFUSUNfRFJJVkVfQVNJ R05NRU5ULAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wdGlvbmFsOiB0cnVl LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAic291cmNlLXNsb3QiOiB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGVzY3JpcHRpb246ICJTb3VyY2Ugc2xvdCBudW1iZXIuIiwKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0eXBlOiB1NjQsCj4+IEBAIC0yODgsMTEgKzMxMiwyNSBAQCBh c3luYyBmbiBleHBvcnRfbWVkaWEobXV0IHBhcmFtOiBWYWx1ZSkgLT4gCj4+IFJlc3VsdDwoKSwg RXJyb3I+IHsKPj4gwqAgYXN5bmMgZm4gbG9hZF9tZWRpYV9mcm9tX3Nsb3QobXV0IHBhcmFtOiBW YWx1ZSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiDCoMKgwqDCoMKgIGxldCAoY29uZmlnLCBf ZGlnZXN0KSA9IHBic19jb25maWc6OmRyaXZlOjpjb25maWcoKT87Cj4+IC3CoMKgwqAgbGV0IGRy aXZlID0gZXh0cmFjdF9kcml2ZV9uYW1lKCZtdXQgcGFyYW0sICZjb25maWcpPzsKPj4gK8KgwqDC oCBsZXQgZHJpdmUgPSBleHRyYWN0X2RyaXZlX25hbWUoJm11dCBwYXJhbSwgJmNvbmZpZyk7Cj4+ ICvCoMKgwqAgbGV0IGNoYW5nZXIgPSBwYXJhbVsiY2hhbmdlciJdLmFzX3N0cigpOwo+PiArCj4+ ICvCoMKgwqAgbGV0IHBhdGggPSBtYXRjaCBjaGFuZ2VyIHsKPj4gK8KgwqDCoMKgwqDCoMKgIFNv bWUoY2hhbmdlcikgPT4gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQhKCJhcGky L2pzb24vdGFwZS9jaGFuZ2VyL3t9L2xvYWQtc2xvdCIsIGNoYW5nZXIpCj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBOb25lID0+IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbGV0IGRyaXZlID0gZHJpdmU/Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3Jt YXQhKCJhcGkyL2pzb24vdGFwZS9kcml2ZS97fS9sb2FkLXNsb3QiLCBkcml2ZSkKPj4gK8KgwqDC oMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Owo+IAo+IHRoZSBzYW1lIGhlcmUKPiAKPj4gKwo+PiAr wqDCoMKgIGlmIGxldCBTb21lKHBhcmFtKSA9IHBhcmFtLmFzX29iamVjdF9tdXQoKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBwYXJhbS5yZW1vdmUoImNoYW5nZXIiKTsKPj4gK8KgwqDCoCB9Cj4+IMKg wqDCoMKgwqAgbGV0IGNsaWVudCA9IGNvbm5lY3RfdG9fbG9jYWxob3N0KCk/Owo+PiAtwqDCoMKg IGxldCBwYXRoID0gZm9ybWF0ISgiYXBpMi9qc29uL3RhcGUvZHJpdmUve30vbG9hZC1zbG90Iiwg ZHJpdmUpOwo+PiDCoMKgwqDCoMKgIGNsaWVudC5wb3N0KCZwYXRoLCBTb21lKHBhcmFtKSkuYXdh aXQ/Owo+PiDCoMKgwqDCoMKgIE9rKCgpKQo+PiBAQCAtMTA5MSwxMyArMTEyOSwxNSBAQCBmbiBt YWluKCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDbGlDb21tYW5kOjpuZXcoJkFQ SV9NRVRIT0RfTE9BRF9NRURJQSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAuYXJnX3BhcmFtKCZbImxhYmVsLXRleHQiXSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAuY29tcGxldGlvbl9jYigiZHJpdmUiLCBjb21wbGV0ZV9kcml2ZV9uYW1lKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5jb21wbGV0aW9uX2NiKCJjaGFuZ2Vy IiwgY29tcGxldGVfY2hhbmdlcl9uYW1lKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5jb21wbGV0aW9uX2NiKCJsYWJlbC10ZXh0IiwgCj4+IGNvbXBsZXRlX21lZGlhX2xh YmVsX3RleHQpLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg Lmluc2VydCgKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImxvYWQtbWVkaWEtZnJvbS1z bG90IiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ2xpQ29tbWFuZDo6bmV3KCZBUElf TUVUSE9EX0xPQURfTUVESUFfRlJPTV9TTE9UKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC5hcmdfcGFyYW0oJlsic291cmNlLXNsb3QiXSkKPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAuY29tcGxldGlvbl9jYigiZHJpdmUiLCBjb21wbGV0ZV9kcml2ZV9u YW1lKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuY29tcGxldGlvbl9jYigi ZHJpdmUiLCBjb21wbGV0ZV9kcml2ZV9uYW1lKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5jb21wbGV0aW9uX2NiKCJjaGFuZ2VyIiwgY29tcGxldGVfY2hhbmdlcl9uYW1lKSwK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5pbnNlcnQoCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJ1bmxvYWQiLAo+PiBkaWZmIC0tZ2l0IGEvc3Jj L3RhcGUvY2hhbmdlci9tb2QucnMgYi9zcmMvdGFwZS9jaGFuZ2VyL21vZC5ycwo+PiBpbmRleCAx OGVhMGY0Ni4uOGUzZmYwZjcgMTAwNjQ0Cj4+IC0tLSBhL3NyYy90YXBlL2NoYW5nZXIvbW9kLnJz Cj4+ICsrKyBiL3NyYy90YXBlL2NoYW5nZXIvbW9kLnJzCj4+IEBAIC0yNzMsNiArMjczLDE3IEBA IHB1YiB0cmFpdCBNZWRpYUNoYW5nZSB7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICsvLy8g VXBkYXRlcyB0aGUgZHJpdmUncyBsYXN0IHVzYWdlIHRpbWUgdG8gbm93Lgo+PiArcHViKHN1cGVy KSBmbiB1cGRhdGVfZHJpdmVfdXNhZ2UoZHJpdmU6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+ IHsKPj4gK8KgwqDCoCBsZXQgX2xvY2sgPSBjcmF0ZTo6dGFwZTo6ZHJpdmVfaW5mbzo6bG9jaygp PzsKPj4gKwo+PiArwqDCoMKgIGxldCBtdXQgZHJpdmVzX2luZm8gPSBjcmF0ZTo6dGFwZTo6ZHJp dmVfaW5mbzo6Z2V0X2RyaXZlc19pbmZvKCk/Owo+PiArCj4+ICvCoMKgwqAgbGV0IG5vdyA9IHBy b3htb3hfdGltZTo6ZXBvY2hfaTY0KCk7Cj4+ICvCoMKgwqAgZHJpdmVzX2luZm8uZHJpdmVzLmVu dHJ5KGRyaXZlLmludG8oKSkub3JfZGVmYXVsdCgpLmxhc3RfdXNhZ2UgPSAKPj4gbm93Owo+PiAr wqDCoMKgIGNyYXRlOjp0YXBlOjpkcml2ZV9pbmZvOjpzYXZlX2NvbmZpZygmZHJpdmVzX2luZm8p Cj4+ICt9Cj4+ICsKPj4gwqAgY29uc3QgVVNFX01UWDogYm9vbCA9IGZhbHNlOwo+PiDCoCBpbXBs IFNjc2lNZWRpYUNoYW5nZSBmb3IgU2NzaVRhcGVDaGFuZ2VyIHsKPj4gQEAgLTQyMyw3ICs0MzQs MTMgQEAgaW1wbCBNZWRpYUNoYW5nZSBmb3IgTXR4TWVkaWFDaGFuZ2VyIHsKPj4gwqDCoMKgwqDC oCB9Cj4+IMKgwqDCoMKgwqAgZm4gbG9hZF9tZWRpYV9mcm9tX3Nsb3QoJm11dCBzZWxmLCBzbG90 OiB1NjQpIC0+IAo+PiBSZXN1bHQ8TXR4U3RhdHVzLCBFcnJvcj4gewo+PiAtwqDCoMKgwqDCoMKg wqAgc2VsZi5jb25maWcubG9hZF9zbG90KHNsb3QsIHNlbGYuZHJpdmVfbnVtYmVyKCkpCj4+ICvC oMKgwqDCoMKgwqDCoCBsZXQgc3RhdHVzID0gc2VsZi5jb25maWcubG9hZF9zbG90KHNsb3QsIHNl bGYuZHJpdmVfbnVtYmVyKCkpPzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgbGV0IEVycihl cnIpID0gdXBkYXRlX2RyaXZlX3VzYWdlKHNlbGYuZHJpdmVfbmFtZSgpKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGxvZzo6d2FybiEoImNvdWxkIG5vdCB1cGRhdGUgZHJpdmUgdXNhZ2U6 IHtlcnJ9Iik7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIE9r KHN0YXR1cykKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgZm4gdW5sb2FkX21lZGlhKCZt dXQgc2VsZiwgdGFyZ2V0X3Nsb3Q6IE9wdGlvbjx1NjQ+KSAtPiAKPj4gUmVzdWx0PE10eFN0YXR1 cywgRXJyb3I+IHsKPj4gZGlmZiAtLWdpdCBhL3NyYy90YXBlL2RyaXZlL3ZpcnR1YWxfdGFwZS5y cyBiL3NyYy90YXBlL2RyaXZlLyAKPj4gdmlydHVhbF90YXBlLnJzCj4+IGluZGV4IDg2NmU0ZDMy Li4yMTNmMTdmZSAxMDA2NDQKPj4gLS0tIGEvc3JjL3RhcGUvZHJpdmUvdmlydHVhbF90YXBlLnJz Cj4+ICsrKyBiL3NyYy90YXBlL2RyaXZlL3ZpcnR1YWxfdGFwZS5ycwo+PiBAQCAtNTY3LDcgKzU2 NywxMyBAQCBpbXBsIE1lZGlhQ2hhbmdlIGZvciBWaXJ0dWFsVGFwZUhhbmRsZSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCB9Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5zdG9yZV9zdGF0dXMo JnN0YXR1cyk/Owo+PiAtwqDCoMKgwqDCoMKgwqAgc2VsZi5zdGF0dXMoKQo+PiArwqDCoMKgwqDC oMKgwqAgbGV0IHN0YXR1cyA9IHNlbGYuc3RhdHVzKCk/Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oCBpZiBsZXQgRXJyKGVycikgPSAKPj4gY3JhdGU6OnRhcGU6OmNoYW5nZXI6OnVwZGF0ZV9kcml2 ZV91c2FnZShzZWxmLmRyaXZlX25hbWUoKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs b2c6Ondhcm4hKCJjb3VsZCBub3QgdXBkYXRlIGRyaXZlIHVzYWdlOiB7ZXJyfSIpOwo+PiArwqDC oMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBPayhzdGF0dXMpCj4+IMKgwqDC oMKgwqAgfQo+PiDCoMKgwqDCoMKgIGZuIHVubG9hZF9tZWRpYSgmbXV0IHNlbGYsIF90YXJnZXRf c2xvdDogT3B0aW9uPHU2ND4pIC0+IAo+PiBSZXN1bHQ8TXR4U3RhdHVzLCBFcnJvcj4gewo+PiBk aWZmIC0tZ2l0IGEvc3JjL3RhcGUvZHJpdmVfaW5mby5ycyBiL3NyYy90YXBlL2RyaXZlX2luZm8u cnMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAuLmEwYzJmODM2Cj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvc3JjL3RhcGUvZHJpdmVfaW5mby5ycwo+PiBAQCAtMCww ICsxLDUxIEBACj4+ICsvLyEgU2VyaWFsaXplL2Rlc2VyaWFsaXplIHRwYWUgZHJpdmUgaW5mbyAo ZS5nLiB1c2VmdWwgZm9yIHN0YXRpc3RpY3MpCj4+ICsvLyEKPj4gKy8vISBUaGlzIGNhbiBiZSB1 c2VkIHRvIHN0b3JlIGEgc3RhdGUgb3ZlciBhIGxvbmdlciBwZXJpb2Qgb2YgdGltZSAKPj4gKGUu Zy4gbGFzdCB0YXBlIGRyaXZlIHVzYWdlKS4KPj4gKwo+PiArdXNlIHNlcmRlOjp7U2VyaWFsaXpl LCBEZXNlcmlhbGl6ZX07Cj4+ICt1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFzaE1hcDsKPj4gK3Vz ZSBhbnlob3c6OkVycm9yOwo+PiArdXNlIHByb3htb3hfcHJvZHVjdF9jb25maWc6OkFwaUxvY2tH dWFyZDsKPj4gKwo+PiArLy8vIERyaXZlIGluZm8gZmlsZSBuYW1lCj4+ICtwdWIgY29uc3QgRFJJ VkVfSU5GT19GSUxFTkFNRTogJnN0ciA9IGNvbmNhdCEgCj4+IChwYnNfYnVpbGRjZmc6OlBST1hN T1hfQkFDS1VQX1NUQVRFX0RJUl9NISgpLCAiL3RhcGVfZHJpdmVfaW5mby5qc29uIik7Cj4+ICsv Ly8gTG9jayBmaWxlIG5hbWUgKHVzZWQgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcykKPj4g K3B1YiBjb25zdCBEUklWRV9JTkZPX0xPQ0tGSUxFOiAmc3RyID0gY29uY2F0ISAKPj4gKHBic19i dWlsZGNmZzo6UFJPWE1PWF9CQUNLVVBfU1RBVEVfRElSX00hKCksIAo+PiAiLy50YXBlX2RyaXZl X2luZm8uanNvbi5sb2NrIik7Cj4+ICsKPj4gKyNbZGVyaXZlKFNlcmlhbGl6ZSwgRGVzZXJpYWxp emUsIERlZmF1bHQpXQo+PiArcHViIHN0cnVjdCBTaW5nbGVEcml2ZUluZm8gewo+PiArwqDCoMKg ICNbc2VyZGUod2l0aCA9ICJwcm94bW94X3NlcmRlOjplcG9jaF9hc19yZmMzMzM5IildCj4+ICvC oMKgwqAgcHViIGxhc3RfdXNhZ2U6IGk2NCwKPj4gK30KPj4gKwo+PiArI1tkZXJpdmUoU2VyaWFs aXplLCBEZXNlcmlhbGl6ZSwgRGVmYXVsdCldCj4+ICtwdWIgc3RydWN0IERyaXZlc0luZm8gewo+ PiArwqDCoMKgIHB1YiBkcml2ZXM6IEhhc2hNYXA8U3RyaW5nLCBTaW5nbGVEcml2ZUluZm8+LAo+ PiArfQo+IAo+IGFzIHNhaWQgYWJvdmUsIHRoaXMgd291bGQgcHJvYmFibHkgbW9yZSBlY29ub21p YyBpZiBpdCB3ZXJlIGp1c3QgYSBsaXN0Cj4gCj4gbWF5YmUgYSBgVmVjPChTdHJpbmcsIGk2NCk+ YCBzb3J0ZWQgYnkgdGhlIGk2NAo+IAo+IGFsc28gbm90IGEgc3VwZXIgZmFuIG9mIHRoZSBuYW1l IGBEcml2ZXNJbmZvYCBvciBgU2luZ2xlRHJpdmVJbmZvYCBzaW5jZSAKPiBpdCBkb2VzIG5vdCBy ZWFsbHkKPiBjb252ZXkgd2hhdCBpdCBkb2VzLiAoRS5nLiBJJ2QgaGF2ZSBleHBlY3RlZCBpdCB0 byBoYXZlIG11Y2ggbW9yZSBpbmZvIAo+IHRoYW4ganVzdAo+IHRoZSBsYXN0IHVzYWdlKQo+IAo+ IE1heWJlIGNhbGwgaXQgc29tZXRoaW5nIGxpa2UgJ0RyaXZlc0xhc3RVc2VkJyBmb3Igbm93LCBh bmQgaWYgd2Ugc2VlIHdlIGNhbgo+IGFkZCBtb3JlIGluZm9ybWF0aW9uLCB3ZSBjYW4gc3RpbGwg dXBkYXRlIHRoZSBuYW1lLgo+IChUaG91Z2ggSSdtIG5vdCB0aGUgYmVzdCBhdCBuYW1pbmcsIHNv IG1heWJlIHNvbWVvbmUgZWxzZSB3YW50cyB0byBjaGltZSAKPiBpbiBvbiB0aGlzKQo+IAoKSSB0 aG91Z2h0IEkgY291bGQga2VlcCB0aGUgZmlsZSBhbmQgbmFtZSByYXRoZXIgZ2VuZXJhbCwgYXMg d2UgbWlnaHQgYWRkIAptb3JlIHRvIGl0IGluIHRoZSBmdXR1cmUgLSBzZWUgbXkgY29tbWVudCBh Ym92ZS4gT2YgY291cnNlLCBJIGNhbiBjaGFuZ2UgCml0LCBpZiBkZXNpcmVkIDopCgo+PiArCj4+ ICsvLy8gR2V0IGV4Y2x1c2l2ZSBsb2NrCj4+ICtwdWIgZm4gbG9jaygpIC0+IFJlc3VsdDxBcGlM b2NrR3VhcmQsIEVycm9yPiB7Cj4+ICvCoMKgwqAgcHJveG1veF9wcm9kdWN0X2NvbmZpZzo6b3Bl bl9hcGlfbG9ja2ZpbGUoRFJJVkVfSU5GT19MT0NLRklMRSwgCj4+IE9wdGlvbjo6Tm9uZSwgdHJ1 ZSkKPj4gK30KPj4gKwo+PiArLy8vIFJlYWQgYW5kIHBhcnNlIHRoZSBkcml2ZSBpbmZvIGZpbGUK Pj4gK3B1YiBmbiBnZXRfZHJpdmVzX2luZm8oKSAtPiBSZXN1bHQ8RHJpdmVzSW5mbywgRXJyb3I+ IHsKPj4gK8KgwqDCoCBsZXQgY29udGVudCA9Cj4+ICsgICAgICAgIAo+PiBwcm94bW94X3N5czo6 ZnM6OmZpbGVfcmVhZF9vcHRpb25hbF9zdHJpbmcoRFJJVkVfSU5GT19GSUxFTkFNRSk/Owo+PiAr Cj4+ICvCoMKgwqAgbWF0Y2ggY29udGVudCB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBTb21lKGNvbnRl bnQpID0+IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHJlc3VsdCA9IHNlcmRlX2pz b246OmZyb21fc3RyOjo8RHJpdmVzSW5mbz4oJmNvbnRlbnQpPzsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgT2socmVzdWx0KQo+PiArwqDCoMKgwqDCoMKgwqAgfSwKPj4gK8KgwqDCoMKgwqDC oMKgIE5vbmUgPT4gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPayhEcml2ZXNJbmZvOjpk ZWZhdWx0KCkpCj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+ ICsvLy8gU2F2ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlCj4+ICtwdWIgZm4gc2F2ZV9jb25maWco ZGF0YTogJkRyaXZlc0luZm8pIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gK8KgwqDCoCBsZXQg anNvbiA9IHNlcmRlX2pzb246OnRvX3N0cmluZyhkYXRhKT87Cj4+ICvCoMKgwqAgcHJveG1veF9w cm9kdWN0X2NvbmZpZzo6cmVwbGFjZV9jb25maWcoRFJJVkVfSU5GT19GSUxFTkFNRSwgCj4+IGpz b24uYXNfYnl0ZXMoKSkKPj4gK30KPj4gZGlmZiAtLWdpdCBhL3NyYy90YXBlL21vZC5ycyBiL3Ny Yy90YXBlL21vZC5ycwo+PiBpbmRleCBmMjc2Zjk0OC4uOGI4NzE1MmQgMTAwNjQ0Cj4+IC0tLSBh L3NyYy90YXBlL21vZC5ycwo+PiArKysgYi9zcmMvdGFwZS9tb2QucnMKPj4gQEAgLTIwLDYgKzIw LDcgQEAgcHViIHVzZSBpbnZlbnRvcnk6Oio7Cj4+IMKgIHB1YiBtb2QgY2hhbmdlcjsKPj4gwqAg cHViIG1vZCBkcml2ZTsKPj4gK3B1YiBtb2QgZHJpdmVfaW5mbzsKPj4gwqAgcHViIG1vZCBlbmNy eXB0aW9uX2tleXM7Cj4+IMKgIG1vZCBtZWRpYV9wb29sOwo+PiBkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL21vZC5ycyBiL3NyYy90b29scy9tb2QucnMKPj4gaW5kZXggMzIyODk0ZGQuLjExZmIyODIx IDEwMDY0NAo+PiAtLS0gYS9zcmMvdG9vbHMvbW9kLnJzCj4+ICsrKyBiL3NyYy90b29scy9tb2Qu cnMKPj4gQEAgLTYxLDMgKzYxLDEwIEBAIHB1YiBmbiBzZXR1cF9zYWZlX3BhdGhfZW52KCkgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RkOjplbnY6OnJlbW92ZV92YXIobmFtZSk7Cj4+IMKgwqDC oMKgwqAgfQo+PiDCoCB9Cj4+ICsKPj4gK3B1YiBmbiBpbml0X3Byb2R1Y3RfY29uZmlnKCkgLT4g UmVzdWx0PCgpLCBFcnJvcj4gewo+IAo+IGxpa2UgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGluIHRo aXMgZmlsZSwgYSBzaG9ydCBjb21tZW50IHdvdWxkIGJlIG5pY2UsCj4gZXZlbiBpZiBpdCdzIGp1 c3QgYSByZWZlcmVuY2UgdG8gdGhlIGBwcm94bW94X3Byb2R1Y3RfY29uZmlnYCBjcmF0ZQo+IAo+ PiArwqDCoMKgIGxldCBiYWNrdXBfdXNlciA9IHBic19jb25maWc6OmJhY2t1cF91c2VyKCk/Owo+ PiArwqDCoMKgIGxldCByb290X3VzZXIgPSAKPj4gbml4Ojp1bmlzdGQ6OlVzZXI6OmZyb21fdWlk KG5peDo6dW5pc3RkOjpST09UKT8uZXhwZWN0KCJjb3VsZCBub3QgZmluZCAKPj4gcm9vdCB1c2Vy Iik7Cj4gCj4gdGhpcyBzZWVtcyBpbmNvbnNpc3RlbnQuCj4gCj4gZm9yIHR3byB0aGluZ3Mgd2Ug YnViYmxlIHRoZSBlcnJvciB1cCwgYnV0IGEgbWlzc2luZyByb290IHVzZXIgcGFuaWNzCj4gCj4g SSdkIHByb2JhYmx5IG1ha2UgdGhhdCBpbnRvIGFuIGVycm9yIHRoYXQgYnViYmxlcyB1cCB0b28K PiAKPj4gK8KgwqDCoCBwcm94bW94X3Byb2R1Y3RfY29uZmlnOjppbml0KGJhY2t1cF91c2VyLCBy b290X3VzZXIpOwo+PiArwqDCoMKgIE9rKCgpKQo+PiArfQo+IAo+IAo+PiBkaWZmIC0tZ2l0IGEv d3d3L3RhcGUvQ2hhbmdlclN0YXR1cy5qcyBiL3d3dy90YXBlL0NoYW5nZXJTdGF0dXMuanMKPj4g aW5kZXggZTE4YWY5MGUuLjBhODc1Nzc5IDEwMDY0NAo+PiAtLS0gYS93d3cvdGFwZS9DaGFuZ2Vy U3RhdHVzLmpzCj4+ICsrKyBiL3d3dy90YXBlL0NoYW5nZXJTdGF0dXMuanMKPj4gQEAgLTIyMiwx MiArMjIyLDE3IEBAIEV4dC5kZWZpbmUoJ1BCUy5UYXBlTWFuYWdlbWVudC5DaGFuZ2VyU3RhdHVz Jywgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdXRvU2hvdzogdHJ1ZSwKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3VibWl0VGV4dDogZ2V0dGV4dCgnT0snKSwKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGl0bGU6IGdldHRleHQoJ0xvYWQgTWVkaWEgaW50byBE cml2ZScpLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1cmw6IGAvYXBpMi9leHRqcy90YXBl L2RyaXZlYCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXJsOiBgL2FwaTIvZXh0anMvdGFw ZWAsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1ldGhvZDogJ1BPU1QnLAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdWJtaXRVcmw6IGZ1bmN0aW9uKHVybCwgdmFsdWVzKSB7 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxldCBkcml2ZSA9IHZhbHVlcy5kcml2ZTsKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVsZXRlIHZhbHVlcy5kcml2ZTsKPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIGAke3VybH0vJHtlbmNvZGVVUklDb21wb25lbnQoZHJpdmUp fS8ke2FwaUNhbGx9YDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZXQgZHJp dmUgPSB2YWx1ZXMuZHJpdmU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVs ZXRlIHZhbHVlcy5kcml2ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChkcml2ZSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGAke3VybH0vZHJpdmUvIAo+PiAke2VuY29kZVVSSUNvbXBvbmVudChkcml2ZSl9LyR7 YXBpQ2FsbH1gOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYCR7dXJsfS9j aGFuZ2VyLyAKPj4gJHtlbmNvZGVVUklDb21wb25lbnQoY2hhbmdlcil9LyR7YXBpQ2FsbH1gOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiAKPiBuaXQ6IGp1c3Qgc28gd2Ug ZG9uJ3QgaGF2ZSB0b28gbWFueSBwbGFjZXMgd2hlcmUgd2UgY3JlYXRlIHN1Y2ggdXJscywKPiBJ J2QgdHJ5IHRvIGNvbWJpbmUgdGhlbSBpbnRvIG9uZToKPiAKPiBsZXQgdHlwZSA9IGRyaXZlID8g ImRyaXZlIiA6ICJjaGFuZ2VyIjsKPiBsZXQgaXRlbSA9IGRyaXZlID8gZHJpdmUgOiBjaGFuZ2Vy Owo+IAo+IHJldHVybiBgJHt1cmx9LyR7dHlwZX0vJHtlbmNvZGVVUklDb21wb25lbnQoaXRlbSl9 LyR7YXBpQ2FsbH1gOwo+IAo+IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQKPiAKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXRlbXM6 IFsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFiZWwgIT09ICIiID8gewo+PiBAQCAt MjQ4LDYgKzI1Myw5IEBAIEV4dC5kZWZpbmUoJ1BCUy5UYXBlTWFuYWdlbWVudC5DaGFuZ2VyU3Rh dHVzJywgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpZWxkTGFiZWw6 IGdldHRleHQoJ0RyaXZlJyksCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y2hhbmdlcjogY2hhbmdlciwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBu YW1lOiAnZHJpdmUnLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVtcHR5VGV4 dDogZ2V0dGV4dCgnQ2hvb3NlIEF1dG9tYXRpY2FsbHknKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhbGxvd0JsYW5rOiB0cnVlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF1dG9TZWxlY3Q6IGZhbHNlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBdLAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBsaXN0ZW5lcnM6IHsKPiAKPiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxA bGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxt YW4vbGlzdGluZm8vcGJzLWRldmVsCg==