Name: series-workflowx4tcz Phase: Failed StartedAt: 2026-07-01 07:20:03 +0000 UTC FinishedAt: 2026-07-01 07:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4tcz[0] Phase: Succeeded StartedAt: 2026-07-01 07:20:03 +0000 UTC FinishedAt: 2026-07-01 07:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4tcz[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 07:20:03 +0000 UTC FinishedAt: 2026-07-01 07:30:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2EzNzgwZTQzZDZmNzZmNDUwOTNiOWNkNzkwY2FmNjkwMTE0YThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoyOToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuaW5kZXggZTY5ZGUyOWJiMmQxZDYuLmQ4ZjU5YzEzMmFiN2VlIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuQEAgLTAsMCAmIzQzOzEsOSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7XCYjMzQ7XCYjMzQ7XCYjMzQ7IFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFJlLWV4cG9ydCB0aGUgcHVibGljIGxpYnJhcnkgQVBJIHNvIGl0IGNhbiBiZSBpbXBvcnRlZCBzdHJhaWdodCBmcm9tIHRoZVxuJiM0MzsjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXG4mIzQzOyMgcHlsaW50OiBkaXNhYmxlPXdpbGRjYXJkLWltcG9ydCx1bnVzZWQtd2lsZGNhcmQtaW1wb3J0XG4mIzQzO2Zyb20gLmxpYiBpbXBvcnQgKlxuJiM0Mztmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XG5pbmRleCA4Mjc1YTgwNmNmNzNkNi4uYjZhNmNlMTJiNGE3ZjggMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHlcbkBAIC0xNyw5ICYjNDM7MTcsNyBAQCBpbXBvcnQgdGV4dHdyYXBcbiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb25cbiBzeXMucGF0aC5hcHBlbmQocGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50LmFzX3Bvc2l4KCkpXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgU3BlY0ZhbWlseSwgU3BlY0V4Y2VwdGlvbiwgWW5sRXhjZXB0aW9uXG4tXG4tU1lTX1NDSEVNQV9ESVI9JiMzOTsvdXNyL3NoYXJlL3lubCYjMzk7XG4tUkVMQVRJVkVfU0NIRU1BX0RJUj0mIzM5Oy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluayYjMzk7XG4mIzQzO2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXG4gXG4gIyBweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcyx0b28tbWFueS1sb2NhbHNcbiBjbGFzcyBDb2xvcnM6XG5AQCAtNDgsMzAgJiM0Mzs0Niw2IEBAIGRlZiB0ZXJtX3dpZHRoKCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBHZXQgdGVybWluYWwgd2lkdGggaW4gY29sdW1ucyAoODAgaWYgc3Rkb3V0IGlzIG5vdCBhIHRlcm1pbmFsKSBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgcmV0dXJuIHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpLmNvbHVtbnNcbiBcbi1kZWYgc2NoZW1hX2RpcigpOlxuLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuLSAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS5cbi0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbi0gICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZlwmIzM0O3tzY3JpcHRfZGlyfS97UkVMQVRJVkVfU0NIRU1BX0RJUn1cJiMzNDspXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbi0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcJiMzNDtTY2hlbWEgZGlyZWN0b3J5IHtzY2hlbWFfZGlyX30gZG9lcyBub3QgZXhpc3RcJiMzNDspXG4tICAgIHJldHVybiBzY2hlbWFfZGlyX1xuLVxuLWRlZiBzcGVjX2RpcigpOlxuLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmVcbi0gICAgc2NoZW1hIGRpcmVjdG9yeS5cbi0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7XG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNwZWNfZGlyXyk6XG4tICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZlwmIzM0O1NwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuLSAgICByZXR1cm4gc3BlY19kaXJfXG4tXG4tXG4gY2xhc3MgWW5sRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QSBjdXN0b20gZW5jb2RlciBmb3IgZW1pdHRpbmcgSlNPTiB3aXRoIHlubC1zcGVjaWZpYyBpbnN0YW5jZSB0eXBlc1wmIzM0O1wmIzM0O1wmIzM0O1xuICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKTpcbkBAIC0yNzIsOSAmIzQzOzI0Niw4IEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgcHByaW50LnBwcmludChtc2csIHdpZHRoPXRlcm1fd2lkdGgoKSwgY29tcGFjdD1UcnVlKVxuIFxuICAgICBpZiBhcmdzLmxpc3RfZmFtaWxpZXM6XG4tICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc29ydGVkKG9zLmxpc3RkaXIoc3BlY19kaXIoKSkpOlxuLSAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCYjMzk7LnlhbWwmIzM5Oyk6XG4tICAgICAgICAgICAgICAgIHByaW50KGZpbGVuYW1lLnJlbW92ZXN1ZmZpeCgmIzM5Oy55YW1sJiMzOTspKVxuJiM0MzsgICAgICAgIGZvciBmYW1pbHkgaW4gbGlzdF9mYW1pbGllcygpOlxuJiM0MzsgICAgICAgICAgICBwcmludChmYW1pbHkpXG4gICAgICAgICByZXR1cm5cbiBcbiAgICAgaWYgYXJncy5ub19zY2hlbWE6XG5AQCAtMjg0LDI4ICYjNDM7MjU3LDIzIEBAIGRlZiBtYWluKCk6XG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxuICAgICAgICAgYXR0cnMgPSBqc29uLmxvYWRzKGFyZ3MuanNvbl90ZXh0KVxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTpcbi0gICAgICAgIHNwZWMgPSBmXCYjMzQ7e3NwZWNfZGlyKCl9L3thcmdzLmZhbWlseX0ueWFtbFwmIzM0O1xuLSAgICBlbHNlOlxuLSAgICAgICAgc3BlYyA9IGFyZ3Muc3BlY1xuLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4tICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZlwmIzM0O1NwZWMgZmlsZSB7c3BlY30gZG9lcyBub3QgZXhpc3RcJiMzNDspXG4mIzQzOyAgICBpZiBhcmdzLnNwZWMgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShhcmdzLnNwZWMpOlxuJiM0MzsgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXCYjMzQ7U3BlYyBmaWxlIHthcmdzLnNwZWN9IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuIFxuJiM0MzsgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXG4gICAgIGlmIGFyZ3MudmFsaWRhdGU6XG4mIzQzOyAgICAgICAgIyBGb3JjZSB2YWxpZGF0aW9uIGV2ZW4gZm9yIGluc3RhbGxlZCBzcGVjcyAoc2NoZW1hPVRydWUpLCB1bmxlc3MgdGhlXG4mIzQzOyAgICAgICAgIyB1c2VyIGV4cGxpY2l0bHkgcGlja2VkIGEgc2NoZW1hIG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tc2NoZW1hLlxuJiM0MzsgICAgICAgIHNjaGVtYSA9IFRydWUgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBlbHNlIGFyZ3Muc2NoZW1hXG4gICAgICAgICB0cnk6XG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcbiYjNDM7ICAgICAgICAgICAgU3BlY0ZhbWlseShhcmdzLnNwZWMsIHNjaGVtYV9wYXRoPXNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5KVxuICAgICAgICAgZXhjZXB0IFNwZWNFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgcHJpbnQoZXJyb3IpXG4gICAgICAgICAgICAgc3lzLmV4aXQoMSlcbiAgICAgICAgIHJldHVyblxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTogIyBzZXQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgaW5zdGFsbGVkIHNwZWNzXG4tICAgICAgICBpZiBhcmdzLnNjaGVtYSBpcyBOb25lIGFuZCBzcGVjLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxuLSAgICAgICAgICAgIGFyZ3Muc2NoZW1hID0gJiMzOTsmIzM5OyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcbi0gICAgICAgIGlmIGFyZ3MucHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4tICAgICAgICAgICAgYXJncy5wcm9jZXNzX3Vua25vd24gPSBUcnVlXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSwgYXJncy5wcm9jZXNzX3Vua25vd24sXG4mIzQzOyAgICB5bmwgPSBZbmxGYW1pbHkoYXJncy5zcGVjLCBzY2hlbWE9YXJncy5zY2hlbWEsIGZhbWlseT1hcmdzLmZhbWlseSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3Vua25vd249YXJncy5wcm9jZXNzX3Vua25vd24sXG4gICAgICAgICAgICAgICAgICAgICByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcbiAgICAgaWYgYXJncy5kYmdfc21hbGxfcmVjdjpcbiAgICAgICAgIHlubC5zZXRfcmVjdl9kYmcoVHJ1ZSlcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5XG5pbmRleCBiZTc0MTk4NWFlNGVlNy4uYWE0MjYzYzhjYmE5ZWYgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcbkBAIC01LDEyICYjNDM7NSwxMyBAQFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxuICAgICBTcGVjRXhjZXB0aW9uXG4mIzQzO2Zyb20gLnNwZWNkaXIgaW1wb3J0IGxpc3RfZmFtaWxpZXNcbiBmcm9tIC55bmwgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgTmxQb2xpY3ksIFlubEV4Y2VwdGlvblxuIFxuIGZyb20gLmRvY19nZW5lcmF0b3IgaW1wb3J0IFlubERvY0dlbmVyYXRvclxuIFxuIF9fYWxsX18gPSBbXCYjMzQ7U3BlY0F0dHJcJiMzNDssIFwmIzM0O1NwZWNBdHRyU2V0XCYjMzQ7LCBcJiMzNDtTcGVjRW51bUVudHJ5XCYjMzQ7LCBcJiMzNDtTcGVjRW51bVNldFwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1NwZWNGYW1pbHlcJiMzNDssIFwmIzM0O1NwZWNPcGVyYXRpb25cJiMzNDssIFwmIzM0O1NwZWNTdWJNZXNzYWdlXCYjMzQ7LCBcJiMzNDtTcGVjU3ViTWVzc2FnZUZvcm1hdFwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O1NwZWNFeGNlcHRpb25cJiMzNDssXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7U3BlY0V4Y2VwdGlvblwmIzM0OywgXCYjMzQ7bGlzdF9mYW1pbGllc1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7TmV0bGlua1wmIzM0OywgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O1lubEV4Y2VwdGlvblwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubERvY0dlbmVyYXRvclwmIzM0O11cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5XG5AQCAtMTIsNiAmIzQzOzEyLDggQEAgaW1wb3J0IGltcG9ydGxpYlxuIGltcG9ydCBvc1xuIGltcG9ydCB5YW1sIGFzIHB5eWFtbFxuIFxuJiM0Mztmcm9tIC5zcGVjZGlyIGltcG9ydCBmaW5kX3NwZWMsIFNZU19TQ0hFTUFfRElSXG4mIzQzO1xuIFxuIGNsYXNzIFNwZWNFeGNlcHRpb24oRXhjZXB0aW9uKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7TmV0bGluayBzcGVjIGV4Y2VwdGlvbi5cbkBAIC00NDQsNyAmIzQzOzQ0NiwyMyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcbiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOlxuICAgICAgICAgX3lhbWxfbG9hZGVyID0gcHl5YW1sLlNhZmVMb2FkZXJcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aCwgc2NoZW1hX3BhdGg9Tm9uZSwgZXhjbHVkZV9vcHM9Tm9uZSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoPU5vbmUsIHNjaGVtYV9wYXRoPU5vbmUsIGV4Y2x1ZGVfb3BzPU5vbmUsXG4mIzQzOyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxuJiM0MzsgICAgICAgICMgc2NoZW1hX3BhdGggc2VsZWN0cyBob3cgdGhlIHNwZWMgaXMgdmFsaWRhdGVkOlxuJiM0MzsgICAgICAgICMgICBOb25lICAtLSBubyBwcmVmZXJlbmNlOiB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYSxcbiYjNDM7ICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxuJiM0MzsgICAgICAgICMgICBUcnVlICAtLSBhbHdheXMgdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWFcbiYjNDM7ICAgICAgICAjICAgcGF0aCAgLS0gdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuJiM0MzsgICAgICAgICMgICAmIzM5OyYjMzk7ICAgIC0tIGRvIG5vdCB2YWxpZGF0ZVxuJiM0MzsgICAgICAgIGlmIChzcGVjX3BhdGggaXMgTm9uZSkgPT0gKGZhbWlseSBpcyBOb25lKTpcbiYjNDM7ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihcJiMzNDtTcGVjaWZ5IGV4YWN0bHkgb25lIG9mIHNwZWMgcGF0aCBvciBmYW1pbHkgbmFtZVwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBmYW1pbHkgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpXG4mIzQzOyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cbiYjNDM7ICAgICAgICAgICAgIyB0byBzYXZlIGN5Y2xlcyB1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCB0byB2YWxpZGF0ZS5cbiYjNDM7ICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxuJiM0MzsgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAmIzM5OyYjMzk7XG4mIzQzO1xuICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgXCYjMzQ7clwmIzM0OywgZW5jb2Rpbmc9JiMzOTt1dGYtOCYjMzk7KSBhcyBzdHJlYW06XG4gICAgICAgICAgICAgcHJlZml4ID0gJiMzOTsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAmIzM5O1xuICAgICAgICAgICAgIGZpcnN0ID0gc3RyZWFtLnJlYWRsaW5lKCkuc3RyaXAoKVxuQEAgLTQ2NSw3ICYjNDM7NDgzLDcgQEAgY2xhc3MgU3BlY0ZhbWlseShTcGVjRWxlbWVudCk6XG4gICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgmIzM5O3Byb3RvY29sJiMzOTssICYjMzk7Z2VuZXRsaW5rJiMzOTspXG4gICAgICAgICBzZWxmLm1zZ19pZF9tb2RlbCA9IHNlbGYueWFtbFsmIzM5O29wZXJhdGlvbnMmIzM5O10uZ2V0KCYjMzk7ZW51bS1tb2RlbCYjMzk7LCAmIzM5O3VuaWZpZWQmIzM5OylcbiBcbi0gICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBvciBzY2hlbWFfcGF0aCBpcyBUcnVlOlxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSAmIzQzOyBmJiMzOTsve3NlbGYucHJvdG99LnlhbWwmIzM5O1xuICAgICAgICAgaWYgc2NoZW1hX3BhdGg6XG4gICAgICAgICAgICAgd2l0aCBvcGVuKHNjaGVtYV9wYXRoLCBcJiMzNDtyXCYjMzQ7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIHN0cmVhbTpcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mY2VhOWI5ZmI3YjA0M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxuQEAgLTAsMCAmIzQzOzEsNTEgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzO1wmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztMb2NhdGluZyBZTkwgc3BlYyBhbmQgc2NoZW1hIGZpbGVzIG9uIGRpc2suXG4mIzQzO1xuJiM0MztSZXNvbHZlcyB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIFlBTUwgc3BlY3MgKHByZWZlcnJpbmcgYW4gaW4tdHJlZSBjb3B5XG4mIzQzO292ZXIgdGhlIGluc3RhbGxlZCBzeXN0ZW0gcGF0aCkgYW5kIG1hcHMgZmFtaWx5IG5hbWVzIHRvIHNwZWMgZmlsZXMuXG4mIzQzO1wmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7aW1wb3J0IG9zXG4mIzQzO1xuJiM0MztTWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTtcbiYjNDM7UkVMQVRJVkVfU0NIRU1BX0RJUj0mIzM5Oy4uLy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluayYjMzk7XG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIHNjaGVtYV9kaXIoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuJiM0MzsgICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbiYjNDM7ICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcJiMzNDt7c2NyaXB0X2Rpcn0ve1JFTEFUSVZFX1NDSEVNQV9ESVJ9XCYjMzQ7KVxuJiM0MzsgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuJiM0MzsgICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbiYjNDM7ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbiYjNDM7ICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXCYjMzQ7U2NoZW1hIGRpcmVjdG9yeSB7c2NoZW1hX2Rpcl99IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHNjaGVtYV9kaXJfXG4mIzQzO1xuJiM0MztkZWYgc3BlY19kaXIoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmVcbiYjNDM7ICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7XG4mIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuJiM0MzsgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcJiMzNDtTcGVjIGRpcmVjdG9yeSB7c3BlY19kaXJffSBkb2VzIG5vdCBleGlzdFwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBzcGVjX2Rpcl9cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgZmluZF9zcGVjKGZhbWlseSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBZQU1MIHNwZWMgZmlsZSBmb3IgYSBmYW1pbHkgYnkgbmFtZS4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzcGVjID0gZlwmIzM0O3tzcGVjX2RpcigpfS97ZmFtaWx5fS55YW1sXCYjMzQ7XG4mIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4mIzQzOyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZlwmIzM0O1NwZWMgZm9yIGZhbWlseSAmIzM5O3tmYW1pbHl9JiMzOTsgbm90IGZvdW5kIGF0IHtzcGVjfVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBzcGVjXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGxpc3RfZmFtaWxpZXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBSZXR1cm4gdGhlIHNvcnRlZCBuYW1lcyBvZiBhbGwgZmFtaWxpZXMgd2l0aCBhbiBpbnN0YWxsZWQgc3BlYy4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICByZXR1cm4gc29ydGVkKGYucmVtb3Zlc3VmZml4KCYjMzk7LnlhbWwmIzM5OylcbiYjNDM7ICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzcGVjX2RpcigpKSBpZiBmLmVuZHN3aXRoKCYjMzk7LnlhbWwmIzM5OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5pbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuQEAgLTY2MSw2ICYjNDM7NjYxLDE0IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIFlOTCBmYW1pbHkgLS0gYSBOZXRsaW5rIGludGVyZmFjZSBidWlsdCBmcm9tIGEgWUFNTCBzcGVjLlxuIFxuJiM0MzsgICAgVGhlIHNwZWMgY2FuIGJlIHNlbGVjdGVkIGVpdGhlciBieSBmaWxlIHBhdGggKGRlZl9wYXRoPSkgb3IsIHdoZW4gaXRcbiYjNDM7ICAgIHNoaXBzIGluIGEgd2VsbC1rbm93biBsb2NhdGlvbiwgYnkgZmFtaWx5IG5hbWUgKGZhbWlseT1cJiMzNDt4eXpcJiMzNDspOyBleGFjdGx5XG4mIzQzOyAgICBvbmUgb2YgdGhlIHR3byBtdXN0IGJlIGdpdmVuLiBGb3IgZXhhbXBsZTpcbiYjNDM7XG4mIzQzOyAgICAgIGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseVxuJiM0MztcbiYjNDM7ICAgICAgeW5sID0gWW5sRmFtaWx5KGZhbWlseT1cJiMzNDtuZXRkZXZcJiMzNDspXG4mIzQzO1xuICAgICBQcmltYXJ5IHVzZSBvZiB0aGUgY2xhc3MgaXMgdG8gZXhlY3V0ZSBOZXRsaW5rIGNvbW1hbmRzOlxuIFxuICAgICAgIHlubC5cdTAwM2NvcF9uYW1lXHUwMDNlKGF0dHJzLCAuLi4pXG5AQCAtNjkxLDExICYjNDM7Njk5LDE2IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiBcbiAgICAgICB5bmwuZ2V0X3BvbGljeShvcF9uYW1lLCBtb2RlKSAgICAgIC0tIHF1ZXJ5IGtlcm5lbCBwb2xpY3kgZm9yIGFuIG9wXG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXG4tICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCk6XG4tICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEpXG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGg9Tm9uZSwgc2NoZW1hPU5vbmUsIHByb2Nlc3NfdW5rbm93bj1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT0wLCBmYW1pbHk9Tm9uZSk6XG4mIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hLCBmYW1pbHk9ZmFtaWx5KVxuIFxuICAgICAgICAgc2VsZi5pbmNsdWRlX3JhdyA9IEZhbHNlXG4mIzQzOyAgICAgICAgIyBTcGVjcyBmcm9tIC91c3IgKHNlbGVjdGVkIGJ5IGZhbWlseT0pIGhhdmUgYSBoaWdoZXIgY2hhbmNlIG9mIGJlaW5nXG4mIzQzOyAgICAgICAgIyBzdGFsZSwgZGVmYXVsdCB0byBpZ25vcmluZyB1bmtub3duIGF0dHJzLiBJbi10cmVlIHVzZXJzLCBhbmQgdXNlcnNcbiYjNDM7ICAgICAgICAjIHdobyBidW5kbGUgdGhlIHNwZWMgbmVlZCB0byBtYWtlIGEgY29uc2Npb3VzIGRlY2lzaW9uLlxuJiM0MzsgICAgICAgIGlmIHByb2Nlc3NfdW5rbm93biBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9jZXNzX3Vua25vd24gPSBmYW1pbHkgaXMgbm90IE5vbmVcbiAgICAgICAgIHNlbGYucHJvY2Vzc191bmtub3duID0gcHJvY2Vzc191bmtub3duXG4gXG4gICAgICAgICB0cnk6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5IGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XG5pbmRleCBkYjNiNjJjNjUyZTc3Zi4uMGVlMGM4ZTg3Njg2YmUgMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weVxuQEAgLTExLDEyICYjNDM7MTEsMTAgQEAgaW1wb3J0IHBhdGhsaWJcbiBpbXBvcnQgcHByaW50XG4gaW1wb3J0IHN5c1xuIGltcG9ydCByZVxuLWltcG9ydCBvc1xuIFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCYjMzk7cHl5bmwmIzM5OykuYXNfcG9zaXgoKSlcbiAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3Jcbi1mcm9tIGNsaSBpbXBvcnQgc2NoZW1hX2Rpciwgc3BlY19kaXJcbiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5XG4gXG4gXG5AQCAtMTczLDEwICYjNDM7MTcxLDcgQEAgZGVmIG1haW4oKTpcbiBcbiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKClcbiBcbi0gICAgc3BlYyA9IG9zLnBhdGguam9pbihzcGVjX2RpcigpLCAmIzM5O2V0aHRvb2wueWFtbCYjMzk7KVxuLSAgICBzY2hlbWEgPSBvcy5wYXRoLmpvaW4oc2NoZW1hX2RpcigpLCAmIzM5O2dlbmV0bGluay1sZWdhY3kueWFtbCYjMzk7KVxuLVxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgc2NoZW1hLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcbiYjNDM7ICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9JiMzOTtldGh0b29sJiMzOTssIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxuICAgICBpZiBhcmdzLmRiZ19zbWFsbF9yZWN2OlxuICAgICAgICAgeW5sLnNldF9yZWN2X2RiZyhUcnVlKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA3OjI5OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHkKaW5kZXggZTY5ZGUyOWJiMmQxZDYuLmQ4ZjU5YzEzMmFiN2VlIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHkKQEAgLTAsMCAmIzQzOzEsOSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCiYjNDM7CiYjNDM7JiMzNDsmIzM0OyYjMzQ7IFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7IyBSZS1leHBvcnQgdGhlIHB1YmxpYyBsaWJyYXJ5IEFQSSBzbyBpdCBjYW4gYmUgaW1wb3J0ZWQgc3RyYWlnaHQgZnJvbSB0aGUKJiM0MzsjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuCiYjNDM7IyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0LHVudXNlZC13aWxkY2FyZC1pbXBvcnQKJiM0Mztmcm9tIC5saWIgaW1wb3J0ICoKJiM0Mztmcm9tIC5saWIgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHkKaW5kZXggODI3NWE4MDZjZjczZDYuLmI2YTZjZTEyYjRhN2Y4IDEwMDc1NQotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weQpAQCAtMTcsOSAmIzQzOzE3LDcgQEAgaW1wb3J0IHRleHR3cmFwCiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb24KIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQuYXNfcG9zaXgoKSkKIGZyb20gbGliIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIFNwZWNGYW1pbHksIFNwZWNFeGNlcHRpb24sIFlubEV4Y2VwdGlvbgotCi1TWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTsKLVJFTEFUSVZFX1NDSEVNQV9ESVI9JiMzOTsuLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsmIzM5OwomIzQzO2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzCiAKICMgcHlsaW50OiBkaXNhYmxlPXRvby1mZXctcHVibGljLW1ldGhvZHMsdG9vLW1hbnktbG9jYWxzCiBjbGFzcyBDb2xvcnM6CkBAIC00OCwzMCAmIzQzOzQ2LDYgQEAgZGVmIHRlcm1fd2lkdGgoKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgR2V0IHRlcm1pbmFsIHdpZHRoIGluIGNvbHVtbnMgKDgwIGlmIHN0ZG91dCBpcyBub3QgYSB0ZXJtaW5hbCkgJiMzNDsmIzM0OyYjMzQ7CiAgICAgcmV0dXJuIHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpLmNvbHVtbnMKIAotZGVmIHNjaGVtYV9kaXIoKToKLSAgICAmIzM0OyYjMzQ7JiMzNDsKLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzY2hlbWEgZGlyZWN0b3J5LCBwcmVmZXJyaW5nIGluLXRyZWUgYmVmb3JlCi0gICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuCi0gICAgJiMzNDsmIzM0OyYjMzQ7Ci0gICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQotICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGYmIzM0O3tzY3JpcHRfZGlyfS97UkVMQVRJVkVfU0NIRU1BX0RJUn0mIzM0OykKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6Ci0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6Ci0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmJiMzNDtTY2hlbWEgZGlyZWN0b3J5IHtzY2hlbWFfZGlyX30gZG9lcyBub3QgZXhpc3QmIzM0OykKLSAgICByZXR1cm4gc2NoZW1hX2Rpcl8KLQotZGVmIHNwZWNfZGlyKCk6Ci0gICAgJiMzNDsmIzM0OyYjMzQ7Ci0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmUKLSAgICBzY2hlbWEgZGlyZWN0b3J5LgotICAgICYjMzQ7JiMzNDsmIzM0OwotICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7Ci0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3BlY19kaXJfKToKLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGYmIzM0O1NwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0JiMzNDspCi0gICAgcmV0dXJuIHNwZWNfZGlyXwotCi0KIGNsYXNzIFlubEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6CiAgICAgJiMzNDsmIzM0OyYjMzQ7QSBjdXN0b20gZW5jb2RlciBmb3IgZW1pdHRpbmcgSlNPTiB3aXRoIHlubC1zcGVjaWZpYyBpbnN0YW5jZSB0eXBlcyYjMzQ7JiMzNDsmIzM0OwogICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgpAQCAtMjcyLDkgJiM0MzsyNDYsOCBAQCBkZWYgbWFpbigpOgogICAgICAgICAgICAgcHByaW50LnBwcmludChtc2csIHdpZHRoPXRlcm1fd2lkdGgoKSwgY29tcGFjdD1UcnVlKQogCiAgICAgaWYgYXJncy5saXN0X2ZhbWlsaWVzOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc29ydGVkKG9zLmxpc3RkaXIoc3BlY19kaXIoKSkpOgotICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJiMzOTsueWFtbCYjMzk7KToKLSAgICAgICAgICAgICAgICBwcmludChmaWxlbmFtZS5yZW1vdmVzdWZmaXgoJiMzOTsueWFtbCYjMzk7KSkKJiM0MzsgICAgICAgIGZvciBmYW1pbHkgaW4gbGlzdF9mYW1pbGllcygpOgomIzQzOyAgICAgICAgICAgIHByaW50KGZhbWlseSkKICAgICAgICAgcmV0dXJuCiAKICAgICBpZiBhcmdzLm5vX3NjaGVtYToKQEAgLTI4NCwyOCAmIzQzOzI1NywyMyBAQCBkZWYgbWFpbigpOgogICAgIGlmIGFyZ3MuanNvbl90ZXh0OgogICAgICAgICBhdHRycyA9IGpzb24ubG9hZHMoYXJncy5qc29uX3RleHQpCiAKLSAgICBpZiBhcmdzLmZhbWlseToKLSAgICAgICAgc3BlYyA9IGYmIzM0O3tzcGVjX2RpcigpfS97YXJncy5mYW1pbHl9LnlhbWwmIzM0OwotICAgIGVsc2U6Ci0gICAgICAgIHNwZWMgPSBhcmdzLnNwZWMKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6Ci0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmJiMzNDtTcGVjIGZpbGUge3NwZWN9IGRvZXMgbm90IGV4aXN0JiMzNDspCiYjNDM7ICAgIGlmIGFyZ3Muc3BlYyBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGFyZ3Muc3BlYyk6CiYjNDM7ICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZiYjMzQ7U3BlYyBmaWxlIHthcmdzLnNwZWN9IGRvZXMgbm90IGV4aXN0JiMzNDspCiAKJiM0MzsgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuCiAgICAgaWYgYXJncy52YWxpZGF0ZToKJiM0MzsgICAgICAgICMgRm9yY2UgdmFsaWRhdGlvbiBldmVuIGZvciBpbnN0YWxsZWQgc3BlY3MgKHNjaGVtYT1UcnVlKSwgdW5sZXNzIHRoZQomIzQzOyAgICAgICAgIyB1c2VyIGV4cGxpY2l0bHkgcGlja2VkIGEgc2NoZW1hIG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tc2NoZW1hLgomIzQzOyAgICAgICAgc2NoZW1hID0gVHJ1ZSBpZiBhcmdzLnNjaGVtYSBpcyBOb25lIGVsc2UgYXJncy5zY2hlbWEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSkKJiM0MzsgICAgICAgICAgICBTcGVjRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hX3BhdGg9c2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHkpCiAgICAgICAgIGV4Y2VwdCBTcGVjRXhjZXB0aW9uIGFzIGVycm9yOgogICAgICAgICAgICAgcHJpbnQoZXJyb3IpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICByZXR1cm4KIAotICAgIGlmIGFyZ3MuZmFtaWx5OiAjIHNldCBiZWhhdmlvdXIgd2hlbiB1c2luZyBpbnN0YWxsZWQgc3BlY3MKLSAgICAgICAgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBhbmQgc3BlYy5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKToKLSAgICAgICAgICAgIGFyZ3Muc2NoZW1hID0gJiMzOTsmIzM5OyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWQKLSAgICAgICAgaWYgYXJncy5wcm9jZXNzX3Vua25vd24gaXMgTm9uZToKLSAgICAgICAgICAgIGFyZ3MucHJvY2Vzc191bmtub3duID0gVHJ1ZQotCi0gICAgeW5sID0gWW5sRmFtaWx5KHNwZWMsIGFyZ3Muc2NoZW1hLCBhcmdzLnByb2Nlc3NfdW5rbm93biwKJiM0MzsgICAgeW5sID0gWW5sRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hPWFyZ3Muc2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHksCiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3Vua25vd249YXJncy5wcm9jZXNzX3Vua25vd24sCiAgICAgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KQogICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6CiAgICAgICAgIHlubC5zZXRfcmVjdl9kYmcoVHJ1ZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHkKaW5kZXggYmU3NDE5ODVhZTRlZTcuLmFhNDI2M2M4Y2JhOWVmIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weQpAQCAtNSwxMiAmIzQzOzUsMTMgQEAKIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXAogICAgIFNwZWNGYW1pbHksIFNwZWNPcGVyYXRpb24sIFNwZWNTdWJNZXNzYWdlLCBTcGVjU3ViTWVzc2FnZUZvcm1hdCwgXAogICAgIFNwZWNFeGNlcHRpb24KJiM0Mztmcm9tIC5zcGVjZGlyIGltcG9ydCBsaXN0X2ZhbWlsaWVzCiBmcm9tIC55bmwgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgTmxQb2xpY3ksIFlubEV4Y2VwdGlvbgogCiBmcm9tIC5kb2NfZ2VuZXJhdG9yIGltcG9ydCBZbmxEb2NHZW5lcmF0b3IKIAogX19hbGxfXyA9IFsmIzM0O1NwZWNBdHRyJiMzNDssICYjMzQ7U3BlY0F0dHJTZXQmIzM0OywgJiMzNDtTcGVjRW51bUVudHJ5JiMzNDssICYjMzQ7U3BlY0VudW1TZXQmIzM0OywKICAgICAgICAgICAgJiMzNDtTcGVjRmFtaWx5JiMzNDssICYjMzQ7U3BlY09wZXJhdGlvbiYjMzQ7LCAmIzM0O1NwZWNTdWJNZXNzYWdlJiMzNDssICYjMzQ7U3BlY1N1Yk1lc3NhZ2VGb3JtYXQmIzM0OywKLSAgICAgICAgICAgJiMzNDtTcGVjRXhjZXB0aW9uJiMzNDssCiYjNDM7ICAgICAgICAgICAmIzM0O1NwZWNFeGNlcHRpb24mIzM0OywgJiMzNDtsaXN0X2ZhbWlsaWVzJiMzNDssCiAgICAgICAgICAgICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O1lubEV4Y2VwdGlvbiYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubERvY0dlbmVyYXRvciYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5CmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDQKLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weQpAQCAtMTIsNiAmIzQzOzEyLDggQEAgaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgeWFtbCBhcyBweXlhbWwKIAomIzQzO2Zyb20gLnNwZWNkaXIgaW1wb3J0IGZpbmRfc3BlYywgU1lTX1NDSEVNQV9ESVIKJiM0MzsKIAogY2xhc3MgU3BlY0V4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgICYjMzQ7JiMzNDsmIzM0O05ldGxpbmsgc3BlYyBleGNlcHRpb24uCkBAIC00NDQsNyAmIzQzOzQ0NiwyMyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KToKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIF95YW1sX2xvYWRlciA9IHB5eWFtbC5TYWZlTG9hZGVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aD1Ob25lLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOgomIzQzOyAgICAgICAgIyBzY2hlbWFfcGF0aCBzZWxlY3RzIGhvdyB0aGUgc3BlYyBpcyB2YWxpZGF0ZWQ6CiYjNDM7ICAgICAgICAjICAgTm9uZSAgLS0gbm8gcHJlZmVyZW5jZTogdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWEsCiYjNDM7ICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PQomIzQzOyAgICAgICAgIyAgIFRydWUgIC0tIGFsd2F5cyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYQomIzQzOyAgICAgICAgIyAgIHBhdGggIC0tIHZhbGlkYXRlIGFnYWluc3QgdGhpcyBzY2hlbWEKJiM0MzsgICAgICAgICMgICAmIzM5OyYjMzk7ICAgIC0tIGRvIG5vdCB2YWxpZGF0ZQomIzQzOyAgICAgICAgaWYgKHNwZWNfcGF0aCBpcyBOb25lKSA9PSAoZmFtaWx5IGlzIE5vbmUpOgomIzQzOyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJiMzNDtTcGVjaWZ5IGV4YWN0bHkgb25lIG9mIHNwZWMgcGF0aCBvciBmYW1pbHkgbmFtZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgZmFtaWx5IGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpCiYjNDM7ICAgICAgICAgICAgIyBJbnN0YWxsZWQgc3BlY3MgYXJlIGFzc3VtZWQgY29ycmVjdCwgc28gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbgomIzQzOyAgICAgICAgICAgICMgdG8gc2F2ZSBjeWNsZXMgdW5sZXNzIHRoZSBjYWxsZXIgYXNrZWQgdG8gdmFsaWRhdGUuCiYjNDM7ICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOgomIzQzOyAgICAgICAgICAgICAgICBzY2hlbWFfcGF0aCA9ICYjMzk7JiMzOTsKJiM0MzsKICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgJiMzNDtyJiMzNDssIGVuY29kaW5nPSYjMzk7dXRmLTgmIzM5OykgYXMgc3RyZWFtOgogICAgICAgICAgICAgcHJlZml4ID0gJiMzOTsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAmIzM5OwogICAgICAgICAgICAgZmlyc3QgPSBzdHJlYW0ucmVhZGxpbmUoKS5zdHJpcCgpCkBAIC00NjUsNyAmIzQzOzQ4Myw3IEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOgogICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgmIzM5O3Byb3RvY29sJiMzOTssICYjMzk7Z2VuZXRsaW5rJiMzOTspCiAgICAgICAgIHNlbGYubXNnX2lkX21vZGVsID0gc2VsZi55YW1sWyYjMzk7b3BlcmF0aW9ucyYjMzk7XS5nZXQoJiMzOTtlbnVtLW1vZGVsJiMzOTssICYjMzk7dW5pZmllZCYjMzk7KQogCi0gICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmU6CiYjNDM7ICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lIG9yIHNjaGVtYV9wYXRoIGlzIFRydWU6CiAgICAgICAgICAgICBzY2hlbWFfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoc3BlY19wYXRoKSkgJiM0MzsgZiYjMzk7L3tzZWxmLnByb3RvfS55YW1sJiMzOTsKICAgICAgICAgaWYgc2NoZW1hX3BhdGg6CiAgICAgICAgICAgICB3aXRoIG9wZW4oc2NoZW1hX3BhdGgsICYjMzQ7ciYjMzQ7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIHN0cmVhbToKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mY2VhOWI5ZmI3YjA0MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkKQEAgLTAsMCAmIzQzOzEsNTEgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQomIzQzOwomIzQzOyYjMzQ7JiMzNDsmIzM0OwomIzQzO0xvY2F0aW5nIFlOTCBzcGVjIGFuZCBzY2hlbWEgZmlsZXMgb24gZGlzay4KJiM0MzsKJiM0MztSZXNvbHZlcyB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIFlBTUwgc3BlY3MgKHByZWZlcnJpbmcgYW4gaW4tdHJlZSBjb3B5CiYjNDM7b3ZlciB0aGUgaW5zdGFsbGVkIHN5c3RlbSBwYXRoKSBhbmQgbWFwcyBmYW1pbHkgbmFtZXMgdG8gc3BlYyBmaWxlcy4KJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MztpbXBvcnQgb3MKJiM0MzsKJiM0MztTWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTsKJiM0MztSRUxBVElWRV9TQ0hFTUFfRElSPSYjMzk7Li4vLi4vLi4vLi4vLi4vRG9jdW1lbnRhdGlvbi9uZXRsaW5rJiMzOTsKJiM0MzsKJiM0MzsKJiM0MztkZWYgc2NoZW1hX2RpcigpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZQomIzQzOyAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKJiM0MzsgICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZiYjMzQ7e3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfSYjMzQ7KQomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6CiYjNDM7ICAgICAgICBzY2hlbWFfZGlyXyA9IFNZU19TQ0hFTUFfRElSCiYjNDM7ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKToKJiM0MzsgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGYmIzM0O1NjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdCYjMzQ7KQomIzQzOyAgICByZXR1cm4gc2NoZW1hX2Rpcl8KJiM0MzsKJiM0MztkZWYgc3BlY19kaXIoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlCiYjNDM7ICAgIHNjaGVtYSBkaXJlY3RvcnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgJiM0MzsgJiMzOTsvc3BlY3MmIzM5OwomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOgomIzQzOyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZiYjMzQ7U3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3QmIzM0OykKJiM0MzsgICAgcmV0dXJuIHNwZWNfZGlyXwomIzQzOwomIzQzOwomIzQzO2RlZiBmaW5kX3NwZWMoZmFtaWx5KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFJldHVybiB0aGUgcGF0aCB0byB0aGUgWUFNTCBzcGVjIGZpbGUgZm9yIGEgZmFtaWx5IGJ5IG5hbWUuICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBzcGVjID0gZiYjMzQ7e3NwZWNfZGlyKCl9L3tmYW1pbHl9LnlhbWwmIzM0OwomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6CiYjNDM7ICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmJiMzNDtTcGVjIGZvciBmYW1pbHkgJiMzOTt7ZmFtaWx5fSYjMzk7IG5vdCBmb3VuZCBhdCB7c3BlY30mIzM0OykKJiM0MzsgICAgcmV0dXJuIHNwZWMKJiM0MzsKJiM0MzsKJiM0MztkZWYgbGlzdF9mYW1pbGllcygpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsgUmV0dXJuIHRoZSBzb3J0ZWQgbmFtZXMgb2YgYWxsIGZhbWlsaWVzIHdpdGggYW4gaW5zdGFsbGVkIHNwZWMuICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICByZXR1cm4gc29ydGVkKGYucmVtb3Zlc3VmZml4KCYjMzk7LnlhbWwmIzM5OykKJiM0MzsgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHNwZWNfZGlyKCkpIGlmIGYuZW5kc3dpdGgoJiMzOTsueWFtbCYjMzk7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQppbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKQEAgLTY2MSw2ICYjNDM7NjYxLDE0IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KToKICAgICAmIzM0OyYjMzQ7JiMzNDsKICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy4KIAomIzQzOyAgICBUaGUgc3BlYyBjYW4gYmUgc2VsZWN0ZWQgZWl0aGVyIGJ5IGZpbGUgcGF0aCAoZGVmX3BhdGg9KSBvciwgd2hlbiBpdAomIzQzOyAgICBzaGlwcyBpbiBhIHdlbGwta25vd24gbG9jYXRpb24sIGJ5IGZhbWlseSBuYW1lIChmYW1pbHk9JiMzNDt4eXomIzM0Oyk7IGV4YWN0bHkKJiM0MzsgICAgb25lIG9mIHRoZSB0d28gbXVzdCBiZSBnaXZlbi4gRm9yIGV4YW1wbGU6CiYjNDM7CiYjNDM7ICAgICAgZnJvbSBweXlubCBpbXBvcnQgWW5sRmFtaWx5CiYjNDM7CiYjNDM7ICAgICAgeW5sID0gWW5sRmFtaWx5KGZhbWlseT0mIzM0O25ldGRldiYjMzQ7KQomIzQzOwogICAgIFByaW1hcnkgdXNlIG9mIHRoZSBjbGFzcyBpcyB0byBleGVjdXRlIE5ldGxpbmsgY29tbWFuZHM6CiAKICAgICAgIHlubC4mbHQ7b3BfbmFtZSZndDsoYXR0cnMsIC4uLikKQEAgLTY5MSwxMSAmIzQzOzY5OSwxNiBAQCBjbGFzcyBZbmxGYW1pbHkoU3BlY0ZhbWlseSk6CiAKICAgICAgIHlubC5nZXRfcG9saWN5KG9wX25hbWUsIG1vZGUpICAgICAgLS0gcXVlcnkga2VybmVsIHBvbGljeSBmb3IgYW4gb3AKICAgICAmIzM0OyYjMzQ7JiMzNDsKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsCi0gICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT0wKToKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hKQomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGg9Tm9uZSwgc2NoZW1hPU5vbmUsIHByb2Nlc3NfdW5rbm93bj1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTAsIGZhbWlseT1Ob25lKToKJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oZGVmX3BhdGgsIHNjaGVtYSwgZmFtaWx5PWZhbWlseSkKIAogICAgICAgICBzZWxmLmluY2x1ZGVfcmF3ID0gRmFsc2UKJiM0MzsgICAgICAgICMgU3BlY3MgZnJvbSAvdXNyIChzZWxlY3RlZCBieSBmYW1pbHk9KSBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBiZWluZwomIzQzOyAgICAgICAgIyBzdGFsZSwgZGVmYXVsdCB0byBpZ25vcmluZyB1bmtub3duIGF0dHJzLiBJbi10cmVlIHVzZXJzLCBhbmQgdXNlcnMKJiM0MzsgICAgICAgICMgd2hvIGJ1bmRsZSB0aGUgc3BlYyBuZWVkIHRvIG1ha2UgYSBjb25zY2lvdXMgZGVjaXNpb24uCiYjNDM7ICAgICAgICBpZiBwcm9jZXNzX3Vua25vd24gaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBwcm9jZXNzX3Vua25vd24gPSBmYW1pbHkgaXMgbm90IE5vbmUKICAgICAgICAgc2VsZi5wcm9jZXNzX3Vua25vd24gPSBwcm9jZXNzX3Vua25vd24KIAogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkKaW5kZXggZGIzYjYyYzY1MmU3N2YuLjBlZTBjOGU4NzY4NmJlIDEwMDc1NQotLS0gYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5CkBAIC0xMSwxMiAmIzQzOzExLDEwIEBAIGltcG9ydCBwYXRobGliCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKLWltcG9ydCBvcwogCiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb24KIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCYjMzk7cHl5bmwmIzM5OykuYXNfcG9zaXgoKSkKICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotZnJvbSBjbGkgaW1wb3J0IHNjaGVtYV9kaXIsIHNwZWNfZGlyCiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5CiAKIApAQCAtMTczLDEwICYjNDM7MTcxLDcgQEAgZGVmIG1haW4oKToKIAogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKLSAgICBzcGVjID0gb3MucGF0aC5qb2luKHNwZWNfZGlyKCksICYjMzk7ZXRodG9vbC55YW1sJiMzOTspCi0gICAgc2NoZW1hID0gb3MucGF0aC5qb2luKHNjaGVtYV9kaXIoKSwgJiMzOTtnZW5ldGxpbmstbGVnYWN5LnlhbWwmIzM5OykKLQotICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBzY2hlbWEsIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KQomIzQzOyAgICB5bmwgPSBZbmxGYW1pbHkoZmFtaWx5PSYjMzk7ZXRodG9vbCYjMzk7LCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdikKICAgICBpZiBhcmdzLmRiZ19zbWFsbF9yZWN2OgogICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMAoJCQkJCQkJb3V0cHV0OiA2MwoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTmVnYXRpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBQeXRob24gY29kZSB3aXRoaW4gYHRvb2xzL25ldC95bmwvcHl5bmwvYC4gSSByZWNvZ25pemUgdGhpcyBhcyB0aGUgdXNlci1zcGFjZSBZQU1MIE5ldGxpbmsgbGlicmFyeSAoWU5MKSwgd2hpY2ggbWFrZXMgaXQgY2xlYXIgdGhpcyBpcyBhIHRvb2xpbmcgbGF5ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggTmV0bGluay4gR29vZCwgZ29vZC4gSXQmIzM5O3MgY29uZmluZWQgdG8gYHRvb2xzL2AsIHdoaWNoIG1lYW5zIHRoaXMgaXMgKipub3QqKiBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGNvZGUsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBjb2RlIGl0c2VsZiBpcyBweXRob24gc2NyaXB0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHRvb2wgZGlyZWN0b3J5LiAKCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgX19pbml0X18ucHlgLCBgY2xpLnB5YCwgdGhlIGBsaWJgIGRpcmVjdG9yeSYjMzk7cyBgX19pbml0X18ucHlgLCBgbmxzcGVjLnB5YCwgYHNwZWNkaXIucHlgLCBgeW5sLnB5YCwgYW5kIGZpbmFsbHkgYSB0ZXN0IGZpbGUsIGBldGh0b29sLnB5YC4gQWxsIGFyZSB3aXRoaW4gdGhhdCBzcGVjaWZpZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gTm8ga2VybmVsIGhlYWRlcnMsIG5vIGtlcm5lbCBtb2R1bGVzLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBrZXJuZWwgZXhlY3V0aW9uLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgdXNlci1zcGFjZSBgdG9vbHMvYCBkaXJlY3RvcnkgYW5kIGl0IGlzIG9ubHkgbW9kaWZpY2F0aW9ucyB0byBQeXRob24gc2NyaXB0cywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcgdGhlIGtlcm5lbC4gSXQmIzM5O3MgYSBub24taXNzdWUgZnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludC4KClNvLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIE5vIHJlYXNvbiB0byBldmVuIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMgb3IgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBwdXJlIHVzZXItc3BhY2UgdG9vbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOC41MTgyNjUwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ3NjQ5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHRvb2xpbmcgZm9yIE5ldGxpbmsgKFlOTCkgaW4gdG9vbHMvbmV0L3lubC8gYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOC41MTgyNzQyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mjc2Njk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoyOToyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxcbmluZGV4IGU2OWRlMjliYjJkMWQ2Li5kOGY1OWMxMzJhYjdlZSAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxcbkBAIC0wLDAgKzEsOSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbitcXG4rXFxcIlxcXCJcXFwiIFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXFxcIlxcXCJcXFwiXFxuK1xcbisjIFJlLWV4cG9ydCB0aGUgcHVibGljIGxpYnJhcnkgQVBJIHNvIGl0IGNhbiBiZSBpbXBvcnRlZCBzdHJhaWdodCBmcm9tIHRoZVxcbisjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXFxuKyMgcHlsaW50OiBkaXNhYmxlPXdpbGRjYXJkLWltcG9ydCx1bnVzZWQtd2lsZGNhcmQtaW1wb3J0XFxuK2Zyb20gLmxpYiBpbXBvcnQgKlxcbitmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxcbmluZGV4IDgyNzVhODA2Y2Y3M2Q2Li5iNmE2Y2UxMmI0YTdmOCAxMDA3NTVcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XFxuQEAgLTE3LDkgKzE3LDcgQEAgaW1wb3J0IHRleHR3cmFwXFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxcbiBzeXMucGF0aC5hcHBlbmQocGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50LmFzX3Bvc2l4KCkpXFxuIGZyb20gbGliIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIFNwZWNGYW1pbHksIFNwZWNFeGNlcHRpb24sIFlubEV4Y2VwdGlvblxcbi1cXG4tU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xcbi1SRUxBVElWRV9TQ0hFTUFfRElSPScuLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsnXFxuK2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXFxuIFxcbiAjIHB5bGludDogZGlzYWJsZT10b28tZmV3LXB1YmxpYy1tZXRob2RzLHRvby1tYW55LWxvY2Fsc1xcbiBjbGFzcyBDb2xvcnM6XFxuQEAgLTQ4LDMwICs0Niw2IEBAIGRlZiB0ZXJtX3dpZHRoKCk6XFxuICAgICBcXFwiXFxcIlxcXCIgR2V0IHRlcm1pbmFsIHdpZHRoIGluIGNvbHVtbnMgKDgwIGlmIHN0ZG91dCBpcyBub3QgYSB0ZXJtaW5hbCkgXFxcIlxcXCJcXFwiXFxuICAgICByZXR1cm4gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKCkuY29sdW1uc1xcbiBcXG4tZGVmIHNjaGVtYV9kaXIoKTpcXG4tICAgIFxcXCJcXFwiXFxcIlxcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxcbi0gICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXFxuLSAgICBcXFwiXFxcIlxcXCJcXG4tICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcXG4tICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcXFwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVxcXCIpXFxuLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XFxuLSAgICAgICAgc2NoZW1hX2Rpcl8gPSBTWVNfU0NIRU1BX0RJUlxcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxcbi0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXFxcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuLSAgICByZXR1cm4gc2NoZW1hX2Rpcl9cXG4tXFxuLWRlZiBzcGVjX2RpcigpOlxcbi0gICAgXFxcIlxcXCJcXFwiXFxuLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzcGVjIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIGVmZmVjdGl2ZVxcbi0gICAgc2NoZW1hIGRpcmVjdG9yeS5cXG4tICAgIFxcXCJcXFwiXFxcIlxcbi0gICAgc3BlY19kaXJfID0gc2NoZW1hX2RpcigpICsgJy9zcGVjcydcXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNwZWNfZGlyXyk6XFxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcXFwiU3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3RcXFwiKVxcbi0gICAgcmV0dXJuIHNwZWNfZGlyX1xcbi1cXG4tXFxuIGNsYXNzIFlubEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6XFxuICAgICBcXFwiXFxcIlxcXCJBIGN1c3RvbSBlbmNvZGVyIGZvciBlbWl0dGluZyBKU09OIHdpdGggeW5sLXNwZWNpZmljIGluc3RhbmNlIHR5cGVzXFxcIlxcXCJcXFwiXFxuICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKTpcXG5AQCAtMjcyLDkgKzI0Niw4IEBAIGRlZiBtYWluKCk6XFxuICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobXNnLCB3aWR0aD10ZXJtX3dpZHRoKCksIGNvbXBhY3Q9VHJ1ZSlcXG4gXFxuICAgICBpZiBhcmdzLmxpc3RfZmFtaWxpZXM6XFxuLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvcnRlZChvcy5saXN0ZGlyKHNwZWNfZGlyKCkpKTpcXG4tICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy55YW1sJyk6XFxuLSAgICAgICAgICAgICAgICBwcmludChmaWxlbmFtZS5yZW1vdmVzdWZmaXgoJy55YW1sJykpXFxuKyAgICAgICAgZm9yIGZhbWlseSBpbiBsaXN0X2ZhbWlsaWVzKCk6XFxuKyAgICAgICAgICAgIHByaW50KGZhbWlseSlcXG4gICAgICAgICByZXR1cm5cXG4gXFxuICAgICBpZiBhcmdzLm5vX3NjaGVtYTpcXG5AQCAtMjg0LDI4ICsyNTcsMjMgQEAgZGVmIG1haW4oKTpcXG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxcbiAgICAgICAgIGF0dHJzID0ganNvbi5sb2FkcyhhcmdzLmpzb25fdGV4dClcXG4gXFxuLSAgICBpZiBhcmdzLmZhbWlseTpcXG4tICAgICAgICBzcGVjID0gZlxcXCJ7c3BlY19kaXIoKX0ve2FyZ3MuZmFtaWx5fS55YW1sXFxcIlxcbi0gICAgZWxzZTpcXG4tICAgICAgICBzcGVjID0gYXJncy5zcGVjXFxuLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XFxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcXFwiU3BlYyBmaWxlIHtzcGVjfSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuKyAgICBpZiBhcmdzLnNwZWMgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShhcmdzLnNwZWMpOlxcbisgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXFxcIlNwZWMgZmlsZSB7YXJncy5zcGVjfSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuIFxcbisgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXFxuICAgICBpZiBhcmdzLnZhbGlkYXRlOlxcbisgICAgICAgICMgRm9yY2UgdmFsaWRhdGlvbiBldmVuIGZvciBpbnN0YWxsZWQgc3BlY3MgKHNjaGVtYT1UcnVlKSwgdW5sZXNzIHRoZVxcbisgICAgICAgICMgdXNlciBleHBsaWNpdGx5IHBpY2tlZCBhIHNjaGVtYSBvciBvcHRlZCBvdXQgd2l0aCAtLW5vLXNjaGVtYS5cXG4rICAgICAgICBzY2hlbWEgPSBUcnVlIGlmIGFyZ3Muc2NoZW1hIGlzIE5vbmUgZWxzZSBhcmdzLnNjaGVtYVxcbiAgICAgICAgIHRyeTpcXG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcXG4rICAgICAgICAgICAgU3BlY0ZhbWlseShhcmdzLnNwZWMsIHNjaGVtYV9wYXRoPXNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5KVxcbiAgICAgICAgIGV4Y2VwdCBTcGVjRXhjZXB0aW9uIGFzIGVycm9yOlxcbiAgICAgICAgICAgICBwcmludChlcnJvcilcXG4gICAgICAgICAgICAgc3lzLmV4aXQoMSlcXG4gICAgICAgICByZXR1cm5cXG4gXFxuLSAgICBpZiBhcmdzLmZhbWlseTogIyBzZXQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgaW5zdGFsbGVkIHNwZWNzXFxuLSAgICAgICAgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBhbmQgc3BlYy5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKTpcXG4tICAgICAgICAgICAgYXJncy5zY2hlbWEgPSAnJyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcXG4tICAgICAgICBpZiBhcmdzLnByb2Nlc3NfdW5rbm93biBpcyBOb25lOlxcbi0gICAgICAgICAgICBhcmdzLnByb2Nlc3NfdW5rbm93biA9IFRydWVcXG4tXFxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgYXJncy5zY2hlbWEsIGFyZ3MucHJvY2Vzc191bmtub3duLFxcbisgICAgeW5sID0gWW5sRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hPWFyZ3Muc2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHksXFxuKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc191bmtub3duPWFyZ3MucHJvY2Vzc191bmtub3duLFxcbiAgICAgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxcbiAgICAgaWYgYXJncy5kYmdfc21hbGxfcmVjdjpcXG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcXG5pbmRleCBiZTc0MTk4NWFlNGVlNy4uYWE0MjYzYzhjYmE5ZWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxcbkBAIC01LDEyICs1LDEzIEBAXFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxcXFxuICAgICBTcGVjRXhjZXB0aW9uXFxuK2Zyb20gLnNwZWNkaXIgaW1wb3J0IGxpc3RfZmFtaWxpZXNcXG4gZnJvbSAueW5sIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIE5sUG9saWN5LCBZbmxFeGNlcHRpb25cXG4gXFxuIGZyb20gLmRvY19nZW5lcmF0b3IgaW1wb3J0IFlubERvY0dlbmVyYXRvclxcbiBcXG4gX19hbGxfXyA9IFtcXFwiU3BlY0F0dHJcXFwiLCBcXFwiU3BlY0F0dHJTZXRcXFwiLCBcXFwiU3BlY0VudW1FbnRyeVxcXCIsIFxcXCJTcGVjRW51bVNldFxcXCIsXFxuICAgICAgICAgICAgXFxcIlNwZWNGYW1pbHlcXFwiLCBcXFwiU3BlY09wZXJhdGlvblxcXCIsIFxcXCJTcGVjU3ViTWVzc2FnZVxcXCIsIFxcXCJTcGVjU3ViTWVzc2FnZUZvcm1hdFxcXCIsXFxuLSAgICAgICAgICAgXFxcIlNwZWNFeGNlcHRpb25cXFwiLFxcbisgICAgICAgICAgIFxcXCJTcGVjRXhjZXB0aW9uXFxcIiwgXFxcImxpc3RfZmFtaWxpZXNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIllubEV4Y2VwdGlvblxcXCIsXFxuICAgICAgICAgICAgXFxcIllubERvY0dlbmVyYXRvclxcXCJdXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcXG5AQCAtMTIsNiArMTIsOCBAQCBpbXBvcnQgaW1wb3J0bGliXFxuIGltcG9ydCBvc1xcbiBpbXBvcnQgeWFtbCBhcyBweXlhbWxcXG4gXFxuK2Zyb20gLnNwZWNkaXIgaW1wb3J0IGZpbmRfc3BlYywgU1lTX1NDSEVNQV9ESVJcXG4rXFxuIFxcbiBjbGFzcyBTcGVjRXhjZXB0aW9uKEV4Y2VwdGlvbik6XFxuICAgICBcXFwiXFxcIlxcXCJOZXRsaW5rIHNwZWMgZXhjZXB0aW9uLlxcbkBAIC00NDQsNyArNDQ2LDIzIEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOlxcbiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOlxcbiAgICAgICAgIF95YW1sX2xvYWRlciA9IHB5eWFtbC5TYWZlTG9hZGVyXFxuIFxcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aCwgc2NoZW1hX3BhdGg9Tm9uZSwgZXhjbHVkZV9vcHM9Tm9uZSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoPU5vbmUsIHNjaGVtYV9wYXRoPU5vbmUsIGV4Y2x1ZGVfb3BzPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxcbisgICAgICAgICMgc2NoZW1hX3BhdGggc2VsZWN0cyBob3cgdGhlIHNwZWMgaXMgdmFsaWRhdGVkOlxcbisgICAgICAgICMgICBOb25lICAtLSBubyBwcmVmZXJlbmNlOiB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYSxcXG4rICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxcbisgICAgICAgICMgICBUcnVlICAtLSBhbHdheXMgdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWFcXG4rICAgICAgICAjICAgcGF0aCAgLS0gdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxcbisgICAgICAgICMgICAnJyAgICAtLSBkbyBub3QgdmFsaWRhdGVcXG4rICAgICAgICBpZiAoc3BlY19wYXRoIGlzIE5vbmUpID09IChmYW1pbHkgaXMgTm9uZSk6XFxuKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoXFxcIlNwZWNpZnkgZXhhY3RseSBvbmUgb2Ygc3BlYyBwYXRoIG9yIGZhbWlseSBuYW1lXFxcIilcXG4rICAgICAgICBpZiBmYW1pbHkgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpXFxuKyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cXG4rICAgICAgICAgICAgIyB0byBzYXZlIGN5Y2xlcyB1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCB0byB2YWxpZGF0ZS5cXG4rICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxcbisgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAnJ1xcbitcXG4gICAgICAgICB3aXRoIG9wZW4oc3BlY19wYXRoLCBcXFwiclxcXCIsIGVuY29kaW5nPSd1dGYtOCcpIGFzIHN0cmVhbTpcXG4gICAgICAgICAgICAgcHJlZml4ID0gJyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICdcXG4gICAgICAgICAgICAgZmlyc3QgPSBzdHJlYW0ucmVhZGxpbmUoKS5zdHJpcCgpXFxuQEAgLTQ2NSw3ICs0ODMsNyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcXG4gICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgncHJvdG9jb2wnLCAnZ2VuZXRsaW5rJylcXG4gICAgICAgICBzZWxmLm1zZ19pZF9tb2RlbCA9IHNlbGYueWFtbFsnb3BlcmF0aW9ucyddLmdldCgnZW51bS1tb2RlbCcsICd1bmlmaWVkJylcXG4gXFxuLSAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZTpcXG4rICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lIG9yIHNjaGVtYV9wYXRoIGlzIFRydWU6XFxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSArIGYnL3tzZWxmLnByb3RvfS55YW1sJ1xcbiAgICAgICAgIGlmIHNjaGVtYV9wYXRoOlxcbiAgICAgICAgICAgICB3aXRoIG9wZW4oc2NoZW1hX3BhdGgsIFxcXCJyXFxcIiwgZW5jb2Rpbmc9J3V0Zi04JykgYXMgc3RyZWFtOlxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjZWE5YjlmYjdiMDQzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHlcXG5AQCAtMCwwICsxLDUxIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbitcXFwiXFxcIlxcXCJcXG4rTG9jYXRpbmcgWU5MIHNwZWMgYW5kIHNjaGVtYSBmaWxlcyBvbiBkaXNrLlxcbitcXG4rUmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBZQU1MIHNwZWNzIChwcmVmZXJyaW5nIGFuIGluLXRyZWUgY29weVxcbitvdmVyIHRoZSBpbnN0YWxsZWQgc3lzdGVtIHBhdGgpIGFuZCBtYXBzIGZhbWlseSBuYW1lcyB0byBzcGVjIGZpbGVzLlxcbitcXFwiXFxcIlxcXCJcXG4rXFxuK2ltcG9ydCBvc1xcbitcXG4rU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xcbitSRUxBVElWRV9TQ0hFTUFfRElSPScuLi8uLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsnXFxuK1xcbitcXG4rZGVmIHNjaGVtYV9kaXIoKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxcbisgICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcXG4rICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcXFwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVxcXCIpXFxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XFxuKyAgICAgICAgc2NoZW1hX2Rpcl8gPSBTWVNfU0NIRU1BX0RJUlxcbisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxcbisgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcXFwiU2NoZW1hIGRpcmVjdG9yeSB7c2NoZW1hX2Rpcl99IGRvZXMgbm90IGV4aXN0XFxcIilcXG4rICAgIHJldHVybiBzY2hlbWFfZGlyX1xcbitcXG4rZGVmIHNwZWNfZGlyKCk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXFxuKyAgICBzY2hlbWEgZGlyZWN0b3J5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xcbisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3BlY19kaXJfKTpcXG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXFxcIlNwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XFxcIilcXG4rICAgIHJldHVybiBzcGVjX2Rpcl9cXG4rXFxuK1xcbitkZWYgZmluZF9zcGVjKGZhbWlseSk6XFxuKyAgICBcXFwiXFxcIlxcXCIgUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBZQU1MIHNwZWMgZmlsZSBmb3IgYSBmYW1pbHkgYnkgbmFtZS4gXFxcIlxcXCJcXFwiXFxuKyAgICBzcGVjID0gZlxcXCJ7c3BlY19kaXIoKX0ve2ZhbWlseX0ueWFtbFxcXCJcXG4rICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcGVjKTpcXG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXFxcIlNwZWMgZm9yIGZhbWlseSAne2ZhbWlseX0nIG5vdCBmb3VuZCBhdCB7c3BlY31cXFwiKVxcbisgICAgcmV0dXJuIHNwZWNcXG4rXFxuK1xcbitkZWYgbGlzdF9mYW1pbGllcygpOlxcbisgICAgXFxcIlxcXCJcXFwiIFJldHVybiB0aGUgc29ydGVkIG5hbWVzIG9mIGFsbCBmYW1pbGllcyB3aXRoIGFuIGluc3RhbGxlZCBzcGVjLiBcXFwiXFxcIlxcXCJcXG4rICAgIHJldHVybiBzb3J0ZWQoZi5yZW1vdmVzdWZmaXgoJy55YW1sJylcXG4rICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzcGVjX2RpcigpKSBpZiBmLmVuZHN3aXRoKCcueWFtbCcpKVxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG5pbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuQEAgLTY2MSw2ICs2NjEsMTQgQEAgY2xhc3MgWW5sRmFtaWx5KFNwZWNGYW1pbHkpOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy5cXG4gXFxuKyAgICBUaGUgc3BlYyBjYW4gYmUgc2VsZWN0ZWQgZWl0aGVyIGJ5IGZpbGUgcGF0aCAoZGVmX3BhdGg9KSBvciwgd2hlbiBpdFxcbisgICAgc2hpcHMgaW4gYSB3ZWxsLWtub3duIGxvY2F0aW9uLCBieSBmYW1pbHkgbmFtZSAoZmFtaWx5PVxcXCJ4eXpcXFwiKTsgZXhhY3RseVxcbisgICAgb25lIG9mIHRoZSB0d28gbXVzdCBiZSBnaXZlbi4gRm9yIGV4YW1wbGU6XFxuK1xcbisgICAgICBmcm9tIHB5eW5sIGltcG9ydCBZbmxGYW1pbHlcXG4rXFxuKyAgICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9XFxcIm5ldGRldlxcXCIpXFxuK1xcbiAgICAgUHJpbWFyeSB1c2Ugb2YgdGhlIGNsYXNzIGlzIHRvIGV4ZWN1dGUgTmV0bGluayBjb21tYW5kczpcXG4gXFxuICAgICAgIHlubC5cXHUwMDNjb3BfbmFtZVxcdTAwM2UoYXR0cnMsIC4uLilcXG5AQCAtNjkxLDExICs2OTksMTYgQEAgY2xhc3MgWW5sRmFtaWx5KFNwZWNGYW1pbHkpOlxcbiBcXG4gICAgICAgeW5sLmdldF9wb2xpY3kob3BfbmFtZSwgbW9kZSkgICAgICAtLSBxdWVyeSBrZXJuZWwgcG9saWN5IGZvciBhbiBvcFxcbiAgICAgXFxcIlxcXCJcXFwiXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXFxuLSAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTApOlxcbi0gICAgICAgIHN1cGVyKCkuX19pbml0X18oZGVmX3BhdGgsIHNjaGVtYSlcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZfcGF0aD1Ob25lLCBzY2hlbWE9Tm9uZSwgcHJvY2Vzc191bmtub3duPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTAsIGZhbWlseT1Ob25lKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEsIGZhbWlseT1mYW1pbHkpXFxuIFxcbiAgICAgICAgIHNlbGYuaW5jbHVkZV9yYXcgPSBGYWxzZVxcbisgICAgICAgICMgU3BlY3MgZnJvbSAvdXNyIChzZWxlY3RlZCBieSBmYW1pbHk9KSBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBiZWluZ1xcbisgICAgICAgICMgc3RhbGUsIGRlZmF1bHQgdG8gaWdub3JpbmcgdW5rbm93biBhdHRycy4gSW4tdHJlZSB1c2VycywgYW5kIHVzZXJzXFxuKyAgICAgICAgIyB3aG8gYnVuZGxlIHRoZSBzcGVjIG5lZWQgdG8gbWFrZSBhIGNvbnNjaW91cyBkZWNpc2lvbi5cXG4rICAgICAgICBpZiBwcm9jZXNzX3Vua25vd24gaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvY2Vzc191bmtub3duID0gZmFtaWx5IGlzIG5vdCBOb25lXFxuICAgICAgICAgc2VsZi5wcm9jZXNzX3Vua25vd24gPSBwcm9jZXNzX3Vua25vd25cXG4gXFxuICAgICAgICAgdHJ5OlxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcXG5pbmRleCBkYjNiNjJjNjUyZTc3Zi4uMGVlMGM4ZTg3Njg2YmUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XFxuQEAgLTExLDEyICsxMSwxMCBAQCBpbXBvcnQgcGF0aGxpYlxcbiBpbXBvcnQgcHByaW50XFxuIGltcG9ydCBzeXNcXG4gaW1wb3J0IHJlXFxuLWltcG9ydCBvc1xcbiBcXG4gIyBweWxpbnQ6IGRpc2FibGU9bm8tbmFtZS1pbi1tb2R1bGUsd3JvbmctaW1wb3J0LXBvc2l0aW9uXFxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCdweXlubCcpLmFzX3Bvc2l4KCkpXFxuICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvclxcbi1mcm9tIGNsaSBpbXBvcnQgc2NoZW1hX2Rpciwgc3BlY19kaXJcXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseVxcbiBcXG4gXFxuQEAgLTE3MywxMCArMTcxLDcgQEAgZGVmIG1haW4oKTpcXG4gXFxuICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVxcbiBcXG4tICAgIHNwZWMgPSBvcy5wYXRoLmpvaW4oc3BlY19kaXIoKSwgJ2V0aHRvb2wueWFtbCcpXFxuLSAgICBzY2hlbWEgPSBvcy5wYXRoLmpvaW4oc2NoZW1hX2RpcigpLCAnZ2VuZXRsaW5rLWxlZ2FjeS55YW1sJylcXG4tXFxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgc2NoZW1hLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcXG4rICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9J2V0aHRvb2wnLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XFxuICAgICAgICAgeW5sLnNldF9yZWN2X2RiZyhUcnVlKVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6Mjk6MjkuMTAxODMwMjgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0MDc2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHRvb2xpbmcgZm9yIE5ldGxpbmsgKFlOTCkgaW4gdG9vbHMvbmV0L3lubC8gYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA3OjI5OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbmluZGV4IGU2OWRlMjliYjJkMWQ2Li5kOGY1OWMxMzJhYjdlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbkBAIC0wLDAgKzEsOSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rXCJcIlwiIFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXCJcIlwiXG4rXG4rIyBSZS1leHBvcnQgdGhlIHB1YmxpYyBsaWJyYXJ5IEFQSSBzbyBpdCBjYW4gYmUgaW1wb3J0ZWQgc3RyYWlnaHQgZnJvbSB0aGVcbisjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXG4rIyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0LHVudXNlZC13aWxkY2FyZC1pbXBvcnRcbitmcm9tIC5saWIgaW1wb3J0ICpcbitmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XG5pbmRleCA4Mjc1YTgwNmNmNzNkNi4uYjZhNmNlMTJiNGE3ZjggMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHlcbkBAIC0xNyw5ICsxNyw3IEBAIGltcG9ydCB0ZXh0d3JhcFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQuYXNfcG9zaXgoKSlcbiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5LCBOZXRsaW5rLCBObEVycm9yLCBTcGVjRmFtaWx5LCBTcGVjRXhjZXB0aW9uLCBZbmxFeGNlcHRpb25cbi1cbi1TWVNfU0NIRU1BX0RJUj0nL3Vzci9zaGFyZS95bmwnXG4tUkVMQVRJVkVfU0NIRU1BX0RJUj0nLi4vLi4vLi4vLi4vRG9jdW1lbnRhdGlvbi9uZXRsaW5rJ1xuK2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXG4gXG4gIyBweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcyx0b28tbWFueS1sb2NhbHNcbiBjbGFzcyBDb2xvcnM6XG5AQCAtNDgsMzAgKzQ2LDYgQEAgZGVmIHRlcm1fd2lkdGgoKTpcbiAgICAgXCJcIlwiIEdldCB0ZXJtaW5hbCB3aWR0aCBpbiBjb2x1bW5zICg4MCBpZiBzdGRvdXQgaXMgbm90IGEgdGVybWluYWwpIFwiXCJcIlxuICAgICByZXR1cm4gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKCkuY29sdW1uc1xuIFxuLWRlZiBzY2hlbWFfZGlyKCk6XG4tICAgIFwiXCJcIlxuLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzY2hlbWEgZGlyZWN0b3J5LCBwcmVmZXJyaW5nIGluLXRyZWUgYmVmb3JlXG4tICAgIHN5c3RlbSBzY2hlbWEgZGlyZWN0b3J5LlxuLSAgICBcIlwiXCJcbi0gICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKVxuLSAgICBzY2hlbWFfZGlyXyA9IG9zLnBhdGguYWJzcGF0aChmXCJ7c2NyaXB0X2Rpcn0ve1JFTEFUSVZFX1NDSEVNQV9ESVJ9XCIpXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbi0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFwiKVxuLSAgICByZXR1cm4gc2NoZW1hX2Rpcl9cbi1cbi1kZWYgc3BlY19kaXIoKTpcbi0gICAgXCJcIlwiXG4tICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXG4tICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4tICAgIFwiXCJcIlxuLSAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xuLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XCIpXG4tICAgIHJldHVybiBzcGVjX2Rpcl9cbi1cbi1cbiBjbGFzcyBZbmxFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOlxuICAgICBcIlwiXCJBIGN1c3RvbSBlbmNvZGVyIGZvciBlbWl0dGluZyBKU09OIHdpdGggeW5sLXNwZWNpZmljIGluc3RhbmNlIHR5cGVzXCJcIlwiXG4gICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOlxuQEAgLTI3Miw5ICsyNDYsOCBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobXNnLCB3aWR0aD10ZXJtX3dpZHRoKCksIGNvbXBhY3Q9VHJ1ZSlcbiBcbiAgICAgaWYgYXJncy5saXN0X2ZhbWlsaWVzOlxuLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvcnRlZChvcy5saXN0ZGlyKHNwZWNfZGlyKCkpKTpcbi0gICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLnlhbWwnKTpcbi0gICAgICAgICAgICAgICAgcHJpbnQoZmlsZW5hbWUucmVtb3Zlc3VmZml4KCcueWFtbCcpKVxuKyAgICAgICAgZm9yIGZhbWlseSBpbiBsaXN0X2ZhbWlsaWVzKCk6XG4rICAgICAgICAgICAgcHJpbnQoZmFtaWx5KVxuICAgICAgICAgcmV0dXJuXG4gXG4gICAgIGlmIGFyZ3Mubm9fc2NoZW1hOlxuQEAgLTI4NCwyOCArMjU3LDIzIEBAIGRlZiBtYWluKCk6XG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxuICAgICAgICAgYXR0cnMgPSBqc29uLmxvYWRzKGFyZ3MuanNvbl90ZXh0KVxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTpcbi0gICAgICAgIHNwZWMgPSBmXCJ7c3BlY19kaXIoKX0ve2FyZ3MuZmFtaWx5fS55YW1sXCJcbi0gICAgZWxzZTpcbi0gICAgICAgIHNwZWMgPSBhcmdzLnNwZWNcbi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNwZWMpOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNwZWMgZmlsZSB7c3BlY30gZG9lcyBub3QgZXhpc3RcIilcbisgICAgaWYgYXJncy5zcGVjIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoYXJncy5zcGVjKTpcbisgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXCJTcGVjIGZpbGUge2FyZ3Muc3BlY30gZG9lcyBub3QgZXhpc3RcIilcbiBcbisgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXG4gICAgIGlmIGFyZ3MudmFsaWRhdGU6XG4rICAgICAgICAjIEZvcmNlIHZhbGlkYXRpb24gZXZlbiBmb3IgaW5zdGFsbGVkIHNwZWNzIChzY2hlbWE9VHJ1ZSksIHVubGVzcyB0aGVcbisgICAgICAgICMgdXNlciBleHBsaWNpdGx5IHBpY2tlZCBhIHNjaGVtYSBvciBvcHRlZCBvdXQgd2l0aCAtLW5vLXNjaGVtYS5cbisgICAgICAgIHNjaGVtYSA9IFRydWUgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBlbHNlIGFyZ3Muc2NoZW1hXG4gICAgICAgICB0cnk6XG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcbisgICAgICAgICAgICBTcGVjRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hX3BhdGg9c2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHkpXG4gICAgICAgICBleGNlcHQgU3BlY0V4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICBwcmludChlcnJvcilcbiAgICAgICAgICAgICBzeXMuZXhpdCgxKVxuICAgICAgICAgcmV0dXJuXG4gXG4tICAgIGlmIGFyZ3MuZmFtaWx5OiAjIHNldCBiZWhhdmlvdXIgd2hlbiB1c2luZyBpbnN0YWxsZWQgc3BlY3Ncbi0gICAgICAgIGlmIGFyZ3Muc2NoZW1hIGlzIE5vbmUgYW5kIHNwZWMuc3RhcnRzd2l0aChTWVNfU0NIRU1BX0RJUik6XG4tICAgICAgICAgICAgYXJncy5zY2hlbWEgPSAnJyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcbi0gICAgICAgIGlmIGFyZ3MucHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4tICAgICAgICAgICAgYXJncy5wcm9jZXNzX3Vua25vd24gPSBUcnVlXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSwgYXJncy5wcm9jZXNzX3Vua25vd24sXG4rICAgIHlubCA9IFlubEZhbWlseShhcmdzLnNwZWMsIHNjaGVtYT1hcmdzLnNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5LFxuKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc191bmtub3duPWFyZ3MucHJvY2Vzc191bmtub3duLFxuICAgICAgICAgICAgICAgICAgICAgcmVjdl9zaXplPWFyZ3MuZGJnX3NtYWxsX3JlY3YpXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxuaW5kZXggYmU3NDE5ODVhZTRlZTcuLmFhNDI2M2M4Y2JhOWVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5XG5AQCAtNSwxMiArNSwxMyBAQFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxuICAgICBTcGVjRXhjZXB0aW9uXG4rZnJvbSAuc3BlY2RpciBpbXBvcnQgbGlzdF9mYW1pbGllc1xuIGZyb20gLnlubCBpbXBvcnQgWW5sRmFtaWx5LCBOZXRsaW5rLCBObEVycm9yLCBObFBvbGljeSwgWW5sRXhjZXB0aW9uXG4gXG4gZnJvbSAuZG9jX2dlbmVyYXRvciBpbXBvcnQgWW5sRG9jR2VuZXJhdG9yXG4gXG4gX19hbGxfXyA9IFtcIlNwZWNBdHRyXCIsIFwiU3BlY0F0dHJTZXRcIiwgXCJTcGVjRW51bUVudHJ5XCIsIFwiU3BlY0VudW1TZXRcIixcbiAgICAgICAgICAgIFwiU3BlY0ZhbWlseVwiLCBcIlNwZWNPcGVyYXRpb25cIiwgXCJTcGVjU3ViTWVzc2FnZVwiLCBcIlNwZWNTdWJNZXNzYWdlRm9ybWF0XCIsXG4tICAgICAgICAgICBcIlNwZWNFeGNlcHRpb25cIixcbisgICAgICAgICAgIFwiU3BlY0V4Y2VwdGlvblwiLCBcImxpc3RfZmFtaWxpZXNcIixcbiAgICAgICAgICAgIFwiWW5sRmFtaWx5XCIsIFwiTmV0bGlua1wiLCBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIllubEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgXCJZbmxEb2NHZW5lcmF0b3JcIl1cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5XG5AQCAtMTIsNiArMTIsOCBAQCBpbXBvcnQgaW1wb3J0bGliXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHlhbWwgYXMgcHl5YW1sXG4gXG4rZnJvbSAuc3BlY2RpciBpbXBvcnQgZmluZF9zcGVjLCBTWVNfU0NIRU1BX0RJUlxuK1xuIFxuIGNsYXNzIFNwZWNFeGNlcHRpb24oRXhjZXB0aW9uKTpcbiAgICAgXCJcIlwiTmV0bGluayBzcGVjIGV4Y2VwdGlvbi5cbkBAIC00NDQsNyArNDQ2LDIzIEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOlxuICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6XG4gICAgICAgICBfeWFtbF9sb2FkZXIgPSBweXlhbWwuU2FmZUxvYWRlclxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aD1Ob25lLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lLFxuKyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxuKyAgICAgICAgIyBzY2hlbWFfcGF0aCBzZWxlY3RzIGhvdyB0aGUgc3BlYyBpcyB2YWxpZGF0ZWQ6XG4rICAgICAgICAjICAgTm9uZSAgLS0gbm8gcHJlZmVyZW5jZTogdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWEsXG4rICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxuKyAgICAgICAgIyAgIFRydWUgIC0tIGFsd2F5cyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYVxuKyAgICAgICAgIyAgIHBhdGggIC0tIHZhbGlkYXRlIGFnYWluc3QgdGhpcyBzY2hlbWFcbisgICAgICAgICMgICAnJyAgICAtLSBkbyBub3QgdmFsaWRhdGVcbisgICAgICAgIGlmIChzcGVjX3BhdGggaXMgTm9uZSkgPT0gKGZhbWlseSBpcyBOb25lKTpcbisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKFwiU3BlY2lmeSBleGFjdGx5IG9uZSBvZiBzcGVjIHBhdGggb3IgZmFtaWx5IG5hbWVcIilcbisgICAgICAgIGlmIGZhbWlseSBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBzcGVjX3BhdGggPSBmaW5kX3NwZWMoZmFtaWx5KVxuKyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cbisgICAgICAgICAgICAjIHRvIHNhdmUgY3ljbGVzIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIHRvIHZhbGlkYXRlLlxuKyAgICAgICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmUgYW5kIHNwZWNfcGF0aC5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKTpcbisgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAnJ1xuK1xuICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgXCJyXCIsIGVuY29kaW5nPSd1dGYtOCcpIGFzIHN0cmVhbTpcbiAgICAgICAgICAgICBwcmVmaXggPSAnIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogJ1xuICAgICAgICAgICAgIGZpcnN0ID0gc3RyZWFtLnJlYWRsaW5lKCkuc3RyaXAoKVxuQEAgLTQ2NSw3ICs0ODMsNyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcbiAgICAgICAgIHNlbGYucHJvdG8gPSBzZWxmLnlhbWwuZ2V0KCdwcm90b2NvbCcsICdnZW5ldGxpbmsnKVxuICAgICAgICAgc2VsZi5tc2dfaWRfbW9kZWwgPSBzZWxmLnlhbWxbJ29wZXJhdGlvbnMnXS5nZXQoJ2VudW0tbW9kZWwnLCAndW5pZmllZCcpXG4gXG4tICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lOlxuKyAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBvciBzY2hlbWFfcGF0aCBpcyBUcnVlOlxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSArIGYnL3tzZWxmLnByb3RvfS55YW1sJ1xuICAgICAgICAgaWYgc2NoZW1hX3BhdGg6XG4gICAgICAgICAgICAgd2l0aCBvcGVuKHNjaGVtYV9wYXRoLCBcInJcIiwgZW5jb2Rpbmc9J3V0Zi04JykgYXMgc3RyZWFtOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjZWE5YjlmYjdiMDQzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5XG5AQCAtMCwwICsxLDUxIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbitcbitcIlwiXCJcbitMb2NhdGluZyBZTkwgc3BlYyBhbmQgc2NoZW1hIGZpbGVzIG9uIGRpc2suXG4rXG4rUmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBZQU1MIHNwZWNzIChwcmVmZXJyaW5nIGFuIGluLXRyZWUgY29weVxuK292ZXIgdGhlIGluc3RhbGxlZCBzeXN0ZW0gcGF0aCkgYW5kIG1hcHMgZmFtaWx5IG5hbWVzIHRvIHNwZWMgZmlsZXMuXG4rXCJcIlwiXG4rXG4raW1wb3J0IG9zXG4rXG4rU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xuK1JFTEFUSVZFX1NDSEVNQV9ESVI9Jy4uLy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluaydcbitcbitcbitkZWYgc2NoZW1hX2RpcigpOlxuKyAgICBcIlwiXCJcbisgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuKyAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS5cbisgICAgXCJcIlwiXG4rICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbisgICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZlwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVwiKVxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XG4rICAgICAgICBzY2hlbWFfZGlyXyA9IFNZU19TQ0hFTUFfRElSXG4rICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbisgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFwiKVxuKyAgICByZXR1cm4gc2NoZW1hX2Rpcl9cbitcbitkZWYgc3BlY19kaXIoKTpcbisgICAgXCJcIlwiXG4rICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXG4rICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4rICAgIFwiXCJcIlxuKyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuKyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZlwiU3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3RcIilcbisgICAgcmV0dXJuIHNwZWNfZGlyX1xuK1xuK1xuK2RlZiBmaW5kX3NwZWMoZmFtaWx5KTpcbisgICAgXCJcIlwiIFJldHVybiB0aGUgcGF0aCB0byB0aGUgWUFNTCBzcGVjIGZpbGUgZm9yIGEgZmFtaWx5IGJ5IG5hbWUuIFwiXCJcIlxuKyAgICBzcGVjID0gZlwie3NwZWNfZGlyKCl9L3tmYW1pbHl9LnlhbWxcIlxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXCJTcGVjIGZvciBmYW1pbHkgJ3tmYW1pbHl9JyBub3QgZm91bmQgYXQge3NwZWN9XCIpXG4rICAgIHJldHVybiBzcGVjXG4rXG4rXG4rZGVmIGxpc3RfZmFtaWxpZXMoKTpcbisgICAgXCJcIlwiIFJldHVybiB0aGUgc29ydGVkIG5hbWVzIG9mIGFsbCBmYW1pbGllcyB3aXRoIGFuIGluc3RhbGxlZCBzcGVjLiBcIlwiXCJcbisgICAgcmV0dXJuIHNvcnRlZChmLnJlbW92ZXN1ZmZpeCgnLnlhbWwnKVxuKyAgICAgICAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc3BlY19kaXIoKSkgaWYgZi5lbmRzd2l0aCgnLnlhbWwnKSlcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbmluZGV4IDA5MmQxMzJlZGVjMTJmLi44NjgyYmY1ODhlMWZhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5AQCAtNjYxLDYgKzY2MSwxNCBAQCBjbGFzcyBZbmxGYW1pbHkoU3BlY0ZhbWlseSk6XG4gICAgIFwiXCJcIlxuICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy5cbiBcbisgICAgVGhlIHNwZWMgY2FuIGJlIHNlbGVjdGVkIGVpdGhlciBieSBmaWxlIHBhdGggKGRlZl9wYXRoPSkgb3IsIHdoZW4gaXRcbisgICAgc2hpcHMgaW4gYSB3ZWxsLWtub3duIGxvY2F0aW9uLCBieSBmYW1pbHkgbmFtZSAoZmFtaWx5PVwieHl6XCIpOyBleGFjdGx5XG4rICAgIG9uZSBvZiB0aGUgdHdvIG11c3QgYmUgZ2l2ZW4uIEZvciBleGFtcGxlOlxuK1xuKyAgICAgIGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseVxuK1xuKyAgICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9XCJuZXRkZXZcIilcbitcbiAgICAgUHJpbWFyeSB1c2Ugb2YgdGhlIGNsYXNzIGlzIHRvIGV4ZWN1dGUgTmV0bGluayBjb21tYW5kczpcbiBcbiAgICAgICB5bmwuXHUwMDNjb3BfbmFtZVx1MDAzZShhdHRycywgLi4uKVxuQEAgLTY5MSwxMSArNjk5LDE2IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiBcbiAgICAgICB5bmwuZ2V0X3BvbGljeShvcF9uYW1lLCBtb2RlKSAgICAgIC0tIHF1ZXJ5IGtlcm5lbCBwb2xpY3kgZm9yIGFuIG9wXG4gICAgIFwiXCJcIlxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXG4tICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCk6XG4tICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEpXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZfcGF0aD1Ob25lLCBzY2hlbWE9Tm9uZSwgcHJvY2Vzc191bmtub3duPU5vbmUsXG4rICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCwgZmFtaWx5PU5vbmUpOlxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hLCBmYW1pbHk9ZmFtaWx5KVxuIFxuICAgICAgICAgc2VsZi5pbmNsdWRlX3JhdyA9IEZhbHNlXG4rICAgICAgICAjIFNwZWNzIGZyb20gL3VzciAoc2VsZWN0ZWQgYnkgZmFtaWx5PSkgaGF2ZSBhIGhpZ2hlciBjaGFuY2Ugb2YgYmVpbmdcbisgICAgICAgICMgc3RhbGUsIGRlZmF1bHQgdG8gaWdub3JpbmcgdW5rbm93biBhdHRycy4gSW4tdHJlZSB1c2VycywgYW5kIHVzZXJzXG4rICAgICAgICAjIHdobyBidW5kbGUgdGhlIHNwZWMgbmVlZCB0byBtYWtlIGEgY29uc2Npb3VzIGRlY2lzaW9uLlxuKyAgICAgICAgaWYgcHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4rICAgICAgICAgICAgcHJvY2Vzc191bmtub3duID0gZmFtaWx5IGlzIG5vdCBOb25lXG4gICAgICAgICBzZWxmLnByb2Nlc3NfdW5rbm93biA9IHByb2Nlc3NfdW5rbm93blxuIFxuICAgICAgICAgdHJ5OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weSBiL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weVxuaW5kZXggZGIzYjYyYzY1MmU3N2YuLjBlZTBjOGU4NzY4NmJlIDEwMDc1NVxuLS0tIGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XG4rKysgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcbkBAIC0xMSwxMiArMTEsMTAgQEAgaW1wb3J0IHBhdGhsaWJcbiBpbXBvcnQgcHByaW50XG4gaW1wb3J0IHN5c1xuIGltcG9ydCByZVxuLWltcG9ydCBvc1xuIFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCdweXlubCcpLmFzX3Bvc2l4KCkpXG4gIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yXG4tZnJvbSBjbGkgaW1wb3J0IHNjaGVtYV9kaXIsIHNwZWNfZGlyXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseVxuIFxuIFxuQEAgLTE3MywxMCArMTcxLDcgQEAgZGVmIG1haW4oKTpcbiBcbiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKClcbiBcbi0gICAgc3BlYyA9IG9zLnBhdGguam9pbihzcGVjX2RpcigpLCAnZXRodG9vbC55YW1sJylcbi0gICAgc2NoZW1hID0gb3MucGF0aC5qb2luKHNjaGVtYV9kaXIoKSwgJ2dlbmV0bGluay1sZWdhY3kueWFtbCcpXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBzY2hlbWEsIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxuKyAgICB5bmwgPSBZbmxGYW1pbHkoZmFtaWx5PSdldGh0b29sJywgcmVjdl9zaXplPWFyZ3MuZGJnX3NtYWxsX3JlY3YpXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOS4xMDE4Mzc1MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0MDMxODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBQeXRob24gY29kZSB3aXRoaW4gYHRvb2xzL25ldC95bmwvcHl5bmwvYC4gSSByZWNvZ25pemUgdGhpcyBhcyB0aGUgdXNlci1zcGFjZSBZQU1MIE5ldGxpbmsgbGlicmFyeSAoWU5MKSwgd2hpY2ggbWFrZXMgaXQgY2xlYXIgdGhpcyBpcyBhIHRvb2xpbmcgbGF5ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggTmV0bGluay4gR29vZCwgZ29vZC4gSXQncyBjb25maW5lZCB0byBgdG9vbHMvYCwgd2hpY2ggbWVhbnMgdGhpcyBpcyAqKm5vdCoqIG1vZGlmeWluZyBhbnkgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNvZGUgaXRzZWxmIGlzIHB5dGhvbiBzY3JpcHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdG9vbCBkaXJlY3RvcnkuIFxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYF9faW5pdF9fLnB5YCwgYGNsaS5weWAsIHRoZSBgbGliYCBkaXJlY3RvcnkncyBgX19pbml0X18ucHlgLCBgbmxzcGVjLnB5YCwgYHNwZWNkaXIucHlgLCBgeW5sLnB5YCwgYW5kIGZpbmFsbHkgYSB0ZXN0IGZpbGUsIGBldGh0b29sLnB5YC4gQWxsIGFyZSB3aXRoaW4gdGhhdCBzcGVjaWZpZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gTm8ga2VybmVsIGhlYWRlcnMsIG5vIGtlcm5lbCBtb2R1bGVzLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBrZXJuZWwgZXhlY3V0aW9uLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSB1c2VyLXNwYWNlIGB0b29scy9gIGRpcmVjdG9yeSBhbmQgaXQgaXMgb25seSBtb2RpZmljYXRpb25zIHRvIFB5dGhvbiBzY3JpcHRzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLiBJdCdzIGEgbm9uLWlzc3VlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuXG5cblNvLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIE5vIHJlYXNvbiB0byBldmVuIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMgb3IgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBwdXJlIHVzZXItc3BhY2UgdG9vbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxMCwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA3OjI5OjM1LjQ2NTg3Mjc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiB0b29saW5nIGZvciBOZXRsaW5rIChZTkwpIGluIHRvb2xzL25ldC95bmwvIGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiB0b29saW5nIGZvciBOZXRsaW5rIChZTkwpIGluIHRvb2xzL25ldC95bmwvIGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4tcz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 07:20:03 +0000 UTC FinishedAt: 2026-07-01 07:29:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2EzNzgwZTQzZDZmNzZmNDUwOTNiOWNkNzkwY2FmNjkwMTE0YThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoyOToyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuaW5kZXggZTY5ZGUyOWJiMmQxZDYuLmQ4ZjU5YzEzMmFiN2VlIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxuQEAgLTAsMCAmIzQzOzEsOSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7XCYjMzQ7XCYjMzQ7XCYjMzQ7IFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIFJlLWV4cG9ydCB0aGUgcHVibGljIGxpYnJhcnkgQVBJIHNvIGl0IGNhbiBiZSBpbXBvcnRlZCBzdHJhaWdodCBmcm9tIHRoZVxuJiM0MzsjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXG4mIzQzOyMgcHlsaW50OiBkaXNhYmxlPXdpbGRjYXJkLWltcG9ydCx1bnVzZWQtd2lsZGNhcmQtaW1wb3J0XG4mIzQzO2Zyb20gLmxpYiBpbXBvcnQgKlxuJiM0Mztmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XG5pbmRleCA4Mjc1YTgwNmNmNzNkNi4uYjZhNmNlMTJiNGE3ZjggMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHlcbkBAIC0xNyw5ICYjNDM7MTcsNyBAQCBpbXBvcnQgdGV4dHdyYXBcbiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb25cbiBzeXMucGF0aC5hcHBlbmQocGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50LmFzX3Bvc2l4KCkpXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgU3BlY0ZhbWlseSwgU3BlY0V4Y2VwdGlvbiwgWW5sRXhjZXB0aW9uXG4tXG4tU1lTX1NDSEVNQV9ESVI9JiMzOTsvdXNyL3NoYXJlL3lubCYjMzk7XG4tUkVMQVRJVkVfU0NIRU1BX0RJUj0mIzM5Oy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluayYjMzk7XG4mIzQzO2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXG4gXG4gIyBweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcyx0b28tbWFueS1sb2NhbHNcbiBjbGFzcyBDb2xvcnM6XG5AQCAtNDgsMzAgJiM0Mzs0Niw2IEBAIGRlZiB0ZXJtX3dpZHRoKCk6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBHZXQgdGVybWluYWwgd2lkdGggaW4gY29sdW1ucyAoODAgaWYgc3Rkb3V0IGlzIG5vdCBhIHRlcm1pbmFsKSBcJiMzNDtcJiMzNDtcJiMzNDtcbiAgICAgcmV0dXJuIHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpLmNvbHVtbnNcbiBcbi1kZWYgc2NoZW1hX2RpcigpOlxuLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuLSAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS5cbi0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbi0gICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZlwmIzM0O3tzY3JpcHRfZGlyfS97UkVMQVRJVkVfU0NIRU1BX0RJUn1cJiMzNDspXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbi0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcJiMzNDtTY2hlbWEgZGlyZWN0b3J5IHtzY2hlbWFfZGlyX30gZG9lcyBub3QgZXhpc3RcJiMzNDspXG4tICAgIHJldHVybiBzY2hlbWFfZGlyX1xuLVxuLWRlZiBzcGVjX2RpcigpOlxuLSAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmVcbi0gICAgc2NoZW1hIGRpcmVjdG9yeS5cbi0gICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7XG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNwZWNfZGlyXyk6XG4tICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZlwmIzM0O1NwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuLSAgICByZXR1cm4gc3BlY19kaXJfXG4tXG4tXG4gY2xhc3MgWW5sRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7QSBjdXN0b20gZW5jb2RlciBmb3IgZW1pdHRpbmcgSlNPTiB3aXRoIHlubC1zcGVjaWZpYyBpbnN0YW5jZSB0eXBlc1wmIzM0O1wmIzM0O1wmIzM0O1xuICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKTpcbkBAIC0yNzIsOSAmIzQzOzI0Niw4IEBAIGRlZiBtYWluKCk6XG4gICAgICAgICAgICAgcHByaW50LnBwcmludChtc2csIHdpZHRoPXRlcm1fd2lkdGgoKSwgY29tcGFjdD1UcnVlKVxuIFxuICAgICBpZiBhcmdzLmxpc3RfZmFtaWxpZXM6XG4tICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc29ydGVkKG9zLmxpc3RkaXIoc3BlY19kaXIoKSkpOlxuLSAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCYjMzk7LnlhbWwmIzM5Oyk6XG4tICAgICAgICAgICAgICAgIHByaW50KGZpbGVuYW1lLnJlbW92ZXN1ZmZpeCgmIzM5Oy55YW1sJiMzOTspKVxuJiM0MzsgICAgICAgIGZvciBmYW1pbHkgaW4gbGlzdF9mYW1pbGllcygpOlxuJiM0MzsgICAgICAgICAgICBwcmludChmYW1pbHkpXG4gICAgICAgICByZXR1cm5cbiBcbiAgICAgaWYgYXJncy5ub19zY2hlbWE6XG5AQCAtMjg0LDI4ICYjNDM7MjU3LDIzIEBAIGRlZiBtYWluKCk6XG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxuICAgICAgICAgYXR0cnMgPSBqc29uLmxvYWRzKGFyZ3MuanNvbl90ZXh0KVxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTpcbi0gICAgICAgIHNwZWMgPSBmXCYjMzQ7e3NwZWNfZGlyKCl9L3thcmdzLmZhbWlseX0ueWFtbFwmIzM0O1xuLSAgICBlbHNlOlxuLSAgICAgICAgc3BlYyA9IGFyZ3Muc3BlY1xuLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4tICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZlwmIzM0O1NwZWMgZmlsZSB7c3BlY30gZG9lcyBub3QgZXhpc3RcJiMzNDspXG4mIzQzOyAgICBpZiBhcmdzLnNwZWMgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShhcmdzLnNwZWMpOlxuJiM0MzsgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXCYjMzQ7U3BlYyBmaWxlIHthcmdzLnNwZWN9IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuIFxuJiM0MzsgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXG4gICAgIGlmIGFyZ3MudmFsaWRhdGU6XG4mIzQzOyAgICAgICAgIyBGb3JjZSB2YWxpZGF0aW9uIGV2ZW4gZm9yIGluc3RhbGxlZCBzcGVjcyAoc2NoZW1hPVRydWUpLCB1bmxlc3MgdGhlXG4mIzQzOyAgICAgICAgIyB1c2VyIGV4cGxpY2l0bHkgcGlja2VkIGEgc2NoZW1hIG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tc2NoZW1hLlxuJiM0MzsgICAgICAgIHNjaGVtYSA9IFRydWUgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBlbHNlIGFyZ3Muc2NoZW1hXG4gICAgICAgICB0cnk6XG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcbiYjNDM7ICAgICAgICAgICAgU3BlY0ZhbWlseShhcmdzLnNwZWMsIHNjaGVtYV9wYXRoPXNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5KVxuICAgICAgICAgZXhjZXB0IFNwZWNFeGNlcHRpb24gYXMgZXJyb3I6XG4gICAgICAgICAgICAgcHJpbnQoZXJyb3IpXG4gICAgICAgICAgICAgc3lzLmV4aXQoMSlcbiAgICAgICAgIHJldHVyblxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTogIyBzZXQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgaW5zdGFsbGVkIHNwZWNzXG4tICAgICAgICBpZiBhcmdzLnNjaGVtYSBpcyBOb25lIGFuZCBzcGVjLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxuLSAgICAgICAgICAgIGFyZ3Muc2NoZW1hID0gJiMzOTsmIzM5OyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcbi0gICAgICAgIGlmIGFyZ3MucHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4tICAgICAgICAgICAgYXJncy5wcm9jZXNzX3Vua25vd24gPSBUcnVlXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSwgYXJncy5wcm9jZXNzX3Vua25vd24sXG4mIzQzOyAgICB5bmwgPSBZbmxGYW1pbHkoYXJncy5zcGVjLCBzY2hlbWE9YXJncy5zY2hlbWEsIGZhbWlseT1hcmdzLmZhbWlseSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3Vua25vd249YXJncy5wcm9jZXNzX3Vua25vd24sXG4gICAgICAgICAgICAgICAgICAgICByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcbiAgICAgaWYgYXJncy5kYmdfc21hbGxfcmVjdjpcbiAgICAgICAgIHlubC5zZXRfcmVjdl9kYmcoVHJ1ZSlcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5XG5pbmRleCBiZTc0MTk4NWFlNGVlNy4uYWE0MjYzYzhjYmE5ZWYgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcbkBAIC01LDEyICYjNDM7NSwxMyBAQFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxuICAgICBTcGVjRXhjZXB0aW9uXG4mIzQzO2Zyb20gLnNwZWNkaXIgaW1wb3J0IGxpc3RfZmFtaWxpZXNcbiBmcm9tIC55bmwgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgTmxQb2xpY3ksIFlubEV4Y2VwdGlvblxuIFxuIGZyb20gLmRvY19nZW5lcmF0b3IgaW1wb3J0IFlubERvY0dlbmVyYXRvclxuIFxuIF9fYWxsX18gPSBbXCYjMzQ7U3BlY0F0dHJcJiMzNDssIFwmIzM0O1NwZWNBdHRyU2V0XCYjMzQ7LCBcJiMzNDtTcGVjRW51bUVudHJ5XCYjMzQ7LCBcJiMzNDtTcGVjRW51bVNldFwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1NwZWNGYW1pbHlcJiMzNDssIFwmIzM0O1NwZWNPcGVyYXRpb25cJiMzNDssIFwmIzM0O1NwZWNTdWJNZXNzYWdlXCYjMzQ7LCBcJiMzNDtTcGVjU3ViTWVzc2FnZUZvcm1hdFwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O1NwZWNFeGNlcHRpb25cJiMzNDssXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7U3BlY0V4Y2VwdGlvblwmIzM0OywgXCYjMzQ7bGlzdF9mYW1pbGllc1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubEZhbWlseVwmIzM0OywgXCYjMzQ7TmV0bGlua1wmIzM0OywgXCYjMzQ7TmxFcnJvclwmIzM0OywgXCYjMzQ7TmxQb2xpY3lcJiMzNDssIFwmIzM0O1lubEV4Y2VwdGlvblwmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O1lubERvY0dlbmVyYXRvclwmIzM0O11cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5XG5AQCAtMTIsNiAmIzQzOzEyLDggQEAgaW1wb3J0IGltcG9ydGxpYlxuIGltcG9ydCBvc1xuIGltcG9ydCB5YW1sIGFzIHB5eWFtbFxuIFxuJiM0Mztmcm9tIC5zcGVjZGlyIGltcG9ydCBmaW5kX3NwZWMsIFNZU19TQ0hFTUFfRElSXG4mIzQzO1xuIFxuIGNsYXNzIFNwZWNFeGNlcHRpb24oRXhjZXB0aW9uKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7TmV0bGluayBzcGVjIGV4Y2VwdGlvbi5cbkBAIC00NDQsNyAmIzQzOzQ0NiwyMyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcbiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOlxuICAgICAgICAgX3lhbWxfbG9hZGVyID0gcHl5YW1sLlNhZmVMb2FkZXJcbiBcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aCwgc2NoZW1hX3BhdGg9Tm9uZSwgZXhjbHVkZV9vcHM9Tm9uZSk6XG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoPU5vbmUsIHNjaGVtYV9wYXRoPU5vbmUsIGV4Y2x1ZGVfb3BzPU5vbmUsXG4mIzQzOyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxuJiM0MzsgICAgICAgICMgc2NoZW1hX3BhdGggc2VsZWN0cyBob3cgdGhlIHNwZWMgaXMgdmFsaWRhdGVkOlxuJiM0MzsgICAgICAgICMgICBOb25lICAtLSBubyBwcmVmZXJlbmNlOiB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYSxcbiYjNDM7ICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxuJiM0MzsgICAgICAgICMgICBUcnVlICAtLSBhbHdheXMgdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWFcbiYjNDM7ICAgICAgICAjICAgcGF0aCAgLS0gdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxuJiM0MzsgICAgICAgICMgICAmIzM5OyYjMzk7ICAgIC0tIGRvIG5vdCB2YWxpZGF0ZVxuJiM0MzsgICAgICAgIGlmIChzcGVjX3BhdGggaXMgTm9uZSkgPT0gKGZhbWlseSBpcyBOb25lKTpcbiYjNDM7ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihcJiMzNDtTcGVjaWZ5IGV4YWN0bHkgb25lIG9mIHNwZWMgcGF0aCBvciBmYW1pbHkgbmFtZVwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBmYW1pbHkgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpXG4mIzQzOyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cbiYjNDM7ICAgICAgICAgICAgIyB0byBzYXZlIGN5Y2xlcyB1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCB0byB2YWxpZGF0ZS5cbiYjNDM7ICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxuJiM0MzsgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAmIzM5OyYjMzk7XG4mIzQzO1xuICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgXCYjMzQ7clwmIzM0OywgZW5jb2Rpbmc9JiMzOTt1dGYtOCYjMzk7KSBhcyBzdHJlYW06XG4gICAgICAgICAgICAgcHJlZml4ID0gJiMzOTsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAmIzM5O1xuICAgICAgICAgICAgIGZpcnN0ID0gc3RyZWFtLnJlYWRsaW5lKCkuc3RyaXAoKVxuQEAgLTQ2NSw3ICYjNDM7NDgzLDcgQEAgY2xhc3MgU3BlY0ZhbWlseShTcGVjRWxlbWVudCk6XG4gICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgmIzM5O3Byb3RvY29sJiMzOTssICYjMzk7Z2VuZXRsaW5rJiMzOTspXG4gICAgICAgICBzZWxmLm1zZ19pZF9tb2RlbCA9IHNlbGYueWFtbFsmIzM5O29wZXJhdGlvbnMmIzM5O10uZ2V0KCYjMzk7ZW51bS1tb2RlbCYjMzk7LCAmIzM5O3VuaWZpZWQmIzM5OylcbiBcbi0gICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBvciBzY2hlbWFfcGF0aCBpcyBUcnVlOlxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSAmIzQzOyBmJiMzOTsve3NlbGYucHJvdG99LnlhbWwmIzM5O1xuICAgICAgICAgaWYgc2NoZW1hX3BhdGg6XG4gICAgICAgICAgICAgd2l0aCBvcGVuKHNjaGVtYV9wYXRoLCBcJiMzNDtyXCYjMzQ7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIHN0cmVhbTpcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mY2VhOWI5ZmI3YjA0M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxuQEAgLTAsMCAmIzQzOzEsNTEgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzO1wmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztMb2NhdGluZyBZTkwgc3BlYyBhbmQgc2NoZW1hIGZpbGVzIG9uIGRpc2suXG4mIzQzO1xuJiM0MztSZXNvbHZlcyB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIFlBTUwgc3BlY3MgKHByZWZlcnJpbmcgYW4gaW4tdHJlZSBjb3B5XG4mIzQzO292ZXIgdGhlIGluc3RhbGxlZCBzeXN0ZW0gcGF0aCkgYW5kIG1hcHMgZmFtaWx5IG5hbWVzIHRvIHNwZWMgZmlsZXMuXG4mIzQzO1wmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7aW1wb3J0IG9zXG4mIzQzO1xuJiM0MztTWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTtcbiYjNDM7UkVMQVRJVkVfU0NIRU1BX0RJUj0mIzM5Oy4uLy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluayYjMzk7XG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIHNjaGVtYV9kaXIoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuJiM0MzsgICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbiYjNDM7ICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcJiMzNDt7c2NyaXB0X2Rpcn0ve1JFTEFUSVZFX1NDSEVNQV9ESVJ9XCYjMzQ7KVxuJiM0MzsgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuJiM0MzsgICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbiYjNDM7ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbiYjNDM7ICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXCYjMzQ7U2NoZW1hIGRpcmVjdG9yeSB7c2NoZW1hX2Rpcl99IGRvZXMgbm90IGV4aXN0XCYjMzQ7KVxuJiM0MzsgICAgcmV0dXJuIHNjaGVtYV9kaXJfXG4mIzQzO1xuJiM0MztkZWYgc3BlY19kaXIoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmVcbiYjNDM7ICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7XG4mIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuJiM0MzsgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcJiMzNDtTcGVjIGRpcmVjdG9yeSB7c3BlY19kaXJffSBkb2VzIG5vdCBleGlzdFwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBzcGVjX2Rpcl9cbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgZmluZF9zcGVjKGZhbWlseSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBZQU1MIHNwZWMgZmlsZSBmb3IgYSBmYW1pbHkgYnkgbmFtZS4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBzcGVjID0gZlwmIzM0O3tzcGVjX2RpcigpfS97ZmFtaWx5fS55YW1sXCYjMzQ7XG4mIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4mIzQzOyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZlwmIzM0O1NwZWMgZm9yIGZhbWlseSAmIzM5O3tmYW1pbHl9JiMzOTsgbm90IGZvdW5kIGF0IHtzcGVjfVwmIzM0OylcbiYjNDM7ICAgIHJldHVybiBzcGVjXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGxpc3RfZmFtaWxpZXMoKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBSZXR1cm4gdGhlIHNvcnRlZCBuYW1lcyBvZiBhbGwgZmFtaWxpZXMgd2l0aCBhbiBpbnN0YWxsZWQgc3BlYy4gXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICByZXR1cm4gc29ydGVkKGYucmVtb3Zlc3VmZml4KCYjMzk7LnlhbWwmIzM5OylcbiYjNDM7ICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzcGVjX2RpcigpKSBpZiBmLmVuZHN3aXRoKCYjMzk7LnlhbWwmIzM5OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5pbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuQEAgLTY2MSw2ICYjNDM7NjYxLDE0IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIFlOTCBmYW1pbHkgLS0gYSBOZXRsaW5rIGludGVyZmFjZSBidWlsdCBmcm9tIGEgWUFNTCBzcGVjLlxuIFxuJiM0MzsgICAgVGhlIHNwZWMgY2FuIGJlIHNlbGVjdGVkIGVpdGhlciBieSBmaWxlIHBhdGggKGRlZl9wYXRoPSkgb3IsIHdoZW4gaXRcbiYjNDM7ICAgIHNoaXBzIGluIGEgd2VsbC1rbm93biBsb2NhdGlvbiwgYnkgZmFtaWx5IG5hbWUgKGZhbWlseT1cJiMzNDt4eXpcJiMzNDspOyBleGFjdGx5XG4mIzQzOyAgICBvbmUgb2YgdGhlIHR3byBtdXN0IGJlIGdpdmVuLiBGb3IgZXhhbXBsZTpcbiYjNDM7XG4mIzQzOyAgICAgIGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseVxuJiM0MztcbiYjNDM7ICAgICAgeW5sID0gWW5sRmFtaWx5KGZhbWlseT1cJiMzNDtuZXRkZXZcJiMzNDspXG4mIzQzO1xuICAgICBQcmltYXJ5IHVzZSBvZiB0aGUgY2xhc3MgaXMgdG8gZXhlY3V0ZSBOZXRsaW5rIGNvbW1hbmRzOlxuIFxuICAgICAgIHlubC5cdTAwM2NvcF9uYW1lXHUwMDNlKGF0dHJzLCAuLi4pXG5AQCAtNjkxLDExICYjNDM7Njk5LDE2IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiBcbiAgICAgICB5bmwuZ2V0X3BvbGljeShvcF9uYW1lLCBtb2RlKSAgICAgIC0tIHF1ZXJ5IGtlcm5lbCBwb2xpY3kgZm9yIGFuIG9wXG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXG4tICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCk6XG4tICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEpXG4mIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGg9Tm9uZSwgc2NoZW1hPU5vbmUsIHByb2Nlc3NfdW5rbm93bj1Ob25lLFxuJiM0MzsgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT0wLCBmYW1pbHk9Tm9uZSk6XG4mIzQzOyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hLCBmYW1pbHk9ZmFtaWx5KVxuIFxuICAgICAgICAgc2VsZi5pbmNsdWRlX3JhdyA9IEZhbHNlXG4mIzQzOyAgICAgICAgIyBTcGVjcyBmcm9tIC91c3IgKHNlbGVjdGVkIGJ5IGZhbWlseT0pIGhhdmUgYSBoaWdoZXIgY2hhbmNlIG9mIGJlaW5nXG4mIzQzOyAgICAgICAgIyBzdGFsZSwgZGVmYXVsdCB0byBpZ25vcmluZyB1bmtub3duIGF0dHJzLiBJbi10cmVlIHVzZXJzLCBhbmQgdXNlcnNcbiYjNDM7ICAgICAgICAjIHdobyBidW5kbGUgdGhlIHNwZWMgbmVlZCB0byBtYWtlIGEgY29uc2Npb3VzIGRlY2lzaW9uLlxuJiM0MzsgICAgICAgIGlmIHByb2Nlc3NfdW5rbm93biBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBwcm9jZXNzX3Vua25vd24gPSBmYW1pbHkgaXMgbm90IE5vbmVcbiAgICAgICAgIHNlbGYucHJvY2Vzc191bmtub3duID0gcHJvY2Vzc191bmtub3duXG4gXG4gICAgICAgICB0cnk6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5IGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XG5pbmRleCBkYjNiNjJjNjUyZTc3Zi4uMGVlMGM4ZTg3Njg2YmUgMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weVxuQEAgLTExLDEyICYjNDM7MTEsMTAgQEAgaW1wb3J0IHBhdGhsaWJcbiBpbXBvcnQgcHByaW50XG4gaW1wb3J0IHN5c1xuIGltcG9ydCByZVxuLWltcG9ydCBvc1xuIFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCYjMzk7cHl5bmwmIzM5OykuYXNfcG9zaXgoKSlcbiAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3Jcbi1mcm9tIGNsaSBpbXBvcnQgc2NoZW1hX2Rpciwgc3BlY19kaXJcbiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5XG4gXG4gXG5AQCAtMTczLDEwICYjNDM7MTcxLDcgQEAgZGVmIG1haW4oKTpcbiBcbiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKClcbiBcbi0gICAgc3BlYyA9IG9zLnBhdGguam9pbihzcGVjX2RpcigpLCAmIzM5O2V0aHRvb2wueWFtbCYjMzk7KVxuLSAgICBzY2hlbWEgPSBvcy5wYXRoLmpvaW4oc2NoZW1hX2RpcigpLCAmIzM5O2dlbmV0bGluay1sZWdhY3kueWFtbCYjMzk7KVxuLVxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgc2NoZW1hLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcbiYjNDM7ICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9JiMzOTtldGh0b29sJiMzOTssIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxuICAgICBpZiBhcmdzLmRiZ19zbWFsbF9yZWN2OlxuICAgICAgICAgeW5sLnNldF9yZWN2X2RiZyhUcnVlKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA3OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA3OjI5OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHkKaW5kZXggZTY5ZGUyOWJiMmQxZDYuLmQ4ZjU5YzEzMmFiN2VlIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHkKQEAgLTAsMCAmIzQzOzEsOSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCiYjNDM7CiYjNDM7JiMzNDsmIzM0OyYjMzQ7IFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7IyBSZS1leHBvcnQgdGhlIHB1YmxpYyBsaWJyYXJ5IEFQSSBzbyBpdCBjYW4gYmUgaW1wb3J0ZWQgc3RyYWlnaHQgZnJvbSB0aGUKJiM0MzsjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuCiYjNDM7IyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0LHVudXNlZC13aWxkY2FyZC1pbXBvcnQKJiM0Mztmcm9tIC5saWIgaW1wb3J0ICoKJiM0Mztmcm9tIC5saWIgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHkKaW5kZXggODI3NWE4MDZjZjczZDYuLmI2YTZjZTEyYjRhN2Y4IDEwMDc1NQotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weQpAQCAtMTcsOSAmIzQzOzE3LDcgQEAgaW1wb3J0IHRleHR3cmFwCiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb24KIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQuYXNfcG9zaXgoKSkKIGZyb20gbGliIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIFNwZWNGYW1pbHksIFNwZWNFeGNlcHRpb24sIFlubEV4Y2VwdGlvbgotCi1TWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTsKLVJFTEFUSVZFX1NDSEVNQV9ESVI9JiMzOTsuLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsmIzM5OwomIzQzO2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzCiAKICMgcHlsaW50OiBkaXNhYmxlPXRvby1mZXctcHVibGljLW1ldGhvZHMsdG9vLW1hbnktbG9jYWxzCiBjbGFzcyBDb2xvcnM6CkBAIC00OCwzMCAmIzQzOzQ2LDYgQEAgZGVmIHRlcm1fd2lkdGgoKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgR2V0IHRlcm1pbmFsIHdpZHRoIGluIGNvbHVtbnMgKDgwIGlmIHN0ZG91dCBpcyBub3QgYSB0ZXJtaW5hbCkgJiMzNDsmIzM0OyYjMzQ7CiAgICAgcmV0dXJuIHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpLmNvbHVtbnMKIAotZGVmIHNjaGVtYV9kaXIoKToKLSAgICAmIzM0OyYjMzQ7JiMzNDsKLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzY2hlbWEgZGlyZWN0b3J5LCBwcmVmZXJyaW5nIGluLXRyZWUgYmVmb3JlCi0gICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuCi0gICAgJiMzNDsmIzM0OyYjMzQ7Ci0gICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQotICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGYmIzM0O3tzY3JpcHRfZGlyfS97UkVMQVRJVkVfU0NIRU1BX0RJUn0mIzM0OykKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6Ci0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6Ci0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmJiMzNDtTY2hlbWEgZGlyZWN0b3J5IHtzY2hlbWFfZGlyX30gZG9lcyBub3QgZXhpc3QmIzM0OykKLSAgICByZXR1cm4gc2NoZW1hX2Rpcl8KLQotZGVmIHNwZWNfZGlyKCk6Ci0gICAgJiMzNDsmIzM0OyYjMzQ7Ci0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc3BlYyBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBlZmZlY3RpdmUKLSAgICBzY2hlbWEgZGlyZWN0b3J5LgotICAgICYjMzQ7JiMzNDsmIzM0OwotICAgIHNwZWNfZGlyXyA9IHNjaGVtYV9kaXIoKSAmIzQzOyAmIzM5Oy9zcGVjcyYjMzk7Ci0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3BlY19kaXJfKToKLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGYmIzM0O1NwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0JiMzNDspCi0gICAgcmV0dXJuIHNwZWNfZGlyXwotCi0KIGNsYXNzIFlubEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6CiAgICAgJiMzNDsmIzM0OyYjMzQ7QSBjdXN0b20gZW5jb2RlciBmb3IgZW1pdHRpbmcgSlNPTiB3aXRoIHlubC1zcGVjaWZpYyBpbnN0YW5jZSB0eXBlcyYjMzQ7JiMzNDsmIzM0OwogICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgpAQCAtMjcyLDkgJiM0MzsyNDYsOCBAQCBkZWYgbWFpbigpOgogICAgICAgICAgICAgcHByaW50LnBwcmludChtc2csIHdpZHRoPXRlcm1fd2lkdGgoKSwgY29tcGFjdD1UcnVlKQogCiAgICAgaWYgYXJncy5saXN0X2ZhbWlsaWVzOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc29ydGVkKG9zLmxpc3RkaXIoc3BlY19kaXIoKSkpOgotICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJiMzOTsueWFtbCYjMzk7KToKLSAgICAgICAgICAgICAgICBwcmludChmaWxlbmFtZS5yZW1vdmVzdWZmaXgoJiMzOTsueWFtbCYjMzk7KSkKJiM0MzsgICAgICAgIGZvciBmYW1pbHkgaW4gbGlzdF9mYW1pbGllcygpOgomIzQzOyAgICAgICAgICAgIHByaW50KGZhbWlseSkKICAgICAgICAgcmV0dXJuCiAKICAgICBpZiBhcmdzLm5vX3NjaGVtYToKQEAgLTI4NCwyOCAmIzQzOzI1NywyMyBAQCBkZWYgbWFpbigpOgogICAgIGlmIGFyZ3MuanNvbl90ZXh0OgogICAgICAgICBhdHRycyA9IGpzb24ubG9hZHMoYXJncy5qc29uX3RleHQpCiAKLSAgICBpZiBhcmdzLmZhbWlseToKLSAgICAgICAgc3BlYyA9IGYmIzM0O3tzcGVjX2RpcigpfS97YXJncy5mYW1pbHl9LnlhbWwmIzM0OwotICAgIGVsc2U6Ci0gICAgICAgIHNwZWMgPSBhcmdzLnNwZWMKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6Ci0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmJiMzNDtTcGVjIGZpbGUge3NwZWN9IGRvZXMgbm90IGV4aXN0JiMzNDspCiYjNDM7ICAgIGlmIGFyZ3Muc3BlYyBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGFyZ3Muc3BlYyk6CiYjNDM7ICAgICAgICByYWlzZSBZbmxFeGNlcHRpb24oZiYjMzQ7U3BlYyBmaWxlIHthcmdzLnNwZWN9IGRvZXMgbm90IGV4aXN0JiMzNDspCiAKJiM0MzsgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuCiAgICAgaWYgYXJncy52YWxpZGF0ZToKJiM0MzsgICAgICAgICMgRm9yY2UgdmFsaWRhdGlvbiBldmVuIGZvciBpbnN0YWxsZWQgc3BlY3MgKHNjaGVtYT1UcnVlKSwgdW5sZXNzIHRoZQomIzQzOyAgICAgICAgIyB1c2VyIGV4cGxpY2l0bHkgcGlja2VkIGEgc2NoZW1hIG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tc2NoZW1hLgomIzQzOyAgICAgICAgc2NoZW1hID0gVHJ1ZSBpZiBhcmdzLnNjaGVtYSBpcyBOb25lIGVsc2UgYXJncy5zY2hlbWEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSkKJiM0MzsgICAgICAgICAgICBTcGVjRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hX3BhdGg9c2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHkpCiAgICAgICAgIGV4Y2VwdCBTcGVjRXhjZXB0aW9uIGFzIGVycm9yOgogICAgICAgICAgICAgcHJpbnQoZXJyb3IpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgICAgICByZXR1cm4KIAotICAgIGlmIGFyZ3MuZmFtaWx5OiAjIHNldCBiZWhhdmlvdXIgd2hlbiB1c2luZyBpbnN0YWxsZWQgc3BlY3MKLSAgICAgICAgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBhbmQgc3BlYy5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKToKLSAgICAgICAgICAgIGFyZ3Muc2NoZW1hID0gJiMzOTsmIzM5OyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWQKLSAgICAgICAgaWYgYXJncy5wcm9jZXNzX3Vua25vd24gaXMgTm9uZToKLSAgICAgICAgICAgIGFyZ3MucHJvY2Vzc191bmtub3duID0gVHJ1ZQotCi0gICAgeW5sID0gWW5sRmFtaWx5KHNwZWMsIGFyZ3Muc2NoZW1hLCBhcmdzLnByb2Nlc3NfdW5rbm93biwKJiM0MzsgICAgeW5sID0gWW5sRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hPWFyZ3Muc2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHksCiYjNDM7ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3Vua25vd249YXJncy5wcm9jZXNzX3Vua25vd24sCiAgICAgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KQogICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6CiAgICAgICAgIHlubC5zZXRfcmVjdl9kYmcoVHJ1ZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHkKaW5kZXggYmU3NDE5ODVhZTRlZTcuLmFhNDI2M2M4Y2JhOWVmIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weQpAQCAtNSwxMiAmIzQzOzUsMTMgQEAKIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXAogICAgIFNwZWNGYW1pbHksIFNwZWNPcGVyYXRpb24sIFNwZWNTdWJNZXNzYWdlLCBTcGVjU3ViTWVzc2FnZUZvcm1hdCwgXAogICAgIFNwZWNFeGNlcHRpb24KJiM0Mztmcm9tIC5zcGVjZGlyIGltcG9ydCBsaXN0X2ZhbWlsaWVzCiBmcm9tIC55bmwgaW1wb3J0IFlubEZhbWlseSwgTmV0bGluaywgTmxFcnJvciwgTmxQb2xpY3ksIFlubEV4Y2VwdGlvbgogCiBmcm9tIC5kb2NfZ2VuZXJhdG9yIGltcG9ydCBZbmxEb2NHZW5lcmF0b3IKIAogX19hbGxfXyA9IFsmIzM0O1NwZWNBdHRyJiMzNDssICYjMzQ7U3BlY0F0dHJTZXQmIzM0OywgJiMzNDtTcGVjRW51bUVudHJ5JiMzNDssICYjMzQ7U3BlY0VudW1TZXQmIzM0OywKICAgICAgICAgICAgJiMzNDtTcGVjRmFtaWx5JiMzNDssICYjMzQ7U3BlY09wZXJhdGlvbiYjMzQ7LCAmIzM0O1NwZWNTdWJNZXNzYWdlJiMzNDssICYjMzQ7U3BlY1N1Yk1lc3NhZ2VGb3JtYXQmIzM0OywKLSAgICAgICAgICAgJiMzNDtTcGVjRXhjZXB0aW9uJiMzNDssCiYjNDM7ICAgICAgICAgICAmIzM0O1NwZWNFeGNlcHRpb24mIzM0OywgJiMzNDtsaXN0X2ZhbWlsaWVzJiMzNDssCiAgICAgICAgICAgICYjMzQ7WW5sRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7LCAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O1lubEV4Y2VwdGlvbiYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubERvY0dlbmVyYXRvciYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5CmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDQKLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weQpAQCAtMTIsNiAmIzQzOzEyLDggQEAgaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgeWFtbCBhcyBweXlhbWwKIAomIzQzO2Zyb20gLnNwZWNkaXIgaW1wb3J0IGZpbmRfc3BlYywgU1lTX1NDSEVNQV9ESVIKJiM0MzsKIAogY2xhc3MgU3BlY0V4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgICYjMzQ7JiMzNDsmIzM0O05ldGxpbmsgc3BlYyBleGNlcHRpb24uCkBAIC00NDQsNyAmIzQzOzQ0NiwyMyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KToKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIF95YW1sX2xvYWRlciA9IHB5eWFtbC5TYWZlTG9hZGVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lKToKJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aD1Ob25lLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOgomIzQzOyAgICAgICAgIyBzY2hlbWFfcGF0aCBzZWxlY3RzIGhvdyB0aGUgc3BlYyBpcyB2YWxpZGF0ZWQ6CiYjNDM7ICAgICAgICAjICAgTm9uZSAgLS0gbm8gcHJlZmVyZW5jZTogdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWEsCiYjNDM7ICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PQomIzQzOyAgICAgICAgIyAgIFRydWUgIC0tIGFsd2F5cyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYQomIzQzOyAgICAgICAgIyAgIHBhdGggIC0tIHZhbGlkYXRlIGFnYWluc3QgdGhpcyBzY2hlbWEKJiM0MzsgICAgICAgICMgICAmIzM5OyYjMzk7ICAgIC0tIGRvIG5vdCB2YWxpZGF0ZQomIzQzOyAgICAgICAgaWYgKHNwZWNfcGF0aCBpcyBOb25lKSA9PSAoZmFtaWx5IGlzIE5vbmUpOgomIzQzOyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJiMzNDtTcGVjaWZ5IGV4YWN0bHkgb25lIG9mIHNwZWMgcGF0aCBvciBmYW1pbHkgbmFtZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgZmFtaWx5IGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpCiYjNDM7ICAgICAgICAgICAgIyBJbnN0YWxsZWQgc3BlY3MgYXJlIGFzc3VtZWQgY29ycmVjdCwgc28gc2tpcCBzY2hlbWEgdmFsaWRhdGlvbgomIzQzOyAgICAgICAgICAgICMgdG8gc2F2ZSBjeWNsZXMgdW5sZXNzIHRoZSBjYWxsZXIgYXNrZWQgdG8gdmFsaWRhdGUuCiYjNDM7ICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOgomIzQzOyAgICAgICAgICAgICAgICBzY2hlbWFfcGF0aCA9ICYjMzk7JiMzOTsKJiM0MzsKICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgJiMzNDtyJiMzNDssIGVuY29kaW5nPSYjMzk7dXRmLTgmIzM5OykgYXMgc3RyZWFtOgogICAgICAgICAgICAgcHJlZml4ID0gJiMzOTsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAmIzM5OwogICAgICAgICAgICAgZmlyc3QgPSBzdHJlYW0ucmVhZGxpbmUoKS5zdHJpcCgpCkBAIC00NjUsNyAmIzQzOzQ4Myw3IEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOgogICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgmIzM5O3Byb3RvY29sJiMzOTssICYjMzk7Z2VuZXRsaW5rJiMzOTspCiAgICAgICAgIHNlbGYubXNnX2lkX21vZGVsID0gc2VsZi55YW1sWyYjMzk7b3BlcmF0aW9ucyYjMzk7XS5nZXQoJiMzOTtlbnVtLW1vZGVsJiMzOTssICYjMzk7dW5pZmllZCYjMzk7KQogCi0gICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmU6CiYjNDM7ICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lIG9yIHNjaGVtYV9wYXRoIGlzIFRydWU6CiAgICAgICAgICAgICBzY2hlbWFfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoc3BlY19wYXRoKSkgJiM0MzsgZiYjMzk7L3tzZWxmLnByb3RvfS55YW1sJiMzOTsKICAgICAgICAgaWYgc2NoZW1hX3BhdGg6CiAgICAgICAgICAgICB3aXRoIG9wZW4oc2NoZW1hX3BhdGgsICYjMzQ7ciYjMzQ7LCBlbmNvZGluZz0mIzM5O3V0Zi04JiMzOTspIGFzIHN0cmVhbToKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mY2VhOWI5ZmI3YjA0MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkKQEAgLTAsMCAmIzQzOzEsNTEgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQomIzQzOwomIzQzOyYjMzQ7JiMzNDsmIzM0OwomIzQzO0xvY2F0aW5nIFlOTCBzcGVjIGFuZCBzY2hlbWEgZmlsZXMgb24gZGlzay4KJiM0MzsKJiM0MztSZXNvbHZlcyB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIFlBTUwgc3BlY3MgKHByZWZlcnJpbmcgYW4gaW4tdHJlZSBjb3B5CiYjNDM7b3ZlciB0aGUgaW5zdGFsbGVkIHN5c3RlbSBwYXRoKSBhbmQgbWFwcyBmYW1pbHkgbmFtZXMgdG8gc3BlYyBmaWxlcy4KJiM0MzsmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MztpbXBvcnQgb3MKJiM0MzsKJiM0MztTWVNfU0NIRU1BX0RJUj0mIzM5Oy91c3Ivc2hhcmUveW5sJiMzOTsKJiM0MztSRUxBVElWRV9TQ0hFTUFfRElSPSYjMzk7Li4vLi4vLi4vLi4vLi4vRG9jdW1lbnRhdGlvbi9uZXRsaW5rJiMzOTsKJiM0MzsKJiM0MzsKJiM0MztkZWYgc2NoZW1hX2RpcigpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZQomIzQzOyAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKJiM0MzsgICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZiYjMzQ7e3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfSYjMzQ7KQomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6CiYjNDM7ICAgICAgICBzY2hlbWFfZGlyXyA9IFNZU19TQ0hFTUFfRElSCiYjNDM7ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKToKJiM0MzsgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGYmIzM0O1NjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdCYjMzQ7KQomIzQzOyAgICByZXR1cm4gc2NoZW1hX2Rpcl8KJiM0MzsKJiM0MztkZWYgc3BlY19kaXIoKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlCiYjNDM7ICAgIHNjaGVtYSBkaXJlY3RvcnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgJiM0MzsgJiMzOTsvc3BlY3MmIzM5OwomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOgomIzQzOyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZiYjMzQ7U3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3QmIzM0OykKJiM0MzsgICAgcmV0dXJuIHNwZWNfZGlyXwomIzQzOwomIzQzOwomIzQzO2RlZiBmaW5kX3NwZWMoZmFtaWx5KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFJldHVybiB0aGUgcGF0aCB0byB0aGUgWUFNTCBzcGVjIGZpbGUgZm9yIGEgZmFtaWx5IGJ5IG5hbWUuICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBzcGVjID0gZiYjMzQ7e3NwZWNfZGlyKCl9L3tmYW1pbHl9LnlhbWwmIzM0OwomIzQzOyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6CiYjNDM7ICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmJiMzNDtTcGVjIGZvciBmYW1pbHkgJiMzOTt7ZmFtaWx5fSYjMzk7IG5vdCBmb3VuZCBhdCB7c3BlY30mIzM0OykKJiM0MzsgICAgcmV0dXJuIHNwZWMKJiM0MzsKJiM0MzsKJiM0MztkZWYgbGlzdF9mYW1pbGllcygpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsgUmV0dXJuIHRoZSBzb3J0ZWQgbmFtZXMgb2YgYWxsIGZhbWlsaWVzIHdpdGggYW4gaW5zdGFsbGVkIHNwZWMuICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICByZXR1cm4gc29ydGVkKGYucmVtb3Zlc3VmZml4KCYjMzk7LnlhbWwmIzM5OykKJiM0MzsgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKHNwZWNfZGlyKCkpIGlmIGYuZW5kc3dpdGgoJiMzOTsueWFtbCYjMzk7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQppbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKQEAgLTY2MSw2ICYjNDM7NjYxLDE0IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KToKICAgICAmIzM0OyYjMzQ7JiMzNDsKICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy4KIAomIzQzOyAgICBUaGUgc3BlYyBjYW4gYmUgc2VsZWN0ZWQgZWl0aGVyIGJ5IGZpbGUgcGF0aCAoZGVmX3BhdGg9KSBvciwgd2hlbiBpdAomIzQzOyAgICBzaGlwcyBpbiBhIHdlbGwta25vd24gbG9jYXRpb24sIGJ5IGZhbWlseSBuYW1lIChmYW1pbHk9JiMzNDt4eXomIzM0Oyk7IGV4YWN0bHkKJiM0MzsgICAgb25lIG9mIHRoZSB0d28gbXVzdCBiZSBnaXZlbi4gRm9yIGV4YW1wbGU6CiYjNDM7CiYjNDM7ICAgICAgZnJvbSBweXlubCBpbXBvcnQgWW5sRmFtaWx5CiYjNDM7CiYjNDM7ICAgICAgeW5sID0gWW5sRmFtaWx5KGZhbWlseT0mIzM0O25ldGRldiYjMzQ7KQomIzQzOwogICAgIFByaW1hcnkgdXNlIG9mIHRoZSBjbGFzcyBpcyB0byBleGVjdXRlIE5ldGxpbmsgY29tbWFuZHM6CiAKICAgICAgIHlubC4mbHQ7b3BfbmFtZSZndDsoYXR0cnMsIC4uLikKQEAgLTY5MSwxMSAmIzQzOzY5OSwxNiBAQCBjbGFzcyBZbmxGYW1pbHkoU3BlY0ZhbWlseSk6CiAKICAgICAgIHlubC5nZXRfcG9saWN5KG9wX25hbWUsIG1vZGUpICAgICAgLS0gcXVlcnkga2VybmVsIHBvbGljeSBmb3IgYW4gb3AKICAgICAmIzM0OyYjMzQ7JiMzNDsKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsCi0gICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT0wKToKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hKQomIzQzOyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGg9Tm9uZSwgc2NoZW1hPU5vbmUsIHByb2Nlc3NfdW5rbm93bj1Ob25lLAomIzQzOyAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTAsIGZhbWlseT1Ob25lKToKJiM0MzsgICAgICAgIHN1cGVyKCkuX19pbml0X18oZGVmX3BhdGgsIHNjaGVtYSwgZmFtaWx5PWZhbWlseSkKIAogICAgICAgICBzZWxmLmluY2x1ZGVfcmF3ID0gRmFsc2UKJiM0MzsgICAgICAgICMgU3BlY3MgZnJvbSAvdXNyIChzZWxlY3RlZCBieSBmYW1pbHk9KSBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBiZWluZwomIzQzOyAgICAgICAgIyBzdGFsZSwgZGVmYXVsdCB0byBpZ25vcmluZyB1bmtub3duIGF0dHJzLiBJbi10cmVlIHVzZXJzLCBhbmQgdXNlcnMKJiM0MzsgICAgICAgICMgd2hvIGJ1bmRsZSB0aGUgc3BlYyBuZWVkIHRvIG1ha2UgYSBjb25zY2lvdXMgZGVjaXNpb24uCiYjNDM7ICAgICAgICBpZiBwcm9jZXNzX3Vua25vd24gaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBwcm9jZXNzX3Vua25vd24gPSBmYW1pbHkgaXMgbm90IE5vbmUKICAgICAgICAgc2VsZi5wcm9jZXNzX3Vua25vd24gPSBwcm9jZXNzX3Vua25vd24KIAogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkKaW5kZXggZGIzYjYyYzY1MmU3N2YuLjBlZTBjOGU4NzY4NmJlIDEwMDc1NQotLS0gYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5CkBAIC0xMSwxMiAmIzQzOzExLDEwIEBAIGltcG9ydCBwYXRobGliCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKLWltcG9ydCBvcwogCiAjIHB5bGludDogZGlzYWJsZT1uby1uYW1lLWluLW1vZHVsZSx3cm9uZy1pbXBvcnQtcG9zaXRpb24KIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCYjMzk7cHl5bmwmIzM5OykuYXNfcG9zaXgoKSkKICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgotZnJvbSBjbGkgaW1wb3J0IHNjaGVtYV9kaXIsIHNwZWNfZGlyCiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5CiAKIApAQCAtMTczLDEwICYjNDM7MTcxLDcgQEAgZGVmIG1haW4oKToKIAogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKLSAgICBzcGVjID0gb3MucGF0aC5qb2luKHNwZWNfZGlyKCksICYjMzk7ZXRodG9vbC55YW1sJiMzOTspCi0gICAgc2NoZW1hID0gb3MucGF0aC5qb2luKHNjaGVtYV9kaXIoKSwgJiMzOTtnZW5ldGxpbmstbGVnYWN5LnlhbWwmIzM5OykKLQotICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBzY2hlbWEsIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KQomIzQzOyAgICB5bmwgPSBZbmxGYW1pbHkoZmFtaWx5PSYjMzk7ZXRodG9vbCYjMzk7LCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdikKICAgICBpZiBhcmdzLmRiZ19zbWFsbF9yZWN2OgogICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMAoJCQkJCQkJb3V0cHV0OiA2MwoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogTmVnYXRpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBQeXRob24gY29kZSB3aXRoaW4gYHRvb2xzL25ldC95bmwvcHl5bmwvYC4gSSByZWNvZ25pemUgdGhpcyBhcyB0aGUgdXNlci1zcGFjZSBZQU1MIE5ldGxpbmsgbGlicmFyeSAoWU5MKSwgd2hpY2ggbWFrZXMgaXQgY2xlYXIgdGhpcyBpcyBhIHRvb2xpbmcgbGF5ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggTmV0bGluay4gR29vZCwgZ29vZC4gSXQmIzM5O3MgY29uZmluZWQgdG8gYHRvb2xzL2AsIHdoaWNoIG1lYW5zIHRoaXMgaXMgKipub3QqKiBtb2RpZnlpbmcgYW55IGNvcmUga2VybmVsIGNvZGUsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBjb2RlIGl0c2VsZiBpcyBweXRob24gc2NyaXB0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIHRvb2wgZGlyZWN0b3J5LiAKCkxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgX19pbml0X18ucHlgLCBgY2xpLnB5YCwgdGhlIGBsaWJgIGRpcmVjdG9yeSYjMzk7cyBgX19pbml0X18ucHlgLCBgbmxzcGVjLnB5YCwgYHNwZWNkaXIucHlgLCBgeW5sLnB5YCwgYW5kIGZpbmFsbHkgYSB0ZXN0IGZpbGUsIGBldGh0b29sLnB5YC4gQWxsIGFyZSB3aXRoaW4gdGhhdCBzcGVjaWZpZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gTm8ga2VybmVsIGhlYWRlcnMsIG5vIGtlcm5lbCBtb2R1bGVzLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBrZXJuZWwgZXhlY3V0aW9uLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgdXNlci1zcGFjZSBgdG9vbHMvYCBkaXJlY3RvcnkgYW5kIGl0IGlzIG9ubHkgbW9kaWZpY2F0aW9ucyB0byBQeXRob24gc2NyaXB0cywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGZ1enppbmcgdGhlIGtlcm5lbC4gSXQmIzM5O3MgYSBub24taXNzdWUgZnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludC4KClNvLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIE5vIHJlYXNvbiB0byBldmVuIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMgb3IgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBwdXJlIHVzZXItc3BhY2UgdG9vbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gdG9vbGluZyBmb3IgTmV0bGluayAoWU5MKSBpbiB0b29scy9uZXQveW5sLyBhbmQgZG9lcyBub3QgY2hhbmdlIGFueSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOC41MTgyNjUwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ3NjQ5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHRvb2xpbmcgZm9yIE5ldGxpbmsgKFlOTCkgaW4gdG9vbHMvbmV0L3lubC8gYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOC41MTgyNzQyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mjc2Njk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwNzoyOToyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxcbmluZGV4IGU2OWRlMjliYjJkMWQ2Li5kOGY1OWMxMzJhYjdlZSAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL19faW5pdF9fLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weVxcbkBAIC0wLDAgKzEsOSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbitcXG4rXFxcIlxcXCJcXFwiIFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXFxcIlxcXCJcXFwiXFxuK1xcbisjIFJlLWV4cG9ydCB0aGUgcHVibGljIGxpYnJhcnkgQVBJIHNvIGl0IGNhbiBiZSBpbXBvcnRlZCBzdHJhaWdodCBmcm9tIHRoZVxcbisjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXFxuKyMgcHlsaW50OiBkaXNhYmxlPXdpbGRjYXJkLWltcG9ydCx1bnVzZWQtd2lsZGNhcmQtaW1wb3J0XFxuK2Zyb20gLmxpYiBpbXBvcnQgKlxcbitmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxcbmluZGV4IDgyNzVhODA2Y2Y3M2Q2Li5iNmE2Y2UxMmI0YTdmOCAxMDA3NTVcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XFxuQEAgLTE3LDkgKzE3LDcgQEAgaW1wb3J0IHRleHR3cmFwXFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxcbiBzeXMucGF0aC5hcHBlbmQocGF0aGxpYi5QYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50LmFzX3Bvc2l4KCkpXFxuIGZyb20gbGliIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIFNwZWNGYW1pbHksIFNwZWNFeGNlcHRpb24sIFlubEV4Y2VwdGlvblxcbi1cXG4tU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xcbi1SRUxBVElWRV9TQ0hFTUFfRElSPScuLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsnXFxuK2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXFxuIFxcbiAjIHB5bGludDogZGlzYWJsZT10b28tZmV3LXB1YmxpYy1tZXRob2RzLHRvby1tYW55LWxvY2Fsc1xcbiBjbGFzcyBDb2xvcnM6XFxuQEAgLTQ4LDMwICs0Niw2IEBAIGRlZiB0ZXJtX3dpZHRoKCk6XFxuICAgICBcXFwiXFxcIlxcXCIgR2V0IHRlcm1pbmFsIHdpZHRoIGluIGNvbHVtbnMgKDgwIGlmIHN0ZG91dCBpcyBub3QgYSB0ZXJtaW5hbCkgXFxcIlxcXCJcXFwiXFxuICAgICByZXR1cm4gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKCkuY29sdW1uc1xcbiBcXG4tZGVmIHNjaGVtYV9kaXIoKTpcXG4tICAgIFxcXCJcXFwiXFxcIlxcbi0gICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxcbi0gICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXFxuLSAgICBcXFwiXFxcIlxcXCJcXG4tICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcXG4tICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcXFwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVxcXCIpXFxuLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XFxuLSAgICAgICAgc2NoZW1hX2Rpcl8gPSBTWVNfU0NIRU1BX0RJUlxcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxcbi0gICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXFxcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuLSAgICByZXR1cm4gc2NoZW1hX2Rpcl9cXG4tXFxuLWRlZiBzcGVjX2RpcigpOlxcbi0gICAgXFxcIlxcXCJcXFwiXFxuLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzcGVjIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIGVmZmVjdGl2ZVxcbi0gICAgc2NoZW1hIGRpcmVjdG9yeS5cXG4tICAgIFxcXCJcXFwiXFxcIlxcbi0gICAgc3BlY19kaXJfID0gc2NoZW1hX2RpcigpICsgJy9zcGVjcydcXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNwZWNfZGlyXyk6XFxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcXFwiU3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3RcXFwiKVxcbi0gICAgcmV0dXJuIHNwZWNfZGlyX1xcbi1cXG4tXFxuIGNsYXNzIFlubEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6XFxuICAgICBcXFwiXFxcIlxcXCJBIGN1c3RvbSBlbmNvZGVyIGZvciBlbWl0dGluZyBKU09OIHdpdGggeW5sLXNwZWNpZmljIGluc3RhbmNlIHR5cGVzXFxcIlxcXCJcXFwiXFxuICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKTpcXG5AQCAtMjcyLDkgKzI0Niw4IEBAIGRlZiBtYWluKCk6XFxuICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobXNnLCB3aWR0aD10ZXJtX3dpZHRoKCksIGNvbXBhY3Q9VHJ1ZSlcXG4gXFxuICAgICBpZiBhcmdzLmxpc3RfZmFtaWxpZXM6XFxuLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvcnRlZChvcy5saXN0ZGlyKHNwZWNfZGlyKCkpKTpcXG4tICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy55YW1sJyk6XFxuLSAgICAgICAgICAgICAgICBwcmludChmaWxlbmFtZS5yZW1vdmVzdWZmaXgoJy55YW1sJykpXFxuKyAgICAgICAgZm9yIGZhbWlseSBpbiBsaXN0X2ZhbWlsaWVzKCk6XFxuKyAgICAgICAgICAgIHByaW50KGZhbWlseSlcXG4gICAgICAgICByZXR1cm5cXG4gXFxuICAgICBpZiBhcmdzLm5vX3NjaGVtYTpcXG5AQCAtMjg0LDI4ICsyNTcsMjMgQEAgZGVmIG1haW4oKTpcXG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxcbiAgICAgICAgIGF0dHJzID0ganNvbi5sb2FkcyhhcmdzLmpzb25fdGV4dClcXG4gXFxuLSAgICBpZiBhcmdzLmZhbWlseTpcXG4tICAgICAgICBzcGVjID0gZlxcXCJ7c3BlY19kaXIoKX0ve2FyZ3MuZmFtaWx5fS55YW1sXFxcIlxcbi0gICAgZWxzZTpcXG4tICAgICAgICBzcGVjID0gYXJncy5zcGVjXFxuLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XFxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcXFwiU3BlYyBmaWxlIHtzcGVjfSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuKyAgICBpZiBhcmdzLnNwZWMgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShhcmdzLnNwZWMpOlxcbisgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXFxcIlNwZWMgZmlsZSB7YXJncy5zcGVjfSBkb2VzIG5vdCBleGlzdFxcXCIpXFxuIFxcbisgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXFxuICAgICBpZiBhcmdzLnZhbGlkYXRlOlxcbisgICAgICAgICMgRm9yY2UgdmFsaWRhdGlvbiBldmVuIGZvciBpbnN0YWxsZWQgc3BlY3MgKHNjaGVtYT1UcnVlKSwgdW5sZXNzIHRoZVxcbisgICAgICAgICMgdXNlciBleHBsaWNpdGx5IHBpY2tlZCBhIHNjaGVtYSBvciBvcHRlZCBvdXQgd2l0aCAtLW5vLXNjaGVtYS5cXG4rICAgICAgICBzY2hlbWEgPSBUcnVlIGlmIGFyZ3Muc2NoZW1hIGlzIE5vbmUgZWxzZSBhcmdzLnNjaGVtYVxcbiAgICAgICAgIHRyeTpcXG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcXG4rICAgICAgICAgICAgU3BlY0ZhbWlseShhcmdzLnNwZWMsIHNjaGVtYV9wYXRoPXNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5KVxcbiAgICAgICAgIGV4Y2VwdCBTcGVjRXhjZXB0aW9uIGFzIGVycm9yOlxcbiAgICAgICAgICAgICBwcmludChlcnJvcilcXG4gICAgICAgICAgICAgc3lzLmV4aXQoMSlcXG4gICAgICAgICByZXR1cm5cXG4gXFxuLSAgICBpZiBhcmdzLmZhbWlseTogIyBzZXQgYmVoYXZpb3VyIHdoZW4gdXNpbmcgaW5zdGFsbGVkIHNwZWNzXFxuLSAgICAgICAgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBhbmQgc3BlYy5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKTpcXG4tICAgICAgICAgICAgYXJncy5zY2hlbWEgPSAnJyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcXG4tICAgICAgICBpZiBhcmdzLnByb2Nlc3NfdW5rbm93biBpcyBOb25lOlxcbi0gICAgICAgICAgICBhcmdzLnByb2Nlc3NfdW5rbm93biA9IFRydWVcXG4tXFxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgYXJncy5zY2hlbWEsIGFyZ3MucHJvY2Vzc191bmtub3duLFxcbisgICAgeW5sID0gWW5sRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hPWFyZ3Muc2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHksXFxuKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc191bmtub3duPWFyZ3MucHJvY2Vzc191bmtub3duLFxcbiAgICAgICAgICAgICAgICAgICAgIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxcbiAgICAgaWYgYXJncy5kYmdfc21hbGxfcmVjdjpcXG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcXG5pbmRleCBiZTc0MTk4NWFlNGVlNy4uYWE0MjYzYzhjYmE5ZWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxcbkBAIC01LDEyICs1LDEzIEBAXFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxcXFxuICAgICBTcGVjRXhjZXB0aW9uXFxuK2Zyb20gLnNwZWNkaXIgaW1wb3J0IGxpc3RfZmFtaWxpZXNcXG4gZnJvbSAueW5sIGltcG9ydCBZbmxGYW1pbHksIE5ldGxpbmssIE5sRXJyb3IsIE5sUG9saWN5LCBZbmxFeGNlcHRpb25cXG4gXFxuIGZyb20gLmRvY19nZW5lcmF0b3IgaW1wb3J0IFlubERvY0dlbmVyYXRvclxcbiBcXG4gX19hbGxfXyA9IFtcXFwiU3BlY0F0dHJcXFwiLCBcXFwiU3BlY0F0dHJTZXRcXFwiLCBcXFwiU3BlY0VudW1FbnRyeVxcXCIsIFxcXCJTcGVjRW51bVNldFxcXCIsXFxuICAgICAgICAgICAgXFxcIlNwZWNGYW1pbHlcXFwiLCBcXFwiU3BlY09wZXJhdGlvblxcXCIsIFxcXCJTcGVjU3ViTWVzc2FnZVxcXCIsIFxcXCJTcGVjU3ViTWVzc2FnZUZvcm1hdFxcXCIsXFxuLSAgICAgICAgICAgXFxcIlNwZWNFeGNlcHRpb25cXFwiLFxcbisgICAgICAgICAgIFxcXCJTcGVjRXhjZXB0aW9uXFxcIiwgXFxcImxpc3RfZmFtaWxpZXNcXFwiLFxcbiAgICAgICAgICAgIFxcXCJZbmxGYW1pbHlcXFwiLCBcXFwiTmV0bGlua1xcXCIsIFxcXCJObEVycm9yXFxcIiwgXFxcIk5sUG9saWN5XFxcIiwgXFxcIllubEV4Y2VwdGlvblxcXCIsXFxuICAgICAgICAgICAgXFxcIllubERvY0dlbmVyYXRvclxcXCJdXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcXG5AQCAtMTIsNiArMTIsOCBAQCBpbXBvcnQgaW1wb3J0bGliXFxuIGltcG9ydCBvc1xcbiBpbXBvcnQgeWFtbCBhcyBweXlhbWxcXG4gXFxuK2Zyb20gLnNwZWNkaXIgaW1wb3J0IGZpbmRfc3BlYywgU1lTX1NDSEVNQV9ESVJcXG4rXFxuIFxcbiBjbGFzcyBTcGVjRXhjZXB0aW9uKEV4Y2VwdGlvbik6XFxuICAgICBcXFwiXFxcIlxcXCJOZXRsaW5rIHNwZWMgZXhjZXB0aW9uLlxcbkBAIC00NDQsNyArNDQ2LDIzIEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOlxcbiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOlxcbiAgICAgICAgIF95YW1sX2xvYWRlciA9IHB5eWFtbC5TYWZlTG9hZGVyXFxuIFxcbi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aCwgc2NoZW1hX3BhdGg9Tm9uZSwgZXhjbHVkZV9vcHM9Tm9uZSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoPU5vbmUsIHNjaGVtYV9wYXRoPU5vbmUsIGV4Y2x1ZGVfb3BzPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxcbisgICAgICAgICMgc2NoZW1hX3BhdGggc2VsZWN0cyBob3cgdGhlIHNwZWMgaXMgdmFsaWRhdGVkOlxcbisgICAgICAgICMgICBOb25lICAtLSBubyBwcmVmZXJlbmNlOiB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYSxcXG4rICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxcbisgICAgICAgICMgICBUcnVlICAtLSBhbHdheXMgdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWFcXG4rICAgICAgICAjICAgcGF0aCAgLS0gdmFsaWRhdGUgYWdhaW5zdCB0aGlzIHNjaGVtYVxcbisgICAgICAgICMgICAnJyAgICAtLSBkbyBub3QgdmFsaWRhdGVcXG4rICAgICAgICBpZiAoc3BlY19wYXRoIGlzIE5vbmUpID09IChmYW1pbHkgaXMgTm9uZSk6XFxuKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoXFxcIlNwZWNpZnkgZXhhY3RseSBvbmUgb2Ygc3BlYyBwYXRoIG9yIGZhbWlseSBuYW1lXFxcIilcXG4rICAgICAgICBpZiBmYW1pbHkgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgIHNwZWNfcGF0aCA9IGZpbmRfc3BlYyhmYW1pbHkpXFxuKyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cXG4rICAgICAgICAgICAgIyB0byBzYXZlIGN5Y2xlcyB1bmxlc3MgdGhlIGNhbGxlciBhc2tlZCB0byB2YWxpZGF0ZS5cXG4rICAgICAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBhbmQgc3BlY19wYXRoLnN0YXJ0c3dpdGgoU1lTX1NDSEVNQV9ESVIpOlxcbisgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAnJ1xcbitcXG4gICAgICAgICB3aXRoIG9wZW4oc3BlY19wYXRoLCBcXFwiclxcXCIsIGVuY29kaW5nPSd1dGYtOCcpIGFzIHN0cmVhbTpcXG4gICAgICAgICAgICAgcHJlZml4ID0gJyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICdcXG4gICAgICAgICAgICAgZmlyc3QgPSBzdHJlYW0ucmVhZGxpbmUoKS5zdHJpcCgpXFxuQEAgLTQ2NSw3ICs0ODMsNyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcXG4gICAgICAgICBzZWxmLnByb3RvID0gc2VsZi55YW1sLmdldCgncHJvdG9jb2wnLCAnZ2VuZXRsaW5rJylcXG4gICAgICAgICBzZWxmLm1zZ19pZF9tb2RlbCA9IHNlbGYueWFtbFsnb3BlcmF0aW9ucyddLmdldCgnZW51bS1tb2RlbCcsICd1bmlmaWVkJylcXG4gXFxuLSAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZTpcXG4rICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lIG9yIHNjaGVtYV9wYXRoIGlzIFRydWU6XFxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSArIGYnL3tzZWxmLnByb3RvfS55YW1sJ1xcbiAgICAgICAgIGlmIHNjaGVtYV9wYXRoOlxcbiAgICAgICAgICAgICB3aXRoIG9wZW4oc2NoZW1hX3BhdGgsIFxcXCJyXFxcIiwgZW5jb2Rpbmc9J3V0Zi04JykgYXMgc3RyZWFtOlxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvc3BlY2Rpci5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjZWE5YjlmYjdiMDQzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHlcXG5AQCAtMCwwICsxLDUxIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbitcXFwiXFxcIlxcXCJcXG4rTG9jYXRpbmcgWU5MIHNwZWMgYW5kIHNjaGVtYSBmaWxlcyBvbiBkaXNrLlxcbitcXG4rUmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBZQU1MIHNwZWNzIChwcmVmZXJyaW5nIGFuIGluLXRyZWUgY29weVxcbitvdmVyIHRoZSBpbnN0YWxsZWQgc3lzdGVtIHBhdGgpIGFuZCBtYXBzIGZhbWlseSBuYW1lcyB0byBzcGVjIGZpbGVzLlxcbitcXFwiXFxcIlxcXCJcXG4rXFxuK2ltcG9ydCBvc1xcbitcXG4rU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xcbitSRUxBVElWRV9TQ0hFTUFfRElSPScuLi8uLi8uLi8uLi8uLi9Eb2N1bWVudGF0aW9uL25ldGxpbmsnXFxuK1xcbitcXG4rZGVmIHNjaGVtYV9kaXIoKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxcbisgICAgc3lzdGVtIHNjaGVtYSBkaXJlY3RvcnkuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcXG4rICAgIHNjaGVtYV9kaXJfID0gb3MucGF0aC5hYnNwYXRoKGZcXFwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVxcXCIpXFxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XFxuKyAgICAgICAgc2NoZW1hX2Rpcl8gPSBTWVNfU0NIRU1BX0RJUlxcbisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxcbisgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcXFwiU2NoZW1hIGRpcmVjdG9yeSB7c2NoZW1hX2Rpcl99IGRvZXMgbm90IGV4aXN0XFxcIilcXG4rICAgIHJldHVybiBzY2hlbWFfZGlyX1xcbitcXG4rZGVmIHNwZWNfZGlyKCk6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXFxuKyAgICBzY2hlbWEgZGlyZWN0b3J5LlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xcbisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3BlY19kaXJfKTpcXG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXFxcIlNwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XFxcIilcXG4rICAgIHJldHVybiBzcGVjX2Rpcl9cXG4rXFxuK1xcbitkZWYgZmluZF9zcGVjKGZhbWlseSk6XFxuKyAgICBcXFwiXFxcIlxcXCIgUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBZQU1MIHNwZWMgZmlsZSBmb3IgYSBmYW1pbHkgYnkgbmFtZS4gXFxcIlxcXCJcXFwiXFxuKyAgICBzcGVjID0gZlxcXCJ7c3BlY19kaXIoKX0ve2ZhbWlseX0ueWFtbFxcXCJcXG4rICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcGVjKTpcXG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXFxcIlNwZWMgZm9yIGZhbWlseSAne2ZhbWlseX0nIG5vdCBmb3VuZCBhdCB7c3BlY31cXFwiKVxcbisgICAgcmV0dXJuIHNwZWNcXG4rXFxuK1xcbitkZWYgbGlzdF9mYW1pbGllcygpOlxcbisgICAgXFxcIlxcXCJcXFwiIFJldHVybiB0aGUgc29ydGVkIG5hbWVzIG9mIGFsbCBmYW1pbGllcyB3aXRoIGFuIGluc3RhbGxlZCBzcGVjLiBcXFwiXFxcIlxcXCJcXG4rICAgIHJldHVybiBzb3J0ZWQoZi5yZW1vdmVzdWZmaXgoJy55YW1sJylcXG4rICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzcGVjX2RpcigpKSBpZiBmLmVuZHN3aXRoKCcueWFtbCcpKVxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG5pbmRleCAwOTJkMTMyZWRlYzEyZi4uODY4MmJmNTg4ZTFmYTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuQEAgLTY2MSw2ICs2NjEsMTQgQEAgY2xhc3MgWW5sRmFtaWx5KFNwZWNGYW1pbHkpOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy5cXG4gXFxuKyAgICBUaGUgc3BlYyBjYW4gYmUgc2VsZWN0ZWQgZWl0aGVyIGJ5IGZpbGUgcGF0aCAoZGVmX3BhdGg9KSBvciwgd2hlbiBpdFxcbisgICAgc2hpcHMgaW4gYSB3ZWxsLWtub3duIGxvY2F0aW9uLCBieSBmYW1pbHkgbmFtZSAoZmFtaWx5PVxcXCJ4eXpcXFwiKTsgZXhhY3RseVxcbisgICAgb25lIG9mIHRoZSB0d28gbXVzdCBiZSBnaXZlbi4gRm9yIGV4YW1wbGU6XFxuK1xcbisgICAgICBmcm9tIHB5eW5sIGltcG9ydCBZbmxGYW1pbHlcXG4rXFxuKyAgICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9XFxcIm5ldGRldlxcXCIpXFxuK1xcbiAgICAgUHJpbWFyeSB1c2Ugb2YgdGhlIGNsYXNzIGlzIHRvIGV4ZWN1dGUgTmV0bGluayBjb21tYW5kczpcXG4gXFxuICAgICAgIHlubC5cXHUwMDNjb3BfbmFtZVxcdTAwM2UoYXR0cnMsIC4uLilcXG5AQCAtNjkxLDExICs2OTksMTYgQEAgY2xhc3MgWW5sRmFtaWx5KFNwZWNGYW1pbHkpOlxcbiBcXG4gICAgICAgeW5sLmdldF9wb2xpY3kob3BfbmFtZSwgbW9kZSkgICAgICAtLSBxdWVyeSBrZXJuZWwgcG9saWN5IGZvciBhbiBvcFxcbiAgICAgXFxcIlxcXCJcXFwiXFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXFxuLSAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTApOlxcbi0gICAgICAgIHN1cGVyKCkuX19pbml0X18oZGVmX3BhdGgsIHNjaGVtYSlcXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZfcGF0aD1Ob25lLCBzY2hlbWE9Tm9uZSwgcHJvY2Vzc191bmtub3duPU5vbmUsXFxuKyAgICAgICAgICAgICAgICAgcmVjdl9zaXplPTAsIGZhbWlseT1Ob25lKTpcXG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEsIGZhbWlseT1mYW1pbHkpXFxuIFxcbiAgICAgICAgIHNlbGYuaW5jbHVkZV9yYXcgPSBGYWxzZVxcbisgICAgICAgICMgU3BlY3MgZnJvbSAvdXNyIChzZWxlY3RlZCBieSBmYW1pbHk9KSBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBiZWluZ1xcbisgICAgICAgICMgc3RhbGUsIGRlZmF1bHQgdG8gaWdub3JpbmcgdW5rbm93biBhdHRycy4gSW4tdHJlZSB1c2VycywgYW5kIHVzZXJzXFxuKyAgICAgICAgIyB3aG8gYnVuZGxlIHRoZSBzcGVjIG5lZWQgdG8gbWFrZSBhIGNvbnNjaW91cyBkZWNpc2lvbi5cXG4rICAgICAgICBpZiBwcm9jZXNzX3Vua25vd24gaXMgTm9uZTpcXG4rICAgICAgICAgICAgcHJvY2Vzc191bmtub3duID0gZmFtaWx5IGlzIG5vdCBOb25lXFxuICAgICAgICAgc2VsZi5wcm9jZXNzX3Vua25vd24gPSBwcm9jZXNzX3Vua25vd25cXG4gXFxuICAgICAgICAgdHJ5OlxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHkgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcXG5pbmRleCBkYjNiNjJjNjUyZTc3Zi4uMGVlMGM4ZTg3Njg2YmUgMTAwNzU1XFxuLS0tIGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XFxuKysrIGIvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XFxuQEAgLTExLDEyICsxMSwxMCBAQCBpbXBvcnQgcGF0aGxpYlxcbiBpbXBvcnQgcHByaW50XFxuIGltcG9ydCBzeXNcXG4gaW1wb3J0IHJlXFxuLWltcG9ydCBvc1xcbiBcXG4gIyBweWxpbnQ6IGRpc2FibGU9bm8tbmFtZS1pbi1tb2R1bGUsd3JvbmctaW1wb3J0LXBvc2l0aW9uXFxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCdweXlubCcpLmFzX3Bvc2l4KCkpXFxuICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvclxcbi1mcm9tIGNsaSBpbXBvcnQgc2NoZW1hX2Rpciwgc3BlY19kaXJcXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseVxcbiBcXG4gXFxuQEAgLTE3MywxMCArMTcxLDcgQEAgZGVmIG1haW4oKTpcXG4gXFxuICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVxcbiBcXG4tICAgIHNwZWMgPSBvcy5wYXRoLmpvaW4oc3BlY19kaXIoKSwgJ2V0aHRvb2wueWFtbCcpXFxuLSAgICBzY2hlbWEgPSBvcy5wYXRoLmpvaW4oc2NoZW1hX2RpcigpLCAnZ2VuZXRsaW5rLWxlZ2FjeS55YW1sJylcXG4tXFxuLSAgICB5bmwgPSBZbmxGYW1pbHkoc3BlYywgc2NoZW1hLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcXG4rICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9J2V0aHRvb2wnLCByZWN2X3NpemU9YXJncy5kYmdfc21hbGxfcmVjdilcXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XFxuICAgICAgICAgeW5sLnNldF9yZWN2X2RiZyhUcnVlKVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDc6Mjk6MjkuMTAxODMwMjgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0MDc2MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHRvb2xpbmcgZm9yIE5ldGxpbmsgKFlOTCkgaW4gdG9vbHMvbmV0L3lubC8gYW5kIGRvZXMgbm90IGNoYW5nZSBhbnkga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU3YTM3ODBlNDNkNmY3NmY0NTA5M2I5Y2Q3OTBjYWY2OTAxMTRhOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDA3OjI5OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9fX2luaXRfXy5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbmluZGV4IGU2OWRlMjliYjJkMWQ2Li5kOGY1OWMxMzJhYjdlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvX19pbml0X18ucHlcbkBAIC0wLDAgKzEsOSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4rXG4rXCJcIlwiIFB5dGhvbiBZTkwgKFlBTUwgTmV0bGluaykgbGlicmFyeS4gXCJcIlwiXG4rXG4rIyBSZS1leHBvcnQgdGhlIHB1YmxpYyBsaWJyYXJ5IEFQSSBzbyBpdCBjYW4gYmUgaW1wb3J0ZWQgc3RyYWlnaHQgZnJvbSB0aGVcbisjIHBhY2thZ2UsIGUuZy4gYGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseWAuXG4rIyBweWxpbnQ6IGRpc2FibGU9d2lsZGNhcmQtaW1wb3J0LHVudXNlZC13aWxkY2FyZC1pbXBvcnRcbitmcm9tIC5saWIgaW1wb3J0ICpcbitmcm9tIC5saWIgaW1wb3J0IF9fYWxsX19cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvY2xpLnB5XG5pbmRleCA4Mjc1YTgwNmNmNzNkNi4uYjZhNmNlMTJiNGE3ZjggMTAwNzU1XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2NsaS5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9jbGkucHlcbkBAIC0xNyw5ICsxNyw3IEBAIGltcG9ydCB0ZXh0d3JhcFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQuYXNfcG9zaXgoKSlcbiBmcm9tIGxpYiBpbXBvcnQgWW5sRmFtaWx5LCBOZXRsaW5rLCBObEVycm9yLCBTcGVjRmFtaWx5LCBTcGVjRXhjZXB0aW9uLCBZbmxFeGNlcHRpb25cbi1cbi1TWVNfU0NIRU1BX0RJUj0nL3Vzci9zaGFyZS95bmwnXG4tUkVMQVRJVkVfU0NIRU1BX0RJUj0nLi4vLi4vLi4vLi4vRG9jdW1lbnRhdGlvbi9uZXRsaW5rJ1xuK2Zyb20gbGliIGltcG9ydCBsaXN0X2ZhbWlsaWVzXG4gXG4gIyBweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcyx0b28tbWFueS1sb2NhbHNcbiBjbGFzcyBDb2xvcnM6XG5AQCAtNDgsMzAgKzQ2LDYgQEAgZGVmIHRlcm1fd2lkdGgoKTpcbiAgICAgXCJcIlwiIEdldCB0ZXJtaW5hbCB3aWR0aCBpbiBjb2x1bW5zICg4MCBpZiBzdGRvdXQgaXMgbm90IGEgdGVybWluYWwpIFwiXCJcIlxuICAgICByZXR1cm4gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKCkuY29sdW1uc1xuIFxuLWRlZiBzY2hlbWFfZGlyKCk6XG4tICAgIFwiXCJcIlxuLSAgICBSZXR1cm4gdGhlIGVmZmVjdGl2ZSBzY2hlbWEgZGlyZWN0b3J5LCBwcmVmZXJyaW5nIGluLXRyZWUgYmVmb3JlXG4tICAgIHN5c3RlbSBzY2hlbWEgZGlyZWN0b3J5LlxuLSAgICBcIlwiXCJcbi0gICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKVxuLSAgICBzY2hlbWFfZGlyXyA9IG9zLnBhdGguYWJzcGF0aChmXCJ7c2NyaXB0X2Rpcn0ve1JFTEFUSVZFX1NDSEVNQV9ESVJ9XCIpXG4tICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbi0gICAgICAgIHNjaGVtYV9kaXJfID0gU1lTX1NDSEVNQV9ESVJcbi0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2NoZW1hX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFwiKVxuLSAgICByZXR1cm4gc2NoZW1hX2Rpcl9cbi1cbi1kZWYgc3BlY19kaXIoKTpcbi0gICAgXCJcIlwiXG4tICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXG4tICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4tICAgIFwiXCJcIlxuLSAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xuLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNwZWMgZGlyZWN0b3J5IHtzcGVjX2Rpcl99IGRvZXMgbm90IGV4aXN0XCIpXG4tICAgIHJldHVybiBzcGVjX2Rpcl9cbi1cbi1cbiBjbGFzcyBZbmxFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOlxuICAgICBcIlwiXCJBIGN1c3RvbSBlbmNvZGVyIGZvciBlbWl0dGluZyBKU09OIHdpdGggeW5sLXNwZWNpZmljIGluc3RhbmNlIHR5cGVzXCJcIlwiXG4gICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOlxuQEAgLTI3Miw5ICsyNDYsOCBAQCBkZWYgbWFpbigpOlxuICAgICAgICAgICAgIHBwcmludC5wcHJpbnQobXNnLCB3aWR0aD10ZXJtX3dpZHRoKCksIGNvbXBhY3Q9VHJ1ZSlcbiBcbiAgICAgaWYgYXJncy5saXN0X2ZhbWlsaWVzOlxuLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvcnRlZChvcy5saXN0ZGlyKHNwZWNfZGlyKCkpKTpcbi0gICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLnlhbWwnKTpcbi0gICAgICAgICAgICAgICAgcHJpbnQoZmlsZW5hbWUucmVtb3Zlc3VmZml4KCcueWFtbCcpKVxuKyAgICAgICAgZm9yIGZhbWlseSBpbiBsaXN0X2ZhbWlsaWVzKCk6XG4rICAgICAgICAgICAgcHJpbnQoZmFtaWx5KVxuICAgICAgICAgcmV0dXJuXG4gXG4gICAgIGlmIGFyZ3Mubm9fc2NoZW1hOlxuQEAgLTI4NCwyOCArMjU3LDIzIEBAIGRlZiBtYWluKCk6XG4gICAgIGlmIGFyZ3MuanNvbl90ZXh0OlxuICAgICAgICAgYXR0cnMgPSBqc29uLmxvYWRzKGFyZ3MuanNvbl90ZXh0KVxuIFxuLSAgICBpZiBhcmdzLmZhbWlseTpcbi0gICAgICAgIHNwZWMgPSBmXCJ7c3BlY19kaXIoKX0ve2FyZ3MuZmFtaWx5fS55YW1sXCJcbi0gICAgZWxzZTpcbi0gICAgICAgIHNwZWMgPSBhcmdzLnNwZWNcbi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNwZWMpOlxuLSAgICAgICAgcmFpc2UgWW5sRXhjZXB0aW9uKGZcIlNwZWMgZmlsZSB7c3BlY30gZG9lcyBub3QgZXhpc3RcIilcbisgICAgaWYgYXJncy5zcGVjIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoYXJncy5zcGVjKTpcbisgICAgICAgIHJhaXNlIFlubEV4Y2VwdGlvbihmXCJTcGVjIGZpbGUge2FyZ3Muc3BlY30gZG9lcyBub3QgZXhpc3RcIilcbiBcbisgICAgIyBTcGVjL1lubEZhbWlseSB3aWxsIHJhaXNlIGlmIGJvdGggb3IgbmVpdGhlciBzcGVjIGFuZCBmYW1pbHkgYXJlIGdpdmVuXG4gICAgIGlmIGFyZ3MudmFsaWRhdGU6XG4rICAgICAgICAjIEZvcmNlIHZhbGlkYXRpb24gZXZlbiBmb3IgaW5zdGFsbGVkIHNwZWNzIChzY2hlbWE9VHJ1ZSksIHVubGVzcyB0aGVcbisgICAgICAgICMgdXNlciBleHBsaWNpdGx5IHBpY2tlZCBhIHNjaGVtYSBvciBvcHRlZCBvdXQgd2l0aCAtLW5vLXNjaGVtYS5cbisgICAgICAgIHNjaGVtYSA9IFRydWUgaWYgYXJncy5zY2hlbWEgaXMgTm9uZSBlbHNlIGFyZ3Muc2NoZW1hXG4gICAgICAgICB0cnk6XG4tICAgICAgICAgICAgU3BlY0ZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSlcbisgICAgICAgICAgICBTcGVjRmFtaWx5KGFyZ3Muc3BlYywgc2NoZW1hX3BhdGg9c2NoZW1hLCBmYW1pbHk9YXJncy5mYW1pbHkpXG4gICAgICAgICBleGNlcHQgU3BlY0V4Y2VwdGlvbiBhcyBlcnJvcjpcbiAgICAgICAgICAgICBwcmludChlcnJvcilcbiAgICAgICAgICAgICBzeXMuZXhpdCgxKVxuICAgICAgICAgcmV0dXJuXG4gXG4tICAgIGlmIGFyZ3MuZmFtaWx5OiAjIHNldCBiZWhhdmlvdXIgd2hlbiB1c2luZyBpbnN0YWxsZWQgc3BlY3Ncbi0gICAgICAgIGlmIGFyZ3Muc2NoZW1hIGlzIE5vbmUgYW5kIHNwZWMuc3RhcnRzd2l0aChTWVNfU0NIRU1BX0RJUik6XG4tICAgICAgICAgICAgYXJncy5zY2hlbWEgPSAnJyAjIGRpc2FibGUgc2NoZW1hIHZhbGlkYXRpb24gd2hlbiBpbnN0YWxsZWRcbi0gICAgICAgIGlmIGFyZ3MucHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4tICAgICAgICAgICAgYXJncy5wcm9jZXNzX3Vua25vd24gPSBUcnVlXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBhcmdzLnNjaGVtYSwgYXJncy5wcm9jZXNzX3Vua25vd24sXG4rICAgIHlubCA9IFlubEZhbWlseShhcmdzLnNwZWMsIHNjaGVtYT1hcmdzLnNjaGVtYSwgZmFtaWx5PWFyZ3MuZmFtaWx5LFxuKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc191bmtub3duPWFyZ3MucHJvY2Vzc191bmtub3duLFxuICAgICAgICAgICAgICAgICAgICAgcmVjdl9zaXplPWFyZ3MuZGJnX3NtYWxsX3JlY3YpXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9fX2luaXRfXy5weVxuaW5kZXggYmU3NDE5ODVhZTRlZTcuLmFhNDI2M2M4Y2JhOWVmIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIvX19pbml0X18ucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL19faW5pdF9fLnB5XG5AQCAtNSwxMiArNSwxMyBAQFxuIGZyb20gLm5sc3BlYyBpbXBvcnQgU3BlY0F0dHIsIFNwZWNBdHRyU2V0LCBTcGVjRW51bUVudHJ5LCBTcGVjRW51bVNldCwgXFxcbiAgICAgU3BlY0ZhbWlseSwgU3BlY09wZXJhdGlvbiwgU3BlY1N1Yk1lc3NhZ2UsIFNwZWNTdWJNZXNzYWdlRm9ybWF0LCBcXFxuICAgICBTcGVjRXhjZXB0aW9uXG4rZnJvbSAuc3BlY2RpciBpbXBvcnQgbGlzdF9mYW1pbGllc1xuIGZyb20gLnlubCBpbXBvcnQgWW5sRmFtaWx5LCBOZXRsaW5rLCBObEVycm9yLCBObFBvbGljeSwgWW5sRXhjZXB0aW9uXG4gXG4gZnJvbSAuZG9jX2dlbmVyYXRvciBpbXBvcnQgWW5sRG9jR2VuZXJhdG9yXG4gXG4gX19hbGxfXyA9IFtcIlNwZWNBdHRyXCIsIFwiU3BlY0F0dHJTZXRcIiwgXCJTcGVjRW51bUVudHJ5XCIsIFwiU3BlY0VudW1TZXRcIixcbiAgICAgICAgICAgIFwiU3BlY0ZhbWlseVwiLCBcIlNwZWNPcGVyYXRpb25cIiwgXCJTcGVjU3ViTWVzc2FnZVwiLCBcIlNwZWNTdWJNZXNzYWdlRm9ybWF0XCIsXG4tICAgICAgICAgICBcIlNwZWNFeGNlcHRpb25cIixcbisgICAgICAgICAgIFwiU3BlY0V4Y2VwdGlvblwiLCBcImxpc3RfZmFtaWxpZXNcIixcbiAgICAgICAgICAgIFwiWW5sRmFtaWx5XCIsIFwiTmV0bGlua1wiLCBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIllubEV4Y2VwdGlvblwiLFxuICAgICAgICAgICAgXCJZbmxEb2NHZW5lcmF0b3JcIl1cbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9ubHNwZWMucHlcbmluZGV4IDA0NjlhMGUyNzBkMDU5Li5iNGVjNTk4MTRhYjFiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL25sc3BlYy5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIvbmxzcGVjLnB5XG5AQCAtMTIsNiArMTIsOCBAQCBpbXBvcnQgaW1wb3J0bGliXG4gaW1wb3J0IG9zXG4gaW1wb3J0IHlhbWwgYXMgcHl5YW1sXG4gXG4rZnJvbSAuc3BlY2RpciBpbXBvcnQgZmluZF9zcGVjLCBTWVNfU0NIRU1BX0RJUlxuK1xuIFxuIGNsYXNzIFNwZWNFeGNlcHRpb24oRXhjZXB0aW9uKTpcbiAgICAgXCJcIlwiTmV0bGluayBzcGVjIGV4Y2VwdGlvbi5cbkBAIC00NDQsNyArNDQ2LDIzIEBAIGNsYXNzIFNwZWNGYW1pbHkoU3BlY0VsZW1lbnQpOlxuICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6XG4gICAgICAgICBfeWFtbF9sb2FkZXIgPSBweXlhbWwuU2FmZUxvYWRlclxuIFxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlY19wYXRoLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lKTpcbisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWNfcGF0aD1Ob25lLCBzY2hlbWFfcGF0aD1Ob25lLCBleGNsdWRlX29wcz1Ob25lLFxuKyAgICAgICAgICAgICAgICAgZmFtaWx5PU5vbmUpOlxuKyAgICAgICAgIyBzY2hlbWFfcGF0aCBzZWxlY3RzIGhvdyB0aGUgc3BlYyBpcyB2YWxpZGF0ZWQ6XG4rICAgICAgICAjICAgTm9uZSAgLS0gbm8gcHJlZmVyZW5jZTogdmFsaWRhdGUgYWdhaW5zdCB0aGUgZGVmYXVsdCBzY2hlbWEsXG4rICAgICAgICAjICAgICAgICAgICAgYnV0IHRydXN0IChza2lwKSBpbnN0YWxsZWQgc3BlY3Mgc2VsZWN0ZWQgYnkgZmFtaWx5PVxuKyAgICAgICAgIyAgIFRydWUgIC0tIGFsd2F5cyB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHNjaGVtYVxuKyAgICAgICAgIyAgIHBhdGggIC0tIHZhbGlkYXRlIGFnYWluc3QgdGhpcyBzY2hlbWFcbisgICAgICAgICMgICAnJyAgICAtLSBkbyBub3QgdmFsaWRhdGVcbisgICAgICAgIGlmIChzcGVjX3BhdGggaXMgTm9uZSkgPT0gKGZhbWlseSBpcyBOb25lKTpcbisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKFwiU3BlY2lmeSBleGFjdGx5IG9uZSBvZiBzcGVjIHBhdGggb3IgZmFtaWx5IG5hbWVcIilcbisgICAgICAgIGlmIGZhbWlseSBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBzcGVjX3BhdGggPSBmaW5kX3NwZWMoZmFtaWx5KVxuKyAgICAgICAgICAgICMgSW5zdGFsbGVkIHNwZWNzIGFyZSBhc3N1bWVkIGNvcnJlY3QsIHNvIHNraXAgc2NoZW1hIHZhbGlkYXRpb25cbisgICAgICAgICAgICAjIHRvIHNhdmUgY3ljbGVzIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIHRvIHZhbGlkYXRlLlxuKyAgICAgICAgICAgIGlmIHNjaGVtYV9wYXRoIGlzIE5vbmUgYW5kIHNwZWNfcGF0aC5zdGFydHN3aXRoKFNZU19TQ0hFTUFfRElSKTpcbisgICAgICAgICAgICAgICAgc2NoZW1hX3BhdGggPSAnJ1xuK1xuICAgICAgICAgd2l0aCBvcGVuKHNwZWNfcGF0aCwgXCJyXCIsIGVuY29kaW5nPSd1dGYtOCcpIGFzIHN0cmVhbTpcbiAgICAgICAgICAgICBwcmVmaXggPSAnIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogJ1xuICAgICAgICAgICAgIGZpcnN0ID0gc3RyZWFtLnJlYWRsaW5lKCkuc3RyaXAoKVxuQEAgLTQ2NSw3ICs0ODMsNyBAQCBjbGFzcyBTcGVjRmFtaWx5KFNwZWNFbGVtZW50KTpcbiAgICAgICAgIHNlbGYucHJvdG8gPSBzZWxmLnlhbWwuZ2V0KCdwcm90b2NvbCcsICdnZW5ldGxpbmsnKVxuICAgICAgICAgc2VsZi5tc2dfaWRfbW9kZWwgPSBzZWxmLnlhbWxbJ29wZXJhdGlvbnMnXS5nZXQoJ2VudW0tbW9kZWwnLCAndW5pZmllZCcpXG4gXG4tICAgICAgICBpZiBzY2hlbWFfcGF0aCBpcyBOb25lOlxuKyAgICAgICAgaWYgc2NoZW1hX3BhdGggaXMgTm9uZSBvciBzY2hlbWFfcGF0aCBpcyBUcnVlOlxuICAgICAgICAgICAgIHNjaGVtYV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzcGVjX3BhdGgpKSArIGYnL3tzZWxmLnByb3RvfS55YW1sJ1xuICAgICAgICAgaWYgc2NoZW1hX3BhdGg6XG4gICAgICAgICAgICAgd2l0aCBvcGVuKHNjaGVtYV9wYXRoLCBcInJcIiwgZW5jb2Rpbmc9J3V0Zi04JykgYXMgc3RyZWFtOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3NwZWNkaXIucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZjZWE5YjlmYjdiMDQzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi9zcGVjZGlyLnB5XG5AQCAtMCwwICsxLDUxIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbitcbitcIlwiXCJcbitMb2NhdGluZyBZTkwgc3BlYyBhbmQgc2NoZW1hIGZpbGVzIG9uIGRpc2suXG4rXG4rUmVzb2x2ZXMgdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBZQU1MIHNwZWNzIChwcmVmZXJyaW5nIGFuIGluLXRyZWUgY29weVxuK292ZXIgdGhlIGluc3RhbGxlZCBzeXN0ZW0gcGF0aCkgYW5kIG1hcHMgZmFtaWx5IG5hbWVzIHRvIHNwZWMgZmlsZXMuXG4rXCJcIlwiXG4rXG4raW1wb3J0IG9zXG4rXG4rU1lTX1NDSEVNQV9ESVI9Jy91c3Ivc2hhcmUveW5sJ1xuK1JFTEFUSVZFX1NDSEVNQV9ESVI9Jy4uLy4uLy4uLy4uLy4uL0RvY3VtZW50YXRpb24vbmV0bGluaydcbitcbitcbitkZWYgc2NoZW1hX2RpcigpOlxuKyAgICBcIlwiXCJcbisgICAgUmV0dXJuIHRoZSBlZmZlY3RpdmUgc2NoZW1hIGRpcmVjdG9yeSwgcHJlZmVycmluZyBpbi10cmVlIGJlZm9yZVxuKyAgICBzeXN0ZW0gc2NoZW1hIGRpcmVjdG9yeS5cbisgICAgXCJcIlwiXG4rICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSlcbisgICAgc2NoZW1hX2Rpcl8gPSBvcy5wYXRoLmFic3BhdGgoZlwie3NjcmlwdF9kaXJ9L3tSRUxBVElWRV9TQ0hFTUFfRElSfVwiKVxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY2hlbWFfZGlyXyk6XG4rICAgICAgICBzY2hlbWFfZGlyXyA9IFNZU19TQ0hFTUFfRElSXG4rICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNjaGVtYV9kaXJfKTpcbisgICAgICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZcIlNjaGVtYSBkaXJlY3Rvcnkge3NjaGVtYV9kaXJffSBkb2VzIG5vdCBleGlzdFwiKVxuKyAgICByZXR1cm4gc2NoZW1hX2Rpcl9cbitcbitkZWYgc3BlY19kaXIoKTpcbisgICAgXCJcIlwiXG4rICAgIFJldHVybiB0aGUgZWZmZWN0aXZlIHNwZWMgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlXG4rICAgIHNjaGVtYSBkaXJlY3RvcnkuXG4rICAgIFwiXCJcIlxuKyAgICBzcGVjX2Rpcl8gPSBzY2hlbWFfZGlyKCkgKyAnL3NwZWNzJ1xuKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGVjX2Rpcl8pOlxuKyAgICAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZlwiU3BlYyBkaXJlY3Rvcnkge3NwZWNfZGlyX30gZG9lcyBub3QgZXhpc3RcIilcbisgICAgcmV0dXJuIHNwZWNfZGlyX1xuK1xuK1xuK2RlZiBmaW5kX3NwZWMoZmFtaWx5KTpcbisgICAgXCJcIlwiIFJldHVybiB0aGUgcGF0aCB0byB0aGUgWUFNTCBzcGVjIGZpbGUgZm9yIGEgZmFtaWx5IGJ5IG5hbWUuIFwiXCJcIlxuKyAgICBzcGVjID0gZlwie3NwZWNfZGlyKCl9L3tmYW1pbHl9LnlhbWxcIlxuKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3BlYyk6XG4rICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmXCJTcGVjIGZvciBmYW1pbHkgJ3tmYW1pbHl9JyBub3QgZm91bmQgYXQge3NwZWN9XCIpXG4rICAgIHJldHVybiBzcGVjXG4rXG4rXG4rZGVmIGxpc3RfZmFtaWxpZXMoKTpcbisgICAgXCJcIlwiIFJldHVybiB0aGUgc29ydGVkIG5hbWVzIG9mIGFsbCBmYW1pbGllcyB3aXRoIGFuIGluc3RhbGxlZCBzcGVjLiBcIlwiXCJcbisgICAgcmV0dXJuIHNvcnRlZChmLnJlbW92ZXN1ZmZpeCgnLnlhbWwnKVxuKyAgICAgICAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc3BlY19kaXIoKSkgaWYgZi5lbmRzd2l0aCgnLnlhbWwnKSlcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbmluZGV4IDA5MmQxMzJlZGVjMTJmLi44NjgyYmY1ODhlMWZhMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5AQCAtNjYxLDYgKzY2MSwxNCBAQCBjbGFzcyBZbmxGYW1pbHkoU3BlY0ZhbWlseSk6XG4gICAgIFwiXCJcIlxuICAgICBZTkwgZmFtaWx5IC0tIGEgTmV0bGluayBpbnRlcmZhY2UgYnVpbHQgZnJvbSBhIFlBTUwgc3BlYy5cbiBcbisgICAgVGhlIHNwZWMgY2FuIGJlIHNlbGVjdGVkIGVpdGhlciBieSBmaWxlIHBhdGggKGRlZl9wYXRoPSkgb3IsIHdoZW4gaXRcbisgICAgc2hpcHMgaW4gYSB3ZWxsLWtub3duIGxvY2F0aW9uLCBieSBmYW1pbHkgbmFtZSAoZmFtaWx5PVwieHl6XCIpOyBleGFjdGx5XG4rICAgIG9uZSBvZiB0aGUgdHdvIG11c3QgYmUgZ2l2ZW4uIEZvciBleGFtcGxlOlxuK1xuKyAgICAgIGZyb20gcHl5bmwgaW1wb3J0IFlubEZhbWlseVxuK1xuKyAgICAgIHlubCA9IFlubEZhbWlseShmYW1pbHk9XCJuZXRkZXZcIilcbitcbiAgICAgUHJpbWFyeSB1c2Ugb2YgdGhlIGNsYXNzIGlzIHRvIGV4ZWN1dGUgTmV0bGluayBjb21tYW5kczpcbiBcbiAgICAgICB5bmwuXHUwMDNjb3BfbmFtZVx1MDAzZShhdHRycywgLi4uKVxuQEAgLTY5MSwxMSArNjk5LDE2IEBAIGNsYXNzIFlubEZhbWlseShTcGVjRmFtaWx5KTpcbiBcbiAgICAgICB5bmwuZ2V0X3BvbGljeShvcF9uYW1lLCBtb2RlKSAgICAgIC0tIHF1ZXJ5IGtlcm5lbCBwb2xpY3kgZm9yIGFuIG9wXG4gICAgIFwiXCJcIlxuLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmX3BhdGgsIHNjaGVtYT1Ob25lLCBwcm9jZXNzX3Vua25vd249RmFsc2UsXG4tICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCk6XG4tICAgICAgICBzdXBlcigpLl9faW5pdF9fKGRlZl9wYXRoLCBzY2hlbWEpXG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZfcGF0aD1Ob25lLCBzY2hlbWE9Tm9uZSwgcHJvY2Vzc191bmtub3duPU5vbmUsXG4rICAgICAgICAgICAgICAgICByZWN2X3NpemU9MCwgZmFtaWx5PU5vbmUpOlxuKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkZWZfcGF0aCwgc2NoZW1hLCBmYW1pbHk9ZmFtaWx5KVxuIFxuICAgICAgICAgc2VsZi5pbmNsdWRlX3JhdyA9IEZhbHNlXG4rICAgICAgICAjIFNwZWNzIGZyb20gL3VzciAoc2VsZWN0ZWQgYnkgZmFtaWx5PSkgaGF2ZSBhIGhpZ2hlciBjaGFuY2Ugb2YgYmVpbmdcbisgICAgICAgICMgc3RhbGUsIGRlZmF1bHQgdG8gaWdub3JpbmcgdW5rbm93biBhdHRycy4gSW4tdHJlZSB1c2VycywgYW5kIHVzZXJzXG4rICAgICAgICAjIHdobyBidW5kbGUgdGhlIHNwZWMgbmVlZCB0byBtYWtlIGEgY29uc2Npb3VzIGRlY2lzaW9uLlxuKyAgICAgICAgaWYgcHJvY2Vzc191bmtub3duIGlzIE5vbmU6XG4rICAgICAgICAgICAgcHJvY2Vzc191bmtub3duID0gZmFtaWx5IGlzIG5vdCBOb25lXG4gICAgICAgICBzZWxmLnByb2Nlc3NfdW5rbm93biA9IHByb2Nlc3NfdW5rbm93blxuIFxuICAgICAgICAgdHJ5OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weSBiL3Rvb2xzL25ldC95bmwvdGVzdHMvZXRodG9vbC5weVxuaW5kZXggZGIzYjYyYzY1MmU3N2YuLjBlZTBjOGU4NzY4NmJlIDEwMDc1NVxuLS0tIGEvdG9vbHMvbmV0L3lubC90ZXN0cy9ldGh0b29sLnB5XG4rKysgYi90b29scy9uZXQveW5sL3Rlc3RzL2V0aHRvb2wucHlcbkBAIC0xMSwxMiArMTEsMTAgQEAgaW1wb3J0IHBhdGhsaWJcbiBpbXBvcnQgcHByaW50XG4gaW1wb3J0IHN5c1xuIGltcG9ydCByZVxuLWltcG9ydCBvc1xuIFxuICMgcHlsaW50OiBkaXNhYmxlPW5vLW5hbWUtaW4tbW9kdWxlLHdyb25nLWltcG9ydC1wb3NpdGlvblxuIHN5cy5wYXRoLmFwcGVuZChwYXRobGliLlBhdGgoX19maWxlX18pLnJlc29sdmUoKS5wYXJlbnQucGFyZW50LmpvaW5wYXRoKCdweXlubCcpLmFzX3Bvc2l4KCkpXG4gIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yXG4tZnJvbSBjbGkgaW1wb3J0IHNjaGVtYV9kaXIsIHNwZWNfZGlyXG4gZnJvbSBsaWIgaW1wb3J0IFlubEZhbWlseVxuIFxuIFxuQEAgLTE3MywxMCArMTcxLDcgQEAgZGVmIG1haW4oKTpcbiBcbiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKClcbiBcbi0gICAgc3BlYyA9IG9zLnBhdGguam9pbihzcGVjX2RpcigpLCAnZXRodG9vbC55YW1sJylcbi0gICAgc2NoZW1hID0gb3MucGF0aC5qb2luKHNjaGVtYV9kaXIoKSwgJ2dlbmV0bGluay1sZWdhY3kueWFtbCcpXG4tXG4tICAgIHlubCA9IFlubEZhbWlseShzcGVjLCBzY2hlbWEsIHJlY3Zfc2l6ZT1hcmdzLmRiZ19zbWFsbF9yZWN2KVxuKyAgICB5bmwgPSBZbmxGYW1pbHkoZmFtaWx5PSdldGh0b29sJywgcmVjdl9zaXplPWFyZ3MuZGJnX3NtYWxsX3JlY3YpXG4gICAgIGlmIGFyZ3MuZGJnX3NtYWxsX3JlY3Y6XG4gICAgICAgICB5bmwuc2V0X3JlY3ZfZGJnKFRydWUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwNzoyOToyOS4xMDE4Mzc1MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY0MDMxODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBQeXRob24gY29kZSB3aXRoaW4gYHRvb2xzL25ldC95bmwvcHl5bmwvYC4gSSByZWNvZ25pemUgdGhpcyBhcyB0aGUgdXNlci1zcGFjZSBZQU1MIE5ldGxpbmsgbGlicmFyeSAoWU5MKSwgd2hpY2ggbWFrZXMgaXQgY2xlYXIgdGhpcyBpcyBhIHRvb2xpbmcgbGF5ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggTmV0bGluay4gR29vZCwgZ29vZC4gSXQncyBjb25maW5lZCB0byBgdG9vbHMvYCwgd2hpY2ggbWVhbnMgdGhpcyBpcyAqKm5vdCoqIG1vZGlmeWluZyBhbnkgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGNvZGUgaXRzZWxmIGlzIHB5dGhvbiBzY3JpcHRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgdG9vbCBkaXJlY3RvcnkuIFxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZDogYF9faW5pdF9fLnB5YCwgYGNsaS5weWAsIHRoZSBgbGliYCBkaXJlY3RvcnkncyBgX19pbml0X18ucHlgLCBgbmxzcGVjLnB5YCwgYHNwZWNkaXIucHlgLCBgeW5sLnB5YCwgYW5kIGZpbmFsbHkgYSB0ZXN0IGZpbGUsIGBldGh0b29sLnB5YC4gQWxsIGFyZSB3aXRoaW4gdGhhdCBzcGVjaWZpZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4gTm8ga2VybmVsIGhlYWRlcnMsIG5vIGtlcm5lbCBtb2R1bGVzLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgaW1wYWN0cyBrZXJuZWwgZXhlY3V0aW9uLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyBhbGwgd2l0aGluIHRoZSB1c2VyLXNwYWNlIGB0b29scy9gIGRpcmVjdG9yeSBhbmQgaXQgaXMgb25seSBtb2RpZmljYXRpb25zIHRvIFB5dGhvbiBzY3JpcHRzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgZnV6emluZyB0aGUga2VybmVsLiBJdCdzIGEgbm9uLWlzc3VlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuXG5cblNvLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIE5vIHJlYXNvbiB0byBldmVuIGxvb2sgYXQgdGhlIGZvY3VzIHN5bWJvbHMgb3IgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiBwdXJlIHVzZXItc3BhY2UgdG9vbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYxMCwiT3V0cHV0VG9rZW5zIjo2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA3OjI5OjM1LjQ2NTg3Mjc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzExMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiB0b29saW5nIGZvciBOZXRsaW5rIChZTkwpIGluIHRvb2xzL25ldC95bmwvIGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiB0b29saW5nIGZvciBOZXRsaW5rIChZTkwpIGluIHRvb2xzL25ldC95bmwvIGFuZCBkb2VzIG5vdCBjaGFuZ2UgYW55IGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx4tcz[1] Phase: Running StartedAt: 2026-07-01 07:30:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx4tcz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 07:30:40 +0000 UTC FinishedAt: 2026-07-01 07:30:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}