From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-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 089951FF16B for <inbox@lore.proxmox.com>; Thu, 20 Mar 2025 18:39:33 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 89D4188D6; Thu, 20 Mar 2025 18:39:32 +0100 (CET) Message-ID: <9947a9f1-bd50-4ae5-90d9-203dff5b0cb7@proxmox.com> Date: Thu, 20 Mar 2025 18:39:27 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com>, Lukas Wagner <l.wagner@proxmox.com> References: <20250314141225.240768-1-l.wagner@proxmox.com> <20250314141225.240768-6-l.wagner@proxmox.com> Content-Language: de-AT, en-US From: Thomas Lamprecht <t.lamprecht@proxmox.com> Autocrypt: addr=t.lamprecht@proxmox.com; keydata= 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 DrEx In-Reply-To: <20250314141225.240768-6-l.wagner@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.190 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes 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. [qemu.rs, proxmox-datacenter-api.rs, mod.rs, lxc.rs] Subject: Re: [pdm-devel] [PATCH proxmox-datacenter-manager 5/8] remote tasks: add background task for task polling, use new task cache X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> QW0gMTQuMDMuMjUgdW0gMTU6MTIgc2NocmllYiBMdWthcyBXYWduZXI6Cj4gVGhpcyBjb21taXRz IGNoYW5nZXMgdGhlIHJlbW90ZSB0YXNrIG1vZHVsZSBhcyBmb2xsb3dzOgo+IAo+IC0gQWRkIGEg bmV3IGJhY2tncm91bmQgdGFzayBmb3IgcmVndWxhciBwb2xsaW5nIG9mIHRhc2sgZGF0YQo+IElu c3RlYWQgb2YgdHJpZ2dlcmluZyBmZXRjaGluZyBvZiB0YXNrIGRhdGEgZnJvbSB0aGUgYGdldF90 YXNrc2AgZnVuY3Rpb24sCj4gd2hpY2ggaXMgdXN1YWxseSBjYWxsZWQgYnkgYW4gQVBJIGhhbmRs ZXIsIHdlIG1vdmUgdGhlIGZldGNoaW5nIHRvIGEKPiBuZXcgYmFja2dyb3VuZCB0YXNrLiBUaGUg dGFzayBmZXRjaGVzIHRoZSBsYXRlc3QgdGFza3MgZnJvbSBhbGwgcmVtb3Rlcwo+IGFuZCBzdG9y ZXMgdGhlbSBpbiB0aGUgdGFzayBjYWNoZSBpbiByZWd1bGFyIGludGVydmFscyAoMTAgbWludXRl cykuCj4gVGhlIGBnZXRfdGFza3NgIGZ1bmN0aW9uIGl0c2VsZiBvbmx5IHJlYWRzIGZyb20gdGhl IGNhY2hlLgo+IFRoZSBtYWluIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2UgaXMgdGhhdCBmb3Ig bGFyZ2Ugc2V0dXBzLCBmZXRjaGluZwo+IHRhc2tzIGZyb20gYWxsIHJlbW90ZXMgY2FuIHRha2Ug YSAqbG9uZyogdGltZSAoZS5nLiBodW5kcmVkcyBvZiByZW1vdGVzLAo+IGVhY2ggd2l0aCBhID4x MDBtcyBjb25uZWN0aW9uIC0gYWRkcyB1cCB0byBtaW51dGVzIHF1aWNrbHkpLgo+IElmIHdlIGRv IHRoaXMgZnJvbSB3aXRoaW4gYGdldF90YXNrc2AsIHRoZSBBUEkgaGFuZGxlciBjYWxsaW5nIHRo ZQo+IGZ1bmN0aW9uIGlzIGFsc28gYmxvY2tlZCBmb3IgdGhlIGVudGlyZSB0aW1lLgo+IFRoZSBg Z2V0X3Rhc2tzYCBBUEkgaXMgY2FsbGVkIGV2ZXJ5IGNvdXBsZSBvZiBzZWNvbmRzIGJ5IHRoZSBV SSB0aGUgZ2V0Cj4gYSBsaXN0IG9mIHJ1bm5pbmcgcmVtb3RlIHRhc2tzLCBzbyB0aGlzICptdXN0 KiBiZSBxdWljay4KPiAKPiAtIFRyYWNrZWQgdGFza3MgYXJlIGFsc28gcG9sbGVkIGluIHRoZSBz YW1lIGJhY2tncm91bmQgdGFzaywgYnV0IHdpdGgKPiBhIHNob3J0IHBvbGxpbmcgZGVsYXkgKDEw IHNlY29uZHMpLiBJbnN0ZWFkIG9mIHBvbGxpbmcgdGhlIHN0YXR1cyBzcGVjaWZpYwo+IHRyYWNr ZWQgdGFzayBVUElELCB3ZSBzaW1wbHkgZmV0Y2ggKmFsbCogdGFza3Mgc2luY2UgdGhlIHRyYWNr ZWQgdGFzayBzdGFydGVkLgo+IFdoaWxlIHRoaXMgaW5jcmVhc2VkIHRoZSBhbW91bnQgb2YgdHJh bnNtaXR0ZWQgZGF0YSBhIGJpdCBmb3IgdHJhY2tlZCB0YXNrcwo+IHRoYXQgcnVuIGZvciBhIHZl cnkgbG9uZyB0aW1lLCB0aGlzIG5ldyBhcHByb2FjaCBtYWtlIHRoZSB3aG9sZQo+IHRhc2sgdHJh Y2tpbmcgZnVuY3Rpb25hbGl0eSBtdWNoIG1vcmUgZWxlZ2FudDsgaXQgaW50ZWdyYXRlcyBiZXR0 ZXIgd2l0aAo+IHRoZSAncmVndWxhcicgdGFzayBmZXRjaGluZyB3aGljaCBoYXBwZW5zIGluIGxv bmcgaW50ZXJ2YWxzLgo+IAo+IC0gVGFza3MgYXJlIG5vdyBzdG9yZWQgaW4gdGhlIG5ldyBpbXBy b3ZlZCB0YXNrIGNhY2hlIGltcGxlbWVudGF0aW9uLgo+IFRoaXMgc2hvdWxkIG1ha2UgcmV0cmll dmluZyB0YXNrcyBtdWNoIHF1aWNrZXIgYW5kIGF2b2lkcwo+IHVubmVlZGVkIGRpc2sgSU8uCgpU aGUgaGlnaGVyIGxldmVsIGRlc2NyaXB0aW9uIHJlYWRzIGdvb2QgdG8gbWUgYW5kIEkgcGxhbiB0 byB0YWtlIGEgY2xvc2VyCmxvb2ssIGJ1dCB3aGlsZSBhcHBseWluZyB0aGlzIOKAkyB3aXRoIGEg dHJpdmlhbCBtZXJnZSBjb25mbGljdCBpbiB1c2UKc3RhdGVtZW50cyByZXNvbHZlZCBkdWUgdG8g V29sZmdhbmcncyBjbGllbnQgc2VyaWVzIGJlaW5nIGFwcGxpZWQgZWFybGllciDigJMKc29tZSBz bWFsbGVyIHRoaW5ncyBzdHVjayBhIGJpdCBvdXQgdG8gbWUgd2hlbiBza2ltbWluZyBnaXQgbG9n LCBhIGZldwphcmUgcmF0aGVyIGluIHRoZSBiaWtlIHNoZWQgYXJlYSB0aG91Z2gsIHNlZSBiZWxv dy4KCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNv bT4KPiBSZXZpZXdlZC1ieTogTWF4IENhcnJhcmEgPG0uY2FycmFyYUBwcm94bW94LmNvbT4KCldo aWxlIEkgY2VydGFpbmx5IGVuY291cmFnZSB3b3JraW5nIHRvZ2V0aGVyIEknbSBub3QgYSByZWFs bHkgaHVnZSBmYW4Kb2YgYmxpbmQgcmV2aWV3ICh0YWdzKSB3aGVyZSBvbmUgY2Fubm90IHNlZSBh bnkgcmV2aWV3IGNvbW1lbnRzIGF0IGFsbCwKaXQncyBhIGxvc3MgaW4gaW5mb3JtYXRpb24gYW5k IGNhbiBhbHNvIHJlc3VsdCBpbiBzb21lIGluY3JlYXNlZCBvdmVyaGVhZC4KCj4gLS0tCj4gIHNl cnZlci9zcmMvYXBpL3B2ZS9seGMucnMgICAgICAgICAgICAgICAgfCAgMTAgKy0KPiAgc2VydmVy L3NyYy9hcGkvcHZlL21vZC5ycyAgICAgICAgICAgICAgICB8ICAgNCArLQo+ICBzZXJ2ZXIvc3Jj L2FwaS9wdmUvcWVtdS5ycyAgICAgICAgICAgICAgIHwgICA2ICstCj4gIHNlcnZlci9zcmMvYXBp L3JlbW90ZV90YXNrcy5ycyAgICAgICAgICAgfCAgMTEgKy0KPiAgc2VydmVyL3NyYy9iaW4vcHJv eG1veC1kYXRhY2VudGVyLWFwaS5ycyB8ICAgMyArLQo+ICBzZXJ2ZXIvc3JjL3JlbW90ZV90YXNr cy9tb2QucnMgICAgICAgICAgIHwgNzg4ICsrKysrKysrKysrLS0tLS0tLS0tLS0tCj4gIDYgZmls ZXMgY2hhbmdlZCwgMzg4IGluc2VydGlvbnMoKyksIDQzNCBkZWxldGlvbnMoLSkKPiAKCj4gZGlm ZiAtLWdpdCBhL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycyBiL3NlcnZlci9zcmMvcmVt b3RlX3Rhc2tzL21vZC5ycwo+IGluZGV4IDIwNjJmMmI3Li40OGQ1NDY5NCAxMDA2NDQKPiAtLS0g YS9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy9tb2QucnMKPiArKysgYi9zZXJ2ZXIvc3JjL3JlbW90 ZV90YXNrcy9tb2QucnMKPiBAQCAtMSw2NSArMSwxMDYgQEAKPiAtdXNlIHN0ZDo6ewo+IC0gICAg Y29sbGVjdGlvbnM6OntIYXNoTWFwLCBIYXNoU2V0fSwKPiAtICAgIGZzOjpGaWxlLAo+IC0gICAg cGF0aDo6e1BhdGgsIFBhdGhCdWZ9LAo+IC0gICAgc3luYzo6e0xhenlMb2NrLCBSd0xvY2t9LAo+ IC0gICAgdGltZTo6RHVyYXRpb24sCj4gLX07Cj4gK3VzZSBzdGQ6Ontjb2xsZWN0aW9uczo6SGFz aE1hcCwgcGF0aDo6UGF0aCwgc3luYzo6QXJjLCB0aW1lOjpEdXJhdGlvbn07Cj4gIAo+IC11c2Ug YW55aG93OjpFcnJvcjsKPiArdXNlIGFueWhvdzo6e2Zvcm1hdF9lcnIsIEVycm9yfTsKPiArdXNl IG5peDo6c3lzOjpzdGF0OjpNb2RlOwo+ICB1c2UgcGRtX2FwaV90eXBlczo6ewo+ICAgICAgcmVt b3Rlczo6e1JlbW90ZSwgUmVtb3RlVHlwZX0sCj4gICAgICBSZW1vdGVVcGlkLCBUYXNrRmlsdGVy cywgVGFza0xpc3RJdGVtLCBUYXNrU3RhdGVUeXBlLAo+ICB9Owo+ICB1c2UgcHJveG1veF9zeXM6 OmZzOjpDcmVhdGVPcHRpb25zOwo+ICB1c2UgcHZlX2FwaV90eXBlczo6e0xpc3RUYXNrcywgTGlz dFRhc2tzUmVzcG9uc2UsIExpc3RUYXNrc1NvdXJjZSwgUHZlVXBpZH07Cj4gLXVzZSBzZXJkZTo6 e0Rlc2VyaWFsaXplLCBTZXJpYWxpemV9Owo+IC11c2UgdG9raW86OnRhc2s6OkpvaW5IYW5kbGU7 Cj4gK3VzZSB0YXNrX2NhY2hlOjp7QWRkVGFza3MsIEdldFRhc2tzLCBTdGF0ZSwgVGFza0NhY2hl LCBUYXNrQ2FjaGVJdGVtfTsKPiArdXNlIHRva2lvOjp7c3luYzo6U2VtYXBob3JlLCB0YXNrOjpK b2luU2V0fTsKPiAgCj4gIHVzZSBjcmF0ZTo6e2FwaTo6cHZlLCB0YXNrX3V0aWxzfTsKPiAgCj4g IG1vZCB0YXNrX2NhY2hlOwo+ICAKPiArY29uc3QgUkVNT1RFX1RBU0tTX0RJUjogJnN0ciA9IGNv bmNhdCEocGRtX2J1aWxkY2ZnOjpQRE1fQ0FDSEVfRElSX00hKCksICIvcmVtb3RlLXRhc2tzIik7 Cj4gKwo+ICtjb25zdCBTRUNPTkRTX1BFUl9NSU5VVEU6IHU2NCA9IDYwOwo+ICtjb25zdCBNSU5V VEVTX1BFUl9IT1VSOiB1NjQgPSA2MDsKV2hpbGUgdGVjaG5pY2FsbHkgY29ycmVjdCB0aGlzIHJl YWRzIGxpa2UgYSByYXRlIGFuZCBtYWtlcyBpdCBJTU8gYSBiaXQKaGFyZGVyIHRvIHRlbGwgd2hh dCBpcyBtZWFudCBpbiBiZWxvdyBjYWxjdWxhdGlvbnMuCgpJJ2QgZWl0aGVyIHVzZSBEdXJhdGlv biBmcm9tIHN0ZCwgbGlrZSBlLmcuIER1cmF0aW9uOjpmcm9tX21pbnMoMTApLmFzX3NlY3MoKQph bmQgRHVyYXRpb246OmZyb21faG91cnMoMSkuYXNfc2VjcygpIHJlc3BlY3RpdmVseSBmb3IgUkVH VUxBUl9SRUZSRVNIX1MgYW5kCkNIRUNLX1JPVEFURV9TIGJlbG93IG9yIGp1c3QgNjAgYW5kIDM2 MDAsIHRob3NlIHZhbHVlcyBhcmUgcHJldHR5IG11Y2ggZ2VuZXJhbAprbm93bGVkZ2UsIHdoaWNo IG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgY29uZnVzaW9uIHBvdGVudGlhbCBJIHNlZSBpbiB5b3Vy CnZhcmlhbnQsIGFzIEkgYmFzaWNhbGx5IGV4cGVjdCB0aGF0IHRoaXMgaGFzIHRvIGJlIHNvbWV0 aGluZyBtb3JlIGVsYWJvcmF0ZSBvcgp3aHkgIHdvdWxkIGl0IGdvIGZvciB0aGlzIHNlZW1pbmds eSBjb21wbGV4IHZhcmlhbnQuClRoYXQgc2FpZCwgdXNpbmcgd2hhdCB0aGUgc3RkIGxpYiBhbHJl YWR5IHByb3ZpZGVzIGlzIHRvdGFsbHkgZmluZSBoZXJlLgoKPiArCj4gKy8vLyBUaWNrIHJhdGUg Zm9yIHRoZSByZW1vdGUgdGFzayBmZXRjaGluZyB0YXNrLgo+ICsvLy8gVGhpcyBpcyBhbHNvIHRo ZSByYXRlIGF0IHdoaWNoIHdlIGNoZWNrIG9uIHRyYWNrZWQgdGFza3MuCj4gK2NvbnN0IFRJQ0tf UkFURV9TOiB1NjQgPSAxMDsKPiArCj4gKy8vLyBJbnRlcnZhbCBpbiBzZWNvbmRzIGF0IHdoaWNo IHRvIGZldGNoIHRoZSBuZXdlc3QgdGFza3MgZnJvbSByZW1vdGVzIChpZiB0aGVyZSBpcyBubyB0 cmFja2VkCj4gKy8vLyB0YXNrIGZvciB0aGlzIHJlbW90ZSkuCj4gK2NvbnN0IFJFR1VMQVJfUkVG UkVTSF9TOiB1NjQgPSAxMCAqIFNFQ09ORFNfUEVSX01JTlVURTsKSU1PIGl0IGhhcyBzb21lIHRp bnkgdmFsdWUgdG8gZW5jb2RlIGlmIGl0J3MgYSBwZXJpb2Qgb3IgYSByYXRlIGluIHRoZQpuYW1l LCB3aGlsZSBJIGRvIG5vdCBzZWUgbXVjaCBiZW5lZml0IGluIGhhdmluZyAicmVndWxhciIgaW4g dGhlcmUgKGFsYmVpdApJIGNhbiBzZWUgd2hlcmUgeW91IGNvbWUgZnJvbSB0byB1c2UgdGhhdCBp biB0aGUgbmFtZSkuCgpjb25zdCBUQVNLX1JFRlJFU0hfUEVSSU9EX1M6IHU2NCA9IER1cmF0aW9u Ojpmcm9tX21pbnMoMTApLmFzX3NlY3MoKTsKCm9yIAoKY29uc3QgVEFTS19SRUZSRVNIX1BFUklP RF9TOiB1NjQgPSA2MDsKCm9yIGlmIEknbSBhbHJlYWR5IGJpa2Ugc2hlZGRpbmcgcy9SRUZSRVNI L1BPTEwvIHRvIGJlIHNsaWdodGx5IHNob3J0ZXI6Cgpjb25zdCBUQVNLX1BPTExfUEVSSU9EX1M6 IHU2NCA9IDYwOwoKCj4gKy8vLyBOdW1iZXIgb2YgY3ljbGVzIHVudGlsIGEgcmVndWxhciByZWZy ZXNoLgo+ICtjb25zdCBSRUdVTEFSX1JFRlJFU0hfQ1lDTEVTOiB1NjQgPSBSRUdVTEFSX1JFRlJF U0hfUyAvIFRJQ0tfUkFURV9TOwo+ICsKPiArLy8vIENoZWNrIGlmIHdlIHdhbnQgdG8gcm90YXRl IG9uY2UgZXZlcnkgaG91ci4KPiArY29uc3QgQ0hFQ0tfUk9UQVRFX1M6IHU2NCA9IFNFQ09ORFNf UEVSX01JTlVURSAqIE1JTlVURVNfUEVSX0hPVVI7Cj4gKy8vLyBOdW1iZXIgb2YgY3ljbGVzIGJl Zm9yZSB3ZSB3YW50IHRvIGNoZWNrIGlmIHdlIHNob3VsZCByb3RhdGUgdGhlIHRhc2sgYXJjaGl2 ZXMuCj4gK2NvbnN0IENIRUNLX1JPVEFURV9DWUNMRVM6IHU2NCA9IENIRUNLX1JPVEFURV9TIC8g VElDS19SQVRFX1M7Cj4gKwo+ICsvLy8gUm90YXRlIG9uY2UgdGhlIG1vc3QgcmVjZW50IGFyY2hp dmUgZmlsZSBpcyBhdCBsZWFzdCAyNCBob3VyIG9sZC4KPiArY29uc3QgUk9UQVRFX0FGVEVSX1M6 IHU2NCA9IDI0ICogTUlOVVRFU19QRVJfSE9VUiAqIFNFQ09ORFNfUEVSX01JTlVURTsKV2h5IG5v IEhPVVJTX1BFUl9EQVk/IDtQCgo+ICsKPiArLy8vIEtlZXAgNyBkYXlzIHdvcnRoIG9mIHRhc2tz Lgo+ICtjb25zdCBLRUVQX09MRF9GSUxFUzogdTY0ID0gNzsKPiArCj4gKy8vLyBNYXhpbXVtIG51 bWJlciBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHBlciByZW1vdGUuCj4gK2NvbnN0IENPTk5F Q1RJT05TX1BFUl9QVkVfUkVNT1RFOiB1c2l6ZSA9IDU7Cj4gKy8vLyBNYXhpbXVtIG51bWJlciBv ZiB0b3RhbCBjb25jdXJyZW50IGNvbm5lY3Rpb25zLiBgQ09OTkVDVElPTlNfUEVSX1JFTU9URWAg aXMgdGFrZW4gaW50bwo+ICsvLy8gY29uc2lkZXJhdGlvbiB3aGVuIGFjY291bnRpbmcgZm9yIHRo ZSB0b3RhbCBudW1iZXIgb2YgY29ubmVjdGlvbnMuCj4gKy8vLyBGb3IgaW5zdGFuY2UsIGlmIGBN QVhfQ09OTkVDVElPTlNgIGlzIDIwIGFuZCBgQ09OTkVDVElPTlNfUEVSX1JFTU9URWAgaXMgNSwg d2UgY2FuIGNvbm5lY3QKPiArLy8vIHRvIDQgUFZFIHJlbW90ZXMgaW4gcGFyYWxsZWwuCj4gK2Nv bnN0IE1BWF9DT05ORUNUSU9OUzogdXNpemUgPSAyMDsKPiArCj4gKy8vLyBNYXhpbXVtIG51bWJl ciBvZiB0YXNrcyB0byBmZXRjaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBpbiBvbmUgQVBJIGNhbGwu Cj4gK2NvbnN0IE1BWF9UQVNLU19UT19GRVRDSDogdTY0ID0gNTAwMDsKPiArCgo+ICsKPiArLy8v IFRhc2sgd2hpY2ggaGFuZGxlcyBmZXRjaGluZyByZW1vdGUgdGFza3MgYW5kIHRhc2sgYXJjaGl2 ZSByb3RhdGlvbi4KPiArLy8vIFRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucy4KPiArYXN5bmMg Zm4gcmVtb3RlX3Rhc2tfZmV0Y2hpbmdfdGFzaygpIC0+ICEgewo+ICsgICAgbGV0IG11dCBjeWNs ZSA9IDB1NjQ7Cj4gKyAgICBsZXQgbXV0IGludGVydmFsID0gdG9raW86OnRpbWU6OmludGVydmFs KER1cmF0aW9uOjpmcm9tX3NlY3MoVElDS19SQVRFX1MpKTsKPiArICAgIGludGVydmFsLnJlc2V0 X2F0KHRhc2tfdXRpbHM6Om5leHRfYWxpZ25lZF9pbnN0YW50KFRJQ0tfUkFURV9TKS5pbnRvKCkp Owo+ICsKPiArICAgIC8vIFdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IGNhdGNoaW5nIHVwIHRv IG1pc3NlZCB0aWNrLCB3ZSBqdXN0IHdhbnQKPiArICAgIC8vIGEgc3RlYWR5IHRpY2sgcmF0ZS4K PiArICAgIGludGVydmFsLnNldF9taXNzZWRfdGlja19iZWhhdmlvcih0b2tpbzo6dGltZTo6TWlz c2VkVGlja0JlaGF2aW9yOjpTa2lwKTsKPiArCj4gKyAgICBpZiBsZXQgRXJyKGVycikgPSBpbml0 X2NhY2hlKCkuYXdhaXQgewo+ICsgICAgICAgIGxvZzo6ZXJyb3IhKCJlcnJvciB3aGVuIGluaXRp YWxpemVkIHRhc2sgY2FjaGU6IHtlcnJ9Iik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbG9vcCB7Cj4g KyAgICAgICAgaW50ZXJ2YWwudGljaygpLmF3YWl0Owo+ICsgICAgICAgIGlmIGxldCBFcnIoZXJy KSA9IGRvX3RpY2soY3ljbGUpLmF3YWl0IHsKPiArICAgICAgICAgICAgbG9nOjplcnJvciEoImVy cm9yIHdoZW4gZmV0Y2hpbmcgcmVtb3RlIHRhc2tzOiB7ZXJyfSIpOwo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgLy8gQXQgYSByYXRlIG9mIG9uZSB0aWNrIGV2ZXJ5IDEwcyB3ZSB3cmFwIGFy b3VuZCBpbiAqb25seSogNSB0cmlsbGlvbiB5ZWFycywKPiArICAgICAgICAvLyBiZXR0ZXIgYmUg c2FmZSBhbmQgdXNlIC53cmFwcGluZ19hZGQoMSkgOikKPiArICAgICAgICBjeWNsZSA9IGN5Y2xl LndyYXBwaW5nX2FkZCgxKTsKPiArICAgIH0KPiArfQo+ICsKPiArLy8vIEluaXRpYWxpemUgdGhl IHJlbW90ZSB0YXNrIGNhY2hlIHdpdGggaW5pdGlhbCBhcmNoaXZlIGZpbGVzLCBpbiBjYXNlIHRo ZXJlIGFyZSBub3QKPiArLy8vIGFueSBhcmNoaXZlIGZpbGVzIHlldC4KPiArLy8vCj4gKy8vLyBD cmVhdGVzIGBLRUVQX09MRF9GSUxFU2AgYXJjaGl2ZSBmaWxlcywgd2l0aCBlYWNoIGFyY2hpdmUg ZmlsZSdzIGN1dC1vZmYgdGltZQo+ICsvLy8gc3BhY2VkIGBST1RBVEVfQUZURVJfU2Agc2Vjb25k cyBhcGFydC4KPiArLy8vIFRoaXMgYWxsb3dzIHVzIHRvIGltbWVkaWF0ZWx5IGJhY2tmaWxsIHJl bW90ZSB0YXNrIGhpc3Rvcnkgd2hlbiBzZXR0aW5nIHVwIGEgbmV3IFBETSBpbnN0YW5jZQo+ICsv Ly8gd2l0aG91dCBhbnkgcHJpb3IgdGFzayBhcmNoaXZlIHJvdGF0aW9uLgo+ICthc3luYyBmbiBp bml0X2NhY2hlKCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgdG9raW86OnRhc2s6OnNw YXduX2Jsb2NraW5nKHx8IHsKPiArICAgICAgICBsZXQgY2FjaGUgPSBnZXRfY2FjaGUoKT87Cj4g KyAgICAgICAgY2FjaGUuaW5pdChwcm94bW94X3RpbWU6OmVwb2NoX2k2NCgpLCBLRUVQX09MRF9G SUxFUywgUk9UQVRFX0FGVEVSX1MpPzsKPiArICAgICAgICBPaygoKSkKPiArICAgIH0pCj4gKyAg ICAuYXdhaXQ/Cj4gK30KPiArCj4gKy8vLyBIYW5kbGUgYSBzaW5nbGUgdGltZXIgdGljay4KPiAr Ly8vIFdpbGwgaGFuZGxlIGFyY2hpdmUgZmlsZSByb3RhdGlvbiwgcG9sbGluZyBvZiB0cmFja2Vk IHRhc2tzIGFuZCBmZXRjaGluZyBvciByZW1vdGUgdGFza3MuCj4gK2FzeW5jIGZuIGRvX3RpY2so Y3ljbGU6IHU2NCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgbGV0IGNhY2hlID0gZ2V0 X2NhY2hlKCk/Owo+ICsKPiArICAgIGlmIHNob3VsZF9jaGVja19mb3JfY2FjaGVfcm90YXRpb24o Y3ljbGUpIHsKPiArICAgICAgICBsb2c6OmRlYnVnISgiY2hlY2tpbmcgaWYgcmVtb3RlIHRhc2sg YXJjaGl2ZSBzaG91bGQgYmUgcm90YXRlZCIpOwo+ICsgICAgICAgIGlmIHJvdGF0ZV9jYWNoZShj YWNoZS5jbG9uZSgpKS5hd2FpdD8gewo+ICsgICAgICAgICAgICBsb2c6OmluZm8hKCJyb3RhdGVk IHJlbW90ZSB0YXNrIGFyY2hpdmUiKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg bGV0IHN0YXRlID0gY2FjaGUucmVhZF9zdGF0ZSgpOwo+ICsKPiArICAgIGxldCBtdXQgYWxsX3Rh c2tzID0gSGFzaE1hcDo6bmV3KCk7Cj4gKwo+ICsgICAgbGV0IHNlbWFwaG9yZSA9IEFyYzo6bmV3 KFNlbWFwaG9yZTo6bmV3KE1BWF9DT05ORUNUSU9OUykpOwoKVGFsa2luZyBuYW1lcyB3b3VsZCBi ZSBuaWNlLCB3ZSBnb3QgYSByYXRoZXIgZ2VuZXJpY2FsbHkgbmFtZWQgc2VtYXBob3JlCnZhcmlh YmxlIHR3aWNlIGluIHRoaXMgbW9kdWxlLCBtYXliZSB1c2UgKHJlc3BlY3RpdmVseSk6Cgp0b3Rh bF9jb25uZWN0aW9uX3NlbWFwaG9yZSBvciB0b3RhbF9jb25uZWN0aW9uX2xpbWl0CnBlcl9yZW1v dGVfc2VtYXBob3JlIG9yIHBlcl9yZW1vdGVfbGltaXQKCj4gKyAgICBsZXQgbXV0IGpvaW5fc2V0 ID0gSm9pblNldDo6bmV3KCk7Cj4gKwo+ICsgICAgbGV0IHJlbW90ZXMgPSByZW1vdGVzX3RvX2No ZWNrKGN5Y2xlLCAmc3RhdGUpLmF3YWl0PzsKPiArICAgIGZvciByZW1vdGUgaW4gcmVtb3RlcyB7 Cj4gKyAgICAgICAgbGV0IHNpbmNlID0gZ2V0X2N1dG9mZl90aW1lc3RhbXAoJnJlbW90ZSwgJnN0 YXRlKTsKPiArCj4gKyAgICAgICAgbGV0IHBlcm1pdCA9IGlmIHJlbW90ZS50eSA9PSBSZW1vdGVU eXBlOjpQdmUgewo+ICsgICAgICAgICAgICAvLyBBY3F1aXJlIG11bHRpcGxlIHBlcm1pdHMsIGZv ciBQVkUgcmVtb3RlcyB3ZSB3YW50Cj4gKyAgICAgICAgICAgIC8vIHRvIG11bHRpcGxlIG5vZGVz IGluIHBhcmFsbGVsLgo+ICsgICAgICAgICAgICAvLwo+ICsgICAgICAgICAgICAvLyBgLnVud3Jh cCgpYCBpcyBzYWZlLCB3ZSBuZXZlciBjbG9zZSB0aGUgc2VtYXBob3JlLgo+ICsgICAgICAgICAg ICBBcmM6OmNsb25lKCZzZW1hcGhvcmUpCj4gKyAgICAgICAgICAgICAgICAuYWNxdWlyZV9tYW55 X293bmVkKENPTk5FQ1RJT05TX1BFUl9QVkVfUkVNT1RFIGFzIHUzMikKPiArICAgICAgICAgICAg ICAgIC5hd2FpdAo+ICsgICAgICAgICAgICAgICAgLnVud3JhcCgpCj4gKyAgICAgICAgfSBlbHNl IHsKPiArICAgICAgICAgICAgLy8gRm9yIFBCUyByZW1vdGVzIHdlIG9ubHkgaGF2ZSBhIHNpbmds ZSBvdXRnb2luZyBjb25uZWN0aW9uCj4gKyAgICAgICAgICAgIC8vCj4gKyAgICAgICAgICAgIC8v IGAudW53cmFwKClgIGlzIHNhZmUsIHdlIG5ldmVyIGNsb3NlIHRoZSBzZW1hcGhvcmUuCj4gKyAg ICAgICAgICAgIEFyYzo6Y2xvbmUoJnNlbWFwaG9yZSkuYWNxdWlyZV9vd25lZCgpLmF3YWl0LnVu d3JhcCgpCj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAgICAgam9pbl9zZXQuc3Bhd24oYXN5bmMg bW92ZSB7Cj4gKyAgICAgICAgICAgIGxvZzo6ZGVidWchKCJmZXRjaGluZyByZW1vdGUgdGFza3Mg Zm9yICd7fScgc2luY2Uge3NpbmNlfSIsIHJlbW90ZS5pZCk7Cj4gKyAgICAgICAgICAgIGxldCB0 YXNrcyA9IGZldGNoX3Rhc2tzKCZyZW1vdGUsIHNpbmNlKS5hd2FpdC5tYXBfZXJyKHxlcnJ8IHsK PiArICAgICAgICAgICAgICAgIGZvcm1hdF9lcnIhKCJjb3VsZCBub3QgZmV0Y2ggdGFza3MgZnJv bSByZW1vdGUgJ3t9Jzoge2Vycn0iLCByZW1vdGUuaWQpCj4gKyAgICAgICAgICAgIH0pOwo+ICsK PiArICAgICAgICAgICAgZHJvcChwZXJtaXQpOwo+ICsgICAgICAgICAgICB0YXNrcwo+ICsgICAg ICAgIH0pOwo+ICsgICAgfQo+ICsKPiArICAgIHdoaWxlIGxldCBTb21lKHJlcykgPSBqb2luX3Nl dC5qb2luX25leHQoKS5hd2FpdCB7Cj4gKyAgICAgICAgbWF0Y2ggcmVzIHsKPiArICAgICAgICAg ICAgT2soT2soKHJlbW90ZSwgcmVxdWVzdCkpKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICBhbGxf dGFza3MuaW5zZXJ0KHJlbW90ZSwgcmVxdWVzdCk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgT2soRXJyKGVycikpID0+IGxvZzo6ZXJyb3IhKCJ7ZXJyfSIpLAo+ICsgICAgICAgICAg ICBFcnIoZXJyKSA9PiBsb2c6OmVycm9yISgiY291bGQgbm90IGpvaW4gdGFzayBmZXRjaGluZyBm dXR1cmU6IHtlcnJ9IiksCj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmICFhbGxf dGFza3MuaXNfZW1wdHkoKSB7Cj4gKyAgICAgICAgc2F2ZV90YXNrcyhjYWNoZSwgYWxsX3Rhc2tz KS5hd2FpdD87Cj4gKyAgICB9Cj4gKwo+ICsgICAgT2soKCkpCj4gK30KPiArCj4gKy8vLyBSZXR1 cm4gbGlzdCBvZiByZW1vdGVzIHRoYXQgYXJlIHRvIGJlIHBvbGxlZCBpbiB0aGlzIGN5Y2xlLgoK c29tZSBoaWdoZXIgbGV2ZWwgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIG1lYW5zIGFuZCB3aGF0 IHRoZSByYXRpb25hbGUgaXMKd291bGQgYmUgbmljZSBoZXJlLgoKPiArYXN5bmMgZm4gcmVtb3Rl c190b19jaGVjayhjeWNsZTogdTY0LCBzdGF0ZTogJlN0YXRlKSAtPiBSZXN1bHQ8VmVjPFJlbW90 ZT4sIEVycm9yPiB7Cj4gKyAgICBsZXQgKGNvbmZpZywgXykgPSB0b2tpbzo6dGFzazo6c3Bhd25f YmxvY2tpbmcocGRtX2NvbmZpZzo6cmVtb3Rlczo6Y29uZmlnKS5hd2FpdD8/Owo+ICsKPiArICAg IGxldCBhbGwgPSBjeWNsZSAlIFJFR1VMQVJfUkVGUkVTSF9DWUNMRVMgPT0gMDsKPiArCj4gKyAg ICBpZiBhbGwgewo+ICsgICAgICAgIE9rKGNvbmZpZy5zZWN0aW9ucy5pbnRvX3ZhbHVlcygpLmNv bGxlY3QoKSkKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgT2soY29uZmlnCj4gKyAgICAgICAg ICAgIC5zZWN0aW9ucwo+ICsgICAgICAgICAgICAuaW50b19pdGVyKCkKPiArICAgICAgICAgICAg LmZpbHRlcl9tYXAofChuYW1lLCByZW1vdGUpfCB7Cj4gKyAgICAgICAgICAgICAgICBpZiBsZXQg U29tZSh0cmFja2VkKSA9IHN0YXRlLnRyYWNrZWRfdGFza3MuZ2V0KCZuYW1lKSB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgaWYgIXRyYWNrZWQuaXNfZW1wdHkoKSB7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIFNvbWUocmVtb3RlKQo+ICsgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUKPiArICAgICAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICAgICAgIE5vbmUKPiAr ICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfSkKPiArICAgICAgICAgICAgLmNvbGxl Y3QoKSkKPiArICAgIH0KPiArfQoKPiAgLy8vIEZldGNoIHRhc2tzIChhY3RpdmUgYW5kIGZpbmlz aGVkKSBmcm9tIGEgcmVtb3RlCj4gLWFzeW5jIGZuIGZldGNoX3Rhc2tzKHJlbW90ZTogJlJlbW90 ZSkgLT4gUmVzdWx0PFZlYzxUYXNrTGlzdEl0ZW0+LCBFcnJvcj4gewo+ICsvLy8gYHNpbmNlYCBp cyBhIFVOSVggdGltZXN0YW1wIChzZWNvbmRzKS4KPiArYXN5bmMgZm4gZmV0Y2hfdGFza3MocmVt b3RlOiAmUmVtb3RlLCBzaW5jZTogaTY0KSAtPiBSZXN1bHQ8KFN0cmluZywgQWRkVGFza3MpLCBF cnJvcj4gewo+ICAgICAgbGV0IG11dCB0YXNrcyA9IFZlYzo6bmV3KCk7Cj4gIAo+ICsgICAgbGV0 IG11dCBhbGxfc3VjY2Vzc2Z1bCA9IHRydWU7Cj4gKwo+ICAgICAgbWF0Y2ggcmVtb3RlLnR5IHsK PiAgICAgICAgICBSZW1vdGVUeXBlOjpQdmUgPT4gewo+ICsgICAgICAgICAgICBsZXQgc2VtYXBo b3JlID0gQXJjOjpuZXcoU2VtYXBob3JlOjpuZXcoQ09OTkVDVElPTlNfUEVSX1BWRV9SRU1PVEUp KTsKPiArICAgICAgICAgICAgbGV0IG11dCBqb2luX3NldCA9IEpvaW5TZXQ6Om5ldygpOwo+ICsK PiAgICAgICAgICAgICAgbGV0IGNsaWVudCA9IHB2ZTo6Y29ubmVjdChyZW1vdGUpPzsKPiAgCj4g ICAgICAgICAgICAgIC8vIE4rMSByZXF1ZXN0cyAtIHdlIGNvdWxkIHVzZSAvY2x1c3Rlci90YXNr cywgYnV0IHRoYXQgb25lCgpidHcuIGFzIEkgc2VlIGl0IGZyb20gdGhlIGNvbnRleHQsIHJlLWV2 YWx1YXRpbmcgdGhlIGxpbWl0IG9mIHRoZSBicm9hZGNhc3RlZAp0YXNrcyB3b3VsZCBiZSBkZWZp bml0aXZlbHkgYW4gb3B0aW9uIHRvbywgb24gcmVtb3RlcyB3aXRoIG1vcmUgdGhhbiBhIGhhbmRm dWwKb2Ygbm9kZXMgdGhhdCBtaWdodCBiZSBxdWl0ZSBhIGJpdCBjaGVhcGVyIGFuZCBoYXMgc29t ZSBiZW5lZml0cyBvdXRzaWRlIG9mIHRoZQpQRE0gdXNlIGNhc2UuIEF0IGxlYXN0IHNvbWUgcXVp Y2sgZXhwZXJpbWVudGF0aW9uIGFib3V0IGFjdHVhbCBpbXBhY3Qgb2YgYW4KaW5jcmVhc2UgdGhl cmUgd291bGQgYmUgd2FycmFudGVkLCBhbGJlaXQgb3V0IG9mIHNjb3BlIG9mIHRoaXMgc2VyaWVz IGFzIGNoZWNraW5nCnNlcGFyYXRlbHkgaXMgYWxyZWFkeSB0aGUgc3RhdHVzIHF1by4KCj4gQEAg LTEzNCwxNiArMzc3LDUzIEBAIGFzeW5jIGZuIGZldGNoX3Rhc2tzKHJlbW90ZTogJlJlbW90ZSkg LT4gUmVzdWx0PFZlYzxUYXNrTGlzdEl0ZW0+LCBFcnJvcj4gewo+ICAgICAgICAgICAgICAgICAg bGV0IHBhcmFtcyA9IExpc3RUYXNrcyB7Cj4gICAgICAgICAgICAgICAgICAgICAgLy8gSW5jbHVk ZSBydW5uaW5nIHRhc2tzCj4gICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBTb21lKExpc3RU YXNrc1NvdXJjZTo6QWxsKSwKPiAtICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIb3cgbXVj aCB0YXNrIGhpc3RvcnkgZG8gd2Ugd2FudD8gUmlnaHQgbm93IHdlIGp1c3QgaGFyZC1jb2RlIGl0 Cj4gLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gNyBkYXlzLgo+IC0gICAgICAgICAgICAgICAg ICAgIHNpbmNlOiBTb21lKHByb3htb3hfdGltZTo6ZXBvY2hfaTY0KCkgLSA3ICogMjQgKiA2MCAq IDYwKSwKPiArICAgICAgICAgICAgICAgICAgICBzaW5jZTogU29tZShzaW5jZSksCj4gKyAgICAg ICAgICAgICAgICAgICAgLy8gSWYgYGxpbWl0YCBpcyBub3QgcHJvdmlkZWQsIHdlIG9ubHkgcmVj ZWl2ZSA1MCB0YXNrcwo+ICsgICAgICAgICAgICAgICAgICAgIGxpbWl0OiBTb21lKE1BWF9UQVNL U19UT19GRVRDSCksCj4gICAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0KCkK PiAgICAgICAgICAgICAgICAgIH07Cj4gIAo+IC0gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBj bGllbnQuZ2V0X3Rhc2tfbGlzdCgmbm9kZS5ub2RlLCBwYXJhbXMpLmF3YWl0PzsKPiAtICAgICAg ICAgICAgICAgIGxldCBtYXBwZWQgPSBtYXBfdGFza3MobGlzdCwgJnJlbW90ZS5pZCk/Owo+ICsg ICAgICAgICAgICAgICAgbGV0IHBlcm1pdCA9IEFyYzo6Y2xvbmUoJnNlbWFwaG9yZSkuYWNxdWly ZV9vd25lZCgpLmF3YWl0LnVud3JhcCgpOwo+ICAKPiAtICAgICAgICAgICAgICAgIHRhc2tzLmV4 dGVuZChtYXBwZWQpOwo+ICsgICAgICAgICAgICAgICAgbGV0IHIgPSByZW1vdGUuY2xvbmUoKTsK PiArCj4gKyAgICAgICAgICAgICAgICBqb2luX3NldC5zcGF3bihhc3luYyBtb3ZlIHsKPiArICAg ICAgICAgICAgICAgICAgICBsZXQgY2xpZW50ID0gcHZlOjpjb25uZWN0KCZyKT87Cj4gKyAgICAg ICAgICAgICAgICAgICAgbGV0IHRhc2tfbGlzdCA9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGNsaWVudAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldF90YXNrX2xpc3QoJm5v ZGUubm9kZSwgcGFyYW1zKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF3YWl0Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2VyciEoInJlbW90ZSAne30nLCBub2RlICd7 fSc6IHtlcnJ9Iiwgci5pZCwgbm9kZS5ub2RlKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfSk/Owo+ICsKPiArICAgICAgICAgICAgICAgICAgICBkcm9wKHBlcm1pdCk7Cj4gKwo+ICsg ICAgICAgICAgICAgICAgICAgIE9rOjo8VmVjPF8+LCBFcnJvcj4odGFza19saXN0KQo+ICsgICAg ICAgICAgICAgICAgfSk7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHdoaWxl IGxldCBTb21lKHJlcykgPSBqb2luX3NldC5qb2luX25leHQoKS5hd2FpdCB7Cj4gKyAgICAgICAg ICAgICAgICBtYXRjaCByZXMgewo+ICsgICAgICAgICAgICAgICAgICAgIE9rKE9rKGxpc3QpKSA9 PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXBwZWQgPSBsaXN0LmludG9faXRl cigpLmZpbHRlcl9tYXAofHRhc2t8IHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h dGNoIG1hcF9wdmVfdGFzayh0YXNrLCAmcmVtb3RlLmlkKSB7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT2sodGFzaykgPT4gU29tZSh0YXNrKSwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgbWFwIHRhc2sgZGF0YSwgc2tpcHBp bmc6IHtlcnJ9Iik7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOwo+ICsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgdGFza3MuZXh0ZW5kKG1hcHBlZCk7Cj4gKyAgICAgICAgICAgICAg ICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgIE9rKEVycihlcnIpKSA9PiB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIGFsbF9zdWNjZXNzZnVsID0gZmFsc2U7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGxvZzo6ZXJyb3IhKCJjb3VsZCBub3QgZmV0Y2ggdGFza3M6IHtlcnI6P30i KTsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgRXJyKGVy cikgPT4gcmV0dXJuIEVycihlcnIuaW50bygpKSwKPiArICAgICAgICAgICAgICAgIH0KPiAgICAg ICAgICAgICAgfQo+ICAgICAgICAgIH0KPiAgICAgICAgICBSZW1vdGVUeXBlOjpQYnMgPT4gewoK PiArLy8vIENoZWNrIGlmIHdlIGFyZSBkdWUgZm9yIGNoZWNraW5nIGZvciBjYWNoZSByb3RhdGlv bi4KPiArZm4gc2hvdWxkX2NoZWNrX2Zvcl9jYWNoZV9yb3RhdGlvbihjeWNsZTogdTY0KSAtPiBi b29sIHsKPiArICAgIGN5Y2xlICUgQ0hFQ0tfUk9UQVRFX0NZQ0xFUyA9PSAwCgpUaGlzIGJhc2lj YWxseSBkZXBlbmRzIG9uIHRoZSBmbiBnZXR0aW5nIGNhbGxlZCBpbml0aWFsbHkgd2l0aCBjeWNs ZQpiZWluZyBzdGlsbCB6ZXJlbywgYXMgb3RoZXJld2lzZSB3ZSB3b3VsZCBuZXZlciByb3RhdGUg aWYgYSBQRE0gZ2V0cwpyZXN0YXJ0ZWQvcmVib290ZWQgZGFpbHkgb3IgbW9yZSBvZnRlbiwgd2hp Y2ggY2FuIGJlIGEgcG9zc2liaWxpdHkgZm9yCnVzZSBjYXNlcyB3aGVyZSBvbmUganVzdCBoYXMg dGhlIFBETSBydW5uaW5nIGR1cmluZyB0aGVpciB3b3JrdGltZSwKd2hpY2ggaXMgc2VsZG9tbHkg bG9uZ2VyIHRoYW4gYSBkYXkuCgpJLmUuLCBpdCB3b3JrcyBmaW5lIGFzIGlzLCBidXQgSSdkIGxp a2UgdG8gc2VlIHRoYXQgaW52YXJpYW50IHN0YXRlCmEgYml0IGV4cGxpY2l0bHkgc29tZXdoZXJl LgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnBkbS1k ZXZlbCBtYWlsaW5nIGxpc3QKcGRtLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlz dHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3BkbS1kZXZlbAo=