From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 99FCD1FF170 for ; Thu, 10 Jul 2025 19:08:01 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8F349398D2; Thu, 10 Jul 2025 19:08:34 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Thu, 10 Jul 2025 19:07:12 +0200 Message-ID: <20250710170728.102829-32-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250710170728.102829-1-c.ebner@proxmox.com> References: <20250710170728.102829-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.044 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup v7 22/38] datastore: implement garbage collection for s3 backend 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" SW1wbGVtZW50cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGZvciBkYXRhc3RvcmVzIGJhY2tlZCBi eSBhbiBzMwpvYmplY3Qgc3RvcmUuClRha2UgYWR2YW50YWdlIG9mIHRoZSBsb2NhbCBkYXRhc3Rv cmUgYnkgcGxhY2luZyBtYXJrZXIgZmlsZXMgaW4gdGhlCmNodW5rIHN0b3JlIGR1cmluZyBwaGFz ZSAxIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHVwZGF0aW5nIHRoZWlyCmF0aW1lIGlmIGFs cmVhZHkgcHJlc2VudC4KVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgbWFraW5nIGV4cGVuc2l2ZSBB UEkgY2FsbHMgdG8gdXBkYXRlIG9iamVjdAptZXRhZGF0YSwgd2hpY2ggd291bGQgb25seSBiZSBw b3NzaWJsZSB2aWEgYSBjb3B5IG9iamVjdCBvcGVyYXRpb24uCgpUaGUgcGhhc2UgMiBpcyBpbXBs ZW1lbnRlZCBieSBmZXRjaGluZyBhIGxpc3Qgb2YgYWxsIHRoZSBjaHVua3MgdmlhCnRoZSBMaXN0 T2JqZWN0c1YyIEFQSSBjYWxsLCBmaWx0ZXJlZCBieSB0aGUgY2h1bmsgZm9sZGVyIHByZWZpeC4K VGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiBiYXRjaGVzIG9mIDEwMDAgb2Jq ZWN0cywgZ2l2ZW4KYnkgdGhlIEFQSXMgcmVzcG9uc2UgbGltaXRzLgpGb3IgZWFjaCBvYmplY3Qg a2V5LCBsb29rdXAgdGhlIG1hcmtlciBmaWxlIGFuZCBkZWNpZGUgYmFzZWQgb24gdGhlCm1hcmtl ciBleGlzdGVuY2UgYW5kIGl0J3MgYXRpbWUgaWYgdGhlIGNodW5rIG9iamVjdCBuZWVkcyB0byBi ZQpyZW1vdmVkLiBEZWxldGlvbiBoYXBwZW5zIHZpYSB0aGUgZGVsZXRlIG9iamVjdHMgb3BlcmF0 aW9uLCBhbGxvd2luZwp0byBkZWxldGUgbXVsdGlwbGUgY2h1bmtzIGJ5IGEgc2luZ2xlIHJlcXVl c3QuCgpUaGlzIGFsbG93cyB0byBlZmZpY2llbnRseSBsb29rdXAgY2h1bmtzIHdoaWNoIGFyZSBu b3QgaW4gdXNlCmFueW1vcmUgd2hpbGUgYmVpbmcgcGVyZm9ybWFudCBhbmQgY29zdCBlZmZlY3Rp dmUuCgpCYXNlbGluZSBydW50aW1lIHBlcmZvcm1hbmNlIHRlc3RzOgotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKMyBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyB3ZXJlIHBlcmZv cm1lZCB3aXRoIGhvdCBmaWxlc3lzdGVtIGNhY2hlcwooYnkgYWRkaXRpb25hbCBHQyBydW4gYmVm b3JlIHRoZSB0ZXN0IHJ1bnMpLiBUaGUgUEJTIGluc3RhbmNlIHdhcwp2aXJ0dWFsaXplZCwgdGhl IHNhbWUgdmlydHVhbGl6ZWQgZGlzayB1c2luZyBaRlMgZm9yIGFsbCB0aGUgbG9jYWwKY2FjaGUg c3RvcmVzOgoKQWxsIGRhdGFzdG9yZXMgY29udGFpbmVkIHRoZSBzYW1lIGVuY3J5cHRlZCBkYXRh LCB3aXRoIHRoZSBmb2xsb3dpbmcKY29udGVudCBzdGF0aXN0aWNzOgpPcmlnaW5hbCBkYXRhIHVz YWdlOiAyNjkuNjg1IEdpQgpPbi1EaXNrIHVzYWdlOiA5LjAxOCBHaUIgKDMuMzQlKQpPbi1EaXNr IGNodW5rczogNjQ3NwpEZWR1cGxpY2F0aW9uIGZhY3RvcjogMjkuOTAKQXZlcmFnZSBjaHVuayBz aXplOiAxLjQyNiBNaUIKClRoZSByZXN1dGx0cyBkZW1vbnN0cmF0ZSB0aGUgb3ZlcmhlYWQgY2F1 c2VkIGJ5IHRoZSBhZGRpdGlvbmFsCkxpc3RPYmplY3RWMiBBUEkgY2FsbHMgYW5kIHRoZWlyIHBy b2Nlc3NpbmcsIGJ1dCBkZXBlbmRpbmcgb24gdGhlCm9iamVjdCBzdG9yZSBiYWNrZW5kLgoKQXZl cmFnZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVudGltZToKTG9jYWwgZGF0YXN0b3JlOiAgICAgICAg ICAgICAoMi4wNCDCsSAwLjAxKSBzCkxvY2FsIFJBRE9TIGdhdGV3YXkgKFNxdWlkKTogKDMuMDUg wrEgMC4wMSkgcwpBV1MgUzM6ICAgICAgICAgICAgICAgICAgICAgICgzLjA1IMKxIDAuMDEpIHMK Q2xvdWRmbGFyZSBSMjogICAgICAgICAgICAgICAoNi43MSDCsSAwLjU4KSBzCgpBZnRlciBwcnVu aW5nIG9mIGFsbCBkYXRhc3RvcmUgY29udGVudHMgKHRoZXJlZm9yZSBpbmNsdWRpbmcKRGVsZXRl T2JqZWN0cyByZXF1ZXN0cyk6CkxvY2FsIGRhdGFzdG9yZTogICAgICAgICAgICAgIDMuMDQgcwpM b2NhbCBSQURPUyBnYXRld2F5IChTcXVpZCk6IDE0LjA4IHMKQVdTIFMzOiAgICAgICAgICAgICAg ICAgICAgICAxMy4wNiBzCkNsb3VkZmxhcmUgUjI6ICAgICAgICAgICAgICAgNzguMjEgcwoKU2ln bmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgotLS0KY2hh bmdlcyBzaW5jZSB2ZXJzaW9uIDY6Ci0gYWRhcHQgY29tbWl0IG1lc3NhZ2UgYW5kIGFkZCBiYXNp YyBwZXJmb3JtYW5jZSB0ZXN0IHJlc3VsdHMKLSBhZGQgZXJyb3IgY29udGV4dCB0byBsaXN0IG9i amVjdCB2MiBjYWxsCgogcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMgfCAgIDQgKwog cGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzICAgfCAyMTEgKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxOTAgaW5zZXJ0aW9ucygrKSwgMjUgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMg Yi9wYnMtZGF0YXN0b3JlL3NyYy9jaHVua19zdG9yZS5ycwppbmRleCA4YzE5NWRmNTQuLjk1ZjAw ZThkNSAxMDA2NDQKLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKKysrIGIv cGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKQEAgLTM1Myw2ICszNTMsMTAgQEAgaW1w bCBDaHVua1N0b3JlIHsKICAgICAgICAgUHJvY2Vzc0xvY2tlcjo6b2xkZXN0X3NoYXJlZF9sb2Nr KHNlbGYubG9ja2VyLmNsb25lKCkudW53cmFwKCkpCiAgICAgfQogCisgICAgcHViIGZuIG11dGV4 KCZzZWxmKSAtPiAmc3RkOjpzeW5jOjpNdXRleDwoKT4geworICAgICAgICAmc2VsZi5tdXRleAor ICAgIH0KKwogICAgIHB1YiBmbiBzd2VlcF91bnVzZWRfY2h1bmtzKAogICAgICAgICAmc2VsZiwK ICAgICAgICAgb2xkZXN0X3dyaXRlcjogaTY0LApkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9z cmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCmluZGV4IGNh MDk5YzFkMC4uNmNjN2ZkYmFhIDEwMDY0NAotLS0gYS9wYnMtZGF0YXN0b3JlL3NyYy9kYXRhc3Rv cmUucnMKKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCkBAIC00LDcgKzQsNyBA QCB1c2Ugc3RkOjpvczo6dW5peDo6ZmZpOjpPc1N0ckV4dDsKIHVzZSBzdGQ6Om9zOjp1bml4Ojpp bzo6QXNSYXdGZDsKIHVzZSBzdGQ6OnBhdGg6OntQYXRoLCBQYXRoQnVmfTsKIHVzZSBzdGQ6OnN5 bmM6OntBcmMsIExhenlMb2NrLCBNdXRleH07Ci11c2Ugc3RkOjp0aW1lOjpEdXJhdGlvbjsKK3Vz ZSBzdGQ6OnRpbWU6OntEdXJhdGlvbiwgU3lzdGVtVGltZX07CiAKIHVzZSBhbnlob3c6OntiYWls LCBmb3JtYXRfZXJyLCBDb250ZXh0LCBFcnJvcn07CiB1c2UgaHR0cF9ib2R5X3V0aWw6OkJvZHlF eHQ7CkBAIC0xMjA5LDYgKzEyMDksNyBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgIGNodW5r X2xydV9jYWNoZTogJm11dCBPcHRpb248THJ1Q2FjaGU8W3U4OyAzMl0sICgpPj4sCiAgICAgICAg IHN0YXR1czogJm11dCBHYXJiYWdlQ29sbGVjdGlvblN0YXR1cywKICAgICAgICAgd29ya2VyOiAm ZHluIFdvcmtlclRhc2tDb250ZXh0LAorICAgICAgICBzM19jbGllbnQ6IE9wdGlvbjxBcmM8UzND bGllbnQ+PiwKICAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgc3RhdHVzLmlu ZGV4X2ZpbGVfY291bnQgKz0gMTsKICAgICAgICAgc3RhdHVzLmluZGV4X2RhdGFfYnl0ZXMgKz0g aW5kZXguaW5kZXhfYnl0ZXMoKTsKQEAgLTEyMjUsMjEgKzEyMjYsNDEgQEAgaW1wbCBEYXRhU3Rv cmUgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg IXNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY29uZF90b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8g ewotICAgICAgICAgICAgICAgIGxldCBoZXggPSBoZXg6OmVuY29kZShkaWdlc3QpOwotICAgICAg ICAgICAgICAgIHdhcm4hKAotICAgICAgICAgICAgICAgICAgICAid2FybmluZzogdW5hYmxlIHRv IGFjY2VzcyBub24tZXhpc3RlbnQgY2h1bmsge2hleH0sIHJlcXVpcmVkIGJ5IHtmaWxlX25hbWU6 P30iCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIC8vIHRvdWNoIGFueSBj b3JyZXNwb25kaW5nIC5iYWQgZmlsZXMgdG8ga2VlcCB0aGVtIGFyb3VuZCwgbWVhbmluZyBpZiBh IGNodW5rIGlzCi0gICAgICAgICAgICAgICAgLy8gcmV3cml0dGVuIGNvcnJlY3RseSB0aGV5IHdp bGwgYmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhcyB3ZWxsIGFzIGlmIG5vIGluZGV4Ci0gICAg ICAgICAgICAgICAgLy8gZmlsZSByZXF1aXJlcyB0aGUgY2h1bmsgYW55bW9yZSAod29uJ3QgZ2V0 IHRvIHRoaXMgbG9vcCB0aGVuKQotICAgICAgICAgICAgICAgIGZvciBpIGluIDAuLj05IHsKLSAg ICAgICAgICAgICAgICAgICAgbGV0IGJhZF9leHQgPSBmb3JtYXQhKCJ7fS5iYWQiLCBpKTsKLSAg ICAgICAgICAgICAgICAgICAgbGV0IG11dCBiYWRfcGF0aCA9IFBhdGhCdWY6Om5ldygpOwotICAg ICAgICAgICAgICAgICAgICBiYWRfcGF0aC5wdXNoKHNlbGYuY2h1bmtfcGF0aChkaWdlc3QpLjAp OwotICAgICAgICAgICAgICAgICAgICBiYWRfcGF0aC5zZXRfZXh0ZW5zaW9uKGJhZF9leHQpOwot ICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfcGF0 aCgmYmFkX3BhdGgsIGZhbHNlKT87CisgICAgICAgICAgICBtYXRjaCBzM19jbGllbnQgeworICAg ICAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgICAgICAvLyBGaWxlc3lzdGVt IGJhY2tlbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1bmtfc3RvcmUu Y29uZF90b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8geworICAgICAgICAgICAgICAgICAgICAg ICAgbGV0IGhleCA9IGhleDo6ZW5jb2RlKGRpZ2VzdCk7CisgICAgICAgICAgICAgICAgICAgICAg ICB3YXJuISgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZzogdW5hYmxlIHRv IGFjY2VzcyBub24tZXhpc3RlbnQgY2h1bmsge2hleH0sIHJlcXVpcmVkIGJ5IHtmaWxlX25hbWU6 P30iCisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICAgICAg ICAvLyB0b3VjaCBhbnkgY29ycmVzcG9uZGluZyAuYmFkIGZpbGVzIHRvIGtlZXAgdGhlbSBhcm91 bmQsIG1lYW5pbmcgaWYgYSBjaHVuayBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV3 cml0dGVuIGNvcnJlY3RseSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LCBhcyB3 ZWxsIGFzIGlmIG5vIGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxlIHJlcXVp cmVzIHRoZSBjaHVuayBhbnltb3JlICh3b24ndCBnZXQgdG8gdGhpcyBsb29wIHRoZW4pCisgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiAwLi49OSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGV0IGJhZF9leHQgPSBmb3JtYXQhKCJ7fS5iYWQiLCBpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZXQgbXV0IGJhZF9wYXRoID0gUGF0aEJ1Zjo6bmV3KCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGgucHVzaChzZWxmLmNodW5rX3BhdGgoZGln ZXN0KS4wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRfcGF0aC5zZXRfZXh0ZW5z aW9uKGJhZF9leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIuY2h1 bmtfc3RvcmUuY29uZF90b3VjaF9wYXRoKCZiYWRfcGF0aCwgZmFsc2UpPzsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBTb21lKHJlZiBfczNfY2xpZW50KSA9PiB7CisgICAgICAgICAgICAg ICAgICAgIC8vIFVwZGF0ZSBhdGltZSBvbiBsb2NhbCBjYWNoZSBtYXJrZXIgZmlsZXMuCisgICAg ICAgICAgICAgICAgICAgIGlmICFzZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfY2h1 bmsoZGlnZXN0LCBmYWxzZSk/IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCAoY2h1bmtf cGF0aCwgX2RpZ2VzdCkgPSBzZWxmLmNodW5rX3BhdGgoZGlnZXN0KTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8vIEluc2VydCBlbXB0eSBmaWxlIGFzIG1hcmtlciB0byB0ZWxsIEdDIHBoYXNl MiB0aGF0IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgY2h1bmsgc3RpbGwg aW4tdXNlLCBzbyB0byBrZWVwIGluIHRoZSBTMyBvYmplY3Qgc3RvcmUuCisgICAgICAgICAgICAg ICAgICAgICAgICBzdGQ6OmZzOjpGaWxlOjpvcHRpb25zKCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAud3JpdGUodHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRl X25ldyh0cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vcGVuKCZjaHVua19wYXRo KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQhKCJmYWlsZWQgdG8gY3JlYXRlIG1hcmtl ciBmb3IgY2h1bmsge30iLCBoZXg6OmVuY29kZShkaWdlc3QpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0pPzsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI1MSw2ICsxMjcyLDcgQEAgaW1wbCBEYXRh U3RvcmUgewogICAgICAgICBzdGF0dXM6ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMsCiAg ICAgICAgIHdvcmtlcjogJmR5biBXb3JrZXJUYXNrQ29udGV4dCwKICAgICAgICAgY2FjaGVfY2Fw YWNpdHk6IHVzaXplLAorICAgICAgICBzM19jbGllbnQ6IE9wdGlvbjxBcmM8UzNDbGllbnQ+PiwK ICAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgLy8gSXRlcmF0ZSB0d2ljZSBv dmVyIHRoZSBkYXRhc3RvcmUgdG8gZmV0Y2ggaW5kZXggZmlsZXMsIGV2ZW4gaWYgdGhpcyBjb21l cyB3aXRoIGFuCiAgICAgICAgIC8vIGFkZGl0aW9uYWwgcnVudGltZSBjb3N0OgpAQCAtMTM0NCw2 ICsxMzY2LDcgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmbXV0IGNodW5rX2xydV9jYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX2NsaWVudC5hc19yZWYoKS5jbG9uZWQoKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPzsKIAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICF1bnByb2Nlc3NlZF9pbmRleF9saXN0LnJlbW92ZSgmcGF0aCkgewpAQCAtMTM3 OCw3ICsxNDAxLDE0IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHNl bGYuaW5kZXhfbWFya191c2VkX2NodW5rcyhpbmRleCwgJnBhdGgsICZtdXQgY2h1bmtfbHJ1X2Nh Y2hlLCBzdGF0dXMsIHdvcmtlcik/OworICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRf Y2h1bmtzKAorICAgICAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgICAgICZwYXRoLAor ICAgICAgICAgICAgICAgICZtdXQgY2h1bmtfbHJ1X2NhY2hlLAorICAgICAgICAgICAgICAgIHN0 YXR1cywKKyAgICAgICAgICAgICAgICB3b3JrZXIsCisgICAgICAgICAgICAgICAgczNfY2xpZW50 LmFzX3JlZigpLmNsb25lZCgpLAorICAgICAgICAgICAgKT87CiAgICAgICAgICAgICB3YXJuISgi TWFya2VkIGNodW5rcyBmb3IgdW5leHBlY3RlZCBpbmRleCBmaWxlIGF0ICd7cGF0aDo/fSciKTsK ICAgICAgICAgfQogICAgICAgICBpZiBzdHJhbmdlX3BhdGhzX2NvdW50ID4gMCB7CkBAIC0xNDc2 LDE4ICsxNTA2LDE0OSBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgICAgICAgICAgMTAyNCAq IDEwMjQKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGluZm8hKCJTdGFydCBHQyBwaGFz ZTEgKG1hcmsgdXNlZCBjaHVua3MpIik7CisgICAgICAgICAgICBsZXQgczNfY2xpZW50ID0gbWF0 Y2ggc2VsZi5iYWNrZW5kKCk/IHsKKyAgICAgICAgICAgICAgICBEYXRhc3RvcmVCYWNrZW5kOjpG aWxlc3lzdGVtID0+IE5vbmUsCisgICAgICAgICAgICAgICAgRGF0YXN0b3JlQmFja2VuZDo6UzMo czNfY2xpZW50KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHByb3htb3hfYXN5bmM6OnJ1bnRp bWU6OmJsb2NrX29uKHMzX2NsaWVudC5oZWFkX2J1Y2tldCgpKQorICAgICAgICAgICAgICAgICAg ICAgICAgLmNvbnRleHQoImZhaWxlZCB0byByZWFjaCBidWNrZXQiKT87CisgICAgICAgICAgICAg ICAgICAgIFNvbWUoczNfY2xpZW50KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07 CiAKLSAgICAgICAgICAgIHNlbGYubWFya191c2VkX2NodW5rcygmbXV0IGdjX3N0YXR1cywgd29y a2VyLCBnY19jYWNoZV9jYXBhY2l0eSkKLSAgICAgICAgICAgICAgICAuY29udGV4dCgibWFya2lu ZyB1c2VkIGNodW5rcyBmYWlsZWQiKT87CisgICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhh c2UxIChtYXJrIHVzZWQgY2h1bmtzKSIpOwogCi0gICAgICAgICAgICBpbmZvISgiU3RhcnQgR0Mg cGhhc2UyIChzd2VlcCB1bnVzZWQgY2h1bmtzKSIpOwotICAgICAgICAgICAgc2VsZi5pbm5lci5j aHVua19zdG9yZS5zd2VlcF91bnVzZWRfY2h1bmtzKAotICAgICAgICAgICAgICAgIG9sZGVzdF93 cml0ZXIsCi0gICAgICAgICAgICAgICAgbWluX2F0aW1lLAorICAgICAgICAgICAgc2VsZi5tYXJr X3VzZWRfY2h1bmtzKAogICAgICAgICAgICAgICAgICZtdXQgZ2Nfc3RhdHVzLAogICAgICAgICAg ICAgICAgIHdvcmtlciwKLSAgICAgICAgICAgICk/OworICAgICAgICAgICAgICAgIGdjX2NhY2hl X2NhcGFjaXR5LAorICAgICAgICAgICAgICAgIHMzX2NsaWVudC5hc19yZWYoKS5jbG9uZWQoKSwK KyAgICAgICAgICAgICkKKyAgICAgICAgICAgIC5jb250ZXh0KCJtYXJraW5nIHVzZWQgY2h1bmtz IGZhaWxlZCIpPzsKKworICAgICAgICAgICAgaW5mbyEoIlN0YXJ0IEdDIHBoYXNlMiAoc3dlZXAg dW51c2VkIGNodW5rcykiKTsKKworICAgICAgICAgICAgaWYgbGV0IFNvbWUocmVmIHMzX2NsaWVu dCkgPSBzM19jbGllbnQgeworICAgICAgICAgICAgICAgIGxldCBtdXQgY2h1bmtfY291bnQgPSAw OworICAgICAgICAgICAgICAgIGxldCBwcmVmaXggPSBTM1BhdGhQcmVmaXg6OlNvbWUoIi5jaHVu a3MvIi50b19zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgLy8gT3BlcmF0ZXMgaW4gYmF0Y2hl cyBvZiAxMDAwIG9iamVjdHMgbWF4IHBlciByZXF1ZXN0CisgICAgICAgICAgICAgICAgbGV0IG11 dCBsaXN0X2J1Y2tldF9yZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICBwcm94bW94X2FzeW5j OjpydW50aW1lOjpibG9ja19vbihzM19jbGllbnQubGlzdF9vYmplY3RzX3YyKCZwcmVmaXgsIE5v bmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRleHQoImZhaWxlZCB0byBsaXN0IGNo dW5rIGluIHMzIG9iamVjdCBzdG9yZSIpPzsKKworICAgICAgICAgICAgICAgIGxldCBtdXQgZGVs ZXRlX2xpc3QgPSBWZWM6OndpdGhfY2FwYWNpdHkoMTAwMCk7CisgICAgICAgICAgICAgICAgbG9v cCB7CisgICAgICAgICAgICAgICAgICAgIGxldCBsb2NrID0gc2VsZi5pbm5lci5jaHVua19zdG9y ZS5tdXRleCgpLmxvY2soKS51bndyYXAoKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgY29u dGVudCBpbiBsaXN0X2J1Y2tldF9yZXN1bHQuY29udGVudHMgeworICAgICAgICAgICAgICAgICAg ICAgICAgLy8gQ2hlY2sgb2JqZWN0IGlzIGFjdHVhbGx5IGEgY2h1bmsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGxldCBkaWdlc3QgPSBtYXRjaCBQYXRoOjpuZXc6OjxzdHI+KCZjb250ZW50Lmtl eSkuZmlsZV9uYW1lKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUoZmlsZV9u YW1lKSA9PiBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxk IG5ldmVyIGJlIHRoZSBjYXNlIGFzIG9iamVjdHMgd2lsbCBoYXZlIGEgZmlsZW5hbWUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IGNvbnRpbnVlLAorICAgICAgICAgICAgICAg ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBieXRlcyA9IGRpZ2VzdC5h c19ieXRlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnl0ZXMubGVuKCkgIT0gNjQg JiYgYnl0ZXMubGVuKCkgIT0gNjQgKyAiLjAuYmFkIi5sZW4oKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAhYnl0ZXMuaXRlcigpLnRha2UoNjQpLmFsbCh1ODo6aXNfYXNj aWlfaGV4ZGlnaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJh ZCA9IGJ5dGVzLmVuZHNfd2l0aChiIi5iYWQiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg Ly8gU2FmZSBzaW5jZSBjb250YWlucyB2YWxpZCBhc2NpaSBoZXhkaWdpdHMgb25seSBhcyBjaGVj a2VkIGFib3ZlLgorICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpZ2VzdF9zdHIgPSBkaWdl c3QudG9fc3RyaW5nX2xvc3N5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGV4ZGln aXRfcHJlZml4ID0gdW5zYWZlIHsgZGlnZXN0X3N0ci5nZXRfdW5jaGVja2VkKDAuLjQpIH07Cisg ICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IGNodW5rX3BhdGggPSBzZWxmLmJhc2VfcGF0 aCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfcGF0aC5wdXNoKCIuY2h1bmtzIik7 CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19wYXRoLnB1c2goaGV4ZGlnaXRfcHJlZml4 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX3BhdGgucHVzaChkaWdlc3QpOworCisg ICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBsb2NhbCBtYXJrZXJzIChjcmVhdGVkIG9y IGF0aW1lIHVwZGF0ZWQgZHVyaW5nIHBoYXNlMSkgYW5kCisgICAgICAgICAgICAgICAgICAgICAg ICAvLyBrZWVwIG9yIGRlbGV0ZSBjaHVuayBiYXNlZCBvbiB0aGF0LgorICAgICAgICAgICAgICAg ICAgICAgICAgbGV0IGF0aW1lID0gbWF0Y2ggc3RkOjpmczo6bWV0YWRhdGEoY2h1bmtfcGF0aCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKHN0YXQpID0+IHN0YXQuYWNjZXNzZWQo KT8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGVycikgaWYgZXJyLmtpbmQoKSA9 PSBzdGQ6OmlvOjpFcnJvcktpbmQ6Ok5vdEZvdW5kID0+IHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gRmlsZSBub3QgZm91bmQsIGRlbGV0ZSBieSBzZXR0aW5nIGF0aW1lIHRv IHVuaXggZXBvY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyEoIk5vdCBm b3VuZCwgbWFyayBmb3IgZGVsZXRpb246IHt9IiwgY29udGVudC5rZXkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lOjpVTklYX0VQT0NICisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihlcnIpID0+ IHJldHVybiBFcnIoZXJyLmludG8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgICAgICAgICAgICAgbGV0IGF0aW1lID0gYXRpbWUuZHVyYXRpb25fc2luY2UoU3lz dGVtVGltZTo6VU5JWF9FUE9DSCk/LmFzX3NlY3MoKSBhcyBpNjQ7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNodW5rX2NvdW50ICs9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IGF0aW1lIDwgbWluX2F0aW1lIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVf bGlzdC5wdXNoKGNvbnRlbnQua2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBi YWQgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY19zdGF0dXMucmVtb3ZlZF9i YWQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnY19zdGF0dXMucmVtb3ZlZF9jaHVua3MgKz0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2Nfc3RhdHVzLnJlbW92ZWRfYnl0ZXMgKz0gY29udGVudC5zaXplOworICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmIGF0aW1lIDwgb2xkZXN0X3dyaXRlciB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgYmFkIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2Nfc3RhdHVzLnN0aWxsX2JhZCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5wZW5kaW5n X2NodW5rcyArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnY19zdGF0dXMucGVuZGluZ19ieXRlcyArPSBjb250ZW50LnNpemU7 CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICFiYWQgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY19zdGF0 dXMuZGlza19jaHVua3MgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLmRpc2tfYnl0ZXMgKz0gY29udGVudC5z aXplOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICAgICAgaWYgIWRlbGV0ZV9saXN0LmlzX2VtcHR5KCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgbGV0IGRlbGV0ZV9vYmplY3RzX3Jlc3VsdCA9IHByb3htb3hfYXN5 bmM6OnJ1bnRpbWU6OmJsb2NrX29uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX2Ns aWVudC5kZWxldGVfb2JqZWN0cygmZGVsZXRlX2xpc3QpLAorICAgICAgICAgICAgICAgICAgICAg ICAgKT87CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShfZXJyKSA9IGRlbGV0 ZV9vYmplY3RzX3Jlc3VsdC5lcnJvciB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFp bCEoImZhaWxlZCB0byBkZWxldGUgc29tZSBvYmplY3RzIik7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVfbGlzdC5jbGVhcigpOworICAg ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZHJvcChsb2NrKTsKKwor ICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIG5leHQgYmF0Y2ggb2YgY2h1bmtzIGlmIHRo ZXJlIGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlzdF9idWNrZXRfcmVzdWx0Lmlz X3RydW5jYXRlZCB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2J1Y2tldF9yZXN1bHQg PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3htb3hfYXN5bmM6OnJ1bnRpbWU6OmJs b2NrX29uKHMzX2NsaWVudC5saXN0X29iamVjdHNfdjIoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rf YnVja2V0X3Jlc3VsdC5uZXh0X2NvbnRpbnVhdGlvbl90b2tlbi5hc19kZXJlZigpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZm8hKCJwcm9jZXNzZWQge2No dW5rX2NvdW50fSB0b3RhbCBjaHVua3MiKTsKKworICAgICAgICAgICAgICAgIC8vIFBoYXNlIDIg R0Mgb2YgRmlsZXN5c3RlbSBiYWNrZWQgc3RvcmFnZSBpcyBwaGFzZSAzIGZvciBTMyBiYWNrZWQg R0MKKyAgICAgICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhhc2UzIChzd2VlcCB1bnVzZWQg Y2h1bmsgbWFya2VycykiKTsKKworICAgICAgICAgICAgICAgIGxldCBtdXQgdG1wX2djX3N0YXR1 cyA9IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgICAgICAgICAgdXBpZDog U29tZSh1cGlkLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0Ojpk ZWZhdWx0KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIu Y2h1bmtfc3RvcmUuc3dlZXBfdW51c2VkX2NodW5rcygKKyAgICAgICAgICAgICAgICAgICAgb2xk ZXN0X3dyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgbWluX2F0aW1lLAorICAgICAgICAgICAg ICAgICAgICAmbXV0IHRtcF9nY19zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgIHdvcmtlciwK KyAgICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgc2VsZi5pbm5lci5jaHVua19zdG9yZS5zd2VlcF91bnVzZWRfY2h1bmtzKAorICAgICAgICAg ICAgICAgICAgICBvbGRlc3Rfd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICBtaW5fYXRpbWUs CisgICAgICAgICAgICAgICAgICAgICZtdXQgZ2Nfc3RhdHVzLAorICAgICAgICAgICAgICAgICAg ICB3b3JrZXIsCisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAgICB9CiAKICAgICAgICAg ICAgIGluZm8hKAogICAgICAgICAgICAgICAgICJSZW1vdmVkIGdhcmJhZ2U6IHt9IiwKLS0gCjIu NDcuMgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpw YnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczov L2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2ZWwK