From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 9605C1FF164 for <inbox@lore.proxmox.com>; Fri, 23 May 2025 18:00:51 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 751B01E4C8; Fri, 23 May 2025 18:00:37 +0200 (CEST) From: Aaron Lauterer <a.lauterer@proxmox.com> To: pve-devel@lists.proxmox.com Date: Fri, 23 May 2025 18:00:13 +0200 Message-Id: <20250523160029.404400-4-a.lauterer@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250523160029.404400-1-a.lauterer@proxmox.com> References: <20250523160029.404400-1-a.lauterer@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.030 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: [pve-devel] [PATCH pve9-rrd-migration-tool 1/1] introduce rrd migration tool for pve8 -> pve9 X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> U2lnbmVkLW9mZi1ieTogQWFyb24gTGF1dGVyZXIgPGEubGF1dGVyZXJAcHJveG1veC5jb20+Ci0t LQogLmNhcmdvL2NvbmZpZy50b21sICAgICAgfCAgIDggKwogLmdpdGlnbm9yZSAgICAgICAgICAg ICAgfCAgIDUgKwogQ2FyZ28udG9tbCAgICAgICAgICAgICAgfCAgMjAgKysKIGJ1aWxkLnJzICAg ICAgICAgICAgICAgIHwgIDI5ICsrKwogc3JjL2xpYi5ycyAgICAgICAgICAgICAgfCAgIDUgKwog c3JjL21haW4ucnMgICAgICAgICAgICAgfCA1MDQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL3BhcmFsbGVsX2hhbmRsZXIucnMgfCAxNjIgKysrKysrKysrKysr Kwogd3JhcHBlci5oICAgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCA3MzQg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5jYXJnby9jb25maWcudG9tbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDYXJnby50b21s CiBjcmVhdGUgbW9kZSAxMDA2NDQgYnVpbGQucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvbGli LnJzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL21haW4ucnMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvcGFyYWxsZWxfaGFuZGxlci5ycwogY3JlYXRlIG1vZGUgMTAwNjQ0IHdyYXBwZXIuaAoKZGlm ZiAtLWdpdCBhLy5jYXJnby9jb25maWcudG9tbCBiLy5jYXJnby9jb25maWcudG9tbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM5Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIv LmNhcmdvL2NvbmZpZy50b21sCkBAIC0wLDAgKzEsOCBAQAorW3NvdXJjZV0KK1tzb3VyY2UuZGVi aWFuLXBhY2thZ2VzXQorZGlyZWN0b3J5ID0gIi91c3Ivc2hhcmUvY2FyZ28vcmVnaXN0cnkiCitb c291cmNlLmNyYXRlcy1pb10KK3JlcGxhY2Utd2l0aCA9ICJkZWJpYW4tcGFja2FnZXMiCisKK1tw cm9maWxlLnJlbGVhc2VdCitkZWJ1Zz10cnVlCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdp dGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQxZTYzCi0tLSAv ZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDUgQEAKKy4vdGFyZ2V0CisuL2J1 aWxkCisKK0NhcmdvLmxvY2sKKwpkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0NhcmdvLnRvbWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1MjNmMwotLS0gL2Rldi9udWxs CisrKyBiL0NhcmdvLnRvbWwKQEAgLTAsMCArMSwyMCBAQAorW3BhY2thZ2VdCituYW1lID0gInBy b3htb3hfcnJkX21pZ3JhdGlvbl84LTkiCit2ZXJzaW9uID0gIjAuMS4wIgorZWRpdGlvbiA9ICIy MDIxIgorYXV0aG9ycyA9IFsKKyAgICAiQWFyb24gTGF1dGVyZXIgPGEubGF1dGVyZXJAcHJveG1v eC5jb20+IiwKKyAgICAiUHJveG1veCBTdXBwb3J0IFRlYW0gPHN1cHBvcnRAcHJveG1veC5jb20+ IiwKK10KK2xpY2Vuc2UgPSAiQUdQTC0zIgoraG9tZXBhZ2UgPSAiaHR0cHM6Ly93d3cucHJveG1v eC5jb20iCisKK1tkZXBlbmRlbmNpZXNdCithbnlob3cgPSAiMS4wLjg2IgorcGljby1hcmdzID0g IjAuNS4wIgorcHJveG1veC1hc3luYyA9ICIwLjQiCitjcm9zc2JlYW0tY2hhbm5lbCA9ICIwLjUi CisKK1tidWlsZC1kZXBlbmRlbmNpZXNdCitiaW5kZ2VuID0gIjAuNjYuMSIKK3BrZy1jb25maWcg PSAiMC4zIgpkaWZmIC0tZ2l0IGEvYnVpbGQucnMgYi9idWlsZC5ycwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi41NmQwN2NjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbGQucnMK QEAgLTAsMCArMSwyOSBAQAordXNlIHN0ZDo6ZW52OwordXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsK KworZm4gbWFpbigpIHsKKyAgICBwcmludGxuISgiY2FyZ286cnVzdGMtbGluay1saWI9cnJkIik7 CisKKyAgICBwcmludGxuISgiY2FyZ286cmVydW4taWYtY2hhbmdlZD13cmFwcGVyLmgiKTsKKyAg ICAvLyBUaGUgYmluZGdlbjo6QnVpbGRlciBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludAorICAgIC8v IHRvIGJpbmRnZW4sIGFuZCBsZXRzIHlvdSBidWlsZCB1cCBvcHRpb25zIGZvcgorICAgIC8vIHRo ZSByZXN1bHRpbmcgYmluZGluZ3MuCisKKyAgICBsZXQgYmluZGluZ3MgPSBiaW5kZ2VuOjpCdWls ZGVyOjpkZWZhdWx0KCkKKyAgICAgICAgLy8gVGhlIGlucHV0IGhlYWRlciB3ZSB3b3VsZCBsaWtl IHRvIGdlbmVyYXRlCisgICAgICAgIC8vIGJpbmRpbmdzIGZvci4KKyAgICAgICAgLmhlYWRlcigi d3JhcHBlci5oIikKKyAgICAgICAgLy8gVGVsbCBjYXJnbyB0byBpbnZhbGlkYXRlIHRoZSBidWls dCBjcmF0ZSB3aGVuZXZlciBhbnkgb2YgdGhlCisgICAgICAgIC8vIGluY2x1ZGVkIGhlYWRlciBm aWxlcyBjaGFuZ2VkLgorICAgICAgICAucGFyc2VfY2FsbGJhY2tzKEJveDo6bmV3KGJpbmRnZW46 OkNhcmdvQ2FsbGJhY2tzKSkKKyAgICAgICAgLy8gRmluaXNoIHRoZSBidWlsZGVyIGFuZCBnZW5l cmF0ZSB0aGUgYmluZGluZ3MuCisgICAgICAgIC5nZW5lcmF0ZSgpCisgICAgICAgIC8vIFVud3Jh cCB0aGUgUmVzdWx0IGFuZCBwYW5pYyBvbiBmYWlsdXJlLgorICAgICAgICAuZXhwZWN0KCJVbmFi bGUgdG8gZ2VuZXJhdGUgYmluZGluZ3MiKTsKKworICAgIC8vIFdyaXRlIHRoZSBiaW5kaW5ncyB0 byB0aGUgJE9VVF9ESVIvYmluZGluZ3MucnMgZmlsZS4KKyAgICBsZXQgb3V0X3BhdGggPSBQYXRo QnVmOjpmcm9tKGVudjo6dmFyKCJPVVRfRElSIikudW53cmFwKCkpOworICAgIGJpbmRpbmdzCisg ICAgICAgIC53cml0ZV90b19maWxlKG91dF9wYXRoLmpvaW4oImJpbmRpbmdzLnJzIikpCisgICAg ICAgIC5leHBlY3QoIkNvdWxkbid0IHdyaXRlIGJpbmRpbmdzISIpOworfQpkaWZmIC0tZ2l0IGEv c3JjL2xpYi5ycyBiL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYTM4YTEzYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9saWIucnMKQEAgLTAsMCArMSw1IEBA CisjIVthbGxvdyhub25fdXBwZXJfY2FzZV9nbG9iYWxzKV0KKyMhW2FsbG93KG5vbl9jYW1lbF9j YXNlX3R5cGVzKV0KKyMhW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KKworaW5jbHVkZSEoY29uY2F0 IShlbnYhKCJPVVRfRElSIiksICIvYmluZGluZ3MucnMiKSk7CmRpZmYgLS1naXQgYS9zcmMvbWFp bi5ycyBiL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz ZjE4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFpbi5ycwpAQCAtMCwwICsxLDUwNCBAQAor dXNlIGFueWhvdzo6e2JhaWwsIEVycm9yLCBSZXN1bHR9OwordXNlIHByb3htb3hfcnJkX21pZ3Jh dGlvbl84Xzk6OntycmRfY2xlYXJfZXJyb3IsIHJyZF9jcmVhdGVfcjIsIHJyZF9nZXRfY29udGV4 dCwgcnJkX2dldF9lcnJvcn07Cit1c2Ugc3RkOjpmZmk6OntDU3RyLCBDU3RyaW5nLCBPc1N0cmlu Z307Cit1c2Ugc3RkOjpmczsKK3VzZSBzdGQ6Om9zOjp1bml4OjpmZmk6Ok9zU3RyRXh0OwordXNl IHN0ZDo6b3M6OnVuaXg6OmZzOjpQZXJtaXNzaW9uc0V4dDsKK3VzZSBzdGQ6OnBhdGg6OlBhdGhC dWY7Cit1c2Ugc3RkOjpzeW5jOjpBcmM7CisKK3VzZSBjcmF0ZTo6cGFyYWxsZWxfaGFuZGxlcjo6 UGFyYWxsZWxIYW5kbGVyOworCitwdWIgbW9kIHBhcmFsbGVsX2hhbmRsZXI7CisKK2NvbnN0IEJB U0VfRElSOiAmc3RyID0gIi92YXIvbGliL3JyZGNhY2hlZC9kYiI7Citjb25zdCBTT1VSQ0VfU1VC RElSX05PREU6ICZzdHIgPSAicHZlMi1ub2RlIjsKK2NvbnN0IFNPVVJDRV9TVUJESVJfR1VFU1Q6 ICZzdHIgPSAicHZlMi12bSI7Citjb25zdCBTT1VSQ0VfU1VCRElSX1NUT1JBR0U6ICZzdHIgPSAi cHZlMi1zdG9yYWdlIjsKK2NvbnN0IFRBUkdFVF9TVUJESVJfTk9ERTogJnN0ciA9ICJwdmU5LW5v ZGUiOworY29uc3QgVEFSR0VUX1NVQkRJUl9HVUVTVDogJnN0ciA9ICJwdmU5LXZtIjsKK2NvbnN0 IFRBUkdFVF9TVUJESVJfU1RPUkFHRTogJnN0ciA9ICJwdmU5LXN0b3JhZ2UiOworY29uc3QgTUFY X1RIUkVBRFM6IHVzaXplID0gNDsKK2NvbnN0IFJSRF9TVEVQX1NJWkU6IHVzaXplID0gNjA7CisK Ky8vIFJSQXMgYXJlIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisvLworLy8gUlJBOkNG OnhmZjpzdGVwOnJvd3MKKy8vIENGOiBBVkVSQUdFIG9yIE1BWAorLy8geGZmOiAwLjUKKy8vIHN0 ZXBzOiBzdGVwc2l6ZSBpcyBkZWZpbmVkIG9uIHJyZCBmaWxlIGNyZWF0aW9uISBleGFtcGxlOiB3 aXRoIDYwIHNlY29uZHMgc3RlcCBzaXplOgorLy8JZS5nLiAxID0+IDYwIHNlYywgMzAgPT4gMTgw MCBzZWNvbmRzIG9yIDMwIG1pbgorLy8gcm93czogaG93IG1hbnkgYWdncmVnYXRlZCByb3dzIGFy ZSBrZXB0LCBhcyBpbiBob3cgZmFyIGJhY2sgaW4gdGltZSB3ZSBzdG9yZSBkYXRhCisvLworLy8g aG93IG1hbnkgc2Vjb25kcyBhcmUgYWdncmVnYXRlZCBwZXIgUlJBOiBzdGVwcyAqIHN0ZXBzaXpl ICogcm93cworLy8gaG93IG1hbnkgaG91cnMgYXJlIGFnZ3JlZ2F0ZWQgcGVyIFJSQTogc3RlcHMg KiBzdGVwc2l6ZSAqIHJvd3MgLyAzNjAwCisvLyBob3cgbWFueSBkYXlzIGFyZSBhZ2dyZWdhdGVk IHBlciBSUkE6IHN0ZXBzICogc3RlcHNpemUgKiByb3dzIC8gMzYwMCAvIDI0CisvLyBodHRwczov L29zcy5vZXRpa2VyLmNoL3JyZHRvb2wvdHV0L3JyZC1iZWdpbm5lcnMuZW4uaHRtbCNVbmRlcnN0 YW5kaW5nX2J5X2FuX2V4YW1wbGUKKworY29uc3QgUlJEX1ZNX0RFRjogWyZDU3RyOyAyNV0gPSBb CisgICAgYyJEUzptYXhjcHU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpjcHU6R0FVR0U6MTIw OjA6VSIsCisgICAgYyJEUzptYXhtZW06R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzptZW06R0FV R0U6MTIwOjA6VSIsCisgICAgYyJEUzptYXhkaXNrOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6 ZGlzazpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm5ldGluOkRFUklWRToxMjA6MDpVIiwKKyAg ICBjIkRTOm5ldG91dDpERVJJVkU6MTIwOjA6VSIsCisgICAgYyJEUzpkaXNrcmVhZDpERVJJVkU6 MTIwOjA6VSIsCisgICAgYyJEUzpkaXNrd3JpdGU6REVSSVZFOjEyMDowOlUiLAorICAgIGMiRFM6 bWVtaG9zdDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlY3B1c29tZTpHQVVHRTox MjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlY3B1ZnVsbDpHQVVHRToxMjA6MDpVIiwKKyAgICBj IkRTOnByZXNzdXJlaW9zb21lOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVpb2Z1 bGw6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZW1lbW9yeXNvbWU6R0FVR0U6MTIw OjA6VSIsCisgICAgYyJEUzpwcmVzc3VyZW1lbW9yeWZ1bGw6R0FVR0U6MTIwOjA6VSIsCisgICAg YyJSUkE6QVZFUkFHRTowLjU6MToxNDQwIiwgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5Cisg ICAgYyJSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCIsICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBk YXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozNjA6MTQ0MCIsICAvLyA2IGhvdXJzICogMTQ0MCA9 PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxMDA4MDo1NzAiLCAvLyAx IHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCisgICAgYyJSUkE6TUFYOjAuNToxOjE0NDAiLCAgICAg ICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5CisgICAgYyJSUkE6TUFYOjAuNTozMDoxNDQwIiwg ICAgICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpNQVg6MC41OjM2MDox NDQwIiwgICAgICAvLyA2IGhvdXJzICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJS QTpNQVg6MC41OjEwMDgwOjU3MCIsICAgICAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCitd OworCitjb25zdCBSUkRfTk9ERV9ERUY6IFsmQ1N0cjsgMjldID0gWworICAgIGMiRFM6bG9hZGF2 ZzpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm1heGNwdTpHQVVHRToxMjA6MDpVIiwKKyAgICBj IkRTOmNwdTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOmlvd2FpdDpHQVVHRToxMjA6MDpVIiwK KyAgICBjIkRTOm1lbXRvdGFsOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6bWVtdXNlZDpHQVVH RToxMjA6MDpVIiwKKyAgICBjIkRTOnN3YXB0b3RhbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRT OnN3YXB1c2VkOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cm9vdHRvdGFsOkdBVUdFOjEyMDow OlUiLAorICAgIGMiRFM6cm9vdHVzZWQ6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpuZXRpbjpE RVJJVkU6MTIwOjA6VSIsCisgICAgYyJEUzpuZXRvdXQ6REVSSVZFOjEyMDowOlUiLAorICAgIGMi RFM6bWVtZnJlZTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOm1lbWJ1ZmZlcnM6R0FVR0U6MTIw OjA6VSIsCisgICAgYyJEUzptZW1jYWNoZWQ6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzphcmNz aXplOkdBVUdFOjEyMDowOlUiLAorICAgIGMiRFM6cHJlc3N1cmVjcHVzb21lOkdBVUdFOjEyMDow OlUiLAorICAgIGMiRFM6cHJlc3N1cmVpb3NvbWU6R0FVR0U6MTIwOjA6VSIsCisgICAgYyJEUzpw cmVzc3VyZWlvZnVsbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlbWVtb3J5c29t ZTpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnByZXNzdXJlbWVtb3J5ZnVsbDpHQVVHRToxMjA6 MDpVIiwKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxOjE0NDAiLCAgICAvLyAxIG1pbiAqIDE0NDAg PT4gMSBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozMDoxNDQwIiwgICAvLyAzMCBtaW4gKiAx NDQwID0+IDMwIGRheQorICAgIGMiUlJBOkFWRVJBR0U6MC41OjM2MDoxNDQwIiwgIC8vIDYgaG91 cnMgKiAxNDQwID0+IDM2MCBkYXkgfjEgeWVhcgorICAgIGMiUlJBOkFWRVJBR0U6MC41OjEwMDgw OjU3MCIsIC8vIDEgd2VlayAqIDU3MCA9PiB+MTAgeWVhcnMKKyAgICBjIlJSQTpNQVg6MC41OjE6 MTQ0MCIsICAgICAgICAvLyAxIG1pbiAqIDE0NDAgPT4gMSBkYXkKKyAgICBjIlJSQTpNQVg6MC41 OjMwOjE0NDAiLCAgICAgICAvLyAzMCBtaW4gKiAxNDQwID0+IDMwIGRheQorICAgIGMiUlJBOk1B WDowLjU6MzYwOjE0NDAiLCAgICAgIC8vIDYgaG91cnMgKiAxNDQwID0+IDM2MCBkYXkgfjEgeWVh cgorICAgIGMiUlJBOk1BWDowLjU6MTAwODA6NTcwIiwgICAgIC8vIDEgd2VlayAqIDU3MCA9PiB+ MTAgeWVhcnMKK107CisKK2NvbnN0IFJSRF9TVE9SQUdFX0RFRjogWyZDU3RyOyAxMF0gPSBbCisg ICAgYyJEUzp0b3RhbDpHQVVHRToxMjA6MDpVIiwKKyAgICBjIkRTOnVzZWQ6R0FVR0U6MTIwOjA6 VSIsCisgICAgYyJSUkE6QVZFUkFHRTowLjU6MToxNDQwIiwgICAgLy8gMSBtaW4gKiAxNDQwID0+ IDEgZGF5CisgICAgYyJSUkE6QVZFUkFHRTowLjU6MzA6MTQ0MCIsICAgLy8gMzAgbWluICogMTQ0 MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpBVkVSQUdFOjAuNTozNjA6MTQ0MCIsICAvLyA2IGhvdXJz ICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIKKyAgICBjIlJSQTpBVkVSQUdFOjAuNToxMDA4MDo1 NzAiLCAvLyAxIHdlZWsgKiA1NzAgPT4gfjEwIHllYXJzCisgICAgYyJSUkE6TUFYOjAuNToxOjE0 NDAiLCAgICAgICAgLy8gMSBtaW4gKiAxNDQwID0+IDEgZGF5CisgICAgYyJSUkE6TUFYOjAuNToz MDoxNDQwIiwgICAgICAgLy8gMzAgbWluICogMTQ0MCA9PiAzMCBkYXkKKyAgICBjIlJSQTpNQVg6 MC41OjM2MDoxNDQwIiwgICAgICAvLyA2IGhvdXJzICogMTQ0MCA9PiAzNjAgZGF5IH4xIHllYXIK KyAgICBjIlJSQTpNQVg6MC41OjEwMDgwOjU3MCIsICAgICAvLyAxIHdlZWsgKiA1NzAgPT4gfjEw IHllYXJzCitdOworCitjb25zdCBIRUxQOiAmc3RyID0gIlwKK3Byb3htb3gtcnJkLW1pZ3JhdGlv biB0b29sCisKK01pZ3JhdGVzIGV4aXN0aW5nIFJSRCBncmFwaCBkYXRhIHRvIHRoZSBuZXcgZm9y bWF0LgorCitVc2UgdGhpcyBvbmx5IGluIHRoZSBwcm9jZXNzIG9mIHVwZ3JhZGluZyBmcm9tIFBy b3htb3ggVkUgOCB0byA5IGFjY29yZGluZyB0byB0aGUgdXBncmFkZSBndWlkZSEKKworVVNBR0U6 CisgICAgcHJveG1veC1ycmQtbWlncmF0aW9uIFtPUFRJT05TXQorCisgICAgRkxBR1M6CisgICAg ICAgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgICBQcmludHMgdGhpcyBoZWxwIGluZm9ybWF0 aW9uCisKKyAgICBPUFRJT05TOgorICAgICAgICAtLWZvcmNlICAgICAgICAgICAgICAgICAgICAg TWlncmF0ZSwgZXZlbiBpZiB0aGUgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIG92ZXJ3cml0ZSBhbnkgbWlncmF0ZWQg UlJEIGZpbGVzIQorCisgICAgICAgIC0tdGhyZWFkcyBUSFJFQURTICAgICAgICAgICBOdW1iZXIg b2YgcGFyYWxlbGwgdGhyZWFkcy4gRGVmYXVsdCBmcm9tIDEgdG8gNC4KKworICAgICAgICAtLXRl c3QgICAgICAgICAgICAgICAgICAgICAgRm9yIGludGVybmFsIHVzZSBvbmx5LgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdHMgcGFyYWxsZWwgZ3Vlc3QgbWlncmF0aW9u IG9ubHkhCisgICAgICAgIC0tc291cmNlICAgICAgICAgICAgICAgICAgICBGb3IgaW50ZXJuYWwg dXNlIG9ubHkuIFNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgIC0tdGFyZ2V0ICAgICAgICAgICAg ICAgICAgICBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIFRhcmdldCBkaXJlY3RvcnkuCisgICAgICAi OworCisjW2Rlcml2ZShEZWJ1ZyldCitzdHJ1Y3QgQXJncyB7CisgICAgZm9yY2U6IGJvb2wsCisg ICAgdGhyZWFkczogT3B0aW9uPHVzaXplPiwKKyAgICB0ZXN0OiBib29sLAorICAgIHNvdXJjZTog T3B0aW9uPFBhdGhCdWY+LAorICAgIHRhcmdldDogT3B0aW9uPFBhdGhCdWY+LAorfQorCitmbiBw YXJzZV9hcmdzKCkgLT4gUmVzdWx0PEFyZ3MsIEVycm9yPiB7CisgICAgbGV0IG11dCBwYXJncyA9 IHBpY29fYXJnczo6QXJndW1lbnRzOjpmcm9tX2VudigpOworCisgICAgLy8gSGVscCBoYXMgYSBo aWdoZXIgcHJpb3JpdHkgYW5kIHNob3VsZCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgaWYg cGFyZ3MuY29udGFpbnMoWyItaCIsICItLWhlbHAiXSkgeworICAgICAgICBwcmludCEoInt9Iiwg SEVMUCk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgwKTsKKyAgICB9CisKKyAgICBsZXQg bXV0IGFyZ3MgPSBBcmdzIHsKKyAgICAgICAgdGhyZWFkczogcGFyZ3Mub3B0X3ZhbHVlX2Zyb21f c3RyKCItLXRocmVhZHMiKS51bndyYXAoKSwKKyAgICAgICAgZm9yY2U6IGZhbHNlLAorICAgICAg ICB0ZXN0OiBmYWxzZSwKKyAgICAgICAgc291cmNlOiBwYXJncy5vcHRfdmFsdWVfZnJvbV9zdHIo Ii0tc291cmNlIikudW53cmFwKCksCisgICAgICAgIHRhcmdldDogcGFyZ3Mub3B0X3ZhbHVlX2Zy b21fc3RyKCItLXRhcmdldCIpLnVud3JhcCgpLAorICAgIH07CisKKyAgICBpZiBwYXJncy5jb250 YWlucygiLS10ZXN0IikgeworICAgICAgICBhcmdzLnRlc3QgPSB0cnVlOworICAgIH0KKyAgICBp ZiBwYXJncy5jb250YWlucygiLS1mb3JjZSIpIHsKKyAgICAgICAgYXJncy5mb3JjZSA9IHRydWU7 CisgICAgfQorCisgICAgLy8gSXQncyB1cCB0byB0aGUgY2FsbGVyIHdoYXQgdG8gZG8gd2l0aCB0 aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKyAgICBsZXQgcmVtYWluaW5nID0gcGFyZ3MuZmluaXNo KCk7CisgICAgaWYgIXJlbWFpbmluZy5pc19lbXB0eSgpIHsKKyAgICAgICAgYmFpbCEoZm9ybWF0 ISgiV2FybmluZzogdW51c2VkIGFyZ3VtZW50cyBsZWZ0OiB7Oj99IiwgcmVtYWluaW5nKSk7Cisg ICAgfQorCisgICAgT2soYXJncykKK30KKworZm4gbWFpbigpIHsKKyAgICBsZXQgYXJncyA9IG1h dGNoIHBhcnNlX2FyZ3MoKSB7CisgICAgICAgIE9rKHYpID0+IHYsCisgICAgICAgIEVycihlKSA9 PiB7CisgICAgICAgICAgICBlcHJpbnRsbiEoIkVycm9yOiB7fS4iLCBlKTsKKyAgICAgICAgICAg IHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgbXV0 IHNvdXJjZV9kaXJfZ3Vlc3RzOiBQYXRoQnVmID0gW0JBU0VfRElSLCBTT1VSQ0VfU1VCRElSX0dV RVNUXS5pdGVyKCkuY29sbGVjdCgpOworICAgIGxldCBtdXQgdGFyZ2V0X2Rpcl9ndWVzdHM6IFBh dGhCdWYgPSBbQkFTRV9ESVIsIFRBUkdFVF9TVUJESVJfR1VFU1RdLml0ZXIoKS5jb2xsZWN0KCk7 CisgICAgbGV0IHNvdXJjZV9kaXJfbm9kZXM6IFBhdGhCdWYgPSBbQkFTRV9ESVIsIFNPVVJDRV9T VUJESVJfTk9ERV0uaXRlcigpLmNvbGxlY3QoKTsKKyAgICBsZXQgdGFyZ2V0X2Rpcl9ub2Rlczog UGF0aEJ1ZiA9IFtCQVNFX0RJUiwgVEFSR0VUX1NVQkRJUl9OT0RFXS5pdGVyKCkuY29sbGVjdCgp OworICAgIGxldCBzb3VyY2VfZGlyX3N0b3JhZ2U6IFBhdGhCdWYgPSBbQkFTRV9ESVIsIFNPVVJD RV9TVUJESVJfU1RPUkFHRV0uaXRlcigpLmNvbGxlY3QoKTsKKyAgICBsZXQgdGFyZ2V0X2Rpcl9z dG9yYWdlOiBQYXRoQnVmID0gW0JBU0VfRElSLCBUQVJHRVRfU1VCRElSX1NUT1JBR0VdLml0ZXIo KS5jb2xsZWN0KCk7CisKKyAgICBpZiBhcmdzLnRlc3QgeworICAgICAgICBzb3VyY2VfZGlyX2d1 ZXN0cyA9IGFyZ3Muc291cmNlLmNsb25lKCkudW53cmFwKCk7CisgICAgICAgIHRhcmdldF9kaXJf Z3Vlc3RzID0gYXJncy50YXJnZXQuY2xvbmUoKS51bndyYXAoKTsKKyAgICB9CisKKyAgICBpZiAh YXJncy5mb3JjZSAmJiB0YXJnZXRfZGlyX2d1ZXN0cy5leGlzdHMoKSB7CisgICAgICAgIGVwcmlu dGxuISgKKyAgICAgICAgICAgICJBYm9ydGluZyEgVGFyZ2V0IHBhdGggZm9yIGd1ZXN0cyBhbHJl YWR5IGV4aXN0cy4gVXNlICctLWZvcmNlJyB0byBzdGlsbCBtaWdyYXRlLiBJdCB3aWxsIG92ZXJ3 cml0ZSBleGlzdGluZyBmaWxlcyEiCisgICAgICAgICk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6 ZXhpdCgxKTsKKyAgICB9CisgICAgaWYgIWFyZ3MuZm9yY2UgJiYgdGFyZ2V0X2Rpcl9ub2Rlcy5l eGlzdHMoKSB7CisgICAgICAgIGVwcmludGxuISgKKyAgICAgICAgICAgICJBYm9ydGluZyEgVGFy Z2V0IHBhdGggZm9yIG5vZGVzIGFscmVhZHkgZXhpc3RzLiBVc2UgJy0tZm9yY2UnIHRvIHN0aWxs IG1pZ3JhdGUuIEl0IHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzISIKKyAgICAgICAgKTsK KyAgICAgICAgc3RkOjpwcm9jZXNzOjpleGl0KDEpOworICAgIH0KKyAgICBpZiAhYXJncy5mb3Jj ZSAmJiB0YXJnZXRfZGlyX3N0b3JhZ2UuZXhpc3RzKCkgeworICAgICAgICBlcHJpbnRsbiEoCisg ICAgICAgICAgICAiQWJvcnRpbmchIFRhcmdldCBwYXRoIGZvciBzdG9yYWdlcyBhbHJlYWR5IGV4 aXN0cy4gVXNlICctLWZvcmNlJyB0byBzdGlsbCBtaWdyYXRlLiBJdCB3aWxsIG92ZXJ3cml0ZSBl eGlzdGluZyBmaWxlcyEiCisgICAgICAgICk7CisgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgx KTsKKyAgICB9CisKKyAgICBpZiAhYXJncy50ZXN0IHsKKyAgICAgICAgaWYgbGV0IEVycihlKSA9 IG1pZ3JhdGVfbm9kZXMoc291cmNlX2Rpcl9ub2RlcywgdGFyZ2V0X2Rpcl9ub2RlcykgeworICAg ICAgICAgICAgZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgbm9kZXM6IHt9IiwgZSk7CisgICAg ICAgICAgICBzdGQ6OnByb2Nlc3M6OmV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgbGV0 IEVycihlKSA9IG1pZ3JhdGVfc3RvcmFnZShzb3VyY2VfZGlyX3N0b3JhZ2UsIHRhcmdldF9kaXJf c3RvcmFnZSkgeworICAgICAgICAgICAgZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgc3RvcmFn ZToge30iLCBlKTsKKyAgICAgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgxKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBpZiBsZXQgRXJyKGUpID0gbWlncmF0ZV9ndWVzdHMoc291cmNlX2Rpcl9n dWVzdHMsIHRhcmdldF9kaXJfZ3Vlc3RzLCBzZXRfdGhyZWFkcygmYXJncykpIHsKKyAgICAgICAg ZXByaW50bG4hKCJFcnJvciBtaWdyYXRpbmcgZ3Vlc3RzOiB7fSIsIGUpOworICAgICAgICBzdGQ6 OnByb2Nlc3M6OmV4aXQoMSk7CisgICAgfQorfQorCisvLy8gU2V0IG51bWJlciBvZiB0aHJlYWRz CisvLy8KKy8vLyBFaXRoZXIgYSBmaXhlZCBwYXJhbWV0ZXIgb3IgZGV0ZXJtaW5pbmcgYSByYW5n ZSBiZXR3ZWVuIDEgdG8gNCB0aHJlYWRzCisvLy8gIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgQ1BV IGNvcmVzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLgorZm4gc2V0X3RocmVhZHMoYXJnczogJkFy Z3MpIC0+IHVzaXplIHsKKyAgICBpZiBhcmdzLnRocmVhZHMuaXNfc29tZSgpIHsKKyAgICAgICAg cmV0dXJuIGFyZ3MudGhyZWFkcy51bndyYXAoKTsKKyAgICB9CisgICAgLy8gY2hlY2sgZm9yIGEg d2F5IHRvIGdldCBwaHlzaWNhbCBjb3JlcyBhbmQgbm90IHRocmVhZHM/CisgICAgbGV0IGNwdXM6 IHVzaXplID0gU3RyaW5nOjpmcm9tX3V0ZjhfbG9zc3koCisgICAgICAgIHN0ZDo6cHJvY2Vzczo6 Q29tbWFuZDo6bmV3KCJucHJvYyIpCisgICAgICAgICAgICAub3V0cHV0KCkKKyAgICAgICAgICAg IC5leHBlY3QoIkVycm9yIHJ1bm5pbmcgbnByb2MiKQorICAgICAgICAgICAgLnN0ZG91dAorICAg ICAgICAgICAgLmFzX3NsaWNlKCkKKyAgICAgICAgICAgIC50cmltX2FzY2lpKCksCisgICAgKQor ICAgIC5wYXJzZTo6PHVzaXplPigpCisgICAgLmV4cGVjdCgiQ291bGQgbm90IHBhcnNlIG5wcm9j IG91dHB1dCIpOworCisgICAgaWYgY3B1cyA8IDMyIHsKKyAgICAgICAgbGV0IHRocmVhZHMgPSBj cHVzIC8gODsKKyAgICAgICAgaWYgdGhyZWFkcyA9PSAwIHsKKyAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aHJlYWRzOworICAgIH0KKyAgICByZXR1cm4g TUFYX1RIUkVBRFM7Cit9CisKKy8vLyBNaWdyYXRlIGd1ZXN0IFJSRCBmaWxlcworLy8vCisvLy8g SW4gcGFyYWxsZWwgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3MgYXMgbW9zdCB0aW1lIGlzIHNwZW50 IG9uIGNvbnZlcnRpbmcgdGhlCisvLy8gZGF0YSB0byB0aGUgbmV3IGZvcm1hdC4KK2ZuIG1pZ3Jh dGVfZ3Vlc3RzKAorICAgIHNvdXJjZV9kaXJfZ3Vlc3RzOiBQYXRoQnVmLAorICAgIHRhcmdldF9k aXJfZ3Vlc3RzOiBQYXRoQnVmLAorICAgIHRocmVhZHM6IHVzaXplLAorKSAtPiBSZXN1bHQ8KCks IEVycm9yPiB7CisgICAgcHJpbnRsbiEoIk1pZ3JhdGluZyBSUkQgZGF0YSBmb3IgZ3Vlc3Rz4oCm Iik7CisgICAgcHJpbnRsbiEoIlVzaW5nIHt9IHRocmVhZChzKSIsIHRocmVhZHMpOworCisgICAg bGV0IG11dCBndWVzdF9zb3VyY2VfZmlsZXM6IFZlYzwoQ1N0cmluZywgT3NTdHJpbmcpPiA9IFZl Yzo6bmV3KCk7CisKKyAgICBmczo6cmVhZF9kaXIoJnNvdXJjZV9kaXJfZ3Vlc3RzKT8KKyAgICAg ICAgLmZpbHRlcih8ZnwgZi5pc19vaygpKQorICAgICAgICAubWFwKHxmfCBmLnVud3JhcCgpLnBh dGgoKSkKKyAgICAgICAgLmZpbHRlcih8ZnwgZi5pc19maWxlKCkpCisgICAgICAgIC5mb3JfZWFj aCh8ZmlsZXwgeworICAgICAgICAgICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19w YXRoKCkuYXNfb3Nfc3RyKCkuYXNfYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJD b3VsZCBub3QgY29udmVydCBwYXRoIHRvIENTdHJpbmcuIik7CisgICAgICAgICAgICBsZXQgZm5h bWUgPSBmaWxlCisgICAgICAgICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAgICAg Lm1hcCh8dnwgdi50b19vc19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3Vs ZCBub3QgY29udmVydCBmbmFtZSB0byBPc1N0cmluZy4iKTsKKyAgICAgICAgICAgIGd1ZXN0X3Nv dXJjZV9maWxlcy5wdXNoKChwYXRoLCBmbmFtZSkpCisgICAgICAgIH0pOworICAgIGlmICF0YXJn ZXRfZGlyX2d1ZXN0cy5leGlzdHMoKSB7CisgICAgICAgIHByaW50bG4hKCJDcmVhdGluZyBuZXcg ZGlyZWN0b3J5OiAne30nIiwgdGFyZ2V0X2Rpcl9ndWVzdHMuZGlzcGxheSgpKTsKKyAgICAgICAg c3RkOjpmczo6Y3JlYXRlX2RpcigmdGFyZ2V0X2Rpcl9ndWVzdHMpPzsKKyAgICB9CisKKyAgICBs ZXQgdG90YWxfZ3Vlc3RzID0gZ3Vlc3Rfc291cmNlX2ZpbGVzLmxlbigpOworICAgIGxldCBndWVz dHMgPSBBcmM6Om5ldyhzdGQ6OnN5bmM6OmF0b21pYzo6QXRvbWljVXNpemU6Om5ldygwKSk7Cisg ICAgbGV0IGd1ZXN0czIgPSBndWVzdHMuY2xvbmUoKTsKKyAgICBsZXQgc3RhcnRfdGltZSA9IHN0 ZDo6dGltZTo6U3lzdGVtVGltZTo6bm93KCk7CisKKyAgICBsZXQgbWlncmF0aW9uX3Bvb2wgPSBQ YXJhbGxlbEhhbmRsZXI6Om5ldygKKyAgICAgICAgImd1ZXN0IHJyZCBtaWdyYXRpb24iLAorICAg ICAgICB0aHJlYWRzLAorICAgICAgICBtb3ZlIHwocGF0aCwgZm5hbWUpOiAoQ1N0cmluZywgT3NT dHJpbmcpfCB7CisgICAgICAgICAgICBsZXQgbXV0IHNvdXJjZTogWypjb25zdCBpODsgMl0gPSBb c3RkOjpwdHI6Om51bGwoKTsgMl07CisgICAgICAgICAgICBzb3VyY2VbMF0gPSBwYXRoLmFzX3B0 cigpOworCisgICAgICAgICAgICBsZXQgbm9kZV9uYW1lID0gZm5hbWU7CisgICAgICAgICAgICBs ZXQgbXV0IHRhcmdldF9wYXRoID0gdGFyZ2V0X2Rpcl9ndWVzdHMuY2xvbmUoKTsKKyAgICAgICAg ICAgIHRhcmdldF9wYXRoLnB1c2gobm9kZV9uYW1lKTsKKworICAgICAgICAgICAgbGV0IHRhcmdl dF9wYXRoID0gQ1N0cmluZzo6bmV3KHRhcmdldF9wYXRoLnRvX3N0cigpLnVud3JhcCgpKS51bndy YXAoKTsKKworICAgICAgICAgICAgdW5zYWZlIHsKKyAgICAgICAgICAgICAgICBycmRfZ2V0X2Nv bnRleHQoKTsKKyAgICAgICAgICAgICAgICBycmRfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAg ICAgICBsZXQgcmVzID0gcnJkX2NyZWF0ZV9yMigKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0 X3BhdGguYXNfcHRyKCksCisgICAgICAgICAgICAgICAgICAgIFJSRF9TVEVQX1NJWkUgYXMgdTY0 LAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg ICAgICAgICAgICAgICBzb3VyY2UuYXNfbXV0X3B0cigpLAorICAgICAgICAgICAgICAgICAgICBz dGQ6OnB0cjo6bnVsbCgpLAorICAgICAgICAgICAgICAgICAgICBSUkRfVk1fREVGLmxlbigpIGFz IGkzMiwKKyAgICAgICAgICAgICAgICAgICAgUlJEX1ZNX0RFRi5tYXAofHZ8IHYuYXNfcHRyKCkp LmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmIHJl cyAhPSAwIHsKKyAgICAgICAgICAgICAgICAgICAgYmFpbCEoCisgICAgICAgICAgICAgICAgICAg ICAgICAiUlJEIGNyZWF0ZSBFcnJvcjoge30iLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1N0 cjo6ZnJvbV9wdHIocnJkX2dldF9lcnJvcigpKS50b19zdHJpbmdfbG9zc3koKQorICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGxldCBjdXJyZW50X2d1ZXN0cyA9IGd1ZXN0czIuZmV0Y2hfYWRkKDEsIHN0ZDo6c3luYzo6 YXRvbWljOjpPcmRlcmluZzo6U2VxQ3N0KTsKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfZ3Vlc3Rz ID4gMCAmJiBjdXJyZW50X2d1ZXN0cyAlIDIwMCA9PSAwIHsKKyAgICAgICAgICAgICAgICBwcmlu dGxuISgiTWlncmF0ZWQge30gb2Yge30gZ3Vlc3RzIiwgY3VycmVudF9ndWVzdHMsIHRvdGFsX2d1 ZXN0cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAgfSwKKyAg ICApOworICAgIGxldCBtaWdyYXRpb25fY2hhbm5lbCA9IG1pZ3JhdGlvbl9wb29sLmNoYW5uZWwo KTsKKworICAgIGZvciBmaWxlIGluIGd1ZXN0X3NvdXJjZV9maWxlcyB7CisgICAgICAgIGxldCBt aWdyYXRpb25fY2hhbm5lbCA9IG1pZ3JhdGlvbl9jaGFubmVsLmNsb25lKCk7CisgICAgICAgIG1p Z3JhdGlvbl9jaGFubmVsLnNlbmQoZmlsZSk/OworICAgIH0KKworICAgIGRyb3AobWlncmF0aW9u X2NoYW5uZWwpOworICAgIG1pZ3JhdGlvbl9wb29sLmNvbXBsZXRlKCk/OworCisgICAgbGV0IGVs YXBzZWQgPSBzdGFydF90aW1lLmVsYXBzZWQoKT8uYXNfc2Vjc19mNjQoKTsKKyAgICBsZXQgZ3Vl c3RzID0gZ3Vlc3RzLmxvYWQoc3RkOjpzeW5jOjphdG9taWM6Ok9yZGVyaW5nOjpTZXFDc3QpOwor ICAgIHByaW50bG4hKCJNaWdyYXRlZCB7fSBndWVzdHMgaW4gezouMn1zIiwgZ3Vlc3RzLCBlbGFw c2VkLCk7CisKKyAgICBPaygoKSkKK30KKworLy8vIE1pZ3JhdGUgbm9kZSBSUkQgZmlsZXMKKy8v LworLy8vIEluIHNlcmlhbCBhcyB0aGUgbnVtYmVyIG9mIG5vZGVzIHdpbGwgbm90IGJlIGhpZ2gu CitmbiBtaWdyYXRlX25vZGVzKHNvdXJjZV9kaXJfbm9kZXM6IFBhdGhCdWYsIHRhcmdldF9kaXJf bm9kZXM6IFBhdGhCdWYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICBwcmludGxuISgiTWln cmF0aW5nIFJSRCBkYXRhIGZvciBub2Rlc+KApiIpOworCisgICAgaWYgIXRhcmdldF9kaXJfbm9k ZXMuZXhpc3RzKCkgeworICAgICAgICBwcmludGxuISgiQ3JlYXRpbmcgbmV3IGRpcmVjdG9yeTog J3t9JyIsIHRhcmdldF9kaXJfbm9kZXMuZGlzcGxheSgpKTsKKyAgICAgICAgc3RkOjpmczo6Y3Jl YXRlX2RpcigmdGFyZ2V0X2Rpcl9ub2Rlcyk/OworICAgIH0KKworICAgIGxldCBtdXQgbm9kZV9z b3VyY2VfZmlsZXM6IFZlYzwoQ1N0cmluZywgT3NTdHJpbmcpPiA9IFZlYzo6bmV3KCk7CisgICAg ZnM6OnJlYWRfZGlyKCZzb3VyY2VfZGlyX25vZGVzKT8KKyAgICAgICAgLmZpbHRlcih8ZnwgZi5p c19vaygpKQorICAgICAgICAubWFwKHxmfCBmLnVud3JhcCgpLnBhdGgoKSkKKyAgICAgICAgLmZp bHRlcih8ZnwgZi5pc19maWxlKCkpCisgICAgICAgIC5mb3JfZWFjaCh8ZmlsZXwgeworICAgICAg ICAgICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19wYXRoKCkuYXNfb3Nfc3RyKCku YXNfYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3VsZCBub3QgY29udmVydCBw YXRoIHRvIENTdHJpbmcuIik7CisgICAgICAgICAgICBsZXQgZm5hbWUgPSBmaWxlCisgICAgICAg ICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAgICAgLm1hcCh8dnwgdi50b19vc19z dHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJDb3VsZCBub3QgY29udmVydCBmbmFt ZSB0byBPc1N0cmluZy4iKTsKKyAgICAgICAgICAgIG5vZGVfc291cmNlX2ZpbGVzLnB1c2goKHBh dGgsIGZuYW1lKSkKKyAgICAgICAgfSk7CisKKyAgICBmb3IgZmlsZSBpbiBub2RlX3NvdXJjZV9m aWxlcyB7CisgICAgICAgIHByaW50bG4hKCJOb2RlOiAne30nIiwgUGF0aEJ1Zjo6ZnJvbShmaWxl LjEuY2xvbmUoKSkuZGlzcGxheSgpKTsKKyAgICAgICAgbGV0IG11dCBzb3VyY2U6IFsqY29uc3Qg aTg7IDJdID0gW3N0ZDo6cHRyOjpudWxsKCk7IDJdOworCisgICAgICAgIHNvdXJjZVswXSA9IGZp bGUuMC5hc19wdHIoKTsKKworICAgICAgICBsZXQgbm9kZV9uYW1lID0gZmlsZS4xOworICAgICAg ICBsZXQgbXV0IHRhcmdldF9wYXRoID0gdGFyZ2V0X2Rpcl9ub2Rlcy5jbG9uZSgpOworICAgICAg ICB0YXJnZXRfcGF0aC5wdXNoKG5vZGVfbmFtZSk7CisKKyAgICAgICAgbGV0IHRhcmdldF9wYXRo ID0gQ1N0cmluZzo6bmV3KHRhcmdldF9wYXRoLnRvX3N0cigpLnVud3JhcCgpKS51bndyYXAoKTsK KworICAgICAgICB1bnNhZmUgeworICAgICAgICAgICAgcnJkX2dldF9jb250ZXh0KCk7CisgICAg ICAgICAgICBycmRfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIGxldCByZXMgPSBycmRfY3Jl YXRlX3IyKAorICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoLmFzX3B0cigpLAorICAgICAgICAg ICAgICAgIFJSRF9TVEVQX1NJWkUgYXMgdTY0LAorICAgICAgICAgICAgICAgIDAsCisgICAgICAg ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBzb3VyY2UuYXNfbXV0X3B0cigpLAorICAgICAg ICAgICAgICAgIHN0ZDo6cHRyOjpudWxsKCksCisgICAgICAgICAgICAgICAgUlJEX05PREVfREVG LmxlbigpIGFzIGkzMiwKKyAgICAgICAgICAgICAgICBSUkRfTk9ERV9ERUYubWFwKHx2fCB2LmFz X3B0cigpKS5hc19tdXRfcHRyKCksCisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgcmVz ICE9IDAgeworICAgICAgICAgICAgICAgIGJhaWwhKAorICAgICAgICAgICAgICAgICAgICAiUlJE IGNyZWF0ZSBFcnJvcjoge30iLAorICAgICAgICAgICAgICAgICAgICBDU3RyOjpmcm9tX3B0cihy cmRfZ2V0X2Vycm9yKCkpLnRvX3N0cmluZ19sb3NzeSgpCisgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGxuISgiTWlncmF0ZWQgYWxs IG5vZGVzIik7CisKKyAgICBPaygoKSkKK30KKworLy8vIE1pZ3JhdGUgc3RvcmFnZSBSUkQgZmls ZXMKKy8vLworLy8vIEluIHNlcmlhbCBhcyB0aGUgbnVtYmVyIG9mIHN0b3JhZ2Ugd2lsbCBub3Qg YmUgdGhhdCBoaWdoLgorZm4gbWlncmF0ZV9zdG9yYWdlKHNvdXJjZV9kaXJfc3RvcmFnZTogUGF0 aEJ1ZiwgdGFyZ2V0X2Rpcl9zdG9yYWdlOiBQYXRoQnVmKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7 CisgICAgcHJpbnRsbiEoIk1pZ3JhdGluZyBSUkQgZGF0YSBmb3Igc3RvcmFnZXPigKYiKTsKKwor ICAgIGlmICF0YXJnZXRfZGlyX3N0b3JhZ2UuZXhpc3RzKCkgeworICAgICAgICBwcmludGxuISgi Q3JlYXRpbmcgbmV3IGRpcmVjdG9yeTogJ3t9JyIsIHRhcmdldF9kaXJfc3RvcmFnZS5kaXNwbGF5 KCkpOworICAgICAgICBzdGQ6OmZzOjpjcmVhdGVfZGlyKCZ0YXJnZXRfZGlyX3N0b3JhZ2UpPzsK KyAgICB9CisKKyAgICAvLyBzdG9yYWdlIGhhcyBhbm90aGVyIGxheWVyIG9mIGRpcmVjdG9yaWVz IHBlciBub2RlIG92ZXIgd2hpY2ggd2UgbmVlZCB0byBpdGVyYXRlCisgICAgZnM6OnJlYWRfZGly KCZzb3VyY2VfZGlyX3N0b3JhZ2UpPworICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX29rKCkpCisg ICAgICAgIC5tYXAofGZ8IGYudW53cmFwKCkucGF0aCgpKQorICAgICAgICAuZmlsdGVyKHxmfCBm LmlzX2RpcigpKQorICAgICAgICAudHJ5X2Zvcl9lYWNoKHxub2RlfCB7CisgICAgICAgICAgICBs ZXQgbXV0IHN0b3JhZ2Vfc291cmNlX2ZpbGVzOiBWZWM8KENTdHJpbmcsIE9zU3RyaW5nKT4gPSBW ZWM6Om5ldygpOworCisgICAgICAgICAgICBsZXQgbXV0IHNvdXJjZV9ub2RlX3N1YmRpciA9IHNv dXJjZV9kaXJfc3RvcmFnZS5jbG9uZSgpOworICAgICAgICAgICAgc291cmNlX25vZGVfc3ViZGly LnB1c2goJm5vZGUuZmlsZV9uYW1lKCkudW53cmFwKCkpOworCisgICAgICAgICAgICBsZXQgbXV0 IHRhcmdldF9ub2RlX3N1YmRpciA9IHRhcmdldF9kaXJfc3RvcmFnZS5jbG9uZSgpOworICAgICAg ICAgICAgdGFyZ2V0X25vZGVfc3ViZGlyLnB1c2goJm5vZGUuZmlsZV9uYW1lKCkudW53cmFwKCkp OworCisgICAgICAgICAgICBmczo6Y3JlYXRlX2Rpcih0YXJnZXRfbm9kZV9zdWJkaXIuYXNfcGF0 aCgpKT87CisgICAgICAgICAgICBsZXQgbWV0YWRhdGEgPSB0YXJnZXRfbm9kZV9zdWJkaXIubWV0 YWRhdGEoKT87CisgICAgICAgICAgICBsZXQgbXV0IHBlcm1pc3Npb25zID0gbWV0YWRhdGEucGVy bWlzc2lvbnMoKTsKKyAgICAgICAgICAgIHBlcm1pc3Npb25zLnNldF9tb2RlKDBvNzU1KTsKKwor ICAgICAgICAgICAgZnM6OnJlYWRfZGlyKCZzb3VyY2Vfbm9kZV9zdWJkaXIpPworICAgICAgICAg ICAgICAgIC5maWx0ZXIofGZ8IGYuaXNfb2soKSkKKyAgICAgICAgICAgICAgICAubWFwKHxmfCBm LnVud3JhcCgpLnBhdGgoKSkKKyAgICAgICAgICAgICAgICAuZmlsdGVyKHxmfCBmLmlzX2ZpbGUo KSkKKyAgICAgICAgICAgICAgICAuZm9yX2VhY2gofGZpbGV8IHsKKyAgICAgICAgICAgICAgICAg ICAgbGV0IHBhdGggPSBDU3RyaW5nOjpuZXcoZmlsZS5hc19wYXRoKCkuYXNfb3Nfc3RyKCkuYXNf Ynl0ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5leHBlY3QoIkNvdWxkIG5vdCBjb252 ZXJ0IHBhdGggdG8gQ1N0cmluZy4iKTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGZuYW1lID0g ZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgLmZpbGVfbmFtZSgpCisgICAgICAgICAgICAg ICAgICAgICAgICAubWFwKHx2fCB2LnRvX29zX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAg ICAgICAgLmV4cGVjdCgiQ291bGQgbm90IGNvbnZlcnQgZm5hbWUgdG8gT3NTdHJpbmcuIik7Cisg ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Vfc291cmNlX2ZpbGVzLnB1c2goKHBhdGgsIGZuYW1l KSkKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gc3RvcmFn ZV9zb3VyY2VfZmlsZXMgeworICAgICAgICAgICAgICAgIHByaW50bG4hKCJTdG9yYWdlOiAne30n IiwgUGF0aEJ1Zjo6ZnJvbShmaWxlLjEuY2xvbmUoKSkuZGlzcGxheSgpKTsKKyAgICAgICAgICAg ICAgICBsZXQgbXV0IHNvdXJjZTogWypjb25zdCBpODsgMl0gPSBbc3RkOjpwdHI6Om51bGwoKTsg Ml07CisKKyAgICAgICAgICAgICAgICBzb3VyY2VbMF0gPSBmaWxlLjAuYXNfcHRyKCk7CisKKyAg ICAgICAgICAgICAgICBsZXQgbm9kZV9uYW1lID0gZmlsZS4xOworICAgICAgICAgICAgICAgIGxl dCBtdXQgdGFyZ2V0X3BhdGggPSB0YXJnZXRfbm9kZV9zdWJkaXIuY2xvbmUoKTsKKyAgICAgICAg ICAgICAgICB0YXJnZXRfcGF0aC5wdXNoKG5vZGVfbmFtZSk7CisKKyAgICAgICAgICAgICAgICBs ZXQgdGFyZ2V0X3BhdGggPSBDU3RyaW5nOjpuZXcodGFyZ2V0X3BhdGgudG9fc3RyKCkudW53cmFw KCkpLnVud3JhcCgpOworCisgICAgICAgICAgICAgICAgdW5zYWZlIHsKKyAgICAgICAgICAgICAg ICAgICAgcnJkX2dldF9jb250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHJyZF9jbGVhcl9l cnJvcigpOworICAgICAgICAgICAgICAgICAgICBsZXQgcmVzID0gcnJkX2NyZWF0ZV9yMigKKyAg ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoLmFzX3B0cigpLAorICAgICAgICAgICAg ICAgICAgICAgICAgUlJEX1NURVBfU0laRSBhcyB1NjQsCisgICAgICAgICAgICAgICAgICAgICAg ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg IHNvdXJjZS5hc19tdXRfcHRyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnB0cjo6 bnVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgUlJEX1NUT1JBR0VfREVGLmxlbigpIGFz IGkzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJSRF9TVE9SQUdFX0RFRi5tYXAofHZ8IHYu YXNfcHRyKCkpLmFzX211dF9wdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgcmVzICE9IDAgeworICAgICAgICAgICAgICAgICAgICAgICAgYmFpbCEo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJSRCBjcmVhdGUgRXJyb3I6IHt9IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDU3RyOjpmcm9tX3B0cihycmRfZ2V0X2Vycm9yKCkp LnRvX3N0cmluZ19sb3NzeSgpCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg ICAgT2soKCkpCisgICAgICAgIH0pPzsKKyAgICBwcmludGxuISgiTWlncmF0ZWQgYWxsIG5vZGVz Iik7CisKKyAgICBPaygoKSkKK30KZGlmZiAtLWdpdCBhL3NyYy9wYXJhbGxlbF9oYW5kbGVyLnJz IGIvc3JjL3BhcmFsbGVsX2hhbmRsZXIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNzg3NzQyYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wYXJhbGxlbF9oYW5kbGVyLnJz CkBAIC0wLDAgKzEsMTYyIEBACisvLyEgQSB0aHJlYWQgcG9vbCB3aGljaCBydW4gYSBjbG9zdXJl IGluIHBhcmFsbGVsLgorCit1c2Ugc3RkOjpzeW5jOjp7QXJjLCBNdXRleH07Cit1c2Ugc3RkOjp0 aHJlYWQ6OkpvaW5IYW5kbGU7CisKK3VzZSBhbnlob3c6OntFcnJvciwgYmFpbCwgZm9ybWF0X2Vy cn07Cit1c2UgY3Jvc3NiZWFtX2NoYW5uZWw6OntTZW5kZXIsIGJvdW5kZWR9OworCisvLy8gQSBo YW5kbGUgdG8gc2VuZCBkYXRhIHRvIHRoZSB3b3JrZXIgdGhyZWFkIChpbXBsZW1lbnRzIGNsb25l KQorcHViIHN0cnVjdCBTZW5kSGFuZGxlPEk+IHsKKyAgICBpbnB1dDogU2VuZGVyPEk+LAorICAg IGFib3J0OiBBcmM8TXV0ZXg8T3B0aW9uPFN0cmluZz4+PiwKK30KKworLy8vIFJldHVybnMgdGhl IGZpcnN0IGVycm9yIGhhcHBlbmVkLCBpZiBhbnkKK3B1YiBmbiBjaGVja19hYm9ydChhYm9ydDog Jk11dGV4PE9wdGlvbjxTdHJpbmc+PikgLT4gUmVzdWx0PCgpLCBFcnJvcj4geworICAgIGxldCBn dWFyZCA9IGFib3J0LmxvY2soKS51bndyYXAoKTsKKyAgICBpZiBsZXQgU29tZShlcnJfbXNnKSA9 ICYqZ3VhcmQgeworICAgICAgICByZXR1cm4gRXJyKGZvcm1hdF9lcnIhKCJ7fSIsIGVycl9tc2cp KTsKKyAgICB9CisgICAgT2soKCkpCit9CisKK2ltcGw8STogU2VuZD4gU2VuZEhhbmRsZTxJPiB7 CisgICAgLy8vIFNlbmQgZGF0YSB0byB0aGUgd29ya2VyIHRocmVhZHMKKyAgICBwdWIgZm4gc2Vu ZCgmc2VsZiwgaW5wdXQ6IEkpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAgICAgY2hlY2tf YWJvcnQoJnNlbGYuYWJvcnQpPzsKKyAgICAgICAgbWF0Y2ggc2VsZi5pbnB1dC5zZW5kKGlucHV0 KSB7CisgICAgICAgICAgICBPaygoKSkgPT4gT2soKCkpLAorICAgICAgICAgICAgRXJyKF8pID0+ IGJhaWwhKCJzZW5kIGZhaWxlZCAtIGNoYW5uZWwgY2xvc2VkIiksCisgICAgICAgIH0KKyAgICB9 Cit9CisKKy8vLyBBIHRocmVhZCBwb29sIHdoaWNoIHJ1biB0aGUgc3VwcGxpZWQgY2xvc3VyZQor Ly8vCisvLy8gVGhlIHNlbmQgY29tbWFuZCBzZW5kcyBkYXRhIHRvIHRoZSB3b3JrZXIgdGhyZWFk cy4gSWYgb25lIGhhbmRsZXIKKy8vLyByZXR1cm5zIGFuIGVycm9yLCB3ZSBtYXJrIHRoZSBjaGFu bmVsIGFzIGZhaWxlZCBhbmQgaXQgaXMgbm8KKy8vLyBsb25nZXIgcG9zc2libGUgdG8gc2VuZCBk YXRhLgorLy8vCisvLy8gV2hlbiBkb25lLCB0aGUgJ2NvbXBsZXRlKCknIG1ldGhvZCBuZWVkcyB0 byBiZSBjYWxsZWQgdG8gY2hlY2sgZm9yCisvLy8gb3V0c3RhbmRpbmcgZXJyb3JzLgorcHViIHN0 cnVjdCBQYXJhbGxlbEhhbmRsZXI8ST4geworICAgIGhhbmRsZXM6IFZlYzxKb2luSGFuZGxlPCgp Pj4sCisgICAgbmFtZTogU3RyaW5nLAorICAgIGlucHV0OiBPcHRpb248U2VuZEhhbmRsZTxJPj4s Cit9CisKK2ltcGw8ST4gQ2xvbmUgZm9yIFNlbmRIYW5kbGU8ST4geworICAgIGZuIGNsb25lKCZz ZWxmKSAtPiBTZWxmIHsKKyAgICAgICAgU2VsZiB7CisgICAgICAgICAgICBpbnB1dDogc2VsZi5p bnB1dC5jbG9uZSgpLAorICAgICAgICAgICAgYWJvcnQ6IEFyYzo6Y2xvbmUoJnNlbGYuYWJvcnQp LAorICAgICAgICB9CisgICAgfQorfQorCitpbXBsPEk6IFNlbmQgKyAnc3RhdGljPiBQYXJhbGxl bEhhbmRsZXI8ST4geworICAgIC8vLyBDcmVhdGUgYSBuZXcgdGhyZWFkIHBvb2wsIGVhY2ggdGhy ZWFkIHByb2Nlc3NpbmcgaW5jb21pbmcgZGF0YQorICAgIC8vLyB3aXRoICdoYW5kbGVyX2ZuJy4K KyAgICBwdWIgZm4gbmV3PEY+KG5hbWU6ICZzdHIsIHRocmVhZHM6IHVzaXplLCBoYW5kbGVyX2Zu OiBGKSAtPiBTZWxmCisgICAgd2hlcmUKKyAgICAgICAgRjogRm4oSSkgLT4gUmVzdWx0PCgpLCBF cnJvcj4gKyBTZW5kICsgQ2xvbmUgKyAnc3RhdGljLAorICAgIHsKKyAgICAgICAgbGV0IG11dCBo YW5kbGVzID0gVmVjOjpuZXcoKTsKKyAgICAgICAgbGV0IChpbnB1dF90eCwgaW5wdXRfcngpID0g Ym91bmRlZDo6PEk+KHRocmVhZHMpOworCisgICAgICAgIGxldCBhYm9ydCA9IEFyYzo6bmV3KE11 dGV4OjpuZXcoTm9uZSkpOworCisgICAgICAgIGZvciBpIGluIDAuLnRocmVhZHMgeworICAgICAg ICAgICAgbGV0IGlucHV0X3J4ID0gaW5wdXRfcnguY2xvbmUoKTsKKyAgICAgICAgICAgIGxldCBh Ym9ydCA9IEFyYzo6Y2xvbmUoJmFib3J0KTsKKyAgICAgICAgICAgIGxldCBoYW5kbGVyX2ZuID0g aGFuZGxlcl9mbi5jbG9uZSgpOworCisgICAgICAgICAgICBoYW5kbGVzLnB1c2goCisgICAgICAg ICAgICAgICAgc3RkOjp0aHJlYWQ6OkJ1aWxkZXI6Om5ldygpCisgICAgICAgICAgICAgICAgICAg IC5uYW1lKGZvcm1hdCEoInt9ICh7fSkiLCBuYW1lLCBpKSkKKyAgICAgICAgICAgICAgICAgICAg LnNwYXduKG1vdmUgfHwgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBtYXRjaCBpbnB1dF9yeC5yZWN2KCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhkYXRhKSA9PiBkYXRhLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoXykgPT4gcmV0dXJuLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGV0IEVy cihlcnIpID0gKGhhbmRsZXJfZm4pKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGV0IG11dCBndWFyZCA9IGFib3J0LmxvY2soKS51bndyYXAoKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgZ3VhcmQuaXNfbm9uZSgpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpndWFyZCA9IFNvbWUoZXJyLnRvX3N0cmluZygpKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkK KyAgICAgICAgICAgICAgICAgICAgLnVud3JhcCgpLAorICAgICAgICAgICAgKTsKKyAgICAgICAg fQorICAgICAgICBTZWxmIHsKKyAgICAgICAgICAgIGhhbmRsZXMsCisgICAgICAgICAgICBuYW1l OiBuYW1lLnRvX3N0cmluZygpLAorICAgICAgICAgICAgaW5wdXQ6IFNvbWUoU2VuZEhhbmRsZSB7 CisgICAgICAgICAgICAgICAgaW5wdXQ6IGlucHV0X3R4LAorICAgICAgICAgICAgICAgIGFib3J0 LAorICAgICAgICAgICAgfSksCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gUmV0dXJucyBh IGNsb25lYWJsZSBjaGFubmVsIHRvIHNlbmQgZGF0YSB0byB0aGUgd29ya2VyIHRocmVhZHMKKyAg ICBwdWIgZm4gY2hhbm5lbCgmc2VsZikgLT4gU2VuZEhhbmRsZTxJPiB7CisgICAgICAgIHNlbGYu aW5wdXQuYXNfcmVmKCkudW53cmFwKCkuY2xvbmUoKQorICAgIH0KKworICAgIC8vLyBTZW5kIGRh dGEgdG8gdGhlIHdvcmtlciB0aHJlYWRzCisgICAgcHViIGZuIHNlbmQoJnNlbGYsIGlucHV0OiBJ KSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CisgICAgICAgIHNlbGYuaW5wdXQuYXNfcmVmKCkudW53 cmFwKCkuc2VuZChpbnB1dCk/OworICAgICAgICBPaygoKSkKKyAgICB9CisKKyAgICAvLy8gV2Fp dCBmb3Igd29ya2VyIHRocmVhZHMgdG8gY29tcGxldGUgYW5kIGNoZWNrIGZvciBlcnJvcnMKKyAg ICBwdWIgZm4gY29tcGxldGUobXV0IHNlbGYpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKKyAgICAg ICAgbGV0IGlucHV0ID0gc2VsZi5pbnB1dC50YWtlKCkudW53cmFwKCk7CisgICAgICAgIGxldCBh Ym9ydCA9IEFyYzo6Y2xvbmUoJmlucHV0LmFib3J0KTsKKyAgICAgICAgY2hlY2tfYWJvcnQoJmFi b3J0KT87CisgICAgICAgIGRyb3AoaW5wdXQpOworCisgICAgICAgIGxldCBtc2dfbGlzdCA9IHNl bGYuam9pbl90aHJlYWRzKCk7CisKKyAgICAgICAgLy8gYW4gZXJyb3IgbWlnaHQgYmUgZW5jb3Vu dGVyZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGpvaW4KKyAgICAgICAgY2hlY2tfYWJvcnQoJmFi b3J0KT87CisKKyAgICAgICAgaWYgbXNnX2xpc3QuaXNfZW1wdHkoKSB7CisgICAgICAgICAgICBy ZXR1cm4gT2soKCkpOworICAgICAgICB9CisgICAgICAgIEVycihmb3JtYXRfZXJyISgie30iLCBt c2dfbGlzdC5qb2luKCJcbiIpKSkKKyAgICB9CisKKyAgICBmbiBqb2luX3RocmVhZHMoJm11dCBz ZWxmKSAtPiBWZWM8U3RyaW5nPiB7CisgICAgICAgIGxldCBtdXQgbXNnX2xpc3QgPSBWZWM6Om5l dygpOworCisgICAgICAgIGxldCBtdXQgaSA9IDA7CisgICAgICAgIHdoaWxlIGxldCBTb21lKGhh bmRsZSkgPSBzZWxmLmhhbmRsZXMucG9wKCkgeworICAgICAgICAgICAgaWYgbGV0IEVycihwYW5p YykgPSBoYW5kbGUuam9pbigpIHsKKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwYW5pY19t c2cpID0gcGFuaWMuZG93bmNhc3RfcmVmOjo8JnN0cj4oKSB7CisgICAgICAgICAgICAgICAgICAg IG1zZ19saXN0LnB1c2goZm9ybWF0ISgidGhyZWFkIHt9ICh7aX0pIHBhbmlja2VkOiB7cGFuaWNf bXNnfSIsIHNlbGYubmFtZSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShw YW5pY19tc2cpID0gcGFuaWMuZG93bmNhc3RfcmVmOjo8U3RyaW5nPigpIHsKKyAgICAgICAgICAg ICAgICAgICAgbXNnX2xpc3QucHVzaChmb3JtYXQhKCJ0aHJlYWQge30gKHtpfSkgcGFuaWNrZWQ6 IHtwYW5pY19tc2d9Iiwgc2VsZi5uYW1lKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgbXNnX2xpc3QucHVzaChmb3JtYXQhKCJ0aHJlYWQge30gKHtpfSkg cGFuaWNrZWQiLCBzZWxmLm5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgbXNnX2xpc3QKKyAgICB9 Cit9CisKKy8vIE5vdGU6IFdlIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aHJlYWRzIHdpbGwgYmUgam9p bmVkCitpbXBsPEk+IERyb3AgZm9yIFBhcmFsbGVsSGFuZGxlcjxJPiB7CisgICAgZm4gZHJvcCgm bXV0IHNlbGYpIHsKKyAgICAgICAgZHJvcChzZWxmLmlucHV0LnRha2UoKSk7CisgICAgICAgIHdo aWxlIGxldCBTb21lKGhhbmRsZSkgPSBzZWxmLmhhbmRsZXMucG9wKCkgeworICAgICAgICAgICAg bGV0IF8gPSBoYW5kbGUuam9pbigpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv d3JhcHBlci5oIGIvd3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjY0ZDBhYTYKLS0tIC9kZXYvbnVsbAorKysgYi93cmFwcGVyLmgKQEAgLTAsMCArMSBAQAorI2lu Y2x1ZGUgPHJyZC5oPgotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3Rz LnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xp c3RpbmZvL3B2ZS1kZXZlbAo=